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

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa Optymalizacja kosztów - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/optymalizacja-kosztow/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ogrzewanie elektryczne vs wodna podłogówka: Kalkulator kosztów eksploatacji.</title>
		<link>https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 31 May 2026 18:20:19 +0000</pubDate>
				<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie elektryczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Optymalizacja kosztów]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[kalkulator kosztów eksploatacji]]></category>
		<category><![CDATA[koszty folii grzewczych]]></category>
		<category><![CDATA[obliczenia ozc dla domu]]></category>
		<category><![CDATA[ogrzewanie elektryczne vs wodna podłogówka]]></category>
		<category><![CDATA[opłacalność pompy ciepła]]></category>
		<category><![CDATA[opór cieplny paneli]]></category>
		<category><![CDATA[projekt instalacji ogrzewania podłogowego]]></category>
		<category><![CDATA[rachunki za prąd zimą]]></category>
		<category><![CDATA[tco ogrzewania]]></category>
		<category><![CDATA[wylewka pod ogrzewanie podłogowe]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=5374</guid>

					<description><![CDATA[<p>Wielu inwestorów na etapie stanu surowego szuka natychmiastowych oszczędności, co często prowadzi do kosztownych pomyłek przy wyborze instalacji grzewczej. Zamiast ulegać marketingowym zapewnieniom o niskich kosztach montażu mat czy folii, warto przeprowadzić chłodną kalkulację inżynierską. Artykuł Ogrzewanie elektryczne vs wodna podłogówka: Kalkulator kosztów eksploatacji na przestrzeni 20 lat w brutalny sposób weryfikuje opłacalność obu systemów. Poznaj realne dane o zimowej luce energetycznej, wpływie automatyki na COP pompy ciepła oraz dowiedz się, dlaczego otwarta infrastruktura hydrauliczna chroni Twój domowy budżet przed wieloletnim, drogim abonamentem.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/">Ogrzewanie elektryczne vs wodna podłogówka: Kalkulator kosztów eksploatacji.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-energy-choice {
    --rk-dark: #102536;
    --rk-navy: #15384d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e8fafd;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff0ea;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #b47600;
    --rk-yellow-soft: #fff8df;
    --rk-red: #c7443a;
    --rk-red-soft: #fff0ee;
    --rk-purple: #6659c7;
    --rk-purple-soft: #f1efff;
    --rk-ink: #1c2d38;
    --rk-text: #465d6c;
    --rk-muted: #687f8d;
    --rk-line: #d6e5eb;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    width: 100%;
    color: var(--rk-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 17px;
    line-height: 1.72;
  }

  #rk-energy-choice,
  #rk-energy-choice *,
  #rk-energy-choice *::before,
  #rk-energy-choice *::after { box-sizing: border-box; }
  #rk-energy-choice [hidden] { display: none !important; }
  #rk-energy-choice img,
  #rk-energy-choice svg { display: block; max-width: 100%; }
  #rk-energy-choice button,
  #rk-energy-choice input,
  #rk-energy-choice select,
  #rk-energy-choice summary { font: inherit; }
  #rk-energy-choice button { cursor: pointer; -webkit-tap-highlight-color: transparent; }
  #rk-energy-choice a {
    color: #007fae;
    font-weight: 760;
    text-decoration-thickness: 1.4px;
    text-underline-offset: 3px;
  }
  #rk-energy-choice a:hover { color: #005d82; }
  #rk-energy-choice a:focus-visible,
  #rk-energy-choice button:focus-visible,
  #rk-energy-choice input:focus-visible,
  #rk-energy-choice select:focus-visible,
  #rk-energy-choice summary:focus-visible {
    outline: 3px solid rgba(37, 199, 216, .5);
    outline-offset: 3px;
  }
  #rk-energy-choice h2,
  #rk-energy-choice h3,
  #rk-energy-choice h4,
  #rk-energy-choice p,
  #rk-energy-choice ul,
  #rk-energy-choice ol,
  #rk-energy-choice blockquote { margin-top: 0; }
  #rk-energy-choice h2,
  #rk-energy-choice h3,
  #rk-energy-choice h4 { color: var(--rk-dark); line-height: 1.18; }
  #rk-energy-choice h2 {
    margin-bottom: 18px;
    font-size: clamp(1.7rem, 3.6vw, 2.55rem);
    font-weight: 920;
    letter-spacing: -.035em;
  }
  #rk-energy-choice h3 {
    margin: 28px 0 12px;
    font-size: clamp(1.16rem, 2.2vw, 1.46rem);
    font-weight: 880;
    letter-spacing: -.02em;
  }
  #rk-energy-choice h4 { margin: 21px 0 8px; font-size: 1.04rem; }
  #rk-energy-choice p { margin-bottom: 18px; color: var(--rk-text); }
  #rk-energy-choice strong { color: var(--rk-ink); }
  #rk-energy-choice ul,
  #rk-energy-choice ol { margin-bottom: 22px; padding-left: 1.3em; color: var(--rk-text); }
  #rk-energy-choice li { margin-bottom: 8px; }
  #rk-energy-choice section[id] { scroll-margin-top: 24px; }

  #rk-energy-choice .rk-ec-shell {
    width: min(100%, 1280px);
    margin: 0 auto;
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 28px;
    background: var(--rk-white);
    box-shadow: 0 22px 70px rgba(16, 37, 54, .09);
  }

  #rk-energy-choice .rk-ec-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(36px, 6vw, 76px) clamp(24px, 6vw, 74px) clamp(30px, 5vw, 58px);
    background:
      radial-gradient(circle at 8% 118%, rgba(255, 106, 61, .22), transparent 38%),
      linear-gradient(128deg, #102536 0%, #123d51 55%, #0c6971 100%);
  }
  #rk-energy-choice .rk-ec-hero::before,
  #rk-energy-choice .rk-ec-hero::after {
    position: absolute;
    z-index: -1;
    border: clamp(22px, 4vw, 48px) solid rgba(255, 255, 255, .055);
    border-radius: 50%;
    content: "";
    pointer-events: none;
  }
  #rk-energy-choice .rk-ec-hero::before { right: -115px; bottom: -185px; width: 390px; height: 390px; }
  #rk-energy-choice .rk-ec-hero::after { right: 125px; bottom: -238px; width: 290px; height: 290px; }
  #rk-energy-choice .rk-ec-kicker,
  #rk-energy-choice .rk-ec-eyebrow {
    display: block;
    margin-bottom: 13px;
    color: var(--rk-orange);
    font-size: .76rem;
    font-weight: 900;
    letter-spacing: .13em;
    line-height: 1.35;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-hero-title {
    max-width: 1100px;
    margin: 0 0 20px;
    color: #ffffff !important;
    font-size: clamp(2.05rem, 5.1vw, 4.4rem);
    font-weight: 950;
    line-height: .99;
    letter-spacing: -.06em;
  }
  #rk-energy-choice .rk-ec-hero-title span { color: #63e5f2 !important; }
  #rk-energy-choice .rk-ec-lead {
    max-width: 1050px;
    margin-bottom: 24px;
    color: #dceef2;
    font-size: clamp(1.03rem, 2vw, 1.31rem);
    line-height: 1.62;
  }
  #rk-energy-choice .rk-ec-hero-tags,
  #rk-energy-choice .rk-ec-byline { display: flex; flex-wrap: wrap; gap: 10px 12px; }
  #rk-energy-choice .rk-ec-hero-tag {
    display: inline-flex;
    align-items: center;
    min-height: 36px;
    padding: 6px 15px;
    border: 1px solid rgba(255, 255, 255, .22);
    border-radius: 999px;
    background: rgba(255, 255, 255, .07);
    color: #ffffff !important;
    font-size: .78rem;
    font-weight: 850;
  }
  #rk-energy-choice .rk-ec-byline {
    margin-top: 23px;
    color: #e2f1f4 !important;
    font-size: .82rem;
    font-weight: 760;
  }
  #rk-energy-choice .rk-ec-byline span,
  #rk-energy-choice .rk-ec-byline strong { color: #ffffff !important; }
  #rk-energy-choice .rk-ec-hero-metrics {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 34px;
  }
  #rk-energy-choice .rk-ec-hero-metric {
    min-width: 0;
    padding: 22px;
    border: 1px solid rgba(255, 255, 255, .19);
    border-radius: 19px;
    background: rgba(255, 255, 255, .075);
    backdrop-filter: blur(3px);
  }
  #rk-energy-choice .rk-ec-hero-metric b {
    display: block;
    margin-bottom: 7px;
    color: #ffffff !important;
    font-size: 1rem;
    line-height: 1.35;
  }
  #rk-energy-choice .rk-ec-hero-metric span {
    display: block;
    color: #dceef2 !important;
    font-size: .91rem;
    line-height: 1.55;
  }

  #rk-energy-choice .rk-ec-nav {
    padding: 22px clamp(18px, 4vw, 48px) 24px;
    border-bottom: 1px solid var(--rk-line);
    background: #f4fafc;
  }
  #rk-energy-choice .rk-ec-nav-label {
    display: block;
    margin-bottom: 11px;
    color: var(--rk-dark);
    font-size: .74rem;
    font-weight: 950;
    letter-spacing: .12em;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-nav-track { display: flex; flex-wrap: wrap; gap: 8px; }
  #rk-energy-choice .rk-ec-nav a {
    display: inline-flex;
    align-items: center;
    min-height: 34px;
    padding: 6px 11px;
    border: 1px solid #c9e0e8;
    border-radius: 999px;
    background: #ffffff;
    color: #345264;
    font-size: .76rem;
    font-weight: 820;
    line-height: 1.25;
    text-decoration: none;
  }
  #rk-energy-choice .rk-ec-nav a:hover { border-color: var(--rk-blue); color: var(--rk-blue); }

  #rk-energy-choice .rk-ec-section {
    padding: clamp(42px, 6vw, 76px) clamp(22px, 6vw, 74px);
    border-bottom: 1px solid var(--rk-line);
  }
  #rk-energy-choice .rk-ec-section:last-child { border-bottom: 0; }
  #rk-energy-choice .rk-ec-section-soft { background: var(--rk-soft); }
  #rk-energy-choice .rk-ec-section-dark {
    background: linear-gradient(135deg, #102536, #17485b);
  }
  #rk-energy-choice .rk-ec-section-dark h2,
  #rk-energy-choice .rk-ec-section-dark h3,
  #rk-energy-choice .rk-ec-section-dark h4,
  #rk-energy-choice .rk-ec-section-dark strong { color: #ffffff; }
  #rk-energy-choice .rk-ec-section-dark p,
  #rk-energy-choice .rk-ec-section-dark li { color: #dceef2; }
  #rk-energy-choice .rk-ec-section-dark a { color: #72e4f0; }
  #rk-energy-choice .rk-ec-section-dark .rk-ec-eyebrow { color: #ff8b67; }
  #rk-energy-choice .rk-ec-section-dark .rk-ec-card h3,
  #rk-energy-choice .rk-ec-section-dark .rk-ec-card h4,
  #rk-energy-choice .rk-ec-section-dark .rk-ec-card strong { color: var(--rk-dark); }
  #rk-energy-choice .rk-ec-section-dark .rk-ec-card p,
  #rk-energy-choice .rk-ec-section-dark .rk-ec-card li { color: var(--rk-text); }
  #rk-energy-choice .rk-ec-section-title { max-width: 1060px; }
  #rk-energy-choice .rk-ec-section-lead {
    max-width: 1030px;
    color: #526b79;
    font-size: 1.08rem;
    line-height: 1.7;
  }

  #rk-energy-choice .rk-ec-grid-2,
  #rk-energy-choice .rk-ec-grid-3,
  #rk-energy-choice .rk-ec-grid-4 { display: grid; gap: 18px; }
  #rk-energy-choice .rk-ec-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-card {
    min-width: 0;
    padding: 23px;
    border: 1px solid var(--rk-line);
    border-radius: 19px;
    background: #ffffff;
    box-shadow: 0 9px 27px rgba(16, 37, 54, .045);
  }
  #rk-energy-choice .rk-ec-card h3 { margin-top: 0; }
  #rk-energy-choice .rk-ec-card p:last-child,
  #rk-energy-choice .rk-ec-card ul:last-child { margin-bottom: 0; }
  #rk-energy-choice .rk-ec-card-label {
    display: inline-flex;
    margin-bottom: 12px;
    padding: 5px 10px;
    border-radius: 999px;
    background: var(--rk-cyan-soft);
    color: #057596;
    font-size: .69rem;
    font-weight: 900;
    line-height: 1.25;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-card-label.is-orange { background: var(--rk-orange-soft); color: #b64625; }
  #rk-energy-choice .rk-ec-card-label.is-green { background: var(--rk-green-soft); color: var(--rk-green); }

  #rk-energy-choice .rk-ec-answer {
    margin: 24px 0;
    padding: 25px 28px;
    border-left: 6px solid var(--rk-cyan);
    border-radius: 8px 20px 20px 8px;
    background: linear-gradient(120deg, #e8fafd, #f7fcfd);
  }
  #rk-energy-choice .rk-ec-answer-label {
    display: block;
    margin-bottom: 8px;
    color: #057596;
    font-size: .72rem;
    font-weight: 900;
    letter-spacing: .11em;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-answer p:last-child { margin-bottom: 0; }
  #rk-energy-choice .rk-ec-callout,
  #rk-energy-choice .rk-ec-warning,
  #rk-energy-choice .rk-ec-note {
    margin: 24px 0;
    padding: 20px 23px;
    border-radius: 16px;
  }
  #rk-energy-choice .rk-ec-callout { border: 1px solid #bde7ed; background: var(--rk-cyan-soft); color: #294c5d; }
  #rk-energy-choice .rk-ec-warning { border: 1px solid #efd7a1; background: var(--rk-yellow-soft); color: #634d1d; }
  #rk-energy-choice .rk-ec-note { border: 1px solid #d6d0f6; background: var(--rk-purple-soft); color: #494477; }
  #rk-energy-choice .rk-ec-callout p:last-child,
  #rk-energy-choice .rk-ec-warning p:last-child,
  #rk-energy-choice .rk-ec-note p:last-child { margin-bottom: 0; }

  #rk-energy-choice .rk-ec-table {
    overflow: hidden;
    margin: 25px 0;
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-table table { width: 100%; border-collapse: collapse; table-layout: fixed; }
  #rk-energy-choice .rk-ec-table th,
  #rk-energy-choice .rk-ec-table td {
    padding: 16px 18px;
    border-right: 1px solid var(--rk-line);
    border-bottom: 1px solid var(--rk-line);
    color: var(--rk-text);
    vertical-align: top;
    overflow-wrap: anywhere;
  }
  #rk-energy-choice .rk-ec-table th:last-child,
  #rk-energy-choice .rk-ec-table td:last-child { border-right: 0; }
  #rk-energy-choice .rk-ec-table tr:last-child td { border-bottom: 0; }
  #rk-energy-choice .rk-ec-table thead th {
    background: #15384d;
    color: #ffffff;
    font-size: .79rem;
    font-weight: 900;
    letter-spacing: .02em;
    text-align: left;
  }
  #rk-energy-choice .rk-ec-table tbody th {
    background: #f6fafb;
    color: var(--rk-dark);
    font-weight: 850;
    text-align: left;
  }
  #rk-energy-choice .rk-ec-table td strong { display: block; margin-bottom: 3px; }

  #rk-energy-choice .rk-ec-equation {
    margin: 25px 0;
    padding: 25px;
    border: 1px solid #bfdde7;
    border-radius: 19px;
    background: linear-gradient(135deg, #f2fbfd, #ffffff);
  }
  #rk-energy-choice .rk-ec-equation-label {
    display: block;
    margin-bottom: 8px;
    color: #057596;
    font-size: .72rem;
    font-weight: 900;
    letter-spacing: .1em;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-equation-main {
    color: var(--rk-dark);
    font-size: clamp(1.05rem, 2.2vw, 1.35rem);
    font-weight: 900;
    line-height: 1.5;
    overflow-wrap: anywhere;
  }
  #rk-energy-choice .rk-ec-equation p { margin: 10px 0 0; font-size: .91rem; }

  #rk-energy-choice .rk-ec-source-switch {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin: 0 0 22px;
  }
  #rk-energy-choice .rk-ec-source-switch button,
  #rk-energy-choice .rk-ec-mode-switch button,
  #rk-energy-choice .rk-ec-chart-tabs button {
    min-height: 44px;
    padding: 9px 15px;
    border: 1px solid #bcd6df;
    border-radius: 12px;
    background: #ffffff;
    color: #294b5d;
    font-weight: 850;
    line-height: 1.25;
  }
  #rk-energy-choice .rk-ec-source-switch button[aria-pressed="true"],
  #rk-energy-choice .rk-ec-mode-switch button[aria-pressed="true"],
  #rk-energy-choice .rk-ec-chart-tabs button[aria-pressed="true"] {
    border-color: var(--rk-blue);
    background: var(--rk-blue);
    color: #ffffff;
  }
  #rk-energy-choice .rk-ec-system-map {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
  }
  #rk-energy-choice .rk-ec-flow-card {
    min-width: 0;
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-flow-card.is-electric { border-top: 5px solid var(--rk-orange); }
  #rk-energy-choice .rk-ec-flow-card.is-water { border-top: 5px solid var(--rk-cyan); }
  #rk-energy-choice .rk-ec-flow-title { margin: 0 0 17px; color: var(--rk-dark); font-weight: 900; }
  #rk-energy-choice .rk-ec-flow {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    align-items: stretch;
    gap: 8px;
    margin-bottom: 18px;
  }
  #rk-energy-choice .rk-ec-flow.is-five { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-flow-node {
    display: grid;
    place-items: center;
    min-width: 0;
    min-height: 78px;
    padding: 10px 7px;
    border: 1px solid #cfe0e6;
    border-radius: 13px;
    background: #f7fbfc;
    color: #294b5d;
    font-size: .75rem;
    font-weight: 850;
    line-height: 1.28;
    text-align: center;
    overflow-wrap: anywhere;
  }
  #rk-energy-choice .rk-ec-flow-node + .rk-ec-flow-node { position: relative; }
  #rk-energy-choice .rk-ec-flow-node + .rk-ec-flow-node::before {
    position: absolute;
    left: -9px;
    top: 50%;
    width: 9px;
    height: 2px;
    background: #8db8c6;
    content: "";
  }
  #rk-energy-choice .rk-ec-flow-formula {
    padding: 15px 17px;
    border-radius: 13px;
    background: var(--rk-soft);
    color: #355669;
    font-size: .84rem;
    line-height: 1.55;
  }

  #rk-energy-choice .rk-ec-tool {
    overflow: hidden;
    margin-top: 27px;
    border: 1px solid #bfd9e3;
    border-radius: 24px;
    background: #ffffff;
    box-shadow: 0 18px 44px rgba(16, 37, 54, .09);
  }
  #rk-energy-choice .rk-ec-tool-head {
    padding: 27px clamp(20px, 4vw, 38px);
    background: linear-gradient(125deg, #102536, #13566b);
  }
  #rk-energy-choice .rk-ec-tool-head h3 { margin: 0 0 8px; color: #ffffff; }
  #rk-energy-choice .rk-ec-tool-head p { margin: 0; color: #dceef2; }
  #rk-energy-choice .rk-ec-tool-head .rk-ec-eyebrow { color: #ff8b67; }
  #rk-energy-choice .rk-ec-tool-body { padding: clamp(20px, 4vw, 38px); }
  #rk-energy-choice .rk-ec-tool-intro {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 18px;
    margin-bottom: 24px;
  }
  #rk-energy-choice .rk-ec-tool-intro p { margin: 0; }
  #rk-energy-choice .rk-ec-reset {
    min-height: 42px;
    padding: 8px 14px;
    border: 1px solid #bdd4dd;
    border-radius: 11px;
    background: #ffffff;
    color: #345264;
    font-weight: 820;
  }
  #rk-energy-choice .rk-ec-mode-switch {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    margin-bottom: 17px;
  }
  #rk-energy-choice .rk-ec-field-grid {
    display: grid;
    gap: 14px;
    margin-bottom: 18px;
  }
  #rk-energy-choice .rk-ec-field-grid.is-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-field-grid.is-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-field-grid.is-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-energy-choice .rk-ec-field {
    min-width: 0;
    padding: 16px;
    border: 1px solid #d1e1e7;
    border-radius: 15px;
    background: #fafdfe;
  }
  #rk-energy-choice .rk-ec-field label,
  #rk-energy-choice .rk-ec-field-title {
    display: block;
    margin-bottom: 7px;
    color: var(--rk-dark);
    font-size: .84rem;
    font-weight: 880;
    line-height: 1.35;
  }
  #rk-energy-choice .rk-ec-field input,
  #rk-energy-choice .rk-ec-field select {
    width: 100%;
    min-height: 46px;
    padding: 9px 11px;
    border: 1px solid #adc8d2;
    border-radius: 10px;
    background: #ffffff;
    color: var(--rk-dark);
    font-weight: 780;
  }
  #rk-energy-choice .rk-ec-field-help {
    display: block;
    margin-top: 7px;
    color: #657d8b;
    font-size: .72rem;
    line-height: 1.42;
  }
  #rk-energy-choice .rk-ec-advanced {
    margin: 18px 0 25px;
    border: 1px solid #d2e2e8;
    border-radius: 16px;
    background: #f8fbfc;
  }
  #rk-energy-choice .rk-ec-advanced summary {
    position: relative;
    padding: 17px 48px 17px 18px;
    color: var(--rk-dark);
    font-weight: 880;
    list-style: none;
    cursor: pointer;
  }
  #rk-energy-choice .rk-ec-advanced summary::-webkit-details-marker { display: none; }
  #rk-energy-choice .rk-ec-advanced summary::after {
    position: absolute;
    right: 18px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--rk-blue);
    font-size: 1.35rem;
    content: "+";
  }
  #rk-energy-choice .rk-ec-advanced[open] summary::after { content: "−"; }
  #rk-energy-choice .rk-ec-advanced-content { padding: 0 18px 18px; }
  #rk-energy-choice .rk-ec-validation {
    min-height: 25px;
    margin: -2px 0 18px;
    color: var(--rk-red);
    font-size: .78rem;
    font-weight: 780;
  }

  #rk-energy-choice .rk-ec-results {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin-top: 25px;
  }
  #rk-energy-choice .rk-ec-result-system {
    min-width: 0;
    padding: 23px;
    border: 1px solid var(--rk-line);
    border-radius: 19px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-result-system.is-direct { border-top: 5px solid var(--rk-orange); }
  #rk-energy-choice .rk-ec-result-system.is-pump { border-top: 5px solid var(--rk-cyan); }
  #rk-energy-choice .rk-ec-result-system h4 { margin-top: 0; }
  #rk-energy-choice .rk-ec-result-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }
  #rk-energy-choice .rk-ec-result-item {
    min-width: 0;
    padding: 14px;
    border-radius: 12px;
    background: var(--rk-soft);
  }
  #rk-energy-choice .rk-ec-result-item span,
  #rk-energy-choice .rk-ec-result-item strong { display: block; }
  #rk-energy-choice .rk-ec-result-item span { color: #617987; font-size: .69rem; font-weight: 830; line-height: 1.35; }
  #rk-energy-choice .rk-ec-result-item strong { margin-top: 5px; color: var(--rk-dark); font-size: 1rem; line-height: 1.3; overflow-wrap: anywhere; }
  #rk-energy-choice .rk-ec-verdict {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin: 18px 0 0;
    padding: 19px;
    border: 1px solid #bde2e7;
    border-radius: 17px;
    background: linear-gradient(120deg, #eafafd, #f8fdfd);
  }
  #rk-energy-choice .rk-ec-verdict > div { min-width: 0; }
  #rk-energy-choice .rk-ec-verdict span,
  #rk-energy-choice .rk-ec-verdict strong { display: block; }
  #rk-energy-choice .rk-ec-verdict span { color: #55717e; font-size: .71rem; font-weight: 820; }
  #rk-energy-choice .rk-ec-verdict strong { margin-top: 5px; color: var(--rk-dark); line-height: 1.35; overflow-wrap: anywhere; }

  #rk-energy-choice .rk-ec-chart-panel {
    margin-top: 22px;
    padding: 21px;
    border: 1px solid #c8dce3;
    border-radius: 19px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-chart-head {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-start;
    justify-content: space-between;
    gap: 15px;
  }
  #rk-energy-choice .rk-ec-chart-head h4 { margin: 0; }
  #rk-energy-choice .rk-ec-chart-tabs { display: flex; flex-wrap: wrap; gap: 7px; }
  #rk-energy-choice .rk-ec-chart-tabs button { min-height: 39px; padding: 7px 11px; font-size: .73rem; }
  #rk-energy-choice .rk-ec-chart-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 9px 18px;
    margin: 16px 0 7px;
    color: #556f7d;
    font-size: .76rem;
    font-weight: 820;
  }
  #rk-energy-choice .rk-ec-chart-legend span { display: inline-flex; align-items: center; gap: 7px; }
  #rk-energy-choice .rk-ec-chart-legend i { display: inline-block; width: 22px; height: 7px; border-radius: 999px; }
  #rk-energy-choice .rk-ec-chart-legend .is-direct { background: var(--rk-orange); }
  #rk-energy-choice .rk-ec-chart-legend .is-pump { background: var(--rk-blue); }
  #rk-energy-choice .rk-ec-chart-wrap { width: 100%; overflow: hidden; }
  #rk-energy-choice .rk-ec-chart-wrap svg { width: 100%; height: auto; min-height: 290px; font-family: inherit; }
  #rk-energy-choice .rk-ec-chart-reading {
    display: block;
    width: 100%;
    max-width: none;
    margin: 13px 0 0;
    padding: 15px 17px;
    border-left: 4px solid var(--rk-cyan);
    border-radius: 6px 13px 13px 6px;
    background: #edf8fa;
    color: #294b5d;
    font-size: .81rem;
    line-height: 1.55;
  }
  #rk-energy-choice .rk-ec-axis { stroke: #9ab2bd; stroke-width: 1.2; }
  #rk-energy-choice .rk-ec-gridline { stroke: #dce8ec; stroke-width: 1; }
  #rk-energy-choice .rk-ec-gridtext { fill: #627987; font-size: 11px; font-weight: 750; }
  #rk-energy-choice .rk-ec-path-direct { fill: none; stroke: var(--rk-orange); stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; }
  #rk-energy-choice .rk-ec-path-pump { fill: none; stroke: var(--rk-blue); stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; }
  #rk-energy-choice .rk-ec-payback-line { stroke: var(--rk-green); stroke-width: 2; stroke-dasharray: 6 5; }
  #rk-energy-choice .rk-ec-payback-label { fill: var(--rk-green); font-size: 11px; font-weight: 900; }

  #rk-energy-choice .rk-ec-scenarios {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 13px;
    margin-top: 22px;
  }
  #rk-energy-choice .rk-ec-scenario {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    background: #f9fcfd;
  }
  #rk-energy-choice .rk-ec-scenario b,
  #rk-energy-choice .rk-ec-scenario span,
  #rk-energy-choice .rk-ec-scenario strong { display: block; }
  #rk-energy-choice .rk-ec-scenario b { color: var(--rk-dark); }
  #rk-energy-choice .rk-ec-scenario span { margin: 3px 0 9px; color: #687f8d; font-size: .72rem; }
  #rk-energy-choice .rk-ec-scenario strong { color: #0c7697; font-size: .91rem; }

  #rk-energy-choice .rk-ec-step-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 15px; }
  #rk-energy-choice .rk-ec-step {
    display: grid;
    grid-template-columns: 54px minmax(0, 1fr);
    align-items: start;
    gap: 15px;
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-step-no {
    position: static;
    display: grid;
    place-items: center;
    width: 52px;
    height: 52px;
    min-width: 52px;
    min-height: 52px;
    margin: 0;
    padding: 0;
    border-radius: 50%;
    background: #d9f4f7;
    color: #0d708d;
    font-size: 1rem;
    font-weight: 950;
    line-height: 1;
    text-align: center;
  }
  #rk-energy-choice .rk-ec-step h3 { margin: 2px 0 7px; font-size: 1.04rem; }
  #rk-energy-choice .rk-ec-step p { margin: 0; font-size: .9rem; }

  #rk-energy-choice .rk-ec-cta {
    position: relative;
    overflow: hidden;
    margin: 31px 0 0;
    padding: clamp(25px, 5vw, 42px);
    border-radius: 22px;
    background: linear-gradient(128deg, #102536, #125268);
    color: #ffffff;
  }
  #rk-energy-choice .rk-ec-cta::after {
    position: absolute;
    right: -70px;
    bottom: -100px;
    width: 240px;
    height: 240px;
    border: 32px solid rgba(255, 255, 255, .055);
    border-radius: 50%;
    content: "";
    pointer-events: none;
  }
  #rk-energy-choice .rk-ec-cta > * { position: relative; z-index: 1; }
  #rk-energy-choice .rk-ec-cta .rk-ec-eyebrow { color: #ff8b67; }
  #rk-energy-choice .rk-ec-cta-title {
    max-width: 850px;
    margin-bottom: 12px;
    color: #ffffff;
    font-size: clamp(1.45rem, 3vw, 2.2rem);
    font-weight: 920;
    line-height: 1.14;
    letter-spacing: -.035em;
  }
  #rk-energy-choice .rk-ec-cta p { max-width: 920px; margin-bottom: 19px; color: #dceef2; }
  #rk-energy-choice .rk-ec-cta-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 50px;
    padding: 12px 20px;
    border-radius: 12px;
    background: var(--rk-orange);
    color: #ffffff !important;
    font-weight: 900;
    line-height: 1.3;
    text-align: center;
    text-decoration: none;
    box-shadow: 0 10px 24px rgba(0, 0, 0, .16);
  }
  #rk-energy-choice .rk-ec-cta-button:hover { background: #e8572f; color: #ffffff !important; }
  #rk-energy-choice .rk-ec-disclosure { display: block; margin-top: 10px; color: #bcd5dc; font-size: .68rem; }

  #rk-energy-choice .rk-ec-faq { display: grid; gap: 10px; }
  #rk-energy-choice .rk-ec-faq details {
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-faq summary {
    position: relative;
    padding: 18px 52px 18px 20px;
    color: var(--rk-dark);
    font-weight: 870;
    line-height: 1.4;
    list-style: none;
    cursor: pointer;
  }
  #rk-energy-choice .rk-ec-faq summary::-webkit-details-marker { display: none; }
  #rk-energy-choice .rk-ec-faq summary::after {
    position: absolute;
    right: 20px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--rk-blue);
    font-size: 1.38rem;
    content: "+";
  }
  #rk-energy-choice .rk-ec-faq details[open] summary::after { content: "−"; }
  #rk-energy-choice .rk-ec-faq-answer { padding: 0 20px 18px; }
  #rk-energy-choice .rk-ec-faq-answer p:last-child { margin-bottom: 0; }

  #rk-energy-choice .rk-ec-sources { display: grid; gap: 12px; margin: 0; padding: 0; list-style: none; }
  #rk-energy-choice .rk-ec-sources li {
    margin: 0;
    padding: 17px 19px;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    background: #ffffff;
  }
  #rk-energy-choice .rk-ec-responsibility {
    margin-top: 24px;
    padding: 21px;
    border: 1px solid #d6e3e8;
    border-radius: 16px;
    background: #f7fafb;
  }
  #rk-energy-choice .rk-ec-responsibility p { margin-bottom: 9px; font-size: .78rem; line-height: 1.58; }
  #rk-energy-choice .rk-ec-responsibility p:last-child { margin-bottom: 0; }

  #rk-energy-choice .rk-ec-author {
    overflow: hidden;
    border-radius: 24px;
    color: #ffffff;
    background: linear-gradient(135deg, #102536, #174b5b);
  }
  #rk-energy-choice .rk-ec-author-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 22px;
    padding: 29px clamp(22px, 5vw, 42px);
    border-bottom: 1px solid rgba(255, 255, 255, .12);
  }
  #rk-energy-choice .rk-ec-author-head h2 { margin-bottom: 6px; color: #ffffff; }
  #rk-energy-choice .rk-ec-author-head p { margin-bottom: 0; color: #dcecf0; }
  #rk-energy-choice .rk-ec-author-head .rk-ec-eyebrow { color: #7cecf7; }
  #rk-energy-choice .rk-ec-author-mark {
    flex: 0 0 auto;
    padding: 8px 11px;
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: 999px;
    color: #ffffff;
    font-size: .62rem;
    font-weight: 900;
  }
  #rk-energy-choice .rk-ec-author-layout { display: grid; grid-template-columns: 245px minmax(0, 1fr); }
  #rk-energy-choice .rk-ec-author-side {
    padding: 30px 25px;
    border-right: 1px solid rgba(255, 255, 255, .12);
    text-align: center;
  }
  #rk-energy-choice .rk-ec-author-photo {
    width: 132px;
    height: 132px;
    margin: 0 auto 16px;
    overflow: hidden;
    border: 5px solid rgba(255, 255, 255, .15);
    border-radius: 50%;
  }
  #rk-energy-choice .rk-ec-author-photo img { width: 100%; height: 100%; object-fit: cover; }
  #rk-energy-choice .rk-ec-author-name { margin-bottom: 5px; font-size: 1.12rem; font-weight: 900; }
  #rk-energy-choice .rk-ec-author-name a { color: #ffffff; text-decoration: none; }
  #rk-energy-choice .rk-ec-author-role { margin: 0; color: #cfe4e9; font-size: .7rem; line-height: 1.55; }
  #rk-energy-choice .rk-ec-author-social-label {
    margin-top: 20px;
    color: #8beff7;
    font-size: .58rem;
    font-weight: 900;
    letter-spacing: .07em;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-author-social { display: flex; justify-content: center; gap: 9px; margin-top: 9px; }
  #rk-energy-choice .rk-ec-author-social a {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    color: #ffffff;
    background: rgba(255, 255, 255, .1);
    text-decoration: none;
  }
  #rk-energy-choice .rk-ec-author-social svg { width: 18px; height: 18px; fill: currentColor; }
  #rk-energy-choice .rk-ec-author-main { min-width: 0; padding: 32px clamp(23px, 5vw, 42px); }
  #rk-energy-choice .rk-ec-author-quote { position: relative; margin: 0 0 24px; padding: 4px 0 4px 58px; border: 0; }
  #rk-energy-choice .rk-ec-author-quote::before {
    position: absolute;
    top: -11px;
    left: 0;
    color: #6ee9f5;
    content: "“";
    font-family: Georgia, serif;
    font-size: 4.4rem;
    line-height: 1;
  }
  #rk-energy-choice .rk-ec-author-quote p { margin-bottom: 0; color: #ffffff; font-size: 1.02rem; font-weight: 740; }
  #rk-energy-choice .rk-ec-author-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 11px; }
  #rk-energy-choice .rk-ec-author-card { min-width: 0; padding: 16px; border-radius: 14px; background: rgba(255, 255, 255, .075); }
  #rk-energy-choice .rk-ec-author-card b { display: block; margin-bottom: 5px; color: #8beff7; font-size: .69rem; }
  #rk-energy-choice .rk-ec-author-card p { margin-bottom: 0; color: #d8e9ed; font-size: .68rem; line-height: 1.55; }
  #rk-energy-choice .rk-ec-author-mini-label {
    margin-top: 22px;
    color: #8beff7;
    font-size: .58rem;
    font-weight: 900;
    letter-spacing: .07em;
    text-transform: uppercase;
  }
  #rk-energy-choice .rk-ec-portals { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 9px; }
  #rk-energy-choice .rk-ec-portals a {
    padding: 7px 10px;
    border: 1px solid rgba(255, 255, 255, .15);
    border-radius: 999px;
    color: #ffffff;
    font-size: .62rem;
    text-decoration: none;
  }

  @media (max-width: 1020px) {
    #rk-energy-choice .rk-ec-grid-4,
    #rk-energy-choice .rk-ec-field-grid.is-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-energy-choice .rk-ec-system-map { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-flow.is-five { grid-template-columns: repeat(5, minmax(82px, 1fr)); overflow-x: auto; padding-bottom: 5px; }
  }
  @media (max-width: 820px) {
    #rk-energy-choice { font-size: 16px; }
    #rk-energy-choice .rk-ec-shell { border-radius: 20px; }
    #rk-energy-choice .rk-ec-hero-metrics,
    #rk-energy-choice .rk-ec-grid-3,
    #rk-energy-choice .rk-ec-results,
    #rk-energy-choice .rk-ec-scenarios,
    #rk-energy-choice .rk-ec-author-cards { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-step-grid { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-author-layout { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-author-side { border-right: 0; border-bottom: 1px solid rgba(255, 255, 255, .12); }
  }
  @media (max-width: 680px) {
    #rk-energy-choice .rk-ec-section { padding: 38px 18px; }
    #rk-energy-choice .rk-ec-hero { padding: 38px 20px 34px; }
    #rk-energy-choice .rk-ec-hero-title { font-size: clamp(2rem, 11vw, 3.2rem); }
    #rk-energy-choice .rk-ec-nav { padding: 18px; }
    #rk-energy-choice .rk-ec-author-head { display: block; }
    #rk-energy-choice .rk-ec-author-mark { display: inline-block; margin-top: 14px; }
    #rk-energy-choice .rk-ec-grid-2,
    #rk-energy-choice .rk-ec-grid-4,
    #rk-energy-choice .rk-ec-field-grid.is-2,
    #rk-energy-choice .rk-ec-field-grid.is-3,
    #rk-energy-choice .rk-ec-field-grid.is-4,
    #rk-energy-choice .rk-ec-result-grid,
    #rk-energy-choice .rk-ec-verdict { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-mode-switch { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-tool-intro { grid-template-columns: 1fr; }
    #rk-energy-choice .rk-ec-chart-panel { padding: 14px; }
    #rk-energy-choice .rk-ec-chart-wrap svg { min-height: 250px; }
    #rk-energy-choice .rk-ec-flow,
    #rk-energy-choice .rk-ec-flow.is-five { grid-template-columns: 1fr; overflow: visible; padding-bottom: 0; }
    #rk-energy-choice .rk-ec-flow-node + .rk-ec-flow-node::before {
      left: 50%;
      top: -9px;
      width: 2px;
      height: 9px;
      transform: translateX(-50%);
    }
    #rk-energy-choice .rk-ec-table { overflow: visible; border: 0; background: transparent; }
    #rk-energy-choice .rk-ec-table table,
    #rk-energy-choice .rk-ec-table tbody { display: block; width: 100%; }
    #rk-energy-choice .rk-ec-table thead { display: none; }
    #rk-energy-choice .rk-ec-table tr {
      display: block;
      margin-bottom: 13px;
      overflow: hidden;
      border: 1px solid var(--rk-line);
      border-radius: 15px;
      background: #ffffff;
    }
    #rk-energy-choice .rk-ec-table tbody th,
    #rk-energy-choice .rk-ec-table td {
      display: grid;
      grid-template-columns: minmax(105px, 40%) minmax(0, 1fr);
      gap: 12px;
      width: 100%;
      padding: 13px 15px;
      border-right: 0;
      border-bottom: 1px solid var(--rk-line);
      text-align: left;
    }
    #rk-energy-choice .rk-ec-table tbody th::before,
    #rk-energy-choice .rk-ec-table td::before {
      color: #617987;
      font-size: .71rem;
      font-weight: 900;
      line-height: 1.35;
      content: attr(data-label);
    }
    #rk-energy-choice .rk-ec-table tr > :last-child { border-bottom: 0; }
    #rk-energy-choice .rk-ec-step { grid-template-columns: 52px minmax(0, 1fr); padding: 17px; }
    #rk-energy-choice .rk-ec-cta-button { width: 100%; }
  }
  @media (max-width: 430px) {
    #rk-energy-choice .rk-ec-nav-track { gap: 6px; }
    #rk-energy-choice .rk-ec-nav a { width: 100%; justify-content: flex-start; }
    #rk-energy-choice .rk-ec-step { grid-template-columns: 46px minmax(0, 1fr); gap: 12px; }
    #rk-energy-choice .rk-ec-step-no { width: 44px; height: 44px; min-width: 44px; min-height: 44px; }
    #rk-energy-choice .rk-ec-author-main { padding-left: 18px; padding-right: 18px; }
  }
  @media (prefers-reduced-motion: reduce) {
    #rk-energy-choice * { scroll-behavior: auto !important; transition: none !important; }
  }
</style>

<div id="rk-energy-choice">
  <article class="rk-ec-shell" aria-label="Poradnik i kalkulator kosztów ogrzewania elektrycznego oraz wodnej podłogówki z pompą ciepła">
    <header class="rk-ec-hero">
      <span class="rk-ec-kicker">Koszt zakupu to dopiero rok zero</span>
      <div class="rk-ec-hero-title">Elektryczna czy wodna podłogówka? <span>Policz pełny koszt, nie slogan</span></div>
      <p class="rk-ec-lead">Kable, maty i folie zwykle wymagają mniejszego nakładu początkowego. Wodna podłogówka z pompą ciepła może zużywać znacznie mniej kupowanej energii, ale wymaga droższej infrastruktury. Uczciwa odpowiedź powstaje dopiero po zestawieniu tego samego zapotrzebowania na ciepło, kompletnego CAPEX, rocznych kosztów oraz wymian w wybranym okresie.</p>
      <div class="rk-ec-hero-tags" aria-label="Zakres artykułu">
        <span class="rk-ec-hero-tag">kable, maty i folie</span>
        <span class="rk-ec-hero-tag">wodna podłogówka + pompa ciepła</span>
        <span class="rk-ec-hero-tag">CAPEX, OPEX i TCO</span>
        <span class="rk-ec-hero-tag">SCOP i fotowoltaika</span>
        <span class="rk-ec-hero-tag">1–30 lat</span>
      </div>
      <div class="rk-ec-byline">
        <span><strong>Autor:</strong> Robert Kucharski</span>
        <span><strong>Czas czytania:</strong> około 27 minut</span>
        <span><strong>Aktualizacja techniczna:</strong> 13 września 2026 r.</span>
      </div>
      <div class="rk-ec-hero-metrics">
        <div class="rk-ec-hero-metric"><b>Porównujemy to samo ciepło</b><span>Oba warianty muszą pokryć identyczne użyteczne zapotrzebowanie budynku i zapewnić ten sam komfort.</span></div>
        <div class="rk-ec-hero-metric"><b>Emiter to nie źródło</b><span>Rura wodna, kabel albo mata oddają ciepło przez podłogę. O rachunku decyduje także sposób wytworzenia ciepła.</span></div>
        <div class="rk-ec-hero-metric"><b>Wynik ma zakres, nie wyrok</b><span>Kalkulator pokazuje skutek wpisanych cen, SCOP, serwisu, PV i wymiany urządzenia — nie gwarancję kosztu.</span></div>
      </div>
    </header>

    <nav class="rk-ec-nav" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-ec-nav-label">Na skróty — wszystkie H2</span>
      <div class="rk-ec-nav-track">
        <a href="#rk-ec-answer">Szybka odpowiedź</a>
        <a href="#rk-ec-comparison">Co porównujemy?</a>
        <a href="#rk-ec-map">Droga energii</a>
        <a href="#rk-ec-tco">CAPEX, OPEX i TCO</a>
        <a href="#rk-ec-calculator">Kalkulator kosztów</a>
        <a href="#rk-ec-reading">Jak czytać wynik?</a>
        <a href="#rk-ec-electric">Kiedy elektryczne?</a>
        <a href="#rk-ec-water">Kiedy wodne z pompą?</a>
        <a href="#rk-ec-pv">Fotowoltaika i taryfa</a>
        <a href="#rk-ec-lifecycle">Serwis i wymiany</a>
        <a href="#rk-ec-example">Przykład 120 m²</a>
        <a href="#rk-ec-errors">Błędy porównania</a>
        <a href="#rk-ec-method">Jak porównać?</a>
        <a href="#rk-ec-conclusion">Wnioski</a>
        <a href="#rk-ec-sources">Źródła</a>
        <a href="#rk-ec-faq">FAQ</a>
        <a href="#rk-ec-author">Autor</a>
      </div>
    </nav>

    <section class="rk-ec-section" id="rk-ec-answer">
      <span class="rk-ec-eyebrow">Odpowiedź w 30 sekund</span>
      <h2 class="rk-ec-section-title">Co jest tańsze: ogrzewanie elektryczne czy wodna podłogówka?</h2>
      <div class="rk-ec-answer">
        <span class="rk-ec-answer-label">Najkrótsza poprawna odpowiedź</span>
        <p><strong>Ogrzewanie elektryczne bezpośrednie zwykle wygrywa niskim kosztem startowym, a wodna podłogówka z dobrze pracującą pompą ciepła — niższym zakupem energii w sezonie. To, który wariant ma niższy koszt całkowity, zależy przede wszystkim od zapotrzebowania budynku, różnicy inwestycji, rzeczywistego SCOP, ceny energii i długości analizy. Nie ma technicznej podstawy do zdania, że jeden system zawsze wygrywa.</strong></p>
      </div>
      <div class="rk-ec-grid-3">
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">Niski CAPEX</span><h3>Elektryka może mieć sens</h3><p>Przy bardzo małym zapotrzebowaniu, krótkim horyzoncie użytkowania, ograniczonym zakresie lub trudnym remoncie oszczędność na starcie może być ważniejsza niż przyszła różnica w rachunkach.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label">Niski OPEX</span><h3>Pompa może odzyskać różnicę</h3><p>Im więcej użytecznego ciepła potrzebuje dom i im wyższy sezonowy SCOP, tym szybciej niższe zużycie prądu może skompensować droższą instalację.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-green">Prawidłowy wybór</span><h3>Wynik może brzmieć „brak zwrotu”</h3><p>Jeżeli krzywe kosztów nie przetną się w badanym okresie, kalkulator pokaże to wprost. Brak zwrotu w 20 lat nie oznacza awarii obliczeń.</p></article>
      </div>
      <p>Ten wpis odpowiada na pytanie o <strong>rachunki, TCO i okres zwrotu</strong>. Szersze porównanie komfortu, montażu i zastosowań znajdziesz w poradniku <a href="https://projekt-ogrzewania.pl/jakie-ogrzewanie-podlogowe-wybrac-wodne-czy-elektryczne/">wodne czy elektryczne ogrzewanie podłogowe — co wybrać</a>. Dzięki temu oba artykuły nie konkurują o tę samą intencję wyszukiwania.</p>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-comparison">
      <span class="rk-ec-eyebrow">Najpierw usuń błąd kategorii</span>
      <h2 class="rk-ec-section-title">Co właściwie porównujemy: emiter, źródło czy cały system?</h2>
      <p class="rk-ec-section-lead">„Elektryczna podłogówka kontra wodna podłogówka” brzmi prosto, ale miesza dwie warstwy instalacji. Kabel, mata, folia lub rura są elementami oddającymi ciepło. Pompa ciepła i kocioł elektryczny są źródłami, które przygotowują ciepło dla obiegu wodnego.</p>
      <div class="rk-ec-table">
        <table aria-label="Zakres porównania ogrzewania elektrycznego i wodnej podłogówki">
          <thead><tr><th>Warstwa</th><th>Ogrzewanie elektryczne bezpośrednie</th><th>Wodna podłogówka z pompą ciepła</th></tr></thead>
          <tbody>
            <tr><th data-label="Warstwa">Źródło / przemiana energii</th><td data-label="Elektryczne">Element oporowy zamienia energię elektryczną w ciepło ze sprawnością bliską 1.</td><td data-label="Wodne + pompa">Pompa przenosi ciepło z otoczenia; pobór prądu zależy od sezonowego SCOP całego układu.</td></tr>
            <tr><th data-label="Warstwa">Emiter</th><td data-label="Elektryczne">Kabel, mata albo folia współpracująca z warstwami podłogi.</td><td data-label="Wodne + pompa">Rury z wodą, jastrych lub system suchy oraz okładzina.</td></tr>
            <tr><th data-label="Warstwa">Energia kupowana</th><td data-label="Elektryczne">W przybliżeniu odpowiada użytecznemu ciepłu po uwzględnieniu sprawności.</td><td data-label="Wodne + pompa">Użyteczne ciepło podzielone przez SCOP, powiększone o energię pomocniczą.</td></tr>
            <tr><th data-label="Warstwa">Możliwość zmiany źródła</th><td data-label="Elektryczne">Element oporowy pozostaje konkretnym sposobem wytwarzania ciepła.</td><td data-label="Wodne + pompa">Rury są emiterem; w przyszłości można zmienić urządzenie zasilające, jeśli układ jest z nim zgodny.</td></tr>
            <tr><th data-label="Warstwa">Zakres kosztu</th><td data-label="Elektryczne">Elementy grzejne, sterowanie, obwody i ewentualne zwiększenie mocy przyłączeniowej.</td><td data-label="Wodne + pompa">Rury, rozdzielacze, automatyka, hydraulika, źródło, uruchomienie i ewentualny osprzęt.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-ec-warning"><strong>Ważne:</strong> wodna podłogówka z kotłem elektrycznym nie korzysta z „dźwigni” SCOP. W takim wariancie zakup energii będzie zbliżony do ogrzewania oporowego i dodatkowo pojawi się prąd pomp obiegowych. Zyskiem wodnego emitera pozostaje elastyczność źródła, a nie automatyczna oszczędność energii.</div>
      <p>Jeżeli chcesz zrozumieć sam emiter, zacznij od tekstu <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">jak działa ogrzewanie podłogowe</a>. Osobno omawiam również <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">zasadę działania i dobór pompy ciepła</a>.</p>
    </section>

    <section class="rk-ec-section" id="rk-ec-map">
      <span class="rk-ec-eyebrow">Modułowa grafika edukacyjna</span>
      <h2 class="rk-ec-section-title">Jak energia dociera do pomieszczenia w obu systemach?</h2>
      <p class="rk-ec-section-lead">Kliknij źródło dla obiegu wodnego. Zmienia się droga energii i wzór na energię kupowaną, ale sama podłoga nadal pozostaje emiterem. Moduł nie dubluje kalkulatora — porządkuje pojęcia przed wprowadzaniem liczb.</p>
      <div class="rk-ec-source-switch" role="group" aria-label="Źródło dla wodnej podłogówki">
        <button type="button" data-rk-ec-source="pump" aria-pressed="true">Pompa ciepła</button>
        <button type="button" data-rk-ec-source="boiler" aria-pressed="false">Kocioł elektryczny</button>
      </div>
      <div class="rk-ec-system-map">
        <article class="rk-ec-flow-card is-electric">
          <div class="rk-ec-flow-title">Ogrzewanie elektryczne bezpośrednie</div>
          <div class="rk-ec-flow" aria-label="Droga energii w elektrycznym ogrzewaniu podłogowym">
            <div class="rk-ec-flow-node">Prąd z sieci / PV</div>
            <div class="rk-ec-flow-node">Kabel, mata lub folia</div>
            <div class="rk-ec-flow-node">Warstwy podłogi</div>
            <div class="rk-ec-flow-node">Pomieszczenie</div>
          </div>
          <div class="rk-ec-flow-formula"><strong>Energia kupowana ≈ Q<sub>użyteczne</sub> ÷ η</strong><br>Sprawność przemiany jest bliska 1, lecz budynek nadal potrzebuje tyle ciepła, ile wynika z jego strat i użytkowania.</div>
        </article>
        <article class="rk-ec-flow-card is-water">
          <div class="rk-ec-flow-title">Wodna podłogówka + <span id="rk-ec-map-source-name">pompa ciepła</span></div>
          <div class="rk-ec-flow is-five" aria-label="Droga energii w wodnym ogrzewaniu podłogowym">
            <div class="rk-ec-flow-node">Prąd z sieci / PV</div>
            <div class="rk-ec-flow-node" id="rk-ec-map-source-node">Pompa ciepła</div>
            <div class="rk-ec-flow-node">Woda i hydraulika</div>
            <div class="rk-ec-flow-node">Rury + podłoga</div>
            <div class="rk-ec-flow-node">Pomieszczenie</div>
          </div>
          <div class="rk-ec-flow-formula" id="rk-ec-map-formula"><strong>Energia kupowana ≈ Q<sub>użyteczne</sub> ÷ SCOP + energia pomocnicza</strong><br>Niższa wymagana temperatura wody może sprzyjać sprawności pompy, ale SCOP trzeba przyjąć dla realnego układu i warunków.</div>
        </article>
      </div>
      <p>W kablach zatopionych w jastrychu również może występować <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna podłogi</a>. Nieprawdziwe jest więc uproszczenie „elektryka nie akumuluje, woda akumuluje” — o odpowiedzi decyduje konstrukcja i masa warstw, nie sam rodzaj przewodu.</p>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-tco">
      <span class="rk-ec-eyebrow">Trzy różne pytania finansowe</span>
      <h2 class="rk-ec-section-title">CAPEX, OPEX i TCO — co trzeba policzyć osobno?</h2>
      <div class="rk-ec-grid-3">
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">CAPEX</span><h3>Ile płacisz na początku?</h3><p>Kompletny koszt zaprojektowania, zakupu, wykonania, zasilenia i uruchomienia systemu, pomniejszony o dotacje, które faktycznie otrzymasz.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label">OPEX</span><h3>Ile kosztuje rok pracy?</h3><p>Energia zależna od zużycia, energia pomocnicza oraz serwis. Identycznych opłat stałych nie należy sztucznie przypisywać tylko jednemu wariantowi.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-green">TCO</span><h3>Ile wydasz w całym okresie?</h3><p>CAPEX plus kolejne lata OPEX i zaplanowane wymiany. Horyzont 5, 10, 20 lub 30 lat może prowadzić do odmiennego wyboru.</p></article>
      </div>
      <div class="rk-ec-equation">
        <span class="rk-ec-equation-label">Model użyty w narzędziu</span>
        <div class="rk-ec-equation-main">TCO<sub>n</sub> = inwestycja + Σ koszt energii w roku + Σ serwis + koszt wymiany w wybranym roku</div>
        <p>Wzrost ceny prądu jest jawny i domyślnie wynosi 0%. Kalkulator nie ukrywa prognozy 3% lub 5% w gotowym wyniku. Nie uwzględnia dyskonta pieniądza, kredytu, podatków ani ogólnej inflacji.</p>
      </div>
      <p>Orientacyjne widełki rynkowe nie zastępują porównywalnych ofert. Sprawdź osobno <a href="https://projekt-ogrzewania.pl/kompleksowa-wycena-ogrzewania-podlogowego-wodnego-na-co-przygotowac-budzet/">co powinna obejmować wycena wodnej podłogówki</a> oraz analizę <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">kosztów ogrzewania domu dla różnych źródeł</a>. Wrażliwość wyniku rozwijają też materiały o <a href="https://projekt-ogrzewania.pl/rzeczywiste-oszczednosci-na-kosztach-ogrzewania-w-skali-roku-analiza-rozstawu-rur-dla-domu-150-m%C2%B2/">optymalizacji kosztów podłogówki</a> i <a href="https://projekt-ogrzewania.pl/zwrot-z-inwestycji-w-ogrzewanie-podlogowe-realne-wyliczenia-na-2026-rok/">realnym zwrocie z inwestycji</a>.</p>
    </section>

    <section class="rk-ec-section" id="rk-ec-calculator">
      <span class="rk-ec-eyebrow">Jedno narzędzie — jeden wynik</span>
      <h2 class="rk-ec-section-title">Kalkulator kosztów ogrzewania elektrycznego i wodnej podłogówki z pompą ciepła</h2>
      <p class="rk-ec-section-lead">Wpisz własne dane z rachunku, ofert i obliczeń budynku. Wyniki roczne, TCO, rok przecięcia, trzy scenariusze SCOP, wykres oraz tabela są aktualizowane przez ten sam model. Domyślne wartości tworzą przykład edukacyjny dla domu 120 m² — nie są aktualnym cennikiem.</p>

      <div class="rk-ec-tool" id="rk-ec-calculator-tool">
        <div class="rk-ec-tool-head">
          <span class="rk-ec-eyebrow">Kalkulator TCO 1–30 lat</span>
          <h3>Porównaj ten sam budynek i ten sam komfort</h3>
          <p>Najpierw określ użyteczne ciepło, potem koszt zakupu energii. Moc urządzenia w kW nie jest rocznym zużyciem w kWh.</p>
        </div>
        <div class="rk-ec-tool-body">
          <div class="rk-ec-tool-intro">
            <p><strong>Wybierz sposób podania rocznego zapotrzebowania.</strong> Pola alternatywne nie są sumowane.</p>
            <button type="button" class="rk-ec-reset" id="rk-ec-reset">Przywróć przykład 120 m²</button>
          </div>

          <div class="rk-ec-mode-switch" role="group" aria-label="Sposób podania zapotrzebowania">
            <button type="button" data-rk-ec-mode="annual" aria-pressed="true">Mam roczne ciepło w kWh</button>
            <button type="button" data-rk-ec-mode="intensity" aria-pressed="false">Mam powierzchnię i kWh/m²/rok</button>
          </div>

          <div class="rk-ec-field-grid is-3">
            <div class="rk-ec-field" id="rk-ec-annual-field"><label for="rk-ec-demand">Roczne użyteczne ciepło</label><input id="rk-ec-demand" type="number" min="100" max="200000" step="100" value="8000" inputmode="decimal"><span class="rk-ec-field-help">Ogrzewanie pomieszczeń, kWh/rok. Najlepiej z obliczeń lub wiarygodnego bilansu.</span></div>
            <div class="rk-ec-field" id="rk-ec-intensity-field" hidden=""><label for="rk-ec-intensity">Energia użyteczna na 1 m²</label><input id="rk-ec-intensity" type="number" min="1" max="500" step="1" value="67" inputmode="decimal"><span class="rk-ec-field-help">kWh/(m²·rok), nie moc projektowa W/m².</span></div>
            <div class="rk-ec-field"><label for="rk-ec-area">Ogrzewana powierzchnia</label><input id="rk-ec-area" type="number" min="10" max="1000" step="1" value="120" inputmode="decimal"><span class="rk-ec-field-help">m²; służy też do wyliczenia kosztu rocznego na 1 m².</span></div>
            <div class="rk-ec-field"><label for="rk-ec-price">Pełna zmienna cena prądu</label><input id="rk-ec-price" type="number" min="0.01" max="10" step="0.01" value="1.20" inputmode="decimal"><span class="rk-ec-field-help">zł/kWh: energia i zmienne składniki dystrybucji z Twojego rachunku.</span></div>
          </div>

          <div class="rk-ec-field-grid is-3">
            <div class="rk-ec-field"><label for="rk-ec-capex-direct">Inwestycja — system elektryczny</label><input id="rk-ec-capex-direct" type="number" min="0" max="1000000" step="500" value="10000" inputmode="decimal"><span class="rk-ec-field-help">zł, kompletny zakres po realnych dotacjach.</span></div>
            <div class="rk-ec-field"><label for="rk-ec-capex-pump">Inwestycja — wodna + pompa</label><input id="rk-ec-capex-pump" type="number" min="0" max="1000000" step="500" value="40000" inputmode="decimal"><span class="rk-ec-field-help">zł, ten sam zakres funkcjonalny i stan cen.</span></div>
            <div class="rk-ec-field"><label for="rk-ec-scop">Sezonowy SCOP pompy ciepła</label><input id="rk-ec-scop" type="number" min="1.1" max="8" step="0.1" value="3.5" inputmode="decimal"><span class="rk-ec-field-help">Nie chwilowy COP z jednego punktu katalogowego.</span></div>
          </div>

          <div class="rk-ec-field-grid is-2">
            <div class="rk-ec-field"><label for="rk-ec-years">Okres analizy</label><input id="rk-ec-years" type="number" min="1" max="30" step="1" value="20" inputmode="numeric"><span class="rk-ec-field-help">Od 1 do 30 pełnych lat eksploatacji.</span></div>
            <div class="rk-ec-field"><label for="rk-ec-growth">Roczny wzrost zmiennej ceny prądu</label><input id="rk-ec-growth" type="number" min="-10" max="30" step="0.1" value="0" inputmode="decimal"><span class="rk-ec-field-help">%, jawne założenie; 0% oznacza stałą cenę w całej analizie.</span></div>
          </div>

          <details class="rk-ec-advanced">
            <summary>Ustawienia zaawansowane: serwis, PV, sprawność i wymiana pompy</summary>
            <div class="rk-ec-advanced-content">
              <div class="rk-ec-field-grid is-4">
                <div class="rk-ec-field"><label for="rk-ec-eta">Sprawność elektryczna η</label><input id="rk-ec-eta" type="number" min="0.80" max="1" step="0.01" value="0.99" inputmode="decimal"><span class="rk-ec-field-help">Wartość bliska 1; nie opisujemy jej jako SCOP.</span></div>
                <div class="rk-ec-field"><label for="rk-ec-aux">Prąd pomocniczy pompy i hydrauliki</label><input id="rk-ec-aux" type="number" min="0" max="10000" step="10" value="250" inputmode="decimal"><span class="rk-ec-field-help">kWh/rok poza energią wynikającą z Q/SCOP.</span></div>
                <div class="rk-ec-field"><label for="rk-ec-service-direct">Serwis systemu elektrycznego</label><input id="rk-ec-service-direct" type="number" min="0" max="50000" step="50" value="0" inputmode="decimal"><span class="rk-ec-field-help">zł/rok.</span></div>
                <div class="rk-ec-field"><label for="rk-ec-service-pump">Serwis pompy i wodnej instalacji</label><input id="rk-ec-service-pump" type="number" min="0" max="50000" step="50" value="400" inputmode="decimal"><span class="rk-ec-field-help">zł/rok.</span></div>
              </div>
              <div class="rk-ec-field-grid is-4">
                <div class="rk-ec-field"><label for="rk-ec-pv-direct">PV zużyte bezpośrednio na elektryczne</label><input id="rk-ec-pv-direct" type="number" min="0" max="200000" step="50" value="0" inputmode="decimal"><span class="rk-ec-field-help">kWh/rok rzeczywistej autokonsumpcji na ogrzewanie, nie cała produkcja PV.</span></div>
                <div class="rk-ec-field"><label for="rk-ec-pv-pump">PV zużyte bezpośrednio przez pompę</label><input id="rk-ec-pv-pump" type="number" min="0" max="200000" step="50" value="0" inputmode="decimal"><span class="rk-ec-field-help">kWh/rok potwierdzonego dopasowania produkcji i pracy systemu.</span></div>
                <div class="rk-ec-field"><label for="rk-ec-replacement-year">Rok wymiany pompy</label><input id="rk-ec-replacement-year" type="number" min="0" max="30" step="1" value="0" inputmode="numeric"><span class="rk-ec-field-help">0 = brak wymiany w analizie.</span></div>
                <div class="rk-ec-field"><label for="rk-ec-replacement-cost">Koszt wymiany pompy</label><input id="rk-ec-replacement-cost" type="number" min="0" max="500000" step="500" value="25000" inputmode="decimal"><span class="rk-ec-field-help">zł w wartości wpisanej dziś; doliczany tylko w wybranym roku.</span></div>
              </div>
            </div>
          </details>

          <div class="rk-ec-validation" id="rk-ec-validation" role="status" aria-live="polite"></div>

          <div class="rk-ec-results" aria-label="Wyniki porównania systemów">
            <article class="rk-ec-result-system is-direct">
              <h4>Elektryczne bezpośrednie</h4>
              <div class="rk-ec-result-grid">
                <div class="rk-ec-result-item"><span>Energia kupowana / rok</span><strong id="rk-ec-out-energy-direct">—</strong></div>
                <div class="rk-ec-result-item"><span>Koszt w 1. roku</span><strong id="rk-ec-out-year-direct">—</strong></div>
                <div class="rk-ec-result-item"><span>Koszt / m² w 1. roku</span><strong id="rk-ec-out-m2-direct">—</strong></div>
                <div class="rk-ec-result-item"><span>TCO po okresie</span><strong id="rk-ec-out-tco-direct">—</strong></div>
              </div>
            </article>
            <article class="rk-ec-result-system is-pump">
              <h4>Wodna podłogówka + pompa ciepła</h4>
              <div class="rk-ec-result-grid">
                <div class="rk-ec-result-item"><span>Energia kupowana / rok</span><strong id="rk-ec-out-energy-pump">—</strong></div>
                <div class="rk-ec-result-item"><span>Koszt w 1. roku</span><strong id="rk-ec-out-year-pump">—</strong></div>
                <div class="rk-ec-result-item"><span>Koszt / m² w 1. roku</span><strong id="rk-ec-out-m2-pump">—</strong></div>
                <div class="rk-ec-result-item"><span>TCO po okresie</span><strong id="rk-ec-out-tco-pump">—</strong></div>
              </div>
            </article>
          </div>

          <div class="rk-ec-verdict" aria-live="polite">
            <div><span>Użyteczne ciepło w modelu</span><strong id="rk-ec-out-demand">—</strong></div>
            <div><span>Pierwszy pełny rok przecięcia TCO</span><strong id="rk-ec-out-payback">—</strong></div>
            <div><span>Różnica TCO po okresie</span><strong id="rk-ec-out-delta">—</strong></div>
          </div>

          <div class="rk-ec-chart-panel">
            <div class="rk-ec-chart-head">
              <h4 id="rk-ec-chart-heading">Skumulowany koszt całkowity</h4>
              <div class="rk-ec-chart-tabs" role="group" aria-label="Widok wykresu">
                <button type="button" data-rk-ec-chart="cumulative" aria-pressed="true">TCO narastająco</button>
                <button type="button" data-rk-ec-chart="annual" aria-pressed="false">Koszt roczny</button>
                <button type="button" data-rk-ec-chart="energy" aria-pressed="false">Energia z sieci</button>
              </div>
            </div>
            <div class="rk-ec-chart-legend"><span><i class="is-direct"></i>Elektryczne bezpośrednie</span><span><i class="is-pump"></i>Wodna + pompa ciepła</span></div>
            <div class="rk-ec-chart-wrap"><svg id="rk-ec-chart" viewBox="0 0 760 390" role="img" aria-label="Porównanie kosztów ogrzewania. Wykres aktualizuje się po zmianie danych kalkulatora."></svg></div>
            <p class="rk-ec-chart-reading" id="rk-ec-chart-reading">Zmień dane, aby sprawdzić wrażliwość wyniku.</p>
          </div>

          <h4>Wrażliwość wyniku na SCOP — bez nadpisywania Twoich pól</h4>
          <p>Scenariusze zmieniają wyłącznie SCOP o 0,5 w dół lub w górę. Zapotrzebowanie, ceny, inwestycje, PV, serwis i wymiana pozostają identyczne.</p>
          <div class="rk-ec-scenarios">
            <div class="rk-ec-scenario"><b>Niższy SCOP</b><span id="rk-ec-scenario-low-assumption">—</span><strong id="rk-ec-scenario-low-result">—</strong></div>
            <div class="rk-ec-scenario"><b>SCOP wpisany</b><span id="rk-ec-scenario-base-assumption">—</span><strong id="rk-ec-scenario-base-result">—</strong></div>
            <div class="rk-ec-scenario"><b>Wyższy SCOP</b><span id="rk-ec-scenario-high-assumption">—</span><strong id="rk-ec-scenario-high-result">—</strong></div>
          </div>

          <div class="rk-ec-table" id="rk-ec-year-table">
            <table aria-label="Tabela kosztów w wybranych latach">
              <thead><tr><th>Rok</th><th>Elektryczne — TCO</th><th>Wodne + pompa — TCO</th><th>Różnica</th></tr></thead>
              <tbody id="rk-ec-year-table-body"></tbody>
            </table>
          </div>
          <div class="rk-ec-responsibility">
            <p><strong>Zakres wyniku:</strong> narzędzie liczy ogrzewanie pomieszczeń, bez CWU i chłodzenia. Zmienna cena prądu rośnie o wpisany procent, a koszty serwisu i wymiany pozostają w wartościach nominalnych wprowadzonych przez użytkownika.</p>
            <p><strong>PV:</strong> od zużycia odejmowana jest tylko wpisana energia rzeczywiście wykorzystana na pracę danego ogrzewania; wartość jest automatycznie ograniczana do zużycia systemu.</p>
            <p><strong>Ograniczenia:</strong> model nie symuluje pogody godzinowej, odszraniania, taryf dynamicznych, kredytu, ogólnej inflacji, wartości pieniądza w czasie, awarii ani zmian zachowania mieszkańców.</p>
          </div>
        </div>
      </div>

      <div class="rk-ec-cta">
        <span class="rk-ec-eyebrow">Kalkulator porównał koszty — projekt musi potwierdzić parametry</span>
        <div class="rk-ec-cta-title">Założony SCOP nie bierze się wyłącznie z katalogu pompy ciepła</div>
        <p>Rzeczywisty wynik zależy między innymi od wymaganej temperatury zasilania, rozstawu rur, długości pętli, przepływów, strat ciśnienia i nastaw. Projekt określa te parametry dla konkretnego budynku, aby ekonomiczny wariant z arkusza był również wykonalny technicznie.</p>
        <a class="rk-ec-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź projekt ogrzewania podłogowego</a>
        <small class="rk-ec-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-reading">
      <span class="rk-ec-eyebrow">Wynik to relacja założeń</span>
      <h2 class="rk-ec-section-title">Jak czytać wynik kalkulatora, żeby nie wyciągnąć złego wniosku?</h2>
      <div class="rk-ec-grid-2">
        <article class="rk-ec-card"><h3>Najpierw energia, potem złotówki</h3><p>Jeżeli zakup energii dla pompy jest zaskakująco niski, sprawdź SCOP, energię pomocniczą i PV. Jeżeli rachunek elektryki jest wysoki, potwierdź, czy wpisałeś ciepło użyteczne, a nie energię pierwotną albo moc w watach.</p></article>
        <article class="rk-ec-card"><h3>Rok zwrotu nie jest gwarancją</h3><p>To pierwszy pełny rok, w którym skumulowany TCO pompy nie przewyższa TCO elektryki przy niezmienionych założeniach. Realna przyszłość może zmienić ceny, sprawność, serwis i zakres wymian.</p></article>
        <article class="rk-ec-card"><h3>Brak przecięcia też jest wynikiem</h3><p>Przy małym zapotrzebowaniu lub dużej różnicy inwestycji pompa może nie odzyskać nakładu w 20 czy 30 lat. To ważna informacja decyzyjna, a nie powód do ukrywania komunikatu.</p></article>
        <article class="rk-ec-card"><h3>Najważniejsza jest analiza wrażliwości</h3><p>Porównaj SCOP niższy i wyższy, cenę z rachunku, 0% oraz własny scenariusz wzrostu, a także wariant z wymianą urządzenia. Stabilny wybór powinien bronić się w kilku realistycznych wersjach.</p></article>
      </div>
      <p>SCOP jest skutkiem pracy całego układu w sezonie, a nie jedną stałą przypisaną każdej pompie. Zobacz, jak <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">temperatura zasilania wpływa na pompę ciepła</a> oraz dlaczego potrzebna jest prawidłowa <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywa grzewcza podłogówki</a>.</p>
    </section>

    <section class="rk-ec-section" id="rk-ec-electric">
      <span class="rk-ec-eyebrow">Nie tylko rachunek roczny</span>
      <h2 class="rk-ec-section-title">Kiedy elektryczne ogrzewanie podłogowe może być rozsądnym wyborem?</h2>
      <p class="rk-ec-section-lead">Niski koszt inwestycyjny ma największą wartość tam, gdzie roczna ilość potrzebnego ciepła jest mała albo system pracuje krótko. Nie oznacza to, że każdy mały dom automatycznie powinien mieć kable — potrzebny jest bilans mocy, energii i przyłącza.</p>
      <div class="rk-ec-grid-4">
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">Małe zużycie</span><h3>Bardzo energooszczędny budynek</h3><p>Mała liczba kupowanych kWh ogranicza roczną korzyść z pompy, więc duży dodatkowy CAPEX może zwracać się długo.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">Krótka praca</span><h3>Domek lub strefa okresowa</h3><p>Przy użytkowaniu weekendowym i niewielkiej powierzchni prosty system może wygrać kosztami i szybkością reakcji.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">Remont</span><h3>Ograniczona wysokość podłogi</h3><p>Mata pod płytkami może być łatwiejsza do wykonania niż pełna hydraulika, ale trzeba sprawdzić konstrukcję, moc elektryczną i regulację.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">Uzupełnienie</span><h3>Komfort poza sezonem</h3><p>Elektryczna mata w łazience może pracować niezależnie od głównego źródła, jeżeli użytkownik świadomie akceptuje jej koszt.</p></article>
      </div>
      <div class="rk-ec-warning"><strong>Sprawdź przyłącze:</strong> suma mocy kabli nie mówi jeszcze, ile zużyją w roku, ale wpływa na bilans mocy budynku, dobór obwodów, zabezpieczeń i sterowania. Te elementy muszą być ujęte w CAPEX.</div>
      <p>Kable i maty nie zawsze oznaczają identyczną konstrukcję. Grubość warstw, rodzaj okładziny oraz sterowanie zmieniają dynamikę pracy. Warto zestawić to z poradnikiem o <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">wpływie okładziny podłogowej na oddawanie ciepła</a>.</p>
    </section>

    <section class="rk-ec-section rk-ec-section-dark" id="rk-ec-water">
      <span class="rk-ec-eyebrow">Niższy pobór wymaga dobrego układu</span>
      <h2 class="rk-ec-section-title">Kiedy wodna podłogówka z pompą ciepła zyskuje przewagę?</h2>
      <p class="rk-ec-section-lead">Przewaga rośnie wraz z ilością dostarczanego ciepła, długością eksploatacji i sezonową sprawnością. Sama obecność rury w podłodze nie obniża zużycia — robi to źródło pracujące w korzystnych parametrach.</p>
      <div class="rk-ec-grid-3">
        <article class="rk-ec-card"><span class="rk-ec-card-label">Duże roczne Q</span><h3>Więcej energii do dostarczenia</h3><p>Każda kWh użytecznego ciepła powiększa różnicę pomiędzy η bliską 1 a SCOP większym od 1, dlatego wysoki popyt cieplny skraca prosty zwrot.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label">Niski parametr</span><h3>Podłoga pokrywa obciążenie</h3><p>Wymagana moc musi zostać osiągnięta przy temperaturze sprzyjającej pompie. Rozstawu nie wybiera się wyłącznie według jednego schematu dla całego domu.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label">Długi horyzont</span><h3>Infrastruktura zostaje w budynku</h3><p>Rury, rozdzielacze i poprawnie wykonane warstwy tworzą emiter, do którego można w przyszłości dobrać inne kompatybilne źródło.</p></article>
      </div>
      <p>Punkt wyjścia stanowi <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne pomieszczeń</a>. Dalej dobiera się <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a>, <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">długości pętli grzewczych</a>, przepływy i <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">parametry pompy obiegowej</a>. Dopiero po połączeniu tych danych można wiarygodnie oceniać przyszły SCOP; pełną zależność pokazuje poradnik o <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekcie ogrzewania podłogowego z pompą ciepła</a>.</p>
    </section>

    <section class="rk-ec-section" id="rk-ec-pv">
      <span class="rk-ec-eyebrow">Produkcja roczna to nie autokonsumpcja grzania</span>
      <h2 class="rk-ec-section-title">Czy fotowoltaika i tańsza taryfa zmieniają wynik?</h2>
      <p>Tak, ale tylko wtedy, gdy model opisuje rzeczywiste rozliczenie i zgodność w czasie. Nie wolno odjąć całej rocznej produkcji PV od energii ogrzewania tylko dlatego, że obie wielkości są zapisane w kWh. Największe zapotrzebowanie na ciepło przypada na okres o słabszej produkcji słonecznej, a sposób rozliczenia energii zależy od umowy i systemu.</p>
      <div class="rk-ec-grid-3">
        <article class="rk-ec-card"><h3>Autokonsumpcja</h3><p>Do kalkulatora wpisz wyłącznie energię wykorzystaną bezpośrednio przez dany system w czasie jego pracy. Dla kabli i pompy może być inna.</p></article>
        <article class="rk-ec-card"><h3>Energia oddana i odebrana</h3><p>Jej wartość zależy od zasad rozliczenia. Nie jest równoważna bezpośrednio zużytej kWh i nie powinna być odejmowana bez modelu finansowego.</p></article>
        <article class="rk-ec-card"><h3>Taryfa godzinowa</h3><p>Znaczenie ma udział pracy w poszczególnych strefach, nie sama nazwa taryfy. Bezwładna podłoga może przesuwać część poboru, ale ogranicza ją komfort i konstrukcja.</p></article>
      </div>
      <p>Do oszacowania produkcji w konkretnej lokalizacji można użyć oficjalnego narzędzia <a href="https://re.jrc.ec.europa.eu/pvg_tools/en/" target="_blank" rel="nofollow noopener noreferrer">PVGIS Komisji Europejskiej</a>. To nadal nie zastępuje danych o godzinowym dopasowaniu produkcji do ogrzewania. Aktualną ofertę i zmienne składniki energii sprawdzaj w swojej umowie oraz porównywarce <a href="https://maszwybor.ure.gov.pl/or/cenki" target="_blank" rel="nofollow noopener noreferrer">Urzędu Regulacji Energetyki</a>.</p>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-lifecycle">
      <span class="rk-ec-eyebrow">Długi okres wymaga uczciwych wymian</span>
      <h2 class="rk-ec-section-title">Serwis, trwałość i wymiana urządzeń — czego nie pomijać w 20–30 latach?</h2>
      <div class="rk-ec-table">
        <table aria-label="Koszty cyklu życia obu systemów">
          <thead><tr><th>Element</th><th>Jak ująć w analizie?</th><th>Najczęstszy błąd</th></tr></thead>
          <tbody>
            <tr><th data-label="Element">Elementy w podłodze</th><td data-label="Jak liczyć">Porównaj deklaracje producenta, warunki gwarancji, temperatury pracy, dokumentację wykonania i możliwość naprawy.</td><td data-label="Błąd">Jedna uniwersalna liczba lat dla każdej rury, kabla, maty lub połączenia.</td></tr>
            <tr><th data-label="Element">Pompa ciepła</th><td data-label="Jak liczyć">Przetestuj wariant bez wymiany i wariant z wymianą w realistycznym roku oraz koszcie.</td><td data-label="Błąd">Założenie, że całe urządzenie na pewno wytrzyma 30 lat albo na pewno zepsuje się po 10.</td></tr>
            <tr><th data-label="Element">Serwis</th><td data-label="Jak liczyć">Wpisz rzeczywisty zakres z warunków gwarancji i ofert serwisowych.</td><td data-label="Błąd">Dodawanie wysokiego serwisu jednemu wariantowi i pomijanie wszystkich napraw drugiego bez uzasadnienia.</td></tr>
            <tr><th data-label="Element">Sterowanie</th><td data-label="Jak liczyć">Uwzględnij termostaty, listwy, siłowniki, automatykę źródła i ewentualne wymiany.</td><td data-label="Błąd">Traktowanie automatyki jako identycznej, mimo innego zakresu funkcji.</td></tr>
            <tr><th data-label="Element">Dotacje i finansowanie</th><td data-label="Jak liczyć">Wprowadź nakład po dotacji faktycznie dostępnej dla inwestycji; koszt kredytu analizuj osobno.</td><td data-label="Błąd">Jednoczesne użycie ceny przed dotacją i korzyści po dotacji albo nieuwzględnienie kosztu kapitału.</td></tr>
          </tbody>
        </table>
      </div>
      <p>Warunki eksploatacji rur trzeba odczytywać z dokumentacji konkretnego systemu, a nie z hasła „50 lat”. Szczegóły omawia poradnik o <a href="https://projekt-ogrzewania.pl/wytrzymalosc-rur-do-ogrzewania-podlogowego-kompleksowy-przewodnik/">wytrzymałości rur ogrzewania podłogowego</a> i artykuł o <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">rurze PEX do podłogówki</a>. Koszt automatyki oceniaj po funkcji, korzystając z analizy <a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">czy sterowanie strefowe ma sens</a>.</p>
    </section>

    <section class="rk-ec-section" id="rk-ec-example">
      <span class="rk-ec-eyebrow">Przykład zsynchronizowany z narzędziem</span>
      <h2 class="rk-ec-section-title">Ile może kosztować ogrzewanie domu 120 m²?</h2>
      <p>Po przywróceniu wartości przykładowych model przyjmuje 8000 kWh użytecznego ciepła rocznie, cenę 1,20 zł/kWh, sprawność elektryczną 0,99, SCOP 3,5, 250 kWh energii pomocniczej, serwis pompy 400 zł/rok oraz inwestycje 10 000 i 40 000 zł. Wzrost ceny oraz PV wynoszą 0%, a wymiana pompy jest wyłączona.</p>
      <div class="rk-ec-grid-4">
        <article class="rk-ec-card"><span class="rk-ec-card-label is-orange">Elektryczne</span><h3 id="rk-ec-example-direct">około 9700 zł/rok</h3><p>Koszt pierwszego roku energii i serwisu dla aktualnych danych.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label">Pompa ciepła</span><h3 id="rk-ec-example-pump">około 3440 zł/rok</h3><p>Koszt pierwszego roku wraz z energią pomocniczą i serwisem.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-green">Przecięcie</span><h3 id="rk-ec-example-payback">5. rok</h3><p>Pierwszy pełny rok, w którym TCO wodnego wariantu nie jest wyższy.</p></article>
        <article class="rk-ec-card"><span class="rk-ec-card-label is-green">Po okresie</span><h3 id="rk-ec-example-delta">około 95 100 zł</h3><p>Różnica TCO przy aktualnie wpisanym horyzoncie i założeniach.</p></article>
      </div>
      <div class="rk-ec-note"><strong>To nie jest prognoza dla każdego domu 120 m².</strong> Dwa budynki o tej samej powierzchni mogą potrzebować zupełnie innej ilości energii z powodu izolacji, stolarki, wentylacji, bryły, lokalizacji i temperatury wewnętrznej. Najpierw sprawdź <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">jak oszacować zapotrzebowanie na ogrzewanie</a> oraz czym różni się ono od <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">bilansu cieplnego budynku</a>.</div>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-errors">
      <span class="rk-ec-eyebrow">Sześć sposobów na błędny wynik</span>
      <h2 class="rk-ec-section-title">Najczęstsze błędy w porównaniu kabli, folii i wodnej podłogówki</h2>
      <div class="rk-ec-grid-3">
        <article class="rk-ec-card"><h3>1. Inny zakres inwestycji</h3><p>Jedna cena obejmuje tylko kabel, a druga źródło, emiter, automatykę i uruchomienie. Najpierw wyrównaj zakres funkcjonalny obu ofert.</p></article>
        <article class="rk-ec-card"><h3>2. Powierzchnia zamiast energii</h3><p>„Dom 100 m²” nie określa rocznego rachunku. Potrzebne jest użyteczne ciepło w kWh/rok i założenia dotyczące komfortu.</p></article>
        <article class="rk-ec-card"><h3>3. Chwilowy COP jako SCOP</h3><p>Jedna wartość katalogowa dla łagodnych warunków nie opisuje sezonu, odszraniania ani temperatur wymaganych przez instalację.</p></article>
        <article class="rk-ec-card"><h3>4. Stała cena udająca aktualną taryfę</h3><p>1,20 zł/kWh w tym wpisie jest edytowalnym przykładem. Użytkownik powinien policzyć zmienny koszt z własnego rachunku.</p></article>
        <article class="rk-ec-card"><h3>5. Cała produkcja PV odjęta zimą</h3><p>Roczne 8000 kWh produkcji nie oznacza 8000 kWh bezpośrednio zużytych na ogrzewanie w czasie zapotrzebowania.</p></article>
        <article class="rk-ec-card"><h3>6. Obietnica pewnego zwrotu</h3><p>Zwrot jest wynikiem przyjętych danych. Uczciwy model musi również pokazać brak przecięcia w wybranym okresie.</p></article>
      </div>
      <p>Do kosztów wykonania trzeba dopisać ryzyka montażowe. Osobna checklista opisuje <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstsze błędy przy montażu podłogówki</a>, w tym warstwy, próbę i dokumentację przed zakryciem instalacji. Uzupełnieniem są zasady doboru <a href="https://projekt-ogrzewania.pl/grubosc-wylewki-betonowej-na-ogrzewanie-podlogowe/">grubości wylewki na ogrzewaniu podłogowym</a> oraz wykonania <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolacji brzegowej i dylatacji</a>.</p>
    </section>

    <section class="rk-ec-section" id="rk-ec-method">
      <span class="rk-ec-eyebrow">Procedura od danych do decyzji</span>
      <h2 class="rk-ec-section-title">Jak uczciwie porównać ogrzewanie elektryczne i wodne krok po kroku?</h2>
      <div class="rk-ec-step-grid">
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">1</span><div><h3>Ustal ten sam komfort</h3><p>Zdefiniuj ogrzewane pomieszczenia, temperatury wewnętrzne, harmonogram i ten sam zakres CWU lub wyłącz CWU z obu wariantów.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">2</span><div><h3>Wyznacz użyteczne ciepło</h3><p>Przyjmij roczne kWh z obliczeń budynku albo świadomie oszacuj je z powierzchni i wskaźnika energii — bez mieszania z mocą W.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">3</span><div><h3>Wyrównaj zakres CAPEX</h3><p>Porównaj projekt, emiter, źródło, automatykę, elektrykę, hydraulikę, montaż, uruchomienie oraz koszty po faktycznych dotacjach.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">4</span><div><h3>Wpisz cenę z rachunku</h3><p>Dodaj cenę energii i zmienne składniki dystrybucji. Nie doliczaj opłaty stałej, jeśli występuje identycznie niezależnie od wyboru.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">5</span><div><h3>Przyjmij sezonową sprawność</h3><p>Dla elektryki użyj η bliskiej 1, a dla pompy realistycznego SCOP uwzględniającego klimat, temperaturę wody i działanie instalacji.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">6</span><div><h3>Dodaj serwis, PV i wymianę</h3><p>Wpisz koszty roczne, energię pomocniczą, udokumentowaną autokonsumpcję ogrzewania oraz wariant wymiany pompy.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">7</span><div><h3>Sprawdź kilka scenariuszy</h3><p>Zmień SCOP, cenę prądu, wzrost ceny, horyzont i koszt wymiany. Zwróć uwagę, czy wybór pozostaje stabilny.</p></div></article>
        <article class="rk-ec-step"><span class="rk-ec-step-no" aria-hidden="true">8</span><div><h3>Potwierdź wykonalność</h3><p>Zweryfikuj moce, rozstawy, temperatury, przepływy, opory, przyłącze i sterowanie. Kalkulacja finansowa nie zastępuje projektu.</p></div></article>
      </div>
      <div class="rk-ec-callout"><strong>Dokumenty, które warto mieć obok kalkulatora:</strong> OZC lub bilans energii, dwie kompletne oferty, rachunek za prąd, dane sezonowe urządzenia dla właściwego klimatu i temperatury wody, warunki gwarancji, plan serwisu oraz profil PV. Sam opis produktu nie wystarcza.</div>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-conclusion">
      <span class="rk-ec-eyebrow">Wniosek bez marketingowego skrótu</span>
      <h2 class="rk-ec-section-title">Co wybrać: kable grzejne, folię czy wodną podłogówkę z pompą?</h2>
      <p><strong>Jeżeli kluczowy jest niski nakład, roczne zapotrzebowanie jest bardzo małe, a instalacja ma ograniczony zakres lub krótki czas pracy, ogrzewanie elektryczne może mieć niższy TCO w badanym horyzoncie.</strong> Jeżeli dom potrzebuje więcej ciepła, będzie długo użytkowany, a wodna podłoga pozwala pompie osiągnąć dobry SCOP, niższy pobór energii może zwrócić dodatkową inwestycję.</p>
      <p>Ostatecznej odpowiedzi nie daje sama powierzchnia 100 czy 120 m². Dają ją spójne dane: energia użyteczna, pełna cena kWh, kompletne nakłady, SCOP dla realnej temperatury zasilania, serwis, PV i wymiany. Porównując koszt po 10 i 20 latach, zawsze pokazuj również rok zero oraz scenariusz, w którym ceny albo sprawność układają się mniej korzystnie.</p>
      <div class="rk-ec-answer"><span class="rk-ec-answer-label">Jedno zdanie do zapamiętania</span><p><strong>Najtańszy element grzejny nie musi tworzyć najtańszego systemu, a najniższy rachunek roczny nie musi zwrócić najwyższej inwestycji — dlatego wybieramy po TCO i po sprawdzeniu technicznym.</strong></p></div>

      <div class="rk-ec-cta">
        <span class="rk-ec-eyebrow">Od symulacji do dokumentacji dla wykonawcy</span>
        <div class="rk-ec-cta-title">Zamień założony niski parametr na policzony układ podłogówki</div>
        <p>Projekt łączy obciążenia cieplne pomieszczeń z powierzchnią czynną, rozstawem, długością pętli, temperaturą wody, przepływami i stratami ciśnienia. Dzięki temu dobór źródła oraz analiza kosztów opierają się na instalacji, którą można prawidłowo wykonać i uruchomić.</p>
        <a class="rk-ec-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt podłogówki</a>
        <small class="rk-ec-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-ec-section" id="rk-ec-sources">
      <span class="rk-ec-eyebrow">Metodyka i materiały oficjalne</span>
      <h2 class="rk-ec-section-title">Źródła i podstawa techniczna</h2>
      <ul class="rk-ec-sources">
        <li><a href="https://www.iso.org/standard/74682.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-1:2021 — definicje i symbole dla wbudowanych systemów ogrzewania i chłodzenia płaszczyznowego</a>.</li>
        <li><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 — wyznaczanie projektowej mocy grzewczej i chłodniczej</a>.</li>
        <li><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 — projektowanie i wymiarowanie</a>.</li>
        <li><a href="https://www.iso.org/standard/74685.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-5:2021 — instalacja systemów płaszczyznowych</a>.</li>
        <li><a href="https://maszwybor.ure.gov.pl/or/cenki" target="_blank" rel="nofollow noopener noreferrer">Urząd Regulacji Energetyki — oficjalna porównywarka ofert sprzedaży energii elektrycznej</a>.</li>
        <li><a href="https://re.jrc.ec.europa.eu/pvg_tools/en/" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska, Joint Research Centre — PVGIS do szacowania produkcji fotowoltaicznej</a>.</li>
        <li><a href="https://energy.ec.europa.eu/topics/energy-efficiency/energy-performance-buildings/energy-performance-buildings-directive_en" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska — dyrektywa w sprawie charakterystyki energetycznej budynków (EPBD)</a>.</li>
      </ul>
      <div class="rk-ec-responsibility">
        <p><strong>Stan źródeł:</strong> odnośniki sprawdzono 13 września 2026 r. Karty ISO opisują zakres norm; dostęp do pełnej treści może być odpłatny.</p>
        <p><strong>Metodyka kalkulatora:</strong> elektryka = Q/η; pompa = Q/SCOP + energia pomocnicza. Od obu poborów odejmowana jest osobno wpisana autokonsumpcja PV, maksymalnie do poziomu zużycia. Koszt energii rośnie o jawny procent roczny.</p>
        <p><strong>Odpowiedzialność:</strong> treść i narzędzie mają charakter edukacyjny. Nie są projektem wykonawczym, audytem energetycznym, gwarancją oszczędności, ofertą urządzenia ani poradą finansową.</p>
      </div>
    </section>

    <section class="rk-ec-section rk-ec-section-soft" id="rk-ec-faq">
      <span class="rk-ec-eyebrow">Najczęstsze pytania inwestorów</span>
      <h2 class="rk-ec-section-title">FAQ: elektryczne czy wodne ogrzewanie podłogowe — koszty</h2>
      <div class="rk-ec-faq">
        <details><summary>Co jest tańsze: ogrzewanie elektryczne czy wodna podłogówka z pompą ciepła?</summary><div class="rk-ec-faq-answer"><p>Elektryczne bezpośrednie zwykle wymaga niższego nakładu, a pompa ciepła może mieć niższy koszt energii. O niższym TCO decydują zapotrzebowanie, pełny CAPEX, SCOP, cena prądu, serwis, wymiany i czas analizy.</p></div></details>
        <details><summary>Ile kosztuje ogrzewanie podłogowe elektryczne domu 100 m² rocznie?</summary><div class="rk-ec-faq-answer"><p>Nie da się tego określić z samej powierzchni. Roczny koszt to w przybliżeniu użyteczne ciepło podzielone przez sprawność, pomniejszone o rzeczywistą autokonsumpcję PV i pomnożone przez zmienną cenę kWh, plus serwis.</p></div></details>
        <details><summary>Jakie zapotrzebowanie wpisać do kalkulatora?</summary><div class="rk-ec-faq-answer"><p>Roczne użyteczne ciepło potrzebne do ogrzewania pomieszczeń, najlepiej z wiarygodnych obliczeń. Nie wpisuj mocy urządzenia w kW ani energii pierwotnej. Alternatywnie użyj powierzchni i świadomie przyjętego kWh/(m²·rok).</p></div></details>
        <details><summary>Czy COP 3,5 oznacza, że rachunek zawsze będzie 3,5 razy niższy?</summary><div class="rk-ec-faq-answer"><p>Nie. Do porównania rocznego potrzebny jest sezonowy SCOP, a ponadto trzeba doliczyć energię pomocniczą, serwis i nakład. Chwilowy COP zależy od konkretnego punktu pracy.</p></div></details>
        <details><summary>Czy wodna podłogówka z kotłem elektrycznym zużyje mniej prądu niż kable?</summary><div class="rk-ec-faq-answer"><p>Nie należy tego zakładać. Oba warianty wykorzystują oporowe wytwarzanie ciepła ze sprawnością bliską 1, a układ wodny ma dodatkową energię pomp. Jego zaletą może być możliwość późniejszej zmiany źródła.</p></div></details>
        <details><summary>Czy fotowoltaika zapewnia darmowe ogrzewanie elektryczne?</summary><div class="rk-ec-faq-answer"><p>Nie automatycznie. Trzeba rozliczyć zgodność produkcji i zużycia w czasie, zasady umowy oraz energię rzeczywiście wykorzystaną na ogrzewanie. Cała roczna produkcja PV nie jest autokonsumpcją zimowego grzania.</p></div></details>
        <details><summary>Po ilu latach zwraca się wodna podłogówka z pompą ciepła?</summary><div class="rk-ec-faq-answer"><p>Nie ma jednej liczby. Rok zwrotu jest pierwszym rokiem, gdy skumulowane oszczędności operacyjne pokrywają różnicę inwestycji i dodatkowe koszty. Przy części założeń zwrot nie nastąpi w badanym okresie.</p></div></details>
        <details><summary>Czy kable grzejne w wylewce nie mają bezwładności?</summary><div class="rk-ec-faq-answer"><p>Mogą mieć znaczną bezwładność, jeśli współpracują z masywnym jastrychem. Dynamikę wyznaczają warstwy, masa, izolacja, moc i sterowanie, a nie wyłącznie to, czy nośnikiem jest woda lub prąd.</p></div></details>
        <details><summary>Jakie koszty trzeba uwzględnić w porównaniu TCO?</summary><div class="rk-ec-faq-answer"><p>Kompletną inwestycję po realnych dotacjach, energię zmienną, energię pomocniczą, serwis, automatykę, planowane wymiany i ten sam zakres funkcji. Koszt finansowania oraz wartość pieniądza w czasie analizuje się osobno.</p></div></details>
        <details><summary>Czy kalkulator zastępuje OZC i projekt ogrzewania?</summary><div class="rk-ec-faq-answer"><p>Nie. Kalkulator pokazuje konsekwencje ekonomiczne założeń. OZC i projekt sprawdzają, ile mocy potrzebują pomieszczenia oraz czy instalacja osiągnie ją przy prawidłowych temperaturach, przepływach i oporach.</p></div></details>
      </div>
    </section>

    <section class="rk-ec-section" id="rk-ec-author" aria-labelledby="rk-ec-author-heading">
      <div class="rk-ec-author">
        <div class="rk-ec-author-head">
          <div>
            <span class="rk-ec-eyebrow">E-E-A-T i odpowiedzialność za treść</span>
            <h2 id="rk-ec-author-heading">Autor i weryfikacja merytoryczna</h2>
            <p>Treść przygotowana z perspektywy pełnych kosztów inwestycji i eksploatacji, bilansu cieplnego oraz rzeczywistej pracy źródła ciepła.</p>
          </div>
          <span class="rk-ec-author-mark">Aktualizacja: 13.09.2026</span>
        </div>
        <div class="rk-ec-author-layout">
          <aside class="rk-ec-author-side">
            <div class="rk-ec-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji grzewczych" width="132" height="132" loading="lazy" decoding="async"></div>
            <div class="rk-ec-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
            <p class="rk-ec-author-role">Projektant instalacji sanitarnych i specjalista HVAC</p>
            <div class="rk-ec-author-social-label">Profile branżowe</div>
            <div class="rk-ec-author-social" aria-label="Profile branżowe Roberta Kucharskiego">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6.5 8.2H3.2V21h3.3V8.2ZM4.85 3A1.92 1.92 0 1 0 4.9 6.84 1.92 1.92 0 0 0 4.85 3ZM21 13.66c0-3.86-2.06-5.66-4.81-5.66a4.14 4.14 0 0 0-3.75 2.06V8.2H9.12V21h3.32v-6.34c0-1.67.32-3.29 2.39-3.29 2.04 0 2.07 1.91 2.07 3.4V21H21v-7.34Z"></path></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt Ogrzewania na Facebooku"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M14 8.5V7c0-.74.5-.92.85-.92H17V3.13L14.05 3C11.13 3 10.47 5.16 10.47 6.55V8.5H8v3.36h2.47V21H14v-9.14h2.7l.44-3.36H14Z"></path></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt HVAC w serwisie X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 3H22l-6.77 7.74L23.2 21h-6.24l-4.89-6.39L6.49 21H3.38l7.24-8.28L2.98 3h6.4l4.42 5.84L18.9 3Zm-1.09 16.2h1.72L8.44 4.7H6.59l11.22 14.5Z"></path></svg></a>
            </div>
          </aside>
          <div class="rk-ec-author-main">
            <blockquote class="rk-ec-author-quote"><p>Nie porównuję ogrzewania elektrycznego z wodną podłogówką wyłącznie przez cenę montażu albo energii. Najpierw odnoszę oba warianty do tego samego zapotrzebowania na ciepło, a następnie liczę inwestycję, eksploatację, serwis i wymiany w jednym okresie.</p></blockquote>
            <div class="rk-ec-author-cards">
              <div class="rk-ec-author-card"><b>Praktyka projektowa</b><p>Analiza OZC, kosztów inwestycji i eksploatacji, temperatury zasilania, hydrauliki oraz współpracy podłogówki ze źródłem ciepła.</p></div>
              <div class="rk-ec-author-card"><b>Metoda</b><p>Ogrzewanie elektryczne i wodna podłogówka są porównywane dla tego samego budynku, zapotrzebowania na ciepło, okresu oraz jawnych cen energii.</p></div>
              <div class="rk-ec-author-card"><b>Zakres aktualizacji</b><p>Rozdzielono koszt emitera od źródła oraz dodano kalkulator TCO, scenariusze cen energii, serwis, wymiany i ograniczenia obliczeń.</p></div>
            </div>
            <div class="rk-ec-author-mini-label">Portale autora</div>
            <div class="rk-ec-portals">
              <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>
  </article>
</div>

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

  var root = document.getElementById("rk-energy-choice");
  if (!root) return;

  var state = {
    mode: "annual",
    chart: "cumulative",
    source: "pump"
  };

  var defaults = {
    "rk-ec-demand": 8000,
    "rk-ec-intensity": 67,
    "rk-ec-area": 120,
    "rk-ec-price": 1.20,
    "rk-ec-capex-direct": 10000,
    "rk-ec-capex-pump": 40000,
    "rk-ec-scop": 3.5,
    "rk-ec-years": 20,
    "rk-ec-growth": 0,
    "rk-ec-eta": 0.99,
    "rk-ec-aux": 250,
    "rk-ec-service-direct": 0,
    "rk-ec-service-pump": 400,
    "rk-ec-pv-direct": 0,
    "rk-ec-pv-pump": 0,
    "rk-ec-replacement-year": 0,
    "rk-ec-replacement-cost": 25000
  };

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

  function numberFrom(id, fallback) {
    var node = el(id);
    if (!node) return fallback;
    var parsed = parseFloat(String(node.value).replace(",", "."));
    if (!Number.isFinite(parsed)) return fallback;
    return parsed;
  }

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

  function textTo(id, value) {
    var node = el(id);
    if (node) node.textContent = value;
  }

  function money(value) {
    return new Intl.NumberFormat("pl-PL", {
      style: "currency",
      currency: "PLN",
      maximumFractionDigits: 0
    }).format(value);
  }

  function energy(value) {
    return new Intl.NumberFormat("pl-PL", {
      maximumFractionDigits: 0
    }).format(value) + " kWh";
  }

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

  function readSettings() {
    var area = clamp(numberFrom("rk-ec-area", 120), 10, 1000);
    var directDemand = clamp(numberFrom("rk-ec-demand", 8000), 100, 200000);
    var intensity = clamp(numberFrom("rk-ec-intensity", 67), 1, 500);
    var demand = state.mode === "intensity" ? area * intensity : directDemand;
    var years = Math.round(clamp(numberFrom("rk-ec-years", 20), 1, 30));
    var replacementYear = Math.round(clamp(numberFrom("rk-ec-replacement-year", 0), 0, 30));

    return {
      area: area,
      demand: demand,
      price: clamp(numberFrom("rk-ec-price", 1.20), 0.01, 10),
      capexDirect: clamp(numberFrom("rk-ec-capex-direct", 10000), 0, 1000000),
      capexPump: clamp(numberFrom("rk-ec-capex-pump", 40000), 0, 1000000),
      scop: clamp(numberFrom("rk-ec-scop", 3.5), 1.1, 8),
      years: years,
      growth: clamp(numberFrom("rk-ec-growth", 0), -10, 30) / 100,
      eta: clamp(numberFrom("rk-ec-eta", 0.99), 0.80, 1),
      auxiliary: clamp(numberFrom("rk-ec-aux", 250), 0, 10000),
      serviceDirect: clamp(numberFrom("rk-ec-service-direct", 0), 0, 50000),
      servicePump: clamp(numberFrom("rk-ec-service-pump", 400), 0, 50000),
      pvDirect: clamp(numberFrom("rk-ec-pv-direct", 0), 0, 200000),
      pvPump: clamp(numberFrom("rk-ec-pv-pump", 0), 0, 200000),
      replacementYear: replacementYear,
      replacementCost: clamp(numberFrom("rk-ec-replacement-cost", 25000), 0, 500000)
    };
  }

  function calculate(settings) {
    var directGross = settings.demand / settings.eta;
    var pumpGross = settings.demand / settings.scop + settings.auxiliary;
    var directPv = Math.min(directGross, settings.pvDirect);
    var pumpPv = Math.min(pumpGross, settings.pvPump);
    var directPurchased = Math.max(0, directGross - directPv);
    var pumpPurchased = Math.max(0, pumpGross - pumpPv);
    var directCumulative = settings.capexDirect;
    var pumpCumulative = settings.capexPump;
    var rows = [{
      year: 0,
      price: settings.price,
      directEnergy: directPurchased,
      pumpEnergy: pumpPurchased,
      directAnnual: 0,
      pumpAnnual: 0,
      directCumulative: directCumulative,
      pumpCumulative: pumpCumulative,
      replacement: 0
    }];
    var payback = null;

    if (pumpCumulative <= directCumulative) payback = 0;

    for (var year = 1; year <= settings.years; year += 1) {
      var currentPrice = settings.price * Math.pow(1 + settings.growth, year - 1);
      var directAnnual = directPurchased * currentPrice + settings.serviceDirect;
      var pumpAnnual = pumpPurchased * currentPrice + settings.servicePump;
      var replacement = 0;
      if (settings.replacementYear > 0) {
        if (year === settings.replacementYear) replacement = settings.replacementCost;
      }
      directCumulative += directAnnual;
      pumpCumulative += pumpAnnual + replacement;
      if (payback === null) {
        if (pumpCumulative <= directCumulative) payback = year;
      }
      rows.push({
        year: year,
        price: currentPrice,
        directEnergy: directPurchased,
        pumpEnergy: pumpPurchased,
        directAnnual: directAnnual,
        pumpAnnual: pumpAnnual + replacement,
        pumpOperating: pumpAnnual,
        directCumulative: directCumulative,
        pumpCumulative: pumpCumulative,
        replacement: replacement
      });
    }

    return {
      settings: settings,
      directGross: directGross,
      pumpGross: pumpGross,
      directPurchased: directPurchased,
      pumpPurchased: pumpPurchased,
      directPv: directPv,
      pumpPv: pumpPv,
      rows: rows,
      payback: payback,
      directFinal: directCumulative,
      pumpFinal: pumpCumulative,
      delta: directCumulative - pumpCumulative,
      firstDirect: rows[1].directAnnual,
      firstPump: rows[1].pumpAnnual
    };
  }

  function paybackLabel(value, years) {
    if (value === null) return "brak w okresie " + years + " lat";
    if (value === 0) return "już w roku 0";
    return "w " + value + ". roku";
  }

  function deltaLabel(value) {
    if (Math.abs(value) < 1) return "praktycznie brak różnicy";
    if (value > 0) return money(value) + " mniej: wodna + pompa";
    return money(Math.abs(value)) + " mniej: elektryczne";
  }

  function compactValue(value, mode) {
    if (mode === "energy") {
      if (value >= 10000) return decimal(value / 1000, 0) + " tys.";
      if (value >= 1000) return decimal(value / 1000, 1) + " tys.";
      return decimal(value, 0);
    }
    if (value >= 1000000) return decimal(value / 1000000, 1) + " mln";
    if (value >= 10000) return decimal(value / 1000, 0) + " tys.";
    if (value >= 1000) return decimal(value / 1000, 1) + " tys.";
    return decimal(value, 0);
  }

  function setPressed(selector, key, active) {
    root.querySelectorAll(selector).forEach(function (button) {
      button.setAttribute("aria-pressed", button.getAttribute(key) === active ? "true" : "false");
    });
  }

  function updateModeUi() {
    setPressed("[data-rk-ec-mode]", "data-rk-ec-mode", state.mode);
    var annualField = el("rk-ec-annual-field");
    var intensityField = el("rk-ec-intensity-field");
    if (annualField) annualField.hidden = state.mode !== "annual";
    if (intensityField) intensityField.hidden = state.mode !== "intensity";
  }

  function updateMap() {
    setPressed("[data-rk-ec-source]", "data-rk-ec-source", state.source);
    if (state.source === "pump") {
      textTo("rk-ec-map-source-name", "pompa ciepła");
      textTo("rk-ec-map-source-node", "Pompa ciepła");
      el("rk-ec-map-formula").innerHTML = "<strong>Energia kupowana ≈ Q<sub>użyteczne</sub> ÷ SCOP + energia pomocnicza</strong><br>Niższa wymagana temperatura wody może sprzyjać sprawności pompy, ale SCOP trzeba przyjąć dla realnego układu i warunków.";
    } else {
      textTo("rk-ec-map-source-name", "kocioł elektryczny");
      textTo("rk-ec-map-source-node", "Kocioł elektryczny");
      el("rk-ec-map-formula").innerHTML = "<strong>Energia kupowana ≈ Q<sub>użyteczne</sub> ÷ η + energia pomocnicza</strong><br>Obieg wodny nie tworzy dodatkowej energii. Przy źródle oporowym jego pobór jest zbliżony do użytecznego ciepła, a pompy obiegowe zwiększają zużycie.";
    }
  }

  function updateValidation(settings, result) {
    var messages = [];
    if (settings.replacementYear > settings.years) messages.push("Rok wymiany leży poza wybranym okresem, więc koszt wymiany nie został doliczony.");
    if (settings.pvDirect > result.directGross) messages.push("PV dla elektrycznego ograniczono do rzeczywistego zużycia tego systemu.");
    if (settings.pvPump > result.pumpGross) messages.push("PV dla pompy ograniczono do rzeczywistego zużycia pompy i hydrauliki.");
    if (settings.capexPump === settings.capexDirect) messages.push("Oba warianty mają identyczny CAPEX — sprawdź, czy zakres ofert rzeczywiście jest taki sam.");
    textTo("rk-ec-validation", messages.join(" "));
  }

  function updateOutputs(result) {
    var settings = result.settings;
    textTo("rk-ec-out-energy-direct", energy(result.directPurchased) + "/rok");
    textTo("rk-ec-out-year-direct", money(result.firstDirect));
    textTo("rk-ec-out-m2-direct", money(result.firstDirect / settings.area) + "/m²");
    textTo("rk-ec-out-tco-direct", money(result.directFinal));
    textTo("rk-ec-out-energy-pump", energy(result.pumpPurchased) + "/rok");
    textTo("rk-ec-out-year-pump", money(result.firstPump));
    textTo("rk-ec-out-m2-pump", money(result.firstPump / settings.area) + "/m²");
    textTo("rk-ec-out-tco-pump", money(result.pumpFinal));
    textTo("rk-ec-out-demand", energy(settings.demand) + "/rok");
    textTo("rk-ec-out-payback", paybackLabel(result.payback, settings.years));
    textTo("rk-ec-out-delta", deltaLabel(result.delta));

    textTo("rk-ec-example-direct", money(result.firstDirect) + "/rok");
    textTo("rk-ec-example-pump", money(result.firstPump) + "/rok");
    textTo("rk-ec-example-payback", paybackLabel(result.payback, settings.years));
    textTo("rk-ec-example-delta", deltaLabel(result.delta));
  }

  function scenarioText(result) {
    return paybackLabel(result.payback, result.settings.years) + " · " + deltaLabel(result.delta);
  }

  function updateScenarios(settings) {
    var lowScop = clamp(settings.scop - 0.5, 1.1, 8);
    var highScop = clamp(settings.scop + 0.5, 1.1, 8);
    var lowSettings = Object.assign({}, settings, { scop: lowScop });
    var baseSettings = Object.assign({}, settings, { scop: settings.scop });
    var highSettings = Object.assign({}, settings, { scop: highScop });
    var low = calculate(lowSettings);
    var base = calculate(baseSettings);
    var high = calculate(highSettings);
    textTo("rk-ec-scenario-low-assumption", "SCOP " + decimal(lowScop, 1));
    textTo("rk-ec-scenario-base-assumption", "SCOP " + decimal(settings.scop, 1));
    textTo("rk-ec-scenario-high-assumption", "SCOP " + decimal(highScop, 1));
    textTo("rk-ec-scenario-low-result", scenarioText(low));
    textTo("rk-ec-scenario-base-result", scenarioText(base));
    textTo("rk-ec-scenario-high-result", scenarioText(high));
  }

  function milestones(years) {
    var source = [0, 1, 5, 10, 15, 20, 25, 30, years];
    var unique = [];
    source.forEach(function (value) {
      if (value <= years) {
        if (unique.indexOf(value) === -1) unique.push(value);
      }
    });
    unique.sort(function (a, b) { return a - b; });
    return unique;
  }

  function updateTable(result) {
    var body = el("rk-ec-year-table-body");
    if (!body) return;
    var html = "";
    milestones(result.settings.years).forEach(function (year) {
      var row = result.rows[year];
      var difference = row.directCumulative - row.pumpCumulative;
      var differenceText = Math.abs(difference) < 1 ? "brak" : (difference > 0 ? money(difference) + " mniej: pompa" : money(Math.abs(difference)) + " mniej: elektryczne");
      html += "<tr>";
      html += "<th data-label=\"Rok\">" + year + "</th>";
      html += "<td data-label=\"Elektryczne — TCO\">" + money(row.directCumulative) + "</td>";
      html += "<td data-label=\"Wodne + pompa — TCO\">" + money(row.pumpCumulative) + "</td>";
      html += "<td data-label=\"Różnica\">" + differenceText + "</td>";
      html += "</tr>";
    });
    body.innerHTML = html;
  }

  function seriesFor(result) {
    var data = [];
    var start = state.chart === "cumulative" ? 0 : 1;
    for (var year = start; year <= result.settings.years; year += 1) {
      var row = result.rows[year];
      var directValue;
      var pumpValue;
      if (state.chart === "cumulative") {
        directValue = row.directCumulative;
        pumpValue = row.pumpCumulative;
      } else if (state.chart === "annual") {
        directValue = row.directAnnual;
        pumpValue = row.pumpAnnual;
      } else {
        directValue = row.directEnergy;
        pumpValue = row.pumpEnergy;
      }
      data.push({ year: year, direct: directValue, pump: pumpValue });
    }
    return data;
  }

  function chartTitle() {
    if (state.chart === "annual") return "Koszt w kolejnych latach";
    if (state.chart === "energy") return "Roczna energia kupowana z sieci";
    return "Skumulowany koszt całkowity";
  }

  function drawChart(result) {
    var svg = el("rk-ec-chart");
    if (!svg) return;
    setPressed("[data-rk-ec-chart]", "data-rk-ec-chart", state.chart);
    textTo("rk-ec-chart-heading", chartTitle());

    var width = 760;
    var height = 390;
    var left = 74;
    var right = 24;
    var top = 26;
    var bottom = 54;
    var plotWidth = width - left - right;
    var plotHeight = height - top - bottom;
    var data = seriesFor(result);
    var xStart = state.chart === "cumulative" ? 0 : 1;
    var xEnd = result.settings.years;
    var xSpan = Math.max(1, xEnd - xStart);
    var maxValue = 1;

    data.forEach(function (point) {
      maxValue = Math.max(maxValue, point.direct, point.pump);
    });
    maxValue = maxValue * 1.12;

    function x(year) {
      return left + ((year - xStart) / xSpan) * plotWidth;
    }
    function y(value) {
      return top + plotHeight - (value / maxValue) * plotHeight;
    }

    var html = "";
    for (var tick = 0; tick <= 4; tick += 1) {
      var tickValue = maxValue * tick / 4;
      var tickY = y(tickValue);
      html += "<line class=\"rk-ec-gridline\" x1=\"" + left + "\" y1=\"" + tickY + "\" x2=\"" + (width - right) + "\" y2=\"" + tickY + "\"></line>";
      html += "<text class=\"rk-ec-gridtext\" x=\"" + (left - 10) + "\" y=\"" + (tickY + 4) + "\" text-anchor=\"end\">" + compactValue(tickValue, state.chart) + "</text>";
    }

    html += "<line class=\"rk-ec-axis\" x1=\"" + left + "\" y1=\"" + (top + plotHeight) + "\" x2=\"" + (width - right) + "\" y2=\"" + (top + plotHeight) + "\"></line>";
    html += "<line class=\"rk-ec-axis\" x1=\"" + left + "\" y1=\"" + top + "\" x2=\"" + left + "\" y2=\"" + (top + plotHeight) + "\"></line>";

    var tickStep = result.settings.years <= 10 ? 2 : 5;
    var xTicks = [xStart];
    for (var yearTick = tickStep; yearTick < xEnd; yearTick += tickStep) {
      if (yearTick >= xStart) xTicks.push(yearTick);
    }
    if (xTicks.indexOf(xEnd) === -1) xTicks.push(xEnd);
    xTicks.forEach(function (yearValue) {
      html += "<text class=\"rk-ec-gridtext\" x=\"" + x(yearValue) + "\" y=\"" + (height - 24) + "\" text-anchor=\"middle\">" + yearValue + "</text>";
    });
    html += "<text class=\"rk-ec-gridtext\" x=\"" + (left + plotWidth / 2) + "\" y=\"" + (height - 4) + "\" text-anchor=\"middle\">rok eksploatacji</text>";

    var directPoints = data.map(function (point) { return x(point.year) + "," + y(point.direct); }).join(" ");
    var pumpPoints = data.map(function (point) { return x(point.year) + "," + y(point.pump); }).join(" ");
    html += "<polyline class=\"rk-ec-path-direct\" points=\"" + directPoints + "\"></polyline>";
    html += "<polyline class=\"rk-ec-path-pump\" points=\"" + pumpPoints + "\"></polyline>";

    var firstPoint = data[0];
    var lastPoint = data[data.length - 1];
    html += "<circle cx=\"" + x(firstPoint.year) + "\" cy=\"" + y(firstPoint.direct) + "\" r=\"5\" fill=\"#ff6a3d\"></circle>";
    html += "<circle cx=\"" + x(firstPoint.year) + "\" cy=\"" + y(firstPoint.pump) + "\" r=\"5\" fill=\"#078fbe\"></circle>";
    html += "<circle cx=\"" + x(lastPoint.year) + "\" cy=\"" + y(lastPoint.direct) + "\" r=\"5\" fill=\"#ff6a3d\"></circle>";
    html += "<circle cx=\"" + x(lastPoint.year) + "\" cy=\"" + y(lastPoint.pump) + "\" r=\"5\" fill=\"#078fbe\"></circle>";

    if (state.chart === "cumulative") {
      if (result.payback !== null) {
        if (result.payback <= result.settings.years) {
          var markerX = x(result.payback);
          html += "<line class=\"rk-ec-payback-line\" x1=\"" + markerX + "\" y1=\"" + top + "\" x2=\"" + markerX + "\" y2=\"" + (top + plotHeight) + "\"></line>";
          html += "<text class=\"rk-ec-payback-label\" x=\"" + Math.min(width - right - 5, markerX + 7) + "\" y=\"" + (top + 14) + "\">przecięcie: rok " + result.payback + "</text>";
        }
      }
    }

    svg.innerHTML = html;

    var reading;
    if (state.chart === "cumulative") {
      if (result.payback === null) {
        reading = "W wybranym okresie krzywe TCO nie przecinają się. Po " + result.settings.years + " latach: " + deltaLabel(result.delta) + ".";
      } else {
        reading = "Pierwszy pełny rok, w którym TCO pompy nie przewyższa elektryki: " + result.payback + ". Po całym okresie: " + deltaLabel(result.delta) + ".";
      }
    } else if (state.chart === "annual") {
      var firstDifference = result.firstDirect - result.firstPump;
      reading = "W pierwszym roku różnica kosztu pracy wynosi " + money(Math.abs(firstDifference)) + "; niższy koszt ma " + (firstDifference >= 0 ? "wariant z pompą ciepła" : "wariant elektryczny") + ". Skok na niebieskiej linii może oznaczać wpisaną wymianę pompy.";
    } else {
      var energyDifference = result.directPurchased - result.pumpPurchased;
      reading = "Roczny zakup energii różni się o " + energy(Math.abs(energyDifference)) + ". Wykres uwzględnia osobne wartości autokonsumpcji PV oraz energię pomocniczą pompy.";
    }
    textTo("rk-ec-chart-reading", reading);
    svg.setAttribute("aria-label", chartTitle() + ". " + reading);
  }

  function update() {
    var settings = readSettings();
    var result = calculate(settings);
    updateModeUi();
    updateValidation(settings, result);
    updateOutputs(result);
    updateScenarios(settings);
    updateTable(result);
    drawChart(result);
  }

  function reset() {
    Object.keys(defaults).forEach(function (id) {
      var node = el(id);
      if (node) node.value = defaults[id];
    });
    state.mode = "annual";
    state.chart = "cumulative";
    state.source = "pump";
    updateMap();
    update();
  }

  root.addEventListener("click", function (event) {
    var modeButton = event.target.closest("[data-rk-ec-mode]");
    if (modeButton) {
      state.mode = modeButton.getAttribute("data-rk-ec-mode");
      update();
      return;
    }
    var chartButton = event.target.closest("[data-rk-ec-chart]");
    if (chartButton) {
      state.chart = chartButton.getAttribute("data-rk-ec-chart");
      update();
      return;
    }
    var sourceButton = event.target.closest("[data-rk-ec-source]");
    if (sourceButton) {
      state.source = sourceButton.getAttribute("data-rk-ec-source");
      updateMap();
      return;
    }
    var resetButton = event.target.closest("#rk-ec-reset");
    if (resetButton) reset();
  });

  root.addEventListener("input", function (event) {
    if (event.target.matches("input, select")) update();
  });
  root.addEventListener("change", function (event) {
    if (event.target.matches("input, select")) update();
  });

  root.querySelectorAll(".rk-ec-faq details").forEach(function (detail) {
    detail.addEventListener("toggle", function () {
      if (!detail.open) return;
      root.querySelectorAll(".rk-ec-faq details").forEach(function (other) {
        if (other !== detail) other.open = false;
      });
    });
  });

  updateMap();
  update();
})();
</script>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "description": "Projektowanie ogrzewania podłogowego, obliczenia OZC, hydraulika instalacji i poradniki techniczne HVAC.",
      "inLanguage": "pl-PL",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://projekt-ogrzewania.pl/?s={search_term_string}"
        },
        "query-input": "required name=search_term_string"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": { "@id": "https://projekt-ogrzewania.pl/#logo" },
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#logo",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "width": 1024,
      "height": 1024,
      "caption": "Projekt Ogrzewania"
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Ogrzewanie-elektryczne-vs-wodna-podlogowka-Kalkulator-kosztow-eksploatacji.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Ogrzewanie-elektryczne-vs-wodna-podlogowka-Kalkulator-kosztow-eksploatacji.webp",
      "width": 900,
      "height": 900,
      "encodingFormat": "image/webp",
      "caption": "Ogrzewanie elektryczne czy wodna podłogówka z pompą ciepła — kalkulator kosztów eksploatacji"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "affiliation": [
        { "@id": "https://remont.biz.pl/#organization" },
        { "@id": "https://sobir.pl/#organization" }
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "pompy ciepła",
        "obliczenia OZC",
        "koszt cyklu życia TCO",
        "hydraulika instalacji",
        "temperatura zasilania",
        "efektywność sezonowa SCOP"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#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": "Elektryczne czy wodna podłogówka — kalkulator kosztów",
          "item": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#webpage",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/",
      "name": "Ogrzewanie elektryczne czy wodna podłogówka z pompą ciepła? Kalkulator kosztów eksploatacji",
      "description": "Co jest tańsze: ogrzewanie elektryczne czy wodna podłogówka z pompą ciepła? Policz rachunki, koszt 20 lat i rzeczywisty rok zwrotu inwestycji.",
      "inLanguage": "pl-PL",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#breadcrumb" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#primaryimage" },
      "datePublished": "2026-05-31T18:20:19+00:00",
      "dateModified": "2026-09-13T00:00:00+00:00",
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "reviewedBy": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#article" },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": ["#rk-ec-answer", "#rk-ec-conclusion"]
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#article",
      "headline": "Ogrzewanie elektryczne czy wodna podłogówka z pompą ciepła? Kalkulator kosztów eksploatacji",
      "alternativeHeadline": "Elektryczne czy wodna podłogówka — co jest tańsze po 10, 20 i 30 latach?",
      "description": "Techniczne porównanie kosztu inwestycji, energii, serwisu i wymian wraz z kalkulatorem TCO, wykresem oraz analizą SCOP.",
      "image": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#primaryimage" },
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#webpage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-05-31T18:20:19+00:00",
      "dateModified": "2026-09-13T00:00:00+00:00",
      "inLanguage": "pl-PL",
      "articleSection": [
        "Koszty ogrzewania",
        "Ogrzewanie elektryczne",
        "Ogrzewanie podłogowe",
        "Pompy ciepła",
        "Kalkulatory"
      ],
      "keywords": [
        "ogrzewanie elektryczne czy wodna podłogówka",
        "ogrzewanie elektryczne czy wodne co tańsze",
        "koszt ogrzewania podłogowego elektrycznego 100 m²",
        "koszt wodnej podłogówki z pompą ciepła rocznie",
        "ogrzewanie elektryczne vs pompa ciepła kalkulator",
        "ile kosztuje ogrzewanie elektryczne domu 120 m²",
        "po ilu latach zwraca się pompa ciepła",
        "kable grzejne czy wodne ogrzewanie podłogowe",
        "koszt 1 kWh ciepła kabel grzejny vs pompa ciepła",
        "ogrzewanie podłogowe elektryczne z fotowoltaiką",
        "folia grzewcza czy wodna podłogówka",
        "koszt ogrzewania domu po 10 i 20 latach"
      ],
      "about": [
        { "@type": "Thing", "name": "Elektryczne ogrzewanie podłogowe" },
        { "@type": "Thing", "name": "Wodne ogrzewanie podłogowe" },
        { "@type": "Thing", "name": "Pompa ciepła" },
        { "@type": "Thing", "name": "Koszt cyklu życia" }
      ],
      "mentions": [
        { "@type": "DefinedTerm", "name": "CAPEX", "description": "Nakład inwestycyjny" },
        { "@type": "DefinedTerm", "name": "OPEX", "description": "Koszt eksploatacyjny" },
        { "@type": "DefinedTerm", "name": "TCO", "description": "Całkowity koszt posiadania" },
        { "@type": "DefinedTerm", "name": "SCOP", "description": "Sezonowy współczynnik efektywności pompy ciepła" }
      ],
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#tco-calculator" },
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#comparison-inputs" },
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#faq-schema" }
      ],
      "citation": [
        "https://www.iso.org/standard/74682.html",
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://www.iso.org/standard/74685.html",
        "https://maszwybor.ure.gov.pl/or/cenki",
        "https://re.jrc.ec.europa.eu/pvg_tools/en/",
        "https://energy.ec.europa.eu/topics/energy-efficiency/energy-performance-buildings/energy-performance-buildings-directive_en"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#tco-calculator",
      "name": "Kalkulator kosztów ogrzewania elektrycznego i wodnej podłogówki z pompą ciepła",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#rk-ec-calculator",
      "description": "Oblicza zakup energii, koszt pierwszego roku, koszt na metr kwadratowy, TCO do 30 lat, pierwszy rok przecięcia oraz wrażliwość na SCOP.",
      "applicationCategory": "UtilitiesApplication",
      "applicationSubCategory": "Heating cost calculator",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      },
      "featureList": [
        "dwa sposoby podania użytecznego ciepła",
        "pełna zmienna cena energii",
        "nakłady po dotacjach",
        "SCOP i sprawność elektryczna",
        "energia pomocnicza",
        "serwis obu systemów",
        "osobna autokonsumpcja PV",
        "wymiana pompy ciepła",
        "jawny wzrost ceny prądu",
        "TCO od 1 do 30 lat",
        "pierwszy rok przecięcia kosztów",
        "trzy widoki wykresu",
        "tabela wybranych lat",
        "analiza wrażliwości na SCOP"
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#howto",
      "name": "Jak uczciwie porównać ogrzewanie elektryczne i wodne krok po kroku",
      "description": "Osiem kroków od ustalenia komfortu i zapotrzebowania po analizę scenariuszy oraz potwierdzenie techniczne.",
      "totalTime": "PT45M",
      "supply": [
        { "@type": "HowToSupply", "name": "OZC lub bilans rocznej energii użytecznej" },
        { "@type": "HowToSupply", "name": "Kompletne oferty obu systemów" },
        { "@type": "HowToSupply", "name": "Rachunek i umowa za energię" },
        { "@type": "HowToSupply", "name": "Dane sezonowe pompy ciepła" },
        { "@type": "HowToSupply", "name": "Warunki serwisu, gwarancji i dotacji" }
      ],
      "tool": [
        { "@type": "HowToTool", "name": "Kalkulator TCO w artykule" },
        { "@type": "HowToTool", "name": "Dokumentacja budynku i instalacji" }
      ],
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Ustal ten sam komfort",
          "text": "Zdefiniuj ogrzewane pomieszczenia, temperatury wewnętrzne, harmonogram i ten sam zakres CWU lub wyłącz CWU z obu wariantów."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Wyznacz użyteczne ciepło",
          "text": "Przyjmij roczne kWh z obliczeń budynku albo świadomie oszacuj je z powierzchni i wskaźnika energii — bez mieszania z mocą W."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Wyrównaj zakres CAPEX",
          "text": "Porównaj projekt, emiter, źródło, automatykę, elektrykę, hydraulikę, montaż, uruchomienie oraz koszty po faktycznych dotacjach."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Wpisz cenę z rachunku",
          "text": "Dodaj cenę energii i zmienne składniki dystrybucji. Nie doliczaj opłaty stałej, jeśli występuje identycznie niezależnie od wyboru."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Przyjmij sezonową sprawność",
          "text": "Dla elektryki użyj η bliskiej 1, a dla pompy realistycznego SCOP uwzględniającego klimat, temperaturę wody i działanie instalacji."
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Dodaj serwis, PV i wymianę",
          "text": "Wpisz koszty roczne, energię pomocniczą, udokumentowaną autokonsumpcję ogrzewania oraz wariant wymiany pompy."
        },
        {
          "@type": "HowToStep",
          "position": 7,
          "name": "Sprawdź kilka scenariuszy",
          "text": "Zmień SCOP, cenę prądu, wzrost ceny, horyzont i koszt wymiany. Zwróć uwagę, czy wybór pozostaje stabilny."
        },
        {
          "@type": "HowToStep",
          "position": 8,
          "name": "Potwierdź wykonalność",
          "text": "Zweryfikuj moce, rozstawy, temperatury, przepływy, opory, przyłącze i sterowanie. Kalkulacja finansowa nie zastępuje projektu."
        }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#comparison-inputs",
      "name": "Dane potrzebne do porównania kosztów ogrzewania",
      "numberOfItems": 8,
      "itemListOrder": "https://schema.org/ItemListOrderAscending",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Ten sam zakres komfortu" },
        { "@type": "ListItem", "position": 2, "name": "Roczne użyteczne ciepło" },
        { "@type": "ListItem", "position": 3, "name": "Kompletny CAPEX po dotacjach" },
        { "@type": "ListItem", "position": 4, "name": "Zmienna cena energii z rachunku" },
        { "@type": "ListItem", "position": 5, "name": "Sprawność η i sezonowy SCOP" },
        { "@type": "ListItem", "position": 6, "name": "Energia pomocnicza i serwis" },
        { "@type": "ListItem", "position": 7, "name": "Rzeczywista autokonsumpcja PV" },
        { "@type": "ListItem", "position": 8, "name": "Koszt i rok wymiany urządzenia" }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#faq-schema",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/#rk-ec-faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Co jest tańsze: ogrzewanie elektryczne czy wodna podłogówka z pompą ciepła?",
          "acceptedAnswer": { "@type": "Answer", "text": "Elektryczne bezpośrednie zwykle wymaga niższego nakładu, a pompa ciepła może mieć niższy koszt energii. O niższym TCO decydują zapotrzebowanie, pełny CAPEX, SCOP, cena prądu, serwis, wymiany i czas analizy." }
        },
        {
          "@type": "Question",
          "name": "Ile kosztuje ogrzewanie podłogowe elektryczne domu 100 m² rocznie?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie da się tego określić z samej powierzchni. Roczny koszt to w przybliżeniu użyteczne ciepło podzielone przez sprawność, pomniejszone o rzeczywistą autokonsumpcję PV i pomnożone przez zmienną cenę kWh, plus serwis." }
        },
        {
          "@type": "Question",
          "name": "Jakie zapotrzebowanie wpisać do kalkulatora?",
          "acceptedAnswer": { "@type": "Answer", "text": "Roczne użyteczne ciepło potrzebne do ogrzewania pomieszczeń, najlepiej z wiarygodnych obliczeń. Nie wpisuj mocy urządzenia w kW ani energii pierwotnej. Alternatywnie użyj powierzchni i świadomie przyjętego kWh/(m²·rok)." }
        },
        {
          "@type": "Question",
          "name": "Czy COP 3,5 oznacza, że rachunek zawsze będzie 3,5 razy niższy?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Do porównania rocznego potrzebny jest sezonowy SCOP, a ponadto trzeba doliczyć energię pomocniczą, serwis i nakład. Chwilowy COP zależy od konkretnego punktu pracy." }
        },
        {
          "@type": "Question",
          "name": "Czy wodna podłogówka z kotłem elektrycznym zużyje mniej prądu niż kable?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie należy tego zakładać. Oba warianty wykorzystują oporowe wytwarzanie ciepła ze sprawnością bliską 1, a układ wodny ma dodatkową energię pomp. Jego zaletą może być możliwość późniejszej zmiany źródła." }
        },
        {
          "@type": "Question",
          "name": "Czy fotowoltaika zapewnia darmowe ogrzewanie elektryczne?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie automatycznie. Trzeba rozliczyć zgodność produkcji i zużycia w czasie, zasady umowy oraz energię rzeczywiście wykorzystaną na ogrzewanie. Cała roczna produkcja PV nie jest autokonsumpcją zimowego grzania." }
        },
        {
          "@type": "Question",
          "name": "Po ilu latach zwraca się wodna podłogówka z pompą ciepła?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednej liczby. Rok zwrotu jest pierwszym rokiem, gdy skumulowane oszczędności operacyjne pokrywają różnicę inwestycji i dodatkowe koszty. Przy części założeń zwrot nie nastąpi w badanym okresie." }
        },
        {
          "@type": "Question",
          "name": "Czy kable grzejne w wylewce nie mają bezwładności?",
          "acceptedAnswer": { "@type": "Answer", "text": "Mogą mieć znaczną bezwładność, jeśli współpracują z masywnym jastrychem. Dynamikę wyznaczają warstwy, masa, izolacja, moc i sterowanie, a nie wyłącznie to, czy nośnikiem jest woda lub prąd." }
        },
        {
          "@type": "Question",
          "name": "Jakie koszty trzeba uwzględnić w porównaniu TCO?",
          "acceptedAnswer": { "@type": "Answer", "text": "Kompletną inwestycję po realnych dotacjach, energię zmienną, energię pomocniczą, serwis, automatykę, planowane wymiany i ten sam zakres funkcji. Koszt finansowania oraz wartość pieniądza w czasie analizuje się osobno." }
        },
        {
          "@type": "Question",
          "name": "Czy kalkulator zastępuje OZC i projekt ogrzewania?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Kalkulator pokazuje konsekwencje ekonomiczne założeń. OZC i projekt sprawdzają, ile mocy potrzebują pomieszczenia oraz czy instalacja osiągnie ją przy prawidłowych temperaturach, przepływach i oporach." }
        }
      ]
    }
  ]
}
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/">Ogrzewanie elektryczne vs wodna podłogówka: Kalkulator kosztów eksploatacji.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 07:40:41 +0000</pubDate>
				<category><![CDATA[Błędy wykonawcze]]></category>
		<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Energooszczędne ogrzewanie]]></category>
		<category><![CDATA[Koszty inwestycji]]></category>
		<category><![CDATA[Normy budowlane]]></category>
		<category><![CDATA[Normy techniczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Optymalizacja kosztów]]></category>
		<category><![CDATA[Oszczędności energii]]></category>
		<category><![CDATA[Oszczędzanie energii]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[błędy na budowie]]></category>
		<category><![CDATA[dylatacje podłogówki]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[koszty budowy]]></category>
		<category><![CDATA[norma pn-en 1264]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[próba ciśnieniowa]]></category>
		<category><![CDATA[próba szczelności]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[projekt ozc]]></category>
		<category><![CDATA[rotametry]]></category>
		<category><![CDATA[rozdzielacz inox]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[styropian pod wylewkę]]></category>
		<category><![CDATA[taśma brzegowa]]></category>
		<category><![CDATA[usterki hydrauliczne]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4403</guid>

					<description><![CDATA[<p>Zdecydowałeś się na nowoczesną instalację płaszczyznową, zapłaciłeś za profesjonalne wyliczenia OZC i kupiłeś drogi rozdzielacz? To świetny start, ale niestety to za mało, aby spać spokojnie. Prawdziwy test dla Twojej inwestycji odbywa się w momencie zalewania rur betonem. To właśnie w tej fazie najczęściej dochodzi do kosztownych pomyłek z winy pośpiechu i brawury ekip. Pozorna oszczędność na taśmie dylatacyjnej, zalanie jastrychu bez odpowiedniego ciśnienia czy zignorowanie zaleceń dotyczących grubości izolacji to klasyczne przykłady na to, jak najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego, potrafią zrujnować Twój portfel. Skucie popękanej posadzki i naprawa wycieków kosztują kilkadziesiąt tysięcy złotych. Przeczytaj ten raport, zapisz naszą listę kontrolną i obroń swój budżet, zanim betoniarka wjedzie na plac budowy.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/">Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-build-control {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #28c9da;
    --rk-cyan-soft: #e9fbfe;
    --rk-orange: #ff6238;
    --rk-red: #d83c2f;
    --rk-red-soft: #fff0ed;
    --rk-green: #178265;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #f2b441;
    --rk-yellow-soft: #fff7e6;
    --rk-ink: #1d2c3a;
    --rk-text: #465a6b;
    --rk-muted: #687b89;
    --rk-line: #d7e6ed;
    --rk-soft: #f4f9fb;
    --rk-warm: #fff4ef;
    --rk-white: #ffffff;
    width: 100%;
    max-width: 1480px;
    margin: 32px auto 70px;
    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.78;
  }

  #rk-build-control,
  #rk-build-control * {
    box-sizing: border-box;
  }

  #rk-build-control img,
  #rk-build-control svg {
    max-width: 100%;
  }

  #rk-build-control button,
  #rk-build-control input,
  #rk-build-control a,
  #rk-build-control summary,
  #rk-build-control label {
    -webkit-tap-highlight-color: transparent;
  }

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

  #rk-build-control a:hover {
    color: var(--rk-red);
  }

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

  #rk-build-control h2 {
    margin-bottom: 18px;
    font-size: clamp(1.65rem, 3.6vw, 2.65rem);
  }

  #rk-build-control h3 {
    margin-bottom: 12px;
    font-size: clamp(1.18rem, 2.5vw, 1.58rem);
  }

  #rk-build-control h4 {
    margin-bottom: 8px;
    font-size: 1.02rem;
    letter-spacing: -0.015em;
  }

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

  #rk-build-control p {
    margin: 0 0 1.22em;
    color: var(--rk-text);
  }

  #rk-build-control strong {
    color: var(--rk-dark);
  }

  #rk-build-control section[id] {
    scroll-margin-top: 30px;
  }

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

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

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

  #rk-build-control .rk-build-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(38px, 6.5vw, 80px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 88% 14%, rgba(255, 98, 56, 0.34), transparent 28%),
      radial-gradient(circle at 73% 82%, rgba(40, 201, 218, 0.22), transparent 32%),
      linear-gradient(135deg, #0d2230 0%, #143b50 58%, #09647e 100%);
  }

  #rk-build-control .rk-build-hero::before,
  #rk-build-control .rk-build-hero::after {
    content: "";
    position: absolute;
    z-index: -1;
    border-radius: 50%;
    pointer-events: none;
  }

  #rk-build-control .rk-build-hero::before {
    right: -135px;
    bottom: -190px;
    width: 430px;
    height: 430px;
    border: 62px solid rgba(255, 255, 255, 0.055);
  }

  #rk-build-control .rk-build-hero::after {
    right: 145px;
    bottom: -135px;
    width: 245px;
    height: 245px;
    border: 35px solid rgba(255, 98, 56, 0.13);
  }

  #rk-build-control .rk-build-badge {
    display: inline-flex;
    gap: 10px;
    align-items: center;
    margin: 0 0 24px;
    padding: 8px 15px;
    border: 1px solid rgba(255, 255, 255, 0.23);
    border-radius: 999px;
    color: var(--rk-white);
    background: rgba(255, 255, 255, 0.08);
    font-size: 0.73rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-badge::before {
    content: "";
    width: 10px;
    height: 10px;
    flex: 0 0 10px;
    border-radius: 50%;
    background: var(--rk-orange);
    box-shadow: 0 0 0 6px rgba(255, 98, 56, 0.18);
  }

  #rk-build-control .rk-build-hero h2 {
    max-width: 1080px;
    margin-bottom: 24px;
    color: var(--rk-white);
    font-size: clamp(2.05rem, 5.1vw, 3.9rem);
    letter-spacing: -0.055em;
  }

  #rk-build-control .rk-build-hero h2 span {
    color: #83edf5;
  }

  #rk-build-control .rk-build-hook {
    max-width: 930px;
    margin: 0 0 21px;
    padding: 20px 22px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-left: 5px solid var(--rk-orange);
    border-radius: 0 16px 16px 0;
    color: #eefbff;
    background: rgba(4, 23, 34, 0.28);
    font-size: clamp(1.02rem, 2vw, 1.22rem);
    font-weight: 760;
  }

  #rk-build-control .rk-build-hero-lead {
    max-width: 970px;
    margin-bottom: 25px;
    color: #d8e8ee;
    font-size: clamp(1rem, 1.8vw, 1.16rem);
  }

  #rk-build-control .rk-build-hero-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 26px;
    color: #d8e8ee;
    font-size: 0.84rem;
    font-weight: 800;
  }

  #rk-build-control .rk-build-hero-meta span {
    display: inline-flex;
    gap: 8px;
    align-items: center;
  }

  #rk-build-control .rk-build-hero-meta span::before {
    content: "";
    width: 7px;
    height: 7px;
    border-radius: 50%;
    background: var(--rk-orange);
  }

  #rk-build-control .rk-build-nav {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding: 18px clamp(20px, 4vw, 52px);
    border-bottom: 1px solid var(--rk-line);
    background: #f8fbfc;
  }

  #rk-build-control .rk-build-nav a {
    display: inline-flex;
    align-items: center;
    min-height: 42px;
    padding: 8px 14px;
    border: 1px solid #c9dce5;
    border-radius: 999px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-size: 0.8rem;
    font-weight: 850;
    line-height: 1.3;
    text-decoration: none;
  }

  #rk-build-control .rk-build-nav a:hover,
  #rk-build-control .rk-build-nav a:focus-visible {
    border-color: var(--rk-blue);
    color: var(--rk-white);
    background: var(--rk-blue);
    outline: none;
  }

  #rk-build-control .rk-build-content {
    padding: clamp(26px, 5.2vw, 72px);
  }

  #rk-build-control .rk-build-section {
    padding: clamp(24px, 4.2vw, 54px) 0;
    border-bottom: 1px solid var(--rk-line);
  }

  #rk-build-control .rk-build-section:last-child {
    border-bottom: 0;
  }

  #rk-build-control .rk-build-section-head {
    display: grid;
    grid-template-columns: 62px minmax(0, 1fr);
    gap: 20px;
    align-items: start;
    margin-bottom: 25px;
  }

  #rk-build-control .rk-build-section-no {
    display: grid;
    place-items: center;
    width: 62px;
    height: 62px;
    border-radius: 18px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-blue), var(--rk-cyan));
    box-shadow: 0 12px 25px rgba(7, 143, 190, 0.18);
    font-size: 0.84rem;
    font-weight: 950;
    letter-spacing: 0.05em;
  }

  #rk-build-control .rk-build-section-head p {
    max-width: 930px;
    margin: 0;
  }

  #rk-build-control .rk-build-answer {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(250px, 0.42fr);
    gap: 26px;
    align-items: stretch;
    padding: clamp(24px, 4vw, 42px);
    border: 1px solid #bce8ef;
    border-radius: 24px;
    background: linear-gradient(135deg, #f2fdff, #ffffff 58%);
  }

  #rk-build-control .rk-build-answer h3 {
    font-size: clamp(1.35rem, 3vw, 2rem);
  }

  #rk-build-control .rk-build-answer p:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-answer-verdict {
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 24px;
    border-radius: 20px;
    color: var(--rk-white);
    background: linear-gradient(145deg, var(--rk-dark), var(--rk-navy));
  }

  #rk-build-control .rk-build-answer-verdict span {
    display: block;
    margin-bottom: 8px;
    color: #83edf5;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-answer-verdict strong {
    color: var(--rk-white);
    font-size: clamp(1.22rem, 2.6vw, 1.7rem);
    line-height: 1.22;
  }

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

  #rk-build-control .rk-build-flow-card {
    position: relative;
    min-height: 190px;
    padding: 26px;
    border: 1px solid var(--rk-line);
    border-radius: 22px;
    background: var(--rk-white);
  }

  #rk-build-control .rk-build-flow-card:not(:last-child)::after {
    content: "→";
    position: absolute;
    z-index: 3;
    top: 50%;
    right: -25px;
    display: grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-orange);
    transform: translateY(-50%);
    font-weight: 950;
  }

  #rk-build-control .rk-build-flow-card span {
    display: inline-flex;
    margin-bottom: 15px;
    padding: 6px 10px;
    border-radius: 999px;
    color: var(--rk-blue);
    background: var(--rk-cyan-soft);
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-flow-card p:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-formulas {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin-top: 26px;
  }

  #rk-build-control .rk-build-formula {
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-soft);
  }

  #rk-build-control .rk-build-formula code {
    display: block;
    margin: 12px 0 14px;
    padding: 14px 16px;
    border-radius: 12px;
    color: #eafcff;
    background: var(--rk-dark);
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
    font-size: clamp(0.95rem, 2vw, 1.12rem);
    font-weight: 800;
    line-height: 1.45;
    white-space: normal;
  }

  #rk-build-control .rk-build-formula p:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-note,
  #rk-build-control .rk-build-warning,
  #rk-build-control .rk-build-tip {
    margin: 25px 0;
    padding: 22px 24px;
    border-radius: 18px;
  }

  #rk-build-control .rk-build-note {
    border-left: 5px solid var(--rk-blue);
    background: var(--rk-cyan-soft);
  }

  #rk-build-control .rk-build-warning {
    border-left: 5px solid var(--rk-red);
    background: var(--rk-red-soft);
  }

  #rk-build-control .rk-build-tip {
    border-left: 5px solid var(--rk-green);
    background: var(--rk-green-soft);
  }

  #rk-build-control .rk-build-note p:last-child,
  #rk-build-control .rk-build-warning p:last-child,
  #rk-build-control .rk-build-tip p:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-table-wrap {
    margin: 28px 0;
    border: 1px solid var(--rk-line);
    border-radius: 22px;
    overflow: hidden;
  }

  #rk-build-control .rk-build-table {
    width: 100%;
    border: 0;
    border-collapse: collapse;
    table-layout: fixed;
    margin: 0;
    background: var(--rk-white);
  }

  #rk-build-control .rk-build-table th,
  #rk-build-control .rk-build-table td {
    padding: 17px 18px;
    border: 0;
    border-bottom: 1px solid var(--rk-line);
    vertical-align: top;
    text-align: left;
  }

  #rk-build-control .rk-build-table th {
    color: var(--rk-white);
    background: var(--rk-dark);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.05em;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-table td {
    color: var(--rk-text);
    font-size: 0.9rem;
    line-height: 1.58;
  }

  #rk-build-control .rk-build-table tr:last-child td {
    border-bottom: 0;
  }

  #rk-build-control .rk-build-table tbody tr:nth-child(even) td {
    background: #f8fbfc;
  }

  #rk-build-control .rk-build-status {
    display: inline-flex;
    padding: 5px 9px;
    border-radius: 999px;
    font-size: 0.68rem;
    font-weight: 900;
    letter-spacing: 0.04em;
    line-height: 1.25;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-status.is-red {
    color: #a52e22;
    background: #ffe2dc;
  }

  #rk-build-control .rk-build-status.is-orange {
    color: #8c5419;
    background: #fff0cd;
  }

  #rk-build-control .rk-build-status.is-green {
    color: #176f58;
    background: #dff4eb;
  }

  #rk-build-control .rk-build-responsibility {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 14px;
    margin-top: 28px;
  }

  #rk-build-control .rk-build-responsibility-card {
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-white);
  }

  #rk-build-control .rk-build-responsibility-card > span {
    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: 0.74rem;
    font-weight: 950;
  }

  #rk-build-control .rk-build-responsibility-card p:last-child {
    margin-bottom: 0;
    font-size: 0.88rem;
    line-height: 1.62;
  }

  #rk-build-control .rk-build-audit {
    overflow: hidden;
    margin-top: 30px;
    border: 1px solid #b9dce6;
    border-radius: 26px;
    background: var(--rk-white);
    box-shadow: 0 18px 45px rgba(16, 37, 54, 0.09);
  }

  #rk-build-control .rk-build-audit-head {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 310px;
    gap: 24px;
    align-items: center;
    padding: clamp(24px, 4vw, 40px);
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-dark), #14516a);
  }

  #rk-build-control .rk-build-audit-head h3 {
    margin-bottom: 10px;
    color: var(--rk-white);
  }

  #rk-build-control .rk-build-audit-head p {
    margin: 0;
    color: #d8e8ee;
  }

  #rk-build-control .rk-build-audit-score {
    padding: 20px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 19px;
    background: rgba(255, 255, 255, 0.08);
  }

  #rk-build-control .rk-build-audit-score-label {
    display: block;
    color: #b9dce6;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-audit-score strong {
    display: block;
    margin: 4px 0 3px;
    color: var(--rk-white);
    font-size: clamp(2rem, 5vw, 3.1rem);
    line-height: 1;
  }

  #rk-build-control .rk-build-audit-score small {
    color: #d8e8ee;
    font-weight: 750;
  }

  #rk-build-control .rk-build-audit-bar {
    height: 12px;
    overflow: hidden;
    background: #dcebf0;
  }

  #rk-build-control .rk-build-audit-fill {
    width: 0;
    height: 100%;
    background: var(--rk-red);
    transition: width 0.24s ease, background 0.24s ease;
  }

  #rk-build-control .rk-build-audit-result {
    display: grid;
    grid-template-columns: 160px minmax(0, 1fr);
    gap: 22px;
    align-items: center;
    padding: 24px clamp(22px, 4vw, 38px);
    border-bottom: 1px solid var(--rk-line);
    background: var(--rk-red-soft);
  }

  #rk-build-control .rk-build-audit-signal {
    display: grid;
    place-items: center;
    min-height: 76px;
    padding: 12px;
    border-radius: 16px;
    color: var(--rk-white);
    background: var(--rk-red);
    font-size: 1.18rem;
    font-weight: 950;
    line-height: 1.18;
    text-align: center;
  }

  #rk-build-control .rk-build-audit-result p {
    margin: 0;
    font-weight: 740;
  }

  #rk-build-control .rk-build-audit-body {
    padding: clamp(22px, 4vw, 38px);
  }

  #rk-build-control .rk-build-audit-stage-nav {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 10px;
    margin-bottom: 26px;
  }

  #rk-build-control .rk-build-audit-stage-nav a {
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 78px;
    padding: 12px;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    color: var(--rk-dark);
    background: var(--rk-soft);
    text-align: center;
    text-decoration: none;
  }

  #rk-build-control .rk-build-audit-stage-nav a span {
    color: var(--rk-blue);
    font-size: 0.67rem;
    font-weight: 950;
    letter-spacing: 0.07em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-audit-stage-nav a strong {
    font-size: 0.78rem;
    line-height: 1.35;
  }

  #rk-build-control .rk-build-audit-stage-nav a:hover,
  #rk-build-control .rk-build-audit-stage-nav a:focus-visible {
    border-color: var(--rk-blue);
    background: var(--rk-cyan-soft);
    outline: none;
  }

  #rk-build-control .rk-build-audit-groups {
    display: grid;
    gap: 18px;
  }

  #rk-build-control .rk-build-audit-group {
    scroll-margin-top: 30px;
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: #fbfdfe;
  }

  #rk-build-control .rk-build-audit-group-head {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    align-items: center;
    margin-bottom: 16px;
  }

  #rk-build-control .rk-build-audit-group-head h4 {
    margin: 0;
  }

  #rk-build-control .rk-build-stage-count {
    flex: 0 0 auto;
    padding: 5px 9px;
    border-radius: 999px;
    color: var(--rk-blue);
    background: var(--rk-cyan-soft);
    font-size: 0.7rem;
    font-weight: 900;
  }

  #rk-build-control .rk-build-checks {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  #rk-build-control .rk-build-check {
    position: relative;
    display: grid;
    grid-template-columns: 25px minmax(0, 1fr);
    gap: 11px;
    align-items: start;
    min-height: 66px;
    margin: 0;
    padding: 14px;
    border: 1px solid #dbe7ec;
    border-radius: 14px;
    color: var(--rk-text);
    background: var(--rk-white);
    cursor: pointer;
    font-size: 0.84rem;
    font-weight: 690;
    line-height: 1.46;
  }

  #rk-build-control .rk-build-check:hover {
    border-color: #91cbd8;
    background: #f4fcfe;
  }

  #rk-build-control .rk-build-check input {
    width: 22px;
    height: 22px;
    margin: 1px 0 0;
    accent-color: var(--rk-green);
  }

  #rk-build-control .rk-build-check em {
    display: inline-flex;
    margin-left: 6px;
    padding: 2px 6px;
    border-radius: 999px;
    color: #a52e22;
    background: #ffe2dc;
    font-size: 0.61rem;
    font-style: normal;
    font-weight: 950;
    letter-spacing: 0.04em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-audit-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 14px;
    justify-content: space-between;
    align-items: center;
    margin-top: 22px;
  }

  #rk-build-control .rk-build-reset {
    min-height: 46px;
    padding: 10px 16px;
    border: 0;
    border-radius: 12px;
    color: var(--rk-white);
    background: var(--rk-dark);
    cursor: pointer;
    font: inherit;
    font-size: 0.78rem;
    font-weight: 900;
  }

  #rk-build-control .rk-build-reset:hover,
  #rk-build-control .rk-build-reset:focus-visible {
    background: var(--rk-blue);
    outline: 3px solid rgba(40, 201, 218, 0.24);
  }

  #rk-build-control .rk-build-missing {
    color: var(--rk-muted);
    font-size: 0.8rem;
    font-weight: 800;
  }

  #rk-build-control .rk-build-disclaimer {
    margin: 0 clamp(22px, 4vw, 38px) clamp(22px, 4vw, 38px);
    padding: 17px 19px;
    border-radius: 14px;
    color: var(--rk-text);
    background: var(--rk-yellow-soft);
    font-size: 0.79rem;
    line-height: 1.55;
  }

  #rk-build-control .rk-build-gates {
    display: grid;
    gap: 22px;
  }

  #rk-build-control .rk-build-gate {
    display: grid;
    grid-template-columns: 128px minmax(0, 1fr);
    gap: 24px;
    padding: 28px;
    border: 1px solid var(--rk-line);
    border-radius: 22px;
    background: var(--rk-white);
  }

  #rk-build-control .rk-build-gate-no {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    min-height: 126px;
    padding: 16px;
    border-radius: 18px;
    color: var(--rk-white);
    background: linear-gradient(145deg, var(--rk-dark), var(--rk-navy));
    text-align: center;
  }

  #rk-build-control .rk-build-gate-no span {
    color: #83edf5;
    font-size: 0.68rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-gate-no strong {
    color: var(--rk-white);
    font-size: 2.5rem;
    line-height: 1;
  }

  #rk-build-control .rk-build-gate-content p:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-gate-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    margin-top: 18px;
  }

  #rk-build-control .rk-build-gate-box {
    padding: 18px;
    border-radius: 15px;
    background: var(--rk-soft);
  }

  #rk-build-control .rk-build-gate-box h4 {
    margin-bottom: 7px;
    font-size: 0.9rem;
  }

  #rk-build-control .rk-build-gate-box ul {
    margin: 0;
    padding-left: 20px;
    color: var(--rk-text);
  }

  #rk-build-control .rk-build-gate-box li {
    margin: 0 0 6px;
    padding: 0;
    font-size: 0.84rem;
    line-height: 1.5;
  }

  #rk-build-control .rk-build-gate-box li:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-stop-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 26px;
  }

  #rk-build-control .rk-build-stop-card {
    padding: 23px;
    border: 1px solid #ffd2ca;
    border-radius: 19px;
    background: var(--rk-red-soft);
  }

  #rk-build-control .rk-build-stop-card > span {
    display: inline-flex;
    margin-bottom: 12px;
    padding: 5px 9px;
    border-radius: 999px;
    color: var(--rk-white);
    background: var(--rk-red);
    font-size: 0.66rem;
    font-weight: 950;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-stop-card p:last-child {
    margin-bottom: 0;
    font-size: 0.86rem;
    line-height: 1.55;
  }

  #rk-build-control .rk-build-docs {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 26px;
  }

  #rk-build-control .rk-build-doc {
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-white);
  }

  #rk-build-control .rk-build-doc > span {
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    margin-bottom: 15px;
    border-radius: 14px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-blue), var(--rk-cyan));
    font-size: 0.75rem;
    font-weight: 950;
  }

  #rk-build-control .rk-build-doc p:last-child {
    margin-bottom: 0;
    font-size: 0.87rem;
    line-height: 1.6;
  }

  #rk-build-control .rk-build-faq-list {
    display: grid;
    gap: 12px;
  }

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

  #rk-build-control .rk-build-faq summary {
    position: relative;
    display: block;
    padding: 18px 55px 18px 20px;
    color: var(--rk-dark);
    cursor: pointer;
    font-weight: 870;
    line-height: 1.45;
    list-style: none;
  }

  #rk-build-control .rk-build-faq summary::-webkit-details-marker {
    display: none;
  }

  #rk-build-control .rk-build-faq summary::after {
    content: "+";
    position: absolute;
    top: 50%;
    right: 18px;
    display: grid;
    place-items: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-blue);
    transform: translateY(-50%);
    font-size: 1.05rem;
    font-weight: 900;
  }

  #rk-build-control .rk-build-faq[open] summary::after {
    content: "−";
    background: var(--rk-orange);
  }

  #rk-build-control .rk-build-faq-answer {
    padding: 0 20px 20px;
  }

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

  #rk-build-control .rk-build-sources {
    padding: 22px 24px;
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-soft);
  }

  #rk-build-control .rk-build-sources ul {
    margin: 0;
    padding-left: 22px;
  }

  #rk-build-control .rk-build-sources li {
    margin-bottom: 10px;
    color: var(--rk-text);
  }

  #rk-build-control .rk-build-sources li:last-child {
    margin-bottom: 0;
  }

  #rk-build-control .rk-build-small {
    margin-top: 15px;
    color: var(--rk-muted);
    font-size: 0.78rem;
    line-height: 1.55;
  }

  #rk-build-control .rk-build-cta {
    margin: clamp(30px, 5vw, 58px) 0;
    padding: clamp(28px, 5vw, 54px);
    border-radius: 26px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 90% 10%, rgba(255, 98, 56, 0.26), transparent 32%),
      linear-gradient(135deg, var(--rk-dark), #17485e);
    text-align: center;
  }

  #rk-build-control .rk-build-cta h3 {
    max-width: 920px;
    margin: 0 auto 15px;
    color: var(--rk-white);
    font-size: clamp(1.45rem, 3.4vw, 2.35rem);
  }

  #rk-build-control .rk-build-cta p {
    max-width: 930px;
    margin: 0 auto 24px;
    color: #d8e8ee;
  }

  #rk-build-control .rk-build-cta-link {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    min-height: 58px;
    padding: 14px 26px;
    border-radius: 15px;
    color: var(--rk-white) !important;
    background: linear-gradient(90deg, var(--rk-orange), #f04432);
    box-shadow: 0 14px 30px rgba(216, 60, 47, 0.25);
    font-weight: 950;
    line-height: 1.3;
    text-decoration: none !important;
  }

  #rk-build-control .rk-build-cta-link:hover,
  #rk-build-control .rk-build-cta-link:focus-visible {
    color: var(--rk-white) !important;
    background: linear-gradient(90deg, #f04432, var(--rk-orange));
    transform: translateY(-1px);
    outline: 3px solid rgba(255, 255, 255, 0.18);
  }

  #rk-build-control .rk-build-cta small {
    display: block;
    max-width: 850px;
    margin: 14px auto 0;
    color: #b9cbd4;
    font-size: 0.72rem;
    line-height: 1.45;
  }

  #rk-build-control .rk-build-author-box {
    overflow: hidden;
    border: 1px solid #cbdfe7;
    border-radius: 26px;
    background: var(--rk-white);
  }

  #rk-build-control .rk-build-author-head {
    display: flex;
    justify-content: space-between;
    gap: 22px;
    align-items: center;
    padding: 28px clamp(24px, 4vw, 42px);
    border-bottom: 5px solid var(--rk-cyan);
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-dark), #17485e);
  }

  #rk-build-control .rk-build-author-head h3 {
    margin-bottom: 7px;
    color: var(--rk-white);
    font-size: clamp(1.55rem, 3.4vw, 2.35rem);
  }

  #rk-build-control .rk-build-author-head p {
    margin: 0;
    color: #d8e8ee;
  }

  #rk-build-control .rk-build-author-mark {
    flex: 0 0 auto;
    padding: 10px 16px;
    border: 1px solid rgba(40, 201, 218, 0.4);
    border-radius: 14px;
    color: #72eaf4;
    font-size: 0.75rem;
    font-weight: 950;
    letter-spacing: 0.1em;
  }

  #rk-build-control .rk-build-author-main {
    display: grid;
    grid-template-columns: 330px minmax(0, 1fr);
  }

  #rk-build-control .rk-build-author-profile {
    padding: 38px 28px;
    border-right: 1px solid var(--rk-line);
    background: #f3f8fa;
    text-align: center;
  }

  #rk-build-control .rk-build-author-profile img {
    width: 174px;
    height: 174px;
    margin: 0 auto 20px;
    border: 9px solid var(--rk-white);
    border-radius: 50%;
    object-fit: cover;
    box-shadow: 0 16px 38px rgba(16, 37, 54, 0.14);
  }

  #rk-build-control .rk-build-author-profile h4 {
    margin-bottom: 8px;
    font-size: 1.3rem;
  }

  #rk-build-control .rk-build-author-role {
    display: block;
    color: var(--rk-blue);
    font-size: 0.74rem;
    font-weight: 950;
    letter-spacing: 0.07em;
    line-height: 1.55;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-author-content {
    padding: clamp(28px, 4vw, 46px);
  }

  #rk-build-control .rk-build-quote {
    position: relative;
    margin-bottom: 26px;
    padding: 26px 26px 26px 54px;
    border-radius: 19px;
    background: var(--rk-cyan-soft);
  }

  #rk-build-control .rk-build-quote::before {
    content: "“";
    position: absolute;
    top: 8px;
    left: 18px;
    color: var(--rk-cyan);
    font-family: Georgia, serif;
    font-size: 3.4rem;
    font-weight: 900;
    line-height: 1;
  }

  #rk-build-control .rk-build-quote blockquote {
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--rk-dark);
    font-size: clamp(1.04rem, 2vw, 1.25rem);
    font-style: italic;
    font-weight: 820;
    line-height: 1.62;
  }

  #rk-build-control .rk-build-author-tabs {
    position: relative;
  }

  #rk-build-control .rk-build-author-radio {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    opacity: 0;
    overflow: hidden;
  }

  #rk-build-control .rk-build-author-labels {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    border: 1px solid var(--rk-line);
    border-radius: 15px 15px 0 0;
    overflow: hidden;
    background: var(--rk-soft);
  }

  #rk-build-control .rk-build-author-labels label {
    display: grid;
    place-items: center;
    min-height: 60px;
    margin: 0;
    padding: 11px;
    border-right: 1px solid var(--rk-line);
    color: var(--rk-muted);
    cursor: pointer;
    font-size: 0.72rem;
    font-weight: 950;
    letter-spacing: 0.04em;
    line-height: 1.3;
    text-align: center;
    text-transform: uppercase;
  }

  #rk-build-control .rk-build-author-labels label:last-child {
    border-right: 0;
  }

  #rk-build-control .rk-build-author-labels label:hover {
    color: var(--rk-blue);
    background: #eefbfe;
  }

  #rk-build-control .rk-build-author-panels {
    min-height: 200px;
    padding: 25px;
    border: 1px solid var(--rk-line);
    border-top: 0;
    border-radius: 0 0 15px 15px;
  }

  #rk-build-control .rk-build-author-panel {
    display: none;
  }

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

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

  #rk-build-author-about:focus-visible ~ .rk-build-author-labels label[for="rk-build-author-about"],
  #rk-build-author-exp:focus-visible ~ .rk-build-author-labels label[for="rk-build-author-exp"],
  #rk-build-author-sites:focus-visible ~ .rk-build-author-labels label[for="rk-build-author-sites"] {
    outline: 3px solid rgba(40, 201, 218, 0.28);
    outline-offset: -3px;
  }

  #rk-build-author-about:checked ~ .rk-build-author-panels .rk-build-author-about,
  #rk-build-author-exp:checked ~ .rk-build-author-panels .rk-build-author-exp,
  #rk-build-author-sites:checked ~ .rk-build-author-panels .rk-build-author-sites {
    display: block;
  }

  #rk-build-control .rk-build-portals {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 16px;
  }

  #rk-build-control .rk-build-portals a {
    display: inline-flex;
    min-height: 44px;
    align-items: center;
    padding: 9px 14px;
    border: 1px solid #c9dce5;
    border-radius: 999px;
    color: var(--rk-dark);
    background: var(--rk-white);
    text-decoration: none;
  }

  #rk-build-control .rk-build-portals a:hover,
  #rk-build-control .rk-build-portals a:focus-visible {
    border-color: var(--rk-blue);
    color: var(--rk-white);
    background: var(--rk-blue);
    outline: none;
  }

  @media (max-width: 1120px) {
    #rk-build-control .rk-build-responsibility {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    #rk-build-control .rk-build-stop-grid,
    #rk-build-control .rk-build-docs {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-build-control .rk-build-author-main {
      grid-template-columns: 280px minmax(0, 1fr);
    }
  }

  @media (max-width: 860px) {
    #rk-build-control {
      font-size: 17px;
    }

    #rk-build-control .rk-build-answer,
    #rk-build-control .rk-build-audit-head,
    #rk-build-control .rk-build-audit-result,
    #rk-build-control .rk-build-author-main {
      grid-template-columns: 1fr;
    }

    #rk-build-control .rk-build-flow {
      grid-template-columns: 1fr;
    }

    #rk-build-control .rk-build-flow-card:not(:last-child)::after {
      top: auto;
      right: 50%;
      bottom: -25px;
      transform: translateX(50%) rotate(90deg);
    }

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

    #rk-build-control .rk-build-audit-stage-nav {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-build-control .rk-build-author-profile {
      border-right: 0;
      border-bottom: 1px solid var(--rk-line);
    }
  }

  @media (max-width: 720px) {
    #rk-build-control .rk-build-shell {
      border-radius: 22px;
    }

    #rk-build-control .rk-build-section-head {
      grid-template-columns: 48px minmax(0, 1fr);
      gap: 14px;
    }

    #rk-build-control .rk-build-section-no {
      width: 48px;
      height: 48px;
      border-radius: 14px;
      font-size: 0.72rem;
    }

    #rk-build-control .rk-build-formulas,
    #rk-build-control .rk-build-checks,
    #rk-build-control .rk-build-gate-grid,
    #rk-build-control .rk-build-stop-grid,
    #rk-build-control .rk-build-docs {
      grid-template-columns: 1fr;
    }

    #rk-build-control .rk-build-gate {
      grid-template-columns: 1fr;
    }

    #rk-build-control .rk-build-gate-no {
      min-height: 86px;
      flex-direction: row;
      gap: 10px;
    }

    #rk-build-control .rk-build-table-wrap {
      overflow: visible;
      border: 0;
      border-radius: 0;
    }

    #rk-build-control .rk-build-table,
    #rk-build-control .rk-build-table tbody,
    #rk-build-control .rk-build-table tr,
    #rk-build-control .rk-build-table td {
      display: block;
      width: 100%;
    }

    #rk-build-control .rk-build-table {
      background: transparent;
    }

    #rk-build-control .rk-build-table thead {
      position: absolute;
      width: 1px;
      height: 1px;
      margin: -1px;
      overflow: hidden;
      clip: rect(0 0 0 0);
      white-space: nowrap;
    }

    #rk-build-control .rk-build-table tr {
      margin-bottom: 14px;
      padding: 5px 18px;
      border: 1px solid var(--rk-line);
      border-radius: 18px;
      background: var(--rk-white);
      box-shadow: 0 9px 24px rgba(16, 37, 54, 0.05);
    }

    #rk-build-control .rk-build-table td,
    #rk-build-control .rk-build-table tbody tr:nth-child(even) td {
      padding: 13px 0;
      border-bottom: 1px solid var(--rk-line);
      background: transparent;
    }

    #rk-build-control .rk-build-table td:last-child {
      border-bottom: 0;
    }

    #rk-build-control .rk-build-table td::before {
      content: attr(data-label);
      display: block;
      margin-bottom: 5px;
      color: var(--rk-blue);
      font-size: 0.65rem;
      font-weight: 950;
      letter-spacing: 0.06em;
      text-transform: uppercase;
    }
  }

  @media (max-width: 560px) {
    #rk-build-control {
      margin-top: 18px;
      font-size: 16px;
    }

    #rk-build-control .rk-build-hero,
    #rk-build-control .rk-build-content {
      padding-left: 20px;
      padding-right: 20px;
    }

    #rk-build-control .rk-build-nav {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      padding-left: 16px;
      padding-right: 16px;
    }

    #rk-build-control .rk-build-nav a {
      justify-content: center;
      text-align: center;
    }

    #rk-build-control .rk-build-responsibility,
    #rk-build-control .rk-build-audit-stage-nav,
    #rk-build-control .rk-build-author-labels {
      grid-template-columns: 1fr;
    }

    #rk-build-control .rk-build-author-labels {
      border-radius: 15px 15px 0 0;
    }

    #rk-build-control .rk-build-author-labels label {
      min-height: 48px;
      border-right: 0;
      border-bottom: 1px solid var(--rk-line);
    }

    #rk-build-control .rk-build-author-labels label:last-child {
      border-bottom: 0;
    }

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

    #rk-build-control .rk-build-author-mark {
      align-self: flex-start;
    }

    #rk-build-control .rk-build-author-panels {
      min-height: 0;
      padding: 20px;
    }

    #rk-build-control .rk-build-audit-result {
      padding: 20px;
    }

    #rk-build-control .rk-build-audit-signal {
      min-height: 60px;
    }

    #rk-build-control .rk-build-audit-actions {
      align-items: stretch;
      flex-direction: column;
    }

    #rk-build-control .rk-build-reset {
      width: 100%;
    }

    #rk-build-control .rk-build-portals {
      align-items: stretch;
      flex-direction: column;
    }

    #rk-build-control .rk-build-portals a {
      justify-content: center;
      text-align: center;
    }
  }

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

<article id="rk-build-control" itemscope="" itemtype="https://schema.org/TechArticle" aria-labelledby="rk-build-hero-title">
  <meta itemprop="inLanguage" content="pl-PL">
  <meta itemprop="datePublished" content="2026-04-24">
  <meta itemprop="dateModified" content="2026-08-25">
  <meta itemprop="mainEntityOfPage" content="https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/">

  <div class="rk-build-shell">
    <div class="rk-build-progress-track" aria-hidden="true"><div class="rk-build-progress"></div></div>

    <header class="rk-build-hero">
      <div class="rk-build-badge">Kontrola zgodności • 5 bramek odbiorowych</div>
      <h2 id="rk-build-hero-title" itemprop="headline">Projekt był dobry. <span>Budowa zmieniła dane wejściowe.</span></h2>
      <div class="rk-build-hook">Najgroźniejsze odstępstwo nie musi wyglądać jak fuszerka. Czasem jest nim przesunięcie rozdzielacza, zmiana okładziny, cieńsza izolacja albo inny układ ścian — decyzja podjęta już po wykonaniu obliczeń.</div>
      <p class="rk-build-hero-lead" itemprop="description">Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego, powstają wtedy, gdy rzeczywisty budynek przestaje odpowiadać danym, dla których policzono moc, rozstaw rur, długości pętli, przepływy i temperaturę zasilania. Ten poradnik pokazuje, które zmiany wymagają ponownej kontroli oraz jak przeprowadzić odbiór w pięciu etapach.</p>
      <div class="rk-build-hero-meta">
        <span>Autor: Robert Kucharski</span>
        <span>Aktualizacja techniczna: 25 sierpnia 2026 r.</span>
        <span>Poziom: inwestor • wykonawca • kierownik budowy</span>
      </div>
    </header>

    <nav class="rk-build-nav" aria-label="Nawigacja po artykule">
      <a href="#rk-build-decision">Krótka odpowiedź</a>
      <a href="#rk-build-changes">Zmiany wymagające kontroli</a>
      <a href="#rk-build-audit">Kontrola 5 etapów</a>
      <a href="#rk-build-gates">Odbiory etapowe</a>
      <a href="#rk-build-stop">Kiedy powiedzieć STOP</a>
      <a href="#rk-build-faq">FAQ</a>
    </nav>

    <div class="rk-build-content">
      <section class="rk-build-section" id="rk-build-decision" aria-labelledby="rk-build-h2-1">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">01</div>
          <div>
            <h2 id="rk-build-h2-1">Czy dobry projekt ogrzewania podłogowego może zostać zepsuty na budowie?</h2>
            <p>Tak — jeżeli wykonanie albo sam budynek różnią się od danych przyjętych do obliczeń.</p>
          </div>
        </div>

        <div class="rk-build-answer">
          <div>
            <h3>Najkrótsza odpowiedź</h3>
            <p><strong>Projekt nie przestaje być poprawny tylko dlatego, że na budowie podjęto inną decyzję.</strong> Przestaje natomiast opisywać rzeczywisty układ. Jeżeli zmieniono izolację, stolarkę, temperaturę źródła, opór okładziny, powierzchnię aktywną, położenie rozdzielacza albo geometrię pomieszczeń, trzeba ocenić wpływ tej zmiany przed zakryciem instalacji.</p>
            <p>Najbezpieczniejsza zasada brzmi: <strong>najpierw zapis zmiany, potem decyzja projektowa, na końcu wykonanie</strong>. Kolejność odwrotna prowadzi do sytuacji, w której projekt i dokumentacja powykonawcza pokazują dwa różne budynki.</p>
          </div>
          <div class="rk-build-answer-verdict">
            <span>Zasada nadrzędna</span>
            <strong>Nie pytaj tylko: „czy rury są ułożone równo?”. Zapytaj: „czy wykonano układ, który został policzony?”.</strong>
          </div>
        </div>

        <div class="rk-build-note">
          <p><strong>Ważne rozróżnienie:</strong> szczegółowe usterki montażowe rur, rozdzielacza, dylatacji i hydrauliki omawia osobny poradnik o tym, <a href="https://projekt-ogrzewania.pl/jakie-bledy-najczesciej-popelniaja-instalatorzy-ogrzewania-podlogowego/">jakie błędy najczęściej popełniają instalatorzy ogrzewania podłogowego</a>. Ten artykuł koncentruje się na kontroli zmian między projektem a rzeczywistą budową.</p>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-logic" aria-labelledby="rk-build-h2-2">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">02</div>
          <div>
            <h2 id="rk-build-h2-2">Dlaczego drobna zmiana może naruszyć kilka obliczeń jednocześnie?</h2>
            <p>Parametry ogrzewania podłogowego tworzą system naczyń połączonych.</p>
          </div>
        </div>

        <p><a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">Profesjonalny projekt ogrzewania podłogowego</a> nie jest tylko rysunkiem przewodów. Łączy obciążenie cieplne pomieszczeń, aktywną powierzchnię podłogi, konstrukcję przegrody, opór cieplny okładziny, temperaturę wody, rozstaw rur, długość pętli, wymagany przepływ oraz stratę ciśnienia. Zmiana jednego wejścia może więc zmienić kilka wyników.</p>

        <div class="rk-build-flow" aria-label="Łańcuch wpływu zmiany budowlanej">
          <div class="rk-build-flow-card">
            <span>1. Dane projektu</span>
            <h3>Obciążenie i konstrukcja</h3>
            <p>Straty ciepła, temperatura pomieszczenia, aktywna powierzchnia, warstwy podłogi, okładzina, źródło ciepła i położenie rozdzielacza.</p>
          </div>
          <div class="rk-build-flow-card">
            <span>2. Zmiana na budowie</span>
            <h3>Inny budynek niż w obliczeniach</h3>
            <p>Przesunięta ściana, mniejsza izolacja, większe przeszklenie, dywan zamiast płytki, rozdzielacz w innym miejscu albo ograniczona powierzchnia grzejna.</p>
          </div>
          <div class="rk-build-flow-card">
            <span>3. Skutek</span>
            <h3>Inna moc i hydraulika</h3>
            <p>Może zmienić się wymagany strumień ciepła, rozstaw, temperatura zasilania, długość obiegu, przepływ, opór hydrauliczny oraz nastawa rozdzielacza.</p>
          </div>
        </div>

        <div class="rk-build-formulas">
          <div class="rk-build-formula">
            <h3>Wymagana moc z powierzchni aktywnej</h3>
            <code>q<sub>wym</sub> = Φ<sub>pom</sub> / A<sub>aktywna</sub></code>
            <p>Jeżeli zabudowa stała, wanna, wyspa lub zmiana układu pomieszczenia zmniejszy aktywną powierzchnię, na każdy pozostały metr kwadratowy przypada większe obciążenie. Nie oznacza to automatycznie, że wystarczy zagęścić rury — trzeba sprawdzić możliwości całej konstrukcji podłogi.</p>
          </div>
          <div class="rk-build-formula">
            <h3>Przepływ wynikający z mocy pętli</h3>
            <code>V̇ [m³/h] = Q [kW] / (1,163 × ΔT [K])</code>
            <p>Przepływ nie wynika z równego podziału między rotametry. Zależy od mocy przypisanej do pętli i projektowej różnicy temperatury. Po zmianie strefy lub przebiegu obiegu trzeba sprawdzić zarówno wymagany przepływ, jak i stratę ciśnienia.</p>
          </div>
        </div>

        <div class="rk-build-warning">
          <p><strong>Przykład zależności:</strong> przesunięcie rozdzielacza wydłuża odcinki przyłączeniowe kilku pętli. Nie musi zmienić zapotrzebowania pomieszczeń, ale może zmienić długości obiegów, ich opory i możliwość zrównoważenia. Dlatego sam zapis „rozdzielacz przesunięty o dwa metry” nie jest pełną odpowiedzią techniczną.</p>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-changes" aria-labelledby="rk-build-h2-3">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">03</div>
          <div>
            <h2 id="rk-build-h2-3">Które odstępstwa od projektu ogrzewania podłogowego wymagają kontroli?</h2>
            <p>Nie każda korekta oznacza przeprojektowanie całości, ale każda powinna zostać zgłoszona i oceniona przed wykonaniem.</p>
          </div>
        </div>

        <div class="rk-build-table-wrap">
          <table class="rk-build-table">
            <thead>
              <tr>
                <th style="width:22%">Zmiana na budowie</th>
                <th style="width:34%">Co może zmienić?</th>
                <th style="width:20%">Decyzja</th>
                <th style="width:24%">Co przekazać do weryfikacji?</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Zmiana"><strong>Inna izolacja ścian, dachu lub podłogi</strong></td>
                <td data-label="Wpływ">Obciążenie cieplne pomieszczeń, straty do gruntu, wymaganą moc podłogi oraz temperaturę zasilania.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-red">Sprawdzić przed rurami</span></td>
                <td data-label="Dane">Rodzaj materiału, rzeczywista grubość, deklarowana λ i przekrój warstw.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Zmiana okien, ich wymiaru albo liczby</strong></td>
                <td data-label="Wpływ">Straty przez przenikanie, infiltrację, lokalne obciążenie przy przeszkleniu i potrzebę strefy brzegowej.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-red">Ponowna ocena mocy</span></td>
                <td data-label="Dane">Wymiar, współczynnik U, sposób montażu i aktualny rzut elewacji.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Przesunięcie ścian lub zmiana funkcji pomieszczenia</strong></td>
                <td data-label="Wpływ">Podział stref, temperaturę obliczeniową, powierzchnię aktywną, liczbę pętli i przypisanie sterowania.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-red">Aktualizacja rzutu</span></td>
                <td data-label="Dane">Nowy rzut z wymiarami, przeznaczenie pomieszczeń i oczekiwana temperatura.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Inna okładzina podłogowa</strong></td>
                <td data-label="Wpływ">Opór cieplny nad rurą, temperaturę powierzchni, wymaganą temperaturę wody i osiągalną moc.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-orange">Sprawdzić opór R</span></td>
                <td data-label="Dane">Rodzaj okładziny, grubość, podkład oraz deklarowany opór cieplny całego zestawu.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Przesunięcie rozdzielacza</strong></td>
                <td data-label="Wpływ">Długości przyłączy pętli, opory hydrauliczne, przebieg przewodów i możliwość odpowietrzania.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-orange">Przeliczyć pętle</span></td>
                <td data-label="Dane">Nowa lokalizacja, odległości, wysokość montażu i dostęp serwisowy.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Inne źródło ciepła lub temperatura zasilania</strong></td>
                <td data-label="Wpływ">Dostępną moc podłogi, sprawność źródła, krzywą grzewczą, układ hydrauliczny oraz automatykę.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-red">Weryfikacja całego układu</span></td>
                <td data-label="Dane">Model i parametry źródła, schemat hydrauliczny oraz projektowa temperatura zasilania i powrotu.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Inny rozstaw albo przebieg rur</strong></td>
                <td data-label="Wpływ">Moc powierzchniową, równomierność temperatury, długość obiegów, przepływy i opory.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-red">Nie zmieniać „na oko”</span></td>
                <td data-label="Dane">Aktualny rzut, rzeczywista powierzchnia aktywna i przyczyna zmiany.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Inna grubość jastrychu lub poziom podłogi</strong></td>
                <td data-label="Wpływ">Położenie rury w warstwie, bezwładność, przekazywanie ciepła, dylatacje i współpracę z okładziną.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-orange">Koordynacja branżowa</span></td>
                <td data-label="Dane">Rodzaj jastrychu, przekrój warstw, planowane poziomy oraz dokumentacja wykonawcza posadzki.</td>
              </tr>
              <tr>
                <td data-label="Zmiana"><strong>Większa zabudowa stała</strong></td>
                <td data-label="Wpływ">Aktywną powierzchnię oddawania ciepła, miejsca bez rur i lokalne obciążenie pozostałej podłogi.</td>
                <td data-label="Decyzja"><span class="rk-build-status is-orange">Sprawdzić powierzchnię</span></td>
                <td data-label="Dane">Rzut kuchni, szaf, wanien, kominka i innych elementów trwale związanych z podłogą.</td>
              </tr>
            </tbody>
          </table>
        </div>

        <p>Zmiana samej nazwy materiału nie zawsze ma znaczenie, ale zmiana jego parametrów — już tak. Przykładowo dwa produkty oznaczone jako styropian mogą mieć inną przewodność cieplną i wytrzymałość. Dlatego zamiast ogólnego zdania „będzie podobny materiał” potrzebne są dane z dokumentacji produktu i rzeczywisty przekrój podłogi.</p>

        <p>W przypadku okładziny warto sprawdzić nie tylko warstwę wierzchnią. <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">Wpływ okładziny na wydajność ogrzewania podłogowego</a> obejmuje także podkład, klej i sposób ułożenia. Suma oporów znajduje się nad systemem grzewczym i wpływa na warunki przekazywania ciepła.</p>
      </section>

      <section class="rk-build-section" id="rk-build-roles" aria-labelledby="rk-build-h2-4">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">04</div>
          <div>
            <h2 id="rk-build-h2-4">Kto powinien pilnować zgodności projektu z budową?</h2>
            <p>Kontrola nie może opierać się na założeniu, że „ktoś na pewno to sprawdził”.</p>
          </div>
        </div>

        <div class="rk-build-responsibility">
          <div class="rk-build-responsibility-card">
            <span>IN</span>
            <h3>Inwestor</h3>
            <p>Zgłasza zmiany funkcji, materiałów, okładzin i zabudowy. Pilnuje, aby wykonawcy pracowali na tej samej, aktualnej wersji dokumentacji.</p>
          </div>
          <div class="rk-build-responsibility-card">
            <span>PR</span>
            <h3>Projektant instalacji</h3>
            <p>Ocenia wpływ zmian na moc i hydraulikę, wskazuje potrzebne korekty oraz aktualizuje dane istotne dla wykonania i regulacji.</p>
          </div>
          <div class="rk-build-responsibility-card">
            <span>WY</span>
            <h3>Wykonawca instalacji</h3>
            <p>Porównuje warunki na budowie z projektem, nie wprowadza samowolnych zmian i zapisuje rzeczywiste długości, trasy oraz oznaczenia pętli.</p>
          </div>
          <div class="rk-build-responsibility-card">
            <span>JA</span>
            <h3>Wykonawca jastrychu</h3>
            <p>Realizuje uzgodnioną konstrukcję posadzki i pola dylatacyjne, chroni instalację oraz nie rozpoczyna pracy bez formalnego dopuszczenia do zakrycia.</p>
          </div>
          <div class="rk-build-responsibility-card">
            <span>KB</span>
            <h3>Kierownik budowy</h3>
            <p>Koordynuje kolejność robót i dokumentuje odbiory w zakresie wynikającym z inwestycji, projektu, umów oraz obowiązujących przepisów.</p>
          </div>
        </div>

        <div class="rk-build-note">
          <p><strong>Tabela ma charakter organizacyjny, a nie prawny.</strong> Formalny zakres obowiązków zależy od umów, dokumentacji inwestycji i przepisów. Technicznie najważniejsze jest jednak to, aby każda zmiana miała właściciela decyzji, datę, uzasadnienie i aktualny rysunek.</p>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-audit" aria-labelledby="rk-build-h2-5">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">05</div>
          <div>
            <h2 id="rk-build-h2-5">Interaktywna kontrola zgodności projektu z budową</h2>
            <p>Dwadzieścia potwierdzeń pogrupowanych według momentu, w którym można jeszcze bezpiecznie zatrzymać roboty.</p>
          </div>
        </div>

        <div class="rk-build-audit" data-rk-build-audit="">
          <div class="rk-build-audit-head">
            <div>
              <h3>Pięć bramek odbiorowych ogrzewania podłogowego</h3>
              <p>Zaznacz wyłącznie elementy faktycznie sprawdzone na budowie albo potwierdzone dokumentem. Punkty krytyczne blokują ocenę pozytywną.</p>
            </div>
            <div class="rk-build-audit-score">
              <span class="rk-build-audit-score-label">Stopień potwierdzenia</span>
              <strong id="rk-build-score">0%</strong>
              <small id="rk-build-count">0 z 20 punktów</small>
            </div>
          </div>

          <div class="rk-build-audit-bar" role="progressbar" aria-label="Postęp kontroli" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0"><div class="rk-build-audit-fill" id="rk-build-fill"></div></div>

          <div class="rk-build-audit-result" id="rk-build-result">
            <div class="rk-build-audit-signal" id="rk-build-signal">STOP</div>
            <p id="rk-build-message" aria-live="polite">Nie potwierdzono punktów krytycznych. Nie traktuj instalacji jako gotowej do zakrycia.</p>
          </div>

          <div class="rk-build-audit-body">
            <div class="rk-build-audit-stage-nav" aria-label="Etapy checklisty">
              <a href="#rk-build-audit-stage-1"><span>Etap 1</span><strong>Zamrożenie danych</strong></a>
              <a href="#rk-build-audit-stage-2"><span>Etap 2</span><strong>Warstwy podłogi</strong></a>
              <a href="#rk-build-audit-stage-3"><span>Etap 3</span><strong>Ułożone pętle</strong></a>
              <a href="#rk-build-audit-stage-4"><span>Etap 4</span><strong>Przed jastrychem</strong></a>
              <a href="#rk-build-audit-stage-5"><span>Etap 5</span><strong>Odbiór końcowy</strong></a>
            </div>

            <div class="rk-build-audit-groups">
              <div class="rk-build-audit-group" id="rk-build-audit-stage-1" data-rk-build-stage-group="1">
                <div class="rk-build-audit-group-head"><h4>Etap 1 — dane projektu odpowiadają aktualnemu budynkowi</h4><span class="rk-build-stage-count" data-rk-build-stage-count="1">0/4</span></div>
                <div class="rk-build-checks">
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="1" data-critical="1"><span>Wszyscy wykonawcy mają tę samą, aktualną wersję rzutu i projektu.<em>krytyczne</em></span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="1" data-critical="1"><span>Potwierdzono rzeczywiste izolacje, okna, funkcje pomieszczeń i temperatury obliczeniowe.<em>krytyczne</em></span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="1"><span>Znane są finalne okładziny, podkłady i planowana zabudowa stała.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="1"><span>Źródło ciepła, temperatura projektowa i lokalizacja rozdzielacza nie zmieniły się albo zostały ponownie sprawdzone.</span></label>
                </div>
              </div>

              <div class="rk-build-audit-group" id="rk-build-audit-stage-2" data-rk-build-stage-group="2">
                <div class="rk-build-audit-group-head"><h4>Etap 2 — podłoże i warstwy są gotowe pod instalację</h4><span class="rk-build-stage-count" data-rk-build-stage-count="2">0/4</span></div>
                <div class="rk-build-checks">
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="2" data-critical="1"><span>Rzeczywista wysokość i układ warstw podłogi odpowiadają przekrojowi przyjętemu w projekcie.<em>krytyczne</em></span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="2"><span>Izolacja jest stabilna, ciągła i ułożona bez pustek powodujących ruch warstw.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="2"><span>Uzgodniono izolację brzegową, szczeliny i pola jastrychu z przejściami rur.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="2"><span>Przepusty, progi, piony i kolizje branżowe zostały rozwiązane przed rozwinięciem rur.</span></label>
                </div>
              </div>

              <div class="rk-build-audit-group" id="rk-build-audit-stage-3" data-rk-build-stage-group="3">
                <div class="rk-build-audit-group-head"><h4>Etap 3 — pętle można porównać z obliczeniami</h4><span class="rk-build-stage-count" data-rk-build-stage-count="3">0/4</span></div>
                <div class="rk-build-checks">
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="3" data-critical="1"><span>Rozstaw, przebieg, miejsca bez rur i strefy brzegowe odpowiadają aktualnemu rzutowi.<em>krytyczne</em></span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="3"><span>Każda pętla ma oznaczenie, pomieszczenie, rzeczywistą długość i właściwe przyłączenie do rozdzielacza.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="3" data-critical="1"><span>Nie ma nieudokumentowanych połączeń, załamań ani uszkodzeń przewodu w obszarze przyszłego jastrychu.<em>krytyczne</em></span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="3"><span>Wykonano zdjęcia całych pomieszczeń i detali z miarą lub stałymi punktami odniesienia.</span></label>
                </div>
              </div>

              <div class="rk-build-audit-group" id="rk-build-audit-stage-4" data-rk-build-stage-group="4">
                <div class="rk-build-audit-group-head"><h4>Etap 4 — instalacja jest formalnie dopuszczona do zakrycia</h4><span class="rk-build-stage-count" data-rk-build-stage-count="4">0/4</span></div>
                <div class="rk-build-checks">
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="4" data-critical="1"><span>Wykonano próbę szczelności według właściwej procedury i zapisano jej wynik.<em>krytyczne</em></span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="4"><span>Protokół zawiera medium, ciśnienie, czasy odczytów, temperaturę, wynik oraz osoby uczestniczące.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="4"><span>Rury są zabezpieczone w przejściach, przy rozdzielaczu i w miejscach komunikacji ekip.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="4" data-critical="1"><span>Podpisano decyzję o dopuszczeniu do jastrychu po usunięciu wszystkich zapisanych niezgodności.<em>krytyczne</em></span></label>
                </div>
              </div>

              <div class="rk-build-audit-group" id="rk-build-audit-stage-5" data-rk-build-stage-group="5">
                <div class="rk-build-audit-group-head"><h4>Etap 5 — uruchomienie i dokumentacja zamykają proces</h4><span class="rk-build-stage-count" data-rk-build-stage-count="5">0/4</span></div>
                <div class="rk-build-checks">
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="5"><span>Jastrych pielęgnowano i uruchomiono ogrzewanie według właściwej procedury dla zastosowanego materiału.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="5"><span>Przed okładziną sprawdzono warunki podłoża metodą właściwą dla jastrychu i systemu wykończeniowego.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="5"><span>Ustawiono projektowe przepływy, parametry pompy i sterowania oraz zapisano nastawy początkowe.</span></label>
                  <label class="rk-build-check"><input type="checkbox" data-rk-build-check="" data-stage="5"><span>Inwestor otrzymał projekt, rewizję powykonawczą, protokoły, zdjęcia, długości pętli i tabelę nastaw.</span></label>
                </div>
              </div>
            </div>

            <div class="rk-build-audit-actions">
              <button class="rk-build-reset" type="button" id="rk-build-reset">Wyczyść kontrolę</button>
              <div class="rk-build-missing" id="rk-build-missing">Brakuje 20 potwierdzeń, w tym 7 krytycznych.</div>
            </div>
          </div>

          <div class="rk-build-disclaimer"><strong>Zakres narzędzia:</strong> checklista porządkuje komunikację i dokumenty. Nie ogląda budowy, nie zna parametrów projektu i nie stanowi odbioru technicznego, opinii prawnej ani zgody na wykonanie jastrychu. Punkt należy zaznaczyć dopiero po rzeczywistym sprawdzeniu.</div>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-gates" aria-labelledby="rk-build-h2-6">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">06</div>
          <div>
            <h2 id="rk-build-h2-6">Pięć odbiorów etapowych — co dokładnie sprawdzić?</h2>
            <p>Każda bramka zamyka inne ryzyko. Odbiór dopiero po ułożeniu rur jest potrzebny, ale nie cofnie błędnej izolacji ani nieaktualnych danych wejściowych.</p>
          </div>
        </div>

        <div class="rk-build-gates">
          <div class="rk-build-gate">
            <div class="rk-build-gate-no"><span>Bramka</span><strong>01</strong></div>
            <div class="rk-build-gate-content">
              <h3>Przed zamówieniem materiałów: zamrożenie danych projektu</h3>
              <p>Projekt musi odpowiadać aktualnej architekturze i planowanym warstwom. Na tym etapie należy potwierdzić wymiary pomieszczeń, temperatury, izolacje, stolarkę, źródło ciepła, rozdzielacze oraz okładziny. Jeżeli od wykonania obliczeń zmieniła się dokumentacja budynku, nie powinno się wysyłać ekipie starego rzutu z dopiskiem „jakoś dopasujemy”.</p>
              <div class="rk-build-gate-grid">
                <div class="rk-build-gate-box">
                  <h4>Sprawdź</h4>
                  <ul><li>numer i datę rewizji projektu;</li><li>aktualny rzut architektury;</li><li>temperaturę źródła i schemat hydrauliczny;</li><li>finalne materiały przegród i podłogi.</li></ul>
                </div>
                <div class="rk-build-gate-box">
                  <h4>Zapisz</h4>
                  <ul><li>listę zmian od momentu obliczeń;</li><li>osobę akceptującą każdą zmianę;</li><li>aktualną tabelę pomieszczeń;</li><li>wersję przekazaną wykonawcy.</li></ul>
                </div>
              </div>
            </div>
          </div>

          <div class="rk-build-gate">
            <div class="rk-build-gate-no"><span>Bramka</span><strong>02</strong></div>
            <div class="rk-build-gate-content">
              <h3>Przed ułożeniem rur: odbiór podłoża i konstrukcji podłogi</h3>
              <p>Rury nie naprawią błędnej konstrukcji pod nimi. Trzeba skontrolować rzeczywistą grubość, typ i ciągłość izolacji, stabilność płyt, poziomy, izolację brzegową, przepusty oraz plan szczelin jastrychu. Zagadnienia te warto zestawić z poradnikami o <a href="https://projekt-ogrzewania.pl/jakie-sa-najlepsze-sposoby-izolacji-pod-ogrzewanie-podlogowe/">izolacji pod ogrzewaniem podłogowym</a> i o <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolacji brzegowej oraz dylatacjach</a>.</p>
              <div class="rk-build-gate-grid">
                <div class="rk-build-gate-box">
                  <h4>Sprawdź</h4>
                  <ul><li>zgodność przekroju i poziomów;</li><li>brak pustek i ruchomych płyt;</li><li>ciągłość taśmy brzegowej;</li><li>przewężenia, progi i pola jastrychu.</li></ul>
                </div>
                <div class="rk-build-gate-box">
                  <h4>Nie akceptuj</h4>
                  <ul><li>izolacji opisanej tylko jako „podobna”;</li><li>kolizji odkładanych do dnia wylewki;</li><li>zmiany wysokości bez korekty przekroju;</li><li>braku uzgodnienia szczelin z trasami rur.</li></ul>
                </div>
              </div>
            </div>
          </div>

          <div class="rk-build-gate">
            <div class="rk-build-gate-no"><span>Bramka</span><strong>03</strong></div>
            <div class="rk-build-gate-content">
              <h3>Po ułożeniu rur: porównanie pętla po pętli</h3>
              <p>Odbiór powinien przejść od króćca zasilającego do powrotnego każdej pętli. Należy sprawdzić oznaczenie, obsługiwane pomieszczenie, rozstaw, trasę, rzeczywistą długość, miejsca bez rur, łuki, mocowanie, przejścia i stan przewodu. <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Dopuszczalnej długości pętli</a> nie ocenia się jedną uniwersalną liczbą — znaczenie mają średnica wewnętrzna, przepływ, opór armatury i strata ciśnienia całego obiegu.</p>
              <div class="rk-build-gate-grid">
                <div class="rk-build-gate-box">
                  <h4>Sprawdź</h4>
                  <ul><li>zgodność z aktualnym rzutem;</li><li>czytelne oznaczenia na rozdzielaczu;</li><li>brak ukrytych połączeń i uszkodzeń;</li><li>rzeczywiste długości oraz kolejność obiegów.</li></ul>
                </div>
                <div class="rk-build-gate-box">
                  <h4>Udokumentuj</h4>
                  <ul><li>zdjęcie całego pomieszczenia;</li><li>detale przejść i zagęszczeń;</li><li>miarę albo stały punkt odniesienia;</li><li>zmiany naniesione na rzut powykonawczy.</li></ul>
                </div>
              </div>
            </div>
          </div>

          <div class="rk-build-gate">
            <div class="rk-build-gate-no"><span>Bramka</span><strong>04</strong></div>
            <div class="rk-build-gate-content">
              <h3>Przed wylewką: próba, protokół i dopuszczenie do zakrycia</h3>
              <p>Próba szczelności ma wykazać stan instalacji przed jej trwałym zakryciem. Nie należy kopiować jednej wartości ciśnienia i czasu z przypadkowego poradnika do każdego systemu. Medium, ciśnienie, kolejne odczyty, wpływ temperatury i kryterium oceny muszą wynikać z właściwej procedury, projektu oraz dokumentacji zastosowanego systemu. Szczegółowe omówienie znajduje się w artykule o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>.</p>
              <div class="rk-build-gate-grid">
                <div class="rk-build-gate-box">
                  <h4>Protokół powinien identyfikować</h4>
                  <ul><li>instalację i badane obiegi;</li><li>medium oraz aparaturę pomiarową;</li><li>ciśnienie, czasy i temperatury;</li><li>wynik, uwagi i osoby uczestniczące.</li></ul>
                </div>
                <div class="rk-build-gate-box">
                  <h4>Przed pompą do jastrychu</h4>
                  <ul><li>usuń wszystkie niezgodności;</li><li>zabezpiecz przejścia i rozdzielacz;</li><li>ustal stan instalacji podczas prac;</li><li>podpisz odbiór przed zakryciem.</li></ul>
                </div>
              </div>
            </div>
          </div>

          <div class="rk-build-gate">
            <div class="rk-build-gate-no"><span>Bramka</span><strong>05</strong></div>
            <div class="rk-build-gate-content">
              <h3>Po wykonaniu jastrychu: uruchomienie, równoważenie i dokumentacja powykonawcza</h3>
              <p>Procedura pielęgnacji i pierwszego uruchomienia zależy od zastosowanego jastrychu oraz dokumentacji wykonawczej. Rozgrzewanie nie zastępuje pomiaru warunków podłoża przed ułożeniem okładziny. Po uruchomieniu trzeba ustawić przepływy wynikające z projektu, sprawdzić pracę pompy i automatyki oraz zapisać parametry początkowe. Informacje o konstrukcji warstwy znajdziesz w przewodniku o <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">wylewce na ogrzewaniu podłogowym</a>.</p>
              <div class="rk-build-gate-grid">
                <div class="rk-build-gate-box">
                  <h4>Odbiór eksploatacyjny</h4>
                  <ul><li>przepływy i nastawy poszczególnych pętli;</li><li>parametry pompy i sterowania;</li><li>temperaturę zasilania i powrotu;</li><li>reakcję pomieszczeń po stabilizacji.</li></ul>
                </div>
                <div class="rk-build-gate-box">
                  <h4>Pakiet dla inwestora</h4>
                  <ul><li>projekt i rewizja powykonawcza;</li><li>protokół próby oraz odbioru;</li><li>zdjęcia tras przed wylewką;</li><li>tabela pętli, przepływów i nastaw.</li></ul>
                </div>
              </div>
            </div>
          </div>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-stop" aria-labelledby="rk-build-h2-7">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">07</div>
          <div>
            <h2 id="rk-build-h2-7">Kiedy należy powiedzieć „STOP — nie wykonywać wylewki”?</h2>
            <p>Zakrycie rur usuwa możliwość prostego oglądu i wielokrotnie zwiększa koszt każdej późniejszej ingerencji.</p>
          </div>
        </div>

        <div class="rk-build-stop-grid">
          <div class="rk-build-stop-card"><span>STOP 01</span><h3>Nieaktualny projekt</h3><p>Rzut nie pokazuje rzeczywistych ścian, funkcji pomieszczeń, rozdzielacza albo zabudowy, a zmiany nie zostały ocenione.</p></div>
          <div class="rk-build-stop-card"><span>STOP 02</span><h3>Niezgodne warstwy</h3><p>Brakuje potwierdzenia rodzaju i grubości izolacji, poziomu podłogi, rodzaju jastrychu albo podziału pól.</p></div>
          <div class="rk-build-stop-card"><span>STOP 03</span><h3>Uszkodzona rura</h3><p>Widać nacięcie, załamanie, spłaszczenie lub połączenie, którego nie ma w dokumentacji i które nie zostało ocenione.</p></div>
          <div class="rk-build-stop-card"><span>STOP 04</span><h3>Brak próby i protokołu</h3><p>Nie wiadomo, według jakiej procedury instalację zbadano, jakie były odczyty ani kto potwierdził wynik.</p></div>
          <div class="rk-build-stop-card"><span>STOP 05</span><h3>Brak zgodności pętli</h3><p>Nie można przypisać obiegów do pomieszczeń, nie znamy długości albo rozstaw i trasy istotnie różnią się od projektu.</p></div>
          <div class="rk-build-stop-card"><span>STOP 06</span><h3>Brak dokumentacji zdjęciowej</h3><p>Nie wykonano zdjęć przed zakryciem, mimo że trasy zostały zmienione albo inwestor nie otrzymał rzutu powykonawczego.</p></div>
        </div>

        <div class="rk-build-warning">
          <p><strong>Pośpiech ekipy wylewkowej nie jest argumentem technicznym.</strong> Jeżeli niezgodność można ocenić za godzinę, ale po zalaniu jej sprawdzenie będzie wymagało diagnostyki albo odkrywek, rozsądniej zatrzymać pracę przed przyjazdem jastrychu niż negocjować przy pracującej pompie.</p>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-symptoms" aria-labelledby="rk-build-h2-8">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">08</div>
          <div>
            <h2 id="rk-build-h2-8">Objawy po zamieszkaniu a możliwe odstępstwa na budowie</h2>
            <p>Objaw nie jest diagnozą. Pokazuje jedynie, od których danych i pomiarów warto zacząć.</p>
          </div>
        </div>

        <div class="rk-build-table-wrap">
          <table class="rk-build-table">
            <thead>
              <tr>
                <th style="width:24%">Objaw</th>
                <th style="width:43%">Co mogło zmienić się względem projektu?</th>
                <th style="width:33%">Co sprawdzić najpierw?</th>
              </tr>
            </thead>
            <tbody>
              <tr><td data-label="Objaw"><strong>Jedno pomieszczenie stale nie osiąga temperatury</strong></td><td data-label="Możliwe odstępstwo">Inna okładzina, mniejsza powierzchnia aktywna, większe przeszklenie, zmieniony rozstaw, niski przepływ albo inna temperatura projektowa pomieszczenia.</td><td data-label="Pierwsza kontrola">Aktualny rzut, obciążenie cieplne, aktywna powierzchnia, przepływ i temperatury pętli po stabilizacji.</td></tr>
              <tr><td data-label="Objaw"><strong>Cały system wymaga wyższej temperatury wody</strong></td><td data-label="Możliwe odstępstwo">Gorsze przegrody, inna okładzina, większe straty wentylacyjne, mniejsza aktywna powierzchnia albo niezgodna konstrukcja podłogi.</td><td data-label="Pierwsza kontrola">Rzeczywiste materiały, ustawienia krzywej, przepływy, temperatura powierzchni oraz zgodność z bilansem cieplnym.</td></tr>
              <tr><td data-label="Objaw"><strong>Nie można ustawić wymaganych przepływów</strong></td><td data-label="Możliwe odstępstwo">Wydłużone pętle po przesunięciu rozdzielacza, zmieniona armatura, powietrze, zabrudzenie albo niewłaściwy punkt pracy pompy.</td><td data-label="Pierwsza kontrola">Rzeczywiste długości, odczyty rotametrów, stan filtrów, odpowietrzenie i dostępne ciśnienie różnicowe.</td></tr>
              <tr><td data-label="Objaw"><strong>Nierównomierny ślad cieplny podłogi</strong></td><td data-label="Możliwe odstępstwo">Inna trasa lub rozstaw, zmienna warstwa nad rurą, element zabudowy, powietrze albo chwilowe warunki pomiaru.</td><td data-label="Pierwsza kontrola">Zdjęcia przed wylewką, czas pracy, temperaturę wody, rodzaj okładziny i pomiary po ustabilizowaniu.</td></tr>
              <tr><td data-label="Objaw"><strong>Rysy albo odspojenie okładziny</strong></td><td data-label="Możliwe odstępstwo">Nieprawidłowy podział pól, warunki wykonania lub pielęgnacji jastrychu, brak właściwych szczelin, zbyt wczesne uruchomienie albo błąd systemu wykończeniowego.</td><td data-label="Pierwsza kontrola">Dokumentację jastrychu, przebieg szczelin, protokół uruchomienia, wilgotność i warunki montażu okładziny.</td></tr>
              <tr><td data-label="Objaw"><strong>Brak informacji, gdzie można wiercić</strong></td><td data-label="Możliwe odstępstwo">Nie wykonano zdjęć lub rzutu powykonawczego albo trasy różnią się od projektu.</td><td data-label="Pierwsza kontrola">Archiwum zdjęć, punkty odniesienia, rzut pętli i bezpieczną diagnostykę przed ingerencją.</td></tr>
            </tbody>
          </table>
        </div>

        <p>Nieprawidłowo działającego systemu nie należy diagnozować wyłącznie kamerą termowizyjną ani samymi rotametrami. Potrzebne jest zestawienie projektu, dokumentacji powykonawczej, przepływów, temperatur i warunków pracy. Inaczej łatwo pomylić błąd projektu, odstępstwo wykonawcze, niewłaściwą regulację i chwilowy stan układu.</p>
      </section>

      <section class="rk-build-section" id="rk-build-docs" aria-labelledby="rk-build-h2-9">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">09</div>
          <div>
            <h2 id="rk-build-h2-9">Dokumentacja powykonawcza podłogówki — co powinno zostać po budowie?</h2>
            <p>Dokumentacja ma pozwolić odtworzyć to, co zniknęło pod jastrychem, oraz uruchomić układ zgodnie z obliczeniami.</p>
          </div>
        </div>

        <div class="rk-build-docs">
          <div class="rk-build-doc"><span>01</span><h3>Aktualny projekt</h3><p>Rzut pętli, obliczenia pomieszczeń, parametry pracy, rozdzielacze i schemat hydrauliczny w wersji odpowiadającej wykonanemu budynkowi.</p></div>
          <div class="rk-build-doc"><span>02</span><h3>Rejestr zmian</h3><p>Data, opis, przyczyna, osoba zgłaszająca, decyzja projektowa oraz wskazanie rysunku lub tabeli, które zostały zaktualizowane.</p></div>
          <div class="rk-build-doc"><span>03</span><h3>Tabela pętli</h3><p>Nazwa obiegu, pomieszczenie, długość rzeczywista, średnica, projektowy przepływ, nastawa i ewentualna uwaga wykonawcza.</p></div>
          <div class="rk-build-doc"><span>04</span><h3>Zdjęcia tras</h3><p>Widoki całych pomieszczeń i detali z miarą, osiami ścian albo trwałymi punktami odniesienia umożliwiającymi późniejszą lokalizację.</p></div>
          <div class="rk-build-doc"><span>05</span><h3>Protokoły</h3><p>Próba szczelności, odbiór przed zakryciem, dokumenty dotyczące jastrychu, procedura pierwszego uruchomienia i ewentualne pomiary pod okładzinę.</p></div>
          <div class="rk-build-doc"><span>06</span><h3>Nastawy startowe</h3><p>Przepływy, parametry pompy, krzywa grzewcza, ograniczenia temperatur i podstawowe ustawienia automatyki zapisane przy uruchomieniu.</p></div>
        </div>

        <div class="rk-build-tip">
          <p><strong>Praktyczna zasada archiwizacji:</strong> komplet powinien istnieć co najmniej w dwóch miejscach i mieć jednoznaczną nazwę inwestycji oraz datę. Zdjęcia bez rzutu, miary i opisu są znacznie mniej przydatne niż krótki, uporządkowany pakiet powykonawczy.</p>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-prevention" aria-labelledby="rk-build-h2-10">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">10</div>
          <div>
            <h2 id="rk-build-h2-10">Jak ograniczyć błędy bez zamieniania budowy w biuro projektowe?</h2>
            <p>Nie potrzeba setek dokumentów. Potrzeba krótkiej procedury, której każda ekipa rzeczywiście przestrzega.</p>
          </div>
        </div>

        <div class="rk-build-flow">
          <div class="rk-build-flow-card"><span>Krok A</span><h3>Jedna wersja obowiązująca</h3><p>Na budowie jest jedna aktualna dokumentacja. Starsze rzuty pozostają w archiwum z wyraźnym oznaczeniem, że nie służą do wykonania.</p></div>
          <div class="rk-build-flow-card"><span>Krok B</span><h3>Zmiana w jednym formularzu</h3><p>Każda korekta otrzymuje opis, zdjęcie lub rysunek, datę, osobę zgłaszającą oraz decyzję: bez wpływu, korekta lokalna albo aktualizacja projektu.</p></div>
          <div class="rk-build-flow-card"><span>Krok C</span><h3>Zakrycie dopiero po odbiorze</h3><p>Jastrych rozpoczyna się po zamknięciu uwag, wykonaniu próby, zdjęć i podpisaniu dopuszczenia do zakrycia.</p></div>
        </div>

        <p>Najlepiej, gdy proces rozpoczyna się jeszcze przed wejściem instalatora. Im wcześniej przygotowano <a href="https://projekt-ogrzewania.pl/czy-do-ogrzewania-podlogowego-potrzebny-jest-projekt/">projekt ogrzewania podłogowego</a> i skoordynowano go z architekturą, tym mniej zmian trzeba rozstrzygać przy rozwiniętych rurach. Jeżeli jednak zmiana jest potrzebna, jej zgłoszenie nie oznacza porażki — błędem jest dopiero ukrycie jej pod wylewką bez sprawdzenia wpływu.</p>

        <div class="rk-build-note">
          <p><strong>Kontrola jakości nie polega na szukaniu winnego.</strong> Jej celem jest wykrycie rozbieżności w momencie, w którym można ją jeszcze poprawić bez niszczenia gotowych warstw. Dlatego dobry protokół opisuje fakt, decyzję i termin, a nie emocje między ekipami.</p>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-faq" aria-labelledby="rk-build-h2-11">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">11</div>
          <div>
            <h2 id="rk-build-h2-11">FAQ — błędy na budowie a projekt ogrzewania podłogowego</h2>
            <p>Odpowiedzi na pytania dotyczące odstępstw, odbioru przed wylewką i dokumentacji powykonawczej.</p>
          </div>
        </div>

        <div class="rk-build-faq-list">
          <details class="rk-build-faq"><summary>Jakie błędy na budowie najczęściej psują projekt ogrzewania podłogowego?</summary><div class="rk-build-faq-answer"><p>Najczęściej są to niezaktualizowane zmiany architektury, inne izolacje lub okna, zmiana okładziny, przesunięcie rozdzielacza, samowolna korekta rozstawu i przebiegu pętli, niezgodna konstrukcja podłogi, brak próby szczelności, brak odbioru przed jastrychem oraz brak dokumentacji powykonawczej.</p></div></details>
          <details class="rk-build-faq"><summary>Czy każda zmiana na budowie wymaga nowego projektu podłogówki?</summary><div class="rk-build-faq-answer"><p>Nie każda wymaga opracowania projektu od początku. Każda zmiana istotna dla obciążenia cieplnego, powierzchni aktywnej, temperatury wody, długości pętli, przepływów lub konstrukcji podłogi powinna jednak zostać oceniona. Wynikiem może być brak korekty, lokalna zmiana albo aktualizacja kilku części dokumentacji.</p></div></details>
          <details class="rk-build-faq"><summary>Czy można przesunąć rozdzielacz ogrzewania podłogowego po wykonaniu projektu?</summary><div class="rk-build-faq-answer"><p>Można po sprawdzeniu nowej lokalizacji. Przesunięcie zmienia długości przyłączy kilku pętli, ich przebieg, opory hydrauliczne i dostęp serwisowy. Trzeba zaktualizować długości oraz ocenić możliwość uzyskania wymaganych przepływów.</p></div></details>
          <details class="rk-build-faq"><summary>Czy można zmienić płytki na panele po wykonaniu projektu?</summary><div class="rk-build-faq-answer"><p>Zmianę należy sprawdzić na podstawie łącznego oporu cieplnego panelu, podkładu i sposobu montażu. Większy opór nad rurą może zmniejszyć osiągalną moc albo wymagać wyższej temperatury wody. Istotne są również ograniczenia temperatury podane dla wybranej okładziny.</p></div></details>
          <details class="rk-build-faq"><summary>Czy pętla dłuższa niż 100 metrów zawsze jest błędem?</summary><div class="rk-build-faq-answer"><p>Nie można oceniać pętli tylko jedną długością. Znaczenie mają średnica wewnętrzna przewodu, przepływ, wymagana moc, różnica temperatury, armatura, opór całej trasy i dostępne ciśnienie pompy. O poprawności decydują obliczenia konkretnego obiegu.</p></div></details>
          <details class="rk-build-faq"><summary>Jakie ciśnienie zastosować przy próbie szczelności podłogówki?</summary><div class="rk-build-faq-answer"><p>Nie należy przyjmować uniwersalnej wartości bez znajomości systemu. Medium, ciśnienie, czas stabilizacji, kolejne odczyty oraz kryterium wyniku powinny wynikać z właściwej procedury, projektu, dokumentacji zastosowanych elementów i warunków na budowie.</p></div></details>
          <details class="rk-build-faq"><summary>Czy przed wylewką trzeba ustawiać wszystkie rotametry?</summary><div class="rk-build-faq-answer"><p>Odbiór przed zakryciem powinien potwierdzić identyfikację obiegów, drożność oraz próbę zgodną z procedurą. Docelowe równoważenie wykonuje się w warunkach uruchomienia instalacji według projektowych przepływów. Jednakowe ustawienie wszystkich rotametrów nie jest zasadą projektową.</p></div></details>
          <details class="rk-build-faq"><summary>Co powinien zawierać protokół odbioru podłogówki przed wylewką?</summary><div class="rk-build-faq-answer"><p>Powinien identyfikować inwestycję i wersję projektu, potwierdzać zgodność tras i oznaczeń, wskazywać uwagi oraz ich usunięcie, zawierać wynik próby szczelności, datę, uczestników i jednoznaczną decyzję dotyczącą dopuszczenia instalacji do zakrycia.</p></div></details>
          <details class="rk-build-faq"><summary>Czy zdjęcia rur przed wylewką wystarczą jako dokumentacja?</summary><div class="rk-build-faq-answer"><p>Nie. Zdjęcia są jednym z elementów. Potrzebne są również aktualny rzut, identyfikacja pętli, ich rzeczywiste długości, protokół próby, zestawienie nastaw oraz opis zmian. Fotografie powinny zawierać miarę albo trwałe punkty odniesienia.</p></div></details>
          <details class="rk-build-faq"><summary>Kiedy trzeba ponownie przeliczyć ogrzewanie podłogowe?</summary><div class="rk-build-faq-answer"><p>Ponowna kontrola jest potrzebna szczególnie po zmianie przegród, okien, temperatur pomieszczeń, aktywnej powierzchni, okładziny, źródła ciepła, temperatury zasilania, położenia rozdzielacza, liczby i przebiegu pętli albo konstrukcji podłogi.</p></div></details>
          <details class="rk-build-faq"><summary>Kto zatwierdza zmianę rozstawu rur na budowie?</summary><div class="rk-build-faq-answer"><p>Rozstaw wynika z obciążenia pomieszczenia, konstrukcji podłogi i parametrów wody, dlatego jego zmianę powinien ocenić autor właściwej części projektu lub osoba posiadająca komplet danych do ponownego sprawdzenia. Nie powinien być korygowany wyłącznie na podstawie ilości pozostałej rury.</p></div></details>
          <details class="rk-build-faq"><summary>Co zrobić, gdy instalacja została już zalana bez dokumentacji?</summary><div class="rk-build-faq-answer"><p>Należy zebrać dostępne projekty, zdjęcia i informacje wykonawcy, zidentyfikować pętle, wykonać bezpieczne pomiary instalacji oraz uzupełnić dokumentację w zakresie możliwym bez odkrywek. Zakres diagnostyki zależy od objawów i nie powinien być zastępowany zgadywaniem przebiegu rur.</p></div></details>
        </div>
      </section>

      <section class="rk-build-section" id="rk-build-sources" aria-labelledby="rk-build-h2-12">
        <div class="rk-build-section-head">
          <div class="rk-build-section-no">12</div>
          <div>
            <h2 id="rk-build-h2-12">Podstawa techniczna i źródła</h2>
            <p>Neutralne źródła dotyczące projektowania i instalowania wbudowanych systemów ogrzewania powierzchniowego.</p>
          </div>
        </div>

        <div class="rk-build-sources">
          <ul>
            <li><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="noopener nofollow">ISO 11855-2:2021</a> — zasady określania projektowej mocy ogrzewania i chłodzenia powierzchniowego.</li>
            <li><a href="https://www.iso.org/standard/74685.html" target="_blank" rel="noopener nofollow">ISO 11855-5:2021</a> — zagadnienia dotyczące instalowania wbudowanych systemów powierzchniowych.</li>
            <li><a href="https://www.iso.org/standard/64999.html" target="_blank" rel="noopener nofollow">ISO 11855-6:2018</a> — zagadnienia dotyczące sterowania wbudowanymi systemami ogrzewania i chłodzenia powierzchniowego.</li>
          </ul>
        </div>
        <p class="rk-build-small">Artykuł nie publikuje treści norm i nie zastępuje projektu, dokumentacji zastosowanego systemu, wymagań dotyczących konkretnego jastrychu ani oceny wykonania na budowie. Przed zastosowaniem procedury należy sprawdzić aktualne dokumenty właściwe dla inwestycji.</p>
      </section>

      <div class="rk-build-cta" aria-label="Projekt ogrzewania podłogowego">
        <h3>Chcesz przekazać wykonawcy dokumentację, z którą można porównać każdą pętlę przed wylewką?</h3>
        <p>Projekt określa obciążenie pomieszczeń, aktywne powierzchnie, rozstaw i przebieg rur, długości pętli, wymagane przepływy, opory hydrauliczne, temperaturę zasilania oraz nastawy rozdzielacza. Dzięki temu zmiana na budowie może zostać zauważona przed trwałym zakryciem instalacji.</p>
        <a class="rk-build-cta-link" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt instalacji ogrzewania podłogowego</a>
        <small>To jedyne CTA sprzedażowe w artykule. Odnośnik prowadzi do strony usługi Projekt-Ogrzewania.pl należącej do autora opracowania.</small>
      </div>

      <aside class="rk-build-author-box" aria-labelledby="rk-build-author-title" itemprop="author" itemscope="" itemtype="https://schema.org/Person">
        <meta itemprop="name" content="Robert Kucharski">
        <meta itemprop="url" content="https://projekt-ogrzewania.pl/">
        <div class="rk-build-author-head">
          <div><h3 id="rk-build-author-title">Autor opracowania</h3><p>Praktyka projektowa, wiedza techniczna i język zrozumiały dla inwestora.</p></div>
          <div class="rk-build-author-mark">E-E-A-T • HVAC</div>
        </div>
        <div class="rk-build-author-main">
          <div class="rk-build-author-profile">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski – specjalista systemów HVAC i ogrzewania podłogowego" width="174" height="174" loading="lazy" itemprop="image">
            <h4>Robert Kucharski</h4>
            <span class="rk-build-author-role" itemprop="jobTitle">CEO • specjalista systemów HVAC i ogrzewania podłogowego</span>
          </div>
          <div class="rk-build-author-content">
            <div class="rk-build-quote"><blockquote>„Projekt nie kończy się w chwili wysłania pliku. Musi jeszcze spotkać się z rzeczywistym budynkiem. Jeżeli na budowie zmieniają się izolacje, okładziny, ściany albo trasy pętli, trzeba ponownie połączyć wykonanie z obliczeniami — zanim rury znikną pod jastrychem.”</blockquote></div>

            <div class="rk-build-author-tabs">
              <input class="rk-build-author-radio" type="radio" name="rk-build-author-tabs" id="rk-build-author-about" checked="">
              <input class="rk-build-author-radio" type="radio" name="rk-build-author-tabs" id="rk-build-author-exp">
              <input class="rk-build-author-radio" type="radio" name="rk-build-author-tabs" id="rk-build-author-sites">

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

              <div class="rk-build-author-panels">
                <div class="rk-build-author-panel rk-build-author-about">
                  <p>Specjalizuję się w projektowaniu wodnego ogrzewania podłogowego, obliczeniach obciążenia cieplnego i hydraulice instalacji. Przygotowuję dokumentację, która łączy warunki źródła ciepła, konstrukcję podłogi, pętle, przepływy oraz nastawy w jeden możliwy do wykonania i skontrolowania układ.</p>
                </div>
                <div class="rk-build-author-panel rk-build-author-exp">
                  <p>W pracy projektowej zwracam szczególną uwagę na koordynację z rzeczywistą budową. Rozstaw rur, długości pętli i przepływy są poprawne tylko dla określonych danych wejściowych. Dlatego w opracowaniach oddzielam obliczenia od przyzwyczajeń wykonawczych i wskazuję punkty wymagające odbioru przed zakryciem instalacji.</p>
                </div>
                <div class="rk-build-author-panel rk-build-author-sites">
                  <p>Jestem właścicielem i autorem publikacji w trzech serwisach branżowych. Powiązanie portali podaję jawnie, aby czytelnik znał autorstwo i kontekst linkowania:</p>
                  <div class="rk-build-portals">
                    <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>
          </div>
        </div>
      </aside>
    </div>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#webpage",
      "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/",
      "name": "Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego – kontrola 5 etapów",
      "description": "Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego. Pięć etapów kontroli zmian, wykonania i dokumentacji przed zakryciem instalacji.",
      "inLanguage": "pl-PL",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#primaryimage" },
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#article" },
      "datePublished": "2026-04-24",
      "dateModified": "2026-08-25",
      "potentialAction": {
        "@type": "ReadAction",
        "target": ["https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/"]
      }
    },
    {
      "@type": ["TechArticle", "Article"],
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#article",
      "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#webpage" },
      "headline": "Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego – kontrola 5 etapów",
      "alternativeHeadline": "Jak kontrolować odstępstwa od projektu podłogówki przed wylewką",
      "description": "Techniczny przewodnik po zmianach na budowie, które mogą naruszyć obliczenia ogrzewania podłogowego: dane wejściowe, warstwy podłogi, pętle, próba, jastrych, uruchomienie i dokumentacja powykonawcza.",
      "inLanguage": "pl-PL",
      "datePublished": "2026-04-24",
      "dateModified": "2026-08-25",
      "author": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "copyrightHolder": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" },
      "copyrightYear": 2026,
      "image": { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#primaryimage" },
      "articleSection": [
        "Błędy na budowie",
        "Ogrzewanie podłogowe",
        "Kontrola zgodności projektu",
        "Odbiór przed wylewką",
        "Dokumentacja powykonawcza"
      ],
      "keywords": "najczęstsze błędy na budowie które psują nawet najlepszy projekt ogrzewania podłogowego, błędy na budowie podłogówki, odstępstwa od projektu ogrzewania podłogowego, kontrola ogrzewania podłogowego przed wylewką, odbiór podłogówki przed wylewką, przesunięcie rozdzielacza po projekcie, zmiana rozstawu rur na budowie, zmiana okładziny po projekcie podłogówki, dokumentacja powykonawcza ogrzewania podłogowego, protokół odbioru podłogówki, checklista podłogówki przed wylewką",
      "proficiencyLevel": "Expert",
      "educationalLevel": "Zaawansowany poradnik techniczny dla inwestora, wykonawcy i kierownika budowy",
      "isAccessibleForFree": true,
      "audience": [
        { "@type": "Audience", "audienceType": "Inwestorzy budujący dom" },
        { "@type": "Audience", "audienceType": "Wykonawcy instalacji ogrzewania podłogowego" },
        { "@type": "Audience", "audienceType": "Kierownicy budowy" }
      ],
      "about": [
        { "@type": "Thing", "name": "Ogrzewanie podłogowe" },
        { "@type": "Thing", "name": "Kontrola zgodności projektu z wykonaniem" },
        { "@type": "Thing", "name": "Odbiór instalacji przed wylewką" },
        { "@type": "Thing", "name": "Dokumentacja powykonawcza" }
      ],
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": ["#rk-build-h2-1", ".rk-build-answer", "#rk-build-stop", "#rk-build-faq"]
      },
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#change-list" },
        { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#faq" },
        { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#audit" }
      ],
      "citation": [
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74685.html",
        "https://www.iso.org/standard/64999.html"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego.webp",
      "width": 900,
      "height": 900,
      "caption": "Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego"
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#change-list",
      "name": "Zmiany na budowie wymagające kontroli projektu ogrzewania podłogowego",
      "description": "Lista zmian mogących wpłynąć na obciążenie cieplne, moc podłogi, długości pętli, przepływy i opory hydrauliczne.",
      "numberOfItems": 9,
      "itemListOrder": "https://schema.org/ItemListOrderAscending",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "item": { "@type": "Thing", "name": "Zmiana izolacji ścian, dachu lub podłogi" } },
        { "@type": "ListItem", "position": 2, "item": { "@type": "Thing", "name": "Zmiana okien, ich wymiaru albo liczby" } },
        { "@type": "ListItem", "position": 3, "item": { "@type": "Thing", "name": "Przesunięcie ścian lub zmiana funkcji pomieszczenia" } },
        { "@type": "ListItem", "position": 4, "item": { "@type": "Thing", "name": "Zmiana okładziny i jej oporu cieplnego" } },
        { "@type": "ListItem", "position": 5, "item": { "@type": "Thing", "name": "Przesunięcie rozdzielacza ogrzewania podłogowego" } },
        { "@type": "ListItem", "position": 6, "item": { "@type": "Thing", "name": "Zmiana źródła ciepła lub temperatury zasilania" } },
        { "@type": "ListItem", "position": 7, "item": { "@type": "Thing", "name": "Zmiana rozstawu albo przebiegu rur" } },
        { "@type": "ListItem", "position": 8, "item": { "@type": "Thing", "name": "Zmiana grubości jastrychu lub poziomu podłogi" } },
        { "@type": "ListItem", "position": 9, "item": { "@type": "Thing", "name": "Zmiana powierzchni zabudowy stałej" } }
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#howto",
      "name": "Jak kontrolować zgodność projektu ogrzewania podłogowego z budową w pięciu etapach",
      "description": "Pięć bramek odbiorowych od zamrożenia danych projektu do uruchomienia i przekazania dokumentacji powykonawczej.",
      "inLanguage": "pl-PL",
      "totalTime": "P1D",
      "tool": [
        { "@type": "HowToTool", "name": "Aktualny projekt ogrzewania podłogowego" },
        { "@type": "HowToTool", "name": "Aktualny rzut architektury" },
        { "@type": "HowToTool", "name": "Dokumentacja zastosowanych materiałów" },
        { "@type": "HowToTool", "name": "Wyposażenie do właściwej próby szczelności" },
        { "@type": "HowToTool", "name": "Miara i aparat fotograficzny" },
        { "@type": "HowToTool", "name": "Protokół odbioru przed zakryciem" }
      ],
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Zamroź dane projektu przed zamówieniem materiałów",
          "text": "Potwierdź aktualny rzut, funkcje pomieszczeń, izolacje, okna, źródło ciepła, temperatury, rozdzielacz, okładziny oraz wersję dokumentacji przekazaną wykonawcy.",
          "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#rk-build-gates"
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Odbierz podłoże i konstrukcję podłogi przed ułożeniem rur",
          "text": "Sprawdź rzeczywistą izolację, poziomy, stabilność warstw, izolację brzegową, szczeliny jastrychu, przepusty oraz kolizje branżowe.",
          "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#rk-build-gates"
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Porównaj ułożone pętle z aktualnym projektem",
          "text": "Skontroluj oznaczenia, rozstaw, trasy, długości, miejsca bez rur, mocowanie, przejścia i stan przewodów oraz wykonaj zdjęcia z punktami odniesienia.",
          "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#rk-build-gates"
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Wykonaj próbę i podpisz dopuszczenie do jastrychu",
          "text": "Zastosuj właściwą procedurę próby szczelności, zapisz parametry i wynik, usuń niezgodności, zabezpiecz instalację oraz formalnie dopuść ją do zakrycia.",
          "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#rk-build-gates"
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Uruchom układ i przekaż dokumentację powykonawczą",
          "text": "Zrealizuj właściwą procedurę dla jastrychu, sprawdź podłoże przed okładziną, ustaw projektowe przepływy i sterowanie oraz przekaż projekt, protokoły, zdjęcia i tabelę nastaw.",
          "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#rk-build-gates"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Jakie błędy na budowie najczęściej psują projekt ogrzewania podłogowego?",
          "acceptedAnswer": { "@type": "Answer", "text": "Najczęściej są to niezaktualizowane zmiany architektury, inne izolacje lub okna, zmiana okładziny, przesunięcie rozdzielacza, samowolna korekta rozstawu i przebiegu pętli, niezgodna konstrukcja podłogi, brak próby szczelności, brak odbioru przed jastrychem oraz brak dokumentacji powykonawczej." }
        },
        {
          "@type": "Question",
          "name": "Czy każda zmiana na budowie wymaga nowego projektu podłogówki?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie każda wymaga opracowania projektu od początku. Każda zmiana istotna dla obciążenia cieplnego, powierzchni aktywnej, temperatury wody, długości pętli, przepływów lub konstrukcji podłogi powinna jednak zostać oceniona. Wynikiem może być brak korekty, lokalna zmiana albo aktualizacja kilku części dokumentacji." }
        },
        {
          "@type": "Question",
          "name": "Czy można przesunąć rozdzielacz ogrzewania podłogowego po wykonaniu projektu?",
          "acceptedAnswer": { "@type": "Answer", "text": "Można po sprawdzeniu nowej lokalizacji. Przesunięcie zmienia długości przyłączy kilku pętli, ich przebieg, opory hydrauliczne i dostęp serwisowy. Trzeba zaktualizować długości oraz ocenić możliwość uzyskania wymaganych przepływów." }
        },
        {
          "@type": "Question",
          "name": "Czy można zmienić płytki na panele po wykonaniu projektu?",
          "acceptedAnswer": { "@type": "Answer", "text": "Zmianę należy sprawdzić na podstawie łącznego oporu cieplnego panelu, podkładu i sposobu montażu. Większy opór nad rurą może zmniejszyć osiągalną moc albo wymagać wyższej temperatury wody. Istotne są również ograniczenia temperatury podane dla wybranej okładziny." }
        },
        {
          "@type": "Question",
          "name": "Czy pętla dłuższa niż 100 metrów zawsze jest błędem?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie można oceniać pętli tylko jedną długością. Znaczenie mają średnica wewnętrzna przewodu, przepływ, wymagana moc, różnica temperatury, armatura, opór całej trasy i dostępne ciśnienie pompy. O poprawności decydują obliczenia konkretnego obiegu." }
        },
        {
          "@type": "Question",
          "name": "Jakie ciśnienie zastosować przy próbie szczelności podłogówki?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie należy przyjmować uniwersalnej wartości bez znajomości systemu. Medium, ciśnienie, czas stabilizacji, kolejne odczyty oraz kryterium wyniku powinny wynikać z właściwej procedury, projektu, dokumentacji zastosowanych elementów i warunków na budowie." }
        },
        {
          "@type": "Question",
          "name": "Czy przed wylewką trzeba ustawiać wszystkie rotametry?",
          "acceptedAnswer": { "@type": "Answer", "text": "Odbiór przed zakryciem powinien potwierdzić identyfikację obiegów, drożność oraz próbę zgodną z procedurą. Docelowe równoważenie wykonuje się w warunkach uruchomienia instalacji według projektowych przepływów. Jednakowe ustawienie wszystkich rotametrów nie jest zasadą projektową." }
        },
        {
          "@type": "Question",
          "name": "Co powinien zawierać protokół odbioru podłogówki przed wylewką?",
          "acceptedAnswer": { "@type": "Answer", "text": "Powinien identyfikować inwestycję i wersję projektu, potwierdzać zgodność tras i oznaczeń, wskazywać uwagi oraz ich usunięcie, zawierać wynik próby szczelności, datę, uczestników i jednoznaczną decyzję dotyczącą dopuszczenia instalacji do zakrycia." }
        },
        {
          "@type": "Question",
          "name": "Czy zdjęcia rur przed wylewką wystarczą jako dokumentacja?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Zdjęcia są jednym z elementów. Potrzebne są również aktualny rzut, identyfikacja pętli, ich rzeczywiste długości, protokół próby, zestawienie nastaw oraz opis zmian. Fotografie powinny zawierać miarę albo trwałe punkty odniesienia." }
        },
        {
          "@type": "Question",
          "name": "Kiedy trzeba ponownie przeliczyć ogrzewanie podłogowe?",
          "acceptedAnswer": { "@type": "Answer", "text": "Ponowna kontrola jest potrzebna szczególnie po zmianie przegród, okien, temperatur pomieszczeń, aktywnej powierzchni, okładziny, źródła ciepła, temperatury zasilania, położenia rozdzielacza, liczby i przebiegu pętli albo konstrukcji podłogi." }
        },
        {
          "@type": "Question",
          "name": "Kto zatwierdza zmianę rozstawu rur na budowie?",
          "acceptedAnswer": { "@type": "Answer", "text": "Rozstaw wynika z obciążenia pomieszczenia, konstrukcji podłogi i parametrów wody, dlatego jego zmianę powinien ocenić autor właściwej części projektu lub osoba posiadająca komplet danych do ponownego sprawdzenia. Nie powinien być korygowany wyłącznie na podstawie ilości pozostałej rury." }
        },
        {
          "@type": "Question",
          "name": "Co zrobić, gdy instalacja została już zalana bez dokumentacji?",
          "acceptedAnswer": { "@type": "Answer", "text": "Należy zebrać dostępne projekty, zdjęcia i informacje wykonawcy, zidentyfikować pętle, wykonać bezpieczne pomiary instalacji oraz uzupełnić dokumentację w zakresie możliwym bez odkrywek. Zakres diagnostyki zależy od objawów i nie powinien być zastępowany zgadywaniem przebiegu rur." }
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#audit",
      "name": "Kontrola zgodności projektu ogrzewania podłogowego z budową — 5 etapów",
      "url": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#rk-build-audit",
      "description": "Interaktywna lista dwudziestu potwierdzeń pogrupowanych w pięć bramek odbiorowych, ze wskazaniem siedmiu punktów krytycznych przed zakryciem instalacji.",
      "applicationCategory": "EducationalApplication",
      "applicationSubCategory": "Interaktywna lista kontroli budowy ogrzewania podłogowego",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "creator": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "featureList": [
        "Kontrola aktualności danych projektu",
        "Kontrola podłoża i konstrukcji podłogi",
        "Kontrola ułożonych pętli",
        "Kontrola próby oraz dopuszczenia do jastrychu",
        "Kontrola uruchomienia i dokumentacji powykonawczej",
        "Siedem punktów krytycznych blokujących ocenę pozytywną",
        "Dynamiczny wynik oraz status STOP, KONSULTACJA lub GO"
      ],
      "offers": { "@type": "Offer", "price": "0", "priceCurrency": "PLN" },
      "softwareHelp": { "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#article" }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista systemów HVAC oraz ogrzewania podłogowego",
      "description": "Projektant wodnego ogrzewania podłogowego, autor technicznych opracowań i właściciel serwisów Projekt-Ogrzewania.pl, Remont.biz.pl oraz Sobir.pl.",
      "knowsAbout": [
        "Ogrzewanie podłogowe",
        "Projektowanie instalacji sanitarnych",
        "Obciążenie cieplne budynków",
        "Hydraulika instalacji grzewczych",
        "Kontrola zgodności projektu z wykonaniem",
        "Rozdzielacze i regulacja przepływów",
        "Dokumentacja powykonawcza"
      ],
      "sameAs": [
        "https://projekt-ogrzewania.pl/",
        "https://remont.biz.pl/",
        "https://sobir.pl/",
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy"
      ],
      "affiliation": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "owns": [
        { "@id": "https://projekt-ogrzewania.pl/#website" },
        { "@id": "https://remont.biz.pl/#website" },
        { "@id": "https://sobir.pl/#website" }
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
        "width": 1024,
        "height": 1024
      },
      "founder": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" }
    },
    {
      "@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" },
      "creator": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" },
      "copyrightHolder": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" }
    },
    {
      "@type": "WebSite",
      "@id": "https://remont.biz.pl/#website",
      "url": "https://remont.biz.pl/",
      "name": "Remont.biz.pl",
      "inLanguage": "pl-PL",
      "creator": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" },
      "copyrightHolder": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" }
    },
    {
      "@type": "WebSite",
      "@id": "https://sobir.pl/#website",
      "url": "https://sobir.pl/",
      "name": "Sobir.pl",
      "inLanguage": "pl-PL",
      "creator": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" },
      "copyrightHolder": { "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1" }
    }
  ]
}
</script>

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

  function bootBuildControl() {
    var root = document.getElementById("rk-build-control");
    if (!root) {
      return;
    }
    if (root.getAttribute("data-rk-build-ready") === "1") {
      return;
    }
    root.setAttribute("data-rk-build-ready", "1");

    function find(selector) {
      return root.querySelector(selector);
    }

    function findAll(selector) {
      return root.querySelectorAll(selector);
    }

    function setText(selector, value) {
      var element = find(selector);
      if (element) {
        element.textContent = value;
      }
    }

    var checks = findAll("[data-rk-build-check]");
    var fill = find("#rk-build-fill");
    var progressbar = find(".rk-build-audit-bar");
    var signal = find("#rk-build-signal");
    var result = find("#rk-build-result");

    function updateStageCounts() {
      var stage;
      for (stage = 1; stage <= 5; stage += 1) {
        var stageChecks = findAll('[data-rk-build-check][data-stage="' + stage + '"]');
        var stageChecked = 0;
        var index;
        for (index = 0; index < stageChecks.length; index += 1) {
          if (stageChecks[index].checked) {
            stageChecked += 1;
          }
        }
        setText('[data-rk-build-stage-count="' + stage + '"]', stageChecked + "/" + stageChecks.length);
      }
    }

    function updateAudit() {
      var checked = 0;
      var criticalTotal = 0;
      var criticalChecked = 0;
      var index;

      for (index = 0; index < checks.length; index += 1) {
        if (checks[index].checked) {
          checked += 1;
        }
        if (checks[index].getAttribute("data-critical") === "1") {
          criticalTotal += 1;
          if (checks[index].checked) {
            criticalChecked += 1;
          }
        }
      }

      var total = checks.length;
      var missing = total - checked;
      var criticalMissing = criticalTotal - criticalChecked;
      var percent = total > 0 ? checked / total * 100 : 0;
      var rounded = Math.round(percent);

      setText("#rk-build-score", rounded + "%");
      setText("#rk-build-count", checked + " z " + total + " punktów");
      setText("#rk-build-missing", "Brakuje " + missing + " potwierdzeń, w tym " + criticalMissing + " krytycznych.");

      if (fill) {
        fill.style.width = percent.toFixed(1) + "%";
      }
      if (progressbar) {
        progressbar.setAttribute("aria-valuenow", String(rounded));
      }

      if (criticalMissing > 0) {
        if (signal) {
          signal.textContent = "STOP";
          signal.style.background = "#d83c2f";
        }
        if (result) {
          result.style.background = "#fff0ed";
        }
        if (fill) {
          fill.style.background = "#d83c2f";
        }
        setText("#rk-build-message", "Ocena czerwona: brakuje " + criticalMissing + " punktów krytycznych. Nie traktuj instalacji jako gotowej do zakrycia przed ich rzeczywistym sprawdzeniem i udokumentowaniem.");
      } else if (missing > 0) {
        if (signal) {
          signal.textContent = "KONSULTACJA";
          signal.style.background = "#b66a16";
        }
        if (result) {
          result.style.background = "#fff7e6";
        }
        if (fill) {
          fill.style.background = "#f2b441";
        }
        setText("#rk-build-message", "Ocena pomarańczowa: punkty krytyczne są potwierdzone, ale odbiór nie jest kompletny. Uzupełnij " + missing + " brakujących elementów i skonsultuj rozbieżności przed kolejnym etapem robót.");
      } else {
        if (signal) {
          signal.textContent = "GO";
          signal.style.background = "#178265";
        }
        if (result) {
          result.style.background = "#eaf8f3";
        }
        if (fill) {
          fill.style.background = "#178265";
        }
        setText("#rk-build-message", "Ocena zielona: wszystkie 20 punktów zostało potwierdzonych. Zachowaj projekt, rewizję powykonawczą, protokoły i zdjęcia. Wynik checklisty nadal nie zastępuje odbioru technicznego na budowie.");
      }

      updateStageCounts();
    }

    root.addEventListener("change", function (event) {
      var target = event.target;
      if (!target) {
        return;
      }
      if (target.matches("[data-rk-build-check]")) {
        updateAudit();
      }
    });

    root.addEventListener("click", function (event) {
      var clicked = event.target;
      if (!clicked) {
        return;
      }

      var resetButton = clicked.closest("#rk-build-reset");
      if (resetButton) {
        if (root.contains(resetButton)) {
          event.preventDefault();
          var index;
          for (index = 0; index < checks.length; index += 1) {
            checks[index].checked = false;
          }
          updateAudit();
          var audit = find("#rk-build-audit");
          if (audit) {
            audit.scrollIntoView({ behavior: "smooth", block: "start" });
          }
          return;
        }
      }

      var anchor = clicked.closest('a[href^="#"]');
      if (!anchor) {
        return;
      }
      if (!root.contains(anchor)) {
        return;
      }
      var selector = anchor.getAttribute("href");
      if (!selector) {
        return;
      }
      if (selector === "#") {
        return;
      }
      var destination = find(selector);
      if (!destination) {
        return;
      }
      event.preventDefault();
      var motion = "smooth";
      if (window.matchMedia) {
        if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
          motion = "auto";
        }
      }
      destination.scrollIntoView({ behavior: motion, block: "start" });
    });

    var readingProgress = find(".rk-build-progress");
    var ticking = false;

    function updateReadingProgress() {
      if (!readingProgress) {
        ticking = false;
        return;
      }
      var rect = root.getBoundingClientRect();
      var viewport = window.innerHeight || document.documentElement.clientHeight;
      var total = Math.max(root.offsetHeight - viewport, 1);
      var passed = Math.min(Math.max(-rect.top, 0), total);
      var value = Math.min(100, Math.max(0, passed / total * 100));
      readingProgress.style.width = value.toFixed(2) + "%";
      ticking = false;
    }

    function requestReadingProgress() {
      if (ticking) {
        return;
      }
      ticking = true;
      if (window.requestAnimationFrame) {
        window.requestAnimationFrame(updateReadingProgress);
      } else {
        window.setTimeout(updateReadingProgress, 16);
      }
    }

    window.addEventListener("scroll", requestReadingProgress, { passive: true });
    window.addEventListener("resize", requestReadingProgress, { passive: true });
    updateAudit();
    updateReadingProgress();
  }

  function scheduleBuildControl() {
    bootBuildControl();
    window.setTimeout(bootBuildControl, 250);
    window.setTimeout(bootBuildControl, 900);
    window.setTimeout(bootBuildControl, 2200);
  }

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

  window.addEventListener("load", bootBuildControl);
  window.addEventListener("pageshow", bootBuildControl);
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/">Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Kalkulator do obliczania ilości metrów rury potrzebnych do ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/</link>
					<comments>https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 14 Mar 2025 11:52:06 +0000</pubDate>
				<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Materiały budowlane]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Optymalizacja kosztów]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Systemy grzewcze]]></category>
		<category><![CDATA[budowa domu]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[kalkulator rury]]></category>
		<category><![CDATA[materiały budowlane]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[poradniki]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[remonty]]></category>
		<category><![CDATA[systemy grzewcze]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2407</guid>

					<description><![CDATA[<p>Planujesz montaż ogrzewania podłogowego i zastanawiasz się, ile metrów rury będzie potrzebnych? Kalkulator do obliczania ilości metrów rury do ogrzewania podłogowego to narzędzie, które pomoże Ci precyzyjnie oszacować potrzebne materiały. Dzięki niemu unikniesz błędów, które mogą wpłynąć na efektywność systemu. W artykule znajdziesz praktyczne przykłady obliczeń, wskazówki dotyczące stref grzewczych oraz informacje, dlaczego warto zlecić projekt profesjonalistom. Sprawdź, jak zaoszczędzić czas i pieniądze!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/">Kalkulator do obliczania ilości metrów rury potrzebnych do ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-pipe-calc {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #28c9da;
    --rk-cyan-soft: #eafcff;
    --rk-orange: #ff7438;
    --rk-red: #e34837;
    --rk-green: #148369;
    --rk-green-soft: #eaf8f4;
    --rk-yellow: #f1b83d;
    --rk-yellow-soft: #fff9e8;
    --rk-ink: #1f2937;
    --rk-text: #465866;
    --rk-muted: #687986;
    --rk-line: #dce8ee;
    --rk-soft: #f5f9fb;
    --rk-warm: #fff4ed;
    --rk-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 70px;
    color: var(--rk-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.76;
  }

  #rk-pipe-calc,
  #rk-pipe-calc * {
    box-sizing: border-box;
  }

  #rk-pipe-calc img,
  #rk-pipe-calc svg {
    max-width: 100%;
  }

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

  #rk-pipe-calc a {
    color: var(--rk-blue);
    font-weight: 760;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }

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

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

  #rk-pipe-calc h2 {
    margin-bottom: 18px;
    font-size: clamp(1.65rem, 3.7vw, 2.6rem);
  }

  #rk-pipe-calc h3 {
    margin-bottom: 12px;
    font-size: clamp(1.16rem, 2.5vw, 1.52rem);
  }

  #rk-pipe-calc h4 {
    margin-bottom: 8px;
    font-size: 1.04rem;
    letter-spacing: -0.018em;
  }

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

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

  #rk-pipe-calc strong {
    color: var(--rk-dark);
  }

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

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

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

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

  #rk-pipe-calc .rk-pipe-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(38px, 6.5vw, 78px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 88% 10%, rgba(255, 116, 56, 0.38), transparent 26%),
      radial-gradient(circle at 78% 88%, rgba(40, 201, 218, 0.24), transparent 31%),
      linear-gradient(135deg, #0d2230 0%, #143b50 58%, #095e78 100%);
  }

  #rk-pipe-calc .rk-pipe-hero::before {
    content: "";
    position: absolute;
    z-index: -1;
    right: -115px;
    bottom: -178px;
    width: 410px;
    height: 410px;
    border: 58px solid rgba(255, 255, 255, 0.055);
    border-radius: 50%;
    pointer-events: none;
  }

  #rk-pipe-calc .rk-pipe-hero-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.18fr) minmax(260px, 0.82fr);
    gap: clamp(28px, 5vw, 62px);
    align-items: center;
  }

  #rk-pipe-calc .rk-pipe-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 23px;
    padding: 8px 15px;
    border: 1px solid rgba(255, 255, 255, 0.25);
    border-radius: 999px;
    color: #9ef5ff;
    background: rgba(255, 255, 255, 0.06);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.105em;
    line-height: 1.25;
    text-transform: uppercase;
  }

  #rk-pipe-calc .rk-pipe-eyebrow b {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--rk-orange);
    box-shadow: 0 0 0 7px rgba(255, 116, 56, 0.17);
  }

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

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

  #rk-pipe-calc .rk-pipe-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 11px 22px;
    color: #c8d9e3;
    font-size: 0.82rem;
    font-weight: 780;
  }

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

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

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

  #rk-pipe-calc .rk-pipe-hero-formula small {
    display: block;
    margin-bottom: 13px;
    color: #89effa;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-pipe-calc .rk-pipe-hero-formula code {
    display: block;
    color: var(--rk-white);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: clamp(1.05rem, 2.5vw, 1.45rem);
    font-weight: 850;
    line-height: 1.5;
    white-space: normal;
  }

  #rk-pipe-calc .rk-pipe-hero-formula p {
    margin: 16px 0 0;
    color: #d0e3ec;
    font-size: 0.82rem;
    line-height: 1.6;
  }

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

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

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

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

  #rk-pipe-calc .rk-pipe-section {
    margin-bottom: clamp(55px, 8vw, 94px);
  }

  #rk-pipe-calc .rk-pipe-section:last-child {
    margin-bottom: 0;
  }

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

  #rk-pipe-calc .rk-pipe-lead {
    max-width: 930px;
    font-size: 1.08rem;
    line-height: 1.82;
  }

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

  #rk-pipe-calc .rk-pipe-summary-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 16px;
    margin-top: 28px;
  }

  #rk-pipe-calc .rk-pipe-summary-card {
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-soft);
  }

  #rk-pipe-calc .rk-pipe-summary-card b {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    margin-bottom: 13px;
    border-radius: 13px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: 0.8rem;
  }

  #rk-pipe-calc .rk-pipe-summary-card h3 {
    font-size: 1.12rem;
  }

  #rk-pipe-calc .rk-pipe-summary-card p {
    margin-bottom: 0;
    font-size: 0.88rem;
    line-height: 1.65;
  }

  #rk-pipe-calc .rk-pipe-correction {
    display: grid;
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
    gap: 0;
    overflow: hidden;
    border: 1px solid #f0c7b6;
    border-radius: 25px;
    background: var(--rk-white);
  }

  #rk-pipe-calc .rk-pipe-correction-copy {
    padding: clamp(25px, 4vw, 42px);
    background: var(--rk-warm);
  }

  #rk-pipe-calc .rk-pipe-correction-copy p:last-child {
    margin-bottom: 0;
  }

  #rk-pipe-calc .rk-pipe-correction-math {
    display: grid;
    gap: 15px;
    align-content: center;
    padding: clamp(25px, 4vw, 42px);
  }

  #rk-pipe-calc .rk-pipe-equation {
    padding: 18px 20px;
    border-left: 5px solid var(--rk-blue);
    border-radius: 8px 15px 15px 8px;
    background: var(--rk-soft);
  }

  #rk-pipe-calc .rk-pipe-equation.is-wrong {
    border-left-color: var(--rk-red);
    background: #fff1ef;
  }

  #rk-pipe-calc .rk-pipe-equation small {
    display: block;
    margin-bottom: 6px;
    color: var(--rk-muted);
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.07em;
    text-transform: uppercase;
  }

  #rk-pipe-calc .rk-pipe-equation code {
    color: var(--rk-dark);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.96rem;
    font-weight: 850;
    white-space: normal;
  }

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

  #rk-pipe-calc .rk-pipe-calculator-head {
    padding: clamp(30px, 5vw, 54px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 90% 5%, rgba(255, 116, 56, 0.34), transparent 28%),
      linear-gradient(125deg, var(--rk-dark), #174b63);
  }

  #rk-pipe-calc .rk-pipe-calculator-head h2 {
    max-width: 860px;
    margin-bottom: 13px;
    color: var(--rk-white);
  }

  #rk-pipe-calc .rk-pipe-calculator-head p {
    max-width: 880px;
    margin-bottom: 0;
    color: #d7e9f1;
  }

  #rk-pipe-calc .rk-pipe-calculator-layout {
    display: grid;
    grid-template-columns: minmax(320px, 0.86fr) minmax(0, 1.14fr);
  }

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

  #rk-pipe-calc .rk-pipe-control {
    margin-bottom: 21px;
  }

  #rk-pipe-calc .rk-pipe-control:last-child {
    margin-bottom: 0;
  }

  #rk-pipe-calc .rk-pipe-control label {
    display: block;
    margin-bottom: 8px;
    color: var(--rk-dark);
    font-size: 0.82rem;
    font-weight: 880;
    line-height: 1.45;
  }

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

  #rk-pipe-calc .rk-pipe-control input,
  #rk-pipe-calc .rk-pipe-control select {
    display: block;
    width: 100%;
    min-height: 49px;
    padding: 9px 12px;
    border: 1px solid #bfd4de;
    border-radius: 12px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-weight: 780;
    outline: none;
  }

  #rk-pipe-calc .rk-pipe-control input:focus,
  #rk-pipe-calc .rk-pipe-control select:focus {
    border-color: var(--rk-blue);
    box-shadow: 0 0 0 4px rgba(7, 143, 190, 0.12);
  }

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

  #rk-pipe-calc .rk-pipe-result-primary {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin-bottom: 18px;
  }

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

  #rk-pipe-calc .rk-pipe-result-card.is-main {
    color: var(--rk-white);
    border-color: var(--rk-blue);
    background: linear-gradient(135deg, var(--rk-blue), #0a718f);
  }

  #rk-pipe-calc .rk-pipe-result-card small {
    display: block;
    margin-bottom: 6px;
    color: var(--rk-muted);
    font-size: 0.68rem;
    font-weight: 880;
    letter-spacing: 0.045em;
    line-height: 1.4;
    text-transform: uppercase;
  }

  #rk-pipe-calc .rk-pipe-result-card.is-main small {
    color: #caf6ff;
  }

  #rk-pipe-calc .rk-pipe-result-number {
    overflow-wrap: anywhere;
    color: var(--rk-dark);
    font-size: clamp(1.42rem, 3vw, 2.1rem);
    font-weight: 950;
    letter-spacing: -0.04em;
    line-height: 1.1;
  }

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

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

  #rk-pipe-calc .rk-pipe-result-note {
    margin-top: 18px;
    padding: 16px 18px;
    border-left: 5px solid var(--rk-cyan);
    border-radius: 8px 14px 14px 8px;
    background: var(--rk-cyan-soft);
    color: var(--rk-dark);
    font-size: 0.82rem;
    font-weight: 730;
    line-height: 1.6;
  }

  #rk-pipe-calc .rk-pipe-result-note.is-warning {
    border-left-color: var(--rk-orange);
    background: var(--rk-warm);
  }

  #rk-pipe-calc .rk-pipe-chart {
    margin-top: 24px;
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 19px;
    background: var(--rk-white);
  }

  #rk-pipe-calc .rk-pipe-chart h3 {
    margin-bottom: 5px;
    font-size: 1.14rem;
  }

  #rk-pipe-calc .rk-pipe-chart-intro {
    margin-bottom: 18px;
    font-size: 0.76rem;
  }

  #rk-pipe-calc .rk-pipe-bar-row {
    display: grid;
    grid-template-columns: 58px minmax(0, 1fr) 88px;
    gap: 11px;
    align-items: center;
    margin: 10px 0;
  }

  #rk-pipe-calc .rk-pipe-bar-label,
  #rk-pipe-calc .rk-pipe-bar-value {
    color: var(--rk-dark);
    font-size: 0.72rem;
    font-weight: 900;
  }

  #rk-pipe-calc .rk-pipe-bar-value {
    text-align: right;
  }

  #rk-pipe-calc .rk-pipe-bar-track {
    height: 14px;
    overflow: hidden;
    border-radius: 999px;
    background: #e8f0f4;
  }

  #rk-pipe-calc .rk-pipe-bar {
    width: 0;
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, var(--rk-cyan), var(--rk-blue));
    transition: width 220ms ease;
  }

  #rk-pipe-calc .rk-pipe-bar-row.is-selected .rk-pipe-bar {
    background: linear-gradient(90deg, var(--rk-orange), var(--rk-red));
  }

  #rk-pipe-calc .rk-pipe-bar-row.is-selected .rk-pipe-bar-label,
  #rk-pipe-calc .rk-pipe-bar-row.is-selected .rk-pipe-bar-value {
    color: var(--rk-red);
  }

  #rk-pipe-calc .rk-pipe-inline-cta {
    padding: clamp(26px, 4vw, 42px);
    border-top: 1px solid rgba(255, 255, 255, 0.14);
    color: var(--rk-white);
    background: var(--rk-dark);
  }

  #rk-pipe-calc .rk-pipe-inline-cta h3 {
    margin-bottom: 9px;
    color: var(--rk-white);
  }

  #rk-pipe-calc .rk-pipe-inline-cta p {
    color: #d7e8ef;
  }

  #rk-pipe-calc .rk-pipe-cta-button {
    display: flex;
    width: 100%;
    min-height: 62px;
    align-items: center;
    justify-content: center;
    margin-top: 21px;
    padding: 15px 22px;
    border-radius: 16px;
    color: var(--rk-white);
    background: linear-gradient(90deg, var(--rk-orange), var(--rk-red));
    box-shadow: 0 16px 36px rgba(227, 72, 55, 0.28);
    font-weight: 950;
    line-height: 1.35;
    text-align: center;
    text-decoration: none;
  }

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

  #rk-pipe-calc .rk-pipe-disclosure {
    display: block;
    margin-top: 11px;
    color: #bcd1dc;
    font-size: 0.69rem;
    line-height: 1.5;
    text-align: center;
  }

  #rk-pipe-calc .rk-pipe-grid-2,
  #rk-pipe-calc .rk-pipe-grid-3 {
    display: grid;
    gap: 17px;
  }

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

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

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

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

  #rk-pipe-calc .rk-pipe-card p:last-child {
    margin-bottom: 0;
  }

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

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

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

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

  #rk-pipe-calc .rk-pipe-formula p {
    margin-bottom: 0;
    font-size: 0.79rem;
    line-height: 1.62;
  }

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

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

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

  #rk-pipe-calc th {
    color: var(--rk-white);
    background: var(--rk-dark);
    font-size: 0.74rem;
    font-weight: 900;
    line-height: 1.4;
  }

  #rk-pipe-calc td {
    font-size: 0.84rem;
    line-height: 1.55;
  }

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

  #rk-pipe-calc tbody tr:last-child td {
    border-bottom: 0;
  }

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

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

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

  #rk-pipe-calc .rk-pipe-note p:last-child,
  #rk-pipe-calc .rk-pipe-warning p:last-child,
  #rk-pipe-calc .rk-pipe-success p:last-child {
    margin-bottom: 0;
  }

  #rk-pipe-calc .rk-pipe-example-grid {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
    margin-top: 24px;
  }

  #rk-pipe-calc .rk-pipe-example {
    padding: 19px 15px;
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    background: var(--rk-soft);
    text-align: center;
  }

  #rk-pipe-calc .rk-pipe-example strong {
    display: block;
    color: var(--rk-blue);
    font-size: 1.45rem;
    font-weight: 950;
    letter-spacing: -0.04em;
  }

  #rk-pipe-calc .rk-pipe-example b {
    display: block;
    margin: 5px 0;
    color: var(--rk-dark);
    font-size: 0.78rem;
  }

  #rk-pipe-calc .rk-pipe-example small {
    display: block;
    color: var(--rk-muted);
    font-size: 0.66rem;
    line-height: 1.45;
  }

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

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

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

  #rk-pipe-calc .rk-pipe-faq {
    display: grid;
    gap: 12px;
  }

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

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

  #rk-pipe-calc .rk-pipe-faq summary::-webkit-details-marker {
    display: none;
  }

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

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

  #rk-pipe-calc .rk-pipe-faq-answer {
    padding: 18px 20px;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  #rk-pipe-calc .rk-pipe-final-cta {
    overflow: hidden;
    border-radius: 27px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 92% 15%, rgba(255, 116, 56, 0.38), transparent 28%),
      linear-gradient(125deg, var(--rk-dark), #15465e);
  }

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

  #rk-pipe-calc .rk-pipe-final-cta h2 {
    max-width: 900px;
    margin-bottom: 13px;
    color: var(--rk-white);
  }

  #rk-pipe-calc .rk-pipe-final-cta p {
    max-width: 900px;
    color: #d8e9f1;
  }

  @media (max-width: 980px) {
    #rk-pipe-calc .rk-pipe-hero-grid,
    #rk-pipe-calc .rk-pipe-calculator-layout,
    #rk-pipe-calc .rk-pipe-correction,
    #rk-pipe-calc .rk-pipe-author-layout {
      grid-template-columns: 1fr;
    }

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

    #rk-pipe-calc .rk-pipe-summary-grid,
    #rk-pipe-calc .rk-pipe-grid-3 {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

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

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

    #rk-pipe-calc .rk-pipe-shell {
      border-radius: 20px;
    }

    #rk-pipe-calc .rk-pipe-hero,
    #rk-pipe-calc .rk-pipe-body {
      padding: 27px 19px;
    }

    #rk-pipe-calc .rk-pipe-result-secondary,
    #rk-pipe-calc .rk-pipe-summary-grid,
    #rk-pipe-calc .rk-pipe-grid-2,
    #rk-pipe-calc .rk-pipe-grid-3,
    #rk-pipe-calc .rk-pipe-formulas,
    #rk-pipe-calc .rk-pipe-checklist,
    #rk-pipe-calc .rk-pipe-example-grid {
      grid-template-columns: 1fr;
    }

    #rk-pipe-calc .rk-pipe-result-primary {
      grid-template-columns: 1fr 1fr;
    }

    #rk-pipe-calc .rk-pipe-bar-row {
      grid-template-columns: 50px minmax(0, 1fr) 75px;
      gap: 8px;
    }

    #rk-pipe-calc .rk-pipe-author-head {
      display: block;
    }

    #rk-pipe-calc .rk-pipe-author-mark {
      display: inline-block;
      margin-top: 16px;
    }

    #rk-pipe-calc .rk-pipe-author-main {
      padding: 25px 18px 28px;
    }

    #rk-pipe-calc .rk-pipe-author-quote {
      padding: 22px;
    }

    #rk-pipe-calc .rk-pipe-author-quote::before {
      display: none;
    }

    #rk-pipe-calc .rk-pipe-author-tabs {
      grid-template-columns: 1fr;
      border-radius: 14px 14px 0 0;
    }

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

    #rk-pipe-calc .rk-pipe-table-wrap {
      overflow: visible;
      border: 0;
      border-radius: 0;
    }

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

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

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

    #rk-pipe-calc td,
    #rk-pipe-calc tbody tr:nth-child(even) td {
      display: grid;
      grid-template-columns: minmax(115px, 0.75fr) minmax(0, 1.25fr);
      gap: 12px;
      padding: 12px 14px;
      background: var(--rk-white);
    }

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

  @media (max-width: 430px) {
    #rk-pipe-calc .rk-pipe-result-primary {
      grid-template-columns: 1fr;
    }

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

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

<article id="rk-pipe-calc" data-rk-pipe-version="2026-08-26" aria-label="Kalkulator długości rury do ogrzewania podłogowego">
  <div class="rk-pipe-shell">
    <div class="rk-pipe-progress-track" aria-hidden="true"><div class="rk-pipe-progress"></div></div>

    <header class="rk-pipe-hero">
      <div class="rk-pipe-hero-grid">
        <div>
          <span class="rk-pipe-eyebrow"><b aria-hidden="true"></b> Kalkulator techniczny • aktualizacja 2026</span>
          <div class="rk-pipe-hero-title" role="heading" aria-level="2">Kalkulator długości rury do ogrzewania podłogowego</div>
          <p class="rk-pipe-hero-lead">Oblicz orientacyjną ilość rury na powierzchni, długość podejść do rozdzielacza, liczbę pętli i zapas zakupowy. Wynik pokazuje materiał — nie zastępuje obliczeń cieplnych ani hydraulicznych.</p>
          <div class="rk-pipe-meta">
            <span><i aria-hidden="true"></i> Autor: Robert Kucharski</span>
            <span><i aria-hidden="true"></i> Aktualizacja: 26 sierpnia 2026 r.</span>
            <span><i aria-hidden="true"></i> Czas czytania: ok. 15 minut</span>
          </div>
        </div>
        <aside class="rk-pipe-hero-formula" aria-label="Podstawowa zasada obliczenia">
          <small>Najważniejsza zasada</small>
          <code>L<sub>pow.</sub> ≈ A<sub>czynna</sub> ÷ s</code>
          <p>Rozstaw <strong style="color:#fff">s</strong> należy podać w metrach. Podejścia od rozdzielacza do pól grzewczych dolicza się osobno — nie przez mnożenie całego wyniku razy dwa.</p>
        </aside>
      </div>
    </header>

    <nav class="rk-pipe-nav" aria-label="Spis treści artykułu">
      <a href="#rk-pipe-answer">Szybka odpowiedź</a>
      <a href="#rk-pipe-tool">Kalkulator</a>
      <a href="#rk-pipe-formulas">Wzory</a>
      <a href="#rk-pipe-spacing">Rozstaw rur</a>
      <a href="#rk-pipe-loops">Pętle i podejścia</a>
      <a href="#rk-pipe-examples">Przykłady</a>
      <a href="#rk-pipe-errors">Błędy</a>
      <a href="#rk-pipe-faq">FAQ</a>
      <a href="#rk-pipe-author">Autor</a>
    </nav>

    <div class="rk-pipe-body">
      <section class="rk-pipe-section" id="rk-pipe-answer">
        <span class="rk-pipe-kicker">Odpowiedź bez zgadywania</span>
        <h2>Ile metrów rury potrzeba do ogrzewania podłogowego?</h2>
        <p class="rk-pipe-lead rk-pipe-dropcap"><strong>Kalkulator długości rury do ogrzewania podłogowego</strong> powinien rozdzielać trzy różne wartości: rurę układaną na czynnej powierzchni podłogi, odcinki zasilające i powrotne prowadzone do rozdzielacza oraz zapas potrzebny przy zamówieniu. Przy rozstawie 10 cm na 1 m² przypada geometrycznie około 10 m rury, przy 15 cm około 6,67 m, a przy 20 cm około 5 m. To jednak dopiero początek obliczenia.</p>

        <div class="rk-pipe-summary-grid">
          <article class="rk-pipe-summary-card"><b>01</b><h3>Powierzchnia czynna</h3><p>Od całej podłogi odejmuje się tylko strefy świadomie i trwale wyłączone z ogrzewania, a nie każdy ruchomy mebel.</p></article>
          <article class="rk-pipe-summary-card"><b>02</b><h3>Rozstaw projektowy</h3><p>Rozstaw 10, 15 lub 20 cm nie jest wyborem kalkulatora. Musi wynikać z obciążenia cieplnego, okładziny i temperatury wody.</p></article>
          <article class="rk-pipe-summary-card"><b>03</b><h3>Pętle i podejścia</h3><p>Każda pętla potrzebuje drogi do rozdzielacza i z powrotem. Im więcej obwodów, tym większa łączna długość podejść.</p></article>
        </div>
      </section>

      <section class="rk-pipe-section" aria-labelledby="rk-pipe-correction-title">
        <div class="rk-pipe-correction">
          <div class="rk-pipe-correction-copy">
            <span class="rk-pipe-kicker">Ważna korekta metodologii</span>
            <h2 id="rk-pipe-correction-title">Wzór nie może podwajać długości rury</h2>
            <p>W regularnym układzie równoległych przewodów długość na powierzchni wynika w przybliżeniu z podzielenia pola przez rozstaw. Zasilanie i powrót są już elementami tej samej pętli; nie stanowią powodu, aby cały wynik mnożyć przez dwa.</p>
            <p><strong>Przykład:</strong> 30 m² przy rozstawie 15 cm to około 200 m rury na powierzchni, a nie 400 m. Dopiero potem dodaje się indywidualnie policzone podejścia.</p>
          </div>
          <div class="rk-pipe-correction-math">
            <div class="rk-pipe-equation is-wrong"><small>Błędne uproszczenie</small><code>(A ÷ s) × 2</code></div>
            <div class="rk-pipe-equation"><small>Poprawny szacunek powierzchniowy</small><code>L<sub>pow.</sub> ≈ A<sub>czynna</sub> ÷ s</code></div>
            <div class="rk-pipe-equation"><small>Całość instalowana</small><code>L<sub>inst.</sub> ≈ L<sub>pow.</sub> + N × 2d</code></div>
          </div>
        </div>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-tool">
        <div class="rk-pipe-calculator">
          <div class="rk-pipe-calculator-head">
            <span class="rk-pipe-kicker" style="color:#76f2ff">Interaktywne narzędzie obliczeniowe</span>
            <h2>Kalkulator ilości rury do podłogówki i liczby pętli</h2>
            <p>Wprowadź założenia. Narzędzie najpierw obliczy rurę na powierzchni, następnie minimalną liczbę pętli, łączne podejścia i zapas materiałowy. Wszystkie etapy pozostają widoczne.</p>
          </div>

          <div class="rk-pipe-calculator-layout">
            <form class="rk-pipe-controls" id="rk-pipe-form" aria-label="Dane do kalkulatora" onsubmit="return false;">
              <div class="rk-pipe-control">
                <label for="rk-pipe-area">Całkowita powierzchnia podłogi [m²]</label>
                <input id="rk-pipe-area" type="number" min="1" max="1000" step="1" value="100" inputmode="decimal">
                <small>Powierzchnia analizowanej kondygnacji lub zespołu pomieszczeń.</small>
              </div>
              <div class="rk-pipe-control">
                <label for="rk-pipe-excluded">Powierzchnia trwale wyłączona [m²]</label>
                <input id="rk-pipe-excluded" type="number" min="0" max="999" step="0.5" value="10" inputmode="decimal">
                <small>Na przykład stała zabudowa, schody, brodzik lub inne strefy określone w projekcie.</small>
              </div>
              <div class="rk-pipe-control">
                <label for="rk-pipe-spacing-input">Założony rozstaw rur [cm]</label>
                <select id="rk-pipe-spacing-input">
                  <option value="10">10 cm</option>
                  <option value="12.5">12,5 cm</option>
                  <option value="15" selected="">15 cm</option>
                  <option value="20">20 cm</option>
                  <option value="25">25 cm</option>
                </select>
                <small>Rozstaw powinien wynikać z projektu cieplnego; kalkulator go nie dobiera.</small>
              </div>
              <div class="rk-pipe-control">
                <label for="rk-pipe-distance">Średnia odległość pola od rozdzielacza w jedną stronę [m]</label>
                <input id="rk-pipe-distance" type="number" min="0" max="30" step="0.5" value="4" inputmode="decimal">
                <small>Jedna pętla wymaga drogi tam i z powrotem, dlatego w podejściach występuje mnożnik 2.</small>
              </div>
              <div class="rk-pipe-control">
                <label for="rk-pipe-zones">Minimalna liczba pomieszczeń lub niezależnych stref</label>
                <input id="rk-pipe-zones" type="number" min="1" max="100" step="1" value="8" inputmode="numeric">
                <small>Kalkulator nie połączy różnych stref w mniejszą liczbę obwodów niż podana.</small>
              </div>
              <div class="rk-pipe-control">
                <label for="rk-pipe-loop-max">Założony limit całkowitej długości jednej pętli</label>
                <select id="rk-pipe-loop-max">
                  <option value="80">80 m</option>
                  <option value="90" selected="">90 m</option>
                  <option value="100">100 m</option>
                </select>
                <small>To ograniczenie szacunkowe. Ostateczny limit wynika z przepływu, średnicy i dopuszczalnej straty ciśnienia.</small>
              </div>
              <div class="rk-pipe-control">
                <label for="rk-pipe-reserve">Zapas materiałowy do zakupu [%]</label>
                <input id="rk-pipe-reserve" type="number" min="0" max="10" step="1" value="5" inputmode="numeric">
                <small>Zapas zakupowy nie jest dodawany do projektowej długości hydraulicznej pętli.</small>
              </div>
            </form>

            <div class="rk-pipe-results" aria-live="polite">
              <div class="rk-pipe-result-primary">
                <div class="rk-pipe-result-card is-main"><small>Orientacyjnie do zamówienia</small><div class="rk-pipe-result-number" id="rk-pipe-order-result">0 m</div></div>
                <div class="rk-pipe-result-card"><small>Łącznie w instalacji</small><div class="rk-pipe-result-number" id="rk-pipe-installed-result">0 m</div></div>
              </div>
              <div class="rk-pipe-result-secondary">
                <div class="rk-pipe-result-card"><small>Powierzchnia czynna</small><div class="rk-pipe-result-number" id="rk-pipe-active-result">0 m²</div></div>
                <div class="rk-pipe-result-card"><small>Rura na powierzchni</small><div class="rk-pipe-result-number" id="rk-pipe-surface-result">0 m</div></div>
                <div class="rk-pipe-result-card"><small>Łączne podejścia</small><div class="rk-pipe-result-number" id="rk-pipe-approach-result">0 m</div></div>
                <div class="rk-pipe-result-card"><small>Szacowana liczba pętli</small><div class="rk-pipe-result-number" id="rk-pipe-loops-result">0</div></div>
                <div class="rk-pipe-result-card"><small>Średnia długość pętli</small><div class="rk-pipe-result-number" id="rk-pipe-average-result">0 m</div></div>
                <div class="rk-pipe-result-card"><small>Średnio na jedną pętlę</small><div class="rk-pipe-result-number" id="rk-pipe-area-loop-result">0 m²</div></div>
              </div>
              <div class="rk-pipe-result-note" id="rk-pipe-result-note">Uzupełnij dane, aby otrzymać wynik.</div>

              <div class="rk-pipe-chart" aria-label="Porównanie ilości rury dla różnych rozstawów">
                <h3>Jak rozstaw zmienia ilość rury?</h3>
                <p class="rk-pipe-chart-intro">Porównanie pokazuje orientacyjną długość do zamówienia dla tej samej powierzchni i pozostałych założeń.</p>
                <div class="rk-pipe-bar-row" id="rk-pipe-row-10"><span class="rk-pipe-bar-label">10 cm</span><span class="rk-pipe-bar-track"><span class="rk-pipe-bar" id="rk-pipe-bar-10"></span></span><span class="rk-pipe-bar-value" id="rk-pipe-bar-value-10">0 m</span></div>
                <div class="rk-pipe-bar-row" id="rk-pipe-row-12-5"><span class="rk-pipe-bar-label">12,5 cm</span><span class="rk-pipe-bar-track"><span class="rk-pipe-bar" id="rk-pipe-bar-12-5"></span></span><span class="rk-pipe-bar-value" id="rk-pipe-bar-value-12-5">0 m</span></div>
                <div class="rk-pipe-bar-row" id="rk-pipe-row-15"><span class="rk-pipe-bar-label">15 cm</span><span class="rk-pipe-bar-track"><span class="rk-pipe-bar" id="rk-pipe-bar-15"></span></span><span class="rk-pipe-bar-value" id="rk-pipe-bar-value-15">0 m</span></div>
                <div class="rk-pipe-bar-row" id="rk-pipe-row-20"><span class="rk-pipe-bar-label">20 cm</span><span class="rk-pipe-bar-track"><span class="rk-pipe-bar" id="rk-pipe-bar-20"></span></span><span class="rk-pipe-bar-value" id="rk-pipe-bar-value-20">0 m</span></div>
                <div class="rk-pipe-bar-row" id="rk-pipe-row-25"><span class="rk-pipe-bar-label">25 cm</span><span class="rk-pipe-bar-track"><span class="rk-pipe-bar" id="rk-pipe-bar-25"></span></span><span class="rk-pipe-bar-value" id="rk-pipe-bar-value-25">0 m</span></div>
              </div>
            </div>
          </div>

          <div class="rk-pipe-inline-cta">
            <h3>Kalkulator ma charakter poglądowy</h3>
            <p>Nie dobiera rozstawu, nie rozrysowuje rzeczywistych tras, nie oblicza strat ciśnienia, wymaganych przepływów ani nastaw rozdzielacza. Jeżeli chcesz znać dokładną długość rur, liczbę obwodów i parametry każdej pętli, należy wykonać projekt ogrzewania podłogowego.</p>
            <a class="rk-pipe-cta-button rk-pipe-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów dokładny projekt ogrzewania podłogowego</a>
            <small class="rk-pipe-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
          </div>
        </div>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-formulas">
        <span class="rk-pipe-kicker">Pełna przejrzystość obliczeń</span>
        <h2>Jak kalkulator oblicza długość rury do podłogówki?</h2>
        <p>Kolejność jest ważna. Najpierw powstaje czynna powierzchnia, następnie długość przewodu pokrywającego tę powierzchnię. Dopiero z założonego limitu obwodu i średniej odległości od rozdzielacza wynika orientacyjna liczba pętli oraz suma podejść. Rezerwa jest ostatnim, zakupowym etapem rachunku.</p>

        <div class="rk-pipe-formulas">
          <article class="rk-pipe-formula"><span>Krok 1 • powierzchnia</span><code>A<sub>czynna</sub> = A<sub>całkowita</sub> − A<sub>wyłączona</sub></code><p>Odejmowane strefy muszą być znane i trwale wyłączone z układania rur.</p></article>
          <article class="rk-pipe-formula"><span>Krok 2 • rura na podłodze</span><code>L<sub>pow.</sub> ≈ A<sub>czynna</sub> ÷ (s / 100)</code><p>Rozstaw wpisany w centymetrach jest dzielony przez 100, aby uzyskać metry.</p></article>
          <article class="rk-pipe-formula"><span>Krok 3 • liczba pętli</span><code>N ≥ L<sub>pow.</sub> ÷ (L<sub>max</sub> − 2d)</code><p>Wynik zaokrągla się w górę i porównuje z minimalną liczbą niezależnych stref.</p></article>
          <article class="rk-pipe-formula"><span>Krok 4 • podejścia</span><code>L<sub>podejść</sub> ≈ N × 2d</code><p>Każdy obwód biegnie od rozdzielacza do pola grzewczego i wraca do rozdzielacza.</p></article>
          <article class="rk-pipe-formula"><span>Krok 5 • instalacja</span><code>L<sub>inst.</sub> ≈ L<sub>pow.</sub> + L<sub>podejść</sub></code><p>To orientacyjna długość rzeczywiście znajdująca się w pętlach, jeszcze bez zapasu zakupowego.</p></article>
          <article class="rk-pipe-formula"><span>Krok 6 • zamówienie</span><code>L<sub>zakup</sub> ≈ L<sub>inst.</sub> × (1 + r / 100)</code><p>Rezerwę należy zestawić z długościami dostępnych kręgów i zakazem wykonywania połączeń w jastrychu.</p></article>
        </div>

        <div class="rk-pipe-warning">
          <p><strong>Co oznacza „≈”?</strong> Rzeczywisty rzut pętli zawiera łuki, omijanie dylatacji, wejścia do pomieszczeń, lokalne zagęszczenia i różne odległości od rozdzielacza. Wzór daje kontrolowany szacunek materiału, ale dokładne metry uzyskuje się dopiero z rozrysowanych tras.</p>
        </div>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-spacing">
        <span class="rk-pipe-kicker">Ile rury przypada na 1 m²?</span>
        <h2>Tabela długości rury dla rozstawu 10, 12,5, 15, 20 i 25 cm</h2>
        <p>Współczynnik metrów rury na 1 m² jest geometryczną odwrotnością rozstawu wyrażonego w metrach. Tabela dotyczy wyłącznie rury układanej na powierzchni. Nie zawiera podejść ani zapasu.</p>

        <div class="rk-pipe-table-wrap">
          <table>
            <thead><tr><th>Rozstaw rur</th><th>Rura na 1 m² powierzchni czynnej</th><th>Rura na 10 m²</th><th>Znaczenie wyniku</th></tr></thead>
            <tbody>
              <tr><td data-label="Rozstaw"><strong>10 cm</strong></td><td data-label="Na 1 m²">10,00 m/m²</td><td data-label="Na 10 m²">100 m</td><td data-label="Znaczenie">Duża gęstość ułożenia; musi wynikać z wymaganej mocy i parametrów podłogi.</td></tr>
              <tr><td data-label="Rozstaw"><strong>12,5 cm</strong></td><td data-label="Na 1 m²">8,00 m/m²</td><td data-label="Na 10 m²">80 m</td><td data-label="Znaczenie">Rozstaw pośredni, przydatny wtedy, gdy wynika z obliczeń i siatki montażowej.</td></tr>
              <tr><td data-label="Rozstaw"><strong>15 cm</strong></td><td data-label="Na 1 m²">6,67 m/m²</td><td data-label="Na 10 m²">66,7 m</td><td data-label="Znaczenie">Często spotykane założenie, ale nie uniwersalna wartość dla całego domu.</td></tr>
              <tr><td data-label="Rozstaw"><strong>20 cm</strong></td><td data-label="Na 1 m²">5,00 m/m²</td><td data-label="Na 10 m²">50 m</td><td data-label="Znaczenie">Mniej rury i potencjalnie mniejsza moc jednostkowa przy tych samych parametrach wody.</td></tr>
              <tr><td data-label="Rozstaw"><strong>25 cm</strong></td><td data-label="Na 1 m²">4,00 m/m²</td><td data-label="Na 10 m²">40 m</td><td data-label="Znaczenie">Wartość geometryczna; przy dużym rozstawie trzeba szczególnie sprawdzić równomierność temperatury.</td></tr>
            </tbody>
          </table>
        </div>

        <p class="rk-pipe-note"><strong>Nie wybieraj rozstawu na podstawie ceny rury.</strong> O tym, czy zastosować 10, 15 czy 20 cm, decydują obliczeniowe straty ciepła pomieszczenia, dopuszczalna temperatura powierzchni, konstrukcja i opór okładziny, temperatura zasilania oraz planowany przepływ. Szczegóły opisuje analiza <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawu rur w wodnym ogrzewaniu podłogowym</a>.</p>
      </section>

      <section class="rk-pipe-section" aria-labelledby="rk-pipe-active-title">
        <span class="rk-pipe-kicker">Powierzchnia wejściowa</span>
        <h2 id="rk-pipe-active-title">Jak obliczyć czynną powierzchnię ogrzewania podłogowego?</h2>
        <div class="rk-pipe-grid-2">
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">Wlicz</span><h3>Strefy dostępne dla podłogówki</h3><p>Uwzględnia się podłogę, na której zgodnie z planem można poprowadzić pętlę i bezpiecznie oddawać ciepło. Ruchomy stół, krzesła czy meble na nóżkach nie muszą automatycznie wyłączać powierzchni.</p></article>
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">Odejmij</span><h3>Trwale wyłączone pola</h3><p>Do odjęcia mogą kwalifikować się zabudowy stałe, szafki bez prześwitu, wanna lub brodzik, schody, kominek i strefy techniczne — jeśli tak przewiduje dokumentacja.</p></article>
        </div>
        <div class="rk-pipe-warning"><p>Nie należy mechanicznie odejmować całej powierzchni pod każdym meblem. Układ wnętrz może się zmienić, a zbyt duże ograniczenie czynnej podłogi zwiększa wymaganą moc z pozostałych metrów kwadratowych. Zasady planowania zabudowy opisuje artykuł <a href="https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/">wodne ogrzewanie podłogowe a meble</a>.</p></div>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-loops">
        <span class="rk-pipe-kicker">Długość to także hydraulika</span>
        <h2>Jak obliczyć liczbę pętli ogrzewania podłogowego?</h2>
        <p>Proste dzielenie łącznej ilości rury przez 100 m może być mylące. Do limitu jednej pętli wlicza się również odcinek od rozdzielacza do pola grzewczego oraz powrót. Jeżeli średnia odległość w jedną stronę wynosi 8 m, to każda pętla „zużywa” orientacyjnie 16 m limitu jeszcze przed rozpoczęciem układania właściwego pola.</p>

        <div class="rk-pipe-grid-3">
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">01</span><h3>Najpierw odejmij podejście</h3><p>Przy limicie 90 m i podejściu 4 m w jedną stronę na część powierzchniową pozostaje średnio około 82 m.</p></article>
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">02</span><h3>Uwzględnij strefy</h3><p>Nawet gdy matematycznie wystarczyłoby pięć obwodów, osiem niezależnych pomieszczeń może wymagać co najmniej ośmiu pętli.</p></article>
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">03</span><h3>Sprawdź opory</h3><p>Dwie pętle o tej samej długości nie muszą mieć identycznej straty ciśnienia, jeśli różnią się średnicą, przepływem lub liczbą łuków.</p></article>
        </div>

        <p class="rk-pipe-note"><strong>Limit 80, 90 lub 100 m nie jest prawem fizyki.</strong> To założenie robocze. Dopuszczalną długość trzeba powiązać z przepływem wymaganym przez moc pętli, średnicą wewnętrzną, właściwościami przewodu, stratą ciśnienia i dyspozycyjną wysokością podnoszenia pompy. Zobacz osobno: <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalna długość pętli ogrzewania podłogowego</a>, <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/">skutki zbyt długiej pętli</a> oraz <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">ile metrów podłogówki można ułożyć na jednej pętli</a>.</p>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-examples">
        <span class="rk-pipe-kicker">Przykłady porównawcze</span>
        <h2>Ile rury na 20, 50, 100, 150 i 200 m² podłogówki?</h2>
        <p>Poniższe wyniki przyjmują ten sam uproszczony scenariusz: cała wskazana powierzchnia jest czynna, rozstaw wynosi 15 cm, limit pętli 90 m, średnie podejście 4 m w jedną stronę, minimum jedna strefa i 5% zapasu. Liczby nie są projektem konkretnego budynku.</p>

        <div class="rk-pipe-table-wrap">
          <table>
            <thead><tr><th>Powierzchnia czynna</th><th>Rura na powierzchni</th><th>Szacowana liczba pętli</th><th>Podejścia łącznie</th><th>Orientacyjnie do zamówienia</th></tr></thead>
            <tbody>
              <tr><td data-label="Powierzchnia"><strong>20 m²</strong></td><td data-label="Na powierzchni">133,3 m</td><td data-label="Pętle">2</td><td data-label="Podejścia">16 m</td><td data-label="Do zamówienia"><strong>156,8 m</strong></td></tr>
              <tr><td data-label="Powierzchnia"><strong>50 m²</strong></td><td data-label="Na powierzchni">333,3 m</td><td data-label="Pętle">5</td><td data-label="Podejścia">40 m</td><td data-label="Do zamówienia"><strong>392,0 m</strong></td></tr>
              <tr><td data-label="Powierzchnia"><strong>100 m²</strong></td><td data-label="Na powierzchni">666,7 m</td><td data-label="Pętle">9</td><td data-label="Podejścia">72 m</td><td data-label="Do zamówienia"><strong>775,6 m</strong></td></tr>
              <tr><td data-label="Powierzchnia"><strong>150 m²</strong></td><td data-label="Na powierzchni">1000,0 m</td><td data-label="Pętle">13</td><td data-label="Podejścia">104 m</td><td data-label="Do zamówienia"><strong>1159,2 m</strong></td></tr>
              <tr><td data-label="Powierzchnia"><strong>200 m²</strong></td><td data-label="Na powierzchni">1333,3 m</td><td data-label="Pętle">17</td><td data-label="Podejścia">136 m</td><td data-label="Do zamówienia"><strong>1542,8 m</strong></td></tr>
            </tbody>
          </table>
        </div>

        <div class="rk-pipe-example-grid" aria-label="Skrócone przykłady ilości rury">
          <div class="rk-pipe-example"><strong>157 m</strong><b>dla 20 m²</b><small>2 pętle • 15 cm • zapas 5%</small></div>
          <div class="rk-pipe-example"><strong>392 m</strong><b>dla 50 m²</b><small>5 pętli • 15 cm • zapas 5%</small></div>
          <div class="rk-pipe-example"><strong>776 m</strong><b>dla 100 m²</b><small>9 pętli • 15 cm • zapas 5%</small></div>
          <div class="rk-pipe-example"><strong>1159 m</strong><b>dla 150 m²</b><small>13 pętli • 15 cm • zapas 5%</small></div>
          <div class="rk-pipe-example"><strong>1543 m</strong><b>dla 200 m²</b><small>17 pętli • 15 cm • zapas 5%</small></div>
        </div>

        <p class="rk-pipe-warning"><strong>Ile rury na 100 m² ogrzewania podłogowego?</strong> Nie istnieje jedna poprawna liczba bez podania rozstawu, powierzchni wyłączonej, liczby pętli i odległości od rozdzielacza. Sam odcinek powierzchniowy dla 100 m² wynosi około 1000 m przy 10 cm, 667 m przy 15 cm i 500 m przy 20 cm. Oddzielne omówienie znajdziesz w poradniku <a href="https://projekt-ogrzewania.pl/ile-rury-na-m%c2%b2-ogrzewania-podlogowego/">ile rury na m² ogrzewania podłogowego</a>.</p>
      </section>

      <section class="rk-pipe-section" aria-labelledby="rk-pipe-material-title">
        <span class="rk-pipe-kicker">Średnica i rodzaj przewodu</span>
        <h2 id="rk-pipe-material-title">Czy kalkulator działa dla rury 16×2, PEX i PE-RT?</h2>
        <p>Wzór powierzchniowy wynika z geometrii rozstawu, dlatego sam w sobie nie zależy od tego, czy przewód wykonano jako PEX czy PE-RT. Materiał i wymiar mają jednak duże znaczenie dla promienia gięcia, średnicy wewnętrznej, straty ciśnienia, wymaganej pracy pompy oraz dopuszczalnych parametrów eksploatacyjnych.</p>
        <div class="rk-pipe-grid-3">
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">16×2</span><h3>Popularny wymiar nie oznacza jednego limitu</h3><p>Dwie rury opisane jako 16×2 mogą różnić się właściwościami i wymaganiami systemowymi. Długość pętli trzeba sprawdzić hydraulicznie.</p></article>
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">PEX</span><h3>Materiał nie naprawia złego projektu</h3><p>Dobór <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">rury PEX do ogrzewania podłogowego</a> nie zastępuje obliczenia przepływów i oporów.</p></article>
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">PE-RT</span><h3>Sprawdź system i dokumentację</h3><p>Także <a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/">rura PE-RT do ogrzewania podłogowego</a> powinna być oceniana w ramach kompletnego systemu.</p></article>
        </div>
        <p class="rk-pipe-note">Przed zakupem warto porównać <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">średnice rur w ogrzewaniu podłogowym</a> i upewnić się, że rozdzielacz, złączki oraz sposób mocowania są zgodne z wybranym systemem.</p>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-errors">
        <span class="rk-pipe-kicker">Kontrola przed zamówieniem</span>
        <h2>Najczęstsze błędy przy obliczaniu ilości rury do podłogówki</h2>
        <ul class="rk-pipe-checklist">
          <li><strong>Mnożenie wyniku powierzchniowego przez dwa</strong> pod pretekstem zasilania i powrotu, mimo że pętla już zawiera oba kierunki.</li>
          <li><strong>Liczenie całej powierzchni zabudowy</strong> bez odjęcia stref faktycznie i trwale wyłączonych z ogrzewania.</li>
          <li><strong>Odejmowanie wszystkich mebli</strong>, także ruchomych lub ustawionych na nóżkach, bez analizy obciążenia czynnej podłogi.</li>
          <li><strong>Brak podejść do rozdzielacza</strong>, szczególnie kosztowny przy wielu pętlach i centralnie lub niekorzystnie położonej szafce.</li>
          <li><strong>Dobór rozstawu z tabeli materiałowej</strong> zamiast na podstawie strat ciepła, okładziny i parametrów wody.</li>
          <li><strong>Traktowanie 100 m jako uniwersalnego limitu</strong> niezależnego od średnicy, przepływu i oporu hydraulicznego.</li>
          <li><strong>Dodawanie zapasu do długości projektowej pętli</strong> zamiast użycia go wyłącznie przy organizacji zakupu.</li>
          <li><strong>Dzielenie instalacji na zbyt mało obwodów</strong> bez uwzględnienia pomieszczeń, sterowania i możliwości hydraulicznego zrównoważenia.</li>
          <li><strong>Kupowanie przypadkowych długości kręgów</strong>, które wymuszają odpady albo niedopuszczalne połączenia w warstwie podłogi.</li>
          <li><strong>Brak rysunku tras</strong>, przez co kalkulacja nie uwzględnia dylatacji, stref brzegowych, przeszkód i realnych łuków.</li>
        </ul>
        <div class="rk-pipe-success"><p><strong>Dobra praktyka:</strong> najpierw oblicz straty ciepła pomieszczeń i dobierz rozstaw, potem rozrysuj każdą <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">pętlę grzewczą</a>, policz jej rzeczywistą długość, przypisz wymagany przepływ, sprawdź opór i dopiero na tej podstawie przygotuj zestawienie materiałowe.</p></div>
      </section>

      <section class="rk-pipe-section" aria-labelledby="rk-pipe-interpret-title">
        <span class="rk-pipe-kicker">Jak czytać wynik?</span>
        <h2 id="rk-pipe-interpret-title">Kalkulator materiału nie jest projektem ogrzewania</h2>
        <div class="rk-pipe-grid-2">
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">Policzy</span><h3>Kontrolny rząd wielkości</h3><p>Narzędzie porządkuje powierzchnię, rozstaw, podejścia, orientacyjną liczbę pętli i zapas. Pozwala szybko wykryć wynik zawyżony dwa razy albo nieuwzględniający rozdzielacza.</p></article>
          <article class="rk-pipe-card"><span class="rk-pipe-card-number">Nie dobierze</span><h3>Mocy, przepływu i oporu</h3><p>Kalkulator nie zna strat ciepła poszczególnych pomieszczeń, konstrukcji podłogi, temperatury wody, oporu okładziny ani charakterystyki pompy.</p></article>
        </div>
        <p class="rk-pipe-note">Do wstępnego sprawdzania kilku zależności w jednym miejscu służy także <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">kompleksowy kalkulator ogrzewania podłogowego</a>. Bieżąca strona pozostaje wyspecjalizowana w jednym zadaniu: szacowaniu metrów rury oraz liczby pętli.</p>
      </section>

      <section class="rk-pipe-section" id="rk-pipe-faq">
        <span class="rk-pipe-kicker">Najczęściej zadawane pytania</span>
        <h2>FAQ: kalkulator długości rury do ogrzewania podłogowego</h2>
        <div class="rk-pipe-faq">
          <details><summary>Ile metrów rury potrzeba na 1 m² ogrzewania podłogowego?</summary><div class="rk-pipe-faq-answer"><p>Geometrycznie około 10 m przy rozstawie 10 cm, 8 m przy 12,5 cm, 6,67 m przy 15 cm, 5 m przy 20 cm i 4 m przy 25 cm. Są to wartości dla czynnej powierzchni, bez podejść do rozdzielacza i zapasu zakupowego.</p></div></details>
          <details><summary>Ile rury potrzeba na 100 m² podłogówki?</summary><div class="rk-pipe-faq-answer"><p>Na samej powierzchni około 1000 m przy rozstawie 10 cm, 667 m przy 15 cm lub 500 m przy 20 cm. Do tego trzeba dodać wszystkie podejścia, których długość zależy od liczby pętli i położenia rozdzielacza.</p></div></details>
          <details><summary>Czy długość rury oblicza się jako powierzchnia podzielona przez rozstaw razy dwa?</summary><div class="rk-pipe-faq-answer"><p>Nie. Dla regularnego układu część powierzchniową szacuje się jako powierzchnię czynną podzieloną przez rozstaw wyrażony w metrach. Mnożenie całego wyniku przez dwa podwaja go bez podstawy. Oddzielnie dolicza się drogę każdej pętli do rozdzielacza i z powrotem.</p></div></details>
          <details><summary>Jak doliczyć rurę od rozdzielacza?</summary><div class="rk-pipe-faq-answer"><p>Orientacyjnie należy pomnożyć liczbę pętli przez dwa i przez średnią odległość pola grzewczego od rozdzielacza w jedną stronę. Dokładny projekt liczy każde podejście oddzielnie, ponieważ pomieszczenia leżą w różnych odległościach.</p></div></details>
          <details><summary>Ile pętli ogrzewania podłogowego wychodzi z kalkulatora?</summary><div class="rk-pipe-faq-answer"><p>Narzędzie dzieli długość powierzchniową przez część limitu pętli pozostałą po odjęciu podejścia, zaokrągla wynik w górę i porównuje go z minimalną liczbą stref. To szacunek; projekt może wymagać dodatkowego podziału ze względu na geometrię lub hydraulikę.</p></div></details>
          <details><summary>Czy jedna pętla może mieć 100 metrów?</summary><div class="rk-pipe-faq-answer"><p>Może, jeżeli średnica, wymagany przepływ, strata ciśnienia i możliwości pompy na to pozwalają. Nie jest to jednak bezwarunkowa reguła. W wielu układach przyjmuje się krótsze obwody, aby ułatwić zrównoważenie hydrauliczne.</p></div></details>
          <details><summary>Ile procent zapasu rury należy kupić?</summary><div class="rk-pipe-faq-answer"><p>Do wstępnego zamówienia często analizuje się 3–10%, ale właściwa rezerwa zależy od dokładności rysunku i długości dostępnych kręgów. Zapas nie może sztucznie zwiększać długości hydraulicznej projektowanej pętli i nie uzasadnia połączeń w jastrychu.</p></div></details>
          <details><summary>Czy kalkulator dobiera rozstaw rur?</summary><div class="rk-pipe-faq-answer"><p>Nie. Użytkownik podaje założony rozstaw. Jego prawidłowa wartość musi wynikać z obliczeń strat ciepła, mocy podłogi, temperatury zasilania, dopuszczalnej temperatury powierzchni oraz oporu cieplnego okładziny.</p></div></details>
        </div>

        <div class="rk-pipe-sources" style="margin-top:24px">
          <strong>Podstawa techniczna i zakres opracowania</strong>
          Ogólne zasady wyznaczania mocy wodnego ogrzewania płaszczyznowego opisują m.in. <a href="https://sklep.pkn.pl/pn-en-1264-2-2021-10e.html" target="_blank" rel="noopener nofollow">PN-EN 1264-2:2021-10 — Polski Komitet Normalizacyjny</a> oraz <a href="https://www.iso.org/standard/74683.html" target="_blank" rel="noopener nofollow">ISO 11855-2:2021 — International Organization for Standardization</a>. Kalkulator jest autorskim modelem geometryczno-materiałowym. Nie odtwarza pełnej procedury normowej i nie zastępuje obliczeń cieplnych ani hydraulicznych.
        </div>
      </section>

      <section class="rk-pipe-author" id="rk-pipe-author" aria-labelledby="rk-pipe-author-title">
        <input type="radio" name="rk-pipe-author-tabs" id="rk-pipe-author-about" checked="">
        <input type="radio" name="rk-pipe-author-tabs" id="rk-pipe-author-exp">
        <input type="radio" name="rk-pipe-author-tabs" id="rk-pipe-author-sites">

        <div class="rk-pipe-author-head">
          <div><h2 id="rk-pipe-author-title">Autor opracowania</h2><p>Praktyka projektowa, wiedza techniczna i przejrzyste założenia obliczeniowe.</p></div>
          <div class="rk-pipe-author-mark">E-E-A-T • HVAC</div>
        </div>

        <div class="rk-pipe-author-layout">
          <div class="rk-pipe-author-side">
            <div class="rk-pipe-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski – projektant instalacji sanitarnych i specjalista systemów HVAC" width="500" height="500" loading="lazy" decoding="async"></div>
            <div class="rk-pipe-author-name">Robert Kucharski</div>
            <div class="rk-pipe-author-role">CEO<br>Specjalista systemów HVAC i ogrzewania podłogowego</div>
          </div>

          <div class="rk-pipe-author-main">
            <blockquote class="rk-pipe-author-quote"><p>„Rura na powierzchni to dopiero połowa rachunku. Liczbę pętli, długość podejść, przepływy i opory trzeba policzyć razem — inaczej nawet poprawna liczba metrów może dać zły układ.”</p></blockquote>

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

            <div class="rk-pipe-author-panel rk-pipe-author-panel-about">
              <p>Specjalizuję się w projektowaniu wodnego ogrzewania podłogowego, obliczeniach obciążenia cieplnego i hydrauliki instalacji. W opracowaniach łączę parametry budynku, konstrukcję podłogi, długości pętli, przepływy i wymagania źródła ciepła w jeden możliwy do wykonania system.</p>
            </div>
            <div class="rk-pipe-author-panel rk-pipe-author-panel-exp">
              <p>Przygotowuję dokumentacje techniczne dla nowych i modernizowanych budynków. Analizuję rozstaw i przebieg rur, rzeczywistą długość każdego obwodu, wymagane przepływy, opory instalacji, rozdzielacze oraz nastawy. W publikacjach wyraźnie oddzielam szybki szacunek materiałowy od parametrów wymagających pełnych obliczeń.</p>
            </div>
            <div class="rk-pipe-author-panel rk-pipe-author-panel-sites">
              <p>Jestem właścicielem trzech serwisów branżowych. Informację podaję transparentnie, aby czytelnik znał autorstwo publikacji i kontekst linkowania.</p>
              <div class="rk-pipe-site-links">
                <a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a>
                <a href="https://remont.biz.pl/" target="_blank" rel="noopener nofollow">Remont.biz.pl</a>
                <a href="https://sobir.pl/" target="_blank" rel="noopener nofollow">Sobir.pl</a>
              </div>
            </div>
          </div>
        </div>
      </section>

      <section class="rk-pipe-final-cta" aria-labelledby="rk-pipe-final-cta-title">
        <div class="rk-pipe-final-cta-content">
          <span class="rk-pipe-kicker" style="color:#72efff">Dokładność zaczyna się od rysunku każdej pętli</span>
          <h2 id="rk-pipe-final-cta-title">Nie zamawiaj kilkuset metrów rury na podstawie jednego uśrednionego wyniku</h2>
          <p>Projekt określa rozstaw w każdym pomieszczeniu, długość i przebieg każdej pętli, podejścia, wymagane przepływy, opory hydrauliczne oraz nastawy rozdzielacza. Dzięki temu zestawienie materiałowe wynika z rzeczywistego układu, a nie z samej powierzchni domu.</p>
          <a class="rk-pipe-cta-button rk-pipe-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt instalacji ogrzewania podłogowego</a>
          <small class="rk-pipe-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
        </div>
      </section>
    </div>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#article",
      "url": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/",
      "headline": "Kalkulator długości rury do ogrzewania podłogowego – ile metrów rury i ile pętli?",
      "alternativeHeadline": "Kalkulator ilości rury do podłogówki z obliczeniem podejść i liczby pętli",
      "description": "Kalkulator długości rury do ogrzewania podłogowego oblicza metry, podejścia i liczbę pętli dla rozstawów 10–25 cm. Sprawdź wynik i uniknij błędów przed zakupem.",
      "inLanguage": "pl-PL",
      "datePublished": "2025-05-11T08:00:00+02:00",
      "dateModified": "2026-08-26T12:00:00+02:00",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#webpage"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "about": [
        {
          "@type": "Thing",
          "name": "Ogrzewanie podłogowe"
        },
        {
          "@type": "Thing",
          "name": "Długość rury ogrzewania podłogowego"
        },
        {
          "@type": "Thing",
          "name": "Pętla grzewcza"
        },
        {
          "@type": "Thing",
          "name": "Rozstaw rur"
        }
      ],
      "mentions": [
        {
          "@type": "Thing",
          "name": "Rura PEX"
        },
        {
          "@type": "Thing",
          "name": "Rura PE-RT"
        },
        {
          "@type": "Thing",
          "name": "Rozdzielacz ogrzewania podłogowego"
        },
        {
          "@type": "Thing",
          "name": "Strata ciśnienia"
        }
      ],
      "keywords": [
        "kalkulator długości rury do ogrzewania podłogowego",
        "kalkulator ilości rury do podłogówki",
        "ile metrów rury do ogrzewania podłogowego",
        "ile rury na 100 m² podłogówki",
        "ile rury przy rozstawie 10 cm",
        "ile rury przy rozstawie 15 cm",
        "ile rury przy rozstawie 20 cm",
        "jak obliczyć liczbę pętli podłogówki",
        "podejścia do rozdzielacza",
        "maksymalna długość pętli 16×2"
      ],
      "citation": [
        "https://sklep.pkn.pl/pn-en-1264-2-2021-10e.html",
        "https://www.iso.org/standard/74683.html"
      ],
      "mainEntity": [
        {
          "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#calculator"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#howto"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#faq"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#webpage",
      "url": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/",
      "name": "Kalkulator długości rury do ogrzewania podłogowego – ile metrów rury i ile pętli?",
      "description": "Kalkulator długości rury do ogrzewania podłogowego oblicza metry, podejścia i liczbę pętli dla rozstawów 10–25 cm. Sprawdź wynik i uniknij błędów przed zakupem.",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#breadcrumb"
      },
      "potentialAction": {
        "@type": "ReadAction",
        "target": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/"
      }
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#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": "Kalkulator długości rury do ogrzewania podłogowego",
          "item": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/"
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#calculator",
      "name": "Kalkulator długości rury do ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#rk-pipe-tool",
      "description": "Bezpłatny kalkulator szacujący długość rury na powierzchni, podejścia do rozdzielacza, liczbę pętli i zapas materiałowy.",
      "applicationCategory": "UtilitiesApplication",
      "applicationSubCategory": "Kalkulator instalacyjny",
      "operatingSystem": "Any",
      "browserRequirements": "Włączona obsługa JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN",
        "availability": "https://schema.org/InStock"
      },
      "featureList": [
        "Obliczenie czynnej powierzchni ogrzewania",
        "Obliczenie długości rury na powierzchni",
        "Szacowanie liczby pętli",
        "Obliczenie podejść do rozdzielacza",
        "Obliczenie zapasu zakupowego",
        "Porównanie rozstawów 10–25 cm"
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#howto",
      "name": "Jak obliczyć orientacyjną długość rury do ogrzewania podłogowego",
      "description": "Sześć etapów szacowania rury na powierzchni, liczby pętli, podejść do rozdzielacza i zapasu zakupowego.",
      "inLanguage": "pl-PL",
      "totalTime": "PT10M",
      "supply": [
        {
          "@type": "HowToSupply",
          "name": "Rzut pomieszczeń z wymiarami"
        },
        {
          "@type": "HowToSupply",
          "name": "Informacja o położeniu rozdzielacza"
        }
      ],
      "tool": [
        {
          "@type": "HowToTool",
          "name": "Kalkulator długości rury do ogrzewania podłogowego"
        }
      ],
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Wyznacz powierzchnię czynną",
          "text": "Odejmij od całej podłogi wyłącznie powierzchnie trwale wyłączone z ogrzewania."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Wprowadź rozstaw wynikający z projektu",
          "text": "Podaj rozstaw rur dobrany na podstawie obciążenia cieplnego, konstrukcji podłogi i parametrów wody."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Oblicz rurę na powierzchni",
          "text": "Podziel powierzchnię czynną przez rozstaw wyrażony w metrach."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Oszacuj liczbę pętli",
          "text": "Uwzględnij założony limit pętli, długość podejścia i minimalną liczbę niezależnych stref."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Dodaj podejścia do rozdzielacza",
          "text": "Pomnóż liczbę pętli przez podwójną średnią odległość od rozdzielacza."
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Dodaj zapas zakupowy",
          "text": "Dodaj rezerwę materiałową dopiero po obliczeniu orientacyjnej długości instalowanej."
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Ile metrów rury potrzeba na 1 m² ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Geometrycznie około 10 m przy rozstawie 10 cm, 8 m przy 12,5 cm, 6,67 m przy 15 cm, 5 m przy 20 cm i 4 m przy 25 cm. Są to wartości dla czynnej powierzchni, bez podejść do rozdzielacza i zapasu zakupowego."
          }
        },
        {
          "@type": "Question",
          "name": "Ile rury potrzeba na 100 m² podłogówki?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Na samej powierzchni około 1000 m przy rozstawie 10 cm, 667 m przy 15 cm lub 500 m przy 20 cm. Do tego trzeba dodać wszystkie podejścia, których długość zależy od liczby pętli i położenia rozdzielacza."
          }
        },
        {
          "@type": "Question",
          "name": "Czy długość rury oblicza się jako powierzchnia podzielona przez rozstaw razy dwa?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Dla regularnego układu część powierzchniową szacuje się jako powierzchnię czynną podzieloną przez rozstaw wyrażony w metrach. Mnożenie całego wyniku przez dwa podwaja go bez podstawy. Oddzielnie dolicza się drogę każdej pętli do rozdzielacza i z powrotem."
          }
        },
        {
          "@type": "Question",
          "name": "Jak doliczyć rurę od rozdzielacza?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Orientacyjnie należy pomnożyć liczbę pętli przez dwa i przez średnią odległość pola grzewczego od rozdzielacza w jedną stronę. Dokładny projekt liczy każde podejście oddzielnie, ponieważ pomieszczenia leżą w różnych odległościach."
          }
        },
        {
          "@type": "Question",
          "name": "Ile pętli ogrzewania podłogowego wychodzi z kalkulatora?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Narzędzie dzieli długość powierzchniową przez część limitu pętli pozostałą po odjęciu podejścia, zaokrągla wynik w górę i porównuje go z minimalną liczbą stref. To szacunek; projekt może wymagać dodatkowego podziału ze względu na geometrię lub hydraulikę."
          }
        },
        {
          "@type": "Question",
          "name": "Czy jedna pętla może mieć 100 metrów?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Może, jeżeli średnica, wymagany przepływ, strata ciśnienia i możliwości pompy na to pozwalają. Nie jest to jednak bezwarunkowa reguła. W wielu układach przyjmuje się krótsze obwody, aby ułatwić zrównoważenie hydrauliczne."
          }
        },
        {
          "@type": "Question",
          "name": "Ile procent zapasu rury należy kupić?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Do wstępnego zamówienia często analizuje się 3–10%, ale właściwa rezerwa zależy od dokładności rysunku i długości dostępnych kręgów. Zapas nie może sztucznie zwiększać długości hydraulicznej projektowanej pętli i nie uzasadnia połączeń w jastrychu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy kalkulator dobiera rozstaw rur?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Użytkownik podaje założony rozstaw. Jego prawidłowa wartość musi wynikać z obliczeń strat ciepła, mocy podłogi, temperatury zasilania, dopuszczalnej temperatury powierzchni oraz oporu cieplnego okładziny."
          }
        }
      ]
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
        "width": 500,
        "height": 500
      },
      "jobTitle": "Projektant instalacji sanitarnych i specjalista systemów HVAC",
      "description": "Projektant instalacji sanitarnych specjalizujący się w wodnym ogrzewaniu podłogowym, obciążeniach cieplnych i hydraulice instalacji. Właściciel serwisów Projekt-Ogrzewania.pl, Remont.biz.pl i Sobir.pl.",
      "knowsAbout": [
        "Projektowanie ogrzewania podłogowego",
        "Hydraulika instalacji grzewczych",
        "Obliczenia obciążenia cieplnego",
        "Rozstaw i długość pętli grzewczych",
        "Rozdzielacze ogrzewania podłogowego",
        "Systemy HVAC"
      ],
      "sameAs": [
        "https://projekt-ogrzewania.pl/",
        "https://remont.biz.pl/",
        "https://sobir.pl/",
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy"
      ],
      "owns": [
        {
          "@id": "https://projekt-ogrzewania.pl/#organization"
        },
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg"
      },
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "foundingDate": "2024",
      "knowsAbout": [
        "Ogrzewanie podłogowe",
        "Projektowanie instalacji grzewczych",
        "Hydraulika instalacji"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@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"
      }
    }
  ]
}
</script>

<script>
  (function (window, document) {
    "use strict";

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

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

    function numberFrom(element, fallback) {
      var parsed = parseFloat(element ? element.value : "");
      return Number.isFinite(parsed) ? parsed : fallback;
    }

    function formatPolish(value, decimals) {
      return Number(value).toLocaleString("pl-PL", {
        minimumFractionDigits: decimals,
        maximumFractionDigits: decimals
      });
    }

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

    function initializePipeCalculator() {
      var root = byId("rk-pipe-calc");
      var areaInput;
      var excludedInput;
      var spacingInput;
      var distanceInput;
      var zonesInput;
      var loopMaxInput;
      var reserveInput;
      var progress;
      var navLinks;
      var i;

      if (!root) return false;
      if (root.getAttribute("data-rk-pipe-ready") === "1") return true;
      root.setAttribute("data-rk-pipe-ready", "1");

      areaInput = byId("rk-pipe-area");
      excludedInput = byId("rk-pipe-excluded");
      spacingInput = byId("rk-pipe-spacing-input");
      distanceInput = byId("rk-pipe-distance");
      zonesInput = byId("rk-pipe-zones");
      loopMaxInput = byId("rk-pipe-loop-max");
      reserveInput = byId("rk-pipe-reserve");

      function calculateForSpacing(activeArea, spacingCm, distance, minimumZones, loopMaximum, reserve) {
        var spacingMetres = spacingCm / 100;
        var surfaceLength = activeArea / spacingMetres;
        var usableSurfaceLength = loopMaximum - (2 * distance);
        var hydraulicLoops;
        var loops;
        var approaches;
        var installed;
        var order;

        if (usableSurfaceLength > 0) {
          hydraulicLoops = Math.ceil(surfaceLength / usableSurfaceLength);
        } else {
          hydraulicLoops = Math.ceil(surfaceLength);
        }

        loops = Math.max(minimumZones, hydraulicLoops, 1);
        approaches = loops * 2 * distance;
        installed = surfaceLength + approaches;
        order = installed * (1 + reserve / 100);

        return {
          surface: surfaceLength,
          usable: usableSurfaceLength,
          loops: loops,
          approaches: approaches,
          installed: installed,
          order: order,
          averageLoop: installed / loops,
          areaPerLoop: activeArea / loops
        };
      }

      function updateComparison(activeArea, distance, minimumZones, loopMaximum, reserve, selectedSpacing) {
        var spacings = [10, 12.5, 15, 20, 25];
        var values = [];
        var maximum = 1;
        var index;
        var result;
        var key;
        var bar;
        var row;
        var width;

        for (index = 0; index < spacings.length; index += 1) {
          result = calculateForSpacing(activeArea, spacings[index], distance, minimumZones, loopMaximum, reserve);
          values.push(result.order);
          if (result.order > maximum) maximum = result.order;
        }

        for (index = 0; index < spacings.length; index += 1) {
          key = String(spacings[index]).replace(".", "-");
          bar = byId("rk-pipe-bar-" + key);
          row = byId("rk-pipe-row-" + key);
          width = (values[index] / maximum) * 100;
          if (bar) bar.style.width = width.toFixed(1) + "%";
          setText("rk-pipe-bar-value-" + key, formatPolish(Math.ceil(values[index]), 0) + " m");
          if (row) {
            row.classList.remove("is-selected");
            if (Math.abs(spacings[index] - selectedSpacing) < 0.01) row.classList.add("is-selected");
          }
        }
      }

      function updateCalculator() {
        var area = clamp(numberFrom(areaInput, 100), 1, 1000);
        var maximumExcluded = Math.max(area - 0.1, 0);
        var excluded = clamp(numberFrom(excludedInput, 10), 0, maximumExcluded);
        var spacing = clamp(numberFrom(spacingInput, 15), 5, 50);
        var distance = clamp(numberFrom(distanceInput, 4), 0, 30);
        var minimumZones = Math.round(clamp(numberFrom(zonesInput, 8), 1, 100));
        var loopMaximum = clamp(numberFrom(loopMaxInput, 90), 40, 150);
        var reserve = clamp(numberFrom(reserveInput, 5), 0, 10);
        var activeArea = area - excluded;
        var result = calculateForSpacing(activeArea, spacing, distance, minimumZones, loopMaximum, reserve);
        var resultNote = byId("rk-pipe-result-note");
        var note;

        if (areaInput) areaInput.value = String(area);
        if (excludedInput) excludedInput.value = String(excluded);
        if (distanceInput) distanceInput.value = String(distance);
        if (zonesInput) zonesInput.value = String(minimumZones);
        if (reserveInput) reserveInput.value = String(reserve);

        setText("rk-pipe-order-result", formatPolish(Math.ceil(result.order), 0) + " m");
        setText("rk-pipe-installed-result", formatPolish(result.installed, 1) + " m");
        setText("rk-pipe-active-result", formatPolish(activeArea, 1) + " m²");
        setText("rk-pipe-surface-result", formatPolish(result.surface, 1) + " m");
        setText("rk-pipe-approach-result", formatPolish(result.approaches, 1) + " m");
        setText("rk-pipe-loops-result", String(result.loops));
        setText("rk-pipe-average-result", formatPolish(result.averageLoop, 1) + " m");
        setText("rk-pipe-area-loop-result", formatPolish(result.areaPerLoop, 1) + " m²");

        if (resultNote) resultNote.className = "rk-pipe-result-note";

        if (result.usable <= 10) {
          note = "Założona droga do rozdzielacza zużywa prawie cały limit pętli. Zmień lokalizację rozdzielacza albo wykonaj indywidualny podział i obliczenia hydrauliczne.";
          if (resultNote) resultNote.classList.add("is-warning");
        } else if (excluded > area * 0.45) {
          note = "Wyłączono ponad 45% powierzchni. Sprawdź, czy pozostała czynna podłoga może pokryć obciążenie cieplne pomieszczeń i czy nie odjęto ruchomych mebli.";
          if (resultNote) resultNote.classList.add("is-warning");
        } else if (result.averageLoop > loopMaximum) {
          note = "Średnia długość przekracza założony limit. Wynik wymaga dodatkowego podziału pętli oraz sprawdzenia rzeczywistych tras.";
          if (resultNote) resultNote.classList.add("is-warning");
        } else {
          note = "Przy rozstawie " + formatPolish(spacing, spacing % 1 === 0 ? 0 : 1) + " cm na powierzchnię przypada około " + formatPolish(100 / spacing, 2) + " m rury na 1 m². Podejścia stanowią w tym wariancie " + formatPolish(result.approaches, 1) + " m. Wynik zakupowy zaokrąglono w górę do pełnego metra.";
        }

        if (resultNote) resultNote.textContent = note;
        updateComparison(activeArea, distance, minimumZones, loopMaximum, reserve, spacing);
      }

      if (areaInput) areaInput.addEventListener("input", updateCalculator, false);
      if (excludedInput) excludedInput.addEventListener("input", updateCalculator, false);
      if (spacingInput) spacingInput.addEventListener("change", updateCalculator, false);
      if (distanceInput) distanceInput.addEventListener("input", updateCalculator, false);
      if (zonesInput) zonesInput.addEventListener("input", updateCalculator, false);
      if (loopMaxInput) loopMaxInput.addEventListener("change", updateCalculator, false);
      if (reserveInput) reserveInput.addEventListener("input", updateCalculator, false);
      updateCalculator();

      navLinks = root.querySelectorAll('a[href^="#"]');
      for (i = 0; i < navLinks.length; i += 1) {
        navLinks[i].addEventListener("click", function (event) {
          var href = this.getAttribute("href");
          var target = href ? root.querySelector(href) : null;
          var reducedMotion;
          if (!target) return;
          event.preventDefault();
          reducedMotion = typeof window.matchMedia === "function" ? window.matchMedia("(prefers-reduced-motion: reduce)").matches : false;
          target.scrollIntoView({
            behavior: reducedMotion ? "auto" : "smooth",
            block: "start"
          });
        }, false);
      }

      progress = root.querySelector(".rk-pipe-progress");
      function updateProgress() {
        var rect;
        var viewport;
        var total;
        var passed;
        var percentage;
        if (!progress) return;
        rect = root.getBoundingClientRect();
        viewport = window.innerHeight || document.documentElement.clientHeight;
        total = Math.max(root.offsetHeight - viewport, 1);
        passed = Math.min(Math.max(-rect.top, 0), total);
        percentage = (passed / total) * 100;
        progress.style.width = percentage.toFixed(2) + "%";
      }

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

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

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

    if (window.MutationObserver ? !byId("rk-pipe-calc") : false) {
      var observer = new MutationObserver(function () {
        if (initializePipeCalculator()) observer.disconnect();
      });
      observer.observe(document.documentElement, { childList: true, subtree: true });
      window.setTimeout(function () { observer.disconnect(); }, 10000);
    }
  }(window, document));
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/">Kalkulator do obliczania ilości metrów rury potrzebnych do ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Podłogówka cena za m² robocizny.</title>
		<link>https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/</link>
					<comments>https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 04 Jan 2025 12:41:44 +0000</pubDate>
				<category><![CDATA[Budżet instalacji]]></category>
		<category><![CDATA[Cena robocizny 2025]]></category>
		<category><![CDATA[Czynniki kosztowe]]></category>
		<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Koszty ogrzewania podłogowego]]></category>
		<category><![CDATA[Materiały do podłogówki]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Optymalizacja kosztów]]></category>
		<category><![CDATA[Projekty ogrzewania]]></category>
		<category><![CDATA[Rozstaw rur podłogówki]]></category>
		<category><![CDATA[budżet na podłogówkę]]></category>
		<category><![CDATA[cena robocizny podłogówki]]></category>
		<category><![CDATA[efektywność cieplna]]></category>
		<category><![CDATA[instalacja ogrzewania podłogowego]]></category>
		<category><![CDATA[koszty instalacji]]></category>
		<category><![CDATA[materiały podłogówka]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[podłogówka cena]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[systemy grzewcze]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=1892</guid>

					<description><![CDATA[<p>Podłogówka cena za m² robocizny to jedno z najczęściej zadawanych pytań przez inwestorów. W tym artykule szczegółowo omawiamy koszty instalacji ogrzewania podłogowego, uwzględniając rozstaw rur, lokalizację inwestycji oraz rok 2025 jako punkt odniesienia cenowego. Dowiesz się, jakie czynniki wpływają na koszt, dlaczego warto inwestować w profesjonalny projekt i jak optymalizować wydatki, aby zapewnić komfort cieplny i efektywność energetyczną.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/">Podłogówka cena za m² robocizny.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #ez-toc-container .ez-toc-list,
  #ez-toc-container .ez-toc-list ul,
  #ez-toc-container .ez-toc-list ol{margin-top:0!important;margin-bottom:0!important}
  #ez-toc-container .ez-toc-list li{margin:0!important;padding:3px 0!important;line-height:1.4!important}
  #ez-toc-container .ez-toc-list ul,
  #ez-toc-container .ez-toc-list ol{padding-left:28px!important}

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

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

<article id="rk-labor-guide">
  <div class="rk-labor-shell">
    <div class="rk-labor-progress-track" aria-hidden="true"><div class="rk-labor-progress" id="rk-labor-progress"></div></div>
    <header class="rk-labor-hero">
      <div class="rk-labor-hero-grid">
        <div>
          <span class="rk-labor-eyebrow"><b></b> Koszt robocizny • zakres oferty • 2026</span>
          <div class="rk-labor-hero-title">Cena za m² nie wystarczy, żeby porównać wykonawców</div>
          <p class="rk-labor-hero-lead">Sprawdź orientacyjne poziomy cen, rozdziel powierzchnię całkowitą od czynnej i policz dwie oferty według tego samego zakresu: od izolacji po próbę szczelności, uruchomienie i automatykę.</p>
          <div class="rk-labor-meta"><span>Aktualizacja: 29.08.2026</span><span>Jedno narzędzie porównawcze</span><span>Ceny bez udawanej dokładności</span></div>
        </div>
        <aside class="rk-labor-hero-card" aria-label="Orientacyjne poziomy robocizny">
          <small>Szybki punkt odniesienia</small>
          <div class="rk-labor-hero-number">40–120+ zł/m²</div>
          <p>To szeroki przedział różnych zakresów, a nie jedna stawka dla każdej budowy. Najpierw sprawdź, co wykonawca liczy w cenie bazowej.</p>
          <div class="rk-labor-hero-values"><div><strong>40–60</strong>samo układanie rur</div><div><strong>60–90</strong>szerszy standard prac</div><div><strong>90–120+</strong>małe lub złożone zlecenia</div><div><strong>netto czy brutto?</strong>zawsze zapisz w ofercie</div></div>
        </aside>
      </div>
    </header>

    <nav class="rk-labor-nav" aria-label="Spis treści artykułu">
      <span class="rk-labor-nav-title">Spis treści — przejdź do sekcji</span>
      <div class="rk-labor-nav-links">
        <a href="#rk-labor-answer">Cena robocizny 2026</a>
        <a href="#rk-labor-scope">Zakres robocizny</a>
        <a href="#rk-labor-calculator">Kalkulator ofert</a>
        <a href="#rk-labor-area">Powierzchnia rozliczeniowa</a>
        <a href="#rk-labor-variants">Same rury czy pełny zakres</a>
        <a href="#rk-labor-components">Izolacja i rozdzielacz</a>
        <a href="#rk-labor-test">Próba a uruchomienie</a>
        <a href="#rk-labor-spacing">Rozstaw 10 i 15 cm</a>
        <a href="#rk-labor-complexity">Kondygnacje i remont</a>
        <a href="#rk-labor-examples">Koszt 100–150 m²</a>
        <a href="#rk-labor-compare">Porównanie ofert</a>
        <a href="#rk-labor-contract">Checklista umowy</a>
        <a href="#rk-labor-errors">Najczęstsze błędy</a>
        <a href="#rk-labor-faq">FAQ</a>
        <a href="#rk-labor-sources">Metodyka i źródła</a>
      </div>
    </nav>

    <main class="rk-labor-body">
      <section class="rk-labor-section" id="rk-labor-answer">
        <span class="rk-labor-kicker">Najważniejsza odpowiedź</span>
        <h2>Ile kosztuje robocizna podłogówki za m² w 2026 roku?</h2>
        <p class="rk-labor-lead">Nie istnieje jedna uczciwa cena za m² ogrzewania podłogowego bez opisu zakresu. Inaczej wycenia się samo mocowanie rur na gotowym podłożu, a inaczej przygotowanie izolacji, montaż rozdzielacza, podłączenie obwodów, próbę, napełnienie i uruchomienie.</p>
        <div class="rk-labor-answer">
          <div class="rk-labor-answer-main">
            <span class="rk-labor-kicker">Orientacyjnie, sierpień 2026</span>
            <strong class="rk-labor-big">60–90 zł/m²</strong>
            <p>może być sensownym punktem startowym dla szerszego standardu robocizny w typowym domu, ale dopiero po wpisaniu zakresu, podstawy rozliczenia, liczby kondygnacji i ceny netto lub brutto.</p>
          </div>
          <div class="rk-labor-answer-side">
            <span class="rk-labor-kicker">Najczęstszy błąd</span>
            <strong class="rk-labor-big">65 ≠ 65</strong>
            <p>Dwie identyczne stawki mogą dać różne rachunki, gdy jedna jest liczona od powierzchni całkowitej, druga od czynnej, a rozdzielacz i próba są dopłatami.</p>
          </div>
        </div>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Rodzaj wyceny</th><th>Orientacyjny poziom</th><th>Co może obejmować</th><th>Co koniecznie sprawdzić</th></tr></thead>
            <tbody>
              <tr><td data-label="Rodzaj wyceny" class="rk-labor-table-em">Samo układanie rur</td><td data-label="Orientacyjny poziom">około 40–60 zł/m²</td><td data-label="Co może obejmować">Mocowanie rur na przygotowanej warstwie systemowej.</td><td data-label="Co koniecznie sprawdzić">Dobiegi, podłączenia pętli, rozdzielacz i próba.</td></tr>
              <tr><td data-label="Rodzaj wyceny" class="rk-labor-table-em">Szerszy standard robocizny</td><td data-label="Orientacyjny poziom">około 60–90 zł/m²</td><td data-label="Co może obejmować">Część przygotowania, rury, podłączenia i kontrolę szczelności.</td><td data-label="Co koniecznie sprawdzić">Dokładną listę prac, powierzchnię rozliczeniową i uruchomienie.</td></tr>
              <tr><td data-label="Rodzaj wyceny" class="rk-labor-table-em">Małe lub złożone zlecenie</td><td data-label="Orientacyjny poziom">około 90–120+ zł/m²</td><td data-label="Co może obejmować">Więcej pracy jednostkowej, kilka kondygnacji, trudną logistykę lub nietypowy zakres.</td><td data-label="Co koniecznie sprawdzić">Czy stawka jest ryczałtem oraz jakie prace są osobno.</td></tr>
            </tbody>
          </table>
        </div>
        <div class="rk-labor-callout is-yellow"><p><strong>To widełki redakcyjne do pierwszego budżetu, nie cennik ani obietnica ceny.</strong> Lokalne oferty mogą znaleźć się poniżej lub powyżej tych wartości. Porównuj kwoty z tej samej daty, z tym samym zakresem, podatkiem i powierzchnią rozliczeniową.</p></div>
      </section>

      <section class="rk-labor-section" id="rk-labor-scope">
        <span class="rk-labor-kicker">Cena jest skrótem zakresu</span>
        <h2>Co naprawdę może obejmować robocizna ogrzewania podłogowego?</h2>
        <p class="rk-labor-lead">Hasło „kompletna podłogówka” nie ma jednej technicznej definicji. Najbezpieczniej rozbić ofertę na pozycje i przy każdej zaznaczyć: w cenie bazowej, dopłata albo nieustalone.</p>
        <div class="rk-labor-scope">
          <article>
            <h3>Przygotowanie podłoża i warstw pod rurą</h3>
            <p>W tej części mogą znaleźć się porządki, korekty podłoża, układanie izolacji, folii, taśmy brzegowej oraz przygotowanie przejść i dylatacji.</p>
            <h4>Kiedy rozliczać powierzchnię całkowitą?</h4>
            <p>Izolację i warstwy pod rurą zwykle wykonuje się na większej powierzchni niż samo aktywne pole grzewcze. Podstawa rozliczenia powinna być wpisana osobno.</p>
            <p>Przed wyceną sprawdź <a href="https://projekt-ogrzewania.pl/jakie-sa-najlepsze-sposoby-izolacji-pod-ogrzewanie-podlogowe/">sposób izolacji pod ogrzewanie podłogowe</a>, <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">ilość styropianu</a> oraz <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolację brzegową i dylatacje</a>.</p>
          </article>
          <article>
            <h3>Rury, rozdzielacz i czynności hydrauliczne</h3>
            <p>Druga grupa obejmuje trasowanie, mocowanie rur, dobiegi, montaż szafki i rozdzielacza, opis oraz podłączenie pętli, próbę szczelności, napełnienie, odpowietrzenie i ewentualne uruchomienie.</p>
            <h4>Kiedy rozliczać powierzchnię czynną?</h4>
            <p>Rury nie muszą znajdować się pod trwałą zabudową i innymi wyłączonymi polami. Dlatego ich montaż może być liczony od powierzchni rzeczywiście ogrzewanej, ale trzeba to nazwać wprost.</p>
            <p>Liczbę rur i obwodów weryfikują osobno <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/">kalkulator ilości rury</a> oraz analiza <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">długości pojedynczej pętli</a>.</p>
          </article>
        </div>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Pozycja</th><th>Typowa jednostka</th><th>Pytanie do wykonawcy</th></tr></thead>
            <tbody>
              <tr><td data-label="Pozycja">Przygotowanie podłoża, izolacja, folia</td><td data-label="Typowa jednostka">m² powierzchni całkowitej</td><td data-label="Pytanie do wykonawcy">Czy materiał i poprawki podłoża są osobno?</td></tr>
              <tr><td data-label="Pozycja">Trasowanie i mocowanie rur</td><td data-label="Typowa jednostka">m² powierzchni czynnej lub całkowitej</td><td data-label="Pytanie do wykonawcy">Który metraż jest podstawą faktury?</td></tr>
              <tr><td data-label="Pozycja">Szafka i rozdzielacz</td><td data-label="Typowa jednostka">sztuka</td><td data-label="Pytanie do wykonawcy">Czy obejmuje montaż, uzbrojenie i opis?</td></tr>
              <tr><td data-label="Pozycja">Podłączenie pętli</td><td data-label="Typowa jednostka">obwód</td><td data-label="Pytanie do wykonawcy">Czy podłączenia i oznaczenia są w stawce m²?</td></tr>
              <tr><td data-label="Pozycja">Próba szczelności</td><td data-label="Typowa jednostka">ryczałt lub instalacja</td><td data-label="Pytanie do wykonawcy">Jakie medium, ciśnienie, czas i protokół?</td></tr>
              <tr><td data-label="Pozycja">Płukanie, napełnienie, odpowietrzenie</td><td data-label="Typowa jednostka">ryczałt</td><td data-label="Pytanie do wykonawcy">Czy płyn i jego przygotowanie są w cenie?</td></tr>
              <tr><td data-label="Pozycja">Uruchomienie i równoważenie</td><td data-label="Typowa jednostka">ryczałt lub obwód</td><td data-label="Pytanie do wykonawcy">Czy obejmuje przepływy i nastawy rozdzielacza?</td></tr>
              <tr><td data-label="Pozycja">Automatyka strefowa</td><td data-label="Typowa jednostka">strefa</td><td data-label="Pytanie do wykonawcy">Czy jest okablowanie, montaż i konfiguracja?</td></tr>
              <tr><td data-label="Pozycja">Transport i logistyka</td><td data-label="Typowa jednostka">ryczałt</td><td data-label="Pytanie do wykonawcy">Czy dojazd, wniesienie i kolejne wizyty są w cenie?</td></tr>
            </tbody>
          </table>
        </div>
      </section>

      <section class="rk-labor-section" id="rk-labor-calculator">
        <div class="rk-labor-tool">
          <header class="rk-labor-tool-head">
            <span class="rk-labor-eyebrow"><b></b> Interaktywny kalkulator i porównywarka</span>
            <h2>Porównaj dwie oferty na podłogówkę według tego samego zakresu</h2>
            <p>Wpisz dane inwestycji, a następnie oznacz każdą pozycję jako zawartą w stawce bazowej, płatną dodatkowo albo nieustaloną. Narzędzie nie zgaduje brakujących cen — pokazuje je jako ryzyko porównania.</p>
          </header>
          <div class="rk-labor-tool-body">
            <form aria-label="Dane ofert wykonawców" onsubmit="return false">
              <div class="rk-labor-shared">
                <h3>Wspólne dane budynku</h3>
                <div class="rk-labor-fields">
                  <div class="rk-labor-field"><label for="rk-labor-total-area">Powierzchnia całkowita [m²]</label><input id="rk-labor-total-area" type="number" min="1" max="5000" step="1" value="120" inputmode="decimal"></div>
                  <div class="rk-labor-field"><label for="rk-labor-active-area">Powierzchnia czynna [m²]</label><input id="rk-labor-active-area" type="number" min="1" max="5000" step="1" value="105" inputmode="decimal"></div>
                  <div class="rk-labor-field"><label for="rk-labor-manifolds">Liczba rozdzielaczy</label><input id="rk-labor-manifolds" type="number" min="1" max="50" step="1" value="1" inputmode="numeric"></div>
                  <div class="rk-labor-field"><label for="rk-labor-loops">Liczba pętli</label><input id="rk-labor-loops" type="number" min="1" max="300" step="1" value="10" inputmode="numeric"></div>
                  <div class="rk-labor-field"><label for="rk-labor-zones">Liczba stref automatyki</label><input id="rk-labor-zones" type="number" min="0" max="100" step="1" value="6" inputmode="numeric"></div>
                </div>
              </div>

              <div class="rk-labor-offers">
                <section class="rk-labor-offer" aria-label="Oferta A">
                  <header class="rk-labor-offer-head">
                    <h3>Oferta A</h3><p>Przykładowe dane są edytowalne.</p>
                    <div class="rk-labor-base-fields">
                      <label><span class="rk-labor-mini-label">Stawka bazowa [zł/m²]</span><input id="rk-labor-a-base" type="number" min="0" max="2000" step="1" value="65" inputmode="decimal"></label>
                      <label><span class="rk-labor-mini-label">Podstawa stawki</span><select id="rk-labor-a-basis"><option value="active" selected>powierzchnia czynna</option><option value="total">powierzchnia całkowita</option></select></label>
                    </div>
                  </header>
                  <div class="rk-labor-line-head"><span>Pozycja</span><span>Status</span><span>Cena jedn.</span></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Izolacja i przygotowanie<small>zł/m² całkowitej</small></span><select id="rk-labor-a-insulation-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-insulation-price" type="number" min="0" step="1" value="18" inputmode="decimal" aria-label="Oferta A cena izolacji za metr kwadratowy"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Montaż rozdzielacza<small>zł/szt.</small></span><select id="rk-labor-a-manifold-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-manifold-price" type="number" min="0" step="10" value="850" inputmode="decimal" aria-label="Oferta A cena montażu rozdzielacza"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Podłączenie pętli<small>zł/obwód</small></span><select id="rk-labor-a-loops-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-loops-price" type="number" min="0" step="10" value="90" inputmode="decimal" aria-label="Oferta A cena podłączenia pętli"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Próba z protokołem<small>zł/instalacja</small></span><select id="rk-labor-a-test-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-test-price" type="number" min="0" step="10" value="500" inputmode="decimal" aria-label="Oferta A cena próby szczelności"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Płukanie i napełnienie<small>zł/instalacja</small></span><select id="rk-labor-a-flush-status"><option value="included">w bazie</option><option value="extra">dopłata</option><option value="unknown" selected>nieustalone</option></select><input id="rk-labor-a-flush-price" type="number" min="0" step="10" value="600" inputmode="decimal" aria-label="Oferta A cena płukania i napełnienia"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Uruchomienie i regulacja<small>zł/instalacja</small></span><select id="rk-labor-a-start-status"><option value="included">w bazie</option><option value="extra">dopłata</option><option value="unknown" selected>nieustalone</option></select><input id="rk-labor-a-start-price" type="number" min="0" step="10" value="900" inputmode="decimal" aria-label="Oferta A cena uruchomienia i regulacji"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Automatyka strefowa<small>zł/strefa</small></span><select id="rk-labor-a-controls-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-controls-price" type="number" min="0" step="10" value="180" inputmode="decimal" aria-label="Oferta A cena montażu automatyki na strefę"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Transport i logistyka<small>zł/ryczałt</small></span><select id="rk-labor-a-transport-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-transport-price" type="number" min="0" step="10" value="350" inputmode="decimal" aria-label="Oferta A koszt transportu"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Inne prace<small>zł/ryczałt</small></span><select id="rk-labor-a-other-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-a-other-price" type="number" min="0" step="10" value="0" inputmode="decimal" aria-label="Oferta A inne koszty"></div>
                </section>

                <section class="rk-labor-offer" aria-label="Oferta B">
                  <header class="rk-labor-offer-head">
                    <h3>Oferta B</h3><p>Ten sam zakres, druga metoda wyceny.</p>
                    <div class="rk-labor-base-fields">
                      <label><span class="rk-labor-mini-label">Stawka bazowa [zł/m²]</span><input id="rk-labor-b-base" type="number" min="0" max="2000" step="1" value="78" inputmode="decimal"></label>
                      <label><span class="rk-labor-mini-label">Podstawa stawki</span><select id="rk-labor-b-basis"><option value="active">powierzchnia czynna</option><option value="total" selected>powierzchnia całkowita</option></select></label>
                    </div>
                  </header>
                  <div class="rk-labor-line-head"><span>Pozycja</span><span>Status</span><span>Cena jedn.</span></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Izolacja i przygotowanie<small>zł/m² całkowitej</small></span><select id="rk-labor-b-insulation-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-insulation-price" type="number" min="0" step="1" value="18" inputmode="decimal" aria-label="Oferta B cena izolacji za metr kwadratowy"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Montaż rozdzielacza<small>zł/szt.</small></span><select id="rk-labor-b-manifold-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-manifold-price" type="number" min="0" step="10" value="850" inputmode="decimal" aria-label="Oferta B cena montażu rozdzielacza"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Podłączenie pętli<small>zł/obwód</small></span><select id="rk-labor-b-loops-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-loops-price" type="number" min="0" step="10" value="90" inputmode="decimal" aria-label="Oferta B cena podłączenia pętli"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Próba z protokołem<small>zł/instalacja</small></span><select id="rk-labor-b-test-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-test-price" type="number" min="0" step="10" value="500" inputmode="decimal" aria-label="Oferta B cena próby szczelności"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Płukanie i napełnienie<small>zł/instalacja</small></span><select id="rk-labor-b-flush-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-flush-price" type="number" min="0" step="10" value="600" inputmode="decimal" aria-label="Oferta B cena płukania i napełnienia"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Uruchomienie i regulacja<small>zł/instalacja</small></span><select id="rk-labor-b-start-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-start-price" type="number" min="0" step="10" value="900" inputmode="decimal" aria-label="Oferta B cena uruchomienia i regulacji"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Automatyka strefowa<small>zł/strefa</small></span><select id="rk-labor-b-controls-status"><option value="included">w bazie</option><option value="extra" selected>dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-controls-price" type="number" min="0" step="10" value="160" inputmode="decimal" aria-label="Oferta B cena montażu automatyki na strefę"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Transport i logistyka<small>zł/ryczałt</small></span><select id="rk-labor-b-transport-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-transport-price" type="number" min="0" step="10" value="350" inputmode="decimal" aria-label="Oferta B koszt transportu"></div>
                  <div class="rk-labor-line"><span class="rk-labor-line-name">Inne prace<small>zł/ryczałt</small></span><select id="rk-labor-b-other-status"><option value="included" selected>w bazie</option><option value="extra">dopłata</option><option value="unknown">nieustalone</option></select><input id="rk-labor-b-other-price" type="number" min="0" step="10" value="0" inputmode="decimal" aria-label="Oferta B inne koszty"></div>
                </section>
              </div>
              <div class="rk-labor-actions"><button class="rk-labor-calculate" id="rk-labor-calculate" type="button">Porównaj oferty</button><button class="rk-labor-reset" id="rk-labor-reset" type="button">Przywróć przykład</button></div>
            </form>
          </div>
          <div class="rk-labor-results" aria-live="polite">
            <h3>Wynik dla wpisanych ofert</h3>
            <div class="rk-labor-result-grid">
              <div class="rk-labor-result-card is-main"><small>Oferta A — znany koszt</small><div class="rk-labor-result-number" id="rk-labor-a-total">11 265 zł</div></div>
              <div class="rk-labor-result-card"><small>Oferta A — efektywnie na m² całkowitej</small><div class="rk-labor-result-number" id="rk-labor-a-meter">93,88 zł/m²</div></div>
              <div class="rk-labor-result-card is-main"><small>Oferta B — znany koszt</small><div class="rk-labor-result-number" id="rk-labor-b-total">10 320 zł</div></div>
              <div class="rk-labor-result-card"><small>Oferta B — efektywnie na m² całkowitej</small><div class="rk-labor-result-number" id="rk-labor-b-meter">86,00 zł/m²</div></div>
              <div class="rk-labor-result-card"><small>Różnica znanych kosztów</small><div class="rk-labor-result-number" id="rk-labor-difference">945 zł</div></div>
              <div class="rk-labor-result-card"><small>Pozycje nieustalone w A</small><div class="rk-labor-result-number" id="rk-labor-a-unknown">2</div></div>
              <div class="rk-labor-result-card"><small>Pozycje nieustalone w B</small><div class="rk-labor-result-number" id="rk-labor-b-unknown">0</div></div>
              <div class="rk-labor-result-card"><small>Różnica powierzchni</small><div class="rk-labor-result-number" id="rk-labor-area-difference">15 m²</div></div>
            </div>
            <div class="rk-labor-chart" role="img" aria-label="Porównanie struktury znanych kosztów ofert A i B">
              <h4>Struktura znanych kosztów</h4>
              <div class="rk-labor-bar-row"><span>Oferta A</span><div class="rk-labor-bar-track"><i class="rk-labor-segment is-base" id="rk-labor-a-bar-base"></i><i class="rk-labor-segment is-floor" id="rk-labor-a-bar-floor"></i><i class="rk-labor-segment is-hydraulic" id="rk-labor-a-bar-hydraulic"></i><i class="rk-labor-segment is-control" id="rk-labor-a-bar-control"></i><i class="rk-labor-segment is-other" id="rk-labor-a-bar-other"></i></div><strong id="rk-labor-a-bar-value">11 265 zł</strong></div>
              <div class="rk-labor-bar-row"><span>Oferta B</span><div class="rk-labor-bar-track"><i class="rk-labor-segment is-base" id="rk-labor-b-bar-base"></i><i class="rk-labor-segment is-floor" id="rk-labor-b-bar-floor"></i><i class="rk-labor-segment is-hydraulic" id="rk-labor-b-bar-hydraulic"></i><i class="rk-labor-segment is-control" id="rk-labor-b-bar-control"></i><i class="rk-labor-segment is-other" id="rk-labor-b-bar-other"></i></div><strong id="rk-labor-b-bar-value">10 320 zł</strong></div>
              <div class="rk-labor-legend"><span><i style="background:#25c7d8"></i>stawka bazowa</span><span><i style="background:#ff6a3d"></i>podłoże i izolacja</span><span><i style="background:#f1bf3f"></i>hydraulika i próba</span><span><i style="background:#6e87df"></i>uruchomienie i automatyka</span><span><i style="background:#8aa0ad"></i>transport i inne</span></div>
            </div>
            <div class="rk-labor-status is-warning" id="rk-labor-status"><strong>Oferta B ma niższy znany koszt, ale w ofercie A pozostają 2 pozycje nieustalone.</strong> Zanim wybierzesz cenę, uzupełnij płukanie oraz uruchomienie.</div>
            <p class="rk-labor-tool-note">Wynik jest prostym zestawieniem wpisanych cen robocizny. Nie obejmuje materiałów, podatków, poprawek budowlanych ani pozycji oznaczonych jako „nieustalone”. Kwota „w bazie” nie jest dodawana drugi raz. Wartości startowe są wyłącznie przykładem działania.</p>
          </div>
        </div>

        <aside class="rk-labor-inline-cta" aria-label="Projekt przed wyborem wykonawcy">
          <span class="rk-labor-eyebrow"><b></b> To samo zapytanie dla każdej ekipy</span>
          <h3>Kalkulator policzył ceny zapisane w ofertach. Nadal nie wie, czy obie ekipy wyceniły właściwą liczbę pętli.</h3>
          <p>Najuczciwiej porównasz wykonawców wtedy, gdy każda firma otrzyma ten sam projekt: te same powierzchnie czynne, rozstawy, długości pętli, dobiegi, rozdzielacze i zakres uruchomienia. Niższa stawka może oznaczać po prostu mniej elementów w ofercie.</p>
          <a class="rk-labor-cta-button rk-labor-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt przed wyborem wykonawcy</a>
          <small class="rk-labor-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
        </aside>
      </section>

      <section class="rk-labor-section" id="rk-labor-area">
        <span class="rk-labor-kicker">Dwie różne podstawy rachunku</span>
        <h2>Powierzchnia całkowita czy czynna — od ilu m² liczy się robociznę?</h2>
        <p class="rk-labor-lead">To jeden z najważniejszych punktów oferty. Powierzchnia całkowita podłóg i powierzchnia rzeczywiście ogrzewana nie są tym samym, dlatego identyczna stawka za m² może dać inną kwotę końcową.</p>
        <div class="rk-labor-grid-2">
          <article class="rk-labor-card"><span class="rk-labor-card-number">A</span><h3>Powierzchnia całkowita</h3><p>Obejmuje podłogi objęte zakresem prac, także miejsca, w których nie będzie rury. Może być logiczną podstawą dla izolacji, folii, taśmy lub prac przygotowawczych.</p><h4>Co zapisać w ofercie?</h4><p>Konkretny metraż, pomieszczenia objęte pracą oraz sposób pomiaru wnęk, schodów i powierzchni wyłączonych.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">B</span><h3>Powierzchnia czynna grzewczo</h3><p>To pole, na którym rzeczywiście układane są rury. Nie obejmuje trwałej zabudowy i innych fragmentów świadomie wyłączonych z ogrzewania.</p><h4>Co zapisać w ofercie?</h4><p>Metraż czynny wynikający z rzutu, a nie oszacowany procent powierzchni domu. Do niego trzeba doliczyć rzeczywiste dobiegi pętli.</p></article>
        </div>
        <div class="rk-labor-callout"><p><strong>Przykład:</strong> dom ma 120 m² podłóg i 105 m² powierzchni czynnej. Stawka 70 zł/m² daje odpowiednio 8400 zł albo 7350 zł. Różnica 1050 zł powstaje jeszcze przed sprawdzeniem rozdzielacza, próby i uruchomienia.</p></div>
      </section>

      <section class="rk-labor-section" id="rk-labor-variants">
        <span class="rk-labor-kicker">Taniej nie zawsze znaczy ten sam produkt</span>
        <h2>Samo układanie rur a pełniejszy zakres robocizny</h2>
        <p class="rk-labor-lead">Wycena samego mocowania rur może być całkowicie prawidłowa, jeżeli inwestor lub inna ekipa odpowiada za pozostałe prace. Problem zaczyna się dopiero wtedy, gdy ofertę częściową porównuje się z ofertą obejmującą więcej etapów.</p>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Etap</th><th>Samo układanie rur</th><th>Szerszy zakres robocizny</th><th>Dokument odbiorowy</th></tr></thead>
            <tbody>
              <tr><td data-label="Etap">Ocena przygotowania podłoża</td><td data-label="Samo układanie rur">często po stronie inwestora</td><td data-label="Szerszy zakres robocizny">może być objęta ofertą</td><td data-label="Dokument odbiorowy">ustalenie zakresu i odpowiedzialności</td></tr>
              <tr><td data-label="Etap">Izolacja, folia, taśma</td><td data-label="Samo układanie rur">zwykle poza zakresem</td><td data-label="Szerszy zakres robocizny">w bazie lub jako dopłata</td><td data-label="Dokument odbiorowy">kontrola warstw przed zakryciem</td></tr>
              <tr><td data-label="Etap">Trasowanie i mocowanie rur</td><td data-label="Samo układanie rur">zakres podstawowy</td><td data-label="Szerszy zakres robocizny">zakres podstawowy</td><td data-label="Dokument odbiorowy">zdjęcia i opis pętli</td></tr>
              <tr><td data-label="Etap">Rozdzielacz i podłączenia</td><td data-label="Samo układanie rur">często dodatkowo</td><td data-label="Szerszy zakres robocizny">często w zakresie</td><td data-label="Dokument odbiorowy">opis obwodów</td></tr>
              <tr><td data-label="Etap">Próba szczelności</td><td data-label="Samo układanie rur">do ustalenia</td><td data-label="Szerszy zakres robocizny">powinna być nazwana wprost</td><td data-label="Dokument odbiorowy">protokół próby</td></tr>
              <tr><td data-label="Etap">Napełnienie i odpowietrzenie</td><td data-label="Samo układanie rur">zwykle osobno</td><td data-label="Szerszy zakres robocizny">zależnie od umowy</td><td data-label="Dokument odbiorowy">potwierdzenie wykonania</td></tr>
              <tr><td data-label="Etap">Uruchomienie i nastawy</td><td data-label="Samo układanie rur">poza zakresem</td><td data-label="Szerszy zakres robocizny">nie zawsze w cenie</td><td data-label="Dokument odbiorowy">nastawy lub protokół uruchomienia</td></tr>
            </tbody>
          </table>
        </div>
        <p>Jeżeli potrzebujesz pełnego budżetu z materiałami, zobacz osobno <a href="https://projekt-ogrzewania.pl/ile-kosztuje-100-m%C2%B2-ogrzewania-podlogowego/">koszt ogrzewania podłogowego dla 100 m²</a> oraz <a href="https://projekt-ogrzewania.pl/kompleksowa-wycena-ogrzewania-podlogowego-wodnego-na-co-przygotowac-budzet/">kompleksową wycenę wodnej podłogówki</a>. Ten artykuł celowo pozostaje przy robociźnie.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-components">
        <span class="rk-labor-kicker">Najczęstsze dopłaty</span>
        <h2>Izolacja, rozdzielacz, podłączenia i automatyka — co bywa liczone osobno?</h2>
        <div class="rk-labor-grid-4">
          <article class="rk-labor-card"><span class="rk-labor-card-number">01</span><h3>Izolacja i system mocowania</h3><p>Robocizna zależy od liczby warstw, konieczności docinania oraz rodzaju systemu. Folia z nadrukiem i klipsy nie są tym samym rozwiązaniem co płyta systemowa z wypustkami.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">02</span><h3>Rozdzielacz i szafka</h3><p>Trzeba rozdzielić montaż szafki, osadzenie rozdzielacza, uzbrojenie, podłączenie magistrali i opis obwodów. Sama nazwa „montaż rozdzielacza” może oznaczać różny zakres.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">03</span><h3>Podłączenie każdej pętli</h3><p>Liczba obwodów wpływa na liczbę połączeń i opisów. Nie należy jej automatycznie wyznaczać z powierzchni bez rozkładu pomieszczeń, długości i hydrauliki.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">04</span><h3>Automatyka strefowa</h3><p>Osobnymi etapami mogą być okablowanie, montaż regulatorów, siłowników, listwy, konfiguracja oraz sprawdzenie działania. Cena urządzeń nie jest ceną robocizny.</p></article>
        </div>
        <p>Przed zamówieniem rozdzielacza warto zrozumieć jego rolę w artykule <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do podłogówki</a>. Po uruchomieniu przepływy odczytuje się na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach rozdzielacza</a>, ale ich nastawy powinny wynikać z obliczeń, a nie z podzielenia jednego przepływu po równo.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-test">
        <span class="rk-labor-kicker">Trzy osobne czynności</span>
        <h2>Próba szczelności to nie uruchomienie i nie regulacja przepływów</h2>
        <p class="rk-labor-lead">W ofertach te pojęcia bywają łączone w jedno zdanie, choć dotyczą innych momentów i innych rezultatów. Warto wycenić je oddzielnie.</p>
        <div class="rk-labor-grid-3">
          <article class="rk-labor-card"><span class="rk-labor-card-number">P</span><h3>Próba szczelności</h3><p>Ma potwierdzić szczelność wykonanego układu zgodnie z przyjętą procedurą. Powinny być ustalone warunki, czas, medium i forma protokołu.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">N</span><h3>Napełnienie i odpowietrzenie</h3><p>Dotyczy przygotowania instalacji do pracy: płukania, napełnienia właściwym medium i usunięcia powietrza z poszczególnych obwodów.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">R</span><h3>Uruchomienie i równoważenie</h3><p>Obejmuje sprawdzenie działania oraz ustawienie przepływów zgodnie z danymi projektowymi. Każda pętla może wymagać innej wartości.</p></article>
        </div>
        <p>Szczegółową procedurę opisuje artykuł o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>. Jeżeli wykonawca wpisuje tylko „próba w cenie”, dopytaj, czy otrzymasz protokół i czy kontrola nastąpi przed zakryciem rur.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-spacing">
        <span class="rk-labor-kicker">Rozstaw wpływa na pracę, ale nie tworzy taryfy</span>
        <h2>Czy rozstaw 10 cm musi kosztować więcej niż 15 cm?</h2>
        <p class="rk-labor-lead">Przy tej samej powierzchni pola grzewczego zmiana rozstawu z 15 na 10 cm zwiększa teoretyczną gęstość rury o około 50%. Nie oznacza to jednak automatycznie wzrostu całej robocizny o 50% ani stałej dopłaty za każdy metr kwadratowy.</p>
        <div class="rk-labor-answer">
          <div class="rk-labor-answer-main"><h3>Co rzeczywiście może wzrosnąć?</h3><p>Ilość mocowań, liczba przejść, długość rury, prawdopodobna liczba obwodów oraz czas pracy przy rozdzielaczu. Wpływ zależy od geometrii pomieszczeń i przyjętego systemu montażu.</p></div>
          <div class="rk-labor-answer-side"><h3>Czego nie wolno zakładać?</h3><p>Że każde źródło ciepła wymaga jednego rozstawu albo że sam rodzaj budynku rozstrzyga układ rur. Rozstaw wynika z obciążenia cieplnego, powierzchni czynnej, parametrów wody i konstrukcji podłogi.</p></div>
        </div>
        <p>Pełne zasady doboru opisujemy w artykule <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur ogrzewania podłogowego 10 czy 15 cm</a>. Do wyceny robocizny wykonawca powinien otrzymać rzeczywisty układ, a nie założenie „wszędzie co 15 cm”.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-complexity">
        <span class="rk-labor-kicker">Co zmienia cenę poza metrażem?</span>
        <h2>Kondygnacje, małe pomieszczenia, logistyka i remont</h2>
        <p class="rk-labor-lead">Dwa domy po 120 m² mogą wymagać innego nakładu pracy. Różnicę tworzy liczba rozdzielaczy, pomieszczeń, drzwi i stref, sposób przygotowania podłoża, dostęp do budowy oraz kolejność robót.</p>
        <div class="rk-labor-grid-3">
          <article class="rk-labor-card"><span class="rk-labor-card-number">1F</span><h3>Jedna zwarta kondygnacja</h3><p>Mniej przenoszenia materiału i zwykle prostsza logistyka. Nadal trzeba uwzględnić oddzielne pomieszczenia, dylatacje i dobiegi.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">2F</span><h3>Kilka kondygnacji</h3><p>Może oznaczać więcej rozdzielaczy, szafek, podejść, transportu pionowego oraz odrębne etapy próby i uruchomienia.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">R</span><h3>Remont istniejącego domu</h3><p>Demontaż, naprawy podłoża, ograniczona wysokość i praca etapami powinny być wycenione osobno. Frezowanie ma inny proces niż nowa podłoga.</p></article>
        </div>
        <p>Dla modernizacji zobacz osobne opracowanie <a href="https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/">frezowanie ogrzewania podłogowego w starym domu</a>. Harmonogram pomaga ocenić artykuł <a href="https://projekt-ogrzewania.pl/ile-trwa-montaz-ogrzewania-podlogowego/">ile trwa montaż podłogówki</a> oraz poradnik <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/">kiedy planować montaż w nowym domu</a>.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-examples">
        <span class="rk-labor-kicker">Proste przykłady budżetowe</span>
        <h2>Ile może wynieść robocizna podłogówki dla 100, 120 i 150 m²?</h2>
        <p class="rk-labor-lead">Poniższe mnożenie pokazuje wyłącznie skalę kosztu przy dwóch orientacyjnych zakresach stawek. Nie uwzględnia osobnych ryczałtów, różnicy powierzchni czynnej, materiałów ani podatku.</p>
        <div class="rk-labor-table-wrap">
          <table>
            <thead><tr><th>Powierzchnia rozliczeniowa</th><th>Samo układanie rur 40–60 zł/m²</th><th>Szerszy standard 60–90 zł/m²</th><th>Najważniejsza uwaga</th></tr></thead>
            <tbody>
              <tr><td data-label="Powierzchnia rozliczeniowa" class="rk-labor-table-em">100 m²</td><td data-label="Samo układanie rur 40–60 zł/m²">4000–6000 zł</td><td data-label="Szerszy standard 60–90 zł/m²">6000–9000 zł</td><td data-label="Najważniejsza uwaga">Sprawdź, czy to 100 m² całkowitej, czy czynnej.</td></tr>
              <tr><td data-label="Powierzchnia rozliczeniowa" class="rk-labor-table-em">120 m²</td><td data-label="Samo układanie rur 40–60 zł/m²">4800–7200 zł</td><td data-label="Szerszy standard 60–90 zł/m²">7200–10 800 zł</td><td data-label="Najważniejsza uwaga">Rozdzielacz i próba mogą być ryczałtem.</td></tr>
              <tr><td data-label="Powierzchnia rozliczeniowa" class="rk-labor-table-em">150 m²</td><td data-label="Samo układanie rur 40–60 zł/m²">6000–9000 zł</td><td data-label="Szerszy standard 60–90 zł/m²">9000–13 500 zł</td><td data-label="Najważniejsza uwaga">Kilka kondygnacji może zmienić liczbę rozdzielaczy.</td></tr>
            </tbody>
          </table>
        </div>
        <div class="rk-labor-callout is-warm"><p><strong>Nie dodawaj obu kolumn.</strong> Reprezentują dwa różne poziomy zakresu. Własną ofertę policz w porównywarce, wpisując stawkę bazową oraz tylko te dopłaty, które wykonawca wyraźnie wskazał.</p></div>
      </section>

      <section class="rk-labor-section" id="rk-labor-compare">
        <span class="rk-labor-kicker">Najpierw ujednolić, potem porównać</span>
        <h2>Jak porównać dwie oferty na ogrzewanie podłogowe?</h2>
        <div class="rk-labor-steps">
          <article class="rk-labor-step"><h3>Wpisz ten sam zakres budynku</h3><p>Podaj obu wykonawcom identyczne kondygnacje, pomieszczenia, powierzchnię całkowitą oraz rzeczywiście ogrzewaną.</p></article>
          <article class="rk-labor-step"><h3>Dołącz ten sam projekt</h3><p>Porównanie ma sens, gdy obie firmy wyceniają tę samą liczbę pętli, rozdzielaczy, rozstawy i dobiegi.</p></article>
          <article class="rk-labor-step"><h3>Rozbij stawkę bazową</h3><p>Ustal, czy obejmuje izolację, mocowanie rur, podłączenia, montaż rozdzielacza i próbę.</p></article>
          <article class="rk-labor-step"><h3>Oddziel odbiór od uruchomienia</h3><p>Zapisz osobno próbę szczelności, płukanie, napełnienie, odpowietrzenie, regulację i automatykę.</p></article>
          <article class="rk-labor-step"><h3>Ujednolić podatki i terminy</h3><p>Porównaj kwoty netto z netto albo brutto z brutto oraz ten sam termin ważności i realizacji oferty.</p></article>
          <article class="rk-labor-step"><h3>Policz koszt znany i braki</h3><p>Nie wpisuj zera przy pozycji nieustalonej. Zaznacz brak, poproś o doprecyzowanie i dopiero wtedy wybieraj.</p></article>
        </div>
        <p>Osobnym kosztem jest dokumentacja. Wyjaśniamy to w poradniku <a href="https://projekt-ogrzewania.pl/ile-kosztuje-projekt-ogrzewania-podlogowego/">ile kosztuje projekt ogrzewania podłogowego</a>. Cena projektu nie powinna być ukrywana w robociźnie, jeżeli wykonawca jedynie przyjmuje własne założenia na budowie.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-contract">
        <span class="rk-labor-kicker">Do zapytania i umowy</span>
        <h2>Checklista przed podpisaniem umowy z wykonawcą podłogówki</h2>
        <ul class="rk-labor-checklist">
          <li>Adres, zakres kondygnacji i pomieszczeń objętych pracami.</li>
          <li>Powierzchnia całkowita oraz czynna wpisane jako dwie liczby.</li>
          <li>Projekt, według którego wyceniane są rozstawy i długości pętli.</li>
          <li>Liczba szafek, rozdzielaczy, pętli i stref automatyki.</li>
          <li>Jednoznaczna podstawa stawki za m².</li>
          <li>Lista prac zawartych w cenie bazowej.</li>
          <li>Ceny wszystkich dopłat i sposób ich zatwierdzania.</li>
          <li>Informacja, czy podane kwoty są netto, czy brutto.</li>
          <li>Odpowiedzialność za przygotowanie oraz odbiór podłoża.</li>
          <li>Rodzaj systemu mocowania rur i zakres wykonania izolacji.</li>
          <li>Warunki próby szczelności oraz protokół.</li>
          <li>Zakres płukania, napełnienia i odpowietrzenia.</li>
          <li>Zakres uruchomienia, regulacji i zapis nastaw.</li>
          <li>Dokumentacja zdjęciowa przed wykonaniem wylewki.</li>
          <li>Termin, etapy płatności i zasady odbioru.</li>
          <li>Procedura zgłaszania prac dodatkowych i poprawek.</li>
        </ul>
      </section>

      <section class="rk-labor-section" id="rk-labor-errors">
        <span class="rk-labor-kicker">Pułapki w uproszczonych cennikach</span>
        <h2>Najczęstsze błędy przy ocenie ceny robocizny</h2>
        <div class="rk-labor-grid-3">
          <article class="rk-labor-card"><span class="rk-labor-card-number">01</span><h3>Jedna stawka bez zakresu</h3><p>Nie wiadomo, czy obejmuje przygotowanie, rozdzielacz, podłączenia, próbę i uruchomienie.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">02</span><h3>Nieznana powierzchnia</h3><p>Cena za m² nie mówi, czy wykonawca używa całej podłogi, aktywnego pola, czy jeszcze innego pomiaru.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">03</span><h3>Sztywna dopłata za rozstaw</h3><p>Większa gęstość rur wpływa na pracę, lecz nie uzasadnia jednej uniwersalnej dopłaty dla każdego budynku.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">04</span><h3>Próba nazwana uruchomieniem</h3><p>Kontrola szczelności nie zastępuje napełnienia, odpowietrzenia, regulacji przepływów i sprawdzenia sterowania.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">05</span><h3>Równe przepływy dla pętli</h3><p>Obwody mogą przenosić inną moc i mieć inną długość. Nastawy nie powinny wynikać z prostego podziału po równo.</p></article>
          <article class="rk-labor-card"><span class="rk-labor-card-number">06</span><h3>Gwarantowana oszczędność</h3><p>Nie da się uczciwie obiecać stałego procentu oszczędności dzięki jednemu elementowi bez danych konkretnej inwestycji.</p></article>
        </div>
        <p>Poza ceną sprawdź również <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstsze błędy montażowe podłogówki</a>. Taniej wykonana instalacja nie jest oszczędnością, jeżeli po wylewce trzeba naprawiać rozmieszczenie rur, połączenia lub hydraulikę.</p>
      </section>

      <section class="rk-labor-section" id="rk-labor-faq">
        <span class="rk-labor-kicker">Pytania inwestorów</span>
        <h2>FAQ — cena robocizny ogrzewania podłogowego</h2>
        <div class="rk-labor-faq">
          <details><summary>Ile kosztuje robocizna podłogówki za m² w 2026 roku?</summary><div class="rk-labor-faq-answer"><p>Orientacyjnie samo układanie rur na przygotowanym podłożu może znajdować się w przedziale około 40–60 zł/m², szerszy standard robocizny około 60–90 zł/m², a małe lub złożone zlecenia około 90–120 zł/m² lub więcej. Są to szerokie punkty odniesienia, nie cennik. Zakres, lokalizacja, powierzchnia i sposób rozliczenia mogą istotnie zmienić ofertę.</p></div></details>
          <details><summary>Co obejmuje cena robocizny ogrzewania podłogowego?</summary><div class="rk-labor-faq-answer"><p>Nie ma jednego stałego zakresu. Oferta może obejmować przygotowanie warstw, izolację, mocowanie rur, montaż rozdzielacza, podłączenia pętli, próbę szczelności, napełnienie, uruchomienie i automatykę, ale każdą pozycję trzeba potwierdzić na piśmie.</p></div></details>
          <details><summary>Czy cenę liczy się od powierzchni całkowitej, czy czynnej?</summary><div class="rk-labor-faq-answer"><p>Zależy od rodzaju pracy i umowy. Izolacja może być liczona od powierzchni całkowitej, a układanie rur od powierzchni czynnej. Oferta powinna podawać oba metraże oraz podstawę każdej stawki.</p></div></details>
          <details><summary>Ile kosztuje robocizna podłogówki dla 100 m²?</summary><div class="rk-labor-faq-answer"><p>Przy orientacyjnej stawce 40–60 zł/m² samo układanie rur daje 4000–6000 zł. Przy szerszym standardzie 60–90 zł/m² daje 6000–9000 zł. Do wyniku mogą dojść ryczałty oraz dopłaty, a 100 m² musi być jasno zdefiniowane jako powierzchnia całkowita lub czynna.</p></div></details>
          <details><summary>Czy styropian i folia są w cenie układania podłogówki?</summary><div class="rk-labor-faq-answer"><p>Nie należy tego zakładać. Część ekip wycenia przygotowanie warstw osobno, a część zawiera wybrany zakres w cenie bazowej. Trzeba oddzielić robociznę od materiałów oraz wskazać liczbę warstw i powierzchnię rozliczeniową.</p></div></details>
          <details><summary>Czy montaż rozdzielacza jest w cenie za m²?</summary><div class="rk-labor-faq-answer"><p>Czasem tak, a czasem jest osobną pozycją za sztukę. Warto ustalić, czy chodzi tylko o osadzenie urządzenia, czy także szafkę, uzbrojenie, podłączenie magistrali, podłączenie pętli i ich opis.</p></div></details>
          <details><summary>Czy próba szczelności obejmuje uruchomienie instalacji?</summary><div class="rk-labor-faq-answer"><p>Nie automatycznie. Próba sprawdza szczelność według ustalonej procedury. Napełnienie, odpowietrzenie, uruchomienie, równoważenie przepływów oraz konfiguracja automatyki to osobne czynności.</p></div></details>
          <details><summary>Czy rozstaw rur 10 cm zwiększa cenę robocizny?</summary><div class="rk-labor-faq-answer"><p>Może zwiększyć nakład pracy, ilość mocowań, długość rury i liczbę obwodów. Nie istnieje jednak jedna obowiązkowa dopłata. Wpływ powinien wynikać z konkretnego projektu i geometrii, a nie z samego hasła „rozstaw 10 cm”.</p></div></details>
          <details><summary>Dlaczego tańsza oferta może mieć wyższy koszt końcowy?</summary><div class="rk-labor-faq-answer"><p>Może używać mniejszej powierzchni w nagłówku, ale naliczać rozdzielacz, podłączenia, próbę, transport i uruchomienie osobno. Dlatego porównuje się końcową kwotę znanych pozycji oraz liczbę elementów jeszcze nieustalonych.</p></div></details>
          <details><summary>Czy kalkulator obejmuje materiały i podatek?</summary><div class="rk-labor-faq-answer"><p>Nie. Narzędzie zestawia wpisane ceny robocizny i nie dolicza automatycznie materiałów ani podatku. Kwoty netto i brutto należy ujednolicić przed wpisaniem.</p></div></details>
          <details><summary>Czy projekt podłogówki jest częścią robocizny?</summary><div class="rk-labor-faq-answer"><p>Nie musi nią być. Projekt to odrębna dokumentacja określająca między innymi powierzchnie czynne, rozstawy, trasy, długości, przepływy i nastawy. Ten sam projekt pozwala przesłać wykonawcom porównywalne zapytanie.</p></div></details>
          <details><summary>Jakie dokumenty odebrać po montażu?</summary><div class="rk-labor-faq-answer"><p>Zakres odbioru powinien wynikać z umowy. Przydatne są zdjęcia rur przed zakryciem, opis obwodów, protokół próby, informacje o użytych materiałach oraz zapis danych uruchomienia i nastaw, jeśli były częścią zlecenia.</p></div></details>
        </div>
      </section>

      <section class="rk-labor-section" id="rk-labor-sources">
        <span class="rk-labor-kicker">Metodyka i neutralne źródła</span>
        <h2>Skąd pochodzą założenia i jak czytać widełki cenowe?</h2>
        <div class="rk-labor-sources">
          <strong>Widełki są punktem budżetowym, a dokumenty zewnętrzne opisują metodykę i kontekst</strong>
          <p>Podane przedziały cenowe są redakcyjnym modelem orientacyjnym z datą aktualizacji, a nie stawką wynikającą z normy lub urzędowego cennika. Główny Urząd Statystyczny publikuje <a href="https://stat.gov.pl/obszary-tematyczne/ceny-handel/ceny/ceny-robot-budowlano-montazowych-i-obiektow-budowlanych-pazdziernik-2024-r-,5,153.html" target="_blank" rel="noopener nofollow">wskaźniki cen produkcji budowlano-montażowej</a>, które pomagają śledzić zmianę poziomu cen w czasie, lecz nie wyznaczają detalicznej stawki za montaż podłogówki w konkretnym domu.</p>
          <p>Przy opisie i porównywaniu zakresu pomocne są urzędowe zasady dotyczące <a href="https://www.gov.pl/attachment/ca9d3252-3cc7-4f97-b9cc-da41071c3114" target="_blank" rel="noopener nofollow">przedmiaru i kosztorysowania robót</a>. Techniczny kontekst projektowania wodnego ogrzewania płaszczyznowego opisuje <a href="https://www.iso.org/standard/74684.html" target="_blank" rel="noopener nofollow">ISO 11855-3:2021</a>, a zagadnienia instalacji systemu obejmuje <a href="https://www.iso.org/standard/74686.html" target="_blank" rel="noopener nofollow">ISO 11855-5:2021</a>. Strony norm nie stanowią cenników wykonawczych.</p>
          <p>Własną decyzję opieraj na aktualnych ofertach z Twojej lokalizacji, wystawionych dla tego samego projektu, zakresu, terminu i sposobu rozliczenia.</p>
        </div>
        <div class="rk-labor-update">Ostatnia aktualizacja merytoryczna: 29 sierpnia 2026 r.</div>
      </section>

      <section class="rk-labor-author" id="rk-labor-author" aria-label="Autor opracowania">
        <input type="radio" name="rk-labor-author-tabs" id="rk-labor-author-about" checked>
        <input type="radio" name="rk-labor-author-tabs" id="rk-labor-author-exp">
        <input type="radio" name="rk-labor-author-tabs" id="rk-labor-author-sites">
        <header class="rk-labor-author-head"><div><span class="rk-labor-kicker" style="color:#83f3ff">Autor opracowania</span><h2>Robert Kucharski</h2><p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p></div><span class="rk-labor-author-mark">KOSZT • ZAKRES • HVAC</span></header>
        <div class="rk-labor-author-layout">
          <aside class="rk-labor-author-side">
            <div class="rk-labor-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant ogrzewania podłogowego" width="600" height="600" loading="lazy" decoding="async"></div>
            <div class="rk-labor-author-name">Robert Kucharski</div>
            <div class="rk-labor-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
            <div class="rk-labor-author-social-label">Znajdziesz mnie również:</div>
            <div class="rk-labor-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener nofollow me" aria-label="Robert Kucharski na LinkedIn" title="LinkedIn"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5.2 7.7H1.6V22h3.6V7.7ZM3.4 2A2.1 2.1 0 1 0 3.4 6.2 2.1 2.1 0 0 0 3.4 2ZM22.4 13.8c0-4.3-2.3-6.3-5.4-6.3a4.7 4.7 0 0 0-4.2 2.3V7.7H9.2V22h3.6v-7.1c0-1.9.4-3.7 2.7-3.7 2.3 0 2.3 2.1 2.3 3.8v7h3.6l1-8.2Z"></path></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="noopener nofollow me" aria-label="Projekt-Ogrzewania.pl na Facebooku" title="Facebook"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M14.2 22v-9h3l.5-3.5h-3.5V7.3c0-1 .3-1.7 1.8-1.7h1.9V2.5c-.3 0-1.5-.1-2.8-.1-2.8 0-4.7 1.7-4.7 4.8v2.3H7.2V13h3.2v9h3.8Z"></path></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="noopener nofollow me" aria-label="Projekt HVAC w serwisie X" title="X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23.2 22H17l-4.9-6.4L6.5 22H3.3l7.3-8.4L2.8 2h6.4l4.4 5.8L18.9 2Zm-1.1 17.8h1.7L8.3 4.1H6.5l11.3 15.7Z"></path></svg></a>
            </div>
          </aside>
          <div class="rk-labor-author-main">
            <blockquote class="rk-labor-author-quote"><p>„Cena za metr kwadratowy jest użyteczna dopiero wtedy, gdy wiadomo, od jakiej powierzchni jest liczona i co znajduje się w zakresie. Projekt pozwala wysłać kilku ekipom dokładnie to samo zapytanie, a dopiero wtedy porównujemy wykonawców, nie przypadkowe założenia.”</p></blockquote>
            <div class="rk-labor-author-tabs" role="tablist" aria-label="Informacje o autorze"><label class="rk-labor-author-tab" for="rk-labor-author-about">O autorze</label><label class="rk-labor-author-tab" for="rk-labor-author-exp">Doświadczenie</label><label class="rk-labor-author-tab" for="rk-labor-author-sites">Portale</label></div>
            <div class="rk-labor-author-panel rk-labor-author-panel-about"><p>Projektuję wodne ogrzewanie podłogowe, łącząc obliczenia cieplne z rzeczywistym przebiegiem rur, długościami pętli, przepływami, stratami ciśnienia i nastawami rozdzielaczy. W publikacjach rozdzielam orientacyjny budżet od wiążącej oferty dla konkretnego zakresu.</p><p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz profil i pozostałe opracowania autora</a>.</p></div>
            <div class="rk-labor-author-panel rk-labor-author-panel-exp"><p>Dokumentacja projektowa określa powierzchnie czynne, liczbę obwodów, rozstawy i długości. Dzięki temu wykonawcy mogą wyceniać ten sam przedmiot prac, a inwestor widzi, czy różnica ceny wynika ze stawki, czy z pominiętego zakresu.</p></div>
            <div class="rk-labor-author-panel rk-labor-author-panel-sites"><p>Jestem właścicielem trzech serwisów branżowych. Powiązanie portali podaję jawnie, aby czytelnik znał autorstwo i kontekst linkowania.</p><div class="rk-labor-site-links"><a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a><a href="https://remont.biz.pl/" target="_blank" rel="noopener nofollow">Remont.biz.pl</a><a href="https://sobir.pl/" target="_blank" rel="noopener nofollow">Sobir.pl</a></div></div>
          </div>
        </div>
      </section>

      <section class="rk-labor-final-cta" aria-label="Projekt do porównania ofert wykonawców">
        <span class="rk-labor-kicker" style="color:#83f3ff">Jedna dokumentacja dla każdej ekipy</span>
        <h2>Otrzymaj projekt, który przekażesz wykonawcom do wyceny</h2>
        <p>Projekt określi powierzchnie czynne, rozstawy, trasy, długości pętli, dobiegi, przepływy i nastawy. Dzięki temu każda firma wycenia ten sam układ, a Ty możesz porównać zakres, kwotę i odpowiedzialność bez zgadywania.</p>
        <a class="rk-labor-cta-button rk-labor-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
        <small class="rk-labor-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
      </section>
    </main>
  </div>
</article>

<script type="application/ld+json">
{
  "@context":"https://schema.org",
  "@graph":[
    {
      "@type":"TechArticle",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#article",
      "url":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/",
      "headline":"Podłogówka – cena za m² robocizny w 2026 r. Zakres prac i kalkulator",
      "description":"Orientacyjne ceny robocizny ogrzewania podłogowego, szczegółowy zakres prac oraz kalkulator porównujący dwie oferty wykonawców.",
      "inLanguage":"pl-PL",
      "dateModified":"2026-08-29",
      "mainEntityOfPage":{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#webpage"},
      "author":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"},
      "publisher":{"@id":"https://projekt-ogrzewania.pl/#organization"},
      "about":[{"@type":"Thing","name":"Cena robocizny ogrzewania podłogowego"},{"@type":"Thing","name":"Zakres montażu podłogówki"},{"@type":"Thing","name":"Porównywanie ofert wykonawców"}],
      "isPartOf":{"@id":"https://projekt-ogrzewania.pl/#website"}
    },
    {
      "@type":"WebPage",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#webpage",
      "url":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/",
      "name":"Podłogówka – cena za m² robocizny w 2026 r. Zakres prac i kalkulator",
      "description":"Sprawdź orientacyjne poziomy cen robocizny i porównaj dwie oferty według wspólnej powierzchni, liczby pętli, rozdzielaczy oraz zakresu uruchomienia.",
      "inLanguage":"pl-PL",
      "dateModified":"2026-08-29",
      "isPartOf":{"@id":"https://projekt-ogrzewania.pl/#website"},
      "breadcrumb":{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#breadcrumb"},
      "mainEntity":[{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#application"},{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#howto"},{"@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#faq"}]
    },
    {
      "@type":"BreadcrumbList",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#breadcrumb",
      "itemListElement":[{"@type":"ListItem","position":1,"name":"Strona główna","item":"https://projekt-ogrzewania.pl/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https://projekt-ogrzewania.pl/blog/"},{"@type":"ListItem","position":3,"name":"Cena robocizny podłogówki","item":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/"}]
    },
    {
      "@type":"WebApplication",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#application",
      "name":"Kalkulator robocizny i porównywarka ofert podłogówki",
      "url":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#rk-labor-calculator",
      "applicationCategory":"FinanceApplication",
      "operatingSystem":"Dowolny system z przeglądarką internetową",
      "browserRequirements":"Obsługa JavaScript",
      "inLanguage":"pl-PL",
      "isAccessibleForFree":true,
      "author":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"},
      "description":"Narzędzie porównuje dwie oferty robocizny według powierzchni całkowitej i czynnej, stawki bazowej, rozdzielaczy, pętli, próby szczelności, uruchomienia, automatyki i pozostałych dopłat."
    },
    {
      "@type":"HowTo",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#howto",
      "name":"Jak porównać dwie oferty na wykonanie ogrzewania podłogowego?",
      "description":"Sześć kroków ujednolicenia zakresu i porównania kosztów robocizny podłogówki.",
      "inLanguage":"pl-PL",
      "step":[
        {"@type":"HowToStep","position":1,"name":"Wpisz ten sam zakres budynku","text":"Podaj obu wykonawcom identyczne kondygnacje, pomieszczenia, powierzchnię całkowitą oraz powierzchnię czynną."},
        {"@type":"HowToStep","position":2,"name":"Dołącz ten sam projekt","text":"Przekaż obu firmom tę samą liczbę pętli, rozdzielaczy, rozstawy i przebieg dobiegów."},
        {"@type":"HowToStep","position":3,"name":"Rozbij stawkę bazową","text":"Ustal, które prace obejmuje cena za metr kwadratowy, a które są dopłatą."},
        {"@type":"HowToStep","position":4,"name":"Oddziel próbę od uruchomienia","text":"Zapisz osobno próbę szczelności, napełnienie, odpowietrzenie, regulację oraz automatykę."},
        {"@type":"HowToStep","position":5,"name":"Ujednolić podatki i terminy","text":"Porównaj kwoty przedstawione w tym samym ujęciu podatkowym i dla tego samego terminu realizacji."},
        {"@type":"HowToStep","position":6,"name":"Policz koszty i braki","text":"Zsumuj znane pozycje i przed wyborem wykonawcy wyjaśnij wszystkie elementy oznaczone jako nieustalone."}
      ]
    },
    {
      "@type":"FAQPage",
      "@id":"https://projekt-ogrzewania.pl/podlogowka-cena-za-m%C2%B2-robocizny/#faq",
      "inLanguage":"pl-PL",
      "mainEntity":[
        {"@type":"Question","name":"Ile kosztuje robocizna podłogówki za m² w 2026 roku?","acceptedAnswer":{"@type":"Answer","text":"Orientacyjnie samo układanie rur na przygotowanym podłożu może znajdować się w przedziale około 40–60 zł/m², szerszy standard robocizny około 60–90 zł/m², a małe lub złożone zlecenia około 90–120 zł/m² lub więcej. Są to szerokie punkty odniesienia, nie cennik."}},
        {"@type":"Question","name":"Co obejmuje cena robocizny ogrzewania podłogowego?","acceptedAnswer":{"@type":"Answer","text":"Nie ma jednego stałego zakresu. Oferta może obejmować przygotowanie warstw, izolację, mocowanie rur, montaż rozdzielacza, podłączenia pętli, próbę szczelności, napełnienie, uruchomienie i automatykę, ale każdą pozycję trzeba potwierdzić na piśmie."}},
        {"@type":"Question","name":"Czy cenę liczy się od powierzchni całkowitej, czy czynnej?","acceptedAnswer":{"@type":"Answer","text":"Zależy od rodzaju pracy i umowy. Izolacja może być liczona od powierzchni całkowitej, a układanie rur od powierzchni czynnej. Oferta powinna podawać oba metraże oraz podstawę każdej stawki."}},
        {"@type":"Question","name":"Ile kosztuje robocizna podłogówki dla 100 m²?","acceptedAnswer":{"@type":"Answer","text":"Przy orientacyjnej stawce 40–60 zł/m² samo układanie rur daje 4000–6000 zł. Przy szerszym standardzie 60–90 zł/m² daje 6000–9000 zł. Do wyniku mogą dojść ryczałty oraz dopłaty."}},
        {"@type":"Question","name":"Czy styropian i folia są w cenie układania podłogówki?","acceptedAnswer":{"@type":"Answer","text":"Nie należy tego zakładać. Część ekip wycenia przygotowanie warstw osobno, a część zawiera wybrany zakres w cenie bazowej. Trzeba oddzielić robociznę od materiałów."}},
        {"@type":"Question","name":"Czy montaż rozdzielacza jest w cenie za m²?","acceptedAnswer":{"@type":"Answer","text":"Czasem tak, a czasem jest osobną pozycją za sztukę. Warto ustalić, czy chodzi tylko o osadzenie urządzenia, czy także szafkę, uzbrojenie, podłączenie magistrali, podłączenie pętli i ich opis."}},
        {"@type":"Question","name":"Czy próba szczelności obejmuje uruchomienie instalacji?","acceptedAnswer":{"@type":"Answer","text":"Nie automatycznie. Próba sprawdza szczelność. Napełnienie, odpowietrzenie, uruchomienie, równoważenie przepływów oraz konfiguracja automatyki to osobne czynności."}},
        {"@type":"Question","name":"Czy rozstaw rur 10 cm zwiększa cenę robocizny?","acceptedAnswer":{"@type":"Answer","text":"Może zwiększyć nakład pracy, ilość mocowań, długość rury i liczbę obwodów. Nie istnieje jednak jedna obowiązkowa dopłata. Wpływ powinien wynikać z konkretnego projektu i geometrii."}},
        {"@type":"Question","name":"Dlaczego tańsza oferta może mieć wyższy koszt końcowy?","acceptedAnswer":{"@type":"Answer","text":"Może naliczać rozdzielacz, podłączenia, próbę, transport i uruchomienie osobno. Dlatego porównuje się końcową kwotę znanych pozycji oraz liczbę elementów jeszcze nieustalonych."}},
        {"@type":"Question","name":"Czy kalkulator obejmuje materiały i podatek?","acceptedAnswer":{"@type":"Answer","text":"Nie. Narzędzie zestawia wpisane ceny robocizny i nie dolicza automatycznie materiałów ani podatku. Kwoty netto i brutto należy ujednolicić przed wpisaniem."}},
        {"@type":"Question","name":"Czy projekt podłogówki jest częścią robocizny?","acceptedAnswer":{"@type":"Answer","text":"Nie musi nią być. Projekt to odrębna dokumentacja określająca między innymi powierzchnie czynne, rozstawy, trasy, długości, przepływy i nastawy."}},
        {"@type":"Question","name":"Jakie dokumenty odebrać po montażu?","acceptedAnswer":{"@type":"Answer","text":"Zakres odbioru powinien wynikać z umowy. Przydatne są zdjęcia rur przed zakryciem, opis obwodów, protokół próby, informacje o użytych materiałach oraz zapis danych uruchomienia i nastaw, jeśli były częścią zlecenia."}}
      ]
    },
    {
      "@type":"Person",
      "@id":"https://projekt-ogrzewania.pl/#robert-kucharski",
      "name":"Robert Kucharski",
      "url":"https://projekt-ogrzewania.pl/author/admin3399/",
      "jobTitle":"Projektant instalacji sanitarnych, specjalista HVAC i ogrzewania podłogowego",
      "worksFor":{"@id":"https://projekt-ogrzewania.pl/#organization"},
      "affiliation":[{"@id":"https://projekt-ogrzewania.pl/#organization"},{"@id":"https://remont.biz.pl/#organization"},{"@id":"https://sobir.pl/#organization"}],
      "sameAs":["https://www.linkedin.com/in/robert-kucharski-38069b48/","https://www.facebook.com/projektogrzewaniapl","https://x.com/Projekt_HVAC"]
    },
    {"@type":"Organization","@id":"https://projekt-ogrzewania.pl/#organization","name":"Projekt-Ogrzewania.pl","url":"https://projekt-ogrzewania.pl/","founder":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"}},
    {"@type":"Organization","@id":"https://remont.biz.pl/#organization","name":"Remont.biz.pl","url":"https://remont.biz.pl/","founder":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"}},
    {"@type":"Organization","@id":"https://sobir.pl/#organization","name":"Sobir.pl","url":"https://sobir.pl/","founder":{"@id":"https://projekt-ogrzewania.pl/#robert-kucharski"}},
    {"@type":"WebSite","@id":"https://projekt-ogrzewania.pl/#website","url":"https://projekt-ogrzewania.pl/","name":"Projekt-Ogrzewania.pl","inLanguage":"pl-PL","publisher":{"@id":"https://projekt-ogrzewania.pl/#organization"}}
  ]
}
</script>

<script>
(function(){
  "use strict";
  var root=document.getElementById("rk-labor-guide");
  if(!root){return;}

  var keys=["insulation","manifold","loops","test","flush","start","controls","transport","other"];
  var labels={insulation:"izolacja i przygotowanie",manifold:"montaż rozdzielacza",loops:"podłączenie pętli",test:"próba z protokołem",flush:"płukanie i napełnienie",start:"uruchomienie i regulacja",controls:"automatyka strefowa",transport:"transport i logistyka",other:"inne prace"};
  var formControls=root.querySelectorAll("#rk-labor-calculator input, #rk-labor-calculator select");
  var defaults=[];
  var i=0;
  for(i=0;i<formControls.length;i+=1){
    defaults.push({element:formControls[i],value:formControls[i].value});
  }

  function numberValue(id){
    var element=root.querySelector("#"+id);
    if(!element){return 0;}
    var value=parseFloat(String(element.value).replace(",","."));
    if(!isFinite(value)){return 0;}
    return value;
  }

  function integerValue(id){
    var value=Math.round(numberValue(id));
    if(value<0){return 0;}
    return value;
  }

  function textValue(id){
    var element=root.querySelector("#"+id);
    if(!element){return "";}
    return element.value;
  }

  function money(value){
    try{return value.toLocaleString("pl-PL",{minimumFractionDigits:0,maximumFractionDigits:0})+" zł";}
    catch(error){return Math.round(value)+" zł";}
  }

  function rate(value){
    try{return value.toLocaleString("pl-PL",{minimumFractionDigits:2,maximumFractionDigits:2})+" zł/m²";}
    catch(error){return value.toFixed(2).replace(".",",")+" zł/m²";}
  }

  function decimal(value,digits,suffix){
    try{return value.toLocaleString("pl-PL",{minimumFractionDigits:digits,maximumFractionDigits:digits})+suffix;}
    catch(error){return value.toFixed(digits).replace(".",",")+suffix;}
  }

  function setText(id,value){
    var element=root.querySelector("#"+id);
    if(element){element.textContent=value;}
  }

  function quantity(key,data){
    if(key==="insulation"){return data.totalArea;}
    if(key==="manifold"){return data.manifolds;}
    if(key==="loops"){return data.loops;}
    if(key==="controls"){return data.zones;}
    return 1;
  }

  function syncPriceFields(code){
    var index=0;
    for(index=0;index<keys.length;index+=1){
      var key=keys[index];
      var select=root.querySelector("#rk-labor-"+code+"-"+key+"-status");
      var priceInput=root.querySelector("#rk-labor-"+code+"-"+key+"-price");
      if(select){
        if(priceInput){priceInput.disabled=select.value!=="extra";}
      }
    }
  }

  function offerResult(code,data){
    var basis=textValue("rk-labor-"+code+"-basis");
    var billingArea=data.activeArea;
    if(basis==="total"){billingArea=data.totalArea;}
    var result={base:numberValue("rk-labor-"+code+"-base")*billingArea,floor:0,hydraulic:0,control:0,other:0,unknown:0,unknownNames:[]};
    var index=0;
    for(index=0;index<keys.length;index+=1){
      var key=keys[index];
      var status=textValue("rk-labor-"+code+"-"+key+"-status");
      if(status==="unknown"){
        result.unknown+=1;
        result.unknownNames.push(labels[key]);
      }
      if(status==="extra"){
        var itemCost=numberValue("rk-labor-"+code+"-"+key+"-price")*quantity(key,data);
        if(key==="insulation"){result.floor+=itemCost;}
        if(key==="manifold"){result.hydraulic+=itemCost;}
        if(key==="loops"){result.hydraulic+=itemCost;}
        if(key==="test"){result.hydraulic+=itemCost;}
        if(key==="flush"){result.hydraulic+=itemCost;}
        if(key==="start"){result.control+=itemCost;}
        if(key==="controls"){result.control+=itemCost;}
        if(key==="transport"){result.other+=itemCost;}
        if(key==="other"){result.other+=itemCost;}
      }
    }
    result.total=result.base+result.floor+result.hydraulic+result.control+result.other;
    return result;
  }

  function setSegment(code,name,value,scale){
    var element=root.querySelector("#rk-labor-"+code+"-bar-"+name);
    if(!element){return;}
    var width=0;
    if(scale>0){width=value/scale*100;}
    element.style.width=Math.max(0,Math.min(100,width))+"%";
  }

  function unknownText(result){
    if(result.unknown===0){return "brak";}
    return result.unknownNames.join(", ");
  }

  function calculate(){
    syncPriceFields("a");
    syncPriceFields("b");
    var data={
      totalArea:numberValue("rk-labor-total-area"),
      activeArea:numberValue("rk-labor-active-area"),
      manifolds:integerValue("rk-labor-manifolds"),
      loops:integerValue("rk-labor-loops"),
      zones:integerValue("rk-labor-zones")
    };
    var valid=true;
    if(data.totalArea<=0){valid=false;}
    if(data.activeArea<=0){valid=false;}
    if(data.activeArea>data.totalArea){valid=false;}
    if(data.manifolds<1){valid=false;}
    if(data.loops<1){valid=false;}
    var status=root.querySelector("#rk-labor-status");
    if(!valid){
      status.className="rk-labor-status is-warning";
      status.innerHTML="<strong>Sprawdź wspólne dane budynku.</strong> Powierzchnie muszą być dodatnie, powierzchnia czynna nie może przekraczać całkowitej, a instalacja musi mieć co najmniej jeden rozdzielacz i jedną pętlę.";
      return;
    }

    var a=offerResult("a",data);
    var b=offerResult("b",data);
    var difference=Math.abs(a.total-b.total);
    setText("rk-labor-a-total",money(a.total));
    setText("rk-labor-b-total",money(b.total));
    setText("rk-labor-a-meter",rate(a.total/data.totalArea));
    setText("rk-labor-b-meter",rate(b.total/data.totalArea));
    setText("rk-labor-difference",money(difference));
    setText("rk-labor-a-unknown",String(a.unknown));
    setText("rk-labor-b-unknown",String(b.unknown));
    setText("rk-labor-area-difference",decimal(data.totalArea-data.activeArea,0," m²"));
    setText("rk-labor-a-bar-value",money(a.total));
    setText("rk-labor-b-bar-value",money(b.total));

    var scale=Math.max(a.total,b.total);
    setSegment("a","base",a.base,scale);
    setSegment("a","floor",a.floor,scale);
    setSegment("a","hydraulic",a.hydraulic,scale);
    setSegment("a","control",a.control,scale);
    setSegment("a","other",a.other,scale);
    setSegment("b","base",b.base,scale);
    setSegment("b","floor",b.floor,scale);
    setSegment("b","hydraulic",b.hydraulic,scale);
    setSegment("b","control",b.control,scale);
    setSegment("b","other",b.other,scale);

    var lead="Obie oferty mają taki sam znany koszt.";
    if(a.total<b.total){lead="Oferta A ma niższy znany koszt o "+money(difference)+".";}
    if(b.total<a.total){lead="Oferta B ma niższy znany koszt o "+money(difference)+".";}
    if(a.unknown===0){
      if(b.unknown===0){
        status.className="rk-labor-status";
        status.innerHTML="<strong>"+lead+"</strong> Według zaznaczeń obie oferty mają ustalony zakres wszystkich dziewięciu pozycji. Nadal sprawdź materiały, podatki, warunki odbioru i zgodność z projektem.";
        return;
      }
    }
    status.className="rk-labor-status is-warning";
    status.innerHTML="<strong>"+lead+" Nie traktuj tego jeszcze jako pełnego porównania.</strong> Nieustalone w A: "+unknownText(a)+". Nieustalone w B: "+unknownText(b)+".";
  }

  function reset(){
    var index=0;
    for(index=0;index<defaults.length;index+=1){
      defaults[index].element.value=defaults[index].value;
    }
    calculate();
  }

  var calculateButton=root.querySelector("#rk-labor-calculate");
  var resetButton=root.querySelector("#rk-labor-reset");
  if(calculateButton){calculateButton.addEventListener("click",calculate);}
  if(resetButton){resetButton.addEventListener("click",reset);}
  root.addEventListener("input",function(event){
    var target=event.target;
    if(!target){return;}
    if(target.tagName==="INPUT"){calculate();}
  });
  root.addEventListener("change",function(event){
    var target=event.target;
    if(!target){return;}
    if(target.tagName==="SELECT"){calculate();}
  });

  function updateProgress(){
    var progress=root.querySelector("#rk-labor-progress");
    if(!progress){return;}
    var rect=root.getBoundingClientRect();
    var distance=root.offsetHeight-window.innerHeight;
    var passed=-rect.top;
    if(passed<0){passed=0;}
    if(passed>distance){passed=distance;}
    var percent=0;
    if(distance>0){percent=passed/distance*100;}
    progress.style.width=Math.max(0,Math.min(100,percent))+"%";
  }

  window.addEventListener("scroll",updateProgress,{passive:true});
  window.addEventListener("resize",updateProgress);
  calculate();
  updateProgress();
})();
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/">Podłogówka cena za m² robocizny.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
