<?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 moc ogrzewania domu - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/moc-ogrzewania-domu/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/moc-ogrzewania-domu/</link>
	<description>Ogrzewanie podłogowe i systemy HVAC oparte na obliczeniach.</description>
	<lastBuildDate>Tue, 01 Sep 2026 15:06:39 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2026/10/Projekt-Ogrzewania-favicon-512-100x100.webp</url>
	<title>Archiwa moc ogrzewania domu - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/moc-ogrzewania-domu/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie.</title>
		<link>https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Mon, 09 Mar 2026 11:26:18 +0000</pubDate>
				<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Instalacja ogrzewania podłogowego]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Modernizacja domu]]></category>
		<category><![CDATA[Modernizacja ogrzewania]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[efektywność energetyczna]]></category>
		<category><![CDATA[ile wat na m2]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[kalkulator strat ciepła]]></category>
		<category><![CDATA[moc ogrzewania domu]]></category>
		<category><![CDATA[obliczanie strat ciepła]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<category><![CDATA[straty ciepła domu]]></category>
		<category><![CDATA[zapotrzebowanie na ogrzewanie]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3743</guid>

					<description><![CDATA[<p>Obliczenie zapotrzebowania na ciepło budynku to pierwszy krok do prawidłowego zaprojektowania instalacji grzewczej. W tym poradniku pokazujemy, jak w prosty sposób oszacować straty energii w domu i sprawdzić, czy ogrzewanie podłogowe będzie wystarczające. Dzięki praktycznym wskazówkom oraz przykładom obliczeń dowiesz się, jak wykorzystać kalkulator strat ciepła domu – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie, aby ocenić moc instalacji, temperaturę zasilania oraz potencjalne koszty eksploatacji. To wiedza szczególnie przydatna dla inwestorów budujących dom lub modernizujących starsze budynki.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-hl-guide {
    --rk-dark: #102536;
    --rk-navy: #15394d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e9fbff;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff1eb;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #e9ae27;
    --rk-yellow-soft: #fff8df;
    --rk-red: #d94b3d;
    --rk-red-soft: #fff0ee;
    --rk-purple: #695ac9;
    --rk-purple-soft: #f1efff;
    --rk-ink: #1f2c37;
    --rk-text: #475967;
    --rk-muted: #6d808d;
    --rk-line: #d5e4eb;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 72px;
    color: var(--rk-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.72;
  }

  #rk-hl-guide,
  #rk-hl-guide * { box-sizing: border-box; }
  #rk-hl-guide img,
  #rk-hl-guide svg { max-width: 100%; }
  #rk-hl-guide button,
  #rk-hl-guide input,
  #rk-hl-guide select,
  #rk-hl-guide label,
  #rk-hl-guide summary,
  #rk-hl-guide a { font: inherit; -webkit-tap-highlight-color: transparent; }
  #rk-hl-guide button,
  #rk-hl-guide input,
  #rk-hl-guide select { max-width: 100%; }
  #rk-hl-guide a {
    color: var(--rk-blue);
    font-weight: 780;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }
  #rk-hl-guide a:hover,
  #rk-hl-guide a:focus-visible { color: var(--rk-red); }
  #rk-hl-guide p,
  #rk-hl-guide ul,
  #rk-hl-guide ol { margin-top: 0; margin-bottom: 1.08em; }
  #rk-hl-guide h2,
  #rk-hl-guide h3,
  #rk-hl-guide h4 {
    margin-top: 0;
    color: var(--rk-dark);
    font-weight: 920;
    letter-spacing: -.035em;
    line-height: 1.15;
  }
  #rk-hl-guide h2 { margin-bottom: 18px; font-size: clamp(1.72rem, 4vw, 2.68rem); }
  #rk-hl-guide h3 { margin-bottom: 11px; font-size: clamp(1.12rem, 2.35vw, 1.46rem); }
  #rk-hl-guide h4 { margin-bottom: 8px; font-size: 1.02rem; }
  #rk-hl-guide strong { color: var(--rk-dark); }
  #rk-hl-guide [id] { scroll-margin-top: 24px; }

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

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

  #rk-hl-guide .rk-hl-nav {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 14px;
    align-items: start;
    padding: 18px clamp(20px, 4vw, 46px);
    border-bottom: 1px solid var(--rk-line);
    background: var(--rk-white);
  }
  #rk-hl-guide .rk-hl-nav-label {
    padding-top: 8px;
    color: var(--rk-dark);
    font-size: .65rem;
    font-weight: 950;
    letter-spacing: .07em;
    text-transform: uppercase;
    white-space: nowrap;
  }
  #rk-hl-guide .rk-hl-nav-links { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
  #rk-hl-guide .rk-hl-nav a {
    display: inline-flex;
    align-items: center;
    min-height: 36px;
    padding: 7px 13px;
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--rk-dark);
    background: var(--rk-soft);
    font-size: .68rem;
    font-weight: 900;
    line-height: 1.25;
    text-decoration: none;
  }
  #rk-hl-guide .rk-hl-nav a:hover,
  #rk-hl-guide .rk-hl-nav a:focus-visible { color: var(--rk-dark); border-color: var(--rk-cyan); background: var(--rk-cyan-soft); }

  #rk-hl-guide .rk-hl-content { padding: 0 clamp(22px, 5vw, 62px) 56px; }
  #rk-hl-guide .rk-hl-section { padding: clamp(44px, 7vw, 76px) 0; border-bottom: 1px solid var(--rk-line); }
  #rk-hl-guide .rk-hl-section:last-child { border-bottom: 0; }
  #rk-hl-guide .rk-hl-section-intro { max-width: 920px; color: var(--rk-text); font-size: 1.02rem; }
  #rk-hl-guide .rk-hl-eyebrow {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-blue);
    font-size: .66rem;
    font-weight: 950;
    letter-spacing: .09em;
    text-transform: uppercase;
  }

  #rk-hl-guide .rk-hl-answer {
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(260px, .55fr);
    gap: 22px;
    margin-top: 28px;
  }
  #rk-hl-guide .rk-hl-answer-main,
  #rk-hl-guide .rk-hl-answer-side,
  #rk-hl-guide .rk-hl-card {
    padding: clamp(22px, 4vw, 34px);
    border: 1px solid var(--rk-line);
    border-radius: 20px;
    background: var(--rk-white);
  }
  #rk-hl-guide .rk-hl-answer-main { border-left: 6px solid var(--rk-cyan); background: linear-gradient(135deg, var(--rk-cyan-soft), #fff 68%); }
  #rk-hl-guide .rk-hl-answer-main p:last-child,
  #rk-hl-guide .rk-hl-answer-side p:last-child,
  #rk-hl-guide .rk-hl-card p:last-child { margin-bottom: 0; }
  #rk-hl-guide .rk-hl-answer-number { display: block; margin-bottom: 8px; color: var(--rk-blue); font-size: clamp(1.65rem, 4vw, 2.7rem); font-weight: 950; line-height: 1; }
  #rk-hl-guide .rk-hl-answer-side { background: var(--rk-soft); }
  #rk-hl-guide .rk-hl-answer-side ul { margin-bottom: 0; padding-left: 20px; color: var(--rk-text); font-size: .85rem; }

  #rk-hl-guide .rk-hl-grid-2,
  #rk-hl-guide .rk-hl-grid-3,
  #rk-hl-guide .rk-hl-grid-4 { display: grid; gap: 16px; margin-top: 24px; }
  #rk-hl-guide .rk-hl-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-hl-guide .rk-hl-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-hl-guide .rk-hl-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-hl-guide .rk-hl-card { height: 100%; }
  #rk-hl-guide .rk-hl-card-icon {
    display: inline-grid;
    width: 42px;
    height: 42px;
    margin-bottom: 14px;
    place-items: center;
    border-radius: 12px;
    color: var(--rk-dark);
    background: var(--rk-cyan-soft);
    font-size: .8rem;
    font-weight: 950;
  }
  #rk-hl-guide .rk-hl-card p,
  #rk-hl-guide .rk-hl-card li { color: var(--rk-text); font-size: .82rem; }
  #rk-hl-guide .rk-hl-card ul { margin-bottom: 0; padding-left: 19px; }

  #rk-hl-guide .rk-hl-formula {
    margin: 22px 0;
    padding: 23px clamp(20px, 4vw, 34px);
    border: 1px solid #bce7ef;
    border-radius: 18px;
    color: var(--rk-dark);
    background: linear-gradient(135deg, #effcff, #fff);
    font-size: clamp(1.05rem, 2.5vw, 1.36rem);
    font-weight: 900;
    line-height: 1.45;
    text-align: center;
  }
  #rk-hl-guide .rk-hl-formula small { display: block; margin-top: 8px; color: var(--rk-muted); font-size: .7rem; font-weight: 650; }

  #rk-hl-guide .rk-hl-callout {
    margin: 24px 0;
    padding: 20px 22px;
    border-left: 5px solid var(--rk-yellow);
    border-radius: 14px;
    color: var(--rk-text);
    background: var(--rk-yellow-soft);
  }
  #rk-hl-guide .rk-hl-callout strong { display: block; margin-bottom: 5px; }
  #rk-hl-guide .rk-hl-callout p:last-child { margin-bottom: 0; }
  #rk-hl-guide .rk-hl-callout-red { border-left-color: var(--rk-red); background: var(--rk-red-soft); }
  #rk-hl-guide .rk-hl-callout-green { border-left-color: var(--rk-green); background: var(--rk-green-soft); }

  #rk-hl-guide .rk-hl-table-wrap { overflow: hidden; margin-top: 25px; border: 1px solid var(--rk-line); border-radius: 18px; }
  #rk-hl-guide table { width: 100%; margin: 0; border-collapse: collapse; font-size: .78rem; }
  #rk-hl-guide th { padding: 14px 15px; color: var(--rk-white); background: var(--rk-navy); font-size: .67rem; font-weight: 900; letter-spacing: .025em; text-align: left; }
  #rk-hl-guide td { padding: 14px 15px; border-bottom: 1px solid var(--rk-line); color: var(--rk-text); vertical-align: top; }
  #rk-hl-guide tbody tr:last-child td { border-bottom: 0; }
  #rk-hl-guide tbody tr:nth-child(even) { background: var(--rk-soft); }

  #rk-hl-guide .rk-hl-tool {
    overflow: hidden;
    margin-top: 30px;
    border-radius: 24px;
    color: #edf8fb;
    background: #102b3b;
    box-shadow: 0 22px 52px rgba(16, 37, 54, .18);
  }
  #rk-hl-guide .rk-hl-tool-head {
    padding: clamp(27px, 5vw, 46px);
    background:
      radial-gradient(circle at 88% 0%, rgba(37,199,216,.25), transparent 32%),
      linear-gradient(135deg, #153f52, #10576c);
  }
  #rk-hl-guide .rk-hl-tool-head h3 { margin-bottom: 10px; color: var(--rk-white); font-size: clamp(1.45rem, 3.4vw, 2.35rem); }
  #rk-hl-guide .rk-hl-tool-head p { max-width: 920px; margin-bottom: 0; color: #cce2e9; font-size: .82rem; }
  #rk-hl-guide .rk-hl-tool-body { padding: clamp(20px, 4vw, 38px); }
  #rk-hl-guide .rk-hl-step {
    margin-bottom: 22px;
    padding: clamp(20px, 3vw, 30px);
    border: 1px solid #355b6e;
    border-radius: 19px;
    background: #163546;
  }
  #rk-hl-guide .rk-hl-step:last-child { margin-bottom: 0; }
  #rk-hl-guide .rk-hl-step-title { display: flex; gap: 13px; align-items: flex-start; margin-bottom: 20px; }
  #rk-hl-guide .rk-hl-step-no {
    display: inline-grid;
    flex: 0 0 35px;
    width: 35px;
    height: 35px;
    place-items: center;
    border-radius: 10px;
    color: #073040;
    background: var(--rk-cyan);
    font-size: .77rem;
    font-weight: 950;
  }
  #rk-hl-guide .rk-hl-step-title h4 { margin-bottom: 4px; color: var(--rk-white); font-size: 1rem; }
  #rk-hl-guide .rk-hl-step-title p { margin-bottom: 0; color: #a9c6d1; font-size: .68rem; }
  #rk-hl-guide .rk-hl-field-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 13px; }
  #rk-hl-guide .rk-hl-field-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-hl-guide .rk-hl-field { min-width: 0; }
  #rk-hl-guide .rk-hl-field label { display: block; min-height: 38px; margin-bottom: 7px; color: #d8edf2; font-size: .64rem; font-weight: 850; line-height: 1.35; }
  #rk-hl-guide .rk-hl-field input,
  #rk-hl-guide .rk-hl-field select {
    width: 100%;
    min-height: 47px;
    padding: 10px 12px;
    border: 1px solid #6d8b99;
    border-radius: 10px;
    outline: 0;
    color: #102536;
    background: var(--rk-white);
    font-size: .76rem;
    font-weight: 760;
  }
  #rk-hl-guide .rk-hl-field input:focus,
  #rk-hl-guide .rk-hl-field select:focus { border-color: var(--rk-cyan); box-shadow: 0 0 0 3px rgba(37,199,216,.18); }
  #rk-hl-guide .rk-hl-field small { display: block; margin-top: 6px; color: #91b3c0; font-size: .58rem; line-height: 1.45; }
  #rk-hl-guide .rk-hl-field[hidden] { display: none; }

  #rk-hl-guide .rk-hl-envelope-head,
  #rk-hl-guide .rk-hl-envelope-row {
    display: grid;
    grid-template-columns: 1.25fr .72fr .72fr .72fr .82fr;
    gap: 10px;
    align-items: center;
  }
  #rk-hl-guide .rk-hl-envelope-head { margin-bottom: 8px; padding: 0 10px; color: #91b3c0; font-size: .57rem; font-weight: 900; letter-spacing: .03em; text-transform: uppercase; }
  #rk-hl-guide .rk-hl-envelope-row { margin-bottom: 9px; padding: 10px; border: 1px solid #315568; border-radius: 13px; background: #123041; }
  #rk-hl-guide .rk-hl-envelope-row:last-child { margin-bottom: 0; }
  #rk-hl-guide .rk-hl-envelope-name { color: #eaf8fb; font-size: .71rem; font-weight: 900; }
  #rk-hl-guide .rk-hl-envelope-name small { display: block; margin-top: 2px; color: #88aebc; font-size: .56rem; font-weight: 600; }
  #rk-hl-guide .rk-hl-envelope-row input {
    width: 100%;
    min-height: 42px;
    padding: 8px 10px;
    border: 1px solid #6d8b99;
    border-radius: 9px;
    outline: 0;
    color: #102536;
    background: #fff;
    font-size: .71rem;
    font-weight: 760;
  }
  #rk-hl-guide .rk-hl-envelope-row input:focus { border-color: var(--rk-cyan); box-shadow: 0 0 0 3px rgba(37,199,216,.18); }
  #rk-hl-guide .rk-hl-row-result { padding-right: 5px; color: #7defff; font-size: .76rem; font-weight: 950; text-align: right; }
  #rk-hl-guide .rk-hl-row-result small { display: block; color: #8eb0bd; font-size: .54rem; font-weight: 650; }

  #rk-hl-guide .rk-hl-results {
    padding: clamp(24px, 4vw, 38px);
    border: 1px solid #3e6578;
    border-radius: 21px;
    background: linear-gradient(145deg, #173c4e, #102d3d);
  }
  #rk-hl-guide .rk-hl-results-top { display: grid; grid-template-columns: 1.35fr repeat(3, minmax(0, .65fr)); gap: 12px; }
  #rk-hl-guide .rk-hl-result-main,
  #rk-hl-guide .rk-hl-result-card {
    min-width: 0;
    padding: 18px;
    border: 1px solid #3b6274;
    border-radius: 15px;
    background: rgba(8, 34, 48, .42);
  }
  #rk-hl-guide .rk-hl-result-main { border-color: #2ec8d7; background: linear-gradient(135deg, rgba(37,199,216,.16), rgba(8,34,48,.5)); }
  #rk-hl-guide .rk-hl-result-label { display: block; margin-bottom: 7px; color: #97bac7; font-size: .58rem; font-weight: 900; letter-spacing: .045em; text-transform: uppercase; }
  #rk-hl-guide .rk-hl-result-value { display: block; color: var(--rk-white); font-size: clamp(1.22rem, 3vw, 2.25rem); font-weight: 950; letter-spacing: -.04em; line-height: 1.08; }
  #rk-hl-guide .rk-hl-result-value small { color: #8ceffc; font-size: .56em; }
  #rk-hl-guide .rk-hl-result-note { display: block; margin-top: 6px; color: #a7c4ce; font-size: .57rem; line-height: 1.4; }
  #rk-hl-guide .rk-hl-result-card .rk-hl-result-value { font-size: clamp(1rem, 2.3vw, 1.52rem); }
  #rk-hl-guide .rk-hl-status {
    margin-top: 14px;
    padding: 15px 17px;
    border-left: 5px solid var(--rk-yellow);
    border-radius: 12px;
    color: #f1f8fa;
    background: rgba(233,174,39,.12);
    font-size: .69rem;
  }
  #rk-hl-guide .rk-hl-status[data-level="good"] { border-left-color: #32d5a5; background: rgba(50,213,165,.11); }
  #rk-hl-guide .rk-hl-status[data-level="alert"] { border-left-color: #ff7157; background: rgba(255,113,87,.12); }

  #rk-hl-guide .rk-hl-chart-panel,
  #rk-hl-guide .rk-hl-breakdown-panel,
  #rk-hl-guide .rk-hl-diagnostic-panel {
    margin-top: 18px;
    padding: clamp(20px, 3vw, 28px);
    border: 1px solid #3b6071;
    border-radius: 17px;
    background: #123242;
  }
  #rk-hl-guide .rk-hl-chart-panel h4,
  #rk-hl-guide .rk-hl-breakdown-panel h4,
  #rk-hl-guide .rk-hl-diagnostic-panel h4 { color: var(--rk-white); }
  #rk-hl-guide .rk-hl-chart-panel p,
  #rk-hl-guide .rk-hl-breakdown-panel p,
  #rk-hl-guide .rk-hl-diagnostic-panel p { color: #9ebfca; font-size: .65rem; }
  #rk-hl-guide .rk-hl-chart-box { overflow: hidden; min-height: 330px; padding: 8px; border-radius: 13px; background: #f8fdff; }
  #rk-hl-guide .rk-hl-chart-box svg { display: block; width: 100%; height: auto; min-height: 310px; }
  #rk-hl-guide .rk-hl-chart-legend { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 10px; color: #b9d2db; font-size: .61rem; font-weight: 800; }
  #rk-hl-guide .rk-hl-chart-legend span { display: inline-flex; align-items: center; gap: 6px; }
  #rk-hl-guide .rk-hl-chart-legend i { display: inline-block; width: 22px; height: 4px; border-radius: 4px; background: var(--rk-cyan); }
  #rk-hl-guide .rk-hl-chart-legend .rk-hl-legend-design { background: var(--rk-orange); }
  #rk-hl-guide .rk-hl-breakdown-list { display: grid; gap: 12px; }
  #rk-hl-guide .rk-hl-breakdown-row { display: grid; grid-template-columns: 150px minmax(0, 1fr) 100px; gap: 12px; align-items: center; }
  #rk-hl-guide .rk-hl-breakdown-name { color: #dceef3; font-size: .66rem; font-weight: 820; }
  #rk-hl-guide .rk-hl-breakdown-track { overflow: hidden; height: 12px; border-radius: 999px; background: #234c5e; }
  #rk-hl-guide .rk-hl-breakdown-bar { display: block; width: 0; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--rk-cyan), #60e6ef); transition: width .25s ease; }
  #rk-hl-guide .rk-hl-breakdown-row:nth-child(2) .rk-hl-breakdown-bar { background: linear-gradient(90deg, var(--rk-orange), #ff9a79); }
  #rk-hl-guide .rk-hl-breakdown-row:nth-child(3) .rk-hl-breakdown-bar { background: linear-gradient(90deg, var(--rk-purple), #9688ec); }
  #rk-hl-guide .rk-hl-breakdown-value { color: #fff; font-size: .66rem; font-weight: 900; text-align: right; }
  #rk-hl-guide .rk-hl-diagnostic-list { display: grid; gap: 9px; margin: 0; padding: 0; list-style: none; }
  #rk-hl-guide .rk-hl-diagnostic-list li { padding: 12px 14px; border-left: 4px solid #6b92a2; border-radius: 9px; color: #dcecf1; background: #173c4d; font-size: .66rem; }
  #rk-hl-guide .rk-hl-diagnostic-list li[data-state="good"] { border-left-color: #32d5a5; }
  #rk-hl-guide .rk-hl-diagnostic-list li[data-state="warn"] { border-left-color: var(--rk-yellow); }
  #rk-hl-guide .rk-hl-diagnostic-list li[data-state="bad"] { border-left-color: var(--rk-orange); }
  #rk-hl-guide .rk-hl-disclaimer { margin: 18px 0 0; color: #8fb2bf; font-size: .58rem; line-height: 1.55; }

  #rk-hl-guide .rk-hl-sales-cta {
    margin: clamp(34px, 6vw, 62px) 0;
    padding: clamp(28px, 5vw, 46px);
    border-radius: 22px;
    color: var(--rk-white);
    background:
      radial-gradient(circle at 95% 5%, rgba(37,199,216,.25), transparent 29%),
      linear-gradient(135deg, #102536, #16465b);
    box-shadow: 0 18px 44px rgba(16,37,54,.17);
  }
  #rk-hl-guide .rk-hl-sales-cta h3 { color: var(--rk-white); font-size: clamp(1.35rem, 3vw, 2rem); }
  #rk-hl-guide .rk-hl-sales-cta p { max-width: 940px; color: #d0e4eb; }
  #rk-hl-guide .rk-hl-cta-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 52px;
    padding: 13px 22px;
    border-radius: 12px;
    color: var(--rk-dark);
    background: var(--rk-cyan);
    box-shadow: 0 10px 24px rgba(37,199,216,.2);
    font-size: .78rem;
    font-weight: 950;
    line-height: 1.3;
    text-decoration: none;
    transition: transform .18s ease, background .18s ease;
  }
  #rk-hl-guide .rk-hl-cta-button:hover,
  #rk-hl-guide .rk-hl-cta-button:focus-visible { color: var(--rk-dark); background: #9af3fb; transform: translateY(-1px); }

  #rk-hl-guide .rk-hl-checklist { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 24px; }
  #rk-hl-guide .rk-hl-check {
    position: relative;
    padding: 17px 18px 17px 50px;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    color: var(--rk-text);
    background: var(--rk-white);
    font-size: .78rem;
  }
  #rk-hl-guide .rk-hl-check::before {
    position: absolute;
    top: 16px;
    left: 17px;
    display: grid;
    width: 24px;
    height: 24px;
    place-items: center;
    border-radius: 50%;
    color: #fff;
    background: var(--rk-green);
    content: "✓";
    font-size: .68rem;
    font-weight: 950;
  }

  #rk-hl-guide .rk-hl-faq { display: grid; gap: 11px; margin-top: 25px; }
  #rk-hl-guide .rk-hl-faq details { overflow: hidden; border: 1px solid var(--rk-line); border-radius: 15px; background: var(--rk-white); }
  #rk-hl-guide .rk-hl-faq summary { position: relative; padding: 18px 52px 18px 20px; color: var(--rk-dark); font-size: .82rem; font-weight: 900; cursor: pointer; list-style: none; }
  #rk-hl-guide .rk-hl-faq summary::-webkit-details-marker { display: none; }
  #rk-hl-guide .rk-hl-faq summary::after { position: absolute; top: 50%; right: 19px; width: 25px; height: 25px; border-radius: 50%; color: var(--rk-blue); background: var(--rk-cyan-soft); content: "+"; font-size: 1rem; font-weight: 900; line-height: 23px; text-align: center; transform: translateY(-50%); }
  #rk-hl-guide .rk-hl-faq details[open] summary::after { content: "−"; }
  #rk-hl-guide .rk-hl-faq-answer { padding: 0 20px 19px; color: var(--rk-text); font-size: .79rem; }
  #rk-hl-guide .rk-hl-faq-answer p:last-child { margin-bottom: 0; }

  #rk-hl-guide .rk-hl-source-list { display: grid; gap: 12px; margin-top: 24px; }
  #rk-hl-guide .rk-hl-source { padding: 18px 20px; border: 1px solid var(--rk-line); border-radius: 15px; background: var(--rk-soft); }
  #rk-hl-guide .rk-hl-source strong { display: block; margin-bottom: 4px; }
  #rk-hl-guide .rk-hl-source p { margin-bottom: 0; color: var(--rk-text); font-size: .75rem; }

  #rk-hl-guide .rk-hl-author {
    position: relative;
    overflow: hidden;
    margin-top: 28px;
    border: 1px solid var(--rk-line);
    border-radius: 22px;
    background: #f5fafc;
  }
  #rk-hl-guide .rk-hl-author > input { position: absolute; opacity: 0; pointer-events: none; }
  #rk-hl-guide .rk-hl-author-head { display: flex; justify-content: space-between; gap: 20px; align-items: center; padding: 22px clamp(22px, 4vw, 38px); border-bottom: 1px solid var(--rk-line); background: #eef6f9; }
  #rk-hl-guide .rk-hl-author-head h3 { margin-bottom: 7px; font-size: clamp(1.45rem, 3vw, 2rem); }
  #rk-hl-guide .rk-hl-author-head p { margin-bottom: 0; color: var(--rk-muted); font-size: .72rem; }
  #rk-hl-guide .rk-hl-author-mark { max-width: 350px; color: var(--rk-blue); font-size: .6rem; font-weight: 950; letter-spacing: .055em; line-height: 1.5; text-align: right; }
  #rk-hl-guide .rk-hl-author-layout { display: grid; grid-template-columns: 300px minmax(0, 1fr); }
  #rk-hl-guide .rk-hl-author-side { padding: 34px 24px; color: #fff; background: var(--rk-dark); text-align: center; }
  #rk-hl-guide .rk-hl-author-photo { overflow: hidden; width: 150px; height: 150px; margin: 0 auto 18px; border: 6px solid rgba(255,255,255,.16); border-radius: 50%; background: #fff; }
  #rk-hl-guide .rk-hl-author-photo img { display: block; width: 100%; height: 100%; object-fit: cover; }
  #rk-hl-guide .rk-hl-author-name { color: var(--rk-white); font-size: 1.08rem; font-weight: 950; }
  #rk-hl-guide .rk-hl-author-role { margin-top: 5px; color: #bdd4dd; font-size: .66rem; line-height: 1.55; }
  #rk-hl-guide .rk-hl-author-social-label { margin: 22px 0 10px; color: #89a9b7; font-size: .58rem; font-weight: 900; letter-spacing: .08em; text-transform: uppercase; }
  #rk-hl-guide .rk-hl-author-social { display: flex; justify-content: center; gap: 9px; }
  #rk-hl-guide .rk-hl-author-social a { display: grid; width: 44px; height: 44px; place-items: center; border: 1px solid #45677a; border-radius: 50%; color: #c6dce5; background: transparent; text-decoration: none; }
  #rk-hl-guide .rk-hl-author-social a:hover,
  #rk-hl-guide .rk-hl-author-social a:focus-visible { color: var(--rk-white); border-color: var(--rk-cyan); background: rgba(37,199,216,.12); }
  #rk-hl-guide .rk-hl-author-social svg { width: 20px; height: 20px; fill: currentColor; }
  #rk-hl-guide .rk-hl-author-main { padding: clamp(25px, 4vw, 40px); }
  #rk-hl-guide .rk-hl-author-quote { position: relative; margin: 0 0 24px; padding: 20px 20px 20px 72px; border: 1px solid var(--rk-line); border-radius: 15px; background: var(--rk-white); }
  #rk-hl-guide .rk-hl-author-quote::before { position: absolute; top: 9px; left: 23px; color: var(--rk-cyan); content: "“"; font-family: Georgia, serif; font-size: 3.6rem; font-weight: 900; line-height: 1; }
  #rk-hl-guide .rk-hl-author-quote p { margin-bottom: 0; color: var(--rk-dark); font-size: .84rem; font-weight: 780; }
  #rk-hl-guide .rk-hl-author-tabs { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }
  #rk-hl-guide .rk-hl-author-tab { display: inline-flex; align-items: center; min-height: 39px; padding: 8px 14px; border-radius: 999px; color: #59707c; background: #e4eef2; font-size: .65rem; font-weight: 900; cursor: pointer; }
  #rk-hl-guide .rk-hl-author-panel { display: none; color: var(--rk-text); font-size: .78rem; }
  #rk-hl-guide #rk-hl-author-about:checked ~ .rk-hl-author-layout .rk-hl-author-panel-about,
  #rk-hl-guide #rk-hl-author-exp:checked ~ .rk-hl-author-layout .rk-hl-author-panel-exp,
  #rk-hl-guide #rk-hl-author-method:checked ~ .rk-hl-author-layout .rk-hl-author-panel-method { display: block; }
  #rk-hl-guide #rk-hl-author-about:checked ~ .rk-hl-author-layout label[for="rk-hl-author-about"],
  #rk-hl-guide #rk-hl-author-exp:checked ~ .rk-hl-author-layout label[for="rk-hl-author-exp"],
  #rk-hl-guide #rk-hl-author-method:checked ~ .rk-hl-author-layout label[for="rk-hl-author-method"] { color: var(--rk-white); background: var(--rk-blue); }
  #rk-hl-guide .rk-hl-portals { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 19px; }
  #rk-hl-guide .rk-hl-portals a { display: inline-flex; align-items: center; min-height: 37px; padding: 7px 12px; border: 1px solid var(--rk-line); border-radius: 999px; background: #fff; font-size: .65rem; text-decoration: none; }

  @media (max-width: 980px) {
    #rk-hl-guide .rk-hl-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-hl-guide .rk-hl-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-hl-guide .rk-hl-field-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-hl-guide .rk-hl-results-top { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-hl-guide .rk-hl-result-main { grid-column: 1 / -1; }
    #rk-hl-guide .rk-hl-author-layout { grid-template-columns: 225px minmax(0, 1fr); }
  }

  @media (max-width: 760px) {
    #rk-hl-guide { margin: 18px auto 46px; font-size: 16px; }
    #rk-hl-guide .rk-hl-shell { border-radius: 18px; }
    #rk-hl-guide .rk-hl-hero-metrics,
    #rk-hl-guide .rk-hl-answer,
    #rk-hl-guide .rk-hl-grid-2,
    #rk-hl-guide .rk-hl-grid-3,
    #rk-hl-guide .rk-hl-grid-4,
    #rk-hl-guide .rk-hl-checklist { grid-template-columns: 1fr; }
    #rk-hl-guide .rk-hl-nav { grid-template-columns: 1fr; }
    #rk-hl-guide .rk-hl-nav-label { padding-top: 0; }
    #rk-hl-guide .rk-hl-author-head { display: block; }
    #rk-hl-guide .rk-hl-author-mark { margin-top: 12px; text-align: left; }
    #rk-hl-guide .rk-hl-author-layout { grid-template-columns: 1fr; }
    #rk-hl-guide .rk-hl-breakdown-row { grid-template-columns: 110px minmax(0, 1fr) 76px; gap: 8px; }
    #rk-hl-guide .rk-hl-table-wrap { overflow: visible; border: 0; border-radius: 0; }
    #rk-hl-guide table,
    #rk-hl-guide thead,
    #rk-hl-guide tbody,
    #rk-hl-guide th,
    #rk-hl-guide td,
    #rk-hl-guide tr { display: block; }
    #rk-hl-guide thead { position: absolute; overflow: hidden; width: 1px; height: 1px; clip: rect(0 0 0 0); white-space: nowrap; }
    #rk-hl-guide tbody { display: grid; gap: 12px; }
    #rk-hl-guide tbody tr { overflow: hidden; border: 1px solid var(--rk-line); border-radius: 15px; background: var(--rk-white); }
    #rk-hl-guide tbody tr:nth-child(even) { background: var(--rk-white); }
    #rk-hl-guide td { display: grid; grid-template-columns: minmax(115px, .75fr) minmax(0, 1.25fr); gap: 13px; padding: 12px 14px; border-bottom: 1px solid var(--rk-line); }
    #rk-hl-guide td::before { color: var(--rk-dark); content: attr(data-label); font-size: .65rem; font-weight: 900; }
  }

  @media (max-width: 620px) {
    #rk-hl-guide .rk-hl-content { padding-right: 16px; padding-left: 16px; }
    #rk-hl-guide .rk-hl-hero { padding-right: 21px; padding-left: 21px; }
    #rk-hl-guide .rk-hl-hero-title { font-size: clamp(1.85rem, 10.2vw, 3rem); }
    #rk-hl-guide .rk-hl-field-grid,
    #rk-hl-guide .rk-hl-field-grid-3,
    #rk-hl-guide .rk-hl-results-top { grid-template-columns: 1fr; }
    #rk-hl-guide .rk-hl-envelope-head { display: none; }
    #rk-hl-guide .rk-hl-envelope-row { grid-template-columns: repeat(2, minmax(0, 1fr)); padding: 14px; }
    #rk-hl-guide .rk-hl-envelope-name { grid-column: 1 / -1; padding-bottom: 4px; }
    #rk-hl-guide .rk-hl-envelope-row input { min-height: 44px; }
    #rk-hl-guide .rk-hl-envelope-row input[data-role="factor"] { grid-column: 1; }
    #rk-hl-guide .rk-hl-row-result { display: flex; align-items: center; justify-content: flex-end; min-height: 44px; padding: 7px 9px; border-radius: 9px; background: #0e2938; }
    #rk-hl-guide .rk-hl-row-result small { margin-left: 5px; }
    #rk-hl-guide .rk-hl-chart-box { min-height: 250px; }
    #rk-hl-guide .rk-hl-chart-box svg { min-height: 235px; }
    #rk-hl-guide .rk-hl-breakdown-row { grid-template-columns: 1fr; gap: 5px; }
    #rk-hl-guide .rk-hl-breakdown-value { text-align: left; }
    #rk-hl-guide .rk-hl-author-main { padding: 24px 18px; }
    #rk-hl-guide .rk-hl-author-quote { padding-left: 58px; }
    #rk-hl-guide .rk-hl-sales-cta { padding: 26px 20px; }
    #rk-hl-guide .rk-hl-cta-button { width: 100%; text-align: center; }
    #rk-hl-guide td { grid-template-columns: 1fr; gap: 3px; }
  }

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

<article id="rk-hl-guide" itemscope itemtype="https://schema.org/TechArticle">
  <div class="rk-hl-shell">
    <header class="rk-hl-hero">
      <span class="rk-hl-kicker">Bilans cieplny budynku • aktualizacja 2026</span>
      <div class="rk-hl-hero-title">Oblicz projektową stratę ciepła — <span>przegroda po przegrodzie</span></div>
      <p class="rk-hl-lead">Wpisz rzeczywiste powierzchnie, współczynniki U, temperatury, wentylację i mostki. Kalkulator pokaże wymaganą moc w kW, wskaźnik W/m², udział poszczególnych strat oraz krzywą obciążenia względem temperatury zewnętrznej.</p>
      <div class="rk-hl-hero-tags" aria-label="Najważniejsze funkcje artykułu">
        <span class="rk-hl-hero-tag">przenikanie przez przegrody</span>
        <span class="rk-hl-hero-tag">wentylacja i infiltracja</span>
        <span class="rk-hl-hero-tag">mostki cieplne</span>
        <span class="rk-hl-hero-tag">budynek lub pomieszczenie</span>
        <span class="rk-hl-hero-tag">dynamiczny wykres</span>
      </div>
      <div class="rk-hl-byline">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: około 24 minuty</span>
        <span>Aktualizacja techniczna: 1 września 2026 r.</span>
      </div>
      <div class="rk-hl-hero-metrics" aria-label="Zakres kalkulatora">
        <div class="rk-hl-hero-metric"><b>W i kW</b><span>Projektowa moc potrzebna w wybranych warunkach zewnętrznych.</span></div>
        <div class="rk-hl-hero-metric"><b>W/m²</b><span>Wskaźnik kontrolny odniesiony do powierzchni ogrzewanej lub czynnej.</span></div>
        <div class="rk-hl-hero-metric"><b>Nie kWh/rok</b><span>Kalkulator nie wyznacza rocznego zużycia energii ani kosztów ogrzewania.</span></div>
      </div>
    </header>

    <nav class="rk-hl-nav" aria-label="Nawigacja po artykule">
      <span class="rk-hl-nav-label">Na skróty</span>
      <div class="rk-hl-nav-links">
        <a href="#rk-hl-szybka-odpowiedz">Szybka odpowiedź</a>
        <a href="#rk-hl-moc-a-energia">Moc a energia</a>
        <a href="#rk-hl-bilans-strat">Składowe strat</a>
        <a href="#rk-hl-dane">Dane wejściowe</a>
        <a href="#rk-hl-kalkulator">Kalkulator</a>
        <a href="#rk-hl-interpretacja">Jak czytać wynik</a>
        <a href="#rk-hl-budynek-pomieszczenia">Budynek a pokoje</a>
        <a href="#rk-hl-podlogowka">Wynik a podłogówka</a>
        <a href="#rk-hl-zrodlo">Wynik a źródło</a>
        <a href="#rk-hl-przyklad">Przykład</a>
        <a href="#rk-hl-bledy">Błędy i checklista</a>
        <a href="#rk-hl-faq">FAQ</a>
        <a href="#rk-hl-zrodla">Źródła</a>
        <a href="#rk-hl-autor">Autor</a>
      </div>
    </nav>

    <div class="rk-hl-content">
      <section class="rk-hl-section" id="rk-hl-szybka-odpowiedz">
        <span class="rk-hl-eyebrow">01 • Najważniejsza odpowiedź</span>
        <h2>Co naprawdę oblicza kalkulator strat ciepła budynku?</h2>
        <p class="rk-hl-section-intro">Kalkulator szacuje <strong>projektową moc potrzebną do uzupełnienia strat ciepła</strong> przy zadanej temperaturze wewnętrznej i zewnętrznej. Nie wystarcza do tego sam metraż ani rok budowy domu.</p>
        <div class="rk-hl-answer">
          <div class="rk-hl-answer-main">
            <span class="rk-hl-answer-number">Φ<sub>HL</sub> [W lub kW]</span>
            <h3>Najpierw bilans, później urządzenie i instalacja</h3>
            <p>Sumujemy straty przez ściany, okna, drzwi, dach, podłogę, przegrody do stref nieogrzewanych, wentylację, infiltrację i mostki cieplne. Dopiero taki wynik może być punktem wyjścia do dalszego projektowania.</p>
          </div>
          <aside class="rk-hl-answer-side">
            <h3>Czego wynik nie wybiera?</h3>
            <ul>
              <li>konkretnego modelu pompy ciepła,</li>
              <li>rozstawu rur w każdym pokoju,</li>
              <li>temperatury zasilania podłogówki,</li>
              <li>rocznego zużycia energii w kWh,</li>
              <li>kosztu ogrzewania całego sezonu.</li>
            </ul>
          </aside>
        </div>
        <div class="rk-hl-callout rk-hl-callout-green">
          <strong>Najważniejsza zasada</strong>
          <p>Wskaźnik W/m² jest wynikiem obliczenia i narzędziem kontrolnym. Nie powinien być domyślnym założeniem typu „nowy dom zawsze potrzebuje 45 W/m²”.</p>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-moc-a-energia">
        <span class="rk-hl-eyebrow">02 • Jednostki bez pomyłek</span>
        <h2>Moc w kW a energia w kWh — to nie jest ten sam wynik</h2>
        <p class="rk-hl-section-intro">Najczęstszy błąd w internetowych kalkulatorach polega na zamiennym używaniu mocy, energii i kosztu. Każda z tych wielkości odpowiada na inne pytanie.</p>
        <div class="rk-hl-table-wrap">
          <table>
            <thead>
              <tr><th>Wielkość</th><th>Jednostka</th><th>Co opisuje?</th><th>Do czego służy?</th></tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Wielkość"><strong>Projektowe obciążenie cieplne</strong></td>
                <td data-label="Jednostka">W lub kW</td>
                <td data-label="Co opisuje?">Moc potrzebną przy projektowych warunkach zimowych.</td>
                <td data-label="Do czego służy?">Do projektowania instalacji i analizy źródła ciepła.</td>
              </tr>
              <tr>
                <td data-label="Wielkość"><strong>Wskaźnik obciążenia</strong></td>
                <td data-label="Jednostka">W/m²</td>
                <td data-label="Co opisuje?">Moc odniesioną do powierzchni budynku albo pomieszczenia.</td>
                <td data-label="Do czego służy?">Do kontroli wyniku i porównania stref.</td>
              </tr>
              <tr>
                <td data-label="Wielkość"><strong>Energia użytkowa</strong></td>
                <td data-label="Jednostka">kWh/rok</td>
                <td data-label="Co opisuje?">Ilość ciepła potrzebną podczas całego sezonu.</td>
                <td data-label="Do czego służy?">Do analiz energetycznych i kosztowych.</td>
              </tr>
              <tr>
                <td data-label="Wielkość"><strong>Energia jednostkowa</strong></td>
                <td data-label="Jednostka">kWh/(m²·rok)</td>
                <td data-label="Co opisuje?">Sezonowe potrzeby odniesione do powierzchni.</td>
                <td data-label="Do czego służy?">Do oceny standardu energetycznego budynku.</td>
              </tr>
            </tbody>
          </table>
        </div>
        <p>Norma EN 12831-1 opisuje obliczanie projektowego obciążenia cieplnego pomieszczeń i budynków. Metody z rodziny ISO 52016 obejmują również potrzeby energetyczne i obciążenia w czasie. Dlatego wynik w kW nie jest rocznym zużyciem energii. Więcej o samym pojęciu przeczytasz w opracowaniu <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a>.</p>
      </section>

      <section class="rk-hl-section" id="rk-hl-bilans-strat">
        <span class="rk-hl-eyebrow">03 • Fizyka budynku</span>
        <h2>Z czego składa się projektowy bilans strat ciepła?</h2>
        <p class="rk-hl-section-intro">W modelu uproszczonym całkowita strata jest sumą przenikania przez przegrody, wymiany powietrza i mostków cieplnych.</p>
        <div class="rk-hl-formula">
          Φ<sub>HL</sub> ≈ Φ<sub>T</sub> + Φ<sub>V</sub> + Φ<sub>TB</sub>
          <small>Model referencyjny kalkulatora. Pełne obliczenia projektowe mogą uwzględniać dodatkowe zasady metodyczne i dane krajowe.</small>
        </div>
        <div class="rk-hl-grid-3">
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">T</span>
            <h3>Przenikanie</h3>
            <p>Straty przez ściany, okna, drzwi, dach, podłogę i przegrody do pomieszczeń nieogrzewanych.</p>
            <div class="rk-hl-formula">Φ<sub>T,i</sub> = U<sub>i</sub> · A<sub>i</sub> · b<sub>i</sub> · Δθ</div>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">V</span>
            <h3>Wentylacja i infiltracja</h3>
            <p>Ciepło potrzebne do ogrzania powietrza wentylacyjnego oraz napływającego przez nieszczelności.</p>
            <div class="rk-hl-formula">Φ<sub>V</sub> = 0,34 · V̇<sub>eff</sub> · Δθ</div>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">ψ</span>
            <h3>Mostki cieplne</h3>
            <p>Dodatkowy przepływ ciepła przez połączenia przegród, nadproża, wieńce i inne węzły.</p>
            <div class="rk-hl-formula">Φ<sub>TB</sub> = Σ(ψ · l) · Δθ</div>
          </article>
        </div>
        <div class="rk-hl-callout">
          <strong>Uwaga na podłogę na gruncie</strong>
          <p>Proste działanie U · A · Δθ jest tutaj przybliżeniem. Dokładna wymiana z gruntem zależy między innymi od geometrii podłogi, obwodu, poziomu zagłębienia i właściwości gruntu. W kalkulatorze stosujemy jawny współczynnik redukcyjny b, ale nie przedstawiamy wyniku jako pełnego obliczenia według ISO 13370.</p>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-dane">
        <span class="rk-hl-eyebrow">04 • Przygotowanie</span>
        <h2>Jakie dane przygotować przed uruchomieniem kalkulatora?</h2>
        <p class="rk-hl-section-intro">Jakość wyniku nie może być lepsza niż jakość danych wejściowych. Największą różnicę robią rzeczywiste powierzchnie przegród, prawidłowe U oraz przepływ powietrza.</p>
        <div class="rk-hl-grid-4">
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">01</span>
            <h3>Geometria</h3>
            <ul>
              <li>powierzchnia ogrzewana,</li>
              <li>kubatura ogrzewana,</li>
              <li>powierzchnie ścian,</li>
              <li>osobno okna i drzwi.</li>
            </ul>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">02</span>
            <h3>Przegrody</h3>
            <ul>
              <li>współczynniki U,</li>
              <li>układ warstw,</li>
              <li>przestrzeń po drugiej stronie,</li>
              <li>dane stolarki.</li>
            </ul>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">03</span>
            <h3>Temperatury</h3>
            <ul>
              <li>temperatura wewnętrzna,</li>
              <li>temperatura projektowa,</li>
              <li>temperatury stref buforowych,</li>
              <li>lokalizacja budynku.</li>
            </ul>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">04</span>
            <h3>Powietrze</h3>
            <ul>
              <li>strumień wentylacji,</li>
              <li>infiltracja,</li>
              <li>rodzaj systemu,</li>
              <li>sprawność odzysku.</li>
            </ul>
          </article>
        </div>
        <p>Jeżeli nie znasz U przegrody, możesz pomocniczo skorzystać z oficjalnego <a href="https://budowlaneabc.gov.pl/charakterystyka-energetyczna-budynkow/kalkulatory/calc-wpc/" target="_blank" rel="noopener nofollow">kalkulatora współczynnika U w serwisie Budowlane ABC</a>. Pamiętaj jednak, że metoda dla ściany wielowarstwowej nie jest automatycznie metodą dla podłogi pozostającej w kontakcie z gruntem.</p>
      </section>

      <section class="rk-hl-section" id="rk-hl-kalkulator">
        <span class="rk-hl-eyebrow">05 • Narzędzie interaktywne</span>
        <h2>Kalkulator strat ciepła budynku i pomieszczenia</h2>
        <p class="rk-hl-section-intro">Wszystkie wartości są przeliczane na żywo. Współczynnik b pozwala jawnie ograniczyć różnicę temperatur dla gruntu lub strefy buforowej. Jeżeli nie znasz mostków cieplnych, pozostaw zero — kalkulator zgłosi brak w diagnostyce zamiast doliczać arbitralny procent.</p>

        <div class="rk-hl-tool" id="rk-hl-tool" aria-label="Interaktywny kalkulator strat ciepła">
          <div class="rk-hl-tool-head">
            <h3>Policz wstępny bilans projektowych strat ciepła</h3>
            <p>Wynik pokazuje moc wymaganą do pokrycia wprowadzonych strat przy zadanej różnicy temperatur. To model edukacyjny i kontrolny — nie pełne OZC oraz nie automatyczny dobór źródła ciepła.</p>
          </div>
          <div class="rk-hl-tool-body">
            <section class="rk-hl-step" aria-labelledby="rk-hl-step-1-title">
              <div class="rk-hl-step-title">
                <span class="rk-hl-step-no">1</span>
                <div><h4 id="rk-hl-step-1-title">Zakres i geometria analizowanej strefy</h4><p>Możesz policzyć cały budynek albo jedno pomieszczenie. W trybie pomieszczenia pojawi się powierzchnia czynna podłogi.</p></div>
              </div>
              <div class="rk-hl-field-grid">
                <div class="rk-hl-field">
                  <label for="rk-hl-scope">Zakres obliczenia</label>
                  <select id="rk-hl-scope">
                    <option value="building">Cały budynek</option>
                    <option value="room">Jedno pomieszczenie</option>
                  </select>
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-area">Powierzchnia ogrzewana [m²]</label>
                  <input id="rk-hl-area" type="number" min="1" max="5000" step="1" value="140" inputmode="decimal">
                  <small>W trybie pokoju wpisz jego powierzchnię.</small>
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-volume">Kubatura ogrzewana [m³]</label>
                  <input id="rk-hl-volume" type="number" min="1" max="20000" step="1" value="350" inputmode="decimal">
                  <small>Powierzchnia razy średnia wysokość netto.</small>
                </div>
                <div class="rk-hl-field" id="rk-hl-active-field" hidden>
                  <label for="rk-hl-active-area">Czynna powierzchnia podłogi [m²]</label>
                  <input id="rk-hl-active-area" type="number" min="0" max="5000" step="0.1" value="16" inputmode="decimal">
                  <small>Bez trwałej zabudowy i stref bez rur.</small>
                </div>
              </div>
            </section>

            <section class="rk-hl-step" aria-labelledby="rk-hl-step-2-title">
              <div class="rk-hl-step-title">
                <span class="rk-hl-step-no">2</span>
                <div><h4 id="rk-hl-step-2-title">Temperatury projektowe</h4><p>Wybór strefy wpisuje wartość pomocniczą. Temperaturę zewnętrzną możesz następnie zmienić ręcznie zgodnie z lokalizacją i dokumentacją.</p></div>
              </div>
              <div class="rk-hl-field-grid rk-hl-field-grid-3">
                <div class="rk-hl-field">
                  <label for="rk-hl-zone">Pomocnicza strefa zimowa</label>
                  <select id="rk-hl-zone">
                    <option value="-16">Strefa I — −16°C</option>
                    <option value="-18">Strefa II — −18°C</option>
                    <option value="-20" selected>Strefa III — −20°C</option>
                    <option value="-22">Strefa IV — −22°C</option>
                    <option value="-24">Strefa V — −24°C</option>
                    <option value="manual">Wartość własna</option>
                  </select>
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-indoor">Temperatura wewnętrzna θi [°C]</label>
                  <input id="rk-hl-indoor" type="number" min="5" max="35" step="0.5" value="20" inputmode="decimal">
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-outdoor">Temperatura zewnętrzna θe [°C]</label>
                  <input id="rk-hl-outdoor" type="number" min="-40" max="15" step="0.5" value="-20" inputmode="decimal">
                </div>
              </div>
            </section>

            <section class="rk-hl-step" aria-labelledby="rk-hl-step-3-title">
              <div class="rk-hl-step-title">
                <span class="rk-hl-step-no">3</span>
                <div><h4 id="rk-hl-step-3-title">Przegrody — powierzchnia, U i współczynnik redukcyjny b</h4><p>Dla przegród do powietrza zewnętrznego przyjmij b = 1,00. Mniejsza wartość może opisywać uproszczony wpływ gruntu albo strefy buforowej.</p></div>
              </div>
              <div class="rk-hl-envelope-head" aria-hidden="true">
                <span>Przegroda</span><span>Powierzchnia A [m²]</span><span>U [W/(m²·K)]</span><span>Współczynnik b</span><span>Strata</span>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="walls">
                <div class="rk-hl-envelope-name">Ściany zewnętrzne<small>Powierzchnia netto bez okien i drzwi</small></div>
                <input aria-label="Powierzchnia ścian zewnętrznych" data-role="area" type="number" min="0" step="0.1" value="150" inputmode="decimal">
                <input aria-label="Współczynnik U ścian" data-role="u" type="number" min="0" step="0.01" value="0.20" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny ścian" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="1" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="windows">
                <div class="rk-hl-envelope-name">Okna i przeszklenia<small>U całego okna Uw, nie samej szyby Ug</small></div>
                <input aria-label="Powierzchnia okien" data-role="area" type="number" min="0" step="0.1" value="30" inputmode="decimal">
                <input aria-label="Współczynnik U okien" data-role="u" type="number" min="0" step="0.01" value="0.90" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny okien" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="1" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="doors">
                <div class="rk-hl-envelope-name">Drzwi zewnętrzne<small>Łączna powierzchnia skrzydeł i bram</small></div>
                <input aria-label="Powierzchnia drzwi" data-role="area" type="number" min="0" step="0.1" value="5" inputmode="decimal">
                <input aria-label="Współczynnik U drzwi" data-role="u" type="number" min="0" step="0.01" value="1.30" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny drzwi" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="1" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="roof">
                <div class="rk-hl-envelope-name">Dach lub strop<small>Przegroda nad przestrzenią ogrzewaną</small></div>
                <input aria-label="Powierzchnia dachu lub stropu" data-role="area" type="number" min="0" step="0.1" value="140" inputmode="decimal">
                <input aria-label="Współczynnik U dachu" data-role="u" type="number" min="0" step="0.01" value="0.15" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny dachu" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="1" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="floor">
                <div class="rk-hl-envelope-name">Podłoga na gruncie<small>Model uproszczony — pełna metoda zależy od geometrii</small></div>
                <input aria-label="Powierzchnia podłogi" data-role="area" type="number" min="0" step="0.1" value="140" inputmode="decimal">
                <input aria-label="Współczynnik U podłogi" data-role="u" type="number" min="0" step="0.01" value="0.25" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny podłogi" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="0.50" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="buffer">
                <div class="rk-hl-envelope-name">Strefa nieogrzewana<small>Garaż, piwnica, poddasze lub inna strefa buforowa</small></div>
                <input aria-label="Powierzchnia przegrody do strefy nieogrzewanej" data-role="area" type="number" min="0" step="0.1" value="0" inputmode="decimal">
                <input aria-label="Współczynnik U przegrody buforowej" data-role="u" type="number" min="0" step="0.01" value="0.30" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny strefy buforowej" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="0.50" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
              <div class="rk-hl-envelope-row" data-envelope="custom">
                <div class="rk-hl-envelope-name">Przegroda dodatkowa<small>Własna pozycja kontrolna</small></div>
                <input aria-label="Powierzchnia przegrody dodatkowej" data-role="area" type="number" min="0" step="0.1" value="0" inputmode="decimal">
                <input aria-label="Współczynnik U przegrody dodatkowej" data-role="u" type="number" min="0" step="0.01" value="0.30" inputmode="decimal">
                <input aria-label="Współczynnik redukcyjny przegrody dodatkowej" data-role="factor" type="number" min="0" max="1.5" step="0.05" value="1" inputmode="decimal">
                <output class="rk-hl-row-result" data-role="result">— <small>W</small></output>
              </div>
            </section>

            <section class="rk-hl-step" aria-labelledby="rk-hl-step-4-title">
              <div class="rk-hl-step-title">
                <span class="rk-hl-step-no">4</span>
                <div><h4 id="rk-hl-step-4-title">Wentylacja, infiltracja i mostki cieplne</h4><p>Odzysk ciepła redukuje część mechaniczną strumienia, ale nie usuwa infiltracji. Mostki wpisujemy jako sumaryczny współczynnik Htb w W/K.</p></div>
              </div>
              <div class="rk-hl-field-grid">
                <div class="rk-hl-field">
                  <label for="rk-hl-vent-flow">Strumień wentylacji V̇ [m³/h]</label>
                  <input id="rk-hl-vent-flow" type="number" min="0" max="50000" step="1" value="175" inputmode="decimal">
                  <small>Dla wentylacji grawitacyjnej wpisz szacowany pełny strumień.</small>
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-recovery">Sprawność odzysku η [%]</label>
                  <input id="rk-hl-recovery" type="number" min="0" max="95" step="1" value="0" inputmode="decimal">
                  <small>Dla braku odzysku wpisz 0%.</small>
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-infiltration">Infiltracja n<sub>inf</sub> [1/h]</label>
                  <input id="rk-hl-infiltration" type="number" min="0" max="3" step="0.01" value="0.10" inputmode="decimal">
                  <small>Osobny napływ przez nieszczelności obudowy.</small>
                </div>
                <div class="rk-hl-field">
                  <label for="rk-hl-bridges">Mostki cieplne H<sub>TB</sub> [W/K]</label>
                  <input id="rk-hl-bridges" type="number" min="0" max="5000" step="0.1" value="15" inputmode="decimal">
                  <small>Suma ψ · l. Wpisz 0, jeśli brak danych.</small>
                </div>
              </div>
            </section>

            <section class="rk-hl-results" aria-live="polite" aria-atomic="false">
              <div class="rk-hl-step-title">
                <span class="rk-hl-step-no">5</span>
                <div><h4>Wynik na żywo</h4><p>Wartości wynikają wyłącznie z aktualnie wpisanych danych i jawnego modelu referencyjnego.</p></div>
              </div>
              <div class="rk-hl-results-top">
                <div class="rk-hl-result-main">
                  <span class="rk-hl-result-label">Projektowa strata całkowita</span>
                  <output class="rk-hl-result-value" id="rk-hl-total-kw">— <small>kW</small></output>
                  <span class="rk-hl-result-note" id="rk-hl-delta-note">Różnica temperatur: — K</span>
                </div>
                <div class="rk-hl-result-card">
                  <span class="rk-hl-result-label">Wskaźnik</span>
                  <output class="rk-hl-result-value" id="rk-hl-wm2">— <small>W/m²</small></output>
                  <span class="rk-hl-result-note">Odniesiony do wpisanej powierzchni</span>
                </div>
                <div class="rk-hl-result-card">
                  <span class="rk-hl-result-label">Przenikanie</span>
                  <output class="rk-hl-result-value" id="rk-hl-transmission">— <small>kW</small></output>
                  <span class="rk-hl-result-note">Suma wprowadzonych przegród</span>
                </div>
                <div class="rk-hl-result-card">
                  <span class="rk-hl-result-label">Wentylacja</span>
                  <output class="rk-hl-result-value" id="rk-hl-ventilation">— <small>kW</small></output>
                  <span class="rk-hl-result-note">Wentylacja po odzysku plus infiltracja</span>
                </div>
                <div class="rk-hl-result-card" id="rk-hl-active-result-card" hidden>
                  <span class="rk-hl-result-label">Moc z powierzchni czynnej</span>
                  <output class="rk-hl-result-value" id="rk-hl-active-wm2">— <small>W/m²</small></output>
                  <span class="rk-hl-result-note">Tylko kontrola w trybie pomieszczenia</span>
                </div>
              </div>
              <div class="rk-hl-status" id="rk-hl-status" data-level="warn">Uzupełnij dane, aby zobaczyć ocenę wyniku.</div>

              <div class="rk-hl-chart-panel">
                <h4>Moc budynku a temperatura zewnętrzna</h4>
                <p>Krzywa wykorzystuje aktualny sumaryczny współczynnik strat H. Pomarańczowy punkt oznacza temperaturę projektową wpisaną w kalkulatorze.</p>
                <div class="rk-hl-chart-box">
                  <svg id="rk-hl-chart" viewBox="0 0 760 330" role="img" aria-labelledby="rk-hl-chart-title rk-hl-chart-desc">
                    <title id="rk-hl-chart-title">Wykres wymaganej mocy względem temperatury zewnętrznej</title>
                    <desc id="rk-hl-chart-desc">Dynamiczna linia pokazująca wzrost strat ciepła wraz ze spadkiem temperatury zewnętrznej.</desc>
                    <g id="rk-hl-chart-grid"></g>
                    <polyline id="rk-hl-chart-line" fill="none" stroke="#25c7d8" stroke-width="5" stroke-linecap="round" stroke-linejoin="round" points=""></polyline>
                    <line id="rk-hl-chart-design-line" x1="0" y1="0" x2="0" y2="0" stroke="#ff6a3d" stroke-width="2" stroke-dasharray="7 7"></line>
                    <circle id="rk-hl-chart-design-point" cx="0" cy="0" r="7" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <text id="rk-hl-chart-design-label" x="0" y="0" fill="#102536" font-size="14" font-weight="900">—</text>
                  </svg>
                </div>
                <div class="rk-hl-chart-legend"><span><i></i> wymagana moc modelu</span><span><i class="rk-hl-legend-design"></i> punkt projektowy</span></div>
              </div>

              <div class="rk-hl-breakdown-panel">
                <h4>Udział głównych składowych</h4>
                <p>Paski porównują przenikanie, wymianę powietrza i mostki w identycznym punkcie temperaturowym.</p>
                <div class="rk-hl-breakdown-list">
                  <div class="rk-hl-breakdown-row">
                    <span class="rk-hl-breakdown-name">Przenikanie</span>
                    <span class="rk-hl-breakdown-track"><span class="rk-hl-breakdown-bar" id="rk-hl-bar-transmission"></span></span>
                    <span class="rk-hl-breakdown-value" id="rk-hl-share-transmission">—</span>
                  </div>
                  <div class="rk-hl-breakdown-row">
                    <span class="rk-hl-breakdown-name">Wentylacja</span>
                    <span class="rk-hl-breakdown-track"><span class="rk-hl-breakdown-bar" id="rk-hl-bar-ventilation"></span></span>
                    <span class="rk-hl-breakdown-value" id="rk-hl-share-ventilation">—</span>
                  </div>
                  <div class="rk-hl-breakdown-row">
                    <span class="rk-hl-breakdown-name">Mostki cieplne</span>
                    <span class="rk-hl-breakdown-track"><span class="rk-hl-breakdown-bar" id="rk-hl-bar-bridges"></span></span>
                    <span class="rk-hl-breakdown-value" id="rk-hl-share-bridges">—</span>
                  </div>
                </div>
              </div>

              <div class="rk-hl-diagnostic-panel">
                <h4>Diagnostyka danych i granic modelu</h4>
                <p>Kalkulator nie ukrywa pominiętych informacji. Ostrzeżenie nie oznacza automatycznie błędu instalacji — wskazuje, czego nie należy wyciągać z wyniku.</p>
                <ul class="rk-hl-diagnostic-list" id="rk-hl-diagnostics">
                  <li data-state="warn">Trwa inicjalizacja diagnostyki.</li>
                </ul>
              </div>
              <p class="rk-hl-disclaimer">Model referencyjny: ΦT = Σ(U · A · b) · Δθ, ΦV = 0,34 · [V̇ · (1 − η) + ninf · V] · Δθ, ΦTB = HTB · Δθ. Wartość b dla gruntu lub stref buforowych jest uproszczeniem. Narzędzie nie wykonuje pełnych obliczeń EN 12831-1, ISO 13370 ani analizy rocznej ISO 52016.</p>
            </section>
          </div>
          <noscript><p style="padding:20px;color:#fff;background:#7b281f">Kalkulator wymaga włączonej obsługi JavaScript. Treść i wzory pozostają dostępne w artykule.</p></noscript>
        </div>
      </section>

      <aside class="rk-hl-sales-cta" aria-label="Zamówienie projektu po obliczeniu strat ciepła">
        <h3>Masz wynik budynku. Do projektu podłogówki potrzebujesz jeszcze wyników każdego pomieszczenia.</h3>
        <p>Kalkulator nie zna pełnej geometrii węzłów, dokładnej wymiany z gruntem, rzeczywistych mostków, trwałej zabudowy ani przebiegu każdej pętli. Projekt przekłada obciążenie pomieszczeń na powierzchnie czynne, rozstawy rur, temperaturę wody, długości obwodów, przepływy i nastawy rozdzielacza.</p>
        <a class="rk-hl-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczeniami dla pomieszczeń</a>
      </aside>

      <section class="rk-hl-section" id="rk-hl-interpretacja">
        <span class="rk-hl-eyebrow">06 • Interpretacja</span>
        <h2>Jak czytać wynik kalkulatora strat ciepła?</h2>
        <p class="rk-hl-section-intro">Najważniejszą wartością jest całkowita moc w kW przy wpisanej temperaturze zewnętrznej. Wskaźnik W/m² i procentowy rozkład strat służą do kontroli, ale nie zastępują analizy danych źródłowych.</p>
        <div class="rk-hl-grid-3">
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">kW</span>
            <h3>Moc projektowa</h3>
            <p>Informuje, ile ciepła trzeba dostarczać w rozpatrywanym punkcie zimowym, aby kompensować wprowadzone straty.</p>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">W/m²</span>
            <h3>Wskaźnik kontrolny</h3>
            <p>Ułatwia porównanie budynków i pomieszczeń, ale średnia całego domu może ukryć trudną łazienkę albo salon z dużymi oknami.</p>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">%</span>
            <h3>Rozkład strat</h3>
            <p>Pokazuje, czy największy udział ma obudowa budynku, wymiana powietrza czy mostki wpisane do modelu.</p>
          </article>
        </div>
        <h3>Dlaczego wykres jest przydatniejszy niż jedna liczba?</h3>
        <p>Strata ciepła zmienia się wraz z różnicą temperatur. Jeżeli model wyznacza 7 kW przy −20°C, przy 0°C wymagana moc będzie mniejsza. Wykres pozwala zobaczyć tę zależność bez udawania, że budynek przez cały sezon pracuje w najzimniejszym punkcie.</p>
        <div class="rk-hl-callout rk-hl-callout-red">
          <strong>Nie dodawaj automatycznie „15% zapasu”</strong>
          <p>Rezerwa nie naprawia błędnych powierzchni, U, temperatur ani wentylacji. Najpierw trzeba poprawić dane, a dopiero później analizować sposób doboru źródła, modulację i warunki jego pracy.</p>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-budynek-pomieszczenia">
        <span class="rk-hl-eyebrow">07 • Dwa poziomy obliczeń</span>
        <h2>Strata całego budynku a strata pojedynczego pomieszczenia</h2>
        <p class="rk-hl-section-intro">Wynik budynku odpowiada na inne pytanie niż wynik salonu, łazienki czy sypialni. Do zaprojektowania odbiorników ciepła potrzebny jest podział na pomieszczenia.</p>
        <div class="rk-hl-table-wrap">
          <table>
            <thead>
              <tr><th>Zakres</th><th>Co wynika z obliczenia?</th><th>Czego nadal nie wiadomo?</th></tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Zakres"><strong>Cały budynek</strong></td>
                <td data-label="Co wynika?">Łączna moc wynikająca z obudowy, powietrza i mostków.</td>
                <td data-label="Czego nie wiadomo?">Rozkładu mocy pomiędzy pokoje oraz lokalnych ograniczeń ogrzewania.</td>
              </tr>
              <tr>
                <td data-label="Zakres"><strong>Pomieszczenie</strong></td>
                <td data-label="Co wynika?">Moc potrzebna w konkretnej strefie i obciążenie jej powierzchni.</td>
                <td data-label="Czego nie wiadomo?">Czy wybrana konstrukcja podłogi odda tę moc przy planowanej temperaturze wody.</td>
              </tr>
              <tr>
                <td data-label="Zakres"><strong>Powierzchnia czynna</strong></td>
                <td data-label="Co wynika?">Wymagana średnia moc z fragmentu, na którym rzeczywiście mogą leżeć rury.</td>
                <td data-label="Czego nie wiadomo?">Rozstawu, temperatury powierzchni i hydrauliki bez charakterystyki systemu.</td>
              </tr>
            </tbody>
          </table>
        </div>
        <div class="rk-hl-formula">
          q<sub>wym</sub> = Φ<sub>HL,pom</sub> / A<sub>czynna</sub>
          <small>Dzielenie łącznej straty domu przez łączną powierzchnię podłogi nie zastępuje obliczeń każdego pomieszczenia.</small>
        </div>
        <p>Przykład: dom może mieć średnio 42 W/m², a łazienka — ze względu na wyższą temperaturę wewnętrzną, ścianę zewnętrzną i niewielką powierzchnię bez zabudowy — wymagać znacznie większej mocy z każdego aktywnego metra podłogi.</p>
      </section>

      <section class="rk-hl-section" id="rk-hl-podlogowka">
        <span class="rk-hl-eyebrow">08 • Przełożenie na instalację</span>
        <h2>Co wynik strat ciepła oznacza dla ogrzewania podłogowego?</h2>
        <p class="rk-hl-section-intro">Obciążenie cieplne jest wejściem do projektu podłogi, ale nie wydaje automatycznej decyzji „10 cm”, „15 cm” albo „35°C”.</p>
        <div class="rk-hl-grid-2">
          <article class="rk-hl-card">
            <h3>Najpierw trzeba sprawdzić moc powierzchni</h3>
            <ol>
              <li>Obliczyć stratę każdego pomieszczenia.</li>
              <li>Wyznaczyć rzeczywistą powierzchnię czynną.</li>
              <li>Określić konstrukcję jastrychu i opór okładziny.</li>
              <li>Porównać charakterystykę 10, 15 lub 20 cm przy tej samej temperaturze wody.</li>
              <li>Sprawdzić temperaturę powierzchni oraz hydraulikę pętli.</li>
            </ol>
          </article>
          <article class="rk-hl-card">
            <h3>Średnia budynku nie wyznacza rozstawu</h3>
            <p>Rozstaw może być różny w salonie, łazience i sypialni. W jednym pokoju 15 cm zapewni wystarczającą moc przy niskiej temperaturze wody, a w innym nawet 10 cm nie pokryje obciążenia z dostępnej powierzchni.</p>
            <p>Zobacz szczegółowe porównanie: <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur 10 czy 15 cm</a>.</p>
          </article>
        </div>
        <p>Dopiero po dobraniu rozstawu i tras pętli można policzyć <a href="https://projekt-ogrzewania.pl/ile-rury-na-m%C2%B2-ogrzewania-podlogowego/">ile rury potrzeba na m² ogrzewania podłogowego</a>, wyznaczyć długości obwodów oraz obliczyć przepływy. Granice temperatury pracy instalacji szerzej omawia artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalna temperatura zasilania podłogówki</a>.</p>
      </section>

      <section class="rk-hl-section" id="rk-hl-zrodlo">
        <span class="rk-hl-eyebrow">09 • Dobór urządzenia</span>
        <h2>Czy wynik kalkulatora wystarcza do wyboru źródła ciepła?</h2>
        <p class="rk-hl-section-intro"><strong>Nie.</strong> Projektowe obciążenie jest podstawową daną, ale karta konkretnego urządzenia i cały sposób pracy układu mają własne parametry.</p>
        <div class="rk-hl-grid-3">
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">PC</span>
            <h3>Pompa ciepła</h3>
            <p>Sprawdzamy moc przy właściwej temperaturze zewnętrznej i wymaganej temperaturze wody, punkt biwalentny, minimalną modulację, udział grzałki oraz przygotowanie c.w.u.</p>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">K</span>
            <h3>Kocioł</h3>
            <p>Oprócz obciążenia ważna jest moc minimalna, zakres modulacji, sposób przygotowania c.w.u., hydraulika układu oraz wymagania producenta urządzenia.</p>
          </article>
          <article class="rk-hl-card">
            <span class="rk-hl-card-icon">CO</span>
            <h3>Instalacja</h3>
            <p>Całkowita moc służy do obliczenia przepływu, ale wysokość podnoszenia pompy obiegowej wynika z oporów krytycznej drogi przepływu, nie z samego kW.</p>
          </article>
        </div>
        <div class="rk-hl-callout">
          <strong>Oddziel moc na ogrzewanie od ciepłej wody użytkowej</strong>
          <p>Kalkulator liczy straty ogrzewanej strefy. Nie dolicza automatycznie mocy chwilowej potrzebnej do ładowania zasobnika c.w.u. ani nie zakłada jednego uniwersalnego zapasu.</p>
        </div>
        <p>Po ustaleniu przepływu projektowego można przejść do osobnego <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulatora doboru pompy obiegowej</a>. Nie należy jednak przenosić do niego wyniku bez podziału instalacji na rzeczywiste obiegi i krytyczne drogi przepływu.</p>
      </section>

      <section class="rk-hl-section" id="rk-hl-przyklad">
        <span class="rk-hl-eyebrow">10 • Przykład krok po kroku</span>
        <h2>Przykładowy bilans domu o powierzchni 140 m²</h2>
        <p class="rk-hl-section-intro">Poniższe liczby odpowiadają wartościom startowym kalkulatora. To przykład dydaktyczny, a nie uniwersalny model każdego domu 140 m².</p>
        <h3>Założenia temperatury</h3>
        <div class="rk-hl-formula">Δθ = 20°C − (−20°C) = 40 K</div>
        <h3>Przenikanie przez przegrody</h3>
        <div class="rk-hl-table-wrap">
          <table>
            <thead>
              <tr><th>Przegroda</th><th>A [m²]</th><th>U [W/(m²·K)]</th><th>b</th><th>Strata [W]</th></tr>
            </thead>
            <tbody>
              <tr><td data-label="Przegroda">Ściany</td><td data-label="A">150</td><td data-label="U">0,20</td><td data-label="b">1,00</td><td data-label="Strata">1200</td></tr>
              <tr><td data-label="Przegroda">Okna</td><td data-label="A">30</td><td data-label="U">0,90</td><td data-label="b">1,00</td><td data-label="Strata">1080</td></tr>
              <tr><td data-label="Przegroda">Drzwi</td><td data-label="A">5</td><td data-label="U">1,30</td><td data-label="b">1,00</td><td data-label="Strata">260</td></tr>
              <tr><td data-label="Przegroda">Dach</td><td data-label="A">140</td><td data-label="U">0,15</td><td data-label="b">1,00</td><td data-label="Strata">840</td></tr>
              <tr><td data-label="Przegroda">Podłoga — model uproszczony</td><td data-label="A">140</td><td data-label="U">0,25</td><td data-label="b">0,50</td><td data-label="Strata">700</td></tr>
            </tbody>
          </table>
        </div>
        <h3>Wentylacja, infiltracja i mostki</h3>
        <p>Przy strumieniu wentylacji 175 m³/h bez odzysku, infiltracji 0,10 1/h i kubaturze 350 m³ efektywny strumień wynosi 210 m³/h:</p>
        <div class="rk-hl-formula">Φ<sub>V</sub> = 0,34 · 210 · 40 = 2856 W</div>
        <p>Dla wpisanego H<sub>TB</sub> = 15 W/K mostki odpowiadają za:</p>
        <div class="rk-hl-formula">Φ<sub>TB</sub> = 15 · 40 = 600 W</div>
        <p>Łączny wynik przykładu wynosi około <strong>7,54 kW</strong>, czyli około <strong>53,8 W/m²</strong>. Po wprowadzeniu 85% odzysku dla części wentylacyjnej wynik spadnie, ale składnik infiltracji nadal pozostanie w bilansie.</p>
        <div class="rk-hl-callout rk-hl-callout-green">
          <strong>Co pokazuje przykład?</strong>
          <p>Największą zmianę wyniku może powodować nie metraż, lecz przyjęty strumień powietrza, sprawność odzysku i kompletność przegród. Dlatego gotowy wskaźnik W/m² nie zastąpi danych konkretnego domu.</p>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-bledy">
        <span class="rk-hl-eyebrow">11 • Kontrola jakości</span>
        <h2>Najczęstsze błędy i checklista przed obliczeniem</h2>
        <div class="rk-hl-grid-2">
          <article class="rk-hl-card">
            <h3>Błędy, które zmieniają wynik</h3>
            <ul>
              <li>mnożenie powierzchni podłogi przez losowe W/m²,</li>
              <li>użycie powierzchni pokoju jako powierzchni ściany,</li>
              <li>pominięcie okien albo niewłaściwe użycie Ug zamiast Uw,</li>
              <li>wyliczenie U całej przegrody wyłącznie jako λ/d jednej warstwy,</li>
              <li>zastosowanie temperatury z innej lokalizacji,</li>
              <li>pominięcie wentylacji lub dwukrotne policzenie infiltracji,</li>
              <li>odjęcie sprawności rekuperacji od całej wymiany powietrza,</li>
              <li>automatyczne doliczenie mostków jako stałego procentu.</li>
            </ul>
          </article>
          <article class="rk-hl-card">
            <h3>Wnioski, których kalkulator nie potwierdza</h3>
            <ul>
              <li>„Dom potrzebuje dokładnie takiej pompy ciepła”.</li>
              <li>„W każdym pokoju wystarczy rozstaw 15 cm”.</li>
              <li>„Podłogówka musi pracować na 35°C”.</li>
              <li>„Roczne zużycie wyniesie wynik kW razy liczba godzin”.</li>
              <li>„Rekuperacja usuwa wszystkie straty wentylacyjne”.</li>
              <li>„Wartość U podłogi wynika wyłącznie z grubości EPS”.</li>
            </ul>
          </article>
        </div>
        <h3>Checklista danych wejściowych</h3>
        <div class="rk-hl-checklist">
          <div class="rk-hl-check">Mam powierzchnię ogrzewaną i kubaturę netto.</div>
          <div class="rk-hl-check">Oddzieliłem ściany od okien i drzwi.</div>
          <div class="rk-hl-check">Używam współczynników U całych przegród.</div>
          <div class="rk-hl-check">Sprawdziłem temperaturę projektową lokalizacji.</div>
          <div class="rk-hl-check">Znam założony strumień wentylacji.</div>
          <div class="rk-hl-check">Oddzieliłem odzysk ciepła od infiltracji.</div>
          <div class="rk-hl-check">Uwzględniłem strefy nieogrzewane i grunt.</div>
          <div class="rk-hl-check">Wiem, czy mostki cieplne są policzone.</div>
          <div class="rk-hl-check">Dla podłogówki mam wyniki pomieszczeń.</div>
          <div class="rk-hl-check">Nie traktuję kalkulatora jako doboru urządzenia.</div>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-faq">
        <span class="rk-hl-eyebrow">12 • Pytania inwestorów</span>
        <h2>FAQ: kalkulator strat ciepła budynku</h2>
        <div class="rk-hl-faq">
          <details>
            <summary>Czy ten kalkulator zastępuje pełne OZC?</summary>
            <div class="rk-hl-faq-answer"><p>Nie. Jest przejrzystym modelem referencyjnym do wstępnego bilansu i kontroli danych. Pełne obliczenia wymagają kompletnej geometrii, warunków brzegowych, właściwej metody wymiany z gruntem, mostków, wentylacji oraz obliczeń pomieszczenie po pomieszczeniu.</p></div>
          </details>
          <details>
            <summary>Czy wystarczy pomnożyć metraż domu przez 40 albo 50 W/m²?</summary>
            <div class="rk-hl-faq-answer"><p>Nie jako obliczenie projektowe. Taki wskaźnik może być późniejszą kontrolą rzędu wielkości, ale nie zna powierzchni okien, geometrii, wentylacji, temperatur ani lokalnych strat pomieszczeń.</p></div>
          </details>
          <details>
            <summary>Dlaczego wynik jest podany w kW, a nie w kWh?</summary>
            <div class="rk-hl-faq-answer"><p>Ponieważ kalkulator wyznacza moc potrzebną w konkretnym punkcie temperaturowym. kWh opisuje energię zużytą lub dostarczoną w określonym czasie. Do wyniku rocznego potrzebny jest model sezonu, klimatu, zysków i sposobu użytkowania.</p></div>
          </details>
          <details>
            <summary>Jaką temperaturę zewnętrzną wpisać?</summary>
            <div class="rk-hl-faq-answer"><p>Należy przyjąć temperaturę projektową właściwą dla lokalizacji i stosowanej metody. Pomocniczy wybór pięciu stref w kalkulatorze nie zastępuje sprawdzenia położenia budynku. Szczegóły opisuje artykuł o <a href="https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/">strefach klimatycznych w Polsce</a>.</p></div>
          </details>
          <details>
            <summary>Co wpisać jako współczynnik b?</summary>
            <div class="rk-hl-faq-answer"><p>Dla bezpośredniej wymiany z powietrzem zewnętrznym przyjmujemy zwykle 1,00. Mniejsza wartość może w uproszczeniu opisywać grunt lub strefę buforową, ale prawidłowa wartość zależy od warunków po drugiej stronie i metody obliczeń. Domyślne 0,50 dla podłogi jest przykładem, nie uniwersalnym parametrem.</p></div>
          </details>
          <details>
            <summary>Czy sprawność rekuperatora można odjąć od wszystkich strat wentylacyjnych?</summary>
            <div class="rk-hl-faq-answer"><p>Nie. Odzysk dotyczy określonego strumienia przechodzącego przez wymiennik. Infiltracja przez nieszczelności pozostaje osobnym składnikiem, a rzeczywista praca instalacji może odbiegać od jednej wartości katalogowej.</p></div>
          </details>
          <details>
            <summary>Czy z wyniku można dobrać pompę ciepła?</summary>
            <div class="rk-hl-faq-answer"><p>Wynik jest ważnym wejściem do doboru, ale nie wskazuje samodzielnie konkretnego modelu. Trzeba porównać jego moc w odpowiednim punkcie pracy, temperaturę zasilania, punkt biwalentny, modulację, udział grzałki i przygotowanie c.w.u.</p></div>
          </details>
          <details>
            <summary>Czy wynik całego domu wystarczy do zaprojektowania podłogówki?</summary>
            <div class="rk-hl-faq-answer"><p>Nie. Podłogówkę dobiera się do obciążenia każdego pomieszczenia oraz jego rzeczywistej powierzchni czynnej. Następnie sprawdza się moc konkretnej konstrukcji podłogi, temperaturę powierzchni, rozstawy, długości, przepływy i opory pętli.</p></div>
          </details>
          <details>
            <summary>Czy audyt energetyczny i OZC to ten sam dokument?</summary>
            <div class="rk-hl-faq-answer"><p>Nie należy tych pojęć utożsamiać. Audyt energetyczny ma określony zakres, cel i wymagania dokumentacyjne. Projektowe obciążenie cieplne jest obliczeniem mocy. Wynik internetowego kalkulatora nie staje się audytem ani dokumentem wymaganym przez program dotacyjny.</p></div>
          </details>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-zrodla">
        <span class="rk-hl-eyebrow">13 • Metodyka i wiarygodność</span>
        <h2>Oficjalne źródła i ograniczenia modelu</h2>
        <p class="rk-hl-section-intro">Źródła zewnętrzne prowadzą wyłącznie do oficjalnych organizacji normalizacyjnych i serwisów publicznych. Kalkulator nie korzysta z tabel producentów ani materiałów sklepów internetowych.</p>
        <div class="rk-hl-source-list">
          <div class="rk-hl-source">
            <strong><a href="https://knowledge.bsigroup.com/products/energy-performance-of-buildings-method-for-calculation-of-the-design-heat-load-space-heating-load-module-m3-3" target="_blank" rel="noopener nofollow">BS EN 12831-1 — projektowe obciążenie cieplne</a></strong>
            <p>Metoda obliczania projektowego obciążenia cieplnego pomieszczeń, jednostek budynku i całych budynków.</p>
          </div>
          <div class="rk-hl-source">
            <strong><a href="https://www.iso.org/standard/65696.html" target="_blank" rel="noopener nofollow">ISO 52016-1 — potrzeby energetyczne, temperatury i obciążenia</a></strong>
            <p>Rozróżnia między innymi potrzeby energetyczne ogrzewania i chłodzenia oraz obciążenia cieplne.</p>
          </div>
          <div class="rk-hl-source">
            <strong><a href="https://www.iso.org/standard/65708.html" target="_blank" rel="noopener nofollow">ISO 6946:2017 — opór i współczynnik przenikania ciepła</a></strong>
            <p>Metoda dla komponentów budowlanych; jej zakres nie obejmuje między innymi okien ani elementów wymieniających ciepło z gruntem.</p>
          </div>
          <div class="rk-hl-source">
            <strong><a href="https://www.iso.org/standard/65716.html" target="_blank" rel="noopener nofollow">ISO 13370:2017 — wymiana ciepła przez grunt</a></strong>
            <p>Obliczanie współczynników i strumieni ciepła dla podłóg na gruncie, podłóg podniesionych i piwnic.</p>
          </div>
          <div class="rk-hl-source">
            <strong><a href="https://www.iso.org/standard/65706.html" target="_blank" rel="noopener nofollow">ISO 14683:2017 — liniowe mostki cieplne</a></strong>
            <p>Metody uproszczone i wartości domyślne dla liniowego współczynnika przenikania ciepła.</p>
          </div>
          <div class="rk-hl-source">
            <strong><a href="https://czystepowietrze.gov.pl/wez-dofinansowanie/pytania-i-odpowiedzi/nowy-program-czyste-powietrze-obowiazujacy-od-31-marca-2025/14" target="_blank" rel="noopener nofollow">Program „Czyste Powietrze” — wymagania dotyczące audytu</a></strong>
            <p>Oficjalna odpowiedź dotycząca audytu energetycznego i dokumentu podsumowującego audyt. Nie należy utożsamiać ich z wynikiem kalkulatora internetowego.</p>
          </div>
        </div>
        <div class="rk-hl-callout">
          <strong>Zakres odpowiedzialności narzędzia</strong>
          <p>Kalkulator służy do edukacji, kontroli założeń i wstępnego bilansu. Wynik zależy od danych użytkownika. Nie zastępuje dokumentacji projektowej, audytu energetycznego, świadectwa charakterystyki energetycznej ani doboru konkretnego urządzenia.</p>
        </div>
      </section>

      <section class="rk-hl-section" id="rk-hl-autor">
        <span class="rk-hl-eyebrow">14 • E-E-A-T</span>
        <h2>Autor opracowania i metodyki kalkulatora</h2>
        <section class="rk-hl-author" aria-label="Autor opracowania">
          <input type="radio" name="rk-hl-author-tabs" id="rk-hl-author-about" checked>
          <input type="radio" name="rk-hl-author-tabs" id="rk-hl-author-exp">
          <input type="radio" name="rk-hl-author-tabs" id="rk-hl-author-method">
          <header class="rk-hl-author-head">
            <div>
              <h3>Robert Kucharski</h3>
              <p>Projektant instalacji sanitarnych, specjalista HVAC i ogrzewania podłogowego</p>
            </div>
            <span class="rk-hl-author-mark">OBLICZENIA CIEPLNE • OGRZEWANIE PŁASZCZYZNOWE • HYDRAULIKA INSTALACJI</span>
          </header>
          <div class="rk-hl-author-layout">
            <aside class="rk-hl-author-side">
              <div class="rk-hl-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC" width="600" height="600" loading="lazy" decoding="async"></div>
              <div class="rk-hl-author-name">Robert Kucharski</div>
              <div class="rk-hl-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
              <div class="rk-hl-author-social-label">Profile autora</div>
              <div class="rk-hl-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
                <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="me noopener nofollow" aria-label="Robert Kucharski na LinkedIn">
                  <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4.98 3.5C4.98 4.88 3.87 6 2.5 6A2.5 2.5 0 1 1 5 3.5ZM.5 8h4V24h-4V8Zm7 0h3.84v2.19h.05C11.93 9.18 13.24 7.5 17.2 7.5 23.21 7.5 24 11.46 24 16.61V24h-4v-6.56c0-1.57-.03-3.59-2.19-3.59-2.19 0-2.53 1.71-2.53 3.48V24h-4V8h3.84v2.19h.05C15.7 9.18 17.02 7.5 19.79 7.5Z"></path></svg>
                </a>
                <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="me noopener nofollow" aria-label="Projekt Ogrzewania na Facebooku">
                  <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M24 12.07C24 5.4 18.63 0 12 0S0 5.4 0 12.07C0 18.1 4.39 23.1 10.13 24v-8.44H7.08v-3.49h3.05V9.41c0-3.03 1.79-4.7 4.53-4.7 1.31 0 2.68.24 2.68.24v2.96h-1.51c-1.49 0-1.96.93-1.96 1.89v2.27h3.33l-.53 3.49h-2.8V24C19.61 23.1 24 18.1 24 12.07Z"></path></svg>
                </a>
                <a href="https://x.com/Projekt_HVAC" target="_blank" rel="me noopener nofollow" aria-label="Projekt HVAC w serwisie X">
                  <svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231Zm-1.161 17.52h1.833L7.084 4.126H5.117L17.083 19.77Z"></path></svg>
                </a>
              </div>
            </aside>
            <div class="rk-hl-author-main">
              <blockquote class="rk-hl-author-quote"><p>„Wartość W/m² powinna być wynikiem obliczenia przegród, temperatur i wymiany powietrza. Jeżeli wpisujemy ją na początku tylko dlatego, że dom ma 140 m², nie obliczamy strat — zgadujemy.”</p></blockquote>
              <div class="rk-hl-author-tabs" role="tablist" aria-label="Informacje o autorze">
                <label class="rk-hl-author-tab" for="rk-hl-author-about">O autorze</label>
                <label class="rk-hl-author-tab" for="rk-hl-author-exp">Doświadczenie</label>
                <label class="rk-hl-author-tab" for="rk-hl-author-method">Metodyka</label>
              </div>
              <div class="rk-hl-author-panel rk-hl-author-panel-about">
                <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W publikacjach łączy fizykę budynku z praktycznym przełożeniem wyniku na rozstawy, długości pętli, przepływy i pracę źródła ciepła.</p>
                <p>Prowadzi serwis Projekt-Ogrzewania.pl oraz rozwija portale budowlane Remont.biz.pl i Sobir.pl. Celem materiałów jest pokazanie założeń i ograniczeń obliczeń, a nie zastępowanie projektu pojedynczą liczbą z internetowego formularza.</p>
              </div>
              <div class="rk-hl-author-panel rk-hl-author-panel-exp">
                <p>Doświadczenie autora obejmuje analizę dokumentacji budynków nowych i modernizowanych, obliczanie obciążeń pomieszczeń, dobór powierzchni grzewczych oraz hydrauliczne bilansowanie instalacji. Szczególną uwagę poświęca sytuacjom, w których średnia całego domu ukrywa problem lokalny: małą powierzchnię czynną łazienki, duże przeszklenia, strefy bez rur albo ograniczenia posadzki.</p>
                <p>Praktyka projektowa pokazuje, że poprawne dane wejściowe są ważniejsze od rozbudowanej grafiki kalkulatora. Dlatego narzędzie jawnie pokazuje wzory, składowe i ostrzeżenia o pominiętych mostkach lub uproszczonej wymianie z gruntem.</p>
              </div>
              <div class="rk-hl-author-panel rk-hl-author-panel-method">
                <p>Model kalkulatora rozdziela straty przez przenikanie, wentylację wraz z infiltracją oraz mostki cieplne. Nie miesza mocy projektowej w kW z roczną energią w kWh i nie dobiera automatycznie rozstawu rur ani modelu urządzenia.</p>
                <p>Podstawą dalszego projektu podłogówki pozostaje obciążenie każdego pomieszczenia, jego powierzchnia czynna oraz charakterystyka konkretnej konstrukcji podłogi przy określonych temperaturach wody.</p>
              </div>
              <p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Wszystkie wpisy autora</a></p>
              <div class="rk-hl-portals" aria-label="Serwisy prowadzone przez autora">
                <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>
        </section>
      </section>

      <aside class="rk-hl-sales-cta" aria-label="Końcowe zamówienie projektu ogrzewania podłogowego">
        <h3>Od bilansu strat do kompletnego projektu ogrzewania podłogowego</h3>
        <p>Otrzymasz rozstaw rur wpisany na rzut budynku, długości pętli, przepływy, nastawy rozdzielacza i zestawienie materiałowe oparte na danych poszczególnych pomieszczeń — bez projektowania całego domu na jednym uśrednionym W/m².</p>
        <a class="rk-hl-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
      </aside>
    </div>
  </div>

  <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.pl",
        "inLanguage": "pl-PL",
        "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" }
      },
      {
        "@type": "Organization",
        "@id": "https://projekt-ogrzewania.pl/#organization",
        "name": "Projekt-Ogrzewania.pl",
        "url": "https://projekt-ogrzewania.pl/",
        "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
      },
      {
        "@type": "Organization",
        "@id": "https://remont.biz.pl/#organization",
        "name": "Remont.biz.pl",
        "url": "https://remont.biz.pl/",
        "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
      },
      {
        "@type": "Organization",
        "@id": "https://sobir.pl/#organization",
        "name": "Sobir.pl",
        "url": "https://sobir.pl/",
        "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
      },
      {
        "@type": "Person",
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
        "name": "Robert Kucharski",
        "url": "https://projekt-ogrzewania.pl/author/admin3399/",
        "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
        "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
        "description": "Autor opracowań, kalkulatorów i projektów dotyczących ogrzewania podłogowego, obliczeń cieplnych oraz hydrauliki instalacji grzewczych.",
        "knowsAbout": [
          "projektowe obciążenie cieplne budynków",
          "ogrzewanie podłogowe",
          "hydraulika instalacji grzewczych",
          "dobór pomp obiegowych",
          "równoważenie hydrauliczne",
          "projektowanie instalacji sanitarnych"
        ],
        "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": "BreadcrumbList",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#breadcrumb",
        "itemListElement": [
          {
            "@type": "ListItem",
            "position": 1,
            "name": "Strona główna",
            "item": "https://projekt-ogrzewania.pl/"
          },
          {
            "@type": "ListItem",
            "position": 2,
            "name": "Blog",
            "item": "https://projekt-ogrzewania.pl/blog/"
          },
          {
            "@type": "ListItem",
            "position": 3,
            "name": "Kalkulator strat ciepła budynku",
            "item": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/"
          }
        ]
      },
      {
        "@type": "WebPage",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webpage",
        "url": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/",
        "name": "Kalkulator strat ciepła budynku – oblicz wymaganą moc ogrzewania w kW",
        "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
        "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#breadcrumb" },
        "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#primaryimage" },
        "datePublished": "2026-03-09T11:26:18+01:00",
        "dateModified": "2026-09-01T12:00:00+02:00",
        "inLanguage": "pl-PL",
        "mainEntity": { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article" }
      },
      {
        "@type": "ImageObject",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#primaryimage",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/03/Kalkulator-strat-ciepla-domu-–-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie.webp",
        "caption": "Kalkulator strat ciepła budynku"
      },
      {
        "@type": "WebApplication",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#calculator",
        "name": "Kalkulator strat ciepła budynku i pomieszczenia",
        "url": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#rk-hl-kalkulator",
        "applicationCategory": "UtilitiesApplication",
        "operatingSystem": "Any",
        "browserRequirements": "JavaScript enabled",
        "isAccessibleForFree": true,
        "inLanguage": "pl-PL",
        "description": "Kalkulator wstępnego bilansu projektowych strat ciepła przez przegrody, wentylację, infiltrację i mostki cieplne, z wykresem wymaganej mocy względem temperatury zewnętrznej.",
        "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
        "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "featureList": [
          "obliczanie strat przez przegrody",
          "obliczanie strat wentylacyjnych i infiltracyjnych",
          "uwzględnienie odzysku ciepła",
          "uwzględnienie liniowych mostków cieplnych",
          "wynik w W, kW i W/m²",
          "dynamiczna krzywa mocy względem temperatury zewnętrznej",
          "diagnostyka kompletności danych"
        ]
      },
      {
        "@type": "HowTo",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#howto",
        "name": "Jak wstępnie obliczyć projektowe straty ciepła budynku?",
        "description": "Pięć kroków prowadzących od geometrii i temperatur do wyniku oraz jego prawidłowej interpretacji.",
        "totalTime": "PT20M",
        "tool": [
          { "@type": "HowToTool", "name": "Dokumentacja przegród i stolarki" },
          { "@type": "HowToTool", "name": "Kalkulator strat ciepła na stronie" }
        ],
        "step": [
          {
            "@type": "HowToStep",
            "position": 1,
            "name": "Określ zakres i geometrię",
            "text": "Wybierz cały budynek albo pomieszczenie, a następnie wpisz powierzchnię ogrzewaną i kubaturę."
          },
          {
            "@type": "HowToStep",
            "position": 2,
            "name": "Wpisz temperatury projektowe",
            "text": "Podaj wymaganą temperaturę wewnętrzną oraz temperaturę zewnętrzną właściwą dla lokalizacji."
          },
          {
            "@type": "HowToStep",
            "position": 3,
            "name": "Opisz przegrody",
            "text": "Dla ścian, okien, drzwi, dachu, podłogi i stref buforowych podaj powierzchnię, współczynnik U oraz współczynnik redukcyjny."
          },
          {
            "@type": "HowToStep",
            "position": 4,
            "name": "Uzupełnij wymianę powietrza i mostki",
            "text": "Podaj strumień wentylacji, sprawność odzysku, infiltrację i znany sumaryczny współczynnik mostków cieplnych."
          },
          {
            "@type": "HowToStep",
            "position": 5,
            "name": "Oceń wynik i ograniczenia",
            "text": "Odczytaj moc w kW, wskaźnik W/m², rozkład strat, wykres temperatury oraz ostrzeżenia o brakujących danych."
          }
        ]
      },
      {
        "@type": "FAQPage",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#faq",
        "mainEntity": [
          {
            "@type": "Question",
            "name": "Czy ten kalkulator zastępuje pełne OZC?",
            "acceptedAnswer": { "@type": "Answer", "text": "Nie. Jest modelem referencyjnym do wstępnego bilansu i kontroli danych. Pełne obliczenia wymagają kompletnej geometrii, warunków brzegowych, wymiany z gruntem, mostków, wentylacji i wyników każdego pomieszczenia." }
          },
          {
            "@type": "Question",
            "name": "Czy wystarczy pomnożyć metraż domu przez 40 albo 50 W/m²?",
            "acceptedAnswer": { "@type": "Answer", "text": "Nie jako obliczenie projektowe. Taki wskaźnik może być kontrolą rzędu wielkości, ale nie uwzględnia powierzchni okien, geometrii, wentylacji, temperatur ani lokalnych strat pomieszczeń." }
          },
          {
            "@type": "Question",
            "name": "Dlaczego wynik jest podany w kW, a nie w kWh?",
            "acceptedAnswer": { "@type": "Answer", "text": "Kalkulator wyznacza moc potrzebną w konkretnym punkcie temperaturowym. kWh opisuje energię w określonym czasie i wymaga modelu sezonu, klimatu, zysków oraz sposobu użytkowania." }
          },
          {
            "@type": "Question",
            "name": "Jaką temperaturę zewnętrzną wpisać?",
            "acceptedAnswer": { "@type": "Answer", "text": "Należy przyjąć temperaturę projektową właściwą dla lokalizacji i stosowanej metody. Pomocniczy wybór strefy nie zastępuje sprawdzenia położenia budynku." }
          },
          {
            "@type": "Question",
            "name": "Co wpisać jako współczynnik b?",
            "acceptedAnswer": { "@type": "Answer", "text": "Dla bezpośredniej wymiany z powietrzem zewnętrznym przyjmuje się 1,00. Mniejsza wartość może w uproszczeniu opisywać grunt lub strefę buforową, ale zależy od warunków i metody obliczeń." }
          },
          {
            "@type": "Question",
            "name": "Czy sprawność rekuperatora można odjąć od wszystkich strat wentylacyjnych?",
            "acceptedAnswer": { "@type": "Answer", "text": "Nie. Odzysk dotyczy strumienia przechodzącego przez wymiennik. Infiltracja przez nieszczelności pozostaje osobnym składnikiem." }
          },
          {
            "@type": "Question",
            "name": "Czy z wyniku można dobrać pompę ciepła?",
            "acceptedAnswer": { "@type": "Answer", "text": "Wynik jest ważnym wejściem, ale nie wskazuje konkretnego modelu. Trzeba sprawdzić moc urządzenia w punkcie pracy, temperaturę zasilania, punkt biwalentny, modulację, grzałkę i ciepłą wodę użytkową." }
          },
          {
            "@type": "Question",
            "name": "Czy wynik całego domu wystarczy do zaprojektowania podłogówki?",
            "acceptedAnswer": { "@type": "Answer", "text": "Nie. Potrzebne jest obciążenie każdego pomieszczenia, jego powierzchnia czynna, konstrukcja podłogi, temperatura powierzchni, rozstawy, długości, przepływy i opory pętli." }
          },
          {
            "@type": "Question",
            "name": "Czy audyt energetyczny i OZC to ten sam dokument?",
            "acceptedAnswer": { "@type": "Answer", "text": "Nie należy utożsamiać tych pojęć. Audyt energetyczny ma określony zakres i cel dokumentacyjny, a projektowe obciążenie cieplne jest obliczeniem mocy. Wynik kalkulatora nie jest audytem." }
          }
        ]
      },
      {
        "@type": "TechArticle",
        "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#article",
        "headline": "Kalkulator strat ciepła budynku – oblicz wymaganą moc ogrzewania w kW",
        "description": "Oblicz straty przez ściany, okna, dach, podłogę i wentylację. Sprawdź wymaganą moc w kW, W/m² oraz udział każdej części bilansu.",
        "url": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/",
        "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#webpage" },
        "image": { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#primaryimage" },
        "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
        "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
        "datePublished": "2026-03-09T11:26:18+01:00",
        "dateModified": "2026-09-01T12:00:00+02:00",
        "inLanguage": "pl-PL",
        "isAccessibleForFree": true,
        "proficiencyLevel": "Intermediate",
        "about": [
          { "@type": "Thing", "name": "projektowe obciążenie cieplne" },
          { "@type": "Thing", "name": "straty ciepła budynku" },
          { "@type": "Thing", "name": "ogrzewanie podłogowe" },
          { "@type": "Thing", "name": "wentylacja i infiltracja" }
        ],
        "mentions": [
          { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#calculator" },
          { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#howto" },
          { "@id": "https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/#faq" }
        ],
        "citation": [
          "https://knowledge.bsigroup.com/products/energy-performance-of-buildings-method-for-calculation-of-the-design-heat-load-space-heating-load-module-m3-3",
          "https://www.iso.org/standard/65696.html",
          "https://www.iso.org/standard/65708.html",
          "https://www.iso.org/standard/65716.html",
          "https://www.iso.org/standard/65706.html",
          "https://budowlaneabc.gov.pl/charakterystyka-energetyczna-budynkow/kalkulatory/calc-wpc/",
          "https://czystepowietrze.gov.pl/wez-dofinansowanie/pytania-i-odpowiedzi/nowy-program-czyste-powietrze-obowiazujacy-od-31-marca-2025/14"
        ]
      }
    ]
  }
  </script>

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

    function rkHlInit() {
      var root = document.getElementById("rk-hl-tool");
      if (!root) { return; }

      var scope = document.getElementById("rk-hl-scope");
      var areaInput = document.getElementById("rk-hl-area");
      var volumeInput = document.getElementById("rk-hl-volume");
      var activeField = document.getElementById("rk-hl-active-field");
      var activeInput = document.getElementById("rk-hl-active-area");
      var activeResultCard = document.getElementById("rk-hl-active-result-card");
      var zone = document.getElementById("rk-hl-zone");
      var indoorInput = document.getElementById("rk-hl-indoor");
      var outdoorInput = document.getElementById("rk-hl-outdoor");
      var ventFlowInput = document.getElementById("rk-hl-vent-flow");
      var recoveryInput = document.getElementById("rk-hl-recovery");
      var infiltrationInput = document.getElementById("rk-hl-infiltration");
      var bridgesInput = document.getElementById("rk-hl-bridges");
      var rows = root.querySelectorAll(".rk-hl-envelope-row");
      var totalKwOutput = document.getElementById("rk-hl-total-kw");
      var wm2Output = document.getElementById("rk-hl-wm2");
      var transmissionOutput = document.getElementById("rk-hl-transmission");
      var ventilationOutput = document.getElementById("rk-hl-ventilation");
      var activeWm2Output = document.getElementById("rk-hl-active-wm2");
      var deltaNote = document.getElementById("rk-hl-delta-note");
      var status = document.getElementById("rk-hl-status");
      var diagnostics = document.getElementById("rk-hl-diagnostics");

      function rkHlNumber(element, fallback) {
        var value = parseFloat(element.value);
        if (!Number.isFinite(value)) { return fallback; }
        return value;
      }

      function rkHlClamp(value, minimum, maximum) {
        if (value < minimum) { return minimum; }
        if (value > maximum) { return maximum; }
        return value;
      }

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

      function rkHlSetOutput(element, value, unit, digits) {
        element.innerHTML = rkHlFormat(value, digits) + " <small>" + unit + "</small>";
      }

      function rkHlCreateSvg(tag, attributes, textValue) {
        var element = document.createElementNS("http://www.w3.org/2000/svg", tag);
        Object.keys(attributes).forEach(function (key) {
          element.setAttribute(key, String(attributes[key]));
        });
        if (typeof textValue === "string") { element.textContent = textValue; }
        return element;
      }

      function rkHlClear(element) {
        while (element.firstChild) { element.removeChild(element.firstChild); }
      }

      function rkHlDrawChart(totalH, indoor, outdoor, totalKw) {
        var grid = document.getElementById("rk-hl-chart-grid");
        var line = document.getElementById("rk-hl-chart-line");
        var designLine = document.getElementById("rk-hl-chart-design-line");
        var designPoint = document.getElementById("rk-hl-chart-design-point");
        var designLabel = document.getElementById("rk-hl-chart-design-label");
        var left = 68;
        var right = 24;
        var top = 22;
        var bottom = 52;
        var width = 760;
        var height = 330;
        var plotWidth = width - left - right;
        var plotHeight = height - top - bottom;
        var xMin = -30;
        var xMax = 15;
        var yMax;
        var xStep;
        var points = [];
        var current;

        if (outdoor < xMin) { xMin = Math.floor(outdoor / 5) * 5; }
        if (indoor > xMax) { xMax = Math.ceil(indoor / 5) * 5; }
        yMax = totalH * Math.max(indoor - xMin, 1) / 1000;
        yMax = Math.max(1, Math.ceil(yMax));
        xStep = xMax - xMin > 50 ? 10 : 5;

        function xPos(value) {
          return left + (value - xMin) / (xMax - xMin) * plotWidth;
        }

        function yPos(value) {
          return top + plotHeight - value / yMax * plotHeight;
        }

        rkHlClear(grid);

        for (current = 0; current <= 5; current += 1) {
          var yValue = yMax * current / 5;
          var y = yPos(yValue);
          grid.appendChild(rkHlCreateSvg("line", {
            x1: left,
            y1: y,
            x2: width - right,
            y2: y,
            stroke: "#d9e8ed",
            "stroke-width": 1
          }));
          grid.appendChild(rkHlCreateSvg("text", {
            x: left - 10,
            y: y + 5,
            fill: "#607784",
            "font-size": 12,
            "text-anchor": "end"
          }, rkHlFormat(yValue, 1)));
        }

        for (current = xMin; current <= xMax; current += xStep) {
          var x = xPos(current);
          grid.appendChild(rkHlCreateSvg("line", {
            x1: x,
            y1: top,
            x2: x,
            y2: top + plotHeight,
            stroke: "#e4eef1",
            "stroke-width": 1
          }));
          grid.appendChild(rkHlCreateSvg("text", {
            x: x,
            y: height - 24,
            fill: "#607784",
            "font-size": 12,
            "text-anchor": "middle"
          }, String(current) + "°"));
        }

        grid.appendChild(rkHlCreateSvg("line", {
          x1: left,
          y1: top + plotHeight,
          x2: width - right,
          y2: top + plotHeight,
          stroke: "#728994",
          "stroke-width": 2
        }));
        grid.appendChild(rkHlCreateSvg("line", {
          x1: left,
          y1: top,
          x2: left,
          y2: top + plotHeight,
          stroke: "#728994",
          "stroke-width": 2
        }));
        grid.appendChild(rkHlCreateSvg("text", {
          x: left + plotWidth / 2,
          y: height - 3,
          fill: "#405965",
          "font-size": 13,
          "font-weight": 800,
          "text-anchor": "middle"
        }, "temperatura zewnętrzna [°C]"));
        grid.appendChild(rkHlCreateSvg("text", {
          x: 18,
          y: top + plotHeight / 2,
          fill: "#405965",
          "font-size": 13,
          "font-weight": 800,
          "text-anchor": "middle",
          transform: "rotate(-90 18 " + String(top + plotHeight / 2) + ")"
        }, "wymagana moc [kW]"));

        for (current = xMin; current <= xMax; current += 1) {
          var power = totalH * Math.max(indoor - current, 0) / 1000;
          points.push(rkHlFormat(xPos(current), 1).replace(",", ".") + "," + rkHlFormat(yPos(power), 1).replace(",", "."));
        }
        line.setAttribute("points", points.join(" "));

        var designTemperature = rkHlClamp(outdoor, xMin, xMax);
        var designX = xPos(designTemperature);
        var designY = yPos(totalKw);
        designLine.setAttribute("x1", String(designX));
        designLine.setAttribute("x2", String(designX));
        designLine.setAttribute("y1", String(top));
        designLine.setAttribute("y2", String(top + plotHeight));
        designPoint.setAttribute("cx", String(designX));
        designPoint.setAttribute("cy", String(designY));
        designLabel.setAttribute("x", String(designX > width - 135 ? designX - 92 : designX + 10));
        designLabel.setAttribute("y", String(Math.max(top + 16, designY - 12)));
        designLabel.textContent = rkHlFormat(totalKw, 2) + " kW przy " + rkHlFormat(outdoor, 1) + "°C";
      }

      function rkHlSetBar(barId, valueId, value, total) {
        var percentage = total > 0 ? value / total * 100 : 0;
        document.getElementById(barId).style.width = rkHlClamp(percentage, 0, 100) + "%";
        document.getElementById(valueId).textContent = rkHlFormat(value / 1000, 2) + " kW • " + rkHlFormat(percentage, 1) + "%";
      }

      function rkHlDiagnosticItem(textValue, stateValue) {
        var item = document.createElement("li");
        item.textContent = textValue;
        item.setAttribute("data-state", stateValue);
        return item;
      }

      function rkHlUpdate() {
        var area = Math.max(0, rkHlNumber(areaInput, 0));
        var volume = Math.max(0, rkHlNumber(volumeInput, 0));
        var activeArea = Math.max(0, rkHlNumber(activeInput, 0));
        var indoor = rkHlNumber(indoorInput, 20);
        var outdoor = rkHlNumber(outdoorInput, -20);
        var delta = Math.max(0, indoor - outdoor);
        var ventFlow = Math.max(0, rkHlNumber(ventFlowInput, 0));
        var recovery = rkHlClamp(rkHlNumber(recoveryInput, 0), 0, 95);
        var infiltration = Math.max(0, rkHlNumber(infiltrationInput, 0));
        var bridgesH = Math.max(0, rkHlNumber(bridgesInput, 0));
        var transmissionH = 0;
        var envelopeCount = 0;
        var invalidEnvelope = false;
        var floorSimplified = false;
        var ventEffective;
        var ventilationH;
        var totalH;
        var transmissionW;
        var ventilationW;
        var bridgesW;
        var totalW;
        var totalKw;
        var wm2;
        var activeWm2;
        var badCount = 0;
        var warnCount = 0;

        rows.forEach(function (row) {
          var rowArea = Math.max(0, rkHlNumber(row.querySelector('[data-role="area"]'), 0));
          var rowU = Math.max(0, rkHlNumber(row.querySelector('[data-role="u"]'), 0));
          var rowFactor = Math.max(0, rkHlNumber(row.querySelector('[data-role="factor"]'), 0));
          var rowH = rowArea * rowU * rowFactor;
          var rowW = rowH * delta;
          var rowOutput = row.querySelector('[data-role="result"]');
          transmissionH += rowH;
          if (rowArea > 0) { envelopeCount += 1; }
          if (rowArea > 0) {
            if (rowU <= 0) { invalidEnvelope = true; }
          }
          if (row.getAttribute("data-envelope") === "floor") {
            if (rowArea > 0) { floorSimplified = true; }
          }
          rowOutput.innerHTML = rkHlFormat(rowW, 0) + " <small>W</small>";
        });

        ventEffective = ventFlow * (1 - recovery / 100) + infiltration * volume;
        ventilationH = 0.34 * ventEffective;
        totalH = transmissionH + ventilationH + bridgesH;
        transmissionW = transmissionH * delta;
        ventilationW = ventilationH * delta;
        bridgesW = bridgesH * delta;
        totalW = transmissionW + ventilationW + bridgesW;
        totalKw = totalW / 1000;
        wm2 = area > 0 ? totalW / area : 0;
        activeWm2 = activeArea > 0 ? totalW / activeArea : 0;

        rkHlSetOutput(totalKwOutput, totalKw, "kW", 2);
        rkHlSetOutput(wm2Output, wm2, "W/m²", 1);
        rkHlSetOutput(transmissionOutput, transmissionW / 1000, "kW", 2);
        rkHlSetOutput(ventilationOutput, ventilationW / 1000, "kW", 2);
        rkHlSetOutput(activeWm2Output, activeWm2, "W/m²", 1);
        deltaNote.textContent = "Różnica temperatur: " + rkHlFormat(delta, 1) + " K • H całkowite: " + rkHlFormat(totalH, 1) + " W/K";

        rkHlSetBar("rk-hl-bar-transmission", "rk-hl-share-transmission", transmissionW, totalW);
        rkHlSetBar("rk-hl-bar-ventilation", "rk-hl-share-ventilation", ventilationW, totalW);
        rkHlSetBar("rk-hl-bar-bridges", "rk-hl-share-bridges", bridgesW, totalW);
        rkHlDrawChart(totalH, indoor, outdoor, totalKw);

        rkHlClear(diagnostics);

        if (delta <= 0) {
          diagnostics.appendChild(rkHlDiagnosticItem("Temperatura zewnętrzna nie jest niższa od wewnętrznej. Punkt nie opisuje zimowego obciążenia grzewczego.", "bad"));
          badCount += 1;
        } else {
          diagnostics.appendChild(rkHlDiagnosticItem("Różnica temperatur jest dodatnia i została jawnie pokazana w wyniku.", "good"));
        }

        if (area <= 0) {
          diagnostics.appendChild(rkHlDiagnosticItem("Brakuje powierzchni ogrzewanej, dlatego wskaźnik W/m² nie może być oceniony.", "bad"));
          badCount += 1;
        } else {
          diagnostics.appendChild(rkHlDiagnosticItem("Wskaźnik mocy został odniesiony do wpisanej powierzchni " + rkHlFormat(area, 1) + " m².", "good"));
        }

        if (envelopeCount < 3) {
          diagnostics.appendChild(rkHlDiagnosticItem("Wprowadzono mniej niż trzy rodzaje przegród. Sprawdź, czy bilans obejmuje całą analizowaną strefę.", "warn"));
          warnCount += 1;
        } else {
          diagnostics.appendChild(rkHlDiagnosticItem("Przenikanie jest liczone osobno dla " + String(envelopeCount) + " rodzajów przegród.", "good"));
        }

        if (invalidEnvelope) {
          diagnostics.appendChild(rkHlDiagnosticItem("Co najmniej jedna przegroda ma powierzchnię większą od zera i U równe zero.", "bad"));
          badCount += 1;
        }

        if (floorSimplified) {
          diagnostics.appendChild(rkHlDiagnosticItem("Podłoga na gruncie jest policzona przybliżeniem U · A · b · Δθ, a nie pełną metodą wymiany z gruntem.", "warn"));
          warnCount += 1;
        }

        if (ventFlow <= 0) {
          if (infiltration <= 0) {
            diagnostics.appendChild(rkHlDiagnosticItem("Wentylacja i infiltracja mają wartość zero. Wynik prawdopodobnie pomija istotną część strat.", "bad"));
            badCount += 1;
          } else {
            diagnostics.appendChild(rkHlDiagnosticItem("Straty powietrzne obejmują tylko infiltrację. Sprawdź, czy celowo pominięto strumień wentylacyjny.", "warn"));
            warnCount += 1;
          }
        } else {
          diagnostics.appendChild(rkHlDiagnosticItem("Efektywny strumień powietrza użyty w obliczeniu wynosi " + rkHlFormat(ventEffective, 1) + " m³/h.", "good"));
        }

        if (recovery > 0) {
          if (ventFlow <= 0) {
            diagnostics.appendChild(rkHlDiagnosticItem("Wpisano sprawność odzysku, ale strumień wentylacji wynosi zero.", "warn"));
            warnCount += 1;
          } else {
            diagnostics.appendChild(rkHlDiagnosticItem("Odzysk redukuje tylko wpisany strumień wentylacyjny; infiltracja pozostaje osobno.", "good"));
          }
        }

        if (bridgesH <= 0) {
          diagnostics.appendChild(rkHlDiagnosticItem("Mostki cieplne nie zostały uwzględnione. Nie doliczono automatycznego zapasu procentowego.", "warn"));
          warnCount += 1;
        } else {
          diagnostics.appendChild(rkHlDiagnosticItem("Mostki cieplne odpowiadają za " + rkHlFormat(bridgesW / 1000, 2) + " kW w punkcie projektowym.", "good"));
        }

        if (scope.value === "room") {
          if (activeArea <= 0) {
            diagnostics.appendChild(rkHlDiagnosticItem("W trybie pomieszczenia brakuje czynnej powierzchni podłogi.", "bad"));
            badCount += 1;
          } else {
            diagnostics.appendChild(rkHlDiagnosticItem("Wymagana średnia moc z powierzchni czynnej wynosi " + rkHlFormat(activeWm2, 1) + " W/m². Trzeba ją porównać z charakterystyką konkretnej podłogi.", "good"));
          }
        }

        if (wm2 > 120) {
          diagnostics.appendChild(rkHlDiagnosticItem("Wskaźnik przekracza 120 W/m². Zweryfikuj dane, a następnie osobno oceń możliwości odbiorników ciepła.", "warn"));
          warnCount += 1;
        }

        if (badCount > 0) {
          status.setAttribute("data-level", "alert");
          status.textContent = "Brakuje danych krytycznych albo warunki nie opisują punktu grzewczego. Nie używaj jeszcze wyniku do dalszych decyzji.";
        } else if (warnCount > 0) {
          status.setAttribute("data-level", "warn");
          status.textContent = "Wynik jest użyteczny do wstępnej analizy, ale zawiera jawne uproszczenia. Przeczytaj diagnostykę przed wykorzystaniem liczby.";
        } else {
          status.setAttribute("data-level", "good");
          status.textContent = "Wprowadzone dane tworzą spójny wstępny bilans. Nadal nie jest to pełne OZC ani automatyczny dobór urządzenia.";
        }
      }

      function rkHlScopeChange() {
        if (scope.value === "room") {
          activeField.hidden = false;
          activeResultCard.hidden = false;
        } else {
          activeField.hidden = true;
          activeResultCard.hidden = true;
        }
        rkHlUpdate();
      }

      zone.addEventListener("change", function () {
        if (zone.value !== "manual") { outdoorInput.value = zone.value; }
        rkHlUpdate();
      });

      scope.addEventListener("change", rkHlScopeChange);

      root.querySelectorAll("input, select").forEach(function (control) {
        if (control !== zone) {
          if (control !== scope) {
            control.addEventListener("input", rkHlUpdate);
            control.addEventListener("change", rkHlUpdate);
          }
        }
      });

      rkHlScopeChange();
    }

    if (document.readyState === "loading") {
      document.addEventListener("DOMContentLoaded", rkHlInit);
    } else {
      rkHlInit();
    }
  }());
  </script>
</article>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">Kalkulator strat ciepła budynku – jak samodzielnie obliczyć zapotrzebowanie na ogrzewanie.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
