<?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 kalkulator ogrzewania podłogowego - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/kalkulator-ogrzewania-podlogowego/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/kalkulator-ogrzewania-podlogowego/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Mon, 05 Oct 2026 20:50:19 +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 kalkulator ogrzewania podłogowego - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/kalkulator-ogrzewania-podlogowego/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kalkulator maty i kabla grzewczego – ile W/m² i ile kabla lub maty potrzeba.</title>
		<link>https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/</link>
					<comments>https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#respond</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Mon, 05 Oct 2026 20:50:17 +0000</pubDate>
				<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Kable grzewcze]]></category>
		<category><![CDATA[Kalkulatory HVAC]]></category>
		<category><![CDATA[Maty grzewcze]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie]]></category>
		<category><![CDATA[Ogrzewanie budynków]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie elektryczne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[długość kabla grzewczego]]></category>
		<category><![CDATA[dobór maty grzewczej]]></category>
		<category><![CDATA[elektryczne ogrzewanie podłogowe]]></category>
		<category><![CDATA[ile kabla grzewczego]]></category>
		<category><![CDATA[jaka mata grzewcza]]></category>
		<category><![CDATA[kabel grzewczy]]></category>
		<category><![CDATA[kabel grzewczy do podłogi]]></category>
		<category><![CDATA[kalkulator maty i kabla grzewczego]]></category>
		<category><![CDATA[kalkulator ogrzewania podłogowego]]></category>
		<category><![CDATA[mata grzewcza]]></category>
		<category><![CDATA[mata grzewcza do łazienki]]></category>
		<category><![CDATA[moc maty grzewczej]]></category>
		<category><![CDATA[moc w/m²]]></category>
		<category><![CDATA[ogrzewanie elektryczne]]></category>
		<category><![CDATA[rozstaw kabla grzewczego]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=7823</guid>

					<description><![CDATA[<p>Dobór elektrycznego ogrzewania podłogowego nie powinien sprowadzać się wyłącznie do sprawdzenia powierzchni pomieszczenia i zakupu pierwszego dostępnego zestawu. Kalkulator maty i kabla grzewczego pozwala uporządkować najważniejsze parametry: dostępną powierzchnię podłogi, moc W/m², całkowitą moc zestawu, długość przewodu grzejnego oraz jego przybliżony rozstaw. Dzięki temu można porównać różne warianty i sprawdzić, jak zmiana powierzchni lub mocy wpływa na wynik. Narzędzie pomaga również odróżnić moc maty od mocy przypadającej na rzeczywistą strefę grzewczą i pokazuje, które parametry nadal wymagają weryfikacji w dokumentacji konkretnego systemu.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/">Kalkulator maty i kabla grzewczego – ile W/m² i ile kabla lub maty potrzeba.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>

#rk-electric-guide{--rk-navy:#0b2536;--rk-cyan:#29c4d7;--rk-orange:#ff6846;--rk-ink:#10283a;--rk-copy:#3c5668;--rk-muted:#526c7c;--rk-line:#d3e2e8;--rk-soft:#f3f8fa;--rk-green:#168267;--rk-red:#a83d2d;font-family:Arial,Helvetica,sans-serif;color:var(--rk-ink);font-size:16px;line-height:1.65;max-width:1360px;width:100%;margin:0 auto;overflow-wrap:anywhere}
#rk-electric-guide,#rk-electric-guide *{box-sizing:border-box;min-width:0}
#rk-electric-guide [hidden]{display:none!important}
#rk-electric-guide h2,#rk-electric-guide h3,#rk-electric-guide h4{font-family:Arial,Helvetica,sans-serif;color:var(--rk-ink);font-weight:900}
#rk-electric-guide a{color:#06728d;text-decoration:underline;text-underline-offset:3px}
#rk-electric-guide a:hover{color:#b43f25}
#rk-electric-guide button,#rk-electric-guide input,#rk-electric-guide select{font:inherit}
#rk-electric-guide button{cursor:pointer}
#rk-electric-guide :is(a,button,input,select,summary):focus-visible{outline:3px solid #078fb3;outline-offset:4px}
#rk-electric-guide input:focus-visible{outline-color:#0b2536}
#rk-electric-guide img{display:block;max-width:100%;height:auto}
#rk-electric-guide .rk-el-shell{background:#fff;border:1px solid var(--rk-line);box-shadow:0 22px 65px rgb(13 41 57 / 12%);overflow:hidden}
#rk-electric-guide .rk-el-hero{position:relative;padding:58px 58px 48px;background:radial-gradient(circle at 93% 115%,rgb(41 196 215 / 22%) 0 20%,transparent 20.2%),linear-gradient(120deg,#0b2536 0%,#143e52 65%,#0d6576 100%);color:#fff}
#rk-electric-guide .rk-el-kicker{display:flex;align-items:center;gap:13px;font-size:.76rem;letter-spacing:.1em;text-transform:uppercase;color:#89edf5;font-weight:900;margin:0 0 20px}
#rk-electric-guide .rk-el-kicker:before{content:'';width:12px;height:12px;flex:0 0 12px;background:#ff6846;border-radius:50%;box-shadow:0 0 0 7px rgb(255 104 70 / 16%)}
#rk-electric-guide .rk-el-visual-title{font-size:clamp(2.3rem,5.8vw,4.95rem);line-height:1.07;font-weight:900;letter-spacing:-.035em;margin:0;max-width:1160px;color:#fff}
#rk-electric-guide .rk-el-visual-title span{color:#81ebf3}
#rk-electric-guide .rk-el-hero-lead{font-size:clamp(1.05rem,1.8vw,1.32rem);line-height:1.65;color:#e4f0f4;max-width:1110px;margin:24px 0 0}
#rk-electric-guide .rk-el-tags,#rk-electric-guide .rk-el-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:26px}
#rk-electric-guide .rk-el-tags span{font-size:.82rem;font-weight:800;color:#fff;padding:7px 13px;border:1px solid #527384;background:rgb(255 255 255 / 7%);border-radius:999px}
#rk-electric-guide .rk-el-meta{gap:12px 25px;font-size:.83rem;color:#c9dfe6}
#rk-electric-guide .rk-el-meta strong{color:#fff}
#rk-electric-guide .rk-el-hero-points{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-top:30px}
#rk-electric-guide .rk-el-hero-point{border:1px solid #527384;border-radius:14px;padding:16px;background:rgb(255 255 255 / 5%);color:#dcecf1;font-size:.88rem}
#rk-electric-guide .rk-el-hero-point strong{display:block;color:#fff;font-size:1rem;margin-bottom:5px}
#rk-electric-guide .rk-el-nav{position:static;display:flex;flex-wrap:wrap;align-items:center;gap:9px;padding:23px 32px;border-bottom:1px solid var(--rk-line);background:#fff}
#rk-electric-guide .rk-el-nav-label{font-size:.73rem;font-weight:900;letter-spacing:.07em;text-transform:uppercase;margin-right:4px;color:#10283a}
#rk-electric-guide .rk-el-nav a{background:#f0f6f8;border-radius:999px;color:#10283a;text-decoration:none;font-size:.77rem;font-weight:800;padding:7px 12px;line-height:1.3}
#rk-electric-guide .rk-el-nav a:hover{background:#def7fa;color:#075f78}
#rk-electric-guide .rk-el-section{padding:59px 58px;scroll-margin-top:24px}
#rk-electric-guide .rk-el-section+.rk-el-section{border-top:1px solid var(--rk-line)}
#rk-electric-guide .rk-el-soft{background:var(--rk-soft)}
#rk-electric-guide .rk-el-dark{background:#0b2536;color:#fff}
#rk-electric-guide .rk-el-eyebrow{display:block;font-size:.75rem;font-weight:900;text-transform:uppercase;letter-spacing:.1em;color:#06728d;margin-bottom:12px}
#rk-electric-guide .rk-el-section-title{font-size:clamp(1.9rem,3.8vw,3.4rem);line-height:1.12;letter-spacing:-.03em;margin:0;max-width:1110px;color:#10283a}
#rk-electric-guide .rk-el-lead{font-size:1.15rem;color:#3c5668;line-height:1.75;margin:22px 0 0;max-width:1120px}
#rk-electric-guide .rk-el-copy{color:#3c5668;margin:20px 0 0}
#rk-electric-guide .rk-el-dark .rk-el-eyebrow{color:#89edf5}
#rk-electric-guide .rk-el-dark .rk-el-section-title{color:#fff}
#rk-electric-guide .rk-el-dark>.rk-el-lead,#rk-electric-guide .rk-el-dark>.rk-el-copy{color:#d6e7ec}
#rk-electric-guide .rk-el-answer{background:linear-gradient(135deg,#e6fafd,#f8fcfd);border:1px solid #9cdfe8;border-left:7px solid #29c4d7;border-radius:17px;padding:25px 28px;margin-top:27px;color:#3c5668}
#rk-electric-guide .rk-el-answer strong{display:block;font-size:1.2rem;line-height:1.5;color:#10283a}
#rk-electric-guide .rk-el-answer p{margin:10px 0 0}
#rk-electric-guide .rk-el-grid-2,#rk-electric-guide .rk-el-grid-3{display:grid;gap:18px;margin-top:28px}
#rk-electric-guide .rk-el-grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}
#rk-electric-guide .rk-el-grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}
#rk-electric-guide .rk-el-card{background:#fff;border:1px solid var(--rk-line);border-radius:16px;padding:23px;color:#3c5668}
#rk-electric-guide .rk-el-card h3{font-size:1.14rem;line-height:1.35;margin:0 0 10px;color:#10283a}
#rk-electric-guide .rk-el-card p{margin:0;color:#3c5668}
#rk-electric-guide .rk-el-number{display:inline-flex;align-items:center;justify-content:center;min-width:36px;height:36px;padding:0 9px;background:#def7fa;border-radius:10px;color:#07677f;font-weight:900;margin-bottom:14px}
#rk-electric-guide .rk-el-note{border-left:6px solid #f2b526;border-radius:14px;background:#fff6e2;color:#5b4a1d;margin-top:25px;padding:19px 22px}
#rk-electric-guide .rk-el-note p{margin:0;color:inherit}
#rk-electric-guide .rk-el-note strong{color:inherit}
#rk-electric-guide .rk-el-note-good{background:#e9faf5;border-color:#2fcda1;color:#145e4d}
#rk-electric-guide .rk-el-note-stop{background:#fff0ec;border-color:#ff6846;color:#713426}
#rk-electric-guide .rk-el-table-wrap{overflow-x:auto;margin-top:29px}
#rk-electric-guide table{border-collapse:separate;border-spacing:0;width:100%;min-width:700px;color:#3c5668;font-size:.94rem}
#rk-electric-guide caption{text-align:left;font-size:.88rem;color:#526c7c;margin-bottom:12px}
#rk-electric-guide th{padding:14px 16px;background:#0b2536;color:#fff;text-align:left;font-size:.77rem;font-weight:900;letter-spacing:.03em;text-transform:uppercase;border-bottom:1px solid #31576a}
#rk-electric-guide th:first-child{border-radius:13px 0 0 0}
#rk-electric-guide th:last-child{border-radius:0 13px 0 0}
#rk-electric-guide td{padding:16px;background:#fff;border-bottom:1px solid var(--rk-line);vertical-align:top;color:#3c5668}
#rk-electric-guide td strong{color:#10283a}
#rk-electric-guide td:first-child{border-left:1px solid var(--rk-line)}
#rk-electric-guide td:last-child{border-right:1px solid var(--rk-line)}
#rk-electric-guide .rk-el-formula{background:#edf8fa;border:1px solid #b4e1e7;border-radius:13px;padding:16px 19px;color:#08667d;font-family:Consolas,Monaco,monospace;font-size:1rem;font-weight:700;margin-top:20px}
#rk-electric-guide .rk-el-bullets,#rk-electric-guide .rk-el-steps{color:#3c5668;padding-left:23px;margin:20px 0 0}
#rk-electric-guide li+li{margin-top:8px}
#rk-electric-guide .rk-el-subtitle{font-size:1.4rem;line-height:1.35;margin:30px 0 0;color:#10283a}
#rk-electric-guide .rk-el-calc{margin-top:30px;padding:28px;background:#102f42;border:1px solid #315a70;border-radius:22px;color:#fff}
#rk-electric-guide .rk-el-calc-head{padding-bottom:21px;border-bottom:1px solid #315a70}
#rk-electric-guide .rk-el-calc-head h3{font-size:clamp(1.45rem,2.8vw,2.1rem);line-height:1.25;margin:0;color:#fff}
#rk-electric-guide .rk-el-calc-head p{color:#d3e5eb;margin:10px 0 0;font-size:.95rem}
#rk-electric-guide .rk-el-mode-tabs{display:flex;flex-wrap:wrap;gap:10px;margin-top:22px}
#rk-electric-guide .rk-el-mode-tabs button{flex:1 1 210px;background:#173e51;border:1px solid #55798c;color:#fff;border-radius:11px;padding:12px 16px;font-weight:900;min-height:49px}
#rk-electric-guide .rk-el-mode-tabs button[aria-pressed=true]{background:#29c4d7;border-color:#29c4d7;color:#082c3c}
#rk-electric-guide .rk-el-stage{padding:23px;background:#17394b;border:1px solid #40697e;border-radius:16px;margin-top:19px;color:#fff}
#rk-electric-guide .rk-el-stage-head{display:flex;align-items:flex-start;gap:13px;margin-bottom:18px}
#rk-electric-guide .rk-el-stage-head .rk-el-number{background:#29c4d7;color:#082c3c;flex:0 0 38px;height:38px;margin:0}
#rk-electric-guide .rk-el-stage-head h4{font-size:1.12rem;line-height:1.35;margin:0;color:#fff}
#rk-electric-guide .rk-el-stage-head p{color:#d0e3ea;margin:5px 0 0;font-size:.89rem}
#rk-electric-guide .rk-el-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
#rk-electric-guide .rk-el-field{display:block;color:#eaf6f8}
#rk-electric-guide .rk-el-field>span{display:block;font-size:.84rem;font-weight:800;color:#eaf6f8;margin-bottom:7px}
#rk-electric-guide .rk-el-field input,#rk-electric-guide .rk-el-field select{display:block;width:100%;min-height:48px;border:1px solid #b8ccd5;border-radius:9px;background:#fff;color:#10283a;padding:10px 12px;box-shadow:none;opacity:1;-webkit-text-fill-color:#10283a}
#rk-electric-guide .rk-el-field input[aria-invalid=true]{border:3px solid #ed765d}
#rk-electric-guide .rk-el-field small{display:block;font-size:.78rem;line-height:1.5;margin-top:7px;color:#d0e3ea}
#rk-electric-guide .rk-el-field-wide{grid-column:1/-1}
#rk-electric-guide .rk-el-optional{margin-top:19px;border:1px solid #537487;border-radius:13px;color:#eaf6f8;background:#153649}
#rk-electric-guide .rk-el-optional summary{padding:15px 19px;font-size:.92rem;font-weight:800;cursor:pointer;color:#fff}
#rk-electric-guide .rk-el-optional-body{padding:0 20px 21px}
#rk-electric-guide .rk-el-optional-body>p{font-size:.86rem;color:#d0e3ea;margin:0 0 17px}
#rk-electric-guide .rk-el-actions{display:flex;flex-wrap:wrap;gap:11px;margin-top:21px}
#rk-electric-guide .rk-el-primary,#rk-electric-guide .rk-el-secondary{border-radius:10px;padding:11px 17px;min-height:47px;font-weight:900;border:1px solid #6c8b9c}
#rk-electric-guide .rk-el-primary{background:#ff6846;color:#10283a;border-color:#ff6846}
#rk-electric-guide .rk-el-primary:hover{background:#ff896e}
#rk-electric-guide .rk-el-secondary{background:#17394b;color:#fff}
#rk-electric-guide .rk-el-secondary:hover{background:#25516a}
#rk-electric-guide .rk-el-example-label{color:#d0e3ea;font-size:.8rem;margin:14px 0 0}
#rk-electric-guide .rk-el-errors{margin-top:18px;background:#fff0ec;border-left:6px solid #ff6846;color:#713426;padding:18px 21px;border-radius:12px}
#rk-electric-guide .rk-el-errors p{margin:0;color:#713426;font-weight:800}
#rk-electric-guide .rk-el-errors ul{margin:10px 0 0;padding-left:20px;color:#713426}
#rk-electric-guide .rk-el-result{margin-top:24px;background:#fff;border:1px solid #cbdfe7;border-left:7px solid #f2b526;border-radius:17px;padding:25px;color:#10283a}
#rk-electric-guide .rk-el-result.is-stop{border-left-color:#ff6846}
#rk-electric-guide .rk-el-result.is-checked{border-left-color:#2fcda1}
#rk-electric-guide .rk-el-result h3{font-size:clamp(1.35rem,2.5vw,2rem);line-height:1.3;color:#10283a;margin:0}
#rk-electric-guide .rk-el-result-intro{color:#3c5668;margin:9px 0 0}
#rk-electric-guide .rk-el-metrics{display:grid;gap:13px;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:21px}
#rk-electric-guide .rk-el-metrics-four{grid-template-columns:repeat(4,minmax(0,1fr))}
#rk-electric-guide .rk-el-metric{background:#f2f7f9;border:1px solid #d3e3e9;border-radius:13px;padding:16px;color:#10283a}
#rk-electric-guide .rk-el-metric>span{display:block;color:#526c7c;font-size:.72rem;line-height:1.5;text-transform:uppercase;letter-spacing:.03em;font-weight:900}
#rk-electric-guide .rk-el-metric>strong{display:block;color:#10283a!important;font-size:1.28rem;line-height:1.4;margin-top:7px;-webkit-text-fill-color:#10283a}
#rk-electric-guide .rk-el-metric small{display:block;color:#526c7c;font-size:.77rem;margin-top:5px}
#rk-electric-guide .rk-el-result h4{font-size:1.02rem;color:#10283a;margin:24px 0 0}
#rk-electric-guide .rk-el-result-extra{background:#edf8fa;border:1px solid #b4e1e7;color:#154d60;border-radius:12px;padding:15px 18px;margin-top:16px;font-size:.94rem}
#rk-electric-guide .rk-el-result-extra p{margin:0;color:#154d60}
#rk-electric-guide .rk-el-result-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px;margin-top:20px}
#rk-electric-guide .rk-el-result-column{background:#f6fafb;border:1px solid #d3e3e9;border-radius:13px;padding:18px;color:#3c5668}
#rk-electric-guide .rk-el-result-column h4{margin:0;font-size:.94rem;color:#10283a}
#rk-electric-guide .rk-el-result-column ul{margin:10px 0 0;padding-left:19px;color:#3c5668;font-size:.88rem}
#rk-electric-guide .rk-el-disclaimer{font-size:.8rem;line-height:1.6;color:#526c7c;margin:17px 0 0}
#rk-electric-guide .rk-el-check-panel{background:#edf8fa;border:1px solid #b4e1e7;border-left:6px solid #29c4d7;border-radius:17px;padding:27px;margin-top:29px;color:#3c5668}
#rk-electric-guide .rk-el-check-panel h3{font-size:1.45rem;line-height:1.35;margin:0;color:#10283a}
#rk-electric-guide .rk-el-check-panel p{margin:12px 0 0;color:#3c5668}
#rk-electric-guide .rk-el-chart{margin-top:28px;padding:27px;background:#fff;border:1px solid var(--rk-line);border-radius:18px;color:#10283a}
#rk-electric-guide .rk-el-chart h3{font-size:1.38rem;line-height:1.35;color:#10283a;margin:0}
#rk-electric-guide .rk-el-chart>p{color:#3c5668;margin:12px 0 0}
#rk-electric-guide .rk-el-chart-legend{display:flex;flex-wrap:wrap;gap:12px 21px;margin-top:21px;font-size:.81rem;color:#3c5668}
#rk-electric-guide .rk-el-chart-legend span{display:flex;align-items:center;gap:8px}
#rk-electric-guide .rk-el-swatch{width:23px;height:4px;display:inline-block;background:#078fb3;border-radius:3px}
#rk-electric-guide .rk-el-swatch-ideal{background:#0b2536}
#rk-electric-guide .rk-el-swatch-set{background:#e05a3a}
#rk-electric-guide .rk-el-swatch-limit{background:#bd4c3b}
#rk-electric-guide .rk-el-chart-holder{margin-top:19px;width:100%;background:#f8fcfd;border-radius:13px;border:1px solid #d3e3e9;padding:8px}
#rk-electric-guide .rk-el-chart-svg{width:100%;height:auto;display:block;touch-action:pan-y}
#rk-electric-guide .rk-el-chart-slider{display:block;margin-top:20px;color:#10283a;font-size:.9rem;font-weight:800}
#rk-electric-guide .rk-el-chart-slider input{width:100%;display:block;accent-color:#078fb3;margin:13px 0 0;min-height:32px}
#rk-electric-guide .rk-el-preview{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-top:17px}
#rk-electric-guide .rk-el-preview>div{padding:14px;background:#edf8fa;border:1px solid #b4e1e7;border-radius:12px;color:#10283a}
#rk-electric-guide .rk-el-preview span{display:block;font-size:.74rem;color:#526c7c;font-weight:800}
#rk-electric-guide .rk-el-preview strong{display:block;color:#10283a!important;font-size:1.1rem;margin-top:5px}
#rk-electric-guide .rk-el-preview-status{font-size:.87rem;background:#fff6e2;border-left:4px solid #f2b526;border-radius:10px;padding:14px 17px;color:#5b4a1d;margin-top:16px}
#rk-electric-guide .rk-el-preview-status.is-stop{background:#fff0ec;border-color:#ff6846;color:#713426}
#rk-electric-guide .rk-el-preview-status.is-checked{background:#e9faf5;border-color:#2fcda1;color:#145e4d}
#rk-electric-guide .rk-el-chart-empty{padding:23px;color:#3c5668;background:#f3f8fa;border-radius:13px;margin-top:20px}
#rk-electric-guide .rk-el-faq{display:grid;gap:12px;margin-top:29px}
#rk-electric-guide .rk-el-faq details{background:#fff;border:1px solid var(--rk-line);border-radius:13px;overflow:hidden}
#rk-electric-guide .rk-el-faq summary{list-style:none;position:relative;padding:18px 52px 18px 20px;font-weight:900;color:#10283a;cursor:pointer}
#rk-electric-guide .rk-el-faq summary::-webkit-details-marker{display:none}
#rk-electric-guide .rk-el-faq summary:after{content:'+';position:absolute;right:20px;top:10px;color:#06728d;font-size:1.65rem}
#rk-electric-guide .rk-el-faq details[open] summary:after{content:'−'}
#rk-electric-guide .rk-el-faq-answer{padding:18px 20px;border-top:1px solid var(--rk-line);color:#3c5668}
#rk-electric-guide .rk-el-faq-answer p{margin:0;color:#3c5668}
#rk-electric-guide .rk-el-source-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:17px;margin-top:28px}
#rk-electric-guide .rk-el-source-card{background:#f2f7f9;border:1px solid #cfe0e7;border-radius:15px;padding:21px;color:#3c5668}
#rk-electric-guide .rk-el-source-card a{font-weight:900;color:#06728d}
#rk-electric-guide .rk-el-source-card p{color:#3c5668;margin:10px 0 0;font-size:.91rem}
#rk-electric-guide .rk-el-author-layout{display:grid;grid-template-columns:290px minmax(0,1fr);background:#fff;border:1px solid #cbdde5;border-radius:21px;overflow:hidden;margin-top:29px}
#rk-electric-guide .rk-el-author-side{display:flex;flex-direction:column;align-items:center;text-align:center;padding:34px 25px;background:#0b2536;color:#fff}
#rk-electric-guide .rk-el-author-photo{width:158px;aspect-ratio:1;border-radius:50%;overflow:hidden;border:5px solid #58788a;background:#fff}
#rk-electric-guide .rk-el-author-photo img{width:100%;height:100%;object-fit:cover}
#rk-electric-guide .rk-el-author-name{color:#fff;font-size:1.25rem;font-weight:900;margin-top:19px}
#rk-electric-guide .rk-el-author-role{color:#c5dce5;font-size:.83rem;margin:8px 0 0}
#rk-electric-guide .rk-el-author-social{display:flex;gap:10px;margin-top:20px}
#rk-electric-guide .rk-el-author-social a{display:flex;align-items:center;justify-content:center;width:43px;height:43px;border:1px solid #66889b;border-radius:50%;color:#fff;text-decoration:none;font-weight:800}
#rk-electric-guide .rk-el-author-social a:hover{background:#29c4d7;color:#082c3c}
#rk-electric-guide .rk-el-author-main{padding:34px;color:#3c5668}
#rk-electric-guide .rk-el-author-main p{color:#3c5668;margin:18px 0 0}
#rk-electric-guide .rk-el-author-note{border-left:6px solid #29c4d7;border-radius:13px;background:#f2f9fb;color:#10283a;padding:21px;font-size:1.08rem;font-weight:800;line-height:1.65}
#rk-electric-guide .rk-el-author-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:23px}
#rk-electric-guide .rk-el-author-facts div{background:#eef7f9;border:1px solid #d2e4e9;border-radius:12px;padding:14px;font-size:.83rem;color:#3c5668}
#rk-electric-guide .rk-el-author-facts strong{display:block;color:#06728d;font-size:.73rem;margin-bottom:5px;text-transform:uppercase}
@media(max-width:1050px){#rk-electric-guide .rk-el-metrics-four,#rk-electric-guide .rk-el-preview{grid-template-columns:repeat(2,minmax(0,1fr))}#rk-electric-guide .rk-el-result-columns{grid-template-columns:1fr}}
@media(max-width:820px){#rk-electric-guide .rk-el-hero,#rk-electric-guide .rk-el-section{padding-left:28px;padding-right:28px}#rk-electric-guide .rk-el-hero-points,#rk-electric-guide .rk-el-grid-3{grid-template-columns:1fr}#rk-electric-guide .rk-el-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}#rk-electric-guide .rk-el-author-layout{grid-template-columns:1fr}#rk-electric-guide .rk-el-author-side{padding:28px}#rk-electric-guide .rk-el-nav{padding:21px}}
@media(max-width:640px){#rk-electric-guide .rk-el-hero{padding-top:43px;padding-bottom:37px}#rk-electric-guide .rk-el-section{padding-top:44px;padding-bottom:44px}#rk-electric-guide .rk-el-grid-2,#rk-electric-guide .rk-el-fields,#rk-electric-guide .rk-el-source-grid,#rk-electric-guide .rk-el-author-facts{grid-template-columns:1fr}#rk-electric-guide .rk-el-calc,#rk-electric-guide .rk-el-chart{padding:17px;border-radius:16px}#rk-electric-guide .rk-el-stage,#rk-electric-guide .rk-el-result{padding:18px}#rk-electric-guide .rk-el-metrics,#rk-electric-guide .rk-el-metrics-four{grid-template-columns:1fr}#rk-electric-guide .rk-el-optional-body{padding-left:15px;padding-right:15px}#rk-electric-guide .rk-el-actions{display:grid;grid-template-columns:1fr}#rk-electric-guide .rk-el-preview{grid-template-columns:repeat(2,minmax(0,1fr))}#rk-electric-guide .rk-el-preview>div{padding:11px}#rk-electric-guide .rk-el-preview strong{font-size:1rem}#rk-electric-guide .rk-el-chart-holder{padding:3px}#rk-electric-guide .rk-el-author-main{padding:25px 20px}#rk-electric-guide .rk-el-table-wrap{overflow:visible}#rk-electric-guide table,#rk-electric-guide tbody,#rk-electric-guide tr,#rk-electric-guide td{display:block;width:100%;min-width:0}#rk-electric-guide thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}#rk-electric-guide tbody{display:grid;gap:13px}#rk-electric-guide tr{border:1px solid var(--rk-line);border-radius:13px;overflow:hidden}#rk-electric-guide td,#rk-electric-guide td:first-child,#rk-electric-guide td:last-child{border:0;border-bottom:1px solid #e1ebef;padding:13px 15px}#rk-electric-guide td:last-child{border-bottom:0}#rk-electric-guide td:before{content:attr(data-label);display:block;color:#06728d;font-size:.69rem;font-weight:900;letter-spacing:.03em;text-transform:uppercase;margin-bottom:5px}}
@media(max-width:430px){#rk-electric-guide .rk-el-hero,#rk-electric-guide .rk-el-section{padding-left:18px;padding-right:18px}#rk-electric-guide .rk-el-visual-title{font-size:2.15rem}#rk-electric-guide .rk-el-section-title{font-size:1.85rem}#rk-electric-guide .rk-el-nav{padding:17px 14px}#rk-electric-guide .rk-el-nav-label{flex:1 0 100%}#rk-electric-guide .rk-el-nav a{flex:1 1 calc(50% - 9px);text-align:center}#rk-electric-guide .rk-el-answer,#rk-electric-guide .rk-el-check-panel{padding:21px}#rk-electric-guide .rk-el-calc{padding:13px}#rk-electric-guide .rk-el-stage{padding:16px}#rk-electric-guide .rk-el-result{padding:16px}}
@media(prefers-reduced-motion:reduce){#rk-electric-guide *,#rk-electric-guide *:before,#rk-electric-guide *:after{scroll-behavior:auto;transition:none;animation:none}}
@media print{#rk-electric-guide{max-width:none;font-size:11pt}#rk-electric-guide .rk-el-nav,#rk-electric-guide .rk-el-actions{display:none}#rk-electric-guide .rk-el-section{padding:25px 15px}#rk-electric-guide .rk-el-shell{box-shadow:none}#rk-electric-guide .rk-el-card,#rk-electric-guide .rk-el-metric{break-inside:avoid}}

</style>

<article id="rk-electric-guide" aria-labelledby="rk-el-visual-title"><div class="rk-el-shell">
<header class="rk-el-hero"><span class="rk-el-kicker">Dobór zestawu · moc i powierzchnia</span><div class="rk-el-visual-title" id="rk-el-visual-title">Mata czy kabel grzewczy? <span>Policz moc, metraż i rozstaw</span></div><p class="rk-el-hero-lead">Kalkulator maty i kabla grzewczego pokazuje, ile W/m² i ile czynnego kabla wynika z Twoich założeń. Porównaj powierzchnię maty z dostępną strefą, przelicz kompletny zestaw kablowy i sprawdź ograniczenia z instrukcji.</p><div class="rk-el-tags" aria-label="Zakres poradnika"><span>maty grzewcze</span><span>oporowe zestawy kablowe</span><span>W/m² i W/m</span><span>powierzchnia dostępna</span><span>interaktywny wykres</span></div><div class="rk-el-meta"><span>Autor: <strong>Robert Kucharski</strong></span><span>Publikacja: <strong><time datetime="2026-10-05">5 października 2026 r.</time></strong></span><span>Czas czytania: <strong>około 21 minut</strong></span></div><div class="rk-el-hero-points"><div class="rk-el-hero-point"><strong>Powierzchnia do ułożenia</strong>Wyłączenia i kształt podłogi zmieniają wielkość zestawu.</div><div class="rk-el-hero-point"><strong>Cała długość czynna</strong>Kalkulator przelicza kompletny zestaw; przewód zimny ma osobną funkcję.</div><div class="rk-el-hero-point"><strong>Moc ≠ potwierdzenie komfortu</strong>Podłoga musi jeszcze spełnić wymagania cieplne i montażowe.</div></div></header>
<nav class="rk-el-nav" aria-label="Na skróty — wszystkie sekcje artykułu"><span class="rk-el-nav-label">Na skróty</span><a href="#rk-el-answer">Szybka odpowiedź</a><a href="#rk-el-units">W/m² i W/m</a><a href="#rk-el-area">Powierzchnia</a><a href="#rk-el-calc">Kalkulatory</a><a href="#rk-el-density">Ile W/m²?</a><a href="#rk-el-mat">Dobór maty</a><a href="#rk-el-cable">Długość kabla</a><a href="#rk-el-spacing">Wykres rozstawu</a><a href="#rk-el-heat">Ogrzewanie pokoju</a><a href="#rk-el-example">Przykład łazienki</a><a href="#rk-el-floor">Okładzina</a><a href="#rk-el-control">Sterowanie i obwód</a><a href="#rk-el-errors">Błędy</a><a href="#rk-el-checklist">Checklista</a><a href="#rk-el-sources">Źródła</a><a href="#rk-el-faq">FAQ</a><a href="#rk-el-author">Autor</a></nav><section class="rk-el-section " id="rk-el-answer"><span class="rk-el-eyebrow">Odpowiedź w 60 sekund</span><h2 class="rk-el-section-title">Jak obliczyć matę i kabel grzewczy?</h2>
<p class="rk-el-lead"><strong>Najpierw wyznacz powierzchnię, na której można rzeczywiście ułożyć ogrzewanie.</strong> Następnie połącz ją z mocą powierzchniową przyjętą dla danego zastosowania i parametrami konkretnego zestawu.</p>
<div class="rk-el-answer"><strong>Dla maty moc wynika z jej powierzchni i W/m². Dla kabla długość wynika z powierzchni, przyjętych W/m² i znamionowych W/m.</strong><p>Obliczona długość jest punktem odniesienia do wyboru kompletnego zestawu. Po wyborze rzeczywistej długości trzeba ponownie sprawdzić moc na m² oraz przybliżony rozstaw.</p></div>
<div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Powierzchnia dostępna</h3><p>Odlicz miejsca i odstępy wyłączone według dokumentacji systemu. Mata do pomieszczenia 10 m² nie musi mieć 10 m².</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Parametry zestawu</h3><p>Użyj mocy i wymiarów dla właściwego napięcia znamionowego. W/m przewodu i W/m² maty opisują różne wielkości.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Weryfikacja podłogi</h3><p>Wynik elektryczny trzeba zestawić z instrukcją, okładziną i konstrukcją. Pokrycie strat ciepła wymaga odrębnego sprawdzenia.</p></div></div><p class="rk-el-copy">Jeżeli dopiero wybierasz technologię, zobacz porównanie <a href="https://projekt-ogrzewania.pl/jakie-ogrzewanie-podlogowe-wybrac-wodne-czy-elektryczne/">wodnego i elektrycznego ogrzewania podłogowego</a>. Tutaj obliczamy parametry mat oraz oporowych zestawów kablowych do wnętrz.</p></section>
<section class="rk-el-section rk-el-soft" id="rk-el-units"><span class="rk-el-eyebrow">Porządek w jednostkach</span><h2 class="rk-el-section-title">W/m², W/m, W i kWh — co oznaczają te wartości?</h2><p class="rk-el-lead">Ta sama liczba W/m² może odnosić się do całego pokoju, dostępnej strefy układania albo powierzchni samej maty. Zawsze sprawdź, przez jaką powierzchnię podzielono moc.</p><div class="rk-el-table-wrap"><table><thead><tr><th scope="col">Parametr</th><th scope="col">Co opisuje</th><th scope="col">Jak go użyć</th></tr></thead><tbody><tr><td data-label="Parametr"><strong>W/m² pomieszczenia</strong></td><td data-label="Co opisuje">Wskaźnik obciążenia cieplnego odniesiony do powierzchni pokoju.</td><td data-label="Jak go użyć">Nie zastępuje parametrów elektrycznych maty ani kabla.</td></tr><tr><td data-label="Parametr"><strong>W/m² maty</strong></td><td data-label="Co opisuje">Znamionowa moc elektryczna na jednostkę powierzchni produktu.</td><td data-label="Jak go użyć">Pomnóż przez powierzchnię wybranego zestawu.</td></tr><tr><td data-label="Parametr"><strong>W/m² strefy kabla</strong></td><td data-label="Co opisuje">Moc całego zestawu podzielona przez strefę jego ułożenia.</td><td data-label="Jak go użyć">Użyj do porównania wariantów i ograniczeń systemowych.</td></tr><tr><td data-label="Parametr"><strong>W/m kabla</strong></td><td data-label="Co opisuje">Znamionowa moc jednego metra czynnego przewodu.</td><td data-label="Jak go użyć">Pomnóż przez długość grzejną; przewód zimny licz osobno.</td></tr><tr><td data-label="Parametr"><strong>W oraz kW</strong></td><td data-label="Co opisuje">Moc chwilowa lub znamionowa; 1000 W = 1 kW.</td><td data-label="Jak go użyć">Służy do oceny zestawu i obciążenia elektrycznego.</td></tr><tr><td data-label="Parametr"><strong>kWh</strong></td><td data-label="Co opisuje">Energia pobrana w czasie.</td><td data-label="Jak go użyć">Zależy od rzeczywistej pracy i sterowania, a nie tylko mocy z etykiety.</td></tr></tbody></table></div><div class="rk-el-note "><p>Przykład: mata 5,5 m² o mocy 150 W/m² ma 825 W. W strefie dostępnej o powierzchni 6 m² oznacza to średnio 137,5 W/m² tej strefy — nadal 150 W/m² samej maty. Są to dwa różne odniesienia.</p></div><p class="rk-el-copy">Rachunki i energię omawia osobny <a href="https://projekt-ogrzewania.pl/ogrzewanie-elektryczne-vs-wodna-podlogowka-kalkulator-kosztow-eksploatacji/">kalkulator kosztów ogrzewania elektrycznego i wodnego</a>. Moc pomnożona przez wszystkie godziny miesiąca nie jest prognozą zużycia instalacji sterowanej termostatem.</p></section>
<section class="rk-el-section " id="rk-el-area"><span class="rk-el-eyebrow">Najpierw rzut pomieszczenia</span><h2 class="rk-el-section-title">Jak policzyć powierzchnię pod matę lub kabel?</h2>
<p class="rk-el-lead">Powierzchnia do ułożenia wynika z planu podłogi i wymagań wybranego systemu. Uwzględnij zabudowę, wymagane odstępy oraz miejsca niedopuszczone do montażu. Nie dodawaj procentowego zapasu elementu grzejnego.</p>
<div class="rk-el-formula">A<sub>dostępna</sub> = A<sub>pomieszczenia</sub> − A<sub>wyłączeń</sub></div>
<div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Zaznacz wyłączenia</h3><p>Na rzucie zaznacz stałą zabudowę, urządzenia i odległości wymagane w instrukcji. Nakładających się powierzchni wyłączeń nie odejmuj dwukrotnie.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Sprawdź geometrię</h3><p>Wąski pas, wnęka i przejście mogą utrudnić ułożenie maty mimo odpowiedniej sumy m². Szerokość produktu oraz nawroty trzeba sprawdzić na planie.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Rozdziel dwie powierzchnie</h3><p>Dostępna strefa to górna granica obszaru do wykorzystania. Powierzchnia kupionej maty może być mniejsza; wzór dla kabla dotyczy strefy, w której faktycznie go rozłożysz.</p></div></div><div class="rk-el-note "><p>Nie każda przestrzeń pod meblem ma identyczne warunki oddawania ciepła. Decyzja zależy od konstrukcji zabudowy, prześwitu i instrukcji systemu. Uwzględnij także późniejsze dywany i dodatkowe warstwy mogące utrudnić odprowadzanie ciepła.</p></div><p class="rk-el-copy">W kalkulatorze możesz wpisać powierzchnię bezpośrednio albo obliczyć ją z powierzchni pomieszczenia i sumy wyłączeń. Wybierasz jedną metodę, dzięki czemu wyłączenia nie są automatycznie odejmowane drugi raz.</p></section>
<section class="rk-el-section rk-el-dark" id="rk-el-calc"><span class="rk-el-eyebrow">Narzędzia przed zakupem</span><h2 class="rk-el-section-title">Kalkulator maty i kabla grzewczego</h2>
<p class="rk-el-lead">Poniżej znajdziesz dwa niezależne kalkulatory: najpierw maty, następnie kabla. Każdy ma własną powierzchnię, parametry i wyniki. Wpisuj dane z rzutu, specyfikacji i instrukcji. Wartości początkowe tworzą przykład edukacyjny; nie stanowią doboru mocy do Twojego pomieszczenia.</p>
<div class="rk-el-calc" id="rk-el-mat-calculator" role="region" aria-labelledby="rk-el-mat-calculator-title">
 <div class="rk-el-calc-head"><h3 id="rk-el-mat-calculator-title">1. Kalkulator maty grzewczej</h3><p>Obliczamy moc znamionową i geometrię. Nie wyznaczamy temperatury podłogi, rachunku za prąd ani zgodności całej instalacji elektrycznej.</p></div>
 <form id="rk-el-mat-form" novalidate="" aria-labelledby="rk-el-mat-calculator-title">
  <div class="rk-el-stage"><div class="rk-el-stage-head"><span class="rk-el-number" aria-hidden="true">1</span><div><h4>Powierzchnia do ułożenia</h4><p>Nie odejmuj ponownie wyłączeń od powierzchni już pomniejszonej.</p></div></div>
   <div class="rk-el-fields">
    <label class="rk-el-field"><span>Jak podajesz powierzchnię?</span><select id="rk-el-mat-area-method"><option value="net">Znam powierzchnię dostępną</option><option value="subtract">Pomieszczenie minus wyłączenia</option></select></label>
    <label class="rk-el-field"><span>Rola ogrzewania</span><select id="rk-el-mat-purpose"><option value="comfort">Komfort powierzchni podłogi</option><option value="main">Ogrzewanie podstawowe pomieszczenia</option></select><small>Wybór nie ustawia automatycznie W/m².</small></label>
    <label class="rk-el-field" id="rk-el-mat-net-wrap"><span>Dostępna powierzchnia [m²]</span><input id="rk-el-mat-net-area" type="text" inputmode="decimal" value="6" aria-describedby="rk-el-mat-net-help"><small id="rk-el-mat-net-help">Strefa, na której można ułożyć matę z zachowaniem wymaganych odstępów.</small></label>
    <div id="rk-el-mat-subtract-wrap" class="rk-el-fields rk-el-field-wide" hidden="">
     <label class="rk-el-field"><span>Powierzchnia pomieszczenia [m²]</span><input id="rk-el-mat-gross-area" type="text" inputmode="decimal" value="10"></label>
     <label class="rk-el-field"><span>Łączna powierzchnia wyłączeń [m²]</span><input id="rk-el-mat-excluded-area" type="text" inputmode="decimal" value="4"><small>Uwzględnij odstępy i zabudowę bez podwójnego liczenia.</small></label>
    </div>
   </div>
  </div>
  <div class="rk-el-stage" id="rk-el-mat-fields"><div class="rk-el-stage-head"><span class="rk-el-number" aria-hidden="true">2</span><div><h4>Parametry rozważanej maty</h4><p>Użyj powierzchni oraz mocy tego samego zestawu i napięcia znamionowego.</p></div></div>
   <div class="rk-el-fields">
    <label class="rk-el-field"><span>Moc znamionowa maty [W/m²]</span><input id="rk-el-mat-density" type="text" inputmode="decimal" value="150"><small>Wartość z karty produktu, nie uniwersalna moc do łazienki.</small></label>
    <label class="rk-el-field"><span>Powierzchnia rozważanej maty [m²]</span><input id="rk-el-mat-area" type="text" inputmode="decimal" value="5,5"><small>Porównujemy wybrany zestaw; nie zaokrąglamy dostępnej powierzchni w górę.</small></label>
    <label class="rk-el-field"><span>Szerokość pasa maty [m] — opcjonalnie</span><input id="rk-el-mat-width" type="text" inputmode="decimal" value="0,5"><small>Pozwala obliczyć długość pasa. To nie jest długość kabla w macie.</small></label>
   </div>
  </div>
  <details class="rk-el-optional" id="rk-el-mat-limits"><summary>Sprawdź ograniczenia z instrukcji — opcjonalnie</summary><div class="rk-el-optional-body"><p>Puste pole oznacza brak weryfikacji tego ograniczenia. Wpisana granica musi dotyczyć wybranego zestawu i konkretnej konstrukcji podłogi.</p><div class="rk-el-fields">
   <label class="rk-el-field"><span>Maksymalna dopuszczalna moc powierzchniowa [W/m²]</span><input id="rk-el-mat-max-density" type="text" inputmode="decimal" value="" placeholder="Wpisz z dokumentacji"><small>Sprawdzamy moc na m² maty.</small></label>
  </div></div></details>
  <div class="rk-el-actions"><button class="rk-el-primary" type="submit">Oblicz matę</button><button class="rk-el-secondary" type="button" id="rk-el-mat-reset">Przywróć przykład maty</button></div>
  <p class="rk-el-example-label" id="rk-el-mat-example-context">Przykład startowy: strefa 6 m², mata 5,5 m² i 150 W/m². Brak przyjętych ograniczeń montażowych.</p>
  <div class="rk-el-errors" id="rk-el-mat-validation" role="alert" hidden=""><p>Popraw dane przed interpretacją wyniku.</p><ul id="rk-el-mat-errors-list"></ul></div>
 </form>
 <noscript><div class="rk-el-errors"><p>Do działania kalkulatora potrzebny jest JavaScript. Wzory i przykłady poniżej pozwalają wykonać obliczenia ręcznie.</p></div></noscript>
 <div class="rk-el-result" id="rk-el-mat-result"><h3 id="rk-el-mat-result-title" tabindex="-1" role="status" aria-live="polite">Wynik pojawi się po uruchomieniu kalkulatora</h3><p class="rk-el-result-intro" id="rk-el-mat-result-intro">Wartości odnoszą się do wskazanego zestawu i wpisanych założeń.</p>
  <div id="rk-el-mat-results"><div class="rk-el-metrics">
   <div class="rk-el-metric"><span>Dostępna powierzchnia</span><strong id="rk-el-out-mat-net">—</strong><small>Strefa możliwa do wykorzystania.</small></div>
   <div class="rk-el-metric"><span>Powierzchnia maty</span><strong id="rk-el-out-mat-area">—</strong><small>Wymiar kupowanego zestawu.</small></div>
   <div class="rk-el-metric"><span>Moc elektryczna maty</span><strong id="rk-el-out-mat-power">—</strong><small>Przy warunkach znamionowych.</small></div>
   <div class="rk-el-metric"><span>Moc na m² maty</span><strong id="rk-el-out-mat-density">—</strong><small>Nie na m² całego pokoju.</small></div>
   <div class="rk-el-metric"><span>Udział w dostępnej strefie</span><strong id="rk-el-out-mat-coverage">—</strong><small>Porównanie powierzchni, nie plan ułożenia.</small></div>
   <div class="rk-el-metric"><span>Pozostała powierzchnia</span><strong id="rk-el-out-mat-remaining">—</strong><small id="rk-el-out-mat-remaining-help">Różnica względem dostępnej strefy.</small></div>
  </div><div class="rk-el-result-extra"><p id="rk-el-out-mat-strip">Długość pasa maty zostanie obliczona po podaniu szerokości.</p></div></div>
  <div class="rk-el-result-columns"><div class="rk-el-result-column"><h4>Ocena wpisanych danych</h4><ul id="rk-el-mat-findings"><li>Oczekiwanie na obliczenia.</li></ul></div><div class="rk-el-result-column"><h4>Co nadal trzeba sprawdzić</h4><ul id="rk-el-mat-checks"><li>Instrukcję zestawu, plan ułożenia i konstrukcję podłogi.</li></ul></div></div>
  <p class="rk-el-disclaimer">Wynik dotyczy mocy znamionowej i uproszczonej geometrii. Nie potwierdza mocy użytecznej oddawanej do pokoju, temperatury powierzchni ani bezpieczeństwa całego obwodu. Dobór zabezpieczeń, zasilania i wykonanie pomiarów wymagają oceny właściwego specjalisty.</p>
 </div>
</div>
<div class="rk-el-calc" id="rk-el-cable-calculator" role="region" aria-labelledby="rk-el-cable-calculator-title">
 <div class="rk-el-calc-head"><h3 id="rk-el-cable-calculator-title">2. Kalkulator kabla grzewczego</h3><p>Obliczamy moc znamionową i geometrię. Nie wyznaczamy temperatury podłogi, rachunku za prąd ani zgodności całej instalacji elektrycznej.</p></div>
 <form id="rk-el-cable-form" novalidate="" aria-labelledby="rk-el-cable-calculator-title">
  <div class="rk-el-stage"><div class="rk-el-stage-head"><span class="rk-el-number" aria-hidden="true">1</span><div><h4>Powierzchnia do ułożenia</h4><p>Nie odejmuj ponownie wyłączeń od powierzchni już pomniejszonej.</p></div></div>
   <div class="rk-el-fields">
    <label class="rk-el-field"><span>Jak podajesz powierzchnię?</span><select id="rk-el-cable-area-method"><option value="net">Znam powierzchnię dostępną</option><option value="subtract">Pomieszczenie minus wyłączenia</option></select></label>
    <label class="rk-el-field"><span>Rola ogrzewania</span><select id="rk-el-cable-purpose"><option value="comfort">Komfort powierzchni podłogi</option><option value="main">Ogrzewanie podstawowe pomieszczenia</option></select><small>Wybór nie ustawia automatycznie W/m².</small></label>
    <label class="rk-el-field" id="rk-el-cable-net-wrap"><span>Dostępna powierzchnia [m²]</span><input id="rk-el-cable-net-area" type="text" inputmode="decimal" value="6" aria-describedby="rk-el-cable-net-help"><small id="rk-el-cable-net-help">Dla kabla: strefa, w której rzeczywiście go ułożysz.</small></label>
    <div id="rk-el-cable-subtract-wrap" class="rk-el-fields rk-el-field-wide" hidden="">
     <label class="rk-el-field"><span>Powierzchnia pomieszczenia [m²]</span><input id="rk-el-cable-gross-area" type="text" inputmode="decimal" value="10"></label>
     <label class="rk-el-field"><span>Łączna powierzchnia wyłączeń [m²]</span><input id="rk-el-cable-excluded-area" type="text" inputmode="decimal" value="4"><small>Uwzględnij odstępy i zabudowę bez podwójnego liczenia.</small></label>
    </div>
   </div>
  </div>
  <div class="rk-el-stage" id="rk-el-cable-fields"><div class="rk-el-stage-head"><span class="rk-el-number" aria-hidden="true">2</span><div><h4>Założenie i kompletny zestaw kabla</h4><p>Najpierw wynik teoretyczny, następnie przeliczenie rzeczywistej długości.</p></div></div>
   <div class="rk-el-fields">
    <label class="rk-el-field"><span>Przyjęta moc powierzchniowa [W/m²]</span><input id="rk-el-target-density" type="text" inputmode="decimal" value="125"><small>Założenie do porównania wariantów. Kalkulator nie dobiera go z metrażu.</small></label>
    <label class="rk-el-field"><span>Znamionowa moc liniowa kabla [W/m]</span><input id="rk-el-linear-power" type="text" inputmode="decimal" value="10"><small>Dla czynnego przewodu przy właściwym napięciu znamionowym.</small></label>
    <label class="rk-el-field rk-el-field-wide"><span>Długość czynna rozważanego zestawu [m] — opcjonalnie</span><input id="rk-el-set-length" type="text" inputmode="decimal" value="" placeholder="Np. 80"><small>Bez przewodu zimnego. Długości kabla dwużyłowego nie podwajamy. Puste pole pozostawia wynik teoretyczny.</small></label>
   </div>
  </div>
  <details class="rk-el-optional" id="rk-el-cable-limits"><summary>Sprawdź ograniczenia z instrukcji — opcjonalnie</summary><div class="rk-el-optional-body"><p>Puste pole oznacza brak weryfikacji tego ograniczenia. Wpisana granica musi dotyczyć wybranego zestawu i konkretnej konstrukcji podłogi.</p><div class="rk-el-fields">
   <label class="rk-el-field" id="rk-el-min-spacing-wrap"><span>Minimalny dopuszczalny rozstaw osiowy [cm]</span><input id="rk-el-min-spacing" type="text" inputmode="decimal" value="" placeholder="Wpisz z instrukcji"><small>Sprawdzamy wynik średni; plan musi zachować wymagane odległości również lokalnie.</small></label>
   <label class="rk-el-field"><span>Maksymalna dopuszczalna moc powierzchniowa [W/m²]</span><input id="rk-el-cable-max-density" type="text" inputmode="decimal" value="" placeholder="Wpisz z dokumentacji"><small>Sprawdzamy moc na m² strefy ułożenia kabla.</small></label>
  </div></div></details>
  <div class="rk-el-actions"><button class="rk-el-primary" type="submit">Oblicz kabel</button><button class="rk-el-secondary" type="button" id="rk-el-cable-reset">Przywróć przykład kabla</button><button class="rk-el-secondary" type="button" id="rk-el-example-cable">Sprawdź przykład kabla 80 m</button></div>
  <p class="rk-el-example-label" id="rk-el-cable-example-context">Przykład startowy: strefa 6 m², założenie 125 W/m² i kabel 10 W/m. Długość zestawu i ograniczenia pozostają do uzupełnienia.</p>
  <div class="rk-el-errors" id="rk-el-cable-validation" role="alert" hidden=""><p>Popraw dane przed interpretacją wyniku.</p><ul id="rk-el-cable-errors-list"></ul></div>
 </form>
 <noscript><div class="rk-el-errors"><p>Do działania kalkulatora potrzebny jest JavaScript. Wzory i przykłady poniżej pozwalają wykonać obliczenia ręcznie.</p></div></noscript>
 <div class="rk-el-result" id="rk-el-cable-result"><h3 id="rk-el-cable-result-title" tabindex="-1" role="status" aria-live="polite">Wynik pojawi się po uruchomieniu kalkulatora</h3><p class="rk-el-result-intro" id="rk-el-cable-result-intro">Wartości odnoszą się do wskazanego zestawu i wpisanych założeń.</p>
  <div id="rk-el-cable-results"><h4>Wynik teoretyczny dla przyjętych W/m²</h4><div class="rk-el-metrics rk-el-metrics-four">
   <div class="rk-el-metric"><span>Strefa ułożenia</span><strong id="rk-el-out-cable-area">—</strong></div>
   <div class="rk-el-metric"><span>Przyjęta moc elektryczna</span><strong id="rk-el-out-ideal-power">—</strong></div>
   <div class="rk-el-metric"><span>Teoretyczna długość czynna</span><strong id="rk-el-out-ideal-length">—</strong></div>
   <div class="rk-el-metric"><span>Przybliżony rozstaw osiowy</span><strong id="rk-el-out-ideal-spacing">—</strong></div>
  </div><h4>Parametry rozważanego kompletnego zestawu</h4><div class="rk-el-metrics rk-el-metrics-four">
   <div class="rk-el-metric"><span>Długość czynna zestawu</span><strong id="rk-el-out-set-length">—</strong></div>
   <div class="rk-el-metric"><span>Moc elektryczna zestawu</span><strong id="rk-el-out-set-power">—</strong></div>
   <div class="rk-el-metric"><span>Moc na m² strefy</span><strong id="rk-el-out-set-density">—</strong></div>
   <div class="rk-el-metric"><span>Przybliżony rozstaw zestawu</span><strong id="rk-el-out-set-spacing">—</strong></div>
  </div><div class="rk-el-result-extra"><p id="rk-el-out-cable-comparison">Podaj rzeczywistą długość, aby porównać kompletny zestaw z założeniem.</p></div></div>
  <div class="rk-el-result-columns"><div class="rk-el-result-column"><h4>Ocena wpisanych danych</h4><ul id="rk-el-cable-findings"><li>Oczekiwanie na obliczenia.</li></ul></div><div class="rk-el-result-column"><h4>Co nadal trzeba sprawdzić</h4><ul id="rk-el-cable-checks"><li>Instrukcję zestawu, plan ułożenia i konstrukcję podłogi.</li></ul></div></div>
  <p class="rk-el-disclaimer">Wynik dotyczy mocy znamionowej i uproszczonej geometrii. Nie potwierdza mocy użytecznej oddawanej do pokoju, temperatury powierzchni ani bezpieczeństwa całego obwodu. Dobór zabezpieczeń, zasilania i wykonanie pomiarów wymagają oceny właściwego specjalisty.</p>
 </div>
</div>
<div class="rk-el-check-panel"><h3>Zanim kupisz zestaw, sprawdź te pięć danych</h3><p><strong>Powierzchnia, wymiary strefy, moc znamionowa, ograniczenia montażowe i zgodność warstw podłogi.</strong> Sam wynik w watach nie zastępuje rozrysowania maty lub kabla. Porównaj parametry dokładnego zestawu z jego dokumentacją, zanim zamówisz materiał.</p></div>
</section>
<section class="rk-el-section " id="rk-el-density"><span class="rk-el-eyebrow">Moc wynika z zastosowania</span><h2 class="rk-el-section-title">Ile W/m² potrzebuje elektryczne ogrzewanie podłogowe?</h2><p class="rk-el-lead">Wartości 100, 150 czy 200 W/m² spotykane w ofertach opisują określone produkty. Nie są samodzielnym doborem ogrzewania do dowolnego pokoju. Najpierw określ rolę systemu i dopuszczony układ warstw.</p><div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Komfort podłogi</h3><p>Celem może być przyjemna temperatura płytek poza sezonem. Liczą się sterowanie, bezwładność, dostępna strefa i dopuszczalna temperatura, nie wyłącznie straty całego pomieszczenia.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Ogrzewanie podstawowe</h3><p>Potrzebne jest projektowe obciążenie cieplne pokoju i sprawdzenie zdolności oddawania ciepła przez podłogę. Gdy strefa grzejna jest mała, samo zwiększenie W/m² może przekroczyć ograniczenia.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Konstrukcja podłogi</h3><p>Położenie kabla, grubość warstw, izolacja w dół i opór okładziny zmieniają warunki pracy. Identyczna moc elektryczna nie oznacza identycznego czasu nagrzewania ani strumienia ciepła w górę.</p></div></div><div class="rk-el-note "><p><strong>Kalkulator nie przypisuje automatycznej mocy do nazwy pomieszczenia.</strong> W kalkulatorze maty podajesz parametr produktu. W kalkulatorze kabla wpisujesz założenie do obliczeń, które musi być sprawdzone dla wybranego zastosowania.</p></div><p class="rk-el-copy">Początek doboru ogrzewania podstawowego wyjaśnia poradnik <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne w budynkach</a>. Wskaźnik dla całego domu nie zastępuje obciążenia konkretnej łazienki lub pokoju.</p></section>
<section class="rk-el-section " id="rk-el-mat"><span class="rk-el-eyebrow">Powierzchnia produktu i kształt podłogi</span><h2 class="rk-el-section-title">Jak dobrać powierzchnię maty grzewczej?</h2>
<p class="rk-el-lead">Mata ma fabrycznie określoną powierzchnię, moc i geometrię przewodu. Porównuj cały zestaw z dostępną strefą. Zakup większej maty, aby „mieć zapas”, może uniemożliwić prawidłowe ułożenie.</p>
<div class="rk-el-formula">P<sub>maty</sub> [W] = A<sub>maty</sub> [m²] × q<sub>maty</sub> [W/m²]</div>
<div class="rk-el-formula">Długość pasa [m] = A<sub>maty</sub> [m²] ÷ szerokość pasa [m]</div>
<div class="rk-el-table-wrap"><table><thead><tr><th scope="col">Co porównać</th><th scope="col">Dlaczego to ważne</th></tr></thead><tbody><tr><td data-label="Co porównać"><strong>Powierzchnia maty i strefy</strong></td><td data-label="Dlaczego to ważne">Mata nie może być dopasowana przez nakładanie na siebie elementów grzejnych. Sama zgodność m² nie potwierdza geometrii.</td></tr><tr><td data-label="Co porównać"><strong>Szerokość pasa</strong></td><td data-label="Dlaczego to ważne">Decyduje, czy pas zmieści się między przeszkodami i jak zaplanować zmiany kierunku.</td></tr><tr><td data-label="Co porównać"><strong>Moc W/m² maty</strong></td><td data-label="Dlaczego to ważne">Musi być dopuszczona w konkretnym układzie warstw i pod danym wykończeniem.</td></tr><tr><td data-label="Co porównać"><strong>Sposób zmiany kierunku</strong></td><td data-label="Dlaczego to ważne">Ewentualne przecięcie samej siatki i obracanie pasa wykonuje się tylko w sposób opisany w instrukcji. Przewód grzejny pozostaje nienaruszony.</td></tr><tr><td data-label="Co porównać"><strong>Połączenia i przewód zimny</strong></td><td data-label="Dlaczego to ważne">Ich położenie oraz sposób zatopienia i prowadzenia również wymagają zaplanowania.</td></tr></tbody></table></div><div class="rk-el-note rk-el-note-good"><p>Dla maty 5,5 m² o szerokości 0,5 m długość pasa wynosi 11 m. Nie oznacza to 11 m kabla grzejnego. Długość przewodu zależy od konstrukcji maty i danych konkretnego wyrobu.</p></div></section>
<section class="rk-el-section rk-el-soft" id="rk-el-cable"><span class="rk-el-eyebrow">Długość czynna i średni rozstaw</span><h2 class="rk-el-section-title">Ile metrów kabla potrzeba i jaki będzie rozstaw?</h2>
<p class="rk-el-lead">Dla oporowego zestawu kablowego przyjmujemy znamionową moc liniową z dokumentacji. Wzory porządkują zależność między mocą, długością i powierzchnią; rzeczywisty plan musi jeszcze uwzględnić nawroty oraz wymagane odległości.</p>
<div class="rk-el-formula">P [W] = A [m²] × q [W/m²]</div>
<div class="rk-el-formula">L [m] = P [W] ÷ p<sub>l</sub> [W/m]</div>
<div class="rk-el-formula">s [cm] ≈ 100 × A [m²] ÷ L [m]</div>
<p class="rk-el-copy">A oznacza strefę ułożenia, q przyjętą moc powierzchniową, p<sub>l</sub> moc liniową, L długość czynną, a s przybliżony rozstaw osiowy. Dla kabla o mocy 10 W/m teoretyczna ilość na 1 m² wynosi q ÷ 10. Przy założeniu 125 W/m² będzie to 12,5 m kabla na m².</p>
<div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Cały zestaw oporowy</h3><p>Nie traktuj długości obliczeniowej jako polecenia skrócenia kupionego zestawu. Zmiana długości oporowego elementu zmienia jego właściwości; dopuszczone działania określa dokumentacja.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Czynny i zimny odcinek</h3><p>Przewód doprowadzający zasilanie nie jest dodatkową długością grzejną. Sprawdź, czy deklarowany metraż obejmuje część grzejną czy sumę różnych odcinków.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Kabel dwużyłowy</h3><p>Dwie żyły nie oznaczają podwojenia długości rozłożonego przewodu. W kalkulatorze podaj metraż czynnego zestawu wskazany w jego specyfikacji.</p></div></div><div class="rk-el-note "><p>Artykuł i kalkulator dotyczą znamionowych oporowych zestawów do ogrzewania podłogi. Kabli samoregulujących, przewodów docinanych według odrębnej procedury i instalacji przeciwoblodzeniowych nie dobieramy tym modelem.</p></div><p class="rk-el-copy">Rozstaw liczony z A/L jest wartością średnią. Nie potwierdza zachowania lokalnych odległości między przewodami, promieni gięcia, odstępów od ścian ani poprawnego przejścia przez nieregularną strefę.</p></section>
<section class="rk-el-section " id="rk-el-spacing"><span class="rk-el-eyebrow">Interaktywny wykres edukacyjny</span><h2 class="rk-el-section-title">Jak rozstaw kabla wpływa na W/m²?</h2>
<p class="rk-el-lead">Przy tej samej mocy liniowej mniejszy rozstaw oznacza więcej kabla i większą moc elektryczną na m². Wykres przedstawia tę zależność algebraiczną. Nie symuluje temperatury ani szybkości nagrzewania.</p>
<div class="rk-el-formula">q [W/m²] ≈ 100 × p<sub>l</sub> [W/m] ÷ s [cm]</div>
<div class="rk-el-chart" id="rk-el-chart"><h3 id="rk-el-chart-title">Rozstaw a zainstalowana moc powierzchniowa</h3><p id="rk-el-chart-help">Wykres korzysta wyłącznie z danych kalkulatora kabla. Wskazuj punkty wykresu lub użyj suwaka. Podgląd wariantu nie zmienia danych kupowanego zestawu.</p>
 <div class="rk-el-chart-empty" id="rk-el-chart-empty">Wykres wymaga poprawnych danych w kalkulatorze kabla.</div>
 <div id="rk-el-chart-active" hidden="">
  <div class="rk-el-chart-legend"><span><i class="rk-el-swatch" aria-hidden="true"></i>Zależność dla wpisanych W/m</span><span><i class="rk-el-swatch rk-el-swatch-ideal" aria-hidden="true"></i>Założenie teoretyczne</span><span><i class="rk-el-swatch rk-el-swatch-set" aria-hidden="true"></i>Rozważany zestaw</span><span><i class="rk-el-swatch rk-el-swatch-limit" aria-hidden="true"></i>Wpisane ograniczenia</span></div>
  <div class="rk-el-chart-holder" id="rk-el-chart-holder"><svg class="rk-el-chart-svg" id="rk-el-chart-svg" viewBox="0 0 800 340" role="img" aria-labelledby="rk-el-chart-title rk-el-chart-desc"><desc id="rk-el-chart-desc">Krzywa q równa się 100 razy moc liniowa podzielona przez rozstaw. Ograniczenia odnoszą się wyłącznie do wartości wpisanych z instrukcji.</desc></svg></div>
  <label class="rk-el-chart-slider" for="rk-el-spacing-slider">Rozstaw badanego wariantu <input type="range" id="rk-el-spacing-slider" min="5" max="25" step="0.1" value="10" aria-describedby="rk-el-chart-help"></label>
  <div class="rk-el-preview"><div><span>Rozstaw osiowy</span><strong id="rk-el-preview-spacing">—</strong></div><div><span>Moc powierzchniowa</span><strong id="rk-el-preview-density">—</strong></div><div><span>Teoretyczna długość</span><strong id="rk-el-preview-length">—</strong></div><div><span>Moc elektryczna</span><strong id="rk-el-preview-power">—</strong></div></div>
  <div class="rk-el-preview-status" id="rk-el-preview-status">Brak oceny ograniczeń.</div>
  <p class="rk-el-disclaimer" id="rk-el-chart-context">Zakres osi służy badaniu wariantów. Nie jest zalecanym zakresem montażu. Zacieniowane fragmenty oznaczają przekroczenie podanej granicy; pozostały obszar nie potwierdza zgodności całej instalacji.</p>
 </div>
</div>
</section>
<section class="rk-el-section rk-el-soft" id="rk-el-heat"><span class="rk-el-eyebrow">Moc elektryczna i ciepło w pomieszczeniu</span><h2 class="rk-el-section-title">Czy mata lub kabel mogą ogrzać całe pomieszczenie?</h2>
<p class="rk-el-lead">Mogą pełnić funkcję ogrzewania podstawowego, jeśli cały układ zapewni wymagane ciepło w warunkach projektowych. Do potwierdzenia potrzebne są obciążenie pomieszczenia i charakterystyka rzeczywistej podłogi.</p>
<div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Moc zainstalowana</h3><p>To moc elektryczna zestawu przy warunkach znamionowych. Ciepło rozchodzi się w konstrukcji, a część może płynąć w kierunku nieużytecznym dla ogrzewanego pokoju.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Moc oddawana w górę</h3><p>Zależy od warstw, izolacji, temperatury oraz sterowania. Limity okładziny i podłogi mogą ograniczać pracę mimo większej mocy przewodu.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Straty konkretnego pokoju</h3><p>Ogrzewanie musi pokryć obciążenie przy obliczeniowych warunkach zewnętrznych. Dobre samopoczucie przy ciepłych płytkach nie potwierdza pokrycia tego obciążenia.</p></div></div><div class="rk-el-note "><p><strong>Nie stosujemy automatycznej oceny „wystarczy”, gdy moc kabla jest większa od strat pokoju.</strong> Trzeba jeszcze potwierdzić możliwą moc użyteczną, dopuszczalne temperatury i warunki montażu. Powiększanie W/m² bez tej oceny może prowadzić do niewłaściwego doboru.</p></div><p class="rk-el-copy">Dla instalacji pomocniczej najpierw opisz oczekiwany komfort i harmonogram. Dla ogrzewania podstawowego zacznij od obliczeń pomieszczenia, a następnie sprawdź, czy dostępna strefa podłogi może spełnić to zadanie.</p></section>
<section class="rk-el-section " id="rk-el-example"><span class="rk-el-eyebrow">Przykład bez uniwersalnej mocy</span><h2 class="rk-el-section-title">Dobór do łazienki krok po kroku</h2>
<p class="rk-el-lead">Poniższe liczby są hipotetycznym przykładem obliczeń. Nie oznaczają, że każda łazienka powinna mieć 125 albo 150 W/m² ani minimalny rozstaw 8 cm.</p>
<ol class="rk-el-steps"><li>Powierzchnia pomieszczenia wynosi <strong>10 m²</strong>.</li><li>Suma wyłączeń i odstępów z planu wynosi <strong>4 m²</strong>.</li><li>Do montażu pozostaje <strong>6 m²</strong>, których kształt trzeba sprawdzić na rzucie.</li><li>Porównujemy matę <strong>5,5 m² × 150 W/m² = 825 W</strong>. Zajmuje 91,7% dostępnej strefy.</li><li>W wariancie kabla przyjmujemy edukacyjnie <strong>125 W/m² i 10 W/m</strong>. Wynik teoretyczny to 750 W, 75 m i rozstaw około 8 cm.</li><li>Sprawdzamy parametry faktycznego zestawu, a następnie porównujemy je z instrukcją.</li></ol>
<div class="rk-el-table-wrap"><table><caption>Hipotetyczne warianty: tabela nie potwierdza dostępności zestawów ani dopuszczenia montażu.</caption><thead><tr><th scope="col">Wariant kabla</th><th scope="col">Moc elektryczna</th><th scope="col">Moc na 6 m²</th><th scope="col">Rozstaw przybliżony</th></tr></thead><tbody><tr><td data-label="Wariant kabla">70 m przy 10 W/m</td><td data-label="Moc elektryczna">700 W</td><td data-label="Moc na 6 m²">116,7 W/m²</td><td data-label="Rozstaw przybliżony">8,57 cm</td></tr><tr><td data-label="Wariant kabla">75 m przy 10 W/m — wynik teoretyczny</td><td data-label="Moc elektryczna">750 W</td><td data-label="Moc na 6 m²">125,0 W/m²</td><td data-label="Rozstaw przybliżony">8,00 cm</td></tr><tr><td data-label="Wariant kabla">80 m przy 10 W/m</td><td data-label="Moc elektryczna">800 W</td><td data-label="Moc na 6 m²">133,3 W/m²</td><td data-label="Rozstaw przybliżony">7,50 cm</td></tr></tbody></table></div><div class="rk-el-note rk-el-note-stop"><p>Jeśli dokumentacja analizowanego systemu wymagałaby minimum 8 cm, zestaw 80 m na strefie 6 m² nie mieściłby się w tym uproszczonym sprawdzeniu. Nie rozwiązuje się tego przez skrócenie zestawu ani układanie przewodu w niedopuszczonych miejscach.</p></div><p class="rk-el-copy">Przycisk „Sprawdź przykład kabla 80 m” wczytuje właśnie ten przypadek oraz hipotetyczne ograniczenia: minimum 8 cm i maksimum 150 W/m². Przed użyciem własnych danych zastąp je wymaganiami swojego systemu albo usuń, jeżeli jeszcze ich nie znasz.</p></section>
<section class="rk-el-section rk-el-soft" id="rk-el-floor"><span class="rk-el-eyebrow">Zgodność całego układu warstw</span><h2 class="rk-el-section-title">Płytki, panele i drewno — co sprawdzić przed zakupem?</h2>
<p class="rk-el-lead">Dobór dotyczy nie tylko przewodu. Sprawdź, czy element grzejny, podłoże, masa montażowa, hydroizolacja i wykończenie są przewidziane do wspólnej pracy w takim układzie.</p>
<div class="rk-el-table-wrap"><table><thead><tr><th scope="col">Wykończenie</th><th scope="col">Najważniejsze sprawdzenie</th><th scope="col">Błędne uproszczenie</th></tr></thead><tbody><tr><td data-label="Wykończenie"><strong>Płytki</strong></td><td data-label="Najważniejsze sprawdzenie">Dopuszczony sposób zatopienia elementu i kompatybilność kleju, podłoża oraz hydroizolacji.</td><td data-label="Błędne uproszczenie">„Pod płytkami każda moc jest dopuszczalna”.</td></tr><tr><td data-label="Wykończenie"><strong>Panele i winyl</strong></td><td data-label="Najważniejsze sprawdzenie">Dopuszczenie produktu do konkretnego ogrzewania, ograniczenia temperatury i wymagane warstwy.</td><td data-label="Błędne uproszczenie">„Symbol ogrzewania podłogowego potwierdza każdy sposób montażu”.</td></tr><tr><td data-label="Wykończenie"><strong>Drewno</strong></td><td data-label="Najważniejsze sprawdzenie">Wymagania dotyczące temperatury, wilgotności, stabilności i rodzaju układu grzewczego.</td><td data-label="Błędne uproszczenie">„Wystarczy obniżyć nastawę termostatu”.</td></tr><tr><td data-label="Wykończenie"><strong>Dywan i dodatkowe warstwy</strong></td><td data-label="Najważniejsze sprawdzenie">Wpływ na oddawanie ciepła oraz dopuszczenie pokrywania ogrzewanej strefy.</td><td data-label="Błędne uproszczenie">„Wyposażenie ustawione po odbiorze nie ma znaczenia”.</td></tr></tbody></table></div><p class="rk-el-copy">Parametr materiałowy wyjaśnia poradnik o <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%C2%B2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">oporze cieplnym R wykończenia podłogi</a>. Jego wyliczenie pomaga ocenić warstwy, ale samo R nie potwierdza dopuszczenia maty lub kabla do montażu.</p><div class="rk-el-note rk-el-note-good"><p>Nie przenoś automatycznie na ogrzewanie elektryczne wszystkich liczb używanych w projektowaniu podłogówki wodnej. Granice temperatury, mocy i sposób wykonania należy ustalić dla konkretnego układu.</p></div></section>
<section class="rk-el-section " id="rk-el-control"><span class="rk-el-eyebrow">Sterowanie i sprawdzenie obwodu</span><h2 class="rk-el-section-title">Termostat, czujnik i instalacja elektryczna</h2>
<p class="rk-el-lead">Kalkulator podaje moc elektryczną zestawu. Na tej podstawie elektryk może rozpocząć weryfikację obwodu, obciążenia regulatora i wymaganych środków ochrony. Sam wynik w watach nie dobiera zabezpieczenia.</p>
<div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Sterowanie temperaturą</h3><p>Dobierz regulator i wymagane czujniki do zastosowania. Przy wrażliwym wykończeniu kontrola temperatury podłogi ma inne zadanie niż samo utrzymanie temperatury powietrza.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Obciążenie i ochrona</h3><p>Sprawdź parametry regulatora, sposób przełączania, zasilanie, obwód i środki ochrony przeciwporażeniowej. Łazienka wymaga także uwzględnienia warunków dla pomieszczenia z wanną lub prysznicem.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Odbiór i pomiary</h3><p>Przewidź oględziny, pomiary wymagane dla instalacji i zapisy parametrów zestawu na etapach robót. Rezystancja elementu, izolacja i ciągłość ochronna opisują różne sprawdzenia.</p></div></div><div class="rk-el-note rk-el-note-stop"><p>Nie uruchamiaj zestawu w sposób wykluczony przez instrukcję, w tym na zwiniętym kręgu. Pierwsze grzanie zatopionego układu musi uwzględniać wymagany czas i procedurę dla zastosowanych materiałów.</p></div><p class="rk-el-copy">Zakres sprawdzeń elektrycznych i wartości pomiarowe ustala się dla konkretnego układu. Nie podajemy tu jednej rezystancji właściwej dla wszystkich mat, uniwersalnego przekroju przewodu ani schematu samodzielnego podłączenia.</p></section>
<section class="rk-el-section rk-el-soft" id="rk-el-errors"><span class="rk-el-eyebrow">Pomyłki zmieniające dobór</span><h2 class="rk-el-section-title">Najczęstsze błędy przy doborze maty i kabla</h2><div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Powierzchnia brutto</h3><p>Kupowanie maty z metrażu pokoju bez wyłączeń może dać zestaw, którego nie da się prawidłowo rozłożyć.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Zapas przewodu</h3><p>Dodatkowe metry oporowego zestawu nie są zapasem do odcięcia. Trzeba przeliczyć jego moc i rozstaw dla całej długości.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Pomylenie W/m i W/m²</h3><p>Moc liniowa nie jest mocą powierzchniową. Rozstaw decyduje o ilości kabla na m².</p></div><div class="rk-el-card"><span class="rk-el-number">04</span><h3>Podwójna długość</h3><p>Kabel dwużyłowy nie wymaga mnożenia metrażu przez dwa. Przewód zimny również nie jest czynnym elementem grzejnym.</p></div><div class="rk-el-card"><span class="rk-el-number">05</span><h3>Moc jako diagnoza komfortu</h3><p>Więcej watów z etykiety nie naprawia niewłaściwej konstrukcji, ograniczeń temperatury lub zbyt małej strefy.</p></div><div class="rk-el-card"><span class="rk-el-number">06</span><h3>Pomijanie geometrii</h3><p>Średni rozstaw z kalkulatora nie chroni przed lokalnym zbliżeniem przewodów, krzyżowaniem ani niewłaściwymi nawrotami.</p></div><div class="rk-el-card"><span class="rk-el-number">07</span><h3>Brak danych ograniczeń</h3><p>Wynik bez znanego minimalnego rozstawu i dopuszczonej mocy pozostaje obliczeniem wymagającym dalszego sprawdzenia.</p></div><div class="rk-el-card"><span class="rk-el-number">08</span><h3>Waty jako rachunek</h3><p>Zainstalowana moc nie jest miesięczną energią. Harmonogram i termostat zmieniają rzeczywisty czas załączenia.</p></div><div class="rk-el-card"><span class="rk-el-number">09</span><h3>Brak dokumentacji robót</h3><p>Po zakryciu podłogi trudniej odtworzyć trasę i ustalić moment uszkodzenia bez zdjęć oraz zapisów pomiarów.</p></div></div></section>
<section class="rk-el-section " id="rk-el-checklist"><span class="rk-el-eyebrow">Dane dla wykonawcy i odbioru</span><h2 class="rk-el-section-title">Checklista przed zakupem i zakryciem ogrzewania</h2><p class="rk-el-lead">Zachowaj parametry zestawu oraz wynik obliczeń, ale dołącz też rzut. Dokumentacja powinna pozwolić odtworzyć, gdzie znajduje się ogrzewanie i jakie warunki przyjęto.</p><div class="rk-el-grid-3"><div class="rk-el-card"><span class="rk-el-number">01</span><h3>Określ rolę ogrzewania</h3><p>Ustal, czy podłoga zapewnia komfort powierzchni, czy jest ogrzewaniem podstawowym pomieszczenia.</p></div><div class="rk-el-card"><span class="rk-el-number">02</span><h3>Wyznacz strefę montażu</h3><p>Zaznacz wyłączenia i wymagane odstępy na rzucie, a następnie oblicz rzeczywistą powierzchnię.</p></div><div class="rk-el-card"><span class="rk-el-number">03</span><h3>Zapisz parametry zestawu</h3><p>Odczytaj moc, powierzchnię maty albo długość czynną i moc liniową kabla dla właściwego napięcia znamionowego.</p></div><div class="rk-el-card"><span class="rk-el-number">04</span><h3>Oblicz i porównaj warianty</h3><p>Policz moc, długość teoretyczną i przybliżony rozstaw; dla rzeczywistego zestawu wykonaj ponowne przeliczenie.</p></div><div class="rk-el-card"><span class="rk-el-number">05</span><h3>Sprawdź ograniczenia i warstwy</h3><p>Porównaj wynik z instrukcją, dopuszczonym wykończeniem, temperaturami i rzeczywistym planem ułożenia.</p></div><div class="rk-el-card"><span class="rk-el-number">06</span><h3>Zweryfikuj obwód i udokumentuj montaż</h3><p>Przekaż dane elektrykowi, przewidź wymagane pomiary i zachowaj zdjęcia oraz protokoły przed zakryciem.</p></div></div>
<div class="rk-el-check-panel"><h3>Co przekazać elektrykowi przed montażem?</h3><p>Plan strefy, moc i napięcie znamionowe zestawu, długość czynną lub powierzchnię maty, instrukcję montażu, dane regulatora i czujników oraz układ warstw podłogi. Wskaż rolę ogrzewania i ograniczenia wykończenia.</p><p>Przed zakryciem zachowaj zdjęcia tras i połączeń oraz wyniki wymaganych pomiarów. Jeżeli coś nie pasuje do dokumentacji, wyjaśnij to przed kolejnym etapem robót.</p></div></section>
<section class="rk-el-section rk-el-soft" id="rk-el-sources"><span class="rk-el-eyebrow">Oficjalne i edukacyjne podstawy</span><h2 class="rk-el-section-title">Źródła i zakres obliczeń</h2><p class="rk-el-lead">Odwołania poniżej prowadzą do instytucji normalizacyjnej i otwartego podręcznika akademickiego. W artykule nie wskazujemy marek ani sklepów. Wymagania szczegółowe trzeba sprawdzić w pełnej dokumentacji właściwej dla zastosowania.</p><div class="rk-el-source-grid"><div class="rk-el-source-card"><a href="https://webstore.iec.ch/en/publication/1909" target="_blank" rel="nofollow noopener noreferrer">IEC 60364-7-753:2014 — elektryczne ogrzewanie powierzchniowe</a><p>Oficjalna karta zakresu dotyczącego kabli grzejnych i wbudowanych systemów ogrzewania elektrycznego. Nie jest tabelą uniwersalnej mocy do każdej łazienki.</p></div><div class="rk-el-source-card"><a href="https://webstore.iec.ch/en/publication/114479" target="_blank" rel="nofollow noopener noreferrer">IEC 60800:2021+AMD1:2026 — oporowe kable grzejne</a><p>Oficjalna karta aktualnej wersji skonsolidowanej, obejmującej oporowe kable i zestawy do zastosowań niskotemperaturowych. Montaż i zestawianie elementów odnoszą się do instrukcji systemu.</p></div><div class="rk-el-source-card"><a href="https://webstore.iec.ch/en/publication/24656" target="_blank" rel="nofollow noopener noreferrer">IEC 60364-6:2016 — sprawdzanie instalacji</a><p>Oficjalna karta dotycząca sprawdzania początkowego i okresowego instalacji elektrycznej. Publiczny opis nie zastępuje pełnej procedury ani protokołu pomiarowego.</p></div><div class="rk-el-source-card"><a href="https://webstore.iec.ch/en/publication/28906" target="_blank" rel="nofollow noopener noreferrer">IEC 60364-7-701:2019 — pomieszczenia z wanną lub prysznicem</a><p>Oficjalna karta zakresu szczególnych wymagań dla instalacji w miejscach, w których przewidziano wannę albo prysznic.</p></div><div class="rk-el-source-card"><a href="https://openstax.org/books/university-physics-volume-2/pages/9-5-electrical-energy-and-power" target="_blank" rel="nofollow noopener noreferrer">OpenStax / Rice University — energia i moc elektryczna</a><p>Otwarty podręcznik akademicki wyjaśniający moc obwodu oraz przemianę energii w elemencie oporowym. Wzory powierzchni i długości w kalkulatorze są jawnymi zależnościami wymiarowymi.</p></div></div><div class="rk-el-note "><p>Publiczne karty norm potwierdzają tytuł, wydanie i zakres dokumentów. Nie zastępują ich pełnej treści. Normy IEC nie są automatycznie deklaracją spełnienia wszystkich aktualnych wymagań krajowych; właściwe dokumenty i instrukcje trzeba ustalić dla konkretnej instalacji.</p></div><div class="rk-el-note rk-el-note-stop"><p><strong>Zakres narzędzia:</strong> moc znamionowa, porównanie powierzchni, teoretyczna długość czynna i średni rozstaw. Kalkulator nie wyznacza OZC, mocy użytecznej podłogi, temperatury powierzchni, zużycia energii, zabezpieczenia obwodu ani dopuszczenia produktu. Wynik wymaga sprawdzenia geometrii, warstw i dokumentacji.</p></div></section>
<section class="rk-el-section " id="rk-el-faq"><span class="rk-el-eyebrow">Pytania przed zakupem</span><h2 class="rk-el-section-title">FAQ — kalkulator maty i kabla grzewczego</h2><div class="rk-el-faq"><details><summary>Ile kabla grzewczego potrzeba na 1 m²?</summary><div class="rk-el-faq-answer"><p>Teoretyczna długość na 1 m² wynosi przyjęta moc powierzchniowa W/m² podzielona przez moc liniową W/m. Dla 125 W/m² i 10 W/m daje to 12,5 m na m². Jest to przykład obliczenia, nie uniwersalne zalecenie. Rzeczywisty zestaw i rozstaw wymagają sprawdzenia w dokumentacji.</p></div></details><details><summary>Jak obliczyć rozstaw kabla grzewczego?</summary><div class="rk-el-faq-answer"><p>Przybliżony średni rozstaw osiowy w centymetrach wynosi 100 razy powierzchnia strefy w m² podzielona przez długość czynną w metrach. Wzór nie sprawdza lokalnych odległości, nawrotów i przeszkód; trzeba je uwzględnić na planie.</p></div></details><details><summary>Jak dużą matę kupić do łazienki?</summary><div class="rk-el-faq-answer"><p>Dobierz ją do powierzchni rzeczywiście dostępnej po uwzględnieniu wyłączeń i odstępów z instrukcji. Porównaj również szerokość pasa i kształt strefy. Sama suma metrów kwadratowych nie potwierdza, że mata da się prawidłowo ułożyć.</p></div></details><details><summary>Czy powierzchnię pod wanną i zabudową trzeba odjąć?</summary><div class="rk-el-faq-answer"><p>Odlicza się miejsca wyłączone z montażu przez dokumentację konkretnego systemu oraz wymagane odstępy. Rodzaj zabudowy i możliwość oddawania ciepła mają znaczenie. Nie odejmuj tego samego fragmentu podłogi dwukrotnie.</p></div></details><details><summary>Czy mata 150 W/m² wystarczy do ogrzewania pomieszczenia?</summary><div class="rk-el-faq-answer"><p>Sama moc znamionowa nie daje takiej odpowiedzi. Potrzebne są straty ciepła pomieszczenia, powierzchnia maty oraz ocena mocy użytecznej rzeczywistej podłogi przy dopuszczalnych temperaturach i zastosowanej okładzinie.</p></div></details><details><summary>Czy większa moc oznacza większe zużycie prądu?</summary><div class="rk-el-faq-answer"><p>Większa moc oznacza większy pobór podczas załączenia przy warunkach znamionowych. Zużycie energii zależy również od czasu pracy, strat, nastaw i sterowania. Nie można z samej mocy zestawu wyznaczyć wiarygodnego miesięcznego rachunku.</p></div></details><details><summary>Czy można skrócić kabel grzewczy?</summary><div class="rk-el-faq-answer"><p>Fabrycznego oporowego zestawu o określonej długości nie dopasowuje się przez dowolne odcinanie czynnego przewodu. Dopuszczone działania określa dokumentacja. Kalkulator nie obejmuje odrębnego doboru kabli samoregulujących ani przewodów przeznaczonych do docinania.</p></div></details><details><summary>Czy można przeciąć siatkę maty?</summary><div class="rk-el-faq-answer"><p>Jeżeli instrukcja dopuszcza zmianę kierunku przez przecięcie siatki, wykonuje się ją zgodnie z opisem systemu, bez uszkadzania kabla. Nie oznacza to zgody na skrócenie przewodu grzejnego.</p></div></details><details><summary>Czy przewód zimny wlicza się do długości grzejnej?</summary><div class="rk-el-faq-answer"><p>Nie. W obliczeniu mocy i rozstawu używa się czynnej długości grzejnej. Odcinek doprowadzający zasilanie oraz połączenia należy uwzględnić osobno w planie montażu.</p></div></details><details><summary>Czy kabel dwużyłowy liczy się podwójnie?</summary><div class="rk-el-faq-answer"><p>Nie. Podajesz długość czynnego zestawu wskazaną w specyfikacji. Liczba żył nie podwaja metrażu przewodu rozkładanego na podłodze.</p></div></details><details><summary>Czy kabel może się krzyżować lub stykać?</summary><div class="rk-el-faq-answer"><p>Nie planuj krzyżowania ani stykania przewodów wbrew instrukcji zestawu. Zachowaj wymagane odległości lokalne i sposób prowadzenia. Wyliczony średni rozstaw nie jest kontrolą każdego miejsca ułożenia.</p></div></details><details><summary>Czy matę można zamontować pod panelami albo drewnem?</summary><div class="rk-el-faq-answer"><p>Tylko w układzie dopuszczonym dla danego elementu grzejnego, wykończenia i pozostałych warstw. Sprawdź ograniczenia temperatury, mocy i sposób montażu. Ogólny symbol ogrzewania podłogowego nie potwierdza zgodności każdego systemu.</p></div></details><details><summary>Co zrobić, gdy długość teoretyczna nie odpowiada dostępnym zestawom?</summary><div class="rk-el-faq-answer"><p>Porównaj kompletne zestawy, ponownie obliczając moc, W/m² i rozstaw dla ich rzeczywistych długości. Dobór może wymagać zmiany zestawu lub założenia, zgodnie z dokumentacją. Nie rozwiązuj różnicy przez dowolne skracanie przewodu.</p></div></details><details><summary>Czy kalkulator dobiera termostat i zabezpieczenie elektryczne?</summary><div class="rk-el-faq-answer"><p>Nie. Podaje moc znamionową zestawu. Dobór zasilania, obwodu, zabezpieczeń, regulatora i wymaganych środków ochrony oraz sprawdzenie instalacji wymagają osobnej oceny.</p></div></details><details><summary>Czy z mocy maty można obliczyć miesięczny rachunek?</summary><div class="rk-el-faq-answer"><p>Można wyliczyć energię dla jawnie przyjętego czasu załączenia, ale nie będzie to prognoza rzeczywistej pracy termostatu. Rachunek wymaga znajomości zużycia energii i ceny, a nie tylko mocy w watach.</p></div></details><details><summary>Jakie pomiary wykonać przed zakryciem ogrzewania?</summary><div class="rk-el-faq-answer"><p>Zakres ustala się według instrukcji zestawu i wymagań instalacji. Należy przewidzieć właściwe oględziny oraz pomiary elementu, izolacji i ochrony, a także dokumentowanie ich na etapach robót. Pomiary oraz ich interpretację powierz osobie z odpowiednimi kwalifikacjami.</p></div></details></div></section>
<section class="rk-el-section rk-el-soft" id="rk-el-author"><span class="rk-el-eyebrow">Autor i metoda opracowania</span><h2 class="rk-el-section-title">Autor i opracowanie merytoryczne</h2>
<div class="rk-el-author-layout"><aside class="rk-el-author-side"><div class="rk-el-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji grzewczych i specjalista HVAC" width="400" height="400" loading="lazy" decoding="async"></div><div class="rk-el-author-name">Robert Kucharski</div><p class="rk-el-author-role">CEO portalu<br>specjalista HVAC i ogrzewania podłogowego</p><div class="rk-el-author-social" aria-label="Profile autora i portalu"><a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a><a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a><a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt HVAC w serwisie X">X</a></div></aside>
<div class="rk-el-author-main"><div class="rk-el-author-note">Powierzchnia, moc i długość muszą odnosić się do tego samego zestawu i tej samej strefy podłogi. Obliczenia są początkiem weryfikacji, a plan i dokumentacja pozwalają ocenić możliwość montażu.</div><p>Robert Kucharski opracowuje projekty instalacji grzewczych, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W poradnikach wyjaśnia różnicę między parametrem katalogowym, założeniem obliczeniowym i warunkami rzeczywistej instalacji.</p><p>W tym materiale zakres kalkulatora obejmuje moc znamionową oraz zależności geometryczne mat i oporowych zestawów kablowych. Ocena instalacji elektrycznej, dobór środków ochrony i wykonanie pomiarów stanowią odrębny zakres wymagający właściwych kompetencji.</p><p>Publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p><div class="rk-el-author-facts"><div><strong>Zakres</strong>HVAC, ogrzewanie podłogowe i obliczenia instalacji</div><div><strong>Metoda</strong>jawne wzory, dokumentacja i sprawdzenie ograniczeń</div><div><strong>Publikacja</strong>5 października 2026 r.</div></div></div></div>
</section></div></article>
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image"
      },
      "jobTitle": "Projektant instalacji grzewczych i specjalista HVAC",
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "obliczenia cieplne",
        "hydraulika instalacji grzewczych",
        "moc instalacji grzewczych"
      ],
      "worksFor": [
        {
          "@id": "https://projekt-ogrzewania.pl/#organization"
        },
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "width": 400,
      "height": 400,
      "caption": "Robert Kucharski — projektant instalacji grzewczych i specjalista HVAC"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-electric-breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Strona główna",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Poradniki",
          "item": "https://projekt-ogrzewania.pl/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Kalkulator maty i kabla grzewczego – ile W/m² i ile kabla potrzeba",
          "item": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#webpage",
      "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/",
      "name": "Kalkulator maty i kabla grzewczego – ile W/m² i ile kabla potrzeba",
      "description": "Kalkulator powierzchni maty, mocy elektrycznej, długości kabla grzewczego i rozstawu z jawnymi ograniczeniami obliczeń.",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-electric-breadcrumb"
      },
      "datePublished": "2026-10-05",
      "dateModified": "2026-10-05",
      "inLanguage": "pl-PL",
      "mainEntity": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#article"
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#article",
      "headline": "Kalkulator maty i kabla grzewczego – ile W/m² i ile kabla potrzeba",
      "description": "Jak obliczyć matę i oporowy zestaw kablowy: powierzchnia dostępna, W/m², W/m, długość czynna i średni rozstaw.",
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#webpage"
      },
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "datePublished": "2026-10-05",
      "dateModified": "2026-10-05",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "about": [
        "maty grzewcze",
        "oporowe kable grzejne",
        "elektryczne ogrzewanie podłogowe",
        "moc powierzchniowa",
        "rozstaw kabla grzewczego"
      ],
      "keywords": "kalkulator maty i kabla grzewczego, kable grzewcze kalkulator, ile kabla grzewczego na m², rozstaw kabla grzewczego",
      "hasPart": [
        {
          "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#calculator"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#howto"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#faq-schema"
        }
      ],
      "citation": [
        "https://webstore.iec.ch/en/publication/1909",
        "https://webstore.iec.ch/en/publication/114479",
        "https://webstore.iec.ch/en/publication/24656",
        "https://webstore.iec.ch/en/publication/28906",
        "https://openstax.org/books/university-physics-volume-2/pages/9-5-electrical-energy-and-power"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#calculator",
      "name": "Kalkulator maty i kabla grzewczego",
      "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-calc",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Nowoczesna przeglądarka internetowa",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#webpage"
      },
      "description": "Dwa niezależne kalkulatory: mocy maty oraz długości i rozstawu oporowego kabla. Porównanie kompletnego zestawu, kontrola wpisanych ograniczeń i wykres mocy względem rozstawu."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#howto",
      "name": "Jak sprawdzić matę lub kabel grzewczy przed zakupem",
      "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist",
      "inLanguage": "pl-PL",
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Określ rolę ogrzewania",
          "text": "Ustal, czy podłoga zapewnia komfort powierzchni, czy jest ogrzewaniem podstawowym pomieszczenia.",
          "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist"
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Wyznacz strefę montażu",
          "text": "Zaznacz wyłączenia i wymagane odstępy na rzucie, a następnie oblicz rzeczywistą powierzchnię.",
          "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist"
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Zapisz parametry zestawu",
          "text": "Odczytaj moc, powierzchnię maty albo długość czynną i moc liniową kabla dla właściwego napięcia znamionowego.",
          "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist"
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Oblicz i porównaj warianty",
          "text": "Policz moc, długość teoretyczną i przybliżony rozstaw; dla rzeczywistego zestawu wykonaj ponowne przeliczenie.",
          "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist"
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Sprawdź ograniczenia i warstwy",
          "text": "Porównaj wynik z instrukcją, dopuszczonym wykończeniem, temperaturami i rzeczywistym planem ułożenia.",
          "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist"
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Zweryfikuj obwód i udokumentuj montaż",
          "text": "Przekaż dane elektrykowi, przewidź wymagane pomiary i zachowaj zdjęcia oraz protokoły przed zakryciem.",
          "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-checklist"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#faq-schema",
      "url": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#rk-el-faq",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/#webpage"
      },
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Ile kabla grzewczego potrzeba na 1 m²?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Teoretyczna długość na 1 m² wynosi przyjęta moc powierzchniowa W/m² podzielona przez moc liniową W/m. Dla 125 W/m² i 10 W/m daje to 12,5 m na m². Jest to przykład obliczenia, nie uniwersalne zalecenie. Rzeczywisty zestaw i rozstaw wymagają sprawdzenia w dokumentacji."
          }
        },
        {
          "@type": "Question",
          "name": "Jak obliczyć rozstaw kabla grzewczego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Przybliżony średni rozstaw osiowy w centymetrach wynosi 100 razy powierzchnia strefy w m² podzielona przez długość czynną w metrach. Wzór nie sprawdza lokalnych odległości, nawrotów i przeszkód; trzeba je uwzględnić na planie."
          }
        },
        {
          "@type": "Question",
          "name": "Jak dużą matę kupić do łazienki?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Dobierz ją do powierzchni rzeczywiście dostępnej po uwzględnieniu wyłączeń i odstępów z instrukcji. Porównaj również szerokość pasa i kształt strefy. Sama suma metrów kwadratowych nie potwierdza, że mata da się prawidłowo ułożyć."
          }
        },
        {
          "@type": "Question",
          "name": "Czy powierzchnię pod wanną i zabudową trzeba odjąć?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Odlicza się miejsca wyłączone z montażu przez dokumentację konkretnego systemu oraz wymagane odstępy. Rodzaj zabudowy i możliwość oddawania ciepła mają znaczenie. Nie odejmuj tego samego fragmentu podłogi dwukrotnie."
          }
        },
        {
          "@type": "Question",
          "name": "Czy mata 150 W/m² wystarczy do ogrzewania pomieszczenia?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sama moc znamionowa nie daje takiej odpowiedzi. Potrzebne są straty ciepła pomieszczenia, powierzchnia maty oraz ocena mocy użytecznej rzeczywistej podłogi przy dopuszczalnych temperaturach i zastosowanej okładzinie."
          }
        },
        {
          "@type": "Question",
          "name": "Czy większa moc oznacza większe zużycie prądu?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Większa moc oznacza większy pobór podczas załączenia przy warunkach znamionowych. Zużycie energii zależy również od czasu pracy, strat, nastaw i sterowania. Nie można z samej mocy zestawu wyznaczyć wiarygodnego miesięcznego rachunku."
          }
        },
        {
          "@type": "Question",
          "name": "Czy można skrócić kabel grzewczy?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Fabrycznego oporowego zestawu o określonej długości nie dopasowuje się przez dowolne odcinanie czynnego przewodu. Dopuszczone działania określa dokumentacja. Kalkulator nie obejmuje odrębnego doboru kabli samoregulujących ani przewodów przeznaczonych do docinania."
          }
        },
        {
          "@type": "Question",
          "name": "Czy można przeciąć siatkę maty?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Jeżeli instrukcja dopuszcza zmianę kierunku przez przecięcie siatki, wykonuje się ją zgodnie z opisem systemu, bez uszkadzania kabla. Nie oznacza to zgody na skrócenie przewodu grzejnego."
          }
        },
        {
          "@type": "Question",
          "name": "Czy przewód zimny wlicza się do długości grzejnej?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. W obliczeniu mocy i rozstawu używa się czynnej długości grzejnej. Odcinek doprowadzający zasilanie oraz połączenia należy uwzględnić osobno w planie montażu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy kabel dwużyłowy liczy się podwójnie?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Podajesz długość czynnego zestawu wskazaną w specyfikacji. Liczba żył nie podwaja metrażu przewodu rozkładanego na podłodze."
          }
        },
        {
          "@type": "Question",
          "name": "Czy kabel może się krzyżować lub stykać?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie planuj krzyżowania ani stykania przewodów wbrew instrukcji zestawu. Zachowaj wymagane odległości lokalne i sposób prowadzenia. Wyliczony średni rozstaw nie jest kontrolą każdego miejsca ułożenia."
          }
        },
        {
          "@type": "Question",
          "name": "Czy matę można zamontować pod panelami albo drewnem?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Tylko w układzie dopuszczonym dla danego elementu grzejnego, wykończenia i pozostałych warstw. Sprawdź ograniczenia temperatury, mocy i sposób montażu. Ogólny symbol ogrzewania podłogowego nie potwierdza zgodności każdego systemu."
          }
        },
        {
          "@type": "Question",
          "name": "Co zrobić, gdy długość teoretyczna nie odpowiada dostępnym zestawom?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Porównaj kompletne zestawy, ponownie obliczając moc, W/m² i rozstaw dla ich rzeczywistych długości. Dobór może wymagać zmiany zestawu lub założenia, zgodnie z dokumentacją. Nie rozwiązuj różnicy przez dowolne skracanie przewodu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy kalkulator dobiera termostat i zabezpieczenie elektryczne?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Podaje moc znamionową zestawu. Dobór zasilania, obwodu, zabezpieczeń, regulatora i wymaganych środków ochrony oraz sprawdzenie instalacji wymagają osobnej oceny."
          }
        },
        {
          "@type": "Question",
          "name": "Czy z mocy maty można obliczyć miesięczny rachunek?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Można wyliczyć energię dla jawnie przyjętego czasu załączenia, ale nie będzie to prognoza rzeczywistej pracy termostatu. Rachunek wymaga znajomości zużycia energii i ceny, a nie tylko mocy w watach."
          }
        },
        {
          "@type": "Question",
          "name": "Jakie pomiary wykonać przed zakryciem ogrzewania?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Zakres ustala się według instrukcji zestawu i wymagań instalacji. Należy przewidzieć właściwe oględziny oraz pomiary elementu, izolacji i ochrony, a także dokumentowanie ich na etapach robót. Pomiary oraz ich interpretację powierz osobie z odpowiednimi kwalifikacjami."
          }
        }
      ]
    }
  ]
}
</script>
<script>
(function () {
  "use strict";
  var guide = document.getElementById("rk-electric-guide");
  if (!guide) { return; }
  if (guide.getAttribute("data-rk-ready") === "true") { return; }
  guide.setAttribute("data-rk-ready", "true");
  var rootGuide = guide;
  function format(value, digits) {
    return value.toLocaleString("pl-PL", {minimumFractionDigits:digits, maximumFractionDigits:digits});
  }
  function powerText(value) { return format(value, 0) + " W"; }
  function calculate(data) {
    var m = {mode:data.mode, area:data.area, purpose:data.purpose, maxDensity:data.maxDensity, minSpacing:data.minSpacing};
    if (data.mode === "mat") {
      m.matArea = data.matArea;
      m.matDensity = data.matDensity;
      m.power = data.matArea * data.matDensity;
      m.coverage = data.matArea / data.area * 100;
      m.remaining = data.area - data.matArea;
      m.stripLength = null;
      if (data.matWidth !== null) { m.stripLength = data.matArea / data.matWidth; }
    } else {
      m.linear = data.linear;
      m.targetDensity = data.targetDensity;
      m.idealPower = data.area * data.targetDensity;
      m.idealLength = m.idealPower / data.linear;
      m.idealSpacing = 100 * data.area / m.idealLength;
      m.setLength = data.setLength;
      m.setPower = null;
      m.setDensity = null;
      m.setSpacing = null;
      if (data.setLength !== null) {
        m.setPower = data.linear * data.setLength;
        m.setDensity = m.setPower / data.area;
        m.setSpacing = 100 * data.area / data.setLength;
      }
    }
    return m;
  }
  function evaluate(m) {
    var stops = [];
    var findings = [];
    var checks = [];
    var incomplete = false;
    var eps = 0.00000001;
    if (m.mode === "mat") {
      if (m.matArea > m.area + eps) {
        stops.push("Powierzchnia maty przekracza dostępną strefę o " + format(m.matArea - m.area, 2) + " m². Wybierz inny kompletny zestaw i sprawdź plan.");
      } else {
        findings.push("Powierzchnia maty nie przekracza wpisanej dostępnej strefy. Jej dopasowanie geometryczne nadal wymaga planu.");
      }
      if (m.maxDensity !== null) {
        if (m.matDensity > m.maxDensity + eps) {
          stops.push("Moc na m² maty przekracza podane maksimum " + format(m.maxDensity, 1) + " W/m².");
        } else { findings.push("Moc na m² maty mieści się w wpisanym ograniczeniu."); }
      } else {
        incomplete = true;
        checks.push("Ustal maksymalną moc powierzchniową dopuszczoną dla maty w danym układzie warstw.");
      }
      checks.push("Rozrysuj pasy maty: szerokość, zmiany kierunku, odstępy i położenie połączeń.");
    } else {
      findings.push("Wynik teoretyczny: " + format(m.idealLength, 2) + " m czynnego kabla i około " + format(m.idealSpacing, 2) + " cm rozstawu dla przyjętych W/m².");
      if (m.minSpacing !== null) {
        if (m.idealSpacing + eps < m.minSpacing) {
          stops.push("Założenie teoretyczne wymaga rozstawu mniejszego niż podane minimum " + format(m.minSpacing, 2) + " cm.");
        } else { findings.push("Średni rozstaw teoretyczny nie jest mniejszy od wpisanej granicy."); }
        if (m.setLength !== null) {
          if (m.setSpacing + eps < m.minSpacing) {
            stops.push("Rozważany zestaw ma średni rozstaw " + format(m.setSpacing, 2) + " cm, poniżej podanego minimum " + format(m.minSpacing, 2) + " cm.");
          } else { findings.push("Średni rozstaw rozważanego zestawu mieści się w wpisanym ograniczeniu."); }
        }
      } else {
        incomplete = true;
        checks.push("Ustal minimalny rozstaw osiowy wymagany przez instrukcję kabla.");
      }
      if (m.maxDensity !== null) {
        if (m.targetDensity > m.maxDensity + eps) {
          stops.push("Przyjęte W/m² przekraczają wpisaną maksymalną moc powierzchniową.");
        } else { findings.push("Przyjęta moc powierzchniowa mieści się w wpisanym maksimum."); }
        if (m.setLength !== null) {
          if (m.setDensity > m.maxDensity + eps) {
            stops.push("Rozważany zestaw ma " + format(m.setDensity, 1) + " W/m², powyżej podanego maksimum " + format(m.maxDensity, 1) + " W/m².");
          } else { findings.push("Moc na m² rozważanego zestawu mieści się w wpisanym maksimum."); }
        }
      } else {
        incomplete = true;
        checks.push("Ustal dopuszczoną moc na m² strefy dla wybranego kabla i konstrukcji podłogi.");
      }
      if (m.setLength === null) {
        incomplete = true;
        checks.push("Wybierz kompletny zestaw i wpisz jego rzeczywistą długość czynną, aby przeliczyć moc oraz rozstaw.");
      }
      checks.push("Na planie sprawdź lokalne rozstawy, nawroty, promienie gięcia i wymagane odstępy. Średnia z A/L nie kontroluje geometrii.");
    }
    if (m.purpose === "main") {
      checks.push("Dla ogrzewania podstawowego porównaj obciążenie cieplne pomieszczenia z mocą użyteczną rzeczywistej podłogi. Sama moc elektryczna tego nie potwierdza.");
    } else {
      checks.push("Dla komfortu powierzchni zweryfikuj temperaturę, sterowanie i układ warstw dla oczekiwanego sposobu użytkowania.");
    }
    checks.push("Sprawdź zgodność wykończenia i wszystkich warstw, napięcie znamionowe oraz dokumentację konkretnego zestawu.");
    checks.push("Przekaż dane do weryfikacji obwodu i regulatora; zachowaj plan, zdjęcia oraz wymagane wyniki pomiarów.");
    var status = "Obliczenia mieszczą się we wpisanych ograniczeniach";
    var intro = "Sprawdzono wyłącznie podane granice. To nie jest potwierdzenie możliwości montażu ani pokrycia strat ciepła.";
    var kind = "checked";
    if (stops.length > 0) {
      status = "Przekroczono powierzchnię lub wpisane ograniczenie";
      intro = "Sprawdź pozycje poniżej. Zmień założenie lub kompletny zestaw przed planowaniem montażu.";
      kind = "stop";
    } else {
      if (incomplete) {
        status = "Obliczenia wykonane — weryfikacja pozostaje niepełna";
        intro = "Brakujące ograniczenia lub dane zestawu trzeba uzupełnić. Brak wykrytego przekroczenia nie oznacza akceptacji instalacji.";
        kind = "check";
      }
    }
    return {kind:kind,status:status,intro:intro,findings:stops.concat(findings),checks:checks,stops:stops};
  }
  function initCalculator(mode) {
    var guide = rootGuide.querySelector("#rk-el-" + mode + "-calculator");
    if (!guide) { return; }
    var timer = null;
    var lastModel = null;
    var chartState = null;
    var previewSpacing = null;
    var ns = "http://www.w3.org/2000/svg";
    var sharedIds = ["rk-el-area-method", "rk-el-purpose", "rk-el-net-wrap", "rk-el-net-area", "rk-el-net-help", "rk-el-subtract-wrap", "rk-el-gross-area", "rk-el-excluded-area", "rk-el-limits", "rk-el-max-density", "rk-el-form", "rk-el-reset", "rk-el-example-context", "rk-el-validation", "rk-el-errors-list", "rk-el-result", "rk-el-result-title", "rk-el-result-intro", "rk-el-findings", "rk-el-checks"];
    function el(id) {
      var resolved = id;
      if (sharedIds.indexOf(id) !== -1) { resolved = "rk-el-" + mode + "-" + id.slice(6); }
      return rootGuide.querySelector("#" + resolved);
    }
    function setText(id, value) { el(id).textContent = value; }
    function show(id, visible) { el(id).hidden = !visible; }
  function list(id, items) {
    var node = el(id);
    node.textContent = "";
    items.forEach(function (text) {
      var item = document.createElement("li");
      item.textContent = text;
      node.appendChild(item);
    });
  }
  function readData() {
    var errors = [];
    guide.querySelectorAll("input[aria-invalid]").forEach(function (node) { node.removeAttribute("aria-invalid"); });
    function read(id, label, allowZero, max, optional) {
      var node = el(id);
      var value = node.value.trim().replace(/\s/g, "");
      if (value === "") {
        if (optional) { return null; }
        errors.push("Uzupełnij: " + label + ".");
        node.setAttribute("aria-invalid", "true");
        return null;
      }
      if (!/^(?:\d+|\d*[.,]\d+)$/.test(value)) {
        errors.push("Wpisz poprawną liczbę: " + label + ". Możesz użyć przecinka lub kropki.");
        node.setAttribute("aria-invalid", "true");
        return null;
      }
      var number = Number(value.replace(",", "."));
      var bad = !Number.isFinite(number);
      if (allowZero) { if (number < 0) { bad = true; } }
      else { if (number <= 0) { bad = true; } }
      if (number > max) { bad = true; }
      if (bad) {
        var start = "większą od 0";
        if (allowZero) { start = "nie mniejszą od 0"; }
        errors.push("W polu „" + label + "” podaj liczbę " + start + " i nie większą niż " + format(max, 0) + ". Górna granica jest zakresem narzędzia, nie zaleceniem montażowym.");
        node.setAttribute("aria-invalid", "true");
        return null;
      }
      return number;
    }
    var data = {mode:mode,purpose:el("rk-el-purpose").value,area:null,minSpacing:null,maxDensity:null};
    if (el("rk-el-area-method").value === "net") {
      data.area = read("rk-el-net-area", "dostępna powierzchnia", false, 10000, false);
    } else {
      var gross = read("rk-el-gross-area", "powierzchnia pomieszczenia", false, 10000, false);
      var excluded = read("rk-el-excluded-area", "powierzchnia wyłączeń", true, 10000, false);
      if (gross !== null) {
        if (excluded !== null) {
          data.area = gross - excluded;
          if (data.area <= 0) {
            errors.push("Powierzchnia wyłączeń musi być mniejsza od powierzchni pomieszczenia.");
            el("rk-el-excluded-area").setAttribute("aria-invalid", "true");
          }
        }
      }
    }
    data.maxDensity = read("rk-el-max-density", "maksymalna dopuszczalna moc W/m²", false, 10000, true);
    if (mode === "mat") {
      data.matDensity = read("rk-el-mat-density", "moc znamionowa maty W/m²", false, 1000, false);
      data.matArea = read("rk-el-mat-area", "powierzchnia maty", false, 10000, false);
      data.matWidth = read("rk-el-mat-width", "szerokość pasa maty", false, 10, true);
    } else {
      data.targetDensity = read("rk-el-target-density", "przyjęta moc W/m²", false, 1000, false);
      data.linear = read("rk-el-linear-power", "moc liniowa kabla W/m", false, 100, false);
      data.setLength = read("rk-el-set-length", "długość czynna zestawu", false, 100000, true);
      data.minSpacing = read("rk-el-min-spacing", "minimalny rozstaw osiowy", false, 10000, true);
    }
    return {data:data,errors:errors};
  }
  function updateVisibility() {
    show("rk-el-net-wrap", el("rk-el-area-method").value === "net");
    show("rk-el-subtract-wrap", el("rk-el-area-method").value === "subtract");
  }
  function clearResults() {
    guide.querySelectorAll(".rk-el-metric > strong").forEach(function (node) { node.textContent = "—"; });
    if (mode === "mat") {
      setText("rk-el-out-mat-strip", "Do obliczenia długości pasa potrzebne są poprawne dane maty i szerokość.");
    } else {
      setText("rk-el-out-cable-comparison", "Do porównania zestawu potrzebne są poprawne dane wejściowe.");
    }
    var result = el("rk-el-result");
    result.classList.remove("is-checked");
    result.classList.remove("is-stop");
    setText("rk-el-result-title", "Popraw dane — poprzedni wynik został wyczyszczony");
    setText("rk-el-result-intro", "Nie interpretuj obliczeń, dopóki wskazane pola nie zawierają poprawnych wartości.");
    list("rk-el-findings", ["Brak aktualnego wyniku dla tych danych."]);
    list("rk-el-checks", ["Popraw pola oznaczone w formularzu."]);
    lastModel = null;
    if (mode === "cable") {
      chartState = null;
      show("rk-el-chart-active", false);
      show("rk-el-chart-empty", true);
      setText("rk-el-chart-empty", "Wykres wymaga poprawnych danych w kalkulatorze kabla.");
    }
  }
  function render() {
    updateVisibility();
    var input = readData();
    show("rk-el-validation", input.errors.length > 0);
    if (input.errors.length > 0) {
      list("rk-el-errors-list", input.errors);
      clearResults();
      return;
    }
    var m = calculate(input.data);
    var badMath = false;
    Object.keys(m).forEach(function (key) {
      if (typeof m[key] === "number") {
        if (!Number.isFinite(m[key])) { badMath = true; }
      }
    });
    if (badMath) {
      show("rk-el-validation", true);
      list("rk-el-errors-list", ["Dane nie pozwalają otrzymać skończonych wyników. Sprawdź jednostki i zakres wartości."]);
      clearResults();
      return;
    }
    lastModel = m;
    var e = evaluate(m);
    var result = el("rk-el-result");
    result.classList.remove("is-checked");
    result.classList.remove("is-stop");
    if (e.kind === "checked") { result.classList.add("is-checked"); }
    if (e.kind === "stop") { result.classList.add("is-stop"); }
    setText("rk-el-result-title", e.status);
    setText("rk-el-result-intro", e.intro);
    list("rk-el-findings", e.findings);
    list("rk-el-checks", e.checks);
    if (m.mode === "mat") {
      setText("rk-el-out-mat-net", format(m.area, 2) + " m²");
      setText("rk-el-out-mat-area", format(m.matArea, 2) + " m²");
      setText("rk-el-out-mat-power", powerText(m.power));
      setText("rk-el-out-mat-density", format(m.matDensity, 1) + " W/m²");
      setText("rk-el-out-mat-coverage", format(m.coverage, 1) + "%");
      if (m.remaining < 0) {
        setText("rk-el-out-mat-remaining", "Przekroczenie " + format(-m.remaining, 2) + " m²");
        setText("rk-el-out-mat-remaining-help", "Mata jest większa od wpisanej dostępnej strefy.");
      } else {
        setText("rk-el-out-mat-remaining", format(m.remaining, 2) + " m²");
        setText("rk-el-out-mat-remaining-help", "Różnica powierzchni nie określa lokalizacji nieogrzanych fragmentów.");
      }
      if (m.stripLength !== null) {
        setText("rk-el-out-mat-strip", "Długość pasa maty: " + format(m.stripLength, 2) + " m. To nie jest długość przewodu grzejnego w macie; dopasowanie pasa trzeba sprawdzić na rzucie.");
      } else { setText("rk-el-out-mat-strip", "Nie podano szerokości pasa, więc jego długość nie została obliczona. Długość kabla w macie wymaga danych produktu."); }
    } else {
      setText("rk-el-out-cable-area", format(m.area, 2) + " m²");
      setText("rk-el-out-ideal-power", powerText(m.idealPower));
      setText("rk-el-out-ideal-length", format(m.idealLength, 2) + " m");
      setText("rk-el-out-ideal-spacing", format(m.idealSpacing, 2) + " cm");
      if (m.setLength !== null) {
        setText("rk-el-out-set-length", format(m.setLength, 2) + " m");
        setText("rk-el-out-set-power", powerText(m.setPower));
        setText("rk-el-out-set-density", format(m.setDensity, 1) + " W/m²");
        setText("rk-el-out-set-spacing", format(m.setSpacing, 2) + " cm");
        var sign = "";
        var delta = m.setDensity - m.targetDensity;
        if (delta > 0) { sign = "+"; }
        setText("rk-el-out-cable-comparison", "Rozważany zestaw zmienia moc względem założenia o " + sign + format(delta, 1) + " W/m². Ocena dotyczy pełnej długości czynnej; nie skracaj zestawu w celu uzyskania wyniku teoretycznego.");
      } else {
        ["length","power","density","spacing"].forEach(function (key) { setText("rk-el-out-set-" + key, "Nie podano"); });
        setText("rk-el-out-cable-comparison", "Wpisz długość czynną rzeczywistego zestawu, aby porównać jego moc i średni rozstaw z założeniem.");
      }
    }
    if (mode === "cable") { drawChart(m); }
  }
  function svgNode(tag, attrs, parent, text) {
    var node = document.createElementNS(ns, tag);
    Object.keys(attrs).forEach(function (key) { node.setAttribute(key, String(attrs[key])); });
    if (text !== undefined) { node.textContent = text; }
    parent.appendChild(node);
    return node;
  }
  function drawChart(m, preservePreview) {
    if (m.mode !== "cable") { return; }
    show("rk-el-chart-active", true);
    show("rk-el-chart-empty", false);
    var svg = el("rk-el-chart-svg");
    svg.textContent = "";
    svgNode("desc", {id:"rk-el-chart-desc"}, svg, "Krzywa mocy elektrycznej na m² względem rozstawu dla wpisanych " + format(m.linear, 2) + " W/m. Punkty pokazują założenie i rozważany zestaw; granice pochodzą z formularza.");
    var width = Math.max(290, Math.min(1050, el("rk-el-chart-holder").clientWidth - 16));
    var height = width < 520 ? 285 : 340;
    svg.setAttribute("viewBox", "0 0 " + width + " " + height);
    var left=58, right=20, top=28, bottom=53;
    var plotW=width-left-right, plotH=height-top-bottom;
    var minS=Math.min(5,m.idealSpacing*0.7), maxS=Math.max(25,m.idealSpacing*1.3);
    if (m.setLength !== null) {
      minS=Math.min(minS,m.setSpacing*0.7);
      maxS=Math.max(maxS,m.setSpacing*1.3);
    }
    if (m.minSpacing !== null) {
      if (m.minSpacing <= maxS*2) { maxS=Math.max(maxS,m.minSpacing*1.2); }
    }
    var maxQ=100*m.linear/minS*1.08;
    function x(s) { return left+(s-minS)/(maxS-minS)*plotW; }
    function y(q) { return top+plotH-q/maxQ*plotH; }
    function clamp(v,a,b) { return Math.min(b,Math.max(a,v)); }
    var clipId="rk-el-chart-clip";
    var defs=svgNode("defs",{},svg);
    var clip=svgNode("clipPath",{id:clipId},defs);
    svgNode("rect",{x:left,y:top,width:plotW,height:plotH},clip);
    var layer=svgNode("g",{"clip-path":"url(#"+clipId+")"},svg);
    if (m.minSpacing !== null) {
      var bx=clamp(x(m.minSpacing),left,left+plotW);
      svgNode("rect",{x:left,y:top,width:bx-left,height:plotH,fill:"#ff6846",opacity:0.09},layer);
      svgNode("line",{x1:bx,x2:bx,y1:top,y2:top+plotH,stroke:"#bd4c3b","stroke-width":1.7,"stroke-dasharray":"6 5"},layer);
    }
    if (m.maxDensity !== null) {
      var by=clamp(y(m.maxDensity),top,top+plotH);
      svgNode("rect",{x:left,y:top,width:plotW,height:by-top,fill:"#ff6846",opacity:0.09},layer);
      svgNode("line",{x1:left,x2:left+plotW,y1:by,y2:by,stroke:"#bd4c3b","stroke-width":1.7,"stroke-dasharray":"6 5"},layer);
    }
    for (var i=0;i<=4;i+=1) {
      var q=maxQ*i/4, gy=y(q);
      svgNode("line",{x1:left,x2:left+plotW,y1:gy,y2:gy,stroke:"#d7e5eb","stroke-width":1},svg);
      svgNode("text",{x:left-8,y:gy+4,"text-anchor":"end",fill:"#3c5668","font-size":11},svg,format(q,0));
    }
    var ticks=width<520 ? 3 : 5;
    for (var j=0;j<=ticks;j+=1) {
      var s=minS+(maxS-minS)*j/ticks, gx=x(s);
      svgNode("line",{x1:gx,x2:gx,y1:top,y2:top+plotH,stroke:"#e2edf1","stroke-width":1},svg);
      svgNode("text",{x:gx,y:top+plotH+22,"text-anchor":"middle",fill:"#3c5668","font-size":11},svg,format(s,1));
    }
    svgNode("text",{x:left,y:16,fill:"#10283a","font-size":12,"font-weight":700},svg,"W/m²");
    svgNode("text",{x:left+plotW/2,y:height-8,"text-anchor":"middle",fill:"#10283a","font-size":12,"font-weight":700},svg,"Rozstaw osiowy [cm]");
    var d="";
    for(var k=0;k<=120;k+=1){
      var sx=minS+(maxS-minS)*k/120;
      d+=(k===0 ? "M" : " L")+x(sx).toFixed(3)+" "+y(100*m.linear/sx).toFixed(3);
    }
    svgNode("path",{d:d,fill:"none",stroke:"#078fb3","stroke-width":3,"stroke-linejoin":"round"},layer);
    svgNode("circle",{cx:x(m.idealSpacing),cy:y(m.targetDensity),r:6,fill:"#0b2536",stroke:"#fff","stroke-width":2},layer);
    if(m.setLength!==null){svgNode("circle",{cx:x(m.setSpacing),cy:y(m.setDensity),r:6,fill:"#e05a3a",stroke:"#fff","stroke-width":2},layer);}
    var cursorLine=svgNode("line",{x1:left,x2:left,y1:top,y2:top+plotH,stroke:"#6963ce","stroke-width":1.5,"stroke-dasharray":"3 4"},layer);
    var cursor=svgNode("circle",{cx:left,cy:top,r:5,fill:"#6963ce",stroke:"#fff","stroke-width":2},layer);
    chartState={model:m,minS:minS,maxS:maxS,width:width,left:left,plotW:plotW,x:x,y:y,cursor:cursor,line:cursorLine};
    var slider=el("rk-el-spacing-slider");
    slider.min=String(minS);
    slider.max=String(maxS);
    slider.step=String(Math.max(0.001,(maxS-minS)/400));
    var selected=m.idealSpacing;
    if(m.setLength!==null){selected=m.setSpacing;}
    if(preservePreview){if(previewSpacing!==null){selected=clamp(previewSpacing,minS,maxS);}}
    slider.value=String(selected);
    drawPreview(selected);
    setText("rk-el-chart-context", "Krzywa dla " + format(m.linear,2) + " W/m i strefy " + format(m.area,2) + " m². Zakres osi służy badaniu wariantów, nie stanowi zalecenia montażowego. Zacienienie oznacza przekroczenie podanej granicy; brak zacienienia nie potwierdza całej instalacji.");
  }
  function drawPreview(s) {
    if (!chartState) { return; }
    var m=chartState.model;
    var q=100*m.linear/s;
    var length=100*m.area/s;
    previewSpacing=s;
    chartState.cursor.setAttribute("cx",chartState.x(s));
    chartState.cursor.setAttribute("cy",chartState.y(q));
    chartState.line.setAttribute("x1",chartState.x(s));
    chartState.line.setAttribute("x2",chartState.x(s));
    setText("rk-el-preview-spacing",format(s,2)+" cm");
    setText("rk-el-preview-density",format(q,1)+" W/m²");
    setText("rk-el-preview-length",format(length,2)+" m");
    setText("rk-el-preview-power",powerText(q*m.area));
    var bad=[];
    if(m.minSpacing!==null){if(s+0.00000001<m.minSpacing){bad.push("rozstaw poniżej wpisanego minimum");}}
    if(m.maxDensity!==null){if(q>m.maxDensity+0.00000001){bad.push("moc powyżej wpisanego maksimum");}}
    var status=el("rk-el-preview-status");
    status.classList.remove("is-stop");
    status.classList.remove("is-checked");
    if(bad.length>0){
      status.classList.add("is-stop");
      status.textContent="Ten wariant przekracza ograniczenie: "+bad.join("; ")+". Podgląd nie zmienia danych zestawu w kalkulatorze.";
    }else{
      var known=m.minSpacing!==null;
      if(m.maxDensity===null){known=false;}
      if(known){
        status.classList.add("is-checked");
        status.textContent="Wariant mieści się w dwóch wpisanych ograniczeniach. Nadal wymaga sprawdzenia pełnego zestawu, geometrii i warstw podłogi.";
      }else{status.textContent="Wariant obliczeniowy. Nie podano kompletu ograniczeń; zakres wykresu nie jest dopuszczeniem montażowym.";}
    }
    el("rk-el-spacing-slider").setAttribute("aria-valuetext",format(s,2)+" cm; "+format(q,1)+" W/m²");
  }
  function eventSpacing(event) {
    if(!chartState){return null;}
    var rect=el("rk-el-chart-svg").getBoundingClientRect();
    if(rect.width<=0){return null;}
    var x=(event.clientX-rect.left)*chartState.width/rect.width;
    x=Math.max(chartState.left,Math.min(chartState.left+chartState.plotW,x));
    return chartState.minS+(x-chartState.left)/chartState.plotW*(chartState.maxS-chartState.minS);
  }
  function schedule() {
    if(timer!==null){window.clearTimeout(timer);}
    timer=window.setTimeout(function(){timer=null;render();},150);
  }
  function cancelPending() {
    if(timer!==null){window.clearTimeout(timer);timer=null;}
  }
  function reset(exampleCable) {
    cancelPending();
    var values = {"rk-el-net-area":"6", "rk-el-gross-area":"10", "rk-el-excluded-area":"4", "rk-el-max-density":""};
    if (mode === "mat") {
      values["rk-el-mat-density"] = "150";
      values["rk-el-mat-area"] = "5,5";
      values["rk-el-mat-width"] = "0,5";
    } else {
      values["rk-el-target-density"] = "125";
      values["rk-el-linear-power"] = "10";
      values["rk-el-set-length"] = "";
      values["rk-el-min-spacing"] = "";
    }
    Object.keys(values).forEach(function(id){el(id).value=values[id];});
    el("rk-el-area-method").value="net";
    el("rk-el-purpose").value="comfort";
    el("rk-el-limits").open=false;
    if (mode === "mat") {
      setText("rk-el-example-context","Przykład startowy: strefa 6 m², mata 5,5 m² i 150 W/m². Brak przyjętych ograniczeń montażowych.");
    } else {
      if (exampleCable) {
        el("rk-el-set-length").value="80";
        el("rk-el-min-spacing").value="8";
        el("rk-el-max-density").value="150";
        el("rk-el-limits").open=true;
        setText("rk-el-example-context","Przykład edukacyjny kabla: 6 m², 125 W/m², 10 W/m i zestaw 80 m. Hipotetyczne granice: minimum 8 cm i maksimum 150 W/m². Zastąp je własnymi wymaganiami.");
      } else {
        setText("rk-el-example-context","Przykład startowy: strefa 6 m², założenie 125 W/m² i kabel 10 W/m. Długość zestawu i ograniczenia pozostają do uzupełnienia.");
      }
    }
    previewSpacing=null;
    render();
  }
  el("rk-el-form").addEventListener("input",function(){
    setText("rk-el-example-context","Obliczenia dla bieżących danych. Sprawdź, czy każde założenie i ograniczenie pochodzi z właściwej dokumentacji.");
    schedule();
  });
  el("rk-el-form").addEventListener("change",function(){cancelPending();render();});
  el("rk-el-form").addEventListener("submit",function(event){
    event.preventDefault();cancelPending();render();
    if(lastModel!==null){el("rk-el-result-title").focus();}
  });
  el("rk-el-reset").addEventListener("click",function(){reset(false);});
  if (mode === "cable") {
  el("rk-el-example-cable").addEventListener("click",function(){reset(true);});
  el("rk-el-spacing-slider").addEventListener("input",function(){if(chartState){drawPreview(Number(this.value));}});
  el("rk-el-chart-svg").addEventListener("pointermove",function(event){
    var s=eventSpacing(event);
    if(s!==null){drawPreview(s);}
  });
  el("rk-el-chart-svg").addEventListener("pointerup",function(event){
    var s=eventSpacing(event);
    if(s!==null){el("rk-el-spacing-slider").value=String(s);drawPreview(s);}
  });
  el("rk-el-chart-svg").addEventListener("pointerleave",function(){if(chartState){drawPreview(Number(el("rk-el-spacing-slider").value));}});
  var resizeTimer=null;
  window.addEventListener("resize",function(){
    if(resizeTimer!==null){window.clearTimeout(resizeTimer);}
    resizeTimer=window.setTimeout(function(){resizeTimer=null;if(lastModel!==null){drawChart(lastModel,true);}},120);
  });
  }
  render();
  }
  initCalculator("mat");
  initCalculator("cable");
}());

</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/">Kalkulator maty i kabla grzewczego – ile W/m² i ile kabla lub maty potrzeba.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/kalkulator-maty-i-kabla-grzewczego/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kompleksowy kalkulator ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 01 Mar 2026 15:07:17 +0000</pubDate>
				<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technika instalacyjna]]></category>
		<category><![CDATA[Technologia grzewcza]]></category>
		<category><![CDATA[długość rury pex]]></category>
		<category><![CDATA[instalacja podłogowa krok po kroku]]></category>
		<category><![CDATA[kalkulator ogrzewania podłogowego]]></category>
		<category><![CDATA[moc ogrzewania podłogowego]]></category>
		<category><![CDATA[obliczenia ogrzewania podłogowego]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[przepływy w pętlach]]></category>
		<category><![CDATA[rozdzielacz podłogówki]]></category>
		<category><![CDATA[rozstaw rur podłogówka]]></category>
		<category><![CDATA[temperatura zasilania podłogówka]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3552</guid>

					<description><![CDATA[<p>Ile metrów rury kupić? Jak dobrać rozstaw pętli? Czy temperatura 35°C wystarczy, aby ogrzać cały dom? Kompleksowy kalkulator ogrzewania podłogowego pozwala przełożyć te pytania na konkretne liczby. W artykule znajdziesz nie tylko wzory i gotowe przeliczniki, ale także realny przykład mieszkania 70 m² rozpisany krok po kroku. To praktyczne narzędzie dla inwestorów, którzy chcą świadomie zaplanować instalację i uniknąć kosztownych błędów wykonawczych.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">Kompleksowy kalkulator ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-floor-calc-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #28c9da;
    --rk-cyan-soft: #e9fbff;
    --rk-orange: #ff7438;
    --rk-red: #e34837;
    --rk-yellow: #f3bd3f;
    --rk-yellow-soft: #fff8df;
    --rk-green: #16876d;
    --rk-green-soft: #eaf8f3;
    --rk-ink: #1f2937;
    --rk-text: #475968;
    --rk-muted: #6b7d89;
    --rk-line: #d9e7ed;
    --rk-soft: #f4f9fb;
    --rk-warm: #fff3eb;
    --rk-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 72px;
    color: var(--rk-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.76;
  }

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

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

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

  #rk-floor-calc-guide button,
  #rk-floor-calc-guide select,
  #rk-floor-calc-guide input {
    max-width: 100%;
  }

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

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

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

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

  #rk-floor-calc-guide h3 {
    margin-bottom: 12px;
    font-size: clamp(1.12rem, 2.4vw, 1.48rem);
  }

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

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

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

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

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

  #rk-floor-calc-guide .rk-calc-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-floor-calc-guide .rk-calc-progress-track {
    position: sticky;
    z-index: 30;
    top: 0;
    width: 100%;
    height: 5px;
    overflow: hidden;
    background: rgba(255, 255, 255, 0.92);
  }

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

  #rk-floor-calc-guide .rk-calc-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(38px, 6.5vw, 78px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 88% 16%, rgba(40, 201, 218, 0.3), transparent 26%),
      radial-gradient(circle at 81% 86%, rgba(255, 116, 56, 0.25), transparent 29%),
      linear-gradient(135deg, #0d2230 0%, #143b50 58%, #09627b 100%);
  }

  #rk-floor-calc-guide .rk-calc-hero::before {
    content: "";
    position: absolute;
    z-index: -1;
    right: -145px;
    bottom: -195px;
    width: 520px;
    height: 520px;
    border: 70px solid rgba(255, 255, 255, 0.045);
    border-radius: 50%;
    box-shadow: 0 0 0 54px rgba(255, 255, 255, 0.025);
    pointer-events: none;
  }

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

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

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

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

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

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

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

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

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

  #rk-floor-calc-guide .rk-calc-hero-flow {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 9px;
  }

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

  #rk-floor-calc-guide .rk-calc-hero-stat span {
    display: block;
    color: #c7dae4;
    font-size: 0.59rem;
    font-weight: 850;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-floor-calc-guide .rk-calc-hero-stat strong {
    display: block;
    margin-top: 5px;
    color: var(--rk-white);
    font-size: 1.22rem;
    font-weight: 950;
  }

  #rk-floor-calc-guide .rk-calc-hero-result {
    margin-top: 14px;
    padding: 14px;
    border-radius: 15px;
    color: var(--rk-white);
    background: rgba(40, 201, 218, 0.16);
    font-size: 0.79rem;
    font-weight: 850;
    text-align: center;
  }

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

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

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

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

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

  #rk-floor-calc-guide .rk-calc-kicker {
    display: block;
    margin-bottom: 10px;
    color: var(--rk-blue);
    font-size: 0.72rem;
    font-weight: 950;
    letter-spacing: 0.11em;
    line-height: 1.4;
    text-transform: uppercase;
  }

  #rk-floor-calc-guide .rk-calc-lead {
    max-width: 960px;
    color: #34495a;
    font-size: clamp(1.02rem, 2vw, 1.2rem);
    line-height: 1.75;
  }

  #rk-floor-calc-guide .rk-calc-dropcap::first-letter {
    float: left;
    margin: 0.1em 0.12em 0 0;
    color: var(--rk-orange);
    font-size: 4.1rem;
    font-weight: 950;
    line-height: 0.78;
  }

  #rk-floor-calc-guide .rk-calc-answer {
    display: grid;
    grid-template-columns: minmax(0, 1.18fr) minmax(260px, 0.82fr);
    gap: 20px;
    margin-top: 28px;
  }

  #rk-floor-calc-guide .rk-calc-answer-main,
  #rk-floor-calc-guide .rk-calc-answer-side {
    padding: clamp(24px, 4vw, 38px);
    border: 1px solid var(--rk-line);
    border-radius: 22px;
  }

  #rk-floor-calc-guide .rk-calc-answer-main {
    background: linear-gradient(145deg, var(--rk-white), var(--rk-cyan-soft));
  }

  #rk-floor-calc-guide .rk-calc-answer-side {
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-dark), var(--rk-navy));
  }

  #rk-floor-calc-guide .rk-calc-answer-side h3,
  #rk-floor-calc-guide .rk-calc-answer-side p,
  #rk-floor-calc-guide .rk-calc-answer-side strong {
    color: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-answer-side p:last-child,
  #rk-floor-calc-guide .rk-calc-answer-main p:last-child {
    margin-bottom: 0;
  }

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

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

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

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

  #rk-floor-calc-guide .rk-calc-card {
    min-width: 0;
    padding: 23px;
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-white);
    box-shadow: 0 10px 26px rgba(16, 37, 54, 0.05);
  }

  #rk-floor-calc-guide .rk-calc-card-number {
    display: inline-flex;
    min-width: 50px;
    min-height: 50px;
    align-items: center;
    justify-content: center;
    margin-bottom: 18px;
    padding: 8px;
    border-radius: 15px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-blue), var(--rk-cyan));
    font-size: 0.82rem;
    font-weight: 950;
    line-height: 1;
  }

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

  #rk-floor-calc-guide .rk-calc-scope {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin-top: 26px;
  }

  #rk-floor-calc-guide .rk-calc-scope-panel {
    padding: clamp(24px, 4vw, 34px);
    border: 1px solid var(--rk-line);
    border-radius: 23px;
  }

  #rk-floor-calc-guide .rk-calc-scope-panel.is-does {
    background: var(--rk-green-soft);
  }

  #rk-floor-calc-guide .rk-calc-scope-panel.is-does-not {
    background: var(--rk-yellow-soft);
  }

  #rk-floor-calc-guide .rk-calc-checks {
    display: grid;
    gap: 12px;
    margin: 0;
    padding: 0;
    list-style: none;
  }

  #rk-floor-calc-guide .rk-calc-checks li {
    position: relative;
    padding-left: 32px;
    color: var(--rk-text);
  }

  #rk-floor-calc-guide .rk-calc-checks li::before {
    content: "✓";
    position: absolute;
    top: 0.03em;
    left: 0;
    display: inline-flex;
    width: 22px;
    height: 22px;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-green);
    font-size: 0.7rem;
    font-weight: 950;
  }

  #rk-floor-calc-guide .rk-calc-scope-panel.is-does-not .rk-calc-checks li::before {
    content: "!";
    background: var(--rk-orange);
  }

  #rk-floor-calc-guide .rk-calc-tool {
    overflow: hidden;
    border: 1px solid #b9dce7;
    border-radius: 28px;
    background: var(--rk-white);
    box-shadow: 0 24px 64px rgba(8, 92, 119, 0.13);
  }

  #rk-floor-calc-guide .rk-calc-tool-head {
    padding: clamp(30px, 5vw, 52px);
    color: var(--rk-white);
    background:
      radial-gradient(circle at 90% 16%, rgba(40, 201, 218, 0.28), transparent 25%),
      linear-gradient(125deg, var(--rk-dark), #164b63);
  }

  #rk-floor-calc-guide .rk-calc-tool-head h2,
  #rk-floor-calc-guide .rk-calc-tool-head p {
    color: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-tool-head p {
    max-width: 900px;
    margin-bottom: 0;
    color: #d8e9f1;
  }

  #rk-floor-calc-guide .rk-calc-global {
    padding: clamp(24px, 4vw, 38px);
    border-bottom: 1px solid var(--rk-line);
    background: var(--rk-soft);
  }

  #rk-floor-calc-guide .rk-calc-global h3 {
    margin-bottom: 20px;
  }

  #rk-floor-calc-guide .rk-calc-fields {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 14px;
  }

  #rk-floor-calc-guide .rk-calc-field {
    min-width: 0;
  }

  #rk-floor-calc-guide .rk-calc-field label {
    display: block;
    margin-bottom: 7px;
    color: var(--rk-dark);
    font-size: 0.72rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-floor-calc-guide .rk-calc-field input,
  #rk-floor-calc-guide .rk-calc-field select {
    width: 100%;
    min-height: 48px;
    padding: 10px 12px;
    border: 1px solid #bdd4de;
    border-radius: 12px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-size: 0.84rem;
    font-weight: 750;
    outline: none;
  }

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

  #rk-floor-calc-guide .rk-calc-field small {
    display: block;
    margin-top: 5px;
    color: var(--rk-muted);
    font-size: 0.63rem;
    line-height: 1.45;
  }

  #rk-floor-calc-guide .rk-calc-rooms-wrap {
    padding: clamp(24px, 4vw, 38px);
  }

  #rk-floor-calc-guide .rk-calc-rooms-head {
    display: flex;
    gap: 16px;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 20px;
  }

  #rk-floor-calc-guide .rk-calc-rooms-head h3 {
    margin-bottom: 0;
  }

  #rk-floor-calc-guide .rk-calc-room-list {
    display: grid;
    gap: 16px;
  }

  #rk-floor-calc-guide .rk-calc-room {
    position: relative;
    display: grid;
    grid-template-columns: 1.25fr repeat(7, minmax(108px, 1fr)) auto;
    gap: 12px;
    align-items: end;
    padding: 19px;
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-white);
    box-shadow: 0 8px 24px rgba(16, 37, 54, 0.045);
  }

  #rk-floor-calc-guide .rk-calc-room-index {
    position: absolute;
    top: -10px;
    left: 18px;
    display: inline-flex;
    min-width: 32px;
    height: 24px;
    align-items: center;
    justify-content: center;
    padding: 0 8px;
    border-radius: 999px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: 0.64rem;
    font-weight: 950;
  }

  #rk-floor-calc-guide .rk-calc-room-remove,
  #rk-floor-calc-guide .rk-calc-add-room,
  #rk-floor-calc-guide .rk-calc-recalculate,
  #rk-floor-calc-guide .rk-calc-reset {
    min-height: 48px;
    border: 0;
    border-radius: 12px;
    cursor: pointer;
    font-weight: 900;
    line-height: 1.25;
  }

  #rk-floor-calc-guide .rk-calc-room-remove {
    width: 48px;
    padding: 0;
    color: var(--rk-red);
    border: 1px solid #f2c7c1;
    background: #fff7f6;
    font-size: 1.2rem;
  }

  #rk-floor-calc-guide .rk-calc-room-remove:hover,
  #rk-floor-calc-guide .rk-calc-room-remove:focus-visible {
    color: var(--rk-white);
    background: var(--rk-red);
  }

  #rk-floor-calc-guide .rk-calc-tool-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    margin-top: 20px;
  }

  #rk-floor-calc-guide .rk-calc-add-room,
  #rk-floor-calc-guide .rk-calc-reset {
    padding: 12px 18px;
    color: var(--rk-dark);
    border: 1px solid #bcd5df;
    background: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-recalculate {
    padding: 12px 22px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-orange), var(--rk-red));
    box-shadow: 0 10px 24px rgba(227, 72, 55, 0.2);
  }

  #rk-floor-calc-guide .rk-calc-add-room:hover,
  #rk-floor-calc-guide .rk-calc-add-room:focus-visible,
  #rk-floor-calc-guide .rk-calc-reset:hover,
  #rk-floor-calc-guide .rk-calc-reset:focus-visible {
    color: var(--rk-white);
    border-color: var(--rk-blue);
    background: var(--rk-blue);
  }

  #rk-floor-calc-guide .rk-calc-recalculate:hover,
  #rk-floor-calc-guide .rk-calc-recalculate:focus-visible {
    filter: brightness(1.06);
    transform: translateY(-1px);
  }

  #rk-floor-calc-guide .rk-calc-results {
    padding: clamp(24px, 4vw, 38px);
    border-top: 1px solid var(--rk-line);
    background: #fbfdfe;
  }

  #rk-floor-calc-guide .rk-calc-result-summary {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px;
    margin-bottom: 22px;
  }

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

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

  #rk-floor-calc-guide .rk-calc-result-card small {
    display: block;
    margin-bottom: 8px;
    color: var(--rk-muted);
    font-size: 0.67rem;
    font-weight: 850;
    line-height: 1.4;
  }

  #rk-floor-calc-guide .rk-calc-result-card.is-main small {
    color: #d9f9ff;
  }

  #rk-floor-calc-guide .rk-calc-result-number {
    color: var(--rk-dark);
    font-size: clamp(1.22rem, 2.5vw, 1.76rem);
    font-weight: 950;
    letter-spacing: -0.04em;
    line-height: 1.05;
    overflow-wrap: anywhere;
  }

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

  #rk-floor-calc-guide .rk-calc-status {
    display: grid;
    gap: 5px;
    margin-bottom: 22px;
    padding: 17px 19px;
    border: 1px solid #b8ddcf;
    border-radius: 16px;
    color: var(--rk-green);
    background: var(--rk-green-soft);
  }

  #rk-floor-calc-guide .rk-calc-status.is-warning {
    color: #8a5d00;
    border-color: #ead18b;
    background: var(--rk-yellow-soft);
  }

  #rk-floor-calc-guide .rk-calc-status.is-danger {
    color: #a43c30;
    border-color: #efc2bc;
    background: #fff2f0;
  }

  #rk-floor-calc-guide .rk-calc-status strong {
    color: currentColor;
    font-size: 0.9rem;
  }

  #rk-floor-calc-guide .rk-calc-status span {
    color: currentColor;
    font-size: 0.75rem;
    line-height: 1.55;
  }

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

  #rk-floor-calc-guide .rk-calc-tab {
    min-height: 52px;
    padding: 12px 8px;
    border: 0;
    color: var(--rk-muted);
    background: var(--rk-soft);
    font-size: 0.7rem;
    font-weight: 900;
    text-align: center;
    text-transform: uppercase;
    cursor: pointer;
  }

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

  #rk-floor-calc-guide .rk-calc-tab.is-active {
    color: var(--rk-blue);
    background: var(--rk-white);
    box-shadow: inset 0 -5px 0 var(--rk-blue);
  }

  #rk-floor-calc-guide .rk-calc-tab-panel {
    display: none;
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-top: 0;
    border-radius: 0 0 15px 15px;
    background: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-tab-panel.is-active {
    display: block;
  }

  #rk-floor-calc-guide .rk-calc-table-wrap {
    width: 100%;
  }

  #rk-floor-calc-guide table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
    overflow: hidden;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    font-size: 0.74rem;
  }

  #rk-floor-calc-guide th,
  #rk-floor-calc-guide td {
    padding: 12px 11px;
    border-bottom: 1px solid var(--rk-line);
    text-align: left;
    vertical-align: top;
  }

  #rk-floor-calc-guide th {
    color: var(--rk-white);
    background: var(--rk-navy);
    font-size: 0.67rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-floor-calc-guide td {
    color: var(--rk-text);
    background: var(--rk-white);
  }

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

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

  #rk-floor-calc-guide .rk-calc-result-note {
    margin: 0;
    padding: 15px 17px;
    border-left: 5px solid var(--rk-blue);
    border-radius: 0 12px 12px 0;
    color: var(--rk-text);
    background: var(--rk-cyan-soft);
    font-size: 0.76rem;
  }

  #rk-floor-calc-guide .rk-calc-bars {
    display: grid;
    gap: 14px;
  }

  #rk-floor-calc-guide .rk-calc-bar-row {
    display: grid;
    grid-template-columns: minmax(100px, 0.72fr) minmax(160px, 2fr) minmax(76px, auto);
    gap: 12px;
    align-items: center;
  }

  #rk-floor-calc-guide .rk-calc-bar-name {
    color: var(--rk-dark);
    font-size: 0.72rem;
    font-weight: 900;
    line-height: 1.35;
  }

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

  #rk-floor-calc-guide .rk-calc-bar-fill {
    width: 0;
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, var(--rk-blue), var(--rk-cyan));
    transition: width 0.25s ease;
  }

  #rk-floor-calc-guide .rk-calc-bar-value {
    color: var(--rk-dark);
    font-size: 0.7rem;
    font-weight: 900;
    text-align: right;
  }

  #rk-floor-calc-guide .rk-calc-inline-cta {
    margin: 24px;
    padding: clamp(25px, 4vw, 38px);
    border: 1px solid rgba(255, 116, 56, 0.35);
    border-radius: 22px;
    background:
      radial-gradient(circle at 90% 10%, rgba(255, 116, 56, 0.13), transparent 26%),
      linear-gradient(145deg, #fffaf6, var(--rk-white));
  }

  #rk-floor-calc-guide .rk-calc-inline-cta h3 {
    max-width: 860px;
  }

  #rk-floor-calc-guide .rk-calc-cta-button {
    display: inline-flex;
    min-height: 54px;
    align-items: center;
    justify-content: center;
    padding: 13px 24px;
    border-radius: 14px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-orange), var(--rk-red));
    box-shadow: 0 12px 28px rgba(227, 72, 55, 0.22);
    font-size: 0.83rem;
    font-weight: 950;
    line-height: 1.35;
    text-align: center;
    text-decoration: none;
  }

  #rk-floor-calc-guide .rk-calc-cta-button:hover,
  #rk-floor-calc-guide .rk-calc-cta-button:focus-visible {
    color: var(--rk-white);
    filter: brightness(1.06);
    transform: translateY(-1px);
  }

  #rk-floor-calc-guide .rk-calc-disclosure {
    display: block;
    margin-top: 11px;
    color: var(--rk-muted);
    font-size: 0.64rem;
    line-height: 1.5;
  }

  #rk-floor-calc-guide .rk-calc-formulas {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 17px;
    margin-top: 25px;
  }

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

  #rk-floor-calc-guide .rk-calc-formula > span {
    display: block;
    margin-bottom: 8px;
    color: var(--rk-blue);
    font-size: 0.67rem;
    font-weight: 950;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-floor-calc-guide .rk-calc-equation {
    display: block;
    margin: 9px 0 12px;
    padding: 14px;
    overflow-wrap: anywhere;
    border-radius: 12px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: 0.88rem;
    font-weight: 850;
    line-height: 1.5;
  }

  #rk-floor-calc-guide .rk-calc-formula p:last-child {
    margin-bottom: 0;
  }

  #rk-floor-calc-guide .rk-calc-diagram {
    margin-top: 26px;
    padding: clamp(20px, 4vw, 32px);
    border: 1px solid var(--rk-line);
    border-radius: 22px;
    background: linear-gradient(145deg, var(--rk-white), var(--rk-soft));
  }

  #rk-floor-calc-guide .rk-calc-diagram svg {
    display: block;
    width: 100%;
    height: auto;
  }

  #rk-floor-calc-guide .rk-calc-callout {
    margin-top: 24px;
    padding: 22px 24px;
    border-left: 6px solid var(--rk-orange);
    border-radius: 0 18px 18px 0;
    background: var(--rk-warm);
  }

  #rk-floor-calc-guide .rk-calc-callout p:last-child {
    margin-bottom: 0;
  }

  #rk-floor-calc-guide .rk-calc-steps {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 17px;
    counter-reset: rk-calc-step;
    margin-top: 25px;
  }

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

  #rk-floor-calc-guide .rk-calc-step::before {
    content: counter(rk-calc-step, decimal-leading-zero);
    display: inline-flex;
    width: 48px;
    height: 48px;
    align-items: center;
    justify-content: center;
    margin-bottom: 17px;
    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-floor-calc-guide .rk-calc-step p:last-child {
    margin-bottom: 0;
  }

  #rk-floor-calc-guide .rk-calc-warning-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 17px;
    margin-top: 25px;
  }

  #rk-floor-calc-guide .rk-calc-warning {
    padding: 23px;
    border: 1px solid #f0c9c4;
    border-radius: 19px;
    background: #fff7f6;
  }

  #rk-floor-calc-guide .rk-calc-warning b {
    display: inline-flex;
    min-width: 46px;
    height: 32px;
    align-items: center;
    justify-content: center;
    margin-bottom: 14px;
    padding: 0 10px;
    border-radius: 999px;
    color: var(--rk-white);
    background: var(--rk-red);
    font-size: 0.65rem;
    font-weight: 950;
  }

  #rk-floor-calc-guide .rk-calc-warning p:last-child {
    margin-bottom: 0;
  }

  #rk-floor-calc-guide .rk-calc-case {
    overflow: hidden;
    margin-top: 26px;
    border: 1px solid var(--rk-line);
    border-radius: 24px;
    background: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-case-head {
    padding: 26px;
    color: var(--rk-white);
    background: linear-gradient(125deg, var(--rk-dark), var(--rk-navy));
  }

  #rk-floor-calc-guide .rk-calc-case-head h3,
  #rk-floor-calc-guide .rk-calc-case-head p {
    color: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-case-head p:last-child {
    margin-bottom: 0;
    color: #d6e7ef;
  }

  #rk-floor-calc-guide .rk-calc-case-body {
    padding: clamp(24px, 4vw, 38px);
  }

  #rk-floor-calc-guide .rk-calc-case-compare {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
  }

  #rk-floor-calc-guide .rk-calc-case-side {
    padding: 22px;
    border-radius: 18px;
  }

  #rk-floor-calc-guide .rk-calc-case-side.is-wrong {
    border: 1px solid #efc3bd;
    background: #fff3f1;
  }

  #rk-floor-calc-guide .rk-calc-case-side.is-right {
    border: 1px solid #b8ddcf;
    background: var(--rk-green-soft);
  }

  #rk-floor-calc-guide .rk-calc-case-side p:last-child {
    margin-bottom: 0;
  }

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

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

  #rk-floor-calc-guide .rk-calc-faq summary {
    position: relative;
    padding: 18px 56px 18px 20px;
    color: var(--rk-dark);
    font-weight: 900;
    line-height: 1.45;
    cursor: pointer;
    list-style: none;
  }

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

  #rk-floor-calc-guide .rk-calc-faq summary::after {
    content: "+";
    position: absolute;
    top: 50%;
    right: 18px;
    display: inline-flex;
    width: 28px;
    height: 28px;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: 1rem;
    font-weight: 900;
    transform: translateY(-50%);
  }

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

  #rk-floor-calc-guide .rk-calc-faq-answer {
    padding: 0 20px 18px;
  }

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

  #rk-floor-calc-guide .rk-calc-sources {
    padding: 24px;
    border: 1px solid var(--rk-line);
    border-radius: 19px;
    background: var(--rk-soft);
    font-size: 0.72rem;
    line-height: 1.7;
  }

  #rk-floor-calc-guide .rk-calc-sources strong {
    display: block;
    margin-bottom: 8px;
    font-size: 0.78rem;
  }

  #rk-floor-calc-guide .rk-calc-sources p:last-child {
    margin-bottom: 0;
  }

  #rk-floor-calc-guide .rk-calc-author {
    position: relative;
    overflow: hidden;
    margin-bottom: clamp(56px, 8vw, 94px);
    border: 1px solid var(--rk-line);
    border-radius: 27px;
    background: var(--rk-white);
    box-shadow: 0 20px 50px rgba(16, 37, 54, 0.09);
  }

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

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

  #rk-floor-calc-guide .rk-calc-author-head h2,
  #rk-floor-calc-guide .rk-calc-author-head p {
    color: var(--rk-white);
  }

  #rk-floor-calc-guide .rk-calc-author-head h2 {
    margin-bottom: 8px;
  }

  #rk-floor-calc-guide .rk-calc-author-head p {
    margin-bottom: 0;
    color: #d7e8f0;
  }

  #rk-floor-calc-guide .rk-calc-author-mark {
    flex: 0 0 auto;
    padding: 11px 17px;
    border: 1px solid rgba(40, 201, 218, 0.42);
    border-radius: 14px;
    color: #75effc;
    font-size: 0.72rem;
    font-weight: 950;
    letter-spacing: 0.09em;
  }

  #rk-floor-calc-guide .rk-calc-author-layout {
    display: grid;
    grid-template-columns: minmax(270px, 0.64fr) minmax(0, 1.36fr);
  }

  #rk-floor-calc-guide .rk-calc-author-side {
    padding: clamp(30px, 5vw, 50px);
    border-right: 1px solid var(--rk-line);
    background: var(--rk-soft);
    text-align: center;
  }

  #rk-floor-calc-guide .rk-calc-author-photo {
    width: min(205px, 74%);
    margin: 0 auto 22px;
    overflow: hidden;
    border: 8px solid var(--rk-white);
    border-radius: 50%;
    box-shadow: 0 16px 36px rgba(16, 37, 54, 0.14);
    aspect-ratio: 1;
  }

  #rk-floor-calc-guide .rk-calc-author-photo img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
  }

  #rk-floor-calc-guide .rk-calc-author-name {
    margin-bottom: 7px;
    color: var(--rk-dark);
    font-size: 1.5rem;
    font-weight: 950;
    letter-spacing: -0.04em;
    line-height: 1.1;
  }

  #rk-floor-calc-guide .rk-calc-author-role {
    color: var(--rk-blue);
    font-size: 0.7rem;
    font-weight: 950;
    letter-spacing: 0.07em;
    line-height: 1.55;
    text-transform: uppercase;
  }

  #rk-floor-calc-guide .rk-calc-author-main {
    padding: clamp(30px, 5vw, 50px);
  }

  #rk-floor-calc-guide .rk-calc-author-quote {
    position: relative;
    margin: 0 0 24px;
    padding: 24px 24px 24px 68px;
    border: 0;
    border-radius: 18px;
    background: var(--rk-cyan-soft);
  }

  #rk-floor-calc-guide .rk-calc-author-quote::before {
    content: "“";
    position: absolute;
    top: 3px;
    left: 20px;
    color: var(--rk-cyan);
    font-size: 4rem;
    font-weight: 950;
    line-height: 1;
  }

  #rk-floor-calc-guide .rk-calc-author-quote p {
    margin-bottom: 0;
    color: var(--rk-dark);
    font-size: 1.02rem;
    font-style: italic;
    font-weight: 800;
    line-height: 1.75;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  @media (max-width: 1080px) {
    #rk-floor-calc-guide .rk-calc-fields {
      grid-template-columns: repeat(3, minmax(0, 1fr));
    }

    #rk-floor-calc-guide .rk-calc-room {
      grid-template-columns: repeat(4, minmax(0, 1fr));
      padding-top: 28px;
    }

    #rk-floor-calc-guide .rk-calc-room .rk-calc-field:first-of-type {
      grid-column: span 2;
    }
  }

  @media (min-width: 721px) {
    #rk-floor-calc-guide .rk-calc-room {
      grid-template-columns: repeat(4, minmax(0, 1fr));
      align-items: start;
      padding: 28px 86px 22px 22px;
    }

    #rk-floor-calc-guide .rk-calc-room .rk-calc-field:first-of-type {
      grid-column: auto;
    }

    #rk-floor-calc-guide .rk-calc-room .rk-calc-field label {
      display: flex;
      min-height: 2.7em;
      align-items: flex-end;
      overflow-wrap: normal;
      word-break: normal;
    }

    #rk-floor-calc-guide .rk-calc-room-remove {
      position: absolute;
      top: 28px;
      right: 20px;
    }
  }

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

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

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

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

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

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

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

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

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

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

    #rk-floor-calc-guide .rk-calc-grid-2,
    #rk-floor-calc-guide .rk-calc-grid-3,
    #rk-floor-calc-guide .rk-calc-grid-4,
    #rk-floor-calc-guide .rk-calc-scope,
    #rk-floor-calc-guide .rk-calc-formulas,
    #rk-floor-calc-guide .rk-calc-warning-grid,
    #rk-floor-calc-guide .rk-calc-steps,
    #rk-floor-calc-guide .rk-calc-case-compare,
    #rk-floor-calc-guide .rk-calc-fields,
    #rk-floor-calc-guide .rk-calc-result-summary {
      grid-template-columns: 1fr;
    }

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

    #rk-floor-calc-guide .rk-calc-room .rk-calc-field:first-of-type {
      grid-column: 1 / -1;
    }

    #rk-floor-calc-guide .rk-calc-room-remove {
      width: 100%;
    }

    #rk-floor-calc-guide .rk-calc-rooms-head {
      align-items: flex-start;
      flex-direction: column;
    }

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

    #rk-floor-calc-guide .rk-calc-tab + .rk-calc-tab {
      border-left: 0;
    }

    #rk-floor-calc-guide .rk-calc-tab:nth-child(even) {
      border-left: 1px solid var(--rk-line);
    }

    #rk-floor-calc-guide .rk-calc-tab:nth-child(n+3) {
      border-top: 1px solid var(--rk-line);
    }

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

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

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

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

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

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

    #rk-floor-calc-guide .rk-calc-inline-cta {
      margin: 18px;
    }

    #rk-floor-calc-guide .rk-calc-bar-row {
      grid-template-columns: 1fr;
      gap: 6px;
    }

    #rk-floor-calc-guide .rk-calc-bar-value {
      text-align: left;
    }

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

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

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

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

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

  @media (max-width: 470px) {
    #rk-floor-calc-guide .rk-calc-hero-flow,
    #rk-floor-calc-guide .rk-calc-room {
      grid-template-columns: 1fr;
    }

    #rk-floor-calc-guide .rk-calc-room .rk-calc-field:first-of-type {
      grid-column: auto;
    }

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

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

<article id="rk-floor-calc-guide" data-rk-calc-version="2026-08-26" aria-label="Kompleksowy kalkulator ogrzewania podłogowego">
  <div class="rk-calc-shell">
    <div class="rk-calc-progress-track" aria-hidden="true"><div class="rk-calc-progress"></div></div>

    <header class="rk-calc-hero">
      <div class="rk-calc-hero-grid">
        <div>
          <span class="rk-calc-eyebrow"><b aria-hidden="true"></b> Autorskie narzędzie • hydraulika i termika</span>
          <div class="rk-calc-hero-title" role="heading" aria-level="2">Kompleksowy kalkulator ogrzewania podłogowego</div>
          <p class="rk-calc-hero-lead">Wprowadź pomieszczenia, rzeczywistą powierzchnię grzewczą, obciążenie cieplne i parametry wody. Otrzymasz orientacyjną długość rur, liczbę pętli, przepływy, prędkości, straty ciśnienia oraz zład instalacji.</p>
          <div class="rk-calc-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> Obliczenia dla wielu pomieszczeń</span>
          </div>
        </div>

        <aside class="rk-calc-hero-panel" aria-label="Przykładowe wyniki kalkulatora">
          <small>Jedno narzędzie — cztery grupy wyników</small>
          <div class="rk-calc-hero-flow">
            <div class="rk-calc-hero-stat"><span>Rury</span><strong>mb</strong></div>
            <div class="rk-calc-hero-stat"><span>Pętle</span><strong>szt.</strong></div>
            <div class="rk-calc-hero-stat"><span>Przepływ</span><strong>l/min</strong></div>
          </div>
          <div class="rk-calc-hero-result">Termika → geometria → hydraulika → kontrola ograniczeń</div>
        </aside>
      </div>
    </header>

    <nav class="rk-calc-nav" aria-label="Spis treści artykułu">
      <a href="#rk-calc-answer">Szybka odpowiedź</a>
      <a href="#rk-calc-scope">Zakres narzędzia</a>
      <a href="#rk-calc-tool">Kalkulator</a>
      <a href="#rk-calc-method">Wzory</a>
      <a href="#rk-calc-spacing">Rozstaw rur</a>
      <a href="#rk-calc-hydraulics">Hydraulika</a>
      <a href="#rk-calc-example">Przykład</a>
      <a href="#rk-calc-howto">Procedura</a>
      <a href="#rk-calc-faq">FAQ</a>
      <a href="#rk-calc-author">Autor</a>
    </nav>

    <div class="rk-calc-body">
      <section class="rk-calc-section" id="rk-calc-answer">
        <span class="rk-calc-kicker">Najkrótsza poprawna odpowiedź</span>
        <h2>Co rzeczywiście oblicza kompleksowy kalkulator ogrzewania podłogowego?</h2>
        <p class="rk-calc-lead rk-calc-dropcap"><strong>Kompleksowy kalkulator ogrzewania podłogowego</strong> zestawia obciążenie cieplne każdego pomieszczenia z dostępną powierzchnią grzewczą, parametrami wody, oporem okładziny oraz geometrią pętli. Dzięki temu nie ogranicza się do odpowiedzi „ile metrów rury kupić”, lecz pokazuje również liczbę obwodów, przepływ, prędkość w przewodzie, przybliżony opór hydrauliczny i pojemność wodną instalacji.</p>

        <div class="rk-calc-answer">
          <div class="rk-calc-answer-main">
            <h3>Najpierw pomieszczenie, później cały dom</h3>
            <p>Podłogówki nie projektuje się wyłącznie z powierzchni budynku. Salon, łazienka i sypialnia mają inne temperatury, okładziny, wolne pola posadzki oraz straty ciepła. Każde pomieszczenie wymaga osobnego sprawdzenia, a dopiero później sumuje się pętle, przepływy i sekcje rozdzielacza.</p>
            <p>W kalkulatorze możesz podać projektową stratę uzyskaną z obliczeń albo własne założenie W/m². Drugi wariant pozostaje szacunkiem i nie staje się przez samo wpisanie do formularza pełnym OZC.</p>
          </div>
          <div class="rk-calc-answer-side">
            <h3>Ważne rozróżnienie</h3>
            <p><strong>Wynik kalkulatora jest kontrolny i orientacyjny.</strong> Nie zawiera rzutu pętli, dokładnych oporów armatury, rzeczywistych tras, charakterystyki pompy ani danych wszystkich przegród.</p>
            <p>Do wykonania instalacji potrzebna jest dokumentacja dopasowana do konkretnego budynku.</p>
          </div>
        </div>

        <div class="rk-calc-grid-4" style="margin-top:22px">
          <article class="rk-calc-card"><span class="rk-calc-card-number">Φ</span><h3>Obciążenie cieplne</h3><p>Moc w watach potrzebna w projektowych warunkach dla konkretnego pomieszczenia, a nie zużycie energii w kWh.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">q</span><h3>Moc powierzchniowa</h3><p>Wymagane W/m² rzeczywiście czynnej posadzki po odjęciu stałej zabudowy i pól wyłączonych z grzania.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">V̇</span><h3>Przepływ</h3><p>Strumień wody wynikający z mocy pomieszczenia oraz różnicy temperatury między zasilaniem a powrotem.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">Δp</span><h3>Opór pętli</h3><p>Przybliżona strata ciśnienia zależna od średnicy wewnętrznej, długości, przepływu i właściwości wody.</p></article>
        </div>
      </section>

      <section class="rk-calc-section" id="rk-calc-scope">
        <span class="rk-calc-kicker">Granice odpowiedzialnego obliczenia</span>
        <h2>Kalkulator pomaga kontrolować założenia, ale nie rozrysowuje instalacji</h2>
        <p class="rk-calc-lead">Największą wartością narzędzia jest pokazanie zależności. Zmiana temperatury wody, powierzchni czynnej, rozstawu albo długości dobiegu natychmiast wpływa na liczbę obwodów i hydraulikę. Trzeba jednak wiedzieć, których danych formularz nie może samodzielnie odgadnąć.</p>

        <div class="rk-calc-scope">
          <div class="rk-calc-scope-panel is-does">
            <h3>Kalkulator oszacuje</h3>
            <ul class="rk-calc-checks">
              <li>wymaganą moc z 1 m² czynnej podłogi,</li>
              <li>orientacyjny rozstaw 5, 10, 15 albo 20 cm,</li>
              <li>łączną długość rury wraz z dobiegami,</li>
              <li>liczbę i średnią długość pętli,</li>
              <li>przepływ pomieszczenia i pojedynczego obwodu,</li>
              <li>prędkość wody oraz liniową stratę ciśnienia,</li>
              <li>liczbę sekcji rozdzielacza i zład rur.</li>
            </ul>
          </div>
          <div class="rk-calc-scope-panel is-does-not">
            <h3>Kalkulator nie wyznaczy sam</h3>
            <ul class="rk-calc-checks">
              <li>strat przez przegrody bez ich parametrów i geometrii,</li>
              <li>rzeczywistego przebiegu każdej pętli na rzucie,</li>
              <li>wszystkich oporów zaworów, belek i armatury,</li>
              <li>punktu pracy konkretnej pompy obiegowej,</li>
              <li>wpływu mostków cieplnych i stref brzegowych,</li>
              <li>bezpiecznej dylatacji oraz konstrukcji jastrychu,</li>
              <li>nastaw wykonawczych bez weryfikacji projektu.</li>
            </ul>
          </div>
        </div>
      </section>

      <section class="rk-calc-section" id="rk-calc-tool">
        <div class="rk-calc-tool">
          <div class="rk-calc-tool-head">
            <span class="rk-calc-kicker" style="color:#79f1ff">Interaktywny model wielopomieszczeniowy</span>
            <h2>Oblicz rury, pętle, przepływy i orientacyjną hydraulikę</h2>
            <p>Przykładowe pomieszczenia możesz edytować, usuwać i uzupełniać własnymi. Wyniki aktualizują się automatycznie. Wartości hydrauliczne obejmują rurę oraz umowny 20-procentowy dodatek na opory miejscowe — nie zastępują charakterystyki całej instalacji.</p>
          </div>

          <form id="rk-calc-form" aria-label="Kompleksowy kalkulator ogrzewania podłogowego">
            <div class="rk-calc-global">
              <h3>Krok 1. Wspólne parametry instalacji</h3>
              <div class="rk-calc-fields">
                <div class="rk-calc-field">
                  <label for="rk-calc-supply">Temperatura zasilania</label>
                  <input id="rk-calc-supply" type="number" min="25" max="50" step="0.5" value="35" inputmode="decimal">
                  <small>°C</small>
                </div>
                <div class="rk-calc-field">
                  <label for="rk-calc-return">Temperatura powrotu</label>
                  <input id="rk-calc-return" type="number" min="20" max="45" step="0.5" value="28" inputmode="decimal">
                  <small>°C</small>
                </div>
                <div class="rk-calc-field">
                  <label for="rk-calc-pipe">Rura grzewcza</label>
                  <select id="rk-calc-pipe">
                    <option value="0.012" data-outer="16">16×2 mm</option>
                    <option value="0.013" data-outer="17">17×2 mm</option>
                    <option value="0.016" data-outer="20">20×2 mm</option>
                  </select>
                  <small>Wartość obliczeniowa: średnica wewnętrzna</small>
                </div>
                <div class="rk-calc-field">
                  <label for="rk-calc-loop-target">Docelowa długość pętli</label>
                  <select id="rk-calc-loop-target">
                    <option value="80">80 m</option>
                    <option value="90" selected="">90 m</option>
                    <option value="100">100 m</option>
                  </select>
                  <small>Cel projektowy, nie uniwersalna granica normy</small>
                </div>
                <div class="rk-calc-field">
                  <label for="rk-calc-geometry-factor">Dodatek geometryczny</label>
                  <select id="rk-calc-geometry-factor">
                    <option value="1.03">3%</option>
                    <option value="1.05" selected="">5%</option>
                    <option value="1.08">8%</option>
                    <option value="1.10">10%</option>
                  </select>
                  <small>Łuki i niedoskonałość podziału pola</small>
                </div>
              </div>
            </div>

            <div class="rk-calc-rooms-wrap">
              <div class="rk-calc-rooms-head">
                <div>
                  <h3>Krok 2. Pomieszczenia</h3>
                  <p style="margin:6px 0 0">Powierzchnia grzewcza nie może być większa od powierzchni pomieszczenia.</p>
                </div>
                <button class="rk-calc-add-room" id="rk-calc-add-room" type="button">+ Dodaj pomieszczenie</button>
              </div>

              <div class="rk-calc-room-list" id="rk-calc-room-list">
                <div class="rk-calc-room" data-room-id="1">
                  <span class="rk-calc-room-index">01</span>
                  <div class="rk-calc-field"><label>Nazwa</label><input class="rk-room-name" type="text" value="Salon z aneksem" maxlength="50"></div>
                  <div class="rk-calc-field"><label>Typ strefy</label><select class="rk-room-type"><option value="standard" selected="">Pokój 20–21°C</option><option value="bathroom">Łazienka 24°C</option><option value="edge">Strefa brzegowa</option></select></div>
                  <div class="rk-calc-field"><label>Powierzchnia</label><input class="rk-room-area" type="number" min="1" max="200" step="0.1" value="35"><small>m²</small></div>
                  <div class="rk-calc-field"><label>Pow. grzewcza</label><input class="rk-room-active" type="number" min="0.5" max="200" step="0.1" value="30"><small>m²</small></div>
                  <div class="rk-calc-field"><label>Strata cieplna</label><input class="rk-room-load" type="number" min="50" max="15000" step="10" value="1400"><small>W</small></div>
                  <div class="rk-calc-field"><label>Okładzina</label><select class="rk-room-floor"><option value="0.01" selected="">Płytki R=0,01</option><option value="0.03">Winyl R=0,03</option><option value="0.07">Panel R=0,07</option><option value="0.10">Drewno R=0,10</option><option value="0.15">Dywan R=0,15</option></select></div>
                  <div class="rk-calc-field"><label>Odległość</label><input class="rk-room-distance" type="number" min="0" max="50" step="0.5" value="7"><small>m do rozdzielacza</small></div>
                  <div class="rk-calc-field"><label>Rozstaw</label><select class="rk-room-spacing"><option value="auto" selected="">Dobierz orientacyjnie</option><option value="5">5 cm</option><option value="10">10 cm</option><option value="15">15 cm</option><option value="20">20 cm</option></select></div>
                  <button class="rk-calc-room-remove" type="button" aria-label="Usuń pomieszczenie">×</button>
                </div>

                <div class="rk-calc-room" data-room-id="2">
                  <span class="rk-calc-room-index">02</span>
                  <div class="rk-calc-field"><label>Nazwa</label><input class="rk-room-name" type="text" value="Łazienka" maxlength="50"></div>
                  <div class="rk-calc-field"><label>Typ strefy</label><select class="rk-room-type"><option value="standard">Pokój 20–21°C</option><option value="bathroom" selected="">Łazienka 24°C</option><option value="edge">Strefa brzegowa</option></select></div>
                  <div class="rk-calc-field"><label>Powierzchnia</label><input class="rk-room-area" type="number" min="1" max="200" step="0.1" value="8"><small>m²</small></div>
                  <div class="rk-calc-field"><label>Pow. grzewcza</label><input class="rk-room-active" type="number" min="0.5" max="200" step="0.1" value="6"><small>m²</small></div>
                  <div class="rk-calc-field"><label>Strata cieplna</label><input class="rk-room-load" type="number" min="50" max="15000" step="10" value="560"><small>W</small></div>
                  <div class="rk-calc-field"><label>Okładzina</label><select class="rk-room-floor"><option value="0.01" selected="">Płytki R=0,01</option><option value="0.03">Winyl R=0,03</option><option value="0.07">Panel R=0,07</option><option value="0.10">Drewno R=0,10</option><option value="0.15">Dywan R=0,15</option></select></div>
                  <div class="rk-calc-field"><label>Odległość</label><input class="rk-room-distance" type="number" min="0" max="50" step="0.5" value="6"><small>m do rozdzielacza</small></div>
                  <div class="rk-calc-field"><label>Rozstaw</label><select class="rk-room-spacing"><option value="auto" selected="">Dobierz orientacyjnie</option><option value="5">5 cm</option><option value="10">10 cm</option><option value="15">15 cm</option><option value="20">20 cm</option></select></div>
                  <button class="rk-calc-room-remove" type="button" aria-label="Usuń pomieszczenie">×</button>
                </div>

                <div class="rk-calc-room" data-room-id="3">
                  <span class="rk-calc-room-index">03</span>
                  <div class="rk-calc-field"><label>Nazwa</label><input class="rk-room-name" type="text" value="Sypialnia" maxlength="50"></div>
                  <div class="rk-calc-field"><label>Typ strefy</label><select class="rk-room-type"><option value="standard" selected="">Pokój 20–21°C</option><option value="bathroom">Łazienka 24°C</option><option value="edge">Strefa brzegowa</option></select></div>
                  <div class="rk-calc-field"><label>Powierzchnia</label><input class="rk-room-area" type="number" min="1" max="200" step="0.1" value="15"><small>m²</small></div>
                  <div class="rk-calc-field"><label>Pow. grzewcza</label><input class="rk-room-active" type="number" min="0.5" max="200" step="0.1" value="13"><small>m²</small></div>
                  <div class="rk-calc-field"><label>Strata cieplna</label><input class="rk-room-load" type="number" min="50" max="15000" step="10" value="600"><small>W</small></div>
                  <div class="rk-calc-field"><label>Okładzina</label><select class="rk-room-floor"><option value="0.01">Płytki R=0,01</option><option value="0.03">Winyl R=0,03</option><option value="0.07" selected="">Panel R=0,07</option><option value="0.10">Drewno R=0,10</option><option value="0.15">Dywan R=0,15</option></select></div>
                  <div class="rk-calc-field"><label>Odległość</label><input class="rk-room-distance" type="number" min="0" max="50" step="0.5" value="9"><small>m do rozdzielacza</small></div>
                  <div class="rk-calc-field"><label>Rozstaw</label><select class="rk-room-spacing"><option value="auto" selected="">Dobierz orientacyjnie</option><option value="5">5 cm</option><option value="10">10 cm</option><option value="15">15 cm</option><option value="20">20 cm</option></select></div>
                  <button class="rk-calc-room-remove" type="button" aria-label="Usuń pomieszczenie">×</button>
                </div>
              </div>

              <div class="rk-calc-tool-actions">
                <button class="rk-calc-recalculate" type="submit">Przelicz instalację</button>
                <button class="rk-calc-reset" id="rk-calc-reset" type="button">Przywróć przykład</button>
              </div>
            </div>
          </form>

          <div class="rk-calc-results" id="rk-calc-results" aria-live="polite">
            <h3>Wynik dla całej instalacji</h3>
            <div class="rk-calc-result-summary">
              <div class="rk-calc-result-card"><small>Projektowe obciążenie pomieszczeń</small><div class="rk-calc-result-number" id="rk-result-load">2560 W</div></div>
              <div class="rk-calc-result-card is-main"><small>Szacowana długość rur</small><div class="rk-calc-result-number" id="rk-result-pipe">— m</div></div>
              <div class="rk-calc-result-card"><small>Liczba pętli / sekcji</small><div class="rk-calc-result-number" id="rk-result-loops">—</div></div>
              <div class="rk-calc-result-card"><small>Przepływ całkowity</small><div class="rk-calc-result-number" id="rk-result-flow">— m³/h</div></div>
              <div class="rk-calc-result-card"><small>Powierzchnia całkowita</small><div class="rk-calc-result-number" id="rk-result-area">58 m²</div></div>
              <div class="rk-calc-result-card"><small>Powierzchnia grzewcza</small><div class="rk-calc-result-number" id="rk-result-active">49 m²</div></div>
              <div class="rk-calc-result-card"><small>Pojemność rur</small><div class="rk-calc-result-number" id="rk-result-volume">— l</div></div>
              <div class="rk-calc-result-card"><small>Największy opór pętli</small><div class="rk-calc-result-number" id="rk-result-pressure">— kPa</div></div>
            </div>

            <div class="rk-calc-status" id="rk-calc-status">
              <strong id="rk-calc-status-title">Analiza zostanie uzupełniona po uruchomieniu narzędzia</strong>
              <span id="rk-calc-status-copy">Sprawdzamy powierzchnie grzewcze, moc, długości, temperaturę powierzchni, prędkości i orientacyjne straty ciśnienia.</span>
            </div>

            <div class="rk-calc-tabs" role="tablist" aria-label="Grupy wyników kalkulatora">
              <button class="rk-calc-tab is-active" type="button" data-tab="summary" role="tab" aria-selected="true">Podsumowanie</button>
              <button class="rk-calc-tab" type="button" data-tab="thermal" role="tab" aria-selected="false">Termika</button>
              <button class="rk-calc-tab" type="button" data-tab="geometry" role="tab" aria-selected="false">Rury i pętle</button>
              <button class="rk-calc-tab" type="button" data-tab="hydraulic" role="tab" aria-selected="false">Hydraulika</button>
            </div>

            <div class="rk-calc-tab-panel is-active" id="rk-calc-panel-summary" data-panel="summary" role="tabpanel">
              <div class="rk-calc-bars" id="rk-calc-bars"></div>
              <p class="rk-calc-result-note" style="margin-top:20px"><strong>Jak czytać wykres?</strong> Długość paska pokazuje wymaganą moc z 1 m² czynnej podłogi względem najwyższej wartości w zestawieniu. Nie jest to roczne zużycie energii.</p>
            </div>

            <div class="rk-calc-tab-panel" id="rk-calc-panel-thermal" data-panel="thermal" role="tabpanel">
              <div class="rk-calc-table-wrap">
                <table>
                  <thead><tr><th>Pomieszczenie</th><th>Strata</th><th>Pow. czynna</th><th>Wymagane q</th><th>Rozstaw</th><th>Szac. możliwości</th><th>Temp. powierzchni</th><th>Ocena</th></tr></thead>
                  <tbody id="rk-calc-thermal-body"></tbody>
                </table>
              </div>
            </div>

            <div class="rk-calc-tab-panel" id="rk-calc-panel-geometry" data-panel="geometry" role="tabpanel">
              <div class="rk-calc-table-wrap">
                <table>
                  <thead><tr><th>Pomieszczenie</th><th>Rozstaw</th><th>Długość pola</th><th>Dobiegi</th><th>Rura łącznie</th><th>Pętle</th><th>Śr. pętla</th><th>Zład rur</th></tr></thead>
                  <tbody id="rk-calc-geometry-body"></tbody>
                </table>
              </div>
            </div>

            <div class="rk-calc-tab-panel" id="rk-calc-panel-hydraulic" data-panel="hydraulic" role="tabpanel">
              <div class="rk-calc-table-wrap">
                <table>
                  <thead><tr><th>Pomieszczenie</th><th>Przepływ pom.</th><th>Przepływ pętli</th><th>Prędkość</th><th>Re</th><th>Opór pętli</th><th>ΔT</th><th>Ocena</th></tr></thead>
                  <tbody id="rk-calc-hydraulic-body"></tbody>
                </table>
              </div>
              <p class="rk-calc-result-note" style="margin-top:18px">Opór obejmuje szacowaną stratę liniową najdłuższej średniej pętli oraz 20% dodatku na opory miejscowe. Do doboru pompy trzeba jeszcze uwzględnić rozdzielacz, zawory, filtr, źródło ciepła, przewody zasilające i rzeczywisty obieg krytyczny.</p>
            </div>
          </div>

          <div class="rk-calc-inline-cta">
            <span class="rk-calc-kicker">Wynik orientacyjny a dokumentacja wykonawcza</span>
            <h3>Kalkulator policzył zależności, ale nie zna rzutu Twojego domu</h3>
            <p>Narzędzie nie widzi okien, ścian zewnętrznych, mostków cieplnych, stałej zabudowy na rysunku ani rzeczywistych tras do rozdzielacza. Projekt określa przebieg każdej pętli, obciążenie poszczególnych pomieszczeń, rozstaw, przepływy, opory i nastawy potrzebne wykonawcy.</p>
            <a class="rk-calc-cta-button rk-calc-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczeniami dla każdego pomieszczenia</a>
            <small class="rk-calc-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-calc-section" id="rk-calc-method">
        <span class="rk-calc-kicker">Metodologia zamiast pozornej dokładności</span>
        <h2>Jak kalkulator ogrzewania podłogowego przechodzi od watów do rur i przepływów?</h2>
        <p class="rk-calc-lead">Obliczenie jest łańcuchem zależności. Projektowe obciążenie pomieszczenia wyznacza wymaganą moc aktywnej posadzki. Temperatura wody, temperatura wnętrza, rozstaw i opór okładziny określają orientacyjne możliwości podłogi. Dopiero później można szacować długość rur, liczbę pętli i hydraulikę.</p>

        <div class="rk-calc-formulas">
          <article class="rk-calc-formula">
            <span>1. Obciążenie czynnej posadzki</span>
            <strong class="rk-calc-equation">q<sub>req</sub> = Φ<sub>HL</sub> / A<sub>F</sub></strong>
            <p><strong>Φ<sub>HL</sub></strong> to projektowa strata pomieszczenia [W], a <strong>A<sub>F</sub></strong> — rzeczywiście ogrzewana powierzchnia [m²]. Jeżeli salon traci 1400 W, ale grzeje tylko 30 m² podłogi, wymagane obciążenie wynosi około 46,7 W/m².</p>
          </article>
          <article class="rk-calc-formula">
            <span>2. Średnia temperatura czynnika</span>
            <strong class="rk-calc-equation">θ<sub>m</sub> = (θ<sub>V</sub> + θ<sub>R</sub>) / 2</strong>
            <p>Wstępny model używa średniej arytmetycznej zasilania i powrotu. W pełnych obliczeniach charakterystyk systemu stosuje się dokładniejsze zależności i dane konkretnej konstrukcji podłogi.</p>
          </article>
          <article class="rk-calc-formula">
            <span>3. Szacowana długość przewodów</span>
            <strong class="rk-calc-equation">L ≈ (A<sub>F</sub> / s) × k + 2 × L<sub>d</sub> × N</strong>
            <p><strong>s</strong> oznacza rozstaw [m], <strong>k</strong> dodatek geometryczny, <strong>L<sub>d</sub></strong> odległość od rozdzielacza, a <strong>N</strong> liczbę pętli. Każdy obwód potrzebuje własnego zasilania i powrotu.</p>
          </article>
          <article class="rk-calc-formula">
            <span>4. Przepływ wynikający z mocy</span>
            <strong class="rk-calc-equation">V̇ ≈ Φ / (4180 × ΔT) × 60</strong>
            <p>Wynik w l/min zakłada wodę i jej przybliżone ciepło właściwe. Dla 1000 W oraz ΔT = 5 K otrzymujemy około 2,87 l/min dla całego pomieszczenia, dzielone następnie między jego pętle.</p>
          </article>
          <article class="rk-calc-formula">
            <span>5. Prędkość w rurze</span>
            <strong class="rk-calc-equation">v = V̇ / A<sub>rury</sub></strong>
            <p>Pole przepływu wynika ze średnicy wewnętrznej, a nie z oznaczenia zewnętrznego rury. Przewód 16×2 mm ma około 12 mm średnicy wewnętrznej.</p>
          </article>
          <article class="rk-calc-formula">
            <span>6. Strata ciśnienia pętli</span>
            <strong class="rk-calc-equation">Δp = λ × (L / D) × (ρv² / 2) + ΣΔp<sub>m</sub></strong>
            <p>Kalkulator szacuje tarcie metodą Darcy’ego–Weisbacha i dodaje 20% na opory miejscowe. Projekt musi wykorzystać rzeczywiste opory rozdzielacza, zaworów i całej trasy krytycznej.</p>
          </article>
        </div>

        <div class="rk-calc-diagram" aria-label="Schemat zależności w obliczeniach ogrzewania podłogowego">
          <svg viewBox="0 0 1080 360" role="img" aria-labelledby="rk-calc-diagram-title rk-calc-diagram-desc">
            <title id="rk-calc-diagram-title">Od obciążenia cieplnego do nastaw rozdzielacza</title>
            <desc id="rk-calc-diagram-desc">Schemat pokazuje kolejność: obciążenie cieplne, aktywna powierzchnia, moc powierzchniowa, rozstaw, długość rur, pętle, przepływy i opory hydrauliczne.</desc>
            <defs>
              <linearGradient id="rkCalcBox" x1="0" x2="1">
                <stop offset="0%" stop-color="#078fbe"></stop>
                <stop offset="100%" stop-color="#28c9da"></stop>
              </linearGradient>
              <marker id="rkCalcArrow" markerWidth="10" markerHeight="10" refX="8" refY="5" orient="auto">
                <path d="M0,0 L10,5 L0,10 Z" fill="#ff7438"></path>
              </marker>
            </defs>
            <rect x="26" y="50" width="210" height="96" rx="20" fill="url(#rkCalcBox)"></rect>
            <text x="131" y="87" text-anchor="middle" fill="#ffffff" font-size="17" font-weight="900">STRATY CIEPŁA</text>
            <text x="131" y="116" text-anchor="middle" fill="#dcfaff" font-size="14">pomieszczenia [W]</text>
            <path d="M236 98 H292" fill="none" stroke="#ff7438" stroke-width="7" marker-end="url(#rkCalcArrow)"></path>
            <rect x="312" y="50" width="210" height="96" rx="20" fill="#e9fbff" stroke="#078fbe" stroke-width="3"></rect>
            <text x="417" y="87" text-anchor="middle" fill="#102536" font-size="17" font-weight="900">MOC PODŁOGI</text>
            <text x="417" y="116" text-anchor="middle" fill="#506674" font-size="14">W/m² i rozstaw</text>
            <path d="M522 98 H578" fill="none" stroke="#ff7438" stroke-width="7" marker-end="url(#rkCalcArrow)"></path>
            <rect x="598" y="50" width="210" height="96" rx="20" fill="#eaf8f3" stroke="#16876d" stroke-width="3"></rect>
            <text x="703" y="87" text-anchor="middle" fill="#102536" font-size="17" font-weight="900">RURY I PĘTLE</text>
            <text x="703" y="116" text-anchor="middle" fill="#506674" font-size="14">długość i sekcje</text>
            <path d="M808 98 H864" fill="none" stroke="#ff7438" stroke-width="7" marker-end="url(#rkCalcArrow)"></path>
            <rect x="884" y="50" width="170" height="96" rx="20" fill="#fff3eb" stroke="#ff7438" stroke-width="3"></rect>
            <text x="969" y="87" text-anchor="middle" fill="#102536" font-size="17" font-weight="900">HYDRAULIKA</text>
            <text x="969" y="116" text-anchor="middle" fill="#506674" font-size="14">V̇, v, Δp</text>
            <path d="M969 146 V218 H131 V166" fill="none" stroke="#14384d" stroke-width="4" stroke-dasharray="9 8" marker-end="url(#rkCalcArrow)"></path>
            <rect x="248" y="224" width="584" height="100" rx="23" fill="#102536"></rect>
            <text x="540" y="262" text-anchor="middle" fill="#79f1ff" font-size="16" font-weight="900">ITERACJA PROJEKTOWA</text>
            <text x="540" y="291" text-anchor="middle" fill="#ffffff" font-size="15">jeżeli moc lub hydraulika nie spełnia kryteriów, zmieniamy</text>
            <text x="540" y="313" text-anchor="middle" fill="#d5e7ef" font-size="14">temperaturę, rozstaw, liczbę pętli, średnicę albo układ stref</text>
          </svg>
        </div>

        <div class="rk-calc-callout">
          <p><strong>Dlaczego kalkulator nie „robi OZC” z samego metrażu?</strong> Projektowe obciążenie cieplne zależy od temperatur, wentylacji, geometrii i właściwości przegród. PN-EN 12831-1 opisuje obliczanie mocy potrzebnej do utrzymania wymaganej temperatury w projektowych warunkach zewnętrznych. Wskaźnik W/m² może służyć do szybkiego scenariusza, ale nie zastępuje danych budynku.</p>
        </div>
      </section>

      <section class="rk-calc-section" id="rk-calc-spacing">
        <span class="rk-calc-kicker">Geometria pętli</span>
        <h2>Ile rury potrzeba na 1 m² przy rozstawie 5, 10, 15 i 20 cm?</h2>
        <p class="rk-calc-lead">Najprostsze przybliżenie wynika z odwrotności rozstawu. Przy 10 cm otrzymujemy około 10 m przewodu na 1 m² pola, a przy 15 cm około 6,7 m/m². Do wyniku trzeba dodać łuki, podział pola oraz osobne dobiegi zasilania i powrotu każdej pętli.</p>

        <div class="rk-calc-table-wrap">
          <table>
            <thead><tr><th>Rozstaw</th><th>Teoretyczne zużycie</th><th>Z dodatkiem 5%</th><th>Typowe zastosowanie</th><th>Najważniejsze zastrzeżenie</th></tr></thead>
            <tbody>
              <tr><td data-label="Rozstaw"><strong>5 cm</strong></td><td data-label="Teoretyczne zużycie">20,0 m/m²</td><td data-label="Z dodatkiem 5%">21,0 m/m²</td><td data-label="Typowe zastosowanie">Lokalne strefy o bardzo dużej mocy lub systemy specjalne</td><td data-label="Zastrzeżenie">Duża długość rury i opory; wymaga krótkich pętli oraz weryfikacji konstrukcji</td></tr>
              <tr><td data-label="Rozstaw"><strong>10 cm</strong></td><td data-label="Teoretyczne zużycie">10,0 m/m²</td><td data-label="Z dodatkiem 5%">10,5 m/m²</td><td data-label="Typowe zastosowanie">Łazienki, strefy brzegowe, wyższe obciążenie, niska temperatura wody</td><td data-label="Zastrzeżenie">Nie każda łazienka automatycznie wymaga 10 cm — decydują obliczenia</td></tr>
              <tr><td data-label="Rozstaw"><strong>15 cm</strong></td><td data-label="Teoretyczne zużycie">6,67 m/m²</td><td data-label="Z dodatkiem 5%">7,0 m/m²</td><td data-label="Typowe zastosowanie">Dobrze izolowane pokoje i salony o umiarkowanych stratach</td><td data-label="Zastrzeżenie">Przy drewnie lub dużym obciążeniu może wymagać wyższej temperatury wody</td></tr>
              <tr><td data-label="Rozstaw"><strong>20 cm</strong></td><td data-label="Teoretyczne zużycie">5,0 m/m²</td><td data-label="Z dodatkiem 5%">5,25 m/m²</td><td data-label="Typowe zastosowanie">Niskie obciążenia, pomieszczenia pomocnicze, niektóre systemy suche</td><td data-label="Zastrzeżenie">Większa nierównomierność temperatury i mniejsza moc przy tym samym parametrze</td></tr>
            </tbody>
          </table>
        </div>

        <div class="rk-calc-grid-3" style="margin-top:22px">
          <article class="rk-calc-card"><span class="rk-calc-card-number">A</span><h3>Odejmij stałą zabudowę</h3><p>Rur nie planuje się pod kominkiem, zabudowaną wanną, częścią szaf bez prześwitu ani elementami wymagającymi wyłączenia powierzchni.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">2L</span><h3>Dodaj każdy dobieg</h3><p>Odległość do rozdzielacza występuje podwójnie: jako zasilanie i powrót. Przy kilku pętlach pomieszczenia mnoży się ją przez liczbę obwodów.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">N</span><h3>Podziel pole na obwody</h3><p>Nie dzielimy tylko łącznej długości przez „maksimum”. Pętle powinny mieć wykonalny przebieg, podobne obciążenie i możliwe do ustawienia przepływy.</p></article>
        </div>

        <p style="margin-top:22px">Jeżeli interesuje Cię wyłącznie ilość przewodu, zobacz również osobny <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/">kalkulator długości rury do ogrzewania podłogowego</a>. Szczegółowe porównanie gęstości ułożenia znajduje się w opracowaniu <a href="https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/">rozstaw rur przy pompie ciepła</a>.</p>
      </section>

      <section class="rk-calc-section" id="rk-calc-hydraulics">
        <span class="rk-calc-kicker">Przepływy zamiast nastaw „na oko”</span>
        <h2>Dlaczego długość pętli nie może być oceniana bez przepływu i oporu?</h2>
        <p class="rk-calc-lead">Ta sama pętla może pracować poprawnie przy małym obciążeniu, a przy dużej mocy wymagać przepływu powodującego wysoką prędkość i stratę ciśnienia. Dlatego 80, 90 albo 100 m jest celem organizującym projekt, a nie samodzielnym dowodem poprawności hydraulicznej.</p>

        <div class="rk-calc-grid-3">
          <article class="rk-calc-card"><span class="rk-calc-card-number">ΔT</span><h3>Różnica zasilanie–powrót</h3><p>Mniejsza różnica temperatury wymaga większego przepływu dla tej samej mocy. Zależność dokładnie wyjaśnia artykuł o <a href="https://projekt-ogrzewania.pl/spadek-temperatury-%ce%b4t-roznica-miedzy-temperatura-zasilania-a-powrotu/">spadku temperatury ΔT</a>.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">d<sub>i</sub></span><h3>Średnica wewnętrzna</h3><p>Niewielka zmiana średnicy silnie wpływa na prędkość i opory. Oznaczenie 16×2 mm oznacza około 12 mm światła przewodu.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">H</span><h3>Obieg krytyczny</h3><p>Pompa musi pokonać opór najbardziej niekorzystnej drogi, a nie sumę oporów wszystkich równoległych pętli. Sprawdź zasady <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">doboru pompy obiegowej</a>.</p></article>
        </div>

        <div class="rk-calc-callout">
          <p><strong>Przepływ na rotametrze nie wynika z powierzchni pętli.</strong> Wynika przede wszystkim z mocy, którą obwód ma przenieść, oraz przyjętego ΔT. Dwie pętle po 80 m mogą potrzebować innych nastaw, jeżeli obsługują pomieszczenia o innym obciążeniu. Więcej znajdziesz w poradniku o <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach w rozdzielaczu</a>.</p>
        </div>

        <div class="rk-calc-warning-grid">
          <article class="rk-calc-warning"><b>BŁĄD 01</b><h3>Jedna długość graniczna dla każdej pętli</h3><p>Nie istnieje uniwersalny metraż gwarantujący poprawność. Znaczenie mają średnica, przepływ, temperatura, opory miejscowe i dostępne ciśnienie pompy.</p></article>
          <article class="rk-calc-warning"><b>BŁĄD 02</b><h3>Sumowanie oporów pętli równoległych</h3><p>Przepływy pętli sumują się na magistrali, ale wysokość podnoszenia wyznacza droga krytyczna wraz z armaturą i przewodami wspólnymi.</p></article>
          <article class="rk-calc-warning"><b>BŁĄD 03</b><h3>Dobór pompy tylko z m³/h</h3><p>Wymagany jest jednocześnie przepływ i ciśnienie dyspozycyjne. Sam symbol 25/40 albo 25/60 nie mówi, jaki punkt pracy uzyskamy w instalacji.</p></article>
        </div>

        <p style="margin-top:22px">Rozdział pomieszczeń pomiędzy sekcje opisuje artykuł <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do podłogówki</a>. Jeżeli potrzebujesz szczegółowego sprawdzenia magistrali, skorzystaj również z <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulatora doboru pompy obiegowej</a>.</p>
      </section>

      <section class="rk-calc-section" id="rk-calc-example">
        <span class="rk-calc-kicker">Przykład z ujawnionymi założeniami</span>
        <h2>Salon 35 m²: dlaczego ta sama powierzchnia może wymagać różnej liczby pętli?</h2>
        <p class="rk-calc-lead">Przyjmijmy salon o powierzchni 35 m², z czego 30 m² stanowi czynne pole grzewcze. Projektowa strata wynosi 1400 W, temperatura pomieszczenia 21°C, parametry wody 35/28°C, rura 16×2 mm, a rozdzielacz znajduje się 7 m od granicy pomieszczenia.</p>

        <div class="rk-calc-case">
          <div class="rk-calc-case-head">
            <h3>Porównanie rozstawu 15 i 10 cm</h3>
            <p>Nie jest to gotowy projekt salonu. Przykład pokazuje wyłącznie wpływ rozstawu na długość, podział i hydraulikę przy tych samych danych wejściowych.</p>
          </div>
          <div class="rk-calc-case-body">
            <div class="rk-calc-case-compare">
              <div class="rk-calc-case-side is-wrong">
                <h3>Rozstaw 15 cm</h3>
                <p><strong>Pole rury:</strong> około 210 m z dodatkiem 5%.</p>
                <p><strong>Z dobiegami:</strong> przy trzech obwodach około 252 m.</p>
                <p><strong>Średnia pętla:</strong> około 84 m.</p>
                <p><strong>Wymagana moc:</strong> 46,7 W/m² czynnej podłogi.</p>
                <p>Układ może być poprawny, jeżeli okładzina i temperatura wody zapewnią potrzebną moc oraz pozostanie akceptowalny zapas powierzchniowy.</p>
              </div>
              <div class="rk-calc-case-side is-right">
                <h3>Rozstaw 10 cm</h3>
                <p><strong>Pole rury:</strong> około 315 m z dodatkiem 5%.</p>
                <p><strong>Z dobiegami:</strong> przy pięciu obwodach około 385 m.</p>
                <p><strong>Średnia pętla:</strong> około 77 m.</p>
                <p><strong>Wymagana moc:</strong> nadal 46,7 W/m².</p>
                <p>Gęstszy rozstaw zwiększa potencjał oddawania ciepła i może pozwolić obniżyć temperaturę wody, ale wymaga większej ilości rury i większej liczby sekcji.</p>
              </div>
            </div>
          </div>
        </div>

        <div class="rk-calc-callout">
          <p><strong>Wniosek:</strong> więcej rury nie jest automatycznie lepszym projektem. Celem jest pokrycie projektowej straty możliwie niską temperaturą zasilania, przy wykonalnym rozstawie, rozsądnych długościach, możliwych przepływach oraz właściwej liczbie sekcji rozdzielacza.</p>
        </div>
      </section>

      <section class="rk-calc-section" id="rk-calc-howto">
        <span class="rk-calc-kicker">Procedura projektowa</span>
        <h2>Jak poprawnie korzystać z kalkulatora ogrzewania podłogowego?</h2>
        <div class="rk-calc-steps">
          <article class="rk-calc-step"><h3>Zdobądź obciążenie pomieszczeń</h3><p>Najlepiej użyj wyników obliczeń cieplnych. Jeżeli przyjmujesz W/m², potraktuj rezultat wyłącznie jako wariant orientacyjny.</p></article>
          <article class="rk-calc-step"><h3>Wyznacz czynne pola podłogi</h3><p>Odejmij stałą zabudowę i powierzchnie, pod którymi nie wolno albo nie ma sensu układać przewodów.</p></article>
          <article class="rk-calc-step"><h3>Wpisz temperatury i okładziny</h3><p>Podaj wspólne zasilanie i powrót oraz rzeczywisty opór wykończenia w każdym pomieszczeniu.</p></article>
          <article class="rk-calc-step"><h3>Sprawdź moc powierzchniową</h3><p>Jeżeli wymagana moc przekracza możliwości posadzki, nie naprawiaj wyniku samym zagęszczaniem rur — przeanalizuj cały układ.</p></article>
          <article class="rk-calc-step"><h3>Skontroluj pętle i hydraulikę</h3><p>Porównaj długości, przepływy, prędkości oraz orientacyjne straty ciśnienia. Zwróć uwagę na obieg najbardziej niekorzystny.</p></article>
          <article class="rk-calc-step"><h3>Przenieś wynik na rzut</h3><p>Dopiero rozmieszczenie pętli na planie potwierdzi rzeczywiste dobiegi, podział stref, liczbę sekcji i wykonalność instalacji.</p></article>
        </div>
      </section>

      <section class="rk-calc-section" id="rk-calc-project">
        <span class="rk-calc-kicker">Kalkulator a projekt</span>
        <h2>Czego w wynikach nadal brakuje wykonawcy?</h2>
        <p class="rk-calc-lead">Lista metrów i przepływów nie pokazuje, gdzie ma rozpocząć się ślimak, jak ominąć dylatację, jak przejść przez komunikację ani które pętle tworzą wspólną strefę. Profesjonalna dokumentacja scala termikę, geometrię i hydraulikę na rzucie budynku.</p>

        <div class="rk-calc-grid-3">
          <article class="rk-calc-card"><span class="rk-calc-card-number">01</span><h3>Rzut każdej pętli</h3><p>Przebieg, kierunek, numer obwodu, rozstaw, strefy brzegowe, dylatacje i powierzchnie wyłączone z grzania.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">02</span><h3>Tabela nastaw</h3><p>Długość, moc, projektowy przepływ i identyfikacja każdej pętli, dzięki którym można uruchomić i zrównoważyć instalację.</p></article>
          <article class="rk-calc-card"><span class="rk-calc-card-number">03</span><h3>Schemat hydrauliczny</h3><p>Rozdzielacze, magistrale, pompy, armatura, źródło ciepła i wymagania przepływowe pokazane jako jeden współpracujący system.</p></article>
        </div>

        <p style="margin-top:22px">Przy dużych przeszkleniach osobnego sprawdzenia wymaga <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-obwodowa-w-ogrzewaniu-podlogowym/">strefa brzegowa ogrzewania podłogowego</a>. Rodzaj przewodu i jego rzeczywista średnica zostały szczegółowo opisane w poradniku <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">rura PEX do ogrzewania podłogowego</a>.</p>
      </section>

      <section class="rk-calc-section" id="rk-calc-faq">
        <span class="rk-calc-kicker">Pytania użytkowników</span>
        <h2>FAQ — kompleksowy kalkulator ogrzewania podłogowego</h2>
        <div class="rk-calc-faq">
          <details>
            <summary>Czy kalkulator ogrzewania podłogowego zastępuje projekt?</summary>
            <div class="rk-calc-faq-answer"><p>Nie. Kalkulator pokazuje zależności i orientacyjne parametry na podstawie wpisanych danych, ale nie wykonuje pełnych obliczeń przegród, nie rozrysowuje pętli, nie zna oporów całej armatury ani charakterystyki konkretnej pompy. Do wykonania instalacji potrzebny jest projekt dopasowany do rzutu budynku.</p></div>
          </details>
          <details>
            <summary>Ile metrów rury potrzeba na 1 m² ogrzewania podłogowego?</summary>
            <div class="rk-calc-faq-answer"><p>Teoretycznie około 20 m/m² przy rozstawie 5 cm, 10 m/m² przy 10 cm, 6,67 m/m² przy 15 cm i 5 m/m² przy 20 cm. Do tego trzeba doliczyć łuki, podział pola oraz osobne odcinki zasilania i powrotu każdej pętli.</p></div>
          </details>
          <details>
            <summary>Jaka jest maksymalna długość pętli podłogówki?</summary>
            <div class="rk-calc-faq-answer"><p>Nie istnieje jedna długość gwarantująca poprawność każdej instalacji. Dla rury 16×2 mm często projektuje się pętle około 80–100 m, ale wynik trzeba sprawdzić na podstawie przepływu, średnicy wewnętrznej, oporów miejscowych i ciśnienia dostępnego z pompy.</p></div>
          </details>
          <details>
            <summary>Jak kalkulator dobiera rozstaw rur?</summary>
            <div class="rk-calc-faq-answer"><p>Porównuje wymaganą moc z 1 m² czynnej posadzki z orientacyjnymi możliwościami rozstawów 20, 15, 10 i 5 cm przy podanych temperaturach oraz oporze okładziny. Wybiera najszerszy rozstaw spełniający uproszczone kryterium, lecz wynik wymaga weryfikacji dla konkretnego systemu podłogi.</p></div>
          </details>
          <details>
            <summary>Jak obliczyć przepływ w pętli ogrzewania podłogowego?</summary>
            <div class="rk-calc-faq-answer"><p>Przepływ wynika z mocy przenoszonej przez pętlę oraz różnicy temperatury między zasilaniem a powrotem. Dla wody można użyć zależności V̇ ≈ Φ/(4180×ΔT)×60, otrzymując l/min, a następnie podzielić przepływ pomieszczenia pomiędzy jego obwody.</p></div>
          </details>
          <details>
            <summary>Czy każda łazienka powinna mieć rury co 10 cm?</summary>
            <div class="rk-calc-faq-answer"><p>Nie automatycznie. Łazienki często wymagają gęstego rozstawu z powodu temperatury projektowej 24°C i małej wolnej powierzchni, ale ostateczna decyzja zależy od strat, temperatury wody, okładziny i dostępnego pola grzewczego.</p></div>
          </details>
          <details>
            <summary>Czy kalkulator dobierze pompę obiegową?</summary>
            <div class="rk-calc-faq-answer"><p>Kalkulator podaje przepływ całkowity i orientacyjny opór najbardziej wymagającej pętli. Pełny dobór pompy wymaga jeszcze oporów magistrali, rozdzielacza, zaworów, filtrów, źródła ciepła i innych elementów wspólnego obiegu.</p></div>
          </details>
          <details>
            <summary>Jak obliczana jest pojemność wodna rur?</summary>
            <div class="rk-calc-faq-answer"><p>Pojemność wynika z pola przekroju wewnętrznego przewodu pomnożonego przez jego długość. Dla rury 16×2 mm o średnicy wewnętrznej około 12 mm jest to około 0,113 litra na metr. Całkowity zład instalacji obejmuje również rozdzielacze, magistrale, źródło i ewentualny bufor.</p></div>
          </details>
        </div>
      </section>

      <section class="rk-calc-section" aria-label="Źródła techniczne">
        <div class="rk-calc-sources">
          <strong>Podstawa techniczna i źródła opracowania</strong>
          <p>Projektowe obciążenie cieplne pomieszczeń i budynku: <a href="https://sklep.pkn.pl/pn-en-12831-1-2017-08e.html" target="_blank" rel="noopener nofollow">PN-EN 12831-1:2017-08 — Polski Komitet Normalizacyjny</a>. Określanie mocy cieplnej ogrzewania podłogowego: <a href="https://sklep.pkn.pl/pn-en-1264-2-2021-10e.html" target="_blank" rel="noopener nofollow">PN-EN 1264-2:2021-10 — PKN</a> oraz <a href="https://www.iso.org/standard/74683.html" target="_blank" rel="noopener nofollow">ISO 11855-2:2021</a>. Projektowanie i wymiarowanie systemów płaszczyznowych: <a href="https://www.iso.org/standard/74684.html" target="_blank" rel="noopener nofollow">ISO 11855-3:2021</a>. Kryteria projektowe wodnych instalacji ogrzewczych: <a href="https://sklep.pkn.pl/normy/pn-en-12828-a1-2014-05e.html" target="_blank" rel="noopener nofollow">PN-EN 12828+A1:2014-05 — PKN</a>. Dostęp do źródeł: 26 sierpnia 2026 r.</p>
          <p>Model termiczny kalkulatora jest uproszczeniem edukacyjnym. Nie odtwarza pełnych krzywych charakterystycznych konkretnego systemu, metod numerycznych ani badań systemowych opisanych w normach. Model hydrauliczny używa przybliżonych właściwości wody, równania Darcy’ego–Weisbacha oraz dodatku na opory miejscowe.</p>
        </div>
      </section>

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

        <div class="rk-calc-author-head">
          <div><h2>Autor opracowania</h2><p>Obliczenia techniczne przedstawione w sposób użyteczny dla inwestora i wykonawcy.</p></div>
          <span class="rk-calc-author-mark">E‑E‑A‑T • HVAC</span>
        </div>

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

          <div class="rk-calc-author-main">
            <blockquote class="rk-calc-author-quote"><p>„Dobry kalkulator nie ma zastępować projektu. Ma pokazać inwestorowi, że długość rury, liczba pętli, przepływ i opór hydrauliczny są jednym układem zależności — zmiana jednej wartości zawsze wpływa na pozostałe.”</p></blockquote>

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

            <div class="rk-calc-author-panel rk-calc-author-panel-about">
              <p>Robert Kucharski projektuje wodne instalacje ogrzewania podłogowego i przygotowuje techniczne publikacje dotyczące obliczeń cieplnych, hydrauliki, źródeł ciepła, automatyki oraz świadomego prowadzenia inwestycji. W opracowaniach rozdziela szybkie oszacowanie od parametrów, które muszą wynikać z dokumentacji wykonawczej.</p>
              <p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz profil i pozostałe opracowania autora</a>.</p>
            </div>

            <div class="rk-calc-author-panel rk-calc-author-panel-exp">
              <p>Doświadczenie autora obejmuje obliczenia obciążenia cieplnego pomieszczeń, dobór temperatury zasilania, rozstawu i długości pętli, przepływów, oporów hydraulicznych, rozdzielaczy oraz pomp obiegowych. Projekty łączą dane cieplne z możliwym do wykonania przebiegiem rur i tabelą nastaw dla każdej pętli.</p>
            </div>

            <div class="rk-calc-author-panel rk-calc-author-panel-sites">
              <p>Autor jest właścicielem trzech serwisów poświęconych projektowaniu instalacji, budowie i remontom. Powiązanie portali jest podane jawnie, aby czytelnik znał autorstwo oraz kontekst linkowania.</p>
              <div class="rk-calc-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-calc-final-cta" aria-label="Profesjonalny projekt ogrzewania podłogowego">
        <div class="rk-calc-final-cta-content">
          <span class="rk-calc-kicker" style="color:#79f1ff">Od szacunku do dokumentacji wykonawczej</span>
          <h2>Każde pomieszczenie potrzebuje własnych obliczeń i rzeczywistego przebiegu pętli</h2>
          <p>Projekt ogrzewania podłogowego określa obciążenie cieplne, aktywne powierzchnie, rozstaw i długość każdego obwodu, projektowe przepływy, opory hydrauliczne, nastawy rozdzielacza oraz schemat współpracy ze źródłem ciepła. Otrzymujesz dokumentację, którą można przekazać wykonawcy przed ułożeniem rur i zalaniem posadzki.</p>
          <a class="rk-calc-cta-button rk-calc-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
          <small class="rk-calc-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
        </div>
      </section>
    </div>
  </div>
</article>

<!-- RK_CALC_SCHEMA -->
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article",
      "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/",
      "headline": "Kompleksowy kalkulator ogrzewania podłogowego – rury, pętle, przepływy i hydraulika",
      "description": "Kompleksowy kalkulator ogrzewania podłogowego obliczy rury, pętle, przepływy i zład. Sprawdź pomieszczenia, rozstaw oraz hydraulikę instalacji dla Twojego domu.",
      "dateModified": "2026-08-26",
      "inLanguage": "pl-PL",
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webpage"
      },
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "reviewedBy": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "accountablePerson": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "copyrightHolder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "articleSection": [
        "Kalkulatory budowlane",
        "Ogrzewanie podłogowe",
        "Projektowanie instalacji",
        "Hydraulika"
      ],
      "keywords": [
        "kompleksowy kalkulator ogrzewania podłogowego",
        "kalkulator ogrzewania podłogowego online",
        "kalkulator liczby pętli podłogówki",
        "kalkulator długości rury ogrzewania podłogowego",
        "kalkulator przepływu podłogówki",
        "rozstaw rur ogrzewania podłogowego",
        "opory hydrauliczne pętli",
        "pojemność wodna ogrzewania podłogowego"
      ],
      "about": [
        {
          "@type": "Thing",
          "name": "Wodne ogrzewanie podłogowe"
        },
        {
          "@type": "Thing",
          "name": "Obliczenia hydrauliczne pętli grzewczych"
        },
        {
          "@type": "Thing",
          "name": "Rozstaw i długość rur"
        },
        {
          "@type": "Thing",
          "name": "Przepływy na rozdzielaczu"
        }
      ],
      "citation": [
        "https://sklep.pkn.pl/pn-en-12831-1-2017-08e.html",
        "https://sklep.pkn.pl/pn-en-1264-2-2021-10e.html",
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://sklep.pkn.pl/normy/pn-en-12828-a1-2014-05e.html"
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#webpage",
      "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/",
      "name": "Kompleksowy kalkulator ogrzewania podłogowego – rury, pętle, przepływy i hydraulika",
      "description": "Kompleksowy kalkulator ogrzewania podłogowego obliczy rury, pętle, przepływy i zład. Sprawdź pomieszczenia, rozstaw oraz hydraulikę instalacji dla Twojego domu.",
      "dateModified": "2026-08-26",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#breadcrumb"
      },
      "mainEntity": [
        {
          "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#article"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#application"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#faq"
        }
      ]
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Strona główna",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Narzędzia i kalkulatory",
          "item": "https://projekt-ogrzewania.pl/category/narzedzia-i-kalkulatory/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Kompleksowy kalkulator ogrzewania podłogowego",
          "item": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/"
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#application",
      "name": "Kompleksowy kalkulator ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-tool",
      "description": "Wielopomieszczeniowy kalkulator orientacyjnej długości rur, liczby pętli, rozstawu, przepływów, prędkości wody, strat ciśnienia i pojemności wodnej ogrzewania podłogowego.",
      "applicationCategory": "EducationalApplication",
      "applicationSubCategory": "HVAC calculation tool",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript oraz obsługa standardów HTML5",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "featureList": [
        "Obsługa wielu pomieszczeń",
        "Obliczanie wymaganej mocy powierzchniowej",
        "Orientacyjny dobór rozstawu rur",
        "Szacowanie długości rur i liczby pętli",
        "Obliczanie przepływu pomieszczeń i pętli",
        "Obliczanie prędkości wody i liczby Reynoldsa",
        "Szacowanie strat ciśnienia",
        "Obliczanie pojemności wodnej rur"
      ],
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#howto",
      "name": "Jak poprawnie korzystać z kalkulatora ogrzewania podłogowego",
      "description": "Sześć kroków od obciążenia cieplnego pomieszczeń do weryfikacji pętli, przepływów i przeniesienia wyników na rzut budynku.",
      "inLanguage": "pl-PL",
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Zdobądź obciążenie pomieszczeń",
          "text": "Najlepiej użyj wyników obliczeń cieplnych. Jeżeli przyjmujesz W/m², potraktuj rezultat wyłącznie jako wariant orientacyjny.",
          "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-howto"
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Wyznacz czynne pola podłogi",
          "text": "Odejmij stałą zabudowę i powierzchnie, pod którymi nie wolno albo nie ma sensu układać przewodów.",
          "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-howto"
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Wpisz temperatury i okładziny",
          "text": "Podaj wspólne zasilanie i powrót oraz rzeczywisty opór wykończenia w każdym pomieszczeniu.",
          "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-howto"
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Sprawdź moc powierzchniową",
          "text": "Jeżeli wymagana moc przekracza możliwości posadzki, nie naprawiaj wyniku samym zagęszczaniem rur — przeanalizuj cały układ.",
          "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-howto"
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Skontroluj pętle i hydraulikę",
          "text": "Porównaj długości, przepływy, prędkości oraz orientacyjne straty ciśnienia. Zwróć uwagę na obieg najbardziej niekorzystny.",
          "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-howto"
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Przenieś wynik na rzut",
          "text": "Dopiero rozmieszczenie pętli na planie potwierdzi rzeczywiste dobiegi, podział stref, liczbę sekcji i wykonalność instalacji.",
          "url": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#rk-calc-howto"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/#faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy kalkulator ogrzewania podłogowego zastępuje projekt?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Kalkulator pokazuje zależności i orientacyjne parametry na podstawie wpisanych danych, ale nie wykonuje pełnych obliczeń przegród, nie rozrysowuje pętli, nie zna oporów całej armatury ani charakterystyki konkretnej pompy. Do wykonania instalacji potrzebny jest projekt dopasowany do rzutu budynku."
          }
        },
        {
          "@type": "Question",
          "name": "Ile metrów rury potrzeba na 1 m² ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Teoretycznie około 20 m/m² przy rozstawie 5 cm, 10 m/m² przy 10 cm, 6,67 m/m² przy 15 cm i 5 m/m² przy 20 cm. Do tego trzeba doliczyć łuki, podział pola oraz osobne odcinki zasilania i powrotu każdej pętli."
          }
        },
        {
          "@type": "Question",
          "name": "Jaka jest maksymalna długość pętli podłogówki?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie istnieje jedna długość gwarantująca poprawność każdej instalacji. Dla rury 16×2 mm często projektuje się pętle około 80–100 m, ale wynik trzeba sprawdzić na podstawie przepływu, średnicy wewnętrznej, oporów miejscowych i ciśnienia dostępnego z pompy."
          }
        },
        {
          "@type": "Question",
          "name": "Jak kalkulator dobiera rozstaw rur?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Porównuje wymaganą moc z 1 m² czynnej posadzki z orientacyjnymi możliwościami rozstawów 20, 15, 10 i 5 cm przy podanych temperaturach oraz oporze okładziny. Wybiera najszerszy rozstaw spełniający uproszczone kryterium, lecz wynik wymaga weryfikacji dla konkretnego systemu podłogi."
          }
        },
        {
          "@type": "Question",
          "name": "Jak obliczyć przepływ w pętli ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Przepływ wynika z mocy przenoszonej przez pętlę oraz różnicy temperatury między zasilaniem a powrotem. Dla wody można użyć zależności V̇ ≈ Φ/(4180×ΔT)×60, otrzymując l/min, a następnie podzielić przepływ pomieszczenia pomiędzy jego obwody."
          }
        },
        {
          "@type": "Question",
          "name": "Czy każda łazienka powinna mieć rury co 10 cm?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie automatycznie. Łazienki często wymagają gęstego rozstawu z powodu temperatury projektowej 24°C i małej wolnej powierzchni, ale ostateczna decyzja zależy od strat, temperatury wody, okładziny i dostępnego pola grzewczego."
          }
        },
        {
          "@type": "Question",
          "name": "Czy kalkulator dobierze pompę obiegową?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Kalkulator podaje przepływ całkowity i orientacyjny opór najbardziej wymagającej pętli. Pełny dobór pompy wymaga jeszcze oporów magistrali, rozdzielacza, zaworów, filtrów, źródła ciepła i innych elementów wspólnego obiegu."
          }
        },
        {
          "@type": "Question",
          "name": "Jak obliczana jest pojemność wodna rur?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Pojemność wynika z pola przekroju wewnętrznego przewodu pomnożonego przez jego długość. Dla rury 16×2 mm o średnicy wewnętrznej około 12 mm jest to około 0,113 litra na metr. Całkowity zład instalacji obejmuje również rozdzielacze, magistrale, źródło i ewentualny bufor."
          }
        }
      ]
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
        "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
        "width": 360,
        "height": 360
      },
      "jobTitle": "Projektant instalacji sanitarnych, specjalista HVAC i ogrzewania podłogowego",
      "description": "Projektant wodnych instalacji ogrzewania podłogowego i autor opracowań technicznych dotyczących obliczeń cieplnych, hydrauliki, źródeł ciepła i automatyki. Właściciel serwisów Projekt-Ogrzewania.pl, Remont.biz.pl i Sobir.pl.",
      "knowsAbout": [
        "projektowanie ogrzewania podłogowego",
        "obliczenia obciążenia cieplnego",
        "hydraulika instalacji grzewczych",
        "dobór pomp obiegowych",
        "równoważenie hydrauliczne",
        "pompy ciepła"
      ],
      "sameAs": [
        "https://projekt-ogrzewania.pl/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ],
      "owns": [
        {
          "@id": "https://projekt-ogrzewania.pl/#organization"
        },
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "description": "Serwis poświęcony projektowaniu wodnego ogrzewania podłogowego, należący do Roberta Kucharskiego.",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
        "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg"
      },
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "owner": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "description": "Serwis budowlano-remontowy należący do Roberta Kucharskiego.",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "owner": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "description": "Portal o budowie, instalacjach i technologii domu należący do Roberta Kucharskiego.",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      },
      "owner": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    },
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "description": "Projektowanie ogrzewania podłogowego i techniczna wiedza o instalacjach grzewczych.",
      "inLanguage": "pl-PL",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "copyrightHolder": {
        "@id": "https://projekt-ogrzewania.pl/#/schema/person/8f64aaec51c6581f1ab55e3d7f3a82d1"
      }
    }
  ]
}
</script>

<!-- RK_CALC_SCRIPT -->
<script>
(function () {
  "use strict";

  function initializeFloorCalculator() {
    var root = document.getElementById("rk-floor-calc-guide");
    if (!root) {
      return false;
    }
    if (root.getAttribute("data-rk-calc-ready") === "1") {
      return true;
    }

    var form = document.getElementById("rk-calc-form");
    var roomList = document.getElementById("rk-calc-room-list");
    if (!form) {
      return false;
    }
    if (!roomList) {
      return false;
    }

    var roomCounter = roomList.querySelectorAll(".rk-calc-room").length;
    var sampleRooms = [
      { name: "Salon z aneksem", type: "standard", area: 35, active: 30, load: 1400, floor: "0.01", distance: 7, spacing: "auto" },
      { name: "Łazienka", type: "bathroom", area: 8, active: 6, load: 560, floor: "0.01", distance: 6, spacing: "auto" },
      { name: "Sypialnia", type: "standard", area: 15, active: 13, load: 600, floor: "0.07", distance: 9, spacing: "auto" }
    ];

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

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

    function numberFromElement(element, fallback) {
      if (!element) {
        return fallback;
      }
      var raw = String(element.value).replace(",", ".");
      var parsed = Number(raw);
      return Number.isFinite(parsed) ? parsed : fallback;
    }

    function numberFromId(id, fallback) {
      return numberFromElement(byId(id), fallback);
    }

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

    function polishPlural(value, singular, paucal, plural) {
      var integer = Math.abs(Math.round(value));
      var lastTwo = integer % 100;
      var last = integer % 10;
      if (integer === 1) {
        return singular;
      }
      if (last >= 2) {
        if (last <= 4) {
          if (lastTwo < 12) {
            return paucal;
          }
          if (lastTwo > 14) {
            return paucal;
          }
        }
      }
      return plural;
    }

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

    function getRoomType(type) {
      if (type === "bathroom") {
        return { indoor: 24, maxSurface: 33, label: "Łazienka" };
      }
      if (type === "edge") {
        return { indoor: 21, maxSurface: 35, label: "Strefa brzegowa" };
      }
      return { indoor: 21, maxSurface: 29, label: "Pokój" };
    }

    function capacityForSpacing(spacing, meanWater, indoor, floorResistance) {
      var coefficients = {
        5: 6.3,
        10: 5.7,
        15: 5.0,
        20: 4.3
      };
      var coefficient = coefficients[spacing] || coefficients[15];
      var temperatureDifference = Math.max(0, meanWater - indoor);
      var floorFactor = 1 / (1 + 4 * floorResistance);
      return coefficient * temperatureDifference * floorFactor;
    }

    function chooseSpacing(requiredOutput, meanWater, indoor, floorResistance) {
      var options = [20, 15, 10, 5];
      var chosen = 5;
      options.some(function (spacing) {
        var capacity = capacityForSpacing(spacing, meanWater, indoor, floorResistance);
        if (capacity >= requiredOutput) {
          chosen = spacing;
          return true;
        }
        return false;
      });
      return chosen;
    }

    function frictionFactor(reynolds, diameter) {
      if (reynolds <= 0) {
        return 0;
      }
      if (reynolds < 2300) {
        return 64 / Math.max(1, reynolds);
      }
      var roughness = 0.000007;
      var term = Math.pow(roughness / (3.7 * diameter), 1.11) + 6.9 / reynolds;
      var denominator = -1.8 * Math.log10(term);
      return 1 / Math.pow(denominator, 2);
    }

    function calculateRoom(row, index, settings) {
      var nameInput = row.querySelector(".rk-room-name");
      var typeInput = row.querySelector(".rk-room-type");
      var areaInput = row.querySelector(".rk-room-area");
      var activeInput = row.querySelector(".rk-room-active");
      var loadInput = row.querySelector(".rk-room-load");
      var floorInput = row.querySelector(".rk-room-floor");
      var distanceInput = row.querySelector(".rk-room-distance");
      var spacingInput = row.querySelector(".rk-room-spacing");

      var name = nameInput ? nameInput.value.trim() : "";
      if (!name) {
        name = "Pomieszczenie " + (index + 1);
      }

      var typeValue = typeInput ? typeInput.value : "standard";
      var type = getRoomType(typeValue);
      var area = clamp(numberFromElement(areaInput, 1), 0.1, 200);
      var activeRaw = clamp(numberFromElement(activeInput, area), 0.1, 200);
      var active = Math.min(activeRaw, area);
      var load = clamp(numberFromElement(loadInput, 50), 1, 15000);
      var floorResistance = clamp(numberFromElement(floorInput, 0.01), 0, 0.2);
      var distance = clamp(numberFromElement(distanceInput, 0), 0, 50);
      var spacingValue = spacingInput ? spacingInput.value : "auto";

      var requiredOutput = load / active;
      var spacing = spacingValue === "auto"
        ? chooseSpacing(requiredOutput, settings.meanWater, type.indoor, floorResistance)
        : clamp(Number(spacingValue), 5, 20);
      var availableOutput = capacityForSpacing(spacing, settings.meanWater, type.indoor, floorResistance);
      var availablePower = availableOutput * active;

      var fieldLength = active / (spacing / 100) * settings.geometryFactor;
      var availableFieldPerLoop = settings.targetLength - 2 * distance;
      var loops = 1;
      var geometryImpossible = false;
      if (availableFieldPerLoop > 5) {
        loops = Math.max(1, Math.ceil(fieldLength / availableFieldPerLoop));
      } else {
        loops = Math.max(1, Math.ceil(fieldLength / Math.max(5, settings.targetLength * 0.55)));
        geometryImpossible = true;
      }
      if (loops > 24) {
        loops = 24;
        geometryImpossible = true;
      }

      var connectionLength = 2 * distance * loops;
      var totalLength = fieldLength + connectionLength;
      var averageLoopLength = totalLength / loops;
      var roomFlow = load / (4180 * settings.deltaT) * 60;
      var loopFlow = roomFlow / loops;
      var volumetricFlow = loopFlow / 1000 / 60;
      var pipeArea = Math.PI * Math.pow(settings.pipeDiameter, 2) / 4;
      var velocity = pipeArea > 0 ? volumetricFlow / pipeArea : 0;
      var reynolds = settings.density * velocity * settings.pipeDiameter / settings.viscosity;
      var factor = frictionFactor(reynolds, settings.pipeDiameter);
      var pressurePa = factor * averageLoopLength / settings.pipeDiameter * settings.density * Math.pow(velocity, 2) / 2;
      var pressureKpa = pressurePa * 1.2 / 1000;
      var volume = totalLength * pipeArea * 1000;
      var deliveredOutput = Math.min(requiredOutput, availableOutput);
      var surfaceTemperature = type.indoor + deliveredOutput / 10.8;

      var thermalStatus = "Wstępnie OK";
      var hydraulicStatus = "Wstępnie OK";
      var errors = [];
      var warnings = [];

      if (activeRaw > area) {
        errors.push(name + ": powierzchnia grzewcza jest większa od powierzchni pomieszczenia");
      }
      if (availablePower + 1 < load) {
        thermalStatus = "Niedobór mocy";
        errors.push(name + ": wybrany rozstaw i temperatury nie pokrywają wpisanej straty");
      }
      if (surfaceTemperature > type.maxSurface) {
        thermalStatus = "Sprawdź temperaturę";
        errors.push(name + ": szacowana temperatura powierzchni przekracza przyjęty limit strefy");
      }
      if (geometryImpossible) {
        hydraulicStatus = "Do korekty";
        errors.push(name + ": odległość od rozdzielacza lub geometria uniemożliwia docelową długość pętli");
      }
      if (averageLoopLength > settings.targetLength + 0.5) {
        hydraulicStatus = "Do korekty";
        errors.push(name + ": średnia długość pętli przekracza ustawiony cel");
      }
      if (pressureKpa > 20) {
        hydraulicStatus = "Do korekty";
        errors.push(name + ": orientacyjny opór pętli przekracza 20 kPa");
      } else if (pressureKpa > 15) {
        hydraulicStatus = "Sprawdź";
        warnings.push(name + ": orientacyjny opór pętli przekracza 15 kPa");
      }
      if (velocity > 0.6) {
        hydraulicStatus = "Do korekty";
        errors.push(name + ": prędkość w rurze przekracza 0,60 m/s");
      } else if (velocity < 0.1) {
        if (hydraulicStatus === "Wstępnie OK") {
          hydraulicStatus = "Sprawdź";
        }
        warnings.push(name + ": bardzo mała prędkość wymaga sprawdzenia regulacji i odpowietrzania");
      } else if (velocity < 0.15) {
        if (hydraulicStatus === "Wstępnie OK") {
          hydraulicStatus = "Sprawdź";
        }
        warnings.push(name + ": prędkość jest niższa od typowego zakresu kontrolnego");
      }

      return {
        name: name,
        type: type,
        area: area,
        active: active,
        load: load,
        floorResistance: floorResistance,
        distance: distance,
        spacing: spacing,
        requiredOutput: requiredOutput,
        availableOutput: availableOutput,
        availablePower: availablePower,
        fieldLength: fieldLength,
        connectionLength: connectionLength,
        totalLength: totalLength,
        loops: loops,
        averageLoopLength: averageLoopLength,
        roomFlow: roomFlow,
        loopFlow: loopFlow,
        velocity: velocity,
        reynolds: reynolds,
        pressureKpa: pressureKpa,
        volume: volume,
        surfaceTemperature: surfaceTemperature,
        thermalStatus: thermalStatus,
        hydraulicStatus: hydraulicStatus,
        errors: errors,
        warnings: warnings
      };
    }

    function makeCell(label, value, emphasize) {
      var cell = document.createElement("td");
      cell.setAttribute("data-label", label);
      if (emphasize) {
        var strong = document.createElement("strong");
        strong.textContent = value;
        cell.appendChild(strong);
      } else {
        cell.textContent = value;
      }
      return cell;
    }

    function appendRow(body, cells) {
      var row = document.createElement("tr");
      cells.forEach(function (cell) {
        row.appendChild(cell);
      });
      body.appendChild(row);
    }

    function renderTables(results, settings) {
      var thermalBody = byId("rk-calc-thermal-body");
      var geometryBody = byId("rk-calc-geometry-body");
      var hydraulicBody = byId("rk-calc-hydraulic-body");
      if (!thermalBody) {
        return;
      }
      if (!geometryBody) {
        return;
      }
      if (!hydraulicBody) {
        return;
      }

      thermalBody.textContent = "";
      geometryBody.textContent = "";
      hydraulicBody.textContent = "";

      results.forEach(function (result) {
        appendRow(thermalBody, [
          makeCell("Pomieszczenie", result.name, true),
          makeCell("Strata", formatNumber(result.load, 0) + " W"),
          makeCell("Pow. czynna", formatNumber(result.active, 1) + " m²"),
          makeCell("Wymagane q", formatNumber(result.requiredOutput, 1) + " W/m²"),
          makeCell("Rozstaw", formatNumber(result.spacing, 0) + " cm"),
          makeCell("Szac. możliwości", formatNumber(result.availableOutput, 1) + " W/m²"),
          makeCell("Temp. powierzchni", formatNumber(result.surfaceTemperature, 1) + "°C"),
          makeCell("Ocena", result.thermalStatus, true)
        ]);

        appendRow(geometryBody, [
          makeCell("Pomieszczenie", result.name, true),
          makeCell("Rozstaw", formatNumber(result.spacing, 0) + " cm"),
          makeCell("Długość pola", formatNumber(result.fieldLength, 1) + " m"),
          makeCell("Dobiegi", formatNumber(result.connectionLength, 1) + " m"),
          makeCell("Rura łącznie", formatNumber(result.totalLength, 1) + " m"),
          makeCell("Pętle", formatNumber(result.loops, 0)),
          makeCell("Śr. pętla", formatNumber(result.averageLoopLength, 1) + " m"),
          makeCell("Zład rur", formatNumber(result.volume, 1) + " l")
        ]);

        appendRow(hydraulicBody, [
          makeCell("Pomieszczenie", result.name, true),
          makeCell("Przepływ pom.", formatNumber(result.roomFlow, 2) + " l/min"),
          makeCell("Przepływ pętli", formatNumber(result.loopFlow, 2) + " l/min"),
          makeCell("Prędkość", formatNumber(result.velocity, 3) + " m/s"),
          makeCell("Re", formatNumber(result.reynolds, 0)),
          makeCell("Opór pętli", formatNumber(result.pressureKpa, 1) + " kPa"),
          makeCell("ΔT", formatNumber(settings.deltaT, 1) + " K"),
          makeCell("Ocena", result.hydraulicStatus, true)
        ]);
      });
    }

    function renderBars(results) {
      var bars = byId("rk-calc-bars");
      if (!bars) {
        return;
      }
      bars.textContent = "";
      var maximum = 1;
      results.forEach(function (result) {
        maximum = Math.max(maximum, result.requiredOutput);
      });

      results.forEach(function (result) {
        var row = document.createElement("div");
        row.className = "rk-calc-bar-row";

        var name = document.createElement("div");
        name.className = "rk-calc-bar-name";
        name.textContent = result.name;

        var track = document.createElement("div");
        track.className = "rk-calc-bar-track";
        var fill = document.createElement("div");
        fill.className = "rk-calc-bar-fill";
        fill.style.width = clamp(result.requiredOutput / maximum * 100, 0, 100).toFixed(2) + "%";
        if (result.thermalStatus !== "Wstępnie OK") {
          fill.style.background = "linear-gradient(90deg, #ff7438, #e34837)";
        }
        track.appendChild(fill);

        var value = document.createElement("div");
        value.className = "rk-calc-bar-value";
        value.textContent = formatNumber(result.requiredOutput, 1) + " W/m²";

        row.appendChild(name);
        row.appendChild(track);
        row.appendChild(value);
        bars.appendChild(row);
      });
    }

    function updateStatus(errors, warnings, settings) {
      var status = byId("rk-calc-status");
      if (!status) {
        return;
      }

      var title = "Wstępne kryteria kalkulatora są spełnione";
      var copy = "Wynik nadal wymaga przeniesienia na rzut oraz sprawdzenia pełnego obiegu hydraulicznego.";
      var className = "rk-calc-status";

      if (settings.globalError) {
        className += " is-danger";
        title = "Temperatura powrotu musi być niższa od temperatury zasilania";
        copy = "Na potrzeby obliczenia przyjęto zastępcze ΔT = 1 K. Popraw temperatury wspólne, aby uzyskać użyteczny wynik.";
      } else if (errors.length > 0) {
        className += " is-danger";
        title = formatNumber(errors.length, 0) + " " + polishPlural(errors.length, "element wymaga", "elementy wymagają", "elementów wymaga") + " korekty";
        copy = errors.slice(0, 3).join(" • ");
        if (errors.length > 3) {
          copy += " • oraz " + formatNumber(errors.length - 3, 0) + " kolejne";
        }
      } else if (warnings.length > 0) {
        className += " is-warning";
        title = formatNumber(warnings.length, 0) + " " + polishPlural(warnings.length, "parametr wymaga", "parametry wymagają", "parametrów wymaga") + " sprawdzenia";
        copy = warnings.slice(0, 3).join(" • ");
        if (warnings.length > 3) {
          copy += " • oraz " + formatNumber(warnings.length - 3, 0) + " kolejne";
        }
      }

      status.className = className;
      setText("rk-calc-status-title", title);
      setText("rk-calc-status-copy", copy);
    }

    function calculate() {
      var supply = numberFromId("rk-calc-supply", 35);
      var returnTemperature = numberFromId("rk-calc-return", 28);
      var pipeDiameter = numberFromId("rk-calc-pipe", 0.012);
      var targetLength = numberFromId("rk-calc-loop-target", 90);
      var geometryFactor = numberFromId("rk-calc-geometry-factor", 1.05);
      var rawDeltaT = supply - returnTemperature;
      var globalError = rawDeltaT <= 0;
      var deltaT = globalError ? 1 : rawDeltaT;

      var settings = {
        supply: supply,
        returnTemperature: returnTemperature,
        meanWater: (supply + returnTemperature) / 2,
        pipeDiameter: pipeDiameter,
        targetLength: targetLength,
        geometryFactor: geometryFactor,
        deltaT: deltaT,
        density: 995,
        viscosity: 0.0008,
        globalError: globalError
      };

      var rows = Array.prototype.slice.call(roomList.querySelectorAll(".rk-calc-room"));
      var results = rows.map(function (row, index) {
        return calculateRoom(row, index, settings);
      });

      var totals = results.reduce(function (accumulator, result) {
        accumulator.load += result.load;
        accumulator.area += result.area;
        accumulator.active += result.active;
        accumulator.pipe += result.totalLength;
        accumulator.loops += result.loops;
        accumulator.flow += result.roomFlow;
        accumulator.volume += result.volume;
        accumulator.maxPressure = Math.max(accumulator.maxPressure, result.pressureKpa);
        accumulator.errors = accumulator.errors.concat(result.errors);
        accumulator.warnings = accumulator.warnings.concat(result.warnings);
        return accumulator;
      }, {
        load: 0,
        area: 0,
        active: 0,
        pipe: 0,
        loops: 0,
        flow: 0,
        volume: 0,
        maxPressure: 0,
        errors: [],
        warnings: []
      });

      setText("rk-result-load", formatNumber(totals.load, 0) + " W");
      setText("rk-result-pipe", formatNumber(totals.pipe, 0) + " m");
      setText("rk-result-loops", formatNumber(totals.loops, 0));
      setText("rk-result-flow", formatNumber(totals.flow * 0.06, 2) + " m³/h");
      setText("rk-result-area", formatNumber(totals.area, 1) + " m²");
      setText("rk-result-active", formatNumber(totals.active, 1) + " m²");
      setText("rk-result-volume", formatNumber(totals.volume, 1) + " l");
      setText("rk-result-pressure", formatNumber(totals.maxPressure, 1) + " kPa");

      renderTables(results, settings);
      renderBars(results);
      updateStatus(totals.errors, totals.warnings, settings);
      updateRoomIndexes();
    }

    function roomMarkup() {
      return [
        '<span class="rk-calc-room-index">01</span>',
        '<div class="rk-calc-field"><label>Nazwa</label><input class="rk-room-name" type="text" value="" maxlength="50"></div>',
        '<div class="rk-calc-field"><label>Typ strefy</label><select class="rk-room-type"><option value="standard">Pokój 20–21°C</option><option value="bathroom">Łazienka 24°C</option><option value="edge">Strefa brzegowa</option></select></div>',
        '<div class="rk-calc-field"><label>Powierzchnia</label><input class="rk-room-area" type="number" min="1" max="200" step="0.1" value="12"><small>m²</small></div>',
        '<div class="rk-calc-field"><label>Pow. grzewcza</label><input class="rk-room-active" type="number" min="0.5" max="200" step="0.1" value="10"><small>m²</small></div>',
        '<div class="rk-calc-field"><label>Strata cieplna</label><input class="rk-room-load" type="number" min="50" max="15000" step="10" value="500"><small>W</small></div>',
        '<div class="rk-calc-field"><label>Okładzina</label><select class="rk-room-floor"><option value="0.01">Płytki R=0,01</option><option value="0.03">Winyl R=0,03</option><option value="0.07">Panel R=0,07</option><option value="0.10">Drewno R=0,10</option><option value="0.15">Dywan R=0,15</option></select></div>',
        '<div class="rk-calc-field"><label>Odległość</label><input class="rk-room-distance" type="number" min="0" max="50" step="0.5" value="6"><small>m do rozdzielacza</small></div>',
        '<div class="rk-calc-field"><label>Rozstaw</label><select class="rk-room-spacing"><option value="auto">Dobierz orientacyjnie</option><option value="5">5 cm</option><option value="10">10 cm</option><option value="15">15 cm</option><option value="20">20 cm</option></select></div>',
        '<button class="rk-calc-room-remove" type="button" aria-label="Usuń pomieszczenie">×</button>'
      ].join("");
    }

    function setRoomData(row, data) {
      row.querySelector(".rk-room-name").value = data.name;
      row.querySelector(".rk-room-type").value = data.type;
      row.querySelector(".rk-room-area").value = data.area;
      row.querySelector(".rk-room-active").value = data.active;
      row.querySelector(".rk-room-load").value = data.load;
      row.querySelector(".rk-room-floor").value = data.floor;
      row.querySelector(".rk-room-distance").value = data.distance;
      row.querySelector(".rk-room-spacing").value = data.spacing;
    }

    function createRoom(data) {
      roomCounter += 1;
      var row = document.createElement("div");
      row.className = "rk-calc-room";
      row.setAttribute("data-room-id", String(roomCounter));
      row.innerHTML = roomMarkup();
      setRoomData(row, data || {
        name: "Nowe pomieszczenie",
        type: "standard",
        area: 12,
        active: 10,
        load: 500,
        floor: "0.07",
        distance: 6,
        spacing: "auto"
      });
      roomList.appendChild(row);
      updateRoomIndexes();
      return row;
    }

    function updateRoomIndexes() {
      var rooms = roomList.querySelectorAll(".rk-calc-room");
      rooms.forEach(function (room, index) {
        var badge = room.querySelector(".rk-calc-room-index");
        var remove = room.querySelector(".rk-calc-room-remove");
        if (badge) {
          badge.textContent = String(index + 1).padStart(2, "0");
        }
        if (remove) {
          remove.disabled = rooms.length === 1;
          remove.setAttribute("aria-disabled", rooms.length === 1 ? "true" : "false");
        }
      });
    }

    function restoreSample() {
      roomList.textContent = "";
      roomCounter = 0;
      sampleRooms.forEach(function (data) {
        createRoom(data);
      });
      byId("rk-calc-supply").value = "35";
      byId("rk-calc-return").value = "28";
      byId("rk-calc-pipe").value = "0.012";
      byId("rk-calc-loop-target").value = "90";
      byId("rk-calc-geometry-factor").value = "1.05";
      calculate();
    }

    form.addEventListener("submit", function (event) {
      event.preventDefault();
      calculate();
      var results = byId("rk-calc-results");
      if (results) {
        var reducedMotion = false;
        if (window.matchMedia) {
          reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
        }
        results.scrollIntoView({
          behavior: reducedMotion ? "auto" : "smooth",
          block: "start"
        });
      }
    });

    form.addEventListener("input", function () {
      calculate();
    });

    form.addEventListener("change", function () {
      calculate();
    });

    var addRoomButton = byId("rk-calc-add-room");
    if (addRoomButton) {
      addRoomButton.addEventListener("click", function () {
        var count = roomList.querySelectorAll(".rk-calc-room").length;
        if (count >= 20) {
          return;
        }
        var row = createRoom();
        calculate();
        var firstInput = row.querySelector("input");
        if (firstInput) {
          firstInput.focus();
          firstInput.select();
        }
      });
    }

    var resetButton = byId("rk-calc-reset");
    if (resetButton) {
      resetButton.addEventListener("click", restoreSample);
    }

    roomList.addEventListener("click", function (event) {
      var target = event.target;
      if (!target) {
        return;
      }
      var removeButton = target.closest(".rk-calc-room-remove");
      if (!removeButton) {
        return;
      }
      var rooms = roomList.querySelectorAll(".rk-calc-room");
      if (rooms.length <= 1) {
        return;
      }
      var row = removeButton.closest(".rk-calc-room");
      if (row) {
        row.remove();
        calculate();
      }
    });

    var tabs = root.querySelectorAll(".rk-calc-tab[data-tab]");
    tabs.forEach(function (tab) {
      tab.addEventListener("click", function () {
        var tabName = tab.getAttribute("data-tab");
        tabs.forEach(function (item) {
          var active = item === tab;
          item.classList.toggle("is-active", active);
          item.setAttribute("aria-selected", active ? "true" : "false");
        });
        var panels = root.querySelectorAll(".rk-calc-tab-panel[data-panel]");
        panels.forEach(function (panel) {
          panel.classList.toggle("is-active", panel.getAttribute("data-panel") === tabName);
        });
      });
    });

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

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

    window.addEventListener("scroll", updateProgress, { passive: true });
    window.addEventListener("resize", updateProgress);
    updateRoomIndexes();
    calculate();
    updateProgress();
    root.setAttribute("data-rk-calc-ready", "1");
    return true;
  }

  function attemptFloorCalculatorInitialization() {
    initializeFloorCalculator();
  }

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

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

  if (window.MutationObserver) {
    var observer = new MutationObserver(function () {
      var root = document.getElementById("rk-floor-calc-guide");
      if (root) {
        initializeFloorCalculator();
        if (root.getAttribute("data-rk-calc-ready") === "1") {
          observer.disconnect();
        }
      }
    });
    observer.observe(document.documentElement, { childList: true, subtree: true });
  }
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">Kompleksowy kalkulator ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
