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

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa Poradnik budowlany - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/poradnik-budowlany/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Strefy klimatyczne w Polsce – wyszukiwarka miejscowości, temperatura projektowa i OZC.</title>
		<link>https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 01 Aug 2026 10:12:32 +0000</pubDate>
				<category><![CDATA[Bilans energetyczny budynku]]></category>
		<category><![CDATA[Normy budowlane]]></category>
		<category><![CDATA[Normy i standardy]]></category>
		<category><![CDATA[Normy techniczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZC]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Porady dla inwestorów]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Strefy klimatyczne]]></category>
		<category><![CDATA[dobór mocy pompy ciepła]]></category>
		<category><![CDATA[norma pn-en 12831]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[ozc budynku]]></category>
		<category><![CDATA[projektowa temperatura zewnętrzna]]></category>
		<category><![CDATA[przepływ masowy czynnika]]></category>
		<category><![CDATA[rozstaw rur podłogówki]]></category>
		<category><![CDATA[straty ciepła przez przenikanie]]></category>
		<category><![CDATA[strefa brzegowa podłogówki]]></category>
		<category><![CDATA[strefy klimatyczne w polsce]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=6932</guid>

					<description><![CDATA[<p>Planujesz budowę domu lub wymianę instalacji grzewczej i rozważasz zakup uniwersalnego projektu z internetu? Uważaj na pułapki techniczne, które mogą zrujnować Twój budżet eksploatacyjny. Prawidłowo skalkulowane strefy klimatyczne w Polsce a ogrzewanie podłogowe i OZC to absolutny fundament, od którego zależy nie tylko komfort cieplny w czasie siarczystych mrozów, ale także sprawność i żywotność Twojej pompy ciepła. W tym kompleksowym opracowaniu inżynierskim poddajemy szczegółowej analizie wszystkie normy budowlane (PN-EN 12831 oraz PN-82/B-02403), pokazujemy bezlitosne wyliczenia hydrauliczne, algorytmy przepływu masowego oraz udostępniamy interaktywne kalkulatory, które uchronią Cię przed koszmarnymi błędami wykonawczymi.</p>
<p>Artykuł <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/">Strefy klimatyczne w Polsce – wyszukiwarka miejscowości, temperatura projektowa i OZC.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-climate-guide {
    --rk-navy: #0b2536;
    --rk-navy-2: #12394d;
    --rk-navy-3: #1b465b;
    --rk-cyan: #29c4d7;
    --rk-cyan-dark: #078fb3;
    --rk-cyan-soft: #def7fa;
    --rk-orange: #ff6846;
    --rk-orange-dark: #e44f31;
    --rk-yellow: #f2b526;
    --rk-green: #2fcda1;
    --rk-green-dark: #168267;
    --rk-red: #d7504a;
    --rk-purple: #6963ce;
    --rk-ink: #10283a;
    --rk-copy: #3c5668;
    --rk-muted: #6b8191;
    --rk-line: #d3e2e8;
    --rk-bg: #f3f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow-wrap: anywhere;
    width: 100%;
  }

  #rk-climate-guide,
  #rk-climate-guide * {
    box-sizing: border-box;
    min-width: 0;
  }

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

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

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

  #rk-climate-guide button:focus-visible,
  #rk-climate-guide a:focus-visible,
  #rk-climate-guide summary:focus-visible,
  #rk-climate-guide input:focus-visible,
  #rk-climate-guide select:focus-visible {
    outline: 3px solid rgba(41, 196, 215, 0.48);
    outline-offset: 3px;
  }

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

  #rk-climate-guide .rk-climate-shell {
    background: var(--rk-white);
    border: 1px solid var(--rk-line);
    box-shadow: 0 22px 65px rgba(13, 41, 57, 0.12);
    display: flex;
    flex-direction: column;
    overflow: hidden;
  }

  /* Kolejność rozdziałów jest ustalona także po przetworzeniu bloku przez WordPress. */
  #rk-climate-guide .rk-climate-hero { order: 1; }
  #rk-climate-guide .rk-climate-shortcuts { order: 2; }
  #rk-climate-guide #rk-climate-answer { order: 3; }
  #rk-climate-guide #rk-climate-locator-section { order: 4; }
  #rk-climate-guide #rk-climate-interpretation { order: 5; }
  #rk-climate-guide #rk-climate-zones { order: 6; }
  #rk-climate-guide #rk-climate-ozc { order: 7; }
  #rk-climate-guide #rk-climate-floor { order: 8; }
  #rk-climate-guide #rk-climate-energy { order: 9; }
  #rk-climate-guide #rk-climate-cost-claim { order: 10; }
  #rk-climate-guide #rk-climate-boundaries { order: 11; }
  #rk-climate-guide #rk-climate-heat-pump { order: 12; }
  #rk-climate-guide #rk-climate-errors { order: 13; }
  #rk-climate-guide #rk-climate-data { order: 14; }
  #rk-climate-guide #rk-climate-final { order: 15; }
  #rk-climate-guide #rk-climate-sources { order: 16; }
  #rk-climate-guide #rk-climate-faq { order: 17; }
  #rk-climate-guide #rk-climate-author { order: 18; }

  #rk-climate-guide .rk-climate-hero {
    background:
      radial-gradient(circle at 89% 111%, rgba(41, 196, 215, 0.24) 0, rgba(41, 196, 215, 0.24) 17%, transparent 17.2%),
      linear-gradient(120deg, #0b2536 0%, #143e52 61%, #0d6576 100%);
    color: var(--rk-white);
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

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

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

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

  #rk-climate-guide .rk-climate-hero-title {
    font-size: clamp(2.4rem, 6vw, 5.25rem);
    margin: 0;
    max-width: 1220px;
  }

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

  #rk-climate-guide .rk-climate-hero-lead {
    color: #e3f0f4;
    font-size: clamp(1.08rem, 2vw, 1.43rem);
    line-height: 1.55;
    margin: 27px 0 0;
    max-width: 1100px;
  }

  #rk-climate-guide .rk-climate-hero-tags,
  #rk-climate-guide .rk-climate-meta,
  #rk-climate-guide .rk-climate-shortcuts {
    display: flex;
    flex-wrap: wrap;
  }

  #rk-climate-guide .rk-climate-hero-tags {
    gap: 10px;
    margin-top: 30px;
  }

  #rk-climate-guide .rk-climate-hero-tags span {
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 999px;
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 800;
    padding: 8px 14px;
  }

  #rk-climate-guide .rk-climate-meta {
    color: #c5d9df;
    font-size: 0.83rem;
    font-weight: 700;
    gap: 12px 24px;
    margin-top: 34px;
  }

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

  #rk-climate-guide .rk-climate-shortcuts {
    align-items: center;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    gap: 9px;
    padding: 22px 34px;
    position: static;
  }

  #rk-climate-guide .rk-climate-shortcuts-label {
    color: var(--rk-ink);
    flex: 1 0 100%;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-bottom: 2px;
    text-transform: uppercase;
  }

  #rk-climate-guide .rk-climate-shortcuts a {
    background: #f1f6f8;
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--rk-ink);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    padding: 8px 12px;
    text-decoration: none;
  }

  #rk-climate-guide .rk-climate-shortcuts a:hover,
  #rk-climate-guide .rk-climate-shortcuts a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: #91dce5;
    color: #075f78;
  }

  #rk-climate-guide .rk-climate-section {
    padding: 64px 58px;
  }

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

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

  #rk-climate-guide .rk-climate-section-dark {
    background: var(--rk-navy);
    color: #ffffff;
  }

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

  #rk-climate-guide .rk-climate-section-dark .rk-climate-eyebrow {
    color: #68e6ef;
  }

  #rk-climate-guide .rk-climate-section-title,
  #rk-climate-guide .rk-climate-author-title {
    color: var(--rk-ink);
    font-size: clamp(2rem, 4vw, 3.65rem);
    margin: 0;
    max-width: 1120px;
  }

  #rk-climate-guide .rk-climate-section-dark .rk-climate-section-title {
    color: #ffffff;
  }

  #rk-climate-guide .rk-climate-lead {
    color: var(--rk-copy);
    font-size: clamp(1.03rem, 1.7vw, 1.25rem);
    line-height: 1.7;
    margin: 22px 0 0;
    max-width: 1140px;
  }

  #rk-climate-guide .rk-climate-copy {
    color: var(--rk-copy);
    margin: 22px 0 0;
  }

  #rk-climate-guide .rk-climate-copy strong,
  #rk-climate-guide .rk-climate-lead strong {
    color: var(--rk-ink);
  }

  #rk-climate-guide .rk-climate-section-dark .rk-climate-lead,
  #rk-climate-guide .rk-climate-section-dark .rk-climate-copy {
    color: #c8dbe2;
  }

  #rk-climate-guide .rk-climate-section-dark .rk-climate-lead strong,
  #rk-climate-guide .rk-climate-section-dark .rk-climate-copy strong {
    color: #ffffff;
  }

  #rk-climate-guide .rk-climate-answer {
    background: linear-gradient(135deg, #e6fafd 0%, #f8fcfd 100%);
    border: 1px solid #9cdfe8;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 18px;
    margin-top: 28px;
    padding: 27px 29px;
  }

  #rk-climate-guide .rk-climate-answer strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.24rem;
    line-height: 1.4;
  }

  #rk-climate-guide .rk-climate-answer p {
    color: var(--rk-copy);
    margin: 10px 0 0;
  }

  #rk-climate-guide .rk-climate-grid-2,
  #rk-climate-guide .rk-climate-grid-3,
  #rk-climate-guide .rk-climate-grid-4,
  #rk-climate-guide .rk-climate-source-grid,
  #rk-climate-guide .rk-climate-author-facts {
    display: grid;
    gap: 18px;
    margin-top: 30px;
  }

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

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

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

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

  #rk-climate-guide .rk-climate-section-soft .rk-climate-card {
    background: rgba(255, 255, 255, 0.88);
  }

  #rk-climate-guide .rk-climate-card-number,
  #rk-climate-guide .rk-climate-icon {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 10px;
    color: #076c85;
    display: inline-flex;
    font-size: 0.82rem;
    font-weight: 900;
    height: 36px;
    justify-content: center;
    margin-bottom: 14px;
    min-width: 36px;
    padding: 0 10px;
  }

  #rk-climate-guide .rk-climate-card h3,
  #rk-climate-guide .rk-climate-card h4 {
    color: var(--rk-ink);
    font-size: 1.12rem;
    line-height: 1.3;
    margin: 0 0 9px;
  }

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

  #rk-climate-guide .rk-climate-bullets {
    color: var(--rk-copy);
    margin: 20px 0 0;
    padding-left: 22px;
  }

  #rk-climate-guide .rk-climate-bullets li + li {
    margin-top: 9px;
  }

  #rk-climate-guide .rk-climate-note {
    background: #fff6e2;
    border-left: 6px solid var(--rk-yellow);
    border-radius: 14px;
    color: #5b4a1d;
    margin-top: 26px;
    padding: 18px 21px;
  }

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

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

  #rk-climate-guide .rk-climate-note-bad {
    background: #fff0ec;
    border-left-color: var(--rk-orange);
    color: #743425;
  }

  #rk-climate-guide .rk-climate-formula {
    background: #edf8fa;
    border: 1px solid #b4e1e7;
    border-radius: 13px;
    color: #086b82;
    font-family: Consolas, Monaco, monospace;
    font-size: 1rem;
    font-weight: 700;
    margin-top: 20px;
    padding: 15px 18px;
  }

  #rk-climate-guide .rk-climate-table-wrap {
    margin-top: 30px;
    overflow-x: auto;
  }

  #rk-climate-guide table {
    border-collapse: separate;
    border-spacing: 0;
    min-width: 780px;
    width: 100%;
  }

  #rk-climate-guide th {
    background: var(--rk-navy);
    border-bottom: 1px solid #31576a;
    color: #ffffff;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    padding: 15px 16px;
    text-align: left;
    text-transform: uppercase;
  }

  #rk-climate-guide th:first-child {
    border-radius: 14px 0 0;
  }

  #rk-climate-guide th:last-child {
    border-radius: 0 14px 0 0;
  }

  #rk-climate-guide td {
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    color: var(--rk-copy);
    padding: 16px;
    vertical-align: top;
  }

  #rk-climate-guide tbody tr td:first-child {
    border-left: 1px solid var(--rk-line);
  }

  #rk-climate-guide tbody tr td:last-child {
    border-right: 1px solid var(--rk-line);
  }

  #rk-climate-guide tbody tr:last-child td:first-child {
    border-radius: 0 0 0 14px;
  }

  #rk-climate-guide tbody tr:last-child td:last-child {
    border-radius: 0 0 14px;
  }

  #rk-climate-guide td strong {
    color: var(--rk-ink);
  }

  /* Lokalizator — narzędzie tylko dla tego artykułu */
  #rk-climate-guide .rk-climate-locator {
    background: #102f42;
    border: 1px solid #315a70;
    border-radius: 24px;
    margin-top: 32px;
    overflow: hidden;
  }

  #rk-climate-guide .rk-climate-locator-head {
    border-bottom: 1px solid #315a70;
    padding: 29px;
  }

  #rk-climate-guide .rk-climate-locator-head h3 {
    color: #ffffff;
    font-size: clamp(1.55rem, 3vw, 2.35rem);
    line-height: 1.2;
    margin: 0;
  }

  #rk-climate-guide .rk-climate-locator-head p {
    color: #bad3dc;
    margin: 10px 0 0;
    max-width: 1000px;
  }

  #rk-climate-guide .rk-climate-tool-grid {
    display: grid;
    gap: 24px;
    grid-template-columns: minmax(0, 0.88fr) minmax(0, 1.12fr);
    padding: 28px;
  }

  #rk-climate-guide .rk-climate-controls,
  #rk-climate-guide .rk-climate-output {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 18px;
    padding: 23px;
  }

  #rk-climate-guide .rk-climate-controls h4,
  #rk-climate-guide .rk-climate-output h4 {
    color: #ffffff;
    font-size: 1.1rem;
    line-height: 1.35;
    margin: 0 0 17px;
  }

  #rk-climate-guide .rk-climate-field {
    display: block;
    margin-top: 16px;
  }

  #rk-climate-guide .rk-climate-field:first-of-type {
    margin-top: 0;
  }

  #rk-climate-guide .rk-climate-field > span,
  #rk-climate-guide .rk-climate-control-label {
    color: #eaf6f8;
    display: block;
    font-size: 0.78rem;
    font-weight: 800;
    line-height: 1.35;
    margin-bottom: 7px;
  }

  #rk-climate-guide .rk-climate-input-wrap {
    position: relative;
  }

  #rk-climate-guide .rk-climate-field input,
  #rk-climate-guide .rk-climate-field select {
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    color: var(--rk-ink);
    min-height: 49px;
    padding: 10px 12px;
    width: 100%;
  }

  #rk-climate-guide .rk-climate-suggestions {
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    box-shadow: 0 15px 30px rgba(7, 27, 39, 0.23);
    display: none;
    left: 0;
    margin: 6px 0 0;
    max-height: 318px;
    overflow-y: auto;
    padding: 5px;
    position: absolute;
    right: 0;
    top: 100%;
    z-index: 20;
  }

  #rk-climate-guide .rk-climate-suggestions.is-open {
    display: block;
  }

  #rk-climate-guide .rk-climate-suggestion {
    background: transparent;
    border: 0;
    border-radius: 8px;
    color: var(--rk-ink);
    cursor: pointer;
    display: block;
    padding: 10px 11px;
    text-align: left;
    width: 100%;
  }

  #rk-climate-guide .rk-climate-suggestion:hover,
  #rk-climate-guide .rk-climate-suggestion.is-active {
    background: var(--rk-cyan-soft);
    color: #075f78;
  }

  #rk-climate-guide .rk-climate-suggestion strong {
    display: block;
    font-size: 0.91rem;
  }

  #rk-climate-guide .rk-climate-suggestion small {
    color: var(--rk-muted);
    display: block;
    font-size: 0.72rem;
    margin-top: 2px;
  }

  #rk-climate-guide .rk-climate-no-result {
    color: var(--rk-copy);
    font-size: 0.84rem;
    padding: 12px;
  }

  #rk-climate-guide .rk-climate-two-fields {
    display: grid;
    gap: 13px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  #rk-climate-guide .rk-climate-tool-help {
    color: #9fbdc8;
    font-size: 0.75rem;
    line-height: 1.5;
    margin: 9px 0 0;
  }

  #rk-climate-guide .rk-climate-tool-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 19px;
  }

  #rk-climate-guide .rk-climate-button,
  #rk-climate-guide .rk-climate-button-secondary {
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    min-height: 48px;
    padding: 11px 17px;
  }

  #rk-climate-guide .rk-climate-button {
    background: var(--rk-orange);
    border: 1px solid var(--rk-orange);
    color: #ffffff;
  }

  #rk-climate-guide .rk-climate-button:hover {
    background: var(--rk-orange-dark);
  }

  #rk-climate-guide .rk-climate-button-secondary {
    background: transparent;
    border: 1px solid #5d7c8d;
    color: #ffffff;
  }

  #rk-climate-guide .rk-climate-manual {
    border-top: 1px solid #315a70;
    margin-top: 20px;
    padding-top: 19px;
  }

  #rk-climate-guide .rk-climate-manual summary {
    color: #8debf2;
    cursor: pointer;
    font-size: 0.83rem;
    font-weight: 900;
  }

  #rk-climate-guide .rk-climate-manual-inner {
    margin-top: 13px;
  }

  #rk-climate-guide .rk-climate-placeholder {
    align-items: center;
    color: #b9d0d9;
    display: flex;
    flex-direction: column;
    justify-content: center;
    min-height: 260px;
    text-align: center;
  }

  #rk-climate-guide .rk-climate-placeholder-mark {
    align-items: center;
    background: #21536a;
    border: 1px solid #467186;
    border-radius: 50%;
    color: #74e8ef;
    display: inline-flex;
    font-size: 1.65rem;
    font-weight: 900;
    height: 70px;
    justify-content: center;
    margin-bottom: 16px;
    width: 70px;
  }

  #rk-climate-guide .rk-climate-result {
    display: none;
  }

  #rk-climate-guide .rk-climate-result.is-visible {
    display: block;
  }

  #rk-climate-guide .rk-climate-result-place {
    color: #ffffff;
    font-size: clamp(1.35rem, 2.7vw, 2rem);
    font-weight: 900;
    line-height: 1.2;
    margin: 0;
  }

  #rk-climate-guide .rk-climate-result-region {
    color: #aecaD5;
    font-size: 0.83rem;
    margin: 5px 0 0;
  }

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

  #rk-climate-guide .rk-climate-result-tile {
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.14);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-climate-guide .rk-climate-result-tile span {
    color: #9fc0cb;
    display: block;
    font-size: 0.69rem;
    font-weight: 900;
    letter-spacing: 0.06em;
    text-transform: uppercase;
  }

  #rk-climate-guide .rk-climate-result-tile strong {
    color: #ffffff;
    display: block;
    font-size: 1.32rem;
    line-height: 1.25;
    margin-top: 5px;
  }

  #rk-climate-guide .rk-climate-result-tile.is-highlight {
    background: rgba(41, 196, 215, 0.14);
    border-color: rgba(105, 231, 242, 0.45);
  }

  #rk-climate-guide .rk-climate-result-tile.is-highlight strong {
    color: #73e8f1;
  }

  #rk-climate-guide .rk-climate-result-note {
    background: #fff8e8;
    border-left: 5px solid var(--rk-yellow);
    border-radius: 12px;
    color: #654f18;
    margin-top: 16px;
    padding: 15px 17px;
  }

  #rk-climate-guide .rk-climate-result-note p {
    margin: 0;
  }

  #rk-climate-guide .rk-climate-result-scope {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 16px;
  }

  #rk-climate-guide .rk-climate-scope-card {
    background: #ffffff;
    border-radius: 12px;
    padding: 15px;
  }

  #rk-climate-guide .rk-climate-scope-card strong {
    display: block;
    font-size: 0.78rem;
    letter-spacing: 0.05em;
    margin-bottom: 6px;
    text-transform: uppercase;
  }

  #rk-climate-guide .rk-climate-scope-card p {
    color: var(--rk-copy);
    font-size: 0.83rem;
    line-height: 1.55;
    margin: 0;
  }

  #rk-climate-guide .rk-climate-scope-card.is-use strong {
    color: var(--rk-green-dark);
  }

  #rk-climate-guide .rk-climate-scope-card.is-limit strong {
    color: #a83d2d;
  }

  #rk-climate-guide .rk-climate-scenario {
    background: #0d293a;
    border-top: 1px solid #315a70;
    padding: 28px;
  }

  #rk-climate-guide .rk-climate-scenario-head h3 {
    color: #ffffff;
    font-size: clamp(1.35rem, 2.7vw, 2rem);
    line-height: 1.2;
    margin: 0;
  }

  #rk-climate-guide .rk-climate-scenario-head p {
    color: #b8d0d9;
    margin: 8px 0 0;
  }

  #rk-climate-guide .rk-climate-scenario-controls {
    display: grid;
    gap: 14px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 21px;
  }

  #rk-climate-guide .rk-climate-scenario-controls label span {
    color: #eaf6f8;
    display: block;
    font-size: 0.75rem;
    font-weight: 800;
    margin-bottom: 7px;
  }

  #rk-climate-guide .rk-climate-scenario-controls input,
  #rk-climate-guide .rk-climate-scenario-controls select {
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    color: var(--rk-ink);
    min-height: 48px;
    padding: 10px 12px;
    width: 100%;
  }

  #rk-climate-guide .rk-climate-scenario-result {
    background: #ffffff;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 15px;
    margin-top: 20px;
    padding: 20px;
  }

  #rk-climate-guide .rk-climate-scenario-result strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.12rem;
  }

  #rk-climate-guide .rk-climate-scenario-result p {
    color: var(--rk-copy);
    margin: 7px 0 0;
  }

  #rk-climate-guide .rk-climate-chart-wrap {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 18px;
    margin-top: 24px;
    padding: 23px;
  }

  #rk-climate-guide .rk-climate-chart-title {
    color: #ffffff;
    font-size: 1rem;
    font-weight: 900;
    margin: 0;
  }

  #rk-climate-guide .rk-climate-chart-subtitle {
    color: #aac6d0;
    font-size: 0.8rem;
    margin: 4px 0 0;
  }

  #rk-climate-guide .rk-climate-chart {
    align-items: end;
    display: grid;
    gap: 11px;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    margin-top: 24px;
    min-height: 280px;
  }

  #rk-climate-guide .rk-climate-bar-item {
    align-items: stretch;
    display: flex;
    flex-direction: column;
    height: 100%;
    justify-content: flex-end;
    text-align: center;
  }

  #rk-climate-guide .rk-climate-bar-value {
    color: #dff8fa;
    font-size: 0.78rem;
    font-weight: 900;
    margin-bottom: 7px;
  }

  #rk-climate-guide .rk-climate-bar-track {
    align-items: flex-end;
    background: rgba(255, 255, 255, 0.055);
    border: 1px solid rgba(255, 255, 255, 0.11);
    border-radius: 11px 11px 5px 5px;
    display: flex;
    height: 205px;
    overflow: hidden;
  }

  #rk-climate-guide .rk-climate-bar-fill {
    background: linear-gradient(180deg, #69e7f2 0%, #1199b5 100%);
    border-radius: 9px 9px 3px 3px;
    height: var(--rk-desktop-height, 50%);
    min-height: 24px;
    width: 100%;
  }

  #rk-climate-guide .rk-climate-bar-item.is-selected .rk-climate-bar-fill {
    background: linear-gradient(180deg, #ffad50 0%, #ff6846 100%);
  }

  #rk-climate-guide .rk-climate-bar-item.is-reference .rk-climate-bar-track {
    border-color: #77e8ef;
  }

  #rk-climate-guide .rk-climate-bar-label {
    color: #ffffff;
    font-size: 0.8rem;
    font-weight: 900;
    line-height: 1.35;
    margin-top: 9px;
  }

  #rk-climate-guide .rk-climate-bar-label small {
    color: #aecaD5;
    display: block;
    font-size: 0.69rem;
    font-weight: 700;
    margin-top: 2px;
  }

  #rk-climate-guide .rk-climate-tool-disclaimer {
    color: #90adb9;
    font-size: 0.75rem;
    line-height: 1.55;
    margin: 17px 0 0;
  }

  #rk-climate-guide .rk-climate-cta {
    background:
      radial-gradient(circle at 93% 120%, rgba(41, 196, 215, 0.22) 0, rgba(41, 196, 215, 0.22) 19%, transparent 19.2%),
      linear-gradient(125deg, #0b2536 0%, #153e51 62%, #0d6272 100%);
    border-radius: 21px;
    color: #ffffff;
    margin-top: 34px;
    overflow: hidden;
    padding: 36px;
  }

  #rk-climate-guide .rk-climate-cta-title {
    color: #ffffff;
    font-size: clamp(1.7rem, 3.3vw, 2.8rem);
    margin: 0;
    max-width: 1000px;
  }

  #rk-climate-guide .rk-climate-cta p {
    color: #cee0e6;
    margin: 14px 0 0;
    max-width: 1000px;
  }

  #rk-climate-guide .rk-climate-cta-button {
    background: var(--rk-orange);
    border-radius: 12px;
    box-shadow: 0 12px 25px rgba(255, 104, 70, 0.24);
    color: #ffffff;
    display: inline-block;
    font-weight: 900;
    margin-top: 22px;
    padding: 14px 20px;
    text-decoration: none;
  }

  #rk-climate-guide .rk-climate-cta-button:hover,
  #rk-climate-guide .rk-climate-cta-button:focus-visible {
    background: #ffffff;
    color: var(--rk-orange-dark);
  }

  #rk-climate-guide .rk-climate-link-disclosure {
    color: #a9c4ce;
    display: block;
    font-size: 0.75rem;
    margin-top: 12px;
  }

  #rk-climate-guide .rk-climate-final {
    background: linear-gradient(180deg, #f4fafb 0%, #ffffff 100%);
  }

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

  #rk-climate-guide .rk-climate-source-card {
    background: #f2f7f9;
    border: 1px solid #cfe0e7;
    border-radius: 15px;
    padding: 20px;
  }

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

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

  #rk-climate-guide .rk-climate-responsibility {
    background: #fff0eb;
    border-left: 6px solid var(--rk-orange);
    border-radius: 14px;
    color: #613427;
    margin-top: 26px;
    padding: 19px 22px;
  }

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

  #rk-climate-guide .rk-climate-faq {
    display: grid;
    gap: 12px;
    margin-top: 30px;
  }

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

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

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

  #rk-climate-guide .rk-climate-faq summary::after {
    color: var(--rk-cyan-dark);
    content: "+";
    font-size: 1.55rem;
    font-weight: 700;
    position: absolute;
    right: 20px;
    top: 12px;
  }

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

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

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

  #rk-climate-guide .rk-climate-author {
    background: #eef6f8;
    border-top: 1px solid var(--rk-line);
    padding: 64px 58px;
  }

  #rk-climate-guide .rk-climate-author-layout {
    background: #ffffff;
    border: 1px solid #cbdde5;
    border-radius: 21px;
    display: grid;
    grid-template-columns: 290px minmax(0, 1fr);
    overflow: hidden;
  }

  #rk-climate-guide .rk-climate-author-side {
    align-items: center;
    background: var(--rk-navy);
    color: #ffffff;
    display: flex;
    flex-direction: column;
    padding: 35px 25px;
    text-align: center;
  }

  #rk-climate-guide .rk-climate-author-photo {
    background: #ffffff;
    border: 6px solid rgba(255, 255, 255, 0.2);
    border-radius: 50%;
    overflow: hidden;
    width: 158px;
  }

  #rk-climate-guide .rk-climate-author-name {
    font-size: 1.25rem;
    font-weight: 900;
    margin-top: 20px;
  }

  #rk-climate-guide .rk-climate-author-role {
    color: #bcd2db;
    font-size: 0.82rem;
    margin: 8px 0 0;
  }

  #rk-climate-guide .rk-climate-author-social {
    display: flex;
    gap: 10px;
    margin-top: 21px;
  }

  #rk-climate-guide .rk-climate-author-social a {
    align-items: center;
    border: 1px solid #497185;
    border-radius: 50%;
    color: #d8e9ee;
    display: inline-flex;
    height: 42px;
    justify-content: center;
    text-decoration: none;
    width: 42px;
  }

  #rk-climate-guide .rk-climate-author-social a:hover {
    background: var(--rk-cyan);
    color: var(--rk-navy);
  }

  #rk-climate-guide .rk-climate-author-main {
    padding: 37px;
  }

  #rk-climate-guide .rk-climate-author-title {
    font-size: clamp(1.85rem, 3.5vw, 3rem);
  }

  #rk-climate-guide .rk-climate-author-quote {
    background: #f7fbfc;
    border: 1px solid #cfe0e7;
    border-left: 6px solid var(--rk-cyan);
    border-radius: 14px;
    color: var(--rk-ink);
    font-size: 1.04rem;
    font-style: italic;
    font-weight: 700;
    line-height: 1.7;
    margin-top: 24px;
    padding: 20px 22px;
  }

  #rk-climate-guide .rk-climate-author-main > p {
    color: var(--rk-copy);
    margin: 18px 0 0;
  }

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

  #rk-climate-guide .rk-climate-author-fact {
    background: #eef7f9;
    border: 1px solid #d2e4e9;
    border-radius: 13px;
    color: var(--rk-copy);
    font-size: 0.84rem;
    padding: 15px;
  }

  #rk-climate-guide .rk-climate-author-fact strong {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.73rem;
    letter-spacing: 0.06em;
    margin-bottom: 5px;
    text-transform: uppercase;
  }

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

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

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

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

  @media (max-width: 860px) {
    #rk-climate-guide .rk-climate-hero,
    #rk-climate-guide .rk-climate-section,
    #rk-climate-guide .rk-climate-author {
      padding-left: 28px;
      padding-right: 28px;
    }

    #rk-climate-guide .rk-climate-hero::before {
      left: 28px;
    }

    #rk-climate-guide .rk-climate-shortcuts {
      padding-left: 22px;
      padding-right: 22px;
    }

    #rk-climate-guide .rk-climate-tool-grid {
      grid-template-columns: minmax(0, 1fr);
    }

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

    #rk-climate-guide .rk-climate-author-side {
      padding-bottom: 28px;
    }
  }

  @media (max-width: 660px) {
    #rk-climate-guide .rk-climate-hero {
      padding-bottom: 42px;
      padding-top: 52px;
    }

    #rk-climate-guide .rk-climate-section,
    #rk-climate-guide .rk-climate-author {
      padding-bottom: 46px;
      padding-top: 46px;
    }

    #rk-climate-guide .rk-climate-grid-2,
    #rk-climate-guide .rk-climate-grid-3,
    #rk-climate-guide .rk-climate-grid-4,
    #rk-climate-guide .rk-climate-source-grid,
    #rk-climate-guide .rk-climate-author-facts,
    #rk-climate-guide .rk-climate-two-fields,
    #rk-climate-guide .rk-climate-result-grid,
    #rk-climate-guide .rk-climate-result-scope,
    #rk-climate-guide .rk-climate-scenario-controls {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-climate-guide .rk-climate-locator,
    #rk-climate-guide .rk-climate-cta {
      border-radius: 17px;
    }

    #rk-climate-guide .rk-climate-locator-head,
    #rk-climate-guide .rk-climate-tool-grid,
    #rk-climate-guide .rk-climate-scenario,
    #rk-climate-guide .rk-climate-cta {
      padding: 20px;
    }

    #rk-climate-guide .rk-climate-controls,
    #rk-climate-guide .rk-climate-output,
    #rk-climate-guide .rk-climate-chart-wrap {
      padding: 18px;
    }

    #rk-climate-guide .rk-climate-tool-actions {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-climate-guide .rk-climate-button,
    #rk-climate-guide .rk-climate-button-secondary,
    #rk-climate-guide .rk-climate-cta-button {
      text-align: center;
      width: 100%;
    }

    #rk-climate-guide .rk-climate-chart {
      display: block;
      min-height: 0;
    }

    #rk-climate-guide .rk-climate-bar-item {
      display: grid;
      gap: 8px;
      grid-template-columns: 66px minmax(0, 1fr) 88px;
      margin-top: 13px;
      text-align: left;
    }

    #rk-climate-guide .rk-climate-bar-value {
      align-self: center;
      margin: 0;
      order: 3;
      text-align: right;
    }

    #rk-climate-guide .rk-climate-bar-track {
      align-items: stretch;
      align-self: center;
      height: 25px;
      order: 2;
    }

    #rk-climate-guide .rk-climate-bar-fill {
      border-radius: 4px;
      height: 100%;
      min-height: 0;
      width: var(--rk-mobile-width, 50%);
    }

    #rk-climate-guide .rk-climate-bar-label {
      align-self: center;
      margin: 0;
      order: 1;
    }

    #rk-climate-guide .rk-climate-bar-label small {
      display: none;
    }

    #rk-climate-guide .rk-climate-table-wrap {
      overflow: visible;
    }

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

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

    #rk-climate-guide tbody {
      display: grid;
      gap: 14px;
    }

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

    #rk-climate-guide td,
    #rk-climate-guide tbody tr td:first-child,
    #rk-climate-guide tbody tr td:last-child {
      border: 0;
      border-bottom: 1px solid #e1ebef;
      border-radius: 0;
      padding: 13px 15px;
    }

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

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

    #rk-climate-guide .rk-climate-author-main {
      padding: 25px 20px;
    }
  }

  @media (max-width: 430px) {
    #rk-climate-guide .rk-climate-hero,
    #rk-climate-guide .rk-climate-section,
    #rk-climate-guide .rk-climate-author {
      padding-left: 18px;
      padding-right: 18px;
    }

    #rk-climate-guide .rk-climate-hero::before {
      left: 18px;
    }

    #rk-climate-guide .rk-climate-shortcuts {
      padding-left: 14px;
      padding-right: 14px;
    }

    #rk-climate-guide .rk-climate-shortcuts a {
      flex: 1 1 calc(50% - 9px);
      text-align: center;
    }

    #rk-climate-guide .rk-climate-hero-title {
      font-size: 2.2rem;
    }

    #rk-climate-guide .rk-climate-section-title {
      font-size: 1.9rem;
    }

    #rk-climate-guide .rk-climate-bar-item {
      grid-template-columns: 54px minmax(0, 1fr) 74px;
    }
  }

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

<article id="rk-climate-guide" aria-labelledby="rk-climate-visual-title">
  <div class="rk-climate-shell">
    <header class="rk-climate-hero">
      <span class="rk-climate-kicker">Lokalizacja · temperatura projektowa · OZC</span>
      <div class="rk-climate-hero-title" id="rk-climate-visual-title">Strefy klimatyczne w Polsce: <span>sprawdź miejscowość, zanim policzysz ogrzewanie</span></div>
      <p class="rk-climate-hero-lead">Strefa określa projektową temperaturę zewnętrzną, ale nie podaje gotowej mocy domu, rozstawu rur ani kosztu ogrzewania. Wyszukaj miejscowość, porównaj pięć stref i zobacz, jak lokalizacja staje się jedną z danych wejściowych do OZC.</p>
      <div class="rk-climate-hero-tags" aria-label="Zakres poradnika">
        <span>291 miejscowości</span>
        <span>strefy I–V</span>
        <span>−16°C do −24°C</span>
        <span>projektowe obciążenie cieplne</span>
        <span>podłogówka i pompa ciepła</span>
      </div>
      <div class="rk-climate-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 22 minuty</strong></span>
        <span>Aktualizacja techniczna: <strong>15 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-climate-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-climate-shortcuts-label">Na skróty</span>
      <a href="#rk-climate-answer">Szybka odpowiedź</a>
      <a href="#rk-climate-locator-section">Wyszukiwarka</a>
      <a href="#rk-climate-interpretation">Interpretacja wyniku</a>
      <a href="#rk-climate-zones">Pięć stref</a>
      <a href="#rk-climate-ozc">Strefa a OZC</a>
      <a href="#rk-climate-floor">Strefa a podłogówka</a>
      <a href="#rk-climate-energy">Moc, energia i koszt</a>
      <a href="#rk-climate-cost-claim">Czy naprawdę 6000 zł?</a>
      <a href="#rk-climate-boundaries">Granice i góry</a>
      <a href="#rk-climate-heat-pump">Pompa ciepła</a>
      <a href="#rk-climate-errors">Najczęstsze błędy</a>
      <a href="#rk-climate-data">Dane dla projektanta</a>
      <a href="#rk-climate-final">Podsumowanie</a>
      <a href="#rk-climate-sources">Źródła</a>
      <a href="#rk-climate-faq">FAQ</a>
      <a href="#rk-climate-author">Autor</a>
    </nav>

    <section class="rk-climate-section" id="rk-climate-answer">
      <span class="rk-climate-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-climate-section-title">Co naprawdę mówi strefa klimatyczna?</h2>
      <p class="rk-climate-lead"><strong>Strefa klimatyczna wskazuje projektową temperaturę zewnętrzną przyjmowaną do obliczeń obciążenia cieplnego.</strong> Jest ważna, ponieważ wpływa na różnicę temperatur między wnętrzem a otoczeniem, ale pozostaje tylko jednym z parametrów całego modelu budynku.</p>
      <div class="rk-climate-answer">
        <strong>Polski podział stosowany w obliczeniach ogrzewania obejmuje pięć stref z temperaturami od −16°C do −24°C.</strong>
        <p>Metoda obliczeniowa musi następnie uwzględnić przegrody, mostki cieplne, wentylację, straty do gruntu, temperatury pomieszczeń i sposób użytkowania. Dopiero z obciążenia każdego pomieszczenia projektuje się ogrzewanie podłogowe.</p>
      </div>
      <div class="rk-climate-grid-3">
        <article class="rk-climate-card">
          <span class="rk-climate-icon">1</span>
          <h3>Strefa daje temperaturę</h3>
          <p>Dla stref I–V przyjmuje się odpowiednio −16, −18, −20, −22 i −24°C jako warunki projektowe ogrzewania.</p>
        </article>
        <article class="rk-climate-card">
          <span class="rk-climate-icon">2</span>
          <h3>OZC daje moc</h3>
          <p>Projektowe obciążenie cieplne powstaje po połączeniu klimatu z rzeczywistą konstrukcją i wentylacją budynku.</p>
        </article>
        <article class="rk-climate-card">
          <span class="rk-climate-icon">3</span>
          <h3>Projekt daje instalację</h3>
          <p>Rozstawy, pętle, przepływy i temperaturę zasilania ustala się dla pomieszczeń, a nie dla samego numeru strefy.</p>
        </article>
      </div>
      <p class="rk-climate-copy">Jeżeli chcesz poznać pełny ciąg obliczeń, zacznij od poradników o <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowym obciążeniu cieplnym OZC</a> oraz o tym, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty ciepła w budynku</a>.</p>
    </section>

    <section class="rk-climate-section rk-climate-section-dark" id="rk-climate-locator-section">
      <span class="rk-climate-eyebrow">Narzędzie przygotowane dla tego poradnika</span>
      <h2 class="rk-climate-section-title">Wyszukiwarka strefy klimatycznej dla miejscowości</h2>
      <p class="rk-climate-lead">Baza obejmuje 291 miejscowości. Wpisz nazwę z polskimi znakami lub bez nich. Wynik pokaże strefę, projektową temperaturę zewnętrzną i różnicę temperatur. Dodatkowy moduł porówna ten sam budynek między strefami, ale nie będzie udawał pełnego OZC.</p>

      <div class="rk-climate-locator" id="rk-climate-locator">
        <div class="rk-climate-locator-head">
          <h3>Sprawdź warunki obliczeniowe lokalizacji</h3>
          <p>Wybierz miejscowość z listy. Dla terenów granicznych i górskich wynik otrzyma dodatkowe ostrzeżenie o konieczności sprawdzenia dokładnego położenia.</p>
        </div>

        <div class="rk-climate-tool-grid">
          <div class="rk-climate-controls">
            <h4>Dane lokalizacji i wnętrza</h4>
            <div class="rk-climate-field">
              <label class="rk-climate-control-label" for="rk-climate-city-input">Miejscowość</label>
              <div class="rk-climate-input-wrap">
                <input id="rk-climate-city-input" type="text" inputmode="search" autocomplete="off" role="combobox" aria-autocomplete="list" aria-expanded="false" aria-controls="rk-climate-suggestions" placeholder="np. Łódź, lodz, Suwałki">
                <div class="rk-climate-suggestions" id="rk-climate-suggestions" role="listbox" aria-label="Pasujące miejscowości"></div>
              </div>
            </div>
            <p class="rk-climate-tool-help">Wybierz pozycję z podpowiedzi. Samo wpisanie tekstu nie przypisuje strefy.</p>

            <div class="rk-climate-two-fields">
              <label class="rk-climate-field" for="rk-climate-indoor-temp">
                <span>Projektowa temperatura wnętrza</span>
                <select id="rk-climate-indoor-temp">
                  <option value="18">18°C</option>
                  <option value="19">19°C</option>
                  <option value="20" selected="">20°C</option>
                  <option value="21">21°C</option>
                  <option value="22">22°C</option>
                  <option value="23">23°C</option>
                  <option value="24">24°C</option>
                </select>
              </label>
              <label class="rk-climate-field" for="rk-climate-reference-zone">
                <span>Strefa odniesienia</span>
                <select id="rk-climate-reference-zone">
                  <option value="1">I / −16°C</option>
                  <option value="2">II / −18°C</option>
                  <option value="3" selected="">III / −20°C</option>
                  <option value="4">IV / −22°C</option>
                  <option value="5">V / −24°C</option>
                </select>
              </label>
            </div>

            <div class="rk-climate-tool-actions">
              <button class="rk-climate-button" id="rk-climate-show-result" type="button">Pokaż wynik</button>
              <button class="rk-climate-button-secondary" id="rk-climate-reset" type="button">Wyczyść</button>
            </div>

            <details class="rk-climate-manual">
              <summary>Nie ma miejscowości? Wybierz strefę ręcznie</summary>
              <div class="rk-climate-manual-inner">
                <label class="rk-climate-field" for="rk-climate-manual-zone">
                  <span>Strefa potwierdzona w dokumentacji projektu</span>
                  <select id="rk-climate-manual-zone">
                    <option value="">Wybierz</option>
                    <option value="1">Strefa I / −16°C</option>
                    <option value="2">Strefa II / −18°C</option>
                    <option value="3">Strefa III / −20°C</option>
                    <option value="4">Strefa IV / −22°C</option>
                    <option value="5">Strefa V / −24°C</option>
                  </select>
                </label>
                <button class="rk-climate-button-secondary" id="rk-climate-use-manual" type="button">Użyj wybranej strefy</button>
              </div>
            </details>
          </div>

          <div class="rk-climate-output">
            <div class="rk-climate-placeholder" id="rk-climate-placeholder">
              <span class="rk-climate-placeholder-mark" aria-hidden="true">I–V</span>
              <h4>Wybierz miejscowość</h4>
              <p>Wynik nie poda gotowej mocy domu. Pokaże właściwy punkt startowy do obliczeń.</p>
            </div>

            <div class="rk-climate-result" id="rk-climate-result" aria-live="polite">
              <p class="rk-climate-result-place" id="rk-climate-result-place">—</p>
              <p class="rk-climate-result-region" id="rk-climate-result-region">—</p>
              <div class="rk-climate-result-grid">
                <div class="rk-climate-result-tile is-highlight"><span>Strefa</span><strong id="rk-climate-result-zone">—</strong></div>
                <div class="rk-climate-result-tile"><span>Temperatura zewnętrzna</span><strong id="rk-climate-result-outdoor">—</strong></div>
                <div class="rk-climate-result-tile"><span>Temperatura wnętrza</span><strong id="rk-climate-result-indoor">—</strong></div>
                <div class="rk-climate-result-tile"><span>Różnica ΔT</span><strong id="rk-climate-result-delta">—</strong></div>
                <div class="rk-climate-result-tile"><span>Względem strefy odniesienia</span><strong id="rk-climate-result-relative">—</strong></div>
                <div class="rk-climate-result-tile"><span>Status lokalizacji</span><strong id="rk-climate-result-status">—</strong></div>
              </div>
              <div class="rk-climate-result-note" id="rk-climate-location-note"><p>—</p></div>
              <div class="rk-climate-result-scope">
                <div class="rk-climate-scope-card is-use"><strong>Do czego użyć wyniku</strong><p>Jako projektowej temperatury zewnętrznej i punktu wejścia do obliczeń obciążenia cieplnego.</p></div>
                <div class="rk-climate-scope-card is-limit"><strong>Czego wynik nie wyznacza</strong><p>Rozstawu rur, temperatury zasilania, długości pętli, mocy źródła ani rocznego rachunku.</p></div>
              </div>
            </div>
          </div>
        </div>

        <div class="rk-climate-scenario">
          <div class="rk-climate-scenario-head">
            <h3>Porównaj ten sam budynek między strefami</h3>
            <p>Jeżeli masz prawdziwy wynik OZC dla strefy odniesienia, wpisz go opcjonalnie. Narzędzie pokaże prosty scenariusz oparty na stosunku ΔT — nie nowe obliczenie OZC.</p>
          </div>
          <div class="rk-climate-scenario-controls">
            <label for="rk-climate-reference-load"><span>Znane obciążenie w strefie odniesienia [kW]</span><input id="rk-climate-reference-load" type="number" min="0.1" max="100" step="0.1" inputmode="decimal" placeholder="np. 6,0"></label>
            <label for="rk-climate-scenario-reference"><span>Strefa znanego wyniku</span><select id="rk-climate-scenario-reference"><option value="1">I / −16°C</option><option value="2">II / −18°C</option><option value="3" selected="">III / −20°C</option><option value="4">IV / −22°C</option><option value="5">V / −24°C</option></select></label>
            <label for="rk-climate-scenario-target"><span>Strefa porównywana</span><select id="rk-climate-scenario-target"><option value="1">I / −16°C</option><option value="2">II / −18°C</option><option value="3">III / −20°C</option><option value="4">IV / −22°C</option><option value="5" selected="">V / −24°C</option></select></label>
          </div>
          <div class="rk-climate-scenario-result" id="rk-climate-scenario-result" aria-live="polite">
            <strong id="rk-climate-scenario-title">Wybierz miejscowość albo ustaw strefy porównania</strong>
            <p id="rk-climate-scenario-copy">Porównanie pokaże zmianę ΔT. Moc pojawi się tylko po podaniu wyniku z rzeczywistych obliczeń.</p>
          </div>

          <div class="rk-climate-chart-wrap">
            <p class="rk-climate-chart-title">Pięć stref przy wybranej temperaturze wnętrza</p>
            <p class="rk-climate-chart-subtitle">Wysokość słupka pokazuje ΔT, nie roczne zużycie energii.</p>
            <div class="rk-climate-chart" id="rk-climate-chart" role="img" aria-label="Porównanie różnicy temperatur dla pięciu stref klimatycznych">
              <div class="rk-climate-bar-item" data-zone="1"><span class="rk-climate-bar-value">—</span><div class="rk-climate-bar-track"><div class="rk-climate-bar-fill"></div></div><span class="rk-climate-bar-label">Strefa I<small>−16°C</small></span></div>
              <div class="rk-climate-bar-item" data-zone="2"><span class="rk-climate-bar-value">—</span><div class="rk-climate-bar-track"><div class="rk-climate-bar-fill"></div></div><span class="rk-climate-bar-label">Strefa II<small>−18°C</small></span></div>
              <div class="rk-climate-bar-item" data-zone="3"><span class="rk-climate-bar-value">—</span><div class="rk-climate-bar-track"><div class="rk-climate-bar-fill"></div></div><span class="rk-climate-bar-label">Strefa III<small>−20°C</small></span></div>
              <div class="rk-climate-bar-item" data-zone="4"><span class="rk-climate-bar-value">—</span><div class="rk-climate-bar-track"><div class="rk-climate-bar-fill"></div></div><span class="rk-climate-bar-label">Strefa IV<small>−22°C</small></span></div>
              <div class="rk-climate-bar-item" data-zone="5"><span class="rk-climate-bar-value">—</span><div class="rk-climate-bar-track"><div class="rk-climate-bar-fill"></div></div><span class="rk-climate-bar-label">Strefa V<small>−24°C</small></span></div>
            </div>
          </div>
          <p class="rk-climate-tool-disclaimer">Założenie scenariusza: ten sam budynek, ta sama temperatura wewnętrzna i proporcjonalna zmiana składników zależnych od różnicy temperatur. Pełne OZC uwzględnia osobno m.in. wentylację, grunt, mostki cieplne, odzysk ciepła i warunki pomieszczeń.</p>
        </div>
      </div>

      <aside class="rk-climate-cta" aria-label="Indywidualny projekt ogrzewania podłogowego">
        <div class="rk-climate-cta-title">Znasz już temperaturę projektową. Teraz trzeba policzyć każde pomieszczenie</div>
        <p>Strefa nie określa strat pomieszczeń, rozstawu rur, długości pętli, przepływów ani temperatury zasilania. W indywidualnym projekcie łączymy lokalizację z konstrukcją budynku, wentylacją, przeszkleniami i okładzinami podłogowymi.</p>
        <a class="rk-climate-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź zakres indywidualnego projektu podłogówki</a>
        <small class="rk-climate-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </aside>
    </section>

    <section class="rk-climate-section" id="rk-climate-interpretation">
      <span class="rk-climate-eyebrow">Od wyniku narzędzia do projektu</span>
      <h2 class="rk-climate-section-title">Jak interpretować wynik wyszukiwarki?</h2>
      <p class="rk-climate-lead">Wynik odpowiada na jedno konkretne pytanie: <strong>jaką projektową temperaturę zewnętrzną przyjąć jako punkt wyjścia dla wskazanej lokalizacji?</strong> Nie jest oceną energetyczną domu i nie zastępuje obliczeń pomieszczenie po pomieszczeniu.</p>
      <div class="rk-climate-grid-4">
        <article class="rk-climate-card"><span class="rk-climate-card-number">KROK 1</span><h3>Lokalizacja</h3><p>Wybór miejscowości przypisuje orientacyjną strefę i temperaturę zewnętrzną. Granice i obszary górskie wymagają dokładniejszej kontroli.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">KROK 2</span><h3>Temperatura wnętrza</h3><p>Inną temperaturę projektową przyjmuje się dla salonu, inną można przyjąć dla łazienki, garażu lub pomieszczenia technicznego.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">KROK 3</span><h3>Różnica ΔT</h3><p>Różnica między temperaturą pomieszczenia a temperaturą zewnętrzną wpływa na straty przez przegrody i wentylację.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">KROK 4</span><h3>Pełne OZC</h3><p>Dopiero geometria, współczynniki U, mostki, grunt i wentylacja zamieniają warunki klimatyczne w wynik wyrażony w watach.</p></article>
      </div>
      <div class="rk-climate-formula">idea zależności: Φ<sub>projekt</sub> ≈ H × (θ<sub>wew</sub> − θ<sub>zew</sub>)</div>
      <p class="rk-climate-copy">Wzór pokazuje kierunek wpływu temperatury, gdzie H jest łączną charakterystyką strat w W/K. Nie jest kompletnym algorytmem OZC. W prawidłowych obliczeniach różne drogi przepływu ciepła i wentylację analizuje się zgodnie z ich własnymi warunkami.</p>
      <div class="rk-climate-note rk-climate-note-good"><p><strong>Najważniejsza interpretacja:</strong> wynik −20°C nie znaczy, że dom „potrzebuje określonej mocy”. Znaczy, że jego moc projektową trzeba policzyć dla właściwych warunków zewnętrznych.</p></div>
    </section>

    <section class="rk-climate-section rk-climate-section-soft" id="rk-climate-zones">
      <span class="rk-climate-eyebrow">Podstawowe dane porównawcze</span>
      <h2 class="rk-climate-section-title">Pięć stref klimatycznych i temperatury projektowe</h2>
      <p class="rk-climate-lead">W stosowanym w Polsce podziale do obliczeń ogrzewania kolejne strefy różnią się o 2 K. Poniższe porównanie pokazuje również ΔT przy temperaturze pomieszczenia 20°C.</p>
      <div class="rk-climate-table-wrap">
        <table>
          <thead><tr><th>Strefa</th><th>Temperatura zewnętrzna</th><th>ΔT przy 20°C</th><th>Zmiana ΔT względem poprzedniej</th><th>Znaczenie</th></tr></thead>
          <tbody>
            <tr><td data-label="Strefa"><strong>I</strong></td><td data-label="Temperatura zewnętrzna">−16°C</td><td data-label="ΔT przy 20°C">36 K</td><td data-label="Zmiana">punkt odniesienia</td><td data-label="Znaczenie">Najłagodniejszy zestaw warunków projektowych spośród pięciu stref.</td></tr>
            <tr><td data-label="Strefa"><strong>II</strong></td><td data-label="Temperatura zewnętrzna">−18°C</td><td data-label="ΔT przy 20°C">38 K</td><td data-label="Zmiana">około +5,6%</td><td data-label="Znaczenie">O 2 K większa różnica temperatur niż w strefie I.</td></tr>
            <tr><td data-label="Strefa"><strong>III</strong></td><td data-label="Temperatura zewnętrzna">−20°C</td><td data-label="ΔT przy 20°C">40 K</td><td data-label="Zmiana">około +5,3%</td><td data-label="Znaczenie">Częsty punkt odniesienia dla dużej części kraju, ale nie wartość domyślna dla każdej lokalizacji.</td></tr>
            <tr><td data-label="Strefa"><strong>IV</strong></td><td data-label="Temperatura zewnętrzna">−22°C</td><td data-label="ΔT przy 20°C">42 K</td><td data-label="Zmiana">około +5,0%</td><td data-label="Znaczenie">Surowsze warunki projektowe, spotykane m.in. na części obszarów wschodnich i północno-wschodnich.</td></tr>
            <tr><td data-label="Strefa"><strong>V</strong></td><td data-label="Temperatura zewnętrzna">−24°C</td><td data-label="ΔT przy 20°C">44 K</td><td data-label="Zmiana">około +4,8%</td><td data-label="Znaczenie">Najniższa temperatura projektowa; dotyczy wybranych obszarów północno-wschodnich i górskich.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-climate-copy">Procenty opisują zmianę samej różnicy temperatur względem poprzedniej strefy. Nie są gotowym procentem wzrostu całkowitego OZC, zużycia energii ani rachunku. Więcej o podstawie obliczeniowej znajdziesz w poradniku o <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">normie PN-EN 12831</a>.</p>
    </section>

    <section class="rk-climate-section" id="rk-climate-ozc">
      <span class="rk-climate-eyebrow">Temperatura jest wejściem, nie wynikiem</span>
      <h2 class="rk-climate-section-title">Jak strefa klimatyczna wpływa na projektowe obciążenie cieplne OZC?</h2>
      <p class="rk-climate-lead">Przy niezmienionym budynku niższa projektowa temperatura zewnętrzna zwiększa część strat zależną od różnicy temperatur. Skala zmiany zależy jednak od konstrukcji domu i udziału poszczególnych dróg strat.</p>
      <div class="rk-climate-grid-3">
        <article class="rk-climate-card"><span class="rk-climate-card-number">PRZENIKANIE</span><h3>Ściany, dach i okna</h3><p>Powierzchnia, współczynnik U i różnica temperatur decydują o stratach przez przegrody zewnętrzne. Każda przegroda jest liczona osobno.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">POWIETRZE</span><h3>Wentylacja i infiltracja</h3><p>Strumień powietrza, szczelność, odzysk ciepła i warunki pracy wentylacji wpływają na obciążenie wentylacyjne.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">POZOSTAŁE</span><h3>Grunt i mostki cieplne</h3><p>Podłogi na gruncie nie są zwykłą ścianą zewnętrzną, a mostki powinny wynikać z geometrii i współczynników liniowych.</p></article>
      </div>
      <p class="rk-climate-copy">Dlatego uproszczone mnożenie jednej powierzchni przez średni współczynnik U i ΔT może być przykładem edukacyjnym, lecz nie powinno być nazywane pełnym OZC. Rzetelny <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">bilans cieplny budynku</a> rozdziela elementy oraz pokazuje wynik całego budynku i poszczególnych pomieszczeń.</p>
      <div class="rk-climate-note rk-climate-note-bad"><p><strong>Nie dodajemy automatycznego „normowego zapasu 10%”.</strong> Dodatkowa moc na ponowne nagrzewanie lub inne warunki powinna wynikać z przyjętej metody, sposobu użytkowania i jawnego założenia, a nie ze stałego narzutu w każdym domu.</p></div>
    </section>

    <section class="rk-climate-section rk-climate-section-soft" id="rk-climate-floor">
      <span class="rk-climate-eyebrow">Od pomieszczenia do pętli</span>
      <h2 class="rk-climate-section-title">Czy strefa klimatyczna wyznacza rozstaw rur podłogówki?</h2>
      <p class="rk-climate-lead"><strong>Nie bezpośrednio.</strong> Strefa wpływa na warunki obliczeniowe budynku. Rozstaw rur wynika dopiero z wymaganej mocy konkretnego pomieszczenia, powierzchni czynnej, okładziny i parametrów wody.</p>
      <div class="rk-climate-grid-4">
        <article class="rk-climate-card"><span class="rk-climate-card-number">W/m²</span><h3>Obciążenie pomieszczenia</h3><p>Ten sam dom może mieć salon o małym obciążeniu i łazienkę wymagającą większej mocy jednostkowej.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">A</span><h3>Powierzchnia czynna</h3><p>Zabudowa stała i wyłączone pola zmniejszają powierzchnię, z której podłoga może oddać potrzebne ciepło.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">Rλ,B</span><h3>Opór wykończenia</h3><p>Płytki, winyl, panele i drewno stawiają różny opór, więc przy tych samych rurach dają inną moc powierzchniową.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">θm</span><h3>Temperatura wody</h3><p>Wydajność zależy od średniej temperatury czynnika względem temperatury pomieszczenia, a nie od numeru strefy.</p></article>
      </div>
      <p class="rk-climate-copy">Z tego powodu nie wpisujemy w wyszukiwarce reguł „strefa I = 15 cm” i „strefa V = 10 cm”. Zasady doboru pokazuje osobny poradnik o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawie rur 10 czy 15 cm</a>, natomiast ograniczenia wydajności i temperatur powierzchni opisuje <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264 w ogrzewaniu podłogowym</a>.</p>
      <div class="rk-climate-note"><p><strong>Przykład:</strong> dobrze izolowany dom w strefie V może potrzebować mniejszej mocy z podłogi niż słabo izolowany dom w strefie II. Numer strefy nie zastępuje danych budynku.</p></div>
    </section>

    <section class="rk-climate-section" id="rk-climate-energy">
      <span class="rk-climate-eyebrow">Trzy wyniki, trzy zastosowania</span>
      <h2 class="rk-climate-section-title">Moc w kW, energia w kWh i koszt w złotych to nie to samo</h2>
      <p class="rk-climate-lead">Projektowa temperatura zewnętrzna służy przede wszystkim do wyznaczenia mocy potrzebnej w warunkach obliczeniowych. Roczne zużycie i koszt wymagają osobnej analizy sezonu.</p>
      <div class="rk-climate-table-wrap">
        <table>
          <thead><tr><th>Wielkość</th><th>Jednostka</th><th>Na jakie pytanie odpowiada?</th><th>Czego nie wolno z niej wyciągać?</th></tr></thead>
          <tbody>
            <tr><td data-label="Wielkość"><strong>Projektowe obciążenie</strong></td><td data-label="Jednostka">W lub kW</td><td data-label="Pytanie">Ile mocy potrzeba w określonych warunkach projektowych?</td><td data-label="Ograniczenie">Nie jest liczbą kilowatogodzin zużywanych przez cały sezon.</td></tr>
            <tr><td data-label="Wielkość"><strong>Energia użytkowa</strong></td><td data-label="Jednostka">kWh/rok</td><td data-label="Pytanie">Ile ciepła budynek potrzebuje w analizowanym roku lub roku standardowym?</td><td data-label="Ograniczenie">Nie jest automatycznie energią kupioną przez pompę, kocioł lub grzałkę.</td></tr>
            <tr><td data-label="Wielkość"><strong>Energia kupiona</strong></td><td data-label="Jednostka">kWh prądu, gazu lub paliwa</td><td data-label="Pytanie">Ile nośnika potrzebuje źródło przy określonej sprawności lub SCOP?</td><td data-label="Ograniczenie">Nie określa kosztu bez ceny, taryfy i opłat stałych.</td></tr>
            <tr><td data-label="Wielkość"><strong>Koszt eksploatacji</strong></td><td data-label="Jednostka">zł/rok</td><td data-label="Pytanie">Ile kosztuje energia, opłaty stałe, serwis i ewentualna praca źródła szczytowego?</td><td data-label="Ograniczenie">Nie może wynikać wyłącznie z numeru strefy.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-climate-copy">Jeżeli chcesz sprawdzić roczne warianty, użyj narzędzia, które rozdziela moc od energii i kosztu. Nie przeliczaj mocy projektowej przez arbitralną liczbę godzin sezonu. Temat ten rozwija <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">porównanie kosztów ogrzewania domu</a>.</p>
    </section>

    <section class="rk-climate-section rk-climate-section-soft" id="rk-climate-cost-claim">
      <span class="rk-climate-eyebrow">Weryfikacja mocnej obietnicy</span>
      <h2 class="rk-climate-section-title">Czy błąd o jedną strefę naprawdę kosztuje 6000 zł rocznie?</h2>
      <p class="rk-climate-lead"><strong>Nie istnieje jedna kwota przypisana do pomyłki strefy.</strong> Skutek może być mały, istotny albo bardzo kosztowny — zależnie od budynku, źródła, punktu biwalentnego, taryfy, sterowania i faktycznego przebiegu zimy.</p>
      <div class="rk-climate-grid-2">
        <article class="rk-climate-card">
          <span class="rk-climate-card-number">1 STREFA</span>
          <h3>Sąsiednie strefy różnią się o 2 K</h3>
          <p>Przy 20°C wewnątrz przejście o jeden stopień podziału zmienia ΔT w pokazanych parach o około 4,8–5,6%. Nie oznacza automatycznie identycznej zmiany całego OZC ani rachunku.</p>
        </article>
        <article class="rk-climate-card">
          <span class="rk-climate-card-number">II → V</span>
          <h3>To przeskok o trzy strefy</h3>
          <p>ΔT rośnie z 38 K do 44 K, czyli o około 15,8%. To nadal porównanie warunków projektowych, a nie rocznego zużycia energii.</p>
        </article>
      </div>
      <div class="rk-climate-answer">
        <strong>Przykład edukacyjny: 6,0 kW w strefie II nie staje się automatycznie 9,0 kW w strefie V.</strong>
        <p>Przy prostym skalowaniu proporcjonalnym do ΔT otrzymalibyśmy 6,0 × 44/38 ≈ 6,95 kW. Pełny wynik może być inny, ponieważ nie wszystkie składniki obciążenia zachowują się jak jeden wspólny współczynnik.</p>
      </div>
      <p class="rk-climate-copy">Kwota 6000 zł może wystąpić w określonym scenariuszu, np. przy długiej pracy grzałki elektrycznej i niekorzystnej taryfie, ale wymaga pokazania czasu pracy, mocy grzałki, cen energii i warunków sezonu. Bez tych założeń byłaby reklamową liczbą, a nie wynikiem technicznym.</p>
    </section>

    <section class="rk-climate-section" id="rk-climate-boundaries">
      <span class="rk-climate-eyebrow">Gdzie prosta wyszukiwarka ma granice</span>
      <h2 class="rk-climate-section-title">Miejscowości graniczne, tereny górskie i lokalny mikroklimat</h2>
      <p class="rk-climate-lead">Nazwa miasta nie zawsze wystarcza do odpowiedzialnego przypisania warunków. W rozległych gminach znaczenie mogą mieć dokładne położenie, wysokość, ekspozycja terenu i sąsiedztwo granicy stref.</p>
      <div class="rk-climate-grid-3">
        <article class="rk-climate-card"><span class="rk-climate-icon">↔</span><h3>Granica stref</h3><p>Dwie pobliskie miejscowości mogą leżeć po przeciwnych stronach linii podziału. Nie należy przenosić wyniku tylko dlatego, że odległość wydaje się mała.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-icon">▲</span><h3>Wysokość i ukształtowanie</h3><p>W górach różnica wysokości między centrum miejscowości a działką może być istotniejsza niż sama nazwa pocztowa.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-icon">✓</span><h3>Dokumentacja projektu</h3><p>Przy wątpliwości pierwszeństwo ma zweryfikowana lokalizacja budynku i krajowe dane przyjęte przez projektanta, nie podpowiedź internetowa.</p></article>
      </div>
      <div class="rk-climate-note"><p><strong>Dlatego baza nie zgaduje wyniku dla każdej polskiej wsi.</strong> Jeżeli miejscowości nie ma na liście albo wynik oznaczono jako wymagający kontroli, wybierz strefę ręcznie dopiero po sprawdzeniu dokumentacji.</p></div>
    </section>

    <section class="rk-climate-section rk-climate-section-soft" id="rk-climate-heat-pump">
      <span class="rk-climate-eyebrow">Źródło ciepła pracuje w konkretnych warunkach</span>
      <h2 class="rk-climate-section-title">Strefa klimatyczna, pompa ciepła i punkt biwalentny</h2>
      <p class="rk-climate-lead">Niższa temperatura projektowa może jednocześnie zwiększać obciążenie budynku i zmniejszać dostępną moc powietrznej pompy ciepła. Dlatego nie dobiera się urządzenia wyłącznie z jednego wyniku „moc domu”.</p>
      <div class="rk-climate-grid-3">
        <article class="rk-climate-card"><span class="rk-climate-card-number">A</span><h3>Krzywa obciążenia budynku</h3><p>Pokazuje, jak rośnie zapotrzebowanie na moc wraz ze spadkiem temperatury zewnętrznej.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">B</span><h3>Charakterystyka pompy</h3><p>Dostępna moc i COP zależą od temperatury powietrza oraz wymaganej temperatury wody grzewczej.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">A × B</span><h3>Punkt biwalentny</h3><p>Miejsce przecięcia charakterystyk pomaga ocenić, kiedy i w jakim zakresie może być potrzebne źródło szczytowe.</p></article>
      </div>
      <p class="rk-climate-copy">Dopiero to zestawienie pozwala ocenić wpływ grzałki na koszty. Zobacz także, jak wygląda <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a> oraz dlaczego <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">niska temperatura zasilania</a> pomaga utrzymać korzystne warunki pracy źródła.</p>
      <div class="rk-climate-note rk-climate-note-bad"><p><strong>Strefa nie wybiera typoszeregu urządzenia.</strong> Przejście z 6 kW bezpośrednio na 9 kW tylko na podstawie numeru strefy pomija charakterystykę budynku i konkretnego modelu pompy.</p></div>
    </section>

    <section class="rk-climate-section" id="rk-climate-errors">
      <span class="rk-climate-eyebrow">Błędy, które zmieniają wynik albo jego znaczenie</span>
      <h2 class="rk-climate-section-title">Najczęstsze błędy przy korzystaniu ze stref klimatycznych</h2>
      <div class="rk-climate-grid-3">
        <article class="rk-climate-card"><span class="rk-climate-card-number">BŁĄD 1</span><h3>Domyślna strefa III</h3><p>Przyjmowanie −20°C bez sprawdzenia działki może zawyżyć albo zaniżyć warunki wejściowe.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">BŁĄD 2</span><h3>Moc z samej lokalizacji</h3><p>Dwa domy stojące obok siebie mogą mieć radykalnie różne obciążenie przez powierzchnię, izolację i wentylację.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">BŁĄD 3</span><h3>Rozstaw przypisany do strefy</h3><p>Numer strefy nie zna powierzchni czynnej, okładziny ani strat konkretnej łazienki, salonu czy sypialni.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">BŁĄD 4</span><h3>Stały zapas procentowy</h3><p>Uniwersalny narzut bez opisania powodu zaciemnia wynik i może prowadzić do przewymiarowania.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">BŁĄD 5</span><h3>Moc pomnożona przez sezon</h3><p>Projektowe kW nie działają przez wszystkie godziny zimy. Takie mnożenie nie daje rocznego zużycia.</p></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">BŁĄD 6</span><h3>Brak kontroli działki</h3><p>W górach i przy granicach stref ogólne przypisanie do miasta może nie opisywać dokładnego położenia budynku.</p></article>
      </div>
      <p class="rk-climate-copy">Do wstępnej edukacji można wykorzystać <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">kalkulator strat ciepła budynku</a>, ale wyniki do projektu podłogówki powinny uwzględniać pomieszczenia, powierzchnie i warunki rzeczywistego budynku.</p>
    </section>

    <section class="rk-climate-section rk-climate-section-soft" id="rk-climate-data">
      <span class="rk-climate-eyebrow">Od adresu inwestycji do obliczeń</span>
      <h2 class="rk-climate-section-title">Jakie dane są potrzebne projektantowi oprócz strefy?</h2>
      <p class="rk-climate-lead">Adres i strefa rozpoczynają obliczenia. Wiarygodny projekt wymaga jednak kompletnego opisu bryły, przegród, wentylacji, pomieszczeń i planowanego wykończenia podłóg.</p>
      <div class="rk-climate-grid-3">
        <article class="rk-climate-card"><span class="rk-climate-card-number">BUDYNEK</span><h3>Geometria i przegrody</h3><ul class="rk-climate-bullets"><li>rzuty, przekroje i wymiary,</li><li>warstwy ścian, dachu i podłogi,</li><li>okna, drzwi i przeszklenia,</li><li>strefy ogrzewane i nieogrzewane.</li></ul></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">POWIETRZE</span><h3>Wentylacja i temperatury</h3><ul class="rk-climate-bullets"><li>rodzaj wentylacji,</li><li>strumienie powietrza,</li><li>odzysk ciepła i bilans nawiewu,</li><li>temperatury projektowe pomieszczeń.</li></ul></article>
        <article class="rk-climate-card"><span class="rk-climate-card-number">PODŁOGA</span><h3>Układ instalacji</h3><ul class="rk-climate-bullets"><li>powierzchnie wyłączone z grzania,</li><li>rodzaj i opór okładzin,</li><li>lokalizacja rozdzielaczy,</li><li>źródło i zakładane parametry wody.</li></ul></article>
      </div>
      <p class="rk-climate-copy">Na tej podstawie można ocenić, <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-moze-byc-jedynym-zrodlem-ciepla-w-domu-analiza-dla-polskich-warunkow/">czy podłogówka może być jedynym źródłem ciepła</a>, dobrać <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefy brzegowe</a> oraz sprawdzić wpływ <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">okładziny podłogowej na wydajność</a>.</p>
    </section>

    <section class="rk-climate-section rk-climate-final" id="rk-climate-final">
      <span class="rk-climate-eyebrow">Najważniejszy wniosek</span>
      <h2 class="rk-climate-section-title">Sprawdź strefę, ale projektuj cały budynek</h2>
      <p class="rk-climate-lead">Prawidłowa temperatura projektowa chroni obliczenia przed błędem wejściowym. Nie zastępuje jednak modelu strat, bilansu pomieszczeń ani hydrauliki ogrzewania podłogowego.</p>
      <div class="rk-climate-cta">
        <div class="rk-climate-cta-title">Od temperatury zewnętrznej do rozstawów, pętli i przepływów</div>
        <p>Indywidualny projekt łączy OZC pomieszczeń z powierzchnią czynną, okładzinami, temperaturą zasilania i oporami hydraulicznymi. Wykonawca otrzymuje dane potrzebne do ułożenia oraz wyregulowania instalacji.</p>
        <a class="rk-climate-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
        <small class="rk-climate-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-climate-section" id="rk-climate-sources">
      <span class="rk-climate-eyebrow">Podstawa techniczna</span>
      <h2 class="rk-climate-section-title">Oficjalne źródła i zakres obliczeń</h2>
      <p class="rk-climate-lead">Źródła porządkują metodę obliczania projektowego obciążenia, wymagania budowlane i zasady projektowania systemów płaszczyznowych. Pełne normy należy stosować w aktualnym wydaniu wraz z właściwymi danymi krajowymi.</p>
      <div class="rk-climate-source-grid">
        <article class="rk-climate-source-card"><a href="https://www.pkn.pl/" target="_blank" rel="nofollow noopener noreferrer">Polski Komitet Normalizacyjny</a><p>Oficjalny portal do wyszukiwania aktualnych Polskich Norm i informacji o ich statusie.</p></article>
        <article class="rk-climate-source-card"><a href="https://repo.pw.edu.pl/info/article/WUT7c194b7443134803a9d035c593eba8a2/Norma%2BPN-EN%2B12831-1%3A2017-08.%2BKluczowe%2Bzmiany%2Bw%2Bmetodyce%2Bobliczania%2Bobci%C4%85%C5%BCenia%2Bcieplnego%2Bbudynk%C3%B3w%2B" target="_blank" rel="nofollow noopener noreferrer">Politechnika Warszawska — PN-EN 12831-1</a><p>Opracowanie dotyczące zmian w metodyce obliczania projektowego obciążenia cieplnego budynków.</p></article>
        <article class="rk-climate-source-card"><a href="https://eli.gov.pl/eli/DU/2022/1225/ogl" target="_blank" rel="nofollow noopener noreferrer">Dziennik Ustaw — Warunki Techniczne</a><p>Oficjalny tekst przepisów określających wymagania techniczne dla budynków i ich usytuowania.</p></article>
        <article class="rk-climate-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021</a><p>Oficjalna karta normy dotyczącej określania projektowej mocy systemów ogrzewania i chłodzenia płaszczyznowego.</p></article>
        <article class="rk-climate-source-card"><a href="https://www.iso.org/standard/65696.html" target="_blank" rel="nofollow noopener noreferrer">ISO 52016-1:2017</a><p>Oficjalna karta metody obliczania potrzeb energetycznych budynku oraz temperatur wewnętrznych.</p></article>
        <article class="rk-climate-source-card"><a href="https://energy.ec.europa.eu/topics/energy-efficiency/energy-efficient-buildings/energy-performance-buildings-directive_en" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska — charakterystyka energetyczna budynków</a><p>Oficjalne informacje o ramach oceny charakterystyki energetycznej budynków w Unii Europejskiej.</p></article>
      </div>
      <div class="rk-climate-responsibility"><p><strong>Zakres narzędzia:</strong> wyszukiwarka jest pomocą edukacyjną opartą na pięciostrefowym podziale stosowanym w obliczeniach ogrzewania. Nie stanowi dokumentu normowego, mapy geodezyjnej, pełnego OZC, doboru pompy ciepła ani projektu instalacji. Dla działek przy granicy stref i na terenach górskich należy potwierdzić dokładne warunki lokalizacji.</p></div>
    </section>

    <section class="rk-climate-section rk-climate-section-soft" id="rk-climate-faq">
      <span class="rk-climate-eyebrow">Pytania inwestorów i wykonawców</span>
      <h2 class="rk-climate-section-title">FAQ — strefy klimatyczne, OZC i ogrzewanie podłogowe</h2>
      <div class="rk-climate-faq">
        <details><summary>Ile stref klimatycznych stosuje się w Polsce do obliczeń ogrzewania?</summary><div class="rk-climate-faq-answer"><p>Stosowany podział obejmuje pięć stref oznaczonych od I do V. Odpowiadają im projektowe temperatury zewnętrzne od −16°C do −24°C, zmieniające się co 2 K.</p></div></details>
        <details><summary>Jakie temperatury odpowiadają strefom I–V?</summary><div class="rk-climate-faq-answer"><p>Strefa I to −16°C, II −18°C, III −20°C, IV −22°C, a V −24°C. Są to temperatury projektowe używane jako dane wejściowe, a nie średnie temperatury zimy.</p></div></details>
        <details><summary>Czy wyszukiwarka działa bez polskich znaków?</summary><div class="rk-climate-faq-answer"><p>Tak. Można wpisać na przykład „lodz”, „swinoujscie” lub „bialystok”. Skrypt normalizuje znaki i wyświetla poprawną nazwę miejscowości w podpowiedziach.</p></div></details>
        <details><summary>Co zrobić, jeśli miejscowości nie ma w bazie?</summary><div class="rk-climate-faq-answer"><p>Nie należy wybierać przypadkowego pobliskiego miasta. Sprawdź strefę w dokumentacji lokalizacji lub u projektanta, a następnie użyj ręcznego wyboru strefy w narzędziu.</p></div></details>
        <details><summary>Czy strefa klimatyczna określa dokładne OZC domu?</summary><div class="rk-climate-faq-answer"><p>Nie. Strefa podaje projektową temperaturę zewnętrzną. OZC zależy dodatkowo od powierzchni i parametrów przegród, mostków cieplnych, wentylacji, gruntu oraz temperatur poszczególnych pomieszczeń.</p></div></details>
        <details><summary>Czy w strefie V rury zawsze trzeba układać co 10 cm?</summary><div class="rk-climate-faq-answer"><p>Nie. Rozstaw wynika z obciążenia danego pomieszczenia, powierzchni czynnej, oporu okładziny i temperatury wody. Dobrze izolowany dom w strefie V nie musi mieć wszędzie mniejszego rozstawu niż słabo izolowany dom w strefie II.</p></div></details>
        <details><summary>Czy strefa określa temperaturę zasilania podłogówki?</summary><div class="rk-climate-faq-answer"><p>Nie. Temperatura zasilania wynika z potrzebnej mocy, konstrukcji podłogi, rozstawu, okładziny i ograniczeń temperatury powierzchni. Strefa wpływa na obciążenie, ale nie daje gotowej nastawy.</p></div></details>
        <details><summary>Czy błąd o jedną strefę zawsze kosztuje 6000 zł rocznie?</summary><div class="rk-climate-faq-answer"><p>Nie. Nie istnieje stała kwota. Koszt zależy od skali błędu w obciążeniu, charakterystyki źródła, pracy grzałki, taryfy, cen energii, regulacji i rzeczywistej pogody w sezonie.</p></div></details>
        <details><summary>Jaka jest różnica między strefą II a V?</summary><div class="rk-climate-faq-answer"><p>Temperatura projektowa zmienia się z −18°C na −24°C, czyli o 6 K. Przy 20°C wewnątrz ΔT rośnie z 38 do 44 K, co oznacza wzrost o około 15,8% dla składnika proporcjonalnego do ΔT.</p></div></details>
        <details><summary>Czy projektowa temperatura zewnętrzna to najniższa temperatura w historii?</summary><div class="rk-climate-faq-answer"><p>Nie. To parametr obliczeniowy przyjmowany według danych klimatycznych i metody projektowej. Nie musi być równy rekordowi meteorologicznemu ani średniej minimalnej temperaturze sezonu.</p></div></details>
        <details><summary>Jak strefa wpływa na dobór pompy ciepła?</summary><div class="rk-climate-faq-answer"><p>Wpływa na obciążenie budynku przy niskiej temperaturze, ale urządzenie dobiera się także z jego charakterystyki mocy, COP, temperatury zasilania, punktu biwalentnego i przyjętej strategii źródła szczytowego.</p></div></details>
        <details><summary>Czy wynik dla centrum miasta pasuje do działki w górach?</summary><div class="rk-climate-faq-answer"><p>Nie zawsze. Wysokość, ekspozycja i położenie względem granicy stref mogą wymagać dokładniejszej weryfikacji. Dlatego lokalizacje górskie w bazie otrzymują ostrzeżenie.</p></div></details>
        <details><summary>Czy projektową temperaturę wnętrza ustala się jednakowo dla całego domu?</summary><div class="rk-climate-faq-answer"><p>Nie musi tak być. Łazienka może mieć wyższą temperaturę projektową niż sypialnia, a garaż niższą niż część mieszkalna. Pełne OZC uwzględnia warunki każdego pomieszczenia.</p></div></details>
        <details><summary>Czy ze strefy można obliczyć roczne zużycie energii?</summary><div class="rk-climate-faq-answer"><p>Nie z samej strefy. Roczna energia wymaga danych godzinowych lub miesięcznych, charakterystyki budynku, zysków, wentylacji, regulacji i warunków całego sezonu. Projektowe kW nie są rocznymi kWh.</p></div></details>
      </div>
    </section>

    <section class="rk-climate-author" id="rk-climate-author">
      <span class="rk-climate-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-climate-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-climate-author-layout">
        <aside class="rk-climate-author-side">
          <div class="rk-climate-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-climate-author-name">Robert Kucharski</div>
          <p class="rk-climate-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-climate-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-b8b906199/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-climate-author-main">
          <div class="rk-climate-author-quote">„Moim zdaniem strefa klimatyczna jest ważną daną wejściową, ale sama nie dobiera pompy ciepła ani rozstawu rur. O jakości projektu decyduje dopiero połączenie lokalizacji z obciążeniem każdego pomieszczenia i hydrauliką instalacji.”</div>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W publikacjach rozdziela projektową moc w kW, roczne zapotrzebowanie w kWh i rzeczywisty koszt eksploatacji.</p>
          <p>W tym poradniku zweryfikował zależność między temperaturą projektową, OZC, wydajnością podłogi i charakterystyką źródła. Wyszukiwarka została celowo ograniczona do parametru, który można uczciwie wyprowadzić z przypisania strefy; pozostałe wartości wymagają danych budynku.</p>
          <p>Publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p>
          <div class="rk-climate-author-facts">
            <div class="rk-climate-author-fact"><strong>Praktyka projektowa</strong>OZC pomieszczeń, podłogówka, przepływy i opory hydrauliczne</div>
            <div class="rk-climate-author-fact"><strong>Metoda</strong>Jawne dane wejściowe, rozdzielenie mocy od energii i kontrola ograniczeń</div>
            <div class="rk-climate-author-fact"><strong>Zakres aktualizacji</strong>Treść, narzędzie, źródła i FAQ sprawdzone 15 września 2026 r.</div>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "knowsAbout": [
        "projektowe obciążenie cieplne OZC",
        "strefy klimatyczne w Polsce",
        "ogrzewanie podłogowe",
        "pompy ciepła",
        "hydraulika instalacji grzewczych",
        "PN-EN 12831"
      ],
      "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-b8b906199/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/08/Strefy-klimatyczne-w-Polsce-a-ogrzewanie-podlogowe-i-OZC.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/08/Strefy-klimatyczne-w-Polsce-a-ogrzewanie-podlogowe-i-OZC.webp",
      "width": 1050,
      "height": 1050,
      "caption": "Strefy klimatyczne w Polsce a ogrzewanie podłogowe i OZC"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/" },
        { "@type": "ListItem", "position": 2, "name": "Poradniki", "item": "https://projekt-ogrzewania.pl/blog/" },
        { "@type": "ListItem", "position": 3, "name": "Strefy klimatyczne w Polsce", "item": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/" }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#webpage",
      "url": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/",
      "name": "Strefy klimatyczne w Polsce – wyszukiwarka miejscowości, temperatura projektowa i OZC",
      "description": "Wyszukiwarka stref klimatycznych i wyjaśnienie wpływu projektowej temperatury zewnętrznej na OZC, ogrzewanie podłogowe i pompę ciepła.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#breadcrumb" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#primaryimage" },
      "datePublished": "2026-08-01T10:12:32+00:00",
      "dateModified": "2026-09-15T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#article" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#article",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#webpage" },
      "headline": "Strefy klimatyczne w Polsce – wyszukiwarka miejscowości, temperatura projektowa i OZC",
      "description": "Techniczny przewodnik po pięciu strefach klimatycznych, temperaturach projektowych i ich prawidłowym wykorzystaniu w OZC oraz projekcie podłogówki.",
      "image": { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-08-01T10:12:32+00:00",
      "dateModified": "2026-09-15T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "about": [
        "strefy klimatyczne w Polsce",
        "projektowa temperatura zewnętrzna",
        "projektowe obciążenie cieplne OZC",
        "ogrzewanie podłogowe",
        "dobór pompy ciepła"
      ],
      "keywords": "strefy klimatyczne w Polsce, wyszukiwarka stref klimatycznych, temperatura projektowa, temperatura zewnętrzna do OZC, strefa klimatyczna a ogrzewanie podłogowe",
      "isAccessibleForFree": true,
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#locator" },
        { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#zones-list" },
        { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#faq-schema" }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#locator",
      "name": "Wyszukiwarka strefy klimatycznej dla miejscowości",
      "url": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#rk-climate-locator-section",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie edukacyjne wyszukujące strefę i projektową temperaturę zewnętrzną oraz porównujące ΔT między pięcioma strefami."
    },
    {
      "@type": "Dataset",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#locality-dataset",
      "name": "Baza miejscowości i stref obliczeniowych ogrzewania",
      "description": "Pomocniczy zbiór miejscowości wykorzystywany przez wyszukiwarkę edukacyjną. Lokalizacje graniczne i górskie wymagają kontroli dokładnego położenia.",
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#locator" },
      "inLanguage": "pl-PL",
      "license": "https://projekt-ogrzewania.pl/"
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#zones-list",
      "name": "Pięć stref klimatycznych do obliczeń ogrzewania w Polsce",
      "numberOfItems": 5,
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strefa I — projektowa temperatura zewnętrzna −16°C" },
        { "@type": "ListItem", "position": 2, "name": "Strefa II — projektowa temperatura zewnętrzna −18°C" },
        { "@type": "ListItem", "position": 3, "name": "Strefa III — projektowa temperatura zewnętrzna −20°C" },
        { "@type": "ListItem", "position": 4, "name": "Strefa IV — projektowa temperatura zewnętrzna −22°C" },
        { "@type": "ListItem", "position": 5, "name": "Strefa V — projektowa temperatura zewnętrzna −24°C" }
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#howto",
      "name": "Jak wykorzystać strefę klimatyczną w projekcie ogrzewania",
      "description": "Procedura od ustalenia lokalizacji do obliczenia obciążenia pomieszczeń i projektu instalacji.",
      "totalTime": "PT15M",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Ustal lokalizację", "text": "Wyszukaj miejscowość i sprawdź, czy działka nie leży przy granicy strefy lub na terenie górskim." },
        { "@type": "HowToStep", "position": 2, "name": "Potwierdź temperaturę zewnętrzną", "text": "Przyjmij projektową temperaturę zewnętrzną zgodną z właściwymi danymi krajowymi i dokładną lokalizacją." },
        { "@type": "HowToStep", "position": 3, "name": "Ustal temperatury pomieszczeń", "text": "Określ projektowe temperatury dla salonu, sypialni, łazienki, garażu i pozostałych stref." },
        { "@type": "HowToStep", "position": 4, "name": "Oblicz obciążenie cieplne", "text": "Uwzględnij przegrody, mostki, wentylację, grunt oraz warunki każdego pomieszczenia." },
        { "@type": "HowToStep", "position": 5, "name": "Sprawdź wydajność podłogi", "text": "Porównaj straty pomieszczenia z powierzchnią czynną, okładziną i możliwą mocą ogrzewania podłogowego." },
        { "@type": "HowToStep", "position": 6, "name": "Zaprojektuj hydraulikę", "text": "Wyznacz rozstawy, długości pętli, przepływy, opory i nastawy rozdzielacza." }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/strefy-klimatyczne-w-polsce-a-ogrzewanie-podlogowe-i-ozc-dlaczego-blad-o-jedna-strefe-klimatyczna-kosztuje-cie-6000-zl-rocznie/#faq-schema",
      "mainEntity": [
        { "@type": "Question", "name": "Ile stref klimatycznych stosuje się w Polsce do obliczeń ogrzewania?", "acceptedAnswer": { "@type": "Answer", "text": "Stosowany podział obejmuje pięć stref oznaczonych od I do V. Odpowiadają im projektowe temperatury zewnętrzne od −16°C do −24°C, zmieniające się co 2 K." } },
        { "@type": "Question", "name": "Jakie temperatury odpowiadają strefom I–V?", "acceptedAnswer": { "@type": "Answer", "text": "Strefa I to −16°C, II −18°C, III −20°C, IV −22°C, a V −24°C. Są to temperatury projektowe używane jako dane wejściowe, a nie średnie temperatury zimy." } },
        { "@type": "Question", "name": "Czy wyszukiwarka działa bez polskich znaków?", "acceptedAnswer": { "@type": "Answer", "text": "Tak. Skrypt normalizuje znaki i wyświetla poprawną nazwę miejscowości w podpowiedziach." } },
        { "@type": "Question", "name": "Co zrobić, jeśli miejscowości nie ma w bazie?", "acceptedAnswer": { "@type": "Answer", "text": "Sprawdź strefę w dokumentacji lokalizacji lub u projektanta, a następnie użyj ręcznego wyboru strefy w narzędziu." } },
        { "@type": "Question", "name": "Czy strefa klimatyczna określa dokładne OZC domu?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Strefa podaje projektową temperaturę zewnętrzną. OZC zależy dodatkowo od parametrów przegród, mostków, wentylacji, gruntu i temperatur pomieszczeń." } },
        { "@type": "Question", "name": "Czy w strefie V rury zawsze trzeba układać co 10 cm?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Rozstaw wynika z obciążenia pomieszczenia, powierzchni czynnej, oporu okładziny i temperatury wody." } },
        { "@type": "Question", "name": "Czy strefa określa temperaturę zasilania podłogówki?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Temperatura zasilania wynika z potrzebnej mocy, konstrukcji podłogi, rozstawu, okładziny i ograniczeń temperatury powierzchni." } },
        { "@type": "Question", "name": "Czy błąd o jedną strefę zawsze kosztuje 6000 zł rocznie?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Koszt zależy od skali błędu, źródła ciepła, pracy grzałki, taryfy, cen energii, regulacji i rzeczywistej pogody." } },
        { "@type": "Question", "name": "Jaka jest różnica między strefą II a V?", "acceptedAnswer": { "@type": "Answer", "text": "Temperatura projektowa zmienia się z −18°C na −24°C. Przy 20°C wewnątrz ΔT rośnie z 38 do 44 K, czyli o około 15,8% dla składnika proporcjonalnego do ΔT." } },
        { "@type": "Question", "name": "Czy projektowa temperatura zewnętrzna to najniższa temperatura w historii?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. To parametr obliczeniowy i nie musi być równy rekordowi meteorologicznemu ani średniej minimalnej temperaturze sezonu." } },
        { "@type": "Question", "name": "Jak strefa wpływa na dobór pompy ciepła?", "acceptedAnswer": { "@type": "Answer", "text": "Wpływa na obciążenie budynku, ale urządzenie dobiera się także z charakterystyki mocy, COP, temperatury zasilania i punktu biwalentnego." } },
        { "@type": "Question", "name": "Czy wynik dla centrum miasta pasuje do działki w górach?", "acceptedAnswer": { "@type": "Answer", "text": "Nie zawsze. Wysokość, ekspozycja i położenie względem granicy stref mogą wymagać dokładniejszej weryfikacji." } },
        { "@type": "Question", "name": "Czy projektową temperaturę wnętrza ustala się jednakowo dla całego domu?", "acceptedAnswer": { "@type": "Answer", "text": "Nie musi tak być. Pełne OZC uwzględnia temperatury projektowe poszczególnych pomieszczeń." } },
        { "@type": "Question", "name": "Czy ze strefy można obliczyć roczne zużycie energii?", "acceptedAnswer": { "@type": "Answer", "text": "Nie z samej strefy. Roczna energia wymaga modelu całego sezonu, charakterystyki budynku, zysków, wentylacji i regulacji." } }
      ]
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projekt ogrzewania podłogowego z obliczeniami cieplnymi i hydraulicznymi"
    }
  ]
}
</script>

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

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

  /* WordPress potrafi przebudować kolejność dużych bloków. Ustalamy ją jawnie. */
  var shell = guide.querySelector(".rk-climate-shell");
  var orderedSections = [
    "rk-climate-answer",
    "rk-climate-locator-section",
    "rk-climate-interpretation",
    "rk-climate-zones",
    "rk-climate-ozc",
    "rk-climate-floor",
    "rk-climate-energy",
    "rk-climate-cost-claim",
    "rk-climate-boundaries",
    "rk-climate-heat-pump",
    "rk-climate-errors",
    "rk-climate-data",
    "rk-climate-final",
    "rk-climate-sources",
    "rk-climate-faq",
    "rk-climate-author"
  ];

  orderedSections.forEach(function (sectionId) {
    var section = document.getElementById(sectionId);
    if (section) {
      shell.appendChild(section);
    }
  });

  var zones = {
    1: { roman: "I", temp: -16, label: "Strefa I" },
    2: { roman: "II", temp: -18, label: "Strefa II" },
    3: { roman: "III", temp: -20, label: "Strefa III" },
    4: { roman: "IV", temp: -22, label: "Strefa IV" },
    5: { roman: "V", temp: -24, label: "Strefa V" }
  };

  var cities = [];

  function addGroup(zone, region, names, caution) {
    names.forEach(function (name) {
      cities.push({
        name: name,
        region: region,
        zone: zone,
        caution: caution === true
      });
    });
  }

  addGroup(1, "woj. zachodniopomorskie", [
    "Szczecin", "Świnoujście", "Police", "Goleniów", "Gryfice", "Kołobrzeg",
    "Koszalin", "Białogard", "Darłowo", "Kamień Pomorski", "Międzyzdroje", "Nowogard"
  ], false);
  addGroup(1, "woj. pomorskie", [
    "Gdańsk", "Gdynia", "Sopot", "Słupsk", "Ustka", "Wejherowo", "Rumia",
    "Reda", "Puck", "Hel", "Władysławowo", "Lębork", "Łeba", "Tczew", "Starogard Gdański"
  ], false);
  addGroup(1, "woj. pomorskie — lokalizacja do kontroli", ["Kartuzy", "Kościerzyna"], true);

  addGroup(2, "woj. zachodniopomorskie", [
    "Stargard", "Gryfino", "Choszczno", "Myślibórz", "Wałcz", "Szczecinek", "Drawsko Pomorskie"
  ], false);
  addGroup(2, "woj. lubuskie", [
    "Gorzów Wielkopolski", "Zielona Góra", "Nowa Sól", "Żary", "Żagań", "Świebodzin",
    "Międzyrzecz", "Sulechów", "Kostrzyn nad Odrą", "Słubice", "Krosno Odrzańskie"
  ], false);
  addGroup(2, "woj. wielkopolskie", [
    "Poznań", "Leszno", "Piła", "Gniezno", "Kalisz", "Konin", "Ostrów Wielkopolski",
    "Krotoszyn", "Rawicz", "Gostyń", "Kościan", "Nowy Tomyśl", "Szamotuły", "Września",
    "Śrem", "Jarocin", "Wągrowiec", "Chodzież", "Czarnków", "Złotów"
  ], false);
  addGroup(2, "woj. dolnośląskie", [
    "Wrocław", "Legnica", "Lubin", "Głogów", "Bolesławiec", "Oława", "Oleśnica",
    "Polkowice", "Środa Śląska", "Wołów", "Milicz", "Trzebnica", "Dzierżoniów", "Świdnica"
  ], false);
  addGroup(2, "woj. dolnośląskie — lokalizacja do kontroli", [
    "Wałbrzych", "Jelenia Góra", "Zgorzelec", "Kłodzko"
  ], true);
  addGroup(2, "woj. opolskie", [
    "Opole", "Brzeg", "Nysa", "Kędzierzyn-Koźle", "Kluczbork", "Prudnik", "Krapkowice",
    "Strzelce Opolskie", "Olesno", "Namysłów"
  ], false);

  addGroup(3, "woj. mazowieckie", [
    "Warszawa", "Radom", "Płock", "Ciechanów", "Mława", "Pruszków", "Piaseczno",
    "Legionowo", "Grodzisk Mazowiecki", "Żyrardów", "Sochaczew", "Grójec", "Garwolin",
    "Mińsk Mazowiecki", "Wołomin", "Otwock", "Nowy Dwór Mazowiecki", "Płońsk", "Sierpc",
    "Gostynin", "Kozienice", "Przysucha", "Szydłowiec", "Warka"
  ], false);
  addGroup(3, "woj. łódzkie", [
    "Łódź", "Piotrków Trybunalski", "Skierniewice", "Pabianice", "Zgierz", "Sieradz",
    "Zduńska Wola", "Bełchatów", "Kutno", "Łowicz", "Tomaszów Mazowiecki", "Opoczno",
    "Wieluń", "Radomsko", "Łęczyca", "Rawa Mazowiecka"
  ], false);
  addGroup(3, "woj. małopolskie", [
    "Kraków", "Tarnów", "Oświęcim", "Chrzanów", "Olkusz", "Wadowice", "Bochnia",
    "Brzesko", "Dąbrowa Tarnowska", "Wieliczka", "Niepołomice", "Skawina", "Miechów"
  ], false);
  addGroup(3, "woj. małopolskie — lokalizacja do kontroli", ["Myślenice"], true);
  addGroup(3, "woj. śląskie", [
    "Katowice", "Częstochowa", "Bielsko-Biała", "Gliwice", "Zabrze", "Bytom", "Sosnowiec",
    "Tychy", "Rybnik", "Dąbrowa Górnicza", "Chorzów", "Jaworzno", "Mysłowice", "Ruda Śląska",
    "Siemianowice Śląskie", "Świętochłowice", "Piekary Śląskie", "Jastrzębie-Zdrój", "Żory",
    "Mikołów", "Tarnowskie Góry", "Racibórz", "Wodzisław Śląski", "Lubliniec", "Zawiercie"
  ], false);
  addGroup(3, "woj. świętokrzyskie", [
    "Kielce", "Ostrowiec Świętokrzyski", "Starachowice", "Skarżysko-Kamienna", "Sandomierz",
    "Busko-Zdrój", "Jędrzejów", "Końskie", "Staszów", "Włoszczowa"
  ], false);
  addGroup(3, "woj. kujawsko-pomorskie", [
    "Bydgoszcz", "Toruń", "Włocławek", "Grudziądz", "Inowrocław", "Brodnica", "Chełmno",
    "Świecie", "Nakło nad Notecią", "Żnin", "Mogilno", "Aleksandrów Kujawski", "Lipno"
  ], false);
  addGroup(3, "woj. lubelskie", [
    "Lublin", "Puławy", "Świdnik", "Kraśnik", "Łuków", "Lubartów", "Opole Lubelskie", "Ryki"
  ], false);
  addGroup(3, "woj. podkarpackie", [
    "Rzeszów", "Tarnobrzeg", "Mielec", "Stalowa Wola", "Dębica", "Jarosław", "Przemyśl",
    "Krosno", "Sanok", "Jasło", "Łańcut", "Leżajsk", "Przeworsk", "Ropczyce", "Kolbuszowa"
  ], false);
  addGroup(3, "woj. warmińsko-mazurskie — lokalizacja do kontroli", ["Iława", "Ostróda"], true);

  addGroup(4, "woj. podlaskie", [
    "Białystok", "Łomża", "Bielsk Podlaski", "Hajnówka", "Sokółka", "Augustów", "Grajewo",
    "Zambrów", "Siemiatycze", "Mońki", "Kolno", "Wysokie Mazowieckie"
  ], false);
  addGroup(4, "woj. warmińsko-mazurskie", [
    "Olsztyn", "Elbląg", "Ełk", "Giżycko", "Kętrzyn", "Mrągowo", "Szczytno", "Bartoszyce",
    "Braniewo", "Lidzbark Warmiński", "Nidzica", "Pisz", "Działdowo", "Morąg"
  ], false);
  addGroup(4, "woj. mazowieckie", ["Ostrołęka", "Siedlce", "Maków Mazowiecki", "Przasnysz", "Węgrów", "Sokołów Podlaski"], false);
  addGroup(4, "woj. lubelskie", [
    "Biała Podlaska", "Chełm", "Zamość", "Hrubieszów", "Tomaszów Lubelski", "Włodawa",
    "Biłgoraj", "Krasnystaw", "Janów Lubelski", "Parczew", "Radzyń Podlaski"
  ], false);
  addGroup(4, "woj. podkarpackie — lokalizacja do kontroli", ["Ustrzyki Dolne", "Lesko", "Brzozów"], true);

  addGroup(5, "woj. podlaskie — lokalizacja do kontroli", ["Suwałki", "Sejny"], true);
  addGroup(5, "woj. warmińsko-mazurskie — lokalizacja do kontroli", ["Olecko", "Gołdap"], true);
  addGroup(5, "woj. małopolskie — teren górski", [
    "Zakopane", "Nowy Targ", "Krynica-Zdrój", "Rabka-Zdrój", "Limanowa", "Sucha Beskidzka",
    "Gorlice", "Nowy Sącz", "Muszyna", "Piwniczna-Zdrój", "Szczawnica", "Bukowina Tatrzańska",
    "Białka Tatrzańska"
  ], true);
  addGroup(5, "woj. śląskie — teren górski", ["Żywiec", "Wisła", "Ustroń", "Szczyrk"], true);
  addGroup(5, "woj. dolnośląskie — teren górski", ["Karpacz", "Szklarska Poręba"], true);

  function normalizeText(value) {
    var output = String(value).toLowerCase();
    output = output.replace(/ł/g, "l");
    if (typeof output.normalize === "function") {
      output = output.normalize("NFD");
      output = output.replace(/[\u0300-\u036f]/g, "");
    }
    output = output.replace(/[^a-z0-9]+/g, " ");
    output = output.replace(/^\s+|\s+$/g, "");
    return output;
  }

  cities.forEach(function (city, index) {
    city.id = "rk-climate-option-" + index;
    city.search = normalizeText(city.name + " " + city.region);
  });

  cities.sort(function (a, b) {
    return a.name.localeCompare(b.name, "pl");
  });

  cities.forEach(function (city, index) {
    city.id = "rk-climate-option-" + index;
  });

  var cityInput = document.getElementById("rk-climate-city-input");
  var suggestions = document.getElementById("rk-climate-suggestions");
  var indoorInput = document.getElementById("rk-climate-indoor-temp");
  var referenceZoneInput = document.getElementById("rk-climate-reference-zone");
  var showButton = document.getElementById("rk-climate-show-result");
  var resetButton = document.getElementById("rk-climate-reset");
  var manualZoneInput = document.getElementById("rk-climate-manual-zone");
  var manualButton = document.getElementById("rk-climate-use-manual");
  var placeholder = document.getElementById("rk-climate-placeholder");
  var result = document.getElementById("rk-climate-result");
  var scenarioReference = document.getElementById("rk-climate-scenario-reference");
  var scenarioTarget = document.getElementById("rk-climate-scenario-target");
  var referenceLoad = document.getElementById("rk-climate-reference-load");
  var currentMatches = [];
  var activeIndex = -1;
  var selectedCity = null;
  var selectedZone = null;

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

  function closeSuggestions() {
    suggestions.classList.remove("is-open");
    cityInput.setAttribute("aria-expanded", "false");
    cityInput.removeAttribute("aria-activedescendant");
    activeIndex = -1;
  }

  function openSuggestions() {
    suggestions.classList.add("is-open");
    cityInput.setAttribute("aria-expanded", "true");
  }

  function scoreCity(city, query) {
    var name = normalizeText(city.name);
    if (name === query) {
      return 0;
    }
    if (name.indexOf(query) === 0) {
      return 1;
    }
    if (city.search.indexOf(query) > -1) {
      return 2;
    }
    return 99;
  }

  function findMatches(query) {
    var matches = [];
    cities.forEach(function (city) {
      var score = scoreCity(city, query);
      if (score < 99) {
        matches.push({ city: city, score: score });
      }
    });
    matches.sort(function (a, b) {
      if (a.score !== b.score) {
        return a.score - b.score;
      }
      return a.city.name.localeCompare(b.city.name, "pl");
    });
    return matches.slice(0, 9).map(function (item) {
      return item.city;
    });
  }

  function updateActiveSuggestion() {
    var buttons = suggestions.querySelectorAll(".rk-climate-suggestion");
    buttons.forEach(function (button, index) {
      if (index === activeIndex) {
        button.classList.add("is-active");
        button.setAttribute("aria-selected", "true");
        cityInput.setAttribute("aria-activedescendant", button.id);
        button.scrollIntoView({ block: "nearest" });
      } else {
        button.classList.remove("is-active");
        button.setAttribute("aria-selected", "false");
      }
    });
  }

  function selectCity(city) {
    selectedCity = city;
    selectedZone = city.zone;
    cityInput.value = city.name;
    closeSuggestions();
    scenarioTarget.value = String(city.zone);
    renderResult();
  }

  function renderSuggestions(query) {
    suggestions.textContent = "";
    currentMatches = findMatches(query);
    activeIndex = -1;

    if (currentMatches.length === 0) {
      var noResult = document.createElement("div");
      noResult.className = "rk-climate-no-result";
      noResult.textContent = "Brak miejscowości w bazie. Skorzystaj z ręcznego wyboru po zweryfikowaniu strefy.";
      suggestions.appendChild(noResult);
      openSuggestions();
      return;
    }

    currentMatches.forEach(function (city, index) {
      var button = document.createElement("button");
      var strong = document.createElement("strong");
      var small = document.createElement("small");
      button.type = "button";
      button.className = "rk-climate-suggestion";
      button.id = city.id;
      button.setAttribute("role", "option");
      button.setAttribute("data-index", String(index));
      strong.textContent = city.name;
      small.textContent = city.region + " · strefa " + zones[city.zone].roman;
      button.appendChild(strong);
      button.appendChild(small);
      button.addEventListener("click", function () {
        selectCity(city);
      });
      suggestions.appendChild(button);
    });
    openSuggestions();
  }

  cityInput.addEventListener("input", function () {
    selectedCity = null;
    selectedZone = null;
    var query = normalizeText(cityInput.value);
    if (query === "") {
      closeSuggestions();
      return;
    }
    renderSuggestions(query);
  });

  cityInput.addEventListener("keydown", function (event) {
    if (event.key === "ArrowDown") {
      event.preventDefault();
      if (currentMatches.length > 0) {
        activeIndex += 1;
        if (activeIndex >= currentMatches.length) {
          activeIndex = 0;
        }
        updateActiveSuggestion();
      }
      return;
    }
    if (event.key === "ArrowUp") {
      event.preventDefault();
      if (currentMatches.length > 0) {
        activeIndex -= 1;
        if (activeIndex < 0) {
          activeIndex = currentMatches.length - 1;
        }
        updateActiveSuggestion();
      }
      return;
    }
    if (event.key === "Enter") {
      if (activeIndex > -1) {
        event.preventDefault();
        selectCity(currentMatches[activeIndex]);
      }
      return;
    }
    if (event.key === "Escape") {
      closeSuggestions();
    }
  });

  document.addEventListener("click", function (event) {
    var inputWrap = cityInput.parentNode;
    if (inputWrap.contains(event.target) === false) {
      closeSuggestions();
    }
  });

  function findExactCity(value) {
    var query = normalizeText(value);
    var found = null;
    cities.forEach(function (city) {
      if (found === null) {
        if (normalizeText(city.name) === query) {
          found = city;
        }
      }
    });
    return found;
  }

  function percentageChange(targetDelta, referenceDelta) {
    return ((targetDelta / referenceDelta) - 1) * 100;
  }

  function formatPercentage(value) {
    if (Math.abs(value) < 0.05) {
      return "0,0%";
    }
    var sign = "";
    if (value > 0) {
      sign = "+";
    }
    return sign + formatNumber(value, 1) + "%";
  }

  function renderResult() {
    if (selectedZone === null) {
      return;
    }
    var zone = zones[selectedZone];
    var indoor = Number(indoorInput.value);
    var referenceZone = zones[Number(referenceZoneInput.value)];
    var delta = indoor - zone.temp;
    var referenceDelta = indoor - referenceZone.temp;
    var relative = percentageChange(delta, referenceDelta);
    var placeName = "Strefa wybrana ręcznie";
    var regionName = "Wynik na podstawie strefy potwierdzonej poza wyszukiwarką";
    var statusName = "Wymaga źródła";
    var noteText = "Ręczny wybór powinien wynikać z dokumentacji lokalizacji albo weryfikacji projektanta.";

    if (selectedCity !== null) {
      placeName = selectedCity.name;
      regionName = selectedCity.region;
      if (selectedCity.caution === true) {
        statusName = "Sprawdź dokładnie";
        noteText = "Lokalizacja leży na obszarze, na którym granica strefy, wysokość lub ukształtowanie terenu mogą wymagać dokładniejszej weryfikacji działki.";
      } else {
        statusName = "Wstępnie przypisana";
        noteText = "Wynik jest pomocą edukacyjną. Przed wykonaniem obliczeń projektowych potwierdź strefę dla dokładnego adresu inwestycji.";
      }
    }

    document.getElementById("rk-climate-result-place").textContent = placeName;
    document.getElementById("rk-climate-result-region").textContent = regionName;
    document.getElementById("rk-climate-result-zone").textContent = "Strefa " + zone.roman;
    document.getElementById("rk-climate-result-outdoor").textContent = zone.temp + "°C";
    document.getElementById("rk-climate-result-indoor").textContent = indoor + "°C";
    document.getElementById("rk-climate-result-delta").textContent = delta + " K";
    document.getElementById("rk-climate-result-relative").textContent = formatPercentage(relative);
    document.getElementById("rk-climate-result-status").textContent = statusName;
    document.getElementById("rk-climate-location-note").querySelector("p").textContent = noteText;
    placeholder.style.display = "none";
    result.classList.add("is-visible");
    updateScenario();
    updateChart();
  }

  function renderInputError() {
    placeholder.style.display = "flex";
    placeholder.querySelector("h4").textContent = "Wybierz miejscowość z listy";
    placeholder.querySelector("p").textContent = "Jeżeli miejscowości nie ma w bazie, użyj ręcznego wyboru dopiero po potwierdzeniu strefy.";
    result.classList.remove("is-visible");
  }

  showButton.addEventListener("click", function () {
    if (selectedCity === null) {
      var exact = findExactCity(cityInput.value);
      if (exact !== null) {
        selectCity(exact);
      } else {
        renderInputError();
      }
    } else {
      renderResult();
    }
  });

  manualButton.addEventListener("click", function () {
    var value = Number(manualZoneInput.value);
    if (zones[value]) {
      selectedCity = null;
      selectedZone = value;
      cityInput.value = "";
      scenarioTarget.value = String(value);
      renderResult();
    }
  });

  function parseLoad() {
    var raw = String(referenceLoad.value).replace(",", ".");
    var value = Number(raw);
    if (Number.isFinite(value) === false) {
      return null;
    }
    if (value <= 0) {
      return null;
    }
    return value;
  }

  function updateScenario() {
    var indoor = Number(indoorInput.value);
    var referenceId = Number(scenarioReference.value);
    var targetId = Number(scenarioTarget.value);
    var reference = zones[referenceId];
    var target = zones[targetId];
    var referenceDelta = indoor - reference.temp;
    var targetDelta = indoor - target.temp;
    var change = percentageChange(targetDelta, referenceDelta);
    var load = parseLoad();
    var title = "Strefa " + reference.roman + " → strefa " + target.roman + ": " + formatPercentage(change) + " zmiany ΔT";
    var copy = "Przy " + indoor + "°C wewnątrz różnica temperatur zmienia się z " + referenceDelta + " K na " + targetDelta + " K.";

    if (load !== null) {
      var targetLoad = load * targetDelta / referenceDelta;
      copy += " Uproszczone przeskalowanie wyniku " + formatNumber(load, 1) + " kW daje około " + formatNumber(targetLoad, 2) + " kW. To scenariusz edukacyjny, nie nowe OZC.";
    } else {
      copy += " Wpisz rzeczywisty wynik OZC, jeżeli chcesz zobaczyć orientacyjne przeskalowanie dla tego samego budynku.";
    }

    document.getElementById("rk-climate-scenario-title").textContent = title;
    document.getElementById("rk-climate-scenario-copy").textContent = copy;
  }

  function updateChart() {
    var indoor = Number(indoorInput.value);
    var selected = selectedZone;
    var reference = Number(scenarioReference.value);
    var maxDelta = indoor - zones[5].temp;
    var chartItems = document.querySelectorAll(".rk-climate-bar-item");

    chartItems.forEach(function (item) {
      var zoneId = Number(item.getAttribute("data-zone"));
      var delta = indoor - zones[zoneId].temp;
      var size = delta / maxDelta * 100;
      var fill = item.querySelector(".rk-climate-bar-fill");
      item.querySelector(".rk-climate-bar-value").textContent = delta + " K";
      fill.style.setProperty("--rk-desktop-height", size + "%");
      fill.style.setProperty("--rk-mobile-width", size + "%");
      item.classList.remove("is-selected");
      item.classList.remove("is-reference");
      if (selected !== null) {
        if (zoneId === selected) {
          item.classList.add("is-selected");
        }
      }
      if (zoneId === reference) {
        item.classList.add("is-reference");
      }
    });

    document.getElementById("rk-climate-chart").setAttribute("aria-label", "Porównanie ΔT dla temperatury wewnętrznej " + indoor + " stopni Celsjusza. Zakres od " + (indoor + 16) + " K w strefie I do " + (indoor + 24) + " K w strefie V.");
  }

  indoorInput.addEventListener("change", function () {
    if (selectedZone !== null) {
      renderResult();
    } else {
      updateScenario();
      updateChart();
    }
  });

  referenceZoneInput.addEventListener("change", function () {
    if (selectedZone !== null) {
      renderResult();
    }
  });

  scenarioReference.addEventListener("change", function () {
    updateScenario();
    updateChart();
  });
  scenarioTarget.addEventListener("change", function () {
    updateScenario();
  });
  referenceLoad.addEventListener("input", function () {
    updateScenario();
  });

  resetButton.addEventListener("click", function () {
    selectedCity = null;
    selectedZone = null;
    cityInput.value = "";
    indoorInput.value = "20";
    referenceZoneInput.value = "3";
    manualZoneInput.value = "";
    scenarioReference.value = "3";
    scenarioTarget.value = "5";
    referenceLoad.value = "";
    result.classList.remove("is-visible");
    placeholder.style.display = "flex";
    placeholder.querySelector("h4").textContent = "Wybierz miejscowość";
    placeholder.querySelector("p").textContent = "Wynik nie poda gotowej mocy domu. Pokaże właściwy punkt startowy do obliczeń.";
    closeSuggestions();
    updateScenario();
    updateChart();
  });

  updateScenario();
  updateChart();
}());
</script>
<p>Artykuł <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/">Strefy klimatyczne w Polsce – wyszukiwarka miejscowości, temperatura projektowa i OZC.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ogrzewanie podłogowe w płycie fundamentowej – projekt i montaż.</title>
		<link>https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 28 Jun 2026 16:13:31 +0000</pubDate>
				<category><![CDATA[Budowa stanu zero]]></category>
		<category><![CDATA[HVAC]]></category>
		<category><![CDATA[Ogrzewanie płaszczyznowe]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Płyta fundamentowa]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Pompy ciepła]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[budowa domu]]></category>
		<category><![CDATA[budownictwo energooszczędne]]></category>
		<category><![CDATA[energooszczędny dom]]></category>
		<category><![CDATA[fundament grzewczy]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[nowoczesne fundamenty]]></category>
		<category><![CDATA[ogrzewanie płaszczyznowe]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[ogrzewanie podłogowe w płycie fundamentowej]]></category>
		<category><![CDATA[ogrzewanie podłogowe z pompą ciepła]]></category>
		<category><![CDATA[płyta fundamentowa]]></category>
		<category><![CDATA[płyta fundamentowa z ogrzewaniem]]></category>
		<category><![CDATA[płyta grzewcza]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[termiczna płyta fundamentowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=6375</guid>

					<description><![CDATA[<p>Planowanie posadowienia budynku na etapie stanu zero to moment, w którym podejmujesz decyzje rzutujące na koszty eksploatacji domu przez najbliższe kilkadziesiąt lat. Tradycyjne ławy i ściany fundamentowe powoli ustępują miejsca nowoczesnym rozwiązaniom monolitycznym. Inwestorzy coraz częściej dostrzegają, że ogrzewanie podłogowe w płycie fundamentowej gwarantuje niespotykaną stabilność termiczną i eliminuje liniowe mostki termiczne przy gruncie. W tym artykule brutalnie rozprawiamy się z mitami wykonawczymi, analizujemy realne koszty inwestycji na bazie autentycznego Case Study z Pomorza oraz udostępniamy interaktywne kalkulatory, które pozwolą Ci samodzielnie obliczyć opłacalność oraz parametry hydrauliczne całego systemu pod Twoją pompę ciepła.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/">Ogrzewanie podłogowe w płycie fundamentowej – projekt i montaż.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-slab-guide {
    --rk-navy: #0b2536;
    --rk-navy-2: #12394d;
    --rk-navy-3: #1b465b;
    --rk-cyan: #29c4d7;
    --rk-cyan-dark: #078fb3;
    --rk-cyan-soft: #def7fa;
    --rk-orange: #ff6846;
    --rk-orange-dark: #e44f31;
    --rk-yellow: #f2b526;
    --rk-green: #2fcda1;
    --rk-green-dark: #168267;
    --rk-red: #d7504a;
    --rk-purple: #6963ce;
    --rk-ink: #10283a;
    --rk-copy: #3c5668;
    --rk-muted: #6b8191;
    --rk-line: #d3e2e8;
    --rk-bg: #f3f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow-wrap: anywhere;
    width: 100%;
  }

  #rk-slab-guide,
  #rk-slab-guide * {
    box-sizing: border-box;
    min-width: 0;
  }

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

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

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

  #rk-slab-guide button:focus-visible,
  #rk-slab-guide a:focus-visible,
  #rk-slab-guide summary:focus-visible,
  #rk-slab-guide select:focus-visible {
    outline: 3px solid rgba(41, 196, 215, 0.48);
    outline-offset: 3px;
  }

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

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

  #rk-slab-guide .rk-slab-hero {
    background:
      radial-gradient(circle at 89% 111%, rgba(41, 196, 215, 0.24) 0, rgba(41, 196, 215, 0.24) 17%, transparent 17.2%),
      linear-gradient(120deg, #0b2536 0%, #143e52 61%, #0d6576 100%);
    color: var(--rk-white);
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

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

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

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

  #rk-slab-guide .rk-slab-hero-title {
    font-size: clamp(2.35rem, 5.7vw, 5.15rem);
    margin: 0;
    max-width: 1180px;
  }

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

  #rk-slab-guide .rk-slab-hero-lead {
    color: #e3f0f4;
    font-size: clamp(1.08rem, 2vw, 1.43rem);
    line-height: 1.55;
    margin: 27px 0 0;
    max-width: 1080px;
  }

  #rk-slab-guide .rk-slab-hero-tags,
  #rk-slab-guide .rk-slab-meta,
  #rk-slab-guide .rk-slab-shortcuts {
    display: flex;
    flex-wrap: wrap;
  }

  #rk-slab-guide .rk-slab-hero-tags {
    gap: 10px;
    margin-top: 30px;
  }

  #rk-slab-guide .rk-slab-hero-tags span {
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 999px;
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 800;
    padding: 8px 14px;
  }

  #rk-slab-guide .rk-slab-meta {
    color: #c5d9df;
    font-size: 0.83rem;
    font-weight: 700;
    gap: 12px 24px;
    margin-top: 34px;
  }

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

  #rk-slab-guide .rk-slab-shortcuts {
    align-items: center;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    gap: 9px;
    padding: 22px 34px;
    position: static;
  }

  #rk-slab-guide .rk-slab-shortcuts-label {
    color: var(--rk-ink);
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-right: 4px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-shortcuts a {
    background: #f1f6f8;
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--rk-ink);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    padding: 8px 12px;
    text-decoration: none;
  }

  #rk-slab-guide .rk-slab-shortcuts a:hover,
  #rk-slab-guide .rk-slab-shortcuts a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: #91dce5;
    color: #075f78;
  }

  #rk-slab-guide .rk-slab-section {
    padding: 64px 58px;
  }

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

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

  #rk-slab-guide .rk-slab-section-dark {
    background: var(--rk-navy);
    color: #ffffff;
  }

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

  #rk-slab-guide .rk-slab-section-dark .rk-slab-eyebrow,
  #rk-slab-guide .rk-slab-author-head .rk-slab-eyebrow {
    color: #68e6ef;
  }

  #rk-slab-guide .rk-slab-section-title,
  #rk-slab-guide .rk-slab-author-title {
    color: var(--rk-ink);
    font-size: clamp(2rem, 4vw, 3.65rem);
    margin: 0;
    max-width: 1080px;
  }

  #rk-slab-guide .rk-slab-section-dark .rk-slab-section-title,
  #rk-slab-guide .rk-slab-author-head .rk-slab-author-title {
    color: #ffffff;
  }

  #rk-slab-guide .rk-slab-lead {
    color: var(--rk-copy);
    font-size: clamp(1.03rem, 1.7vw, 1.25rem);
    line-height: 1.7;
    margin: 22px 0 0;
    max-width: 1120px;
  }

  #rk-slab-guide .rk-slab-section-dark .rk-slab-lead,
  #rk-slab-guide .rk-slab-section-dark .rk-slab-copy {
    color: #c8dbe2;
  }

  #rk-slab-guide .rk-slab-copy {
    color: var(--rk-copy);
    margin: 22px 0 0;
  }

  #rk-slab-guide .rk-slab-copy strong,
  #rk-slab-guide .rk-slab-lead strong {
    color: var(--rk-ink);
  }

  #rk-slab-guide .rk-slab-section-dark .rk-slab-copy strong,
  #rk-slab-guide .rk-slab-section-dark .rk-slab-lead strong {
    color: #ffffff;
  }

  #rk-slab-guide .rk-slab-answer {
    background: linear-gradient(135deg, #e6fafd 0%, #f8fcfd 100%);
    border: 1px solid #9cdfe8;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 18px;
    margin-top: 28px;
    padding: 27px 29px;
  }

  #rk-slab-guide .rk-slab-answer strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.24rem;
    line-height: 1.4;
  }

  #rk-slab-guide .rk-slab-answer p {
    color: var(--rk-copy);
    margin: 10px 0 0;
  }

  #rk-slab-guide .rk-slab-grid-2,
  #rk-slab-guide .rk-slab-grid-3,
  #rk-slab-guide .rk-slab-grid-4,
  #rk-slab-guide .rk-slab-source-grid,
  #rk-slab-guide .rk-slab-author-facts {
    display: grid;
    gap: 18px;
    margin-top: 30px;
  }

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

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

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

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

  #rk-slab-guide .rk-slab-section-soft .rk-slab-card {
    background: rgba(255, 255, 255, 0.88);
  }

  #rk-slab-guide .rk-slab-section-dark .rk-slab-card {
    background: #17394b;
    border-color: #376177;
  }

  #rk-slab-guide .rk-slab-card-number,
  #rk-slab-guide .rk-slab-icon {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 10px;
    color: #076c85;
    display: inline-flex;
    font-size: 0.82rem;
    font-weight: 900;
    height: 36px;
    justify-content: center;
    margin-bottom: 14px;
    min-width: 36px;
    padding: 0 10px;
  }

  #rk-slab-guide .rk-slab-section-dark .rk-slab-card-number,
  #rk-slab-guide .rk-slab-section-dark .rk-slab-icon {
    background: var(--rk-cyan);
    color: #082c3c;
  }

  #rk-slab-guide .rk-slab-card h3,
  #rk-slab-guide .rk-slab-card h4 {
    color: var(--rk-ink);
    font-size: 1.12rem;
    line-height: 1.3;
    margin: 0 0 9px;
  }

  #rk-slab-guide .rk-slab-section-dark .rk-slab-card h3,
  #rk-slab-guide .rk-slab-section-dark .rk-slab-card h4 {
    color: #ffffff;
  }

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

  #rk-slab-guide .rk-slab-section-dark .rk-slab-card p,
  #rk-slab-guide .rk-slab-section-dark .rk-slab-card li {
    color: #c8dce3;
  }

  #rk-slab-guide .rk-slab-note {
    background: #fff6e2;
    border-left: 6px solid var(--rk-yellow);
    border-radius: 14px;
    color: #5b4a1d;
    margin-top: 26px;
    padding: 18px 21px;
  }

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

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

  #rk-slab-guide .rk-slab-note-bad {
    background: #fff0ec;
    border-left-color: var(--rk-orange);
    color: #743425;
  }

  #rk-slab-guide .rk-slab-table-wrap {
    margin-top: 30px;
    overflow-x: auto;
  }

  #rk-slab-guide table {
    border-collapse: separate;
    border-spacing: 0;
    min-width: 760px;
    width: 100%;
  }

  #rk-slab-guide th {
    background: var(--rk-navy);
    border-bottom: 1px solid #31576a;
    color: #ffffff;
    font-size: 0.78rem;
    letter-spacing: 0.04em;
    padding: 15px 16px;
    text-align: left;
    text-transform: uppercase;
  }

  #rk-slab-guide th:first-child {
    border-radius: 14px 0 0;
  }

  #rk-slab-guide th:last-child {
    border-radius: 0 14px 0 0;
  }

  #rk-slab-guide td {
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    color: var(--rk-copy);
    padding: 16px;
    vertical-align: top;
  }

  #rk-slab-guide tbody tr td:first-child {
    border-left: 1px solid var(--rk-line);
  }

  #rk-slab-guide tbody tr td:last-child {
    border-right: 1px solid var(--rk-line);
  }

  #rk-slab-guide tbody tr:last-child td:first-child {
    border-radius: 0 0 0 14px;
  }

  #rk-slab-guide tbody tr:last-child td:last-child {
    border-radius: 0 0 14px;
  }

  #rk-slab-guide td strong {
    color: var(--rk-ink);
  }

  #rk-slab-guide .rk-slab-bullets {
    color: var(--rk-copy);
    margin: 20px 0 0;
    padding-left: 22px;
  }

  #rk-slab-guide .rk-slab-bullets li + li {
    margin-top: 9px;
  }

  #rk-slab-guide .rk-slab-flow {
    display: grid;
    gap: 12px;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-top: 30px;
  }

  #rk-slab-guide .rk-slab-flow-step {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-top: 5px solid var(--rk-cyan);
    border-radius: 14px;
    padding: 19px;
    position: relative;
  }

  #rk-slab-guide .rk-slab-flow-step strong {
    color: var(--rk-ink);
    display: block;
    margin-bottom: 6px;
  }

  #rk-slab-guide .rk-slab-flow-step span {
    color: var(--rk-copy);
    display: block;
    font-size: 0.88rem;
  }

  #rk-slab-guide .rk-slab-modules {
    background: var(--rk-navy);
    border-radius: 22px;
    margin-top: 32px;
    padding: 28px;
  }

  #rk-slab-guide .rk-slab-module-intro {
    color: #c8dce3;
    margin: 0 0 20px;
  }

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

  #rk-slab-guide .rk-slab-module-button {
    background: #173e51;
    border: 1px solid #356178;
    border-radius: 14px;
    color: #ffffff;
    cursor: pointer;
    font-weight: 900;
    line-height: 1.35;
    min-height: 92px;
    padding: 15px;
    text-align: left;
  }

  #rk-slab-guide .rk-slab-module-button span {
    color: #71e6ef;
    display: block;
    font-size: 0.72rem;
    letter-spacing: 0.08em;
    margin-bottom: 5px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-module-button[aria-selected="true"] {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: #072838;
  }

  #rk-slab-guide .rk-slab-module-button[aria-selected="true"] span {
    color: #094f62;
  }

  #rk-slab-guide .rk-slab-module-panel {
    background: #ffffff;
    border-radius: 17px;
    margin-top: 18px;
    padding: 26px;
  }

  #rk-slab-guide .rk-slab-module-panel h3 {
    color: var(--rk-ink);
    font-size: clamp(1.35rem, 2.8vw, 2rem);
    line-height: 1.25;
    margin: 0;
  }

  #rk-slab-guide .rk-slab-module-panel > p {
    color: var(--rk-copy);
    margin: 10px 0 0;
  }

  #rk-slab-guide .rk-slab-module-facts {
    display: grid;
    gap: 13px;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    margin-top: 20px;
  }

  #rk-slab-guide .rk-slab-module-fact {
    background: #f3f8fa;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-slab-guide .rk-slab-module-fact strong {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.73rem;
    letter-spacing: 0.07em;
    margin-bottom: 6px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-module-fact span {
    color: var(--rk-copy);
  }

  #rk-slab-guide .rk-slab-analyzer {
    background: #102f42;
    border: 1px solid #315a70;
    border-radius: 22px;
    margin-top: 32px;
    padding: 28px;
  }

  #rk-slab-guide .rk-slab-analyzer-head {
    border-bottom: 1px solid #315a70;
    margin-bottom: 25px;
    padding-bottom: 20px;
  }

  #rk-slab-guide .rk-slab-analyzer-head h3 {
    color: #ffffff;
    font-size: clamp(1.55rem, 3vw, 2.3rem);
    line-height: 1.2;
    margin: 0;
  }

  #rk-slab-guide .rk-slab-analyzer-head p {
    color: #bad3dc;
    margin: 9px 0 0;
  }

  #rk-slab-guide .rk-slab-analyzer-stage {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 17px;
    margin-top: 18px;
    padding: 22px;
  }

  #rk-slab-guide .rk-slab-stage-head {
    align-items: flex-start;
    display: flex;
    gap: 13px;
    margin-bottom: 18px;
  }

  #rk-slab-guide .rk-slab-stage-number {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 10px;
    color: #082c3c;
    display: inline-flex;
    flex: 0 0 38px;
    font-weight: 900;
    height: 38px;
    justify-content: center;
  }

  #rk-slab-guide .rk-slab-stage-head h4 {
    color: #ffffff;
    font-size: 1.15rem;
    line-height: 1.3;
    margin: 0;
  }

  #rk-slab-guide .rk-slab-stage-head p {
    color: #aecad5;
    font-size: 0.88rem;
    margin: 4px 0 0;
  }

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

  #rk-slab-guide .rk-slab-field {
    display: block;
  }

  #rk-slab-guide .rk-slab-field span {
    color: #eaf6f8;
    display: block;
    font-size: 0.78rem;
    font-weight: 800;
    line-height: 1.35;
    margin-bottom: 7px;
  }

  #rk-slab-guide .rk-slab-field select {
    appearance: auto;
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    color: var(--rk-ink);
    min-height: 48px;
    padding: 10px 12px;
    width: 100%;
  }

  #rk-slab-guide .rk-slab-analyzer-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 11px;
    margin-top: 20px;
  }

  #rk-slab-guide .rk-slab-analyze-button,
  #rk-slab-guide .rk-slab-reset-button {
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    min-height: 48px;
    padding: 11px 18px;
  }

  #rk-slab-guide .rk-slab-analyze-button {
    background: var(--rk-orange);
    border: 1px solid var(--rk-orange);
    color: #ffffff;
  }

  #rk-slab-guide .rk-slab-analyze-button:hover {
    background: var(--rk-orange-dark);
  }

  #rk-slab-guide .rk-slab-reset-button {
    background: transparent;
    border: 1px solid #5d7c8d;
    color: #ffffff;
  }

  #rk-slab-guide .rk-slab-result {
    background: #ffffff;
    border-left: 7px solid var(--rk-yellow);
    border-radius: 17px;
    margin-top: 22px;
    padding: 24px;
  }

  #rk-slab-guide .rk-slab-result.is-good {
    border-left-color: var(--rk-green);
  }

  #rk-slab-guide .rk-slab-result.is-stop {
    border-left-color: var(--rk-orange);
  }

  #rk-slab-guide .rk-slab-result-status {
    color: var(--rk-ink);
    font-size: clamp(1.35rem, 2.6vw, 2rem);
    font-weight: 900;
    line-height: 1.25;
    margin: 0;
  }

  #rk-slab-guide .rk-slab-result-intro {
    color: var(--rk-copy);
    margin: 8px 0 0;
  }

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

  #rk-slab-guide .rk-slab-result-count {
    background: #f3f8fa;
    border: 1px solid var(--rk-line);
    border-radius: 12px;
    padding: 13px;
    text-align: center;
  }

  #rk-slab-guide .rk-slab-result-count strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.45rem;
  }

  #rk-slab-guide .rk-slab-result-count span {
    color: var(--rk-muted);
    display: block;
    font-size: 0.74rem;
    font-weight: 800;
    text-transform: uppercase;
  }

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

  #rk-slab-guide .rk-slab-result-column {
    background: #f5f9fa;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-slab-guide .rk-slab-result-column h4 {
    color: var(--rk-ink);
    font-size: 0.88rem;
    letter-spacing: 0.05em;
    margin: 0 0 10px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-result-column.is-ok h4 {
    color: var(--rk-green-dark);
  }

  #rk-slab-guide .rk-slab-result-column.is-check h4 {
    color: #88600e;
  }

  #rk-slab-guide .rk-slab-result-column.is-stop h4 {
    color: #a83d2d;
  }

  #rk-slab-guide .rk-slab-result-column ul {
    color: var(--rk-copy);
    font-size: 0.88rem;
    margin: 0;
    padding-left: 18px;
  }

  #rk-slab-guide .rk-slab-result-column li + li {
    margin-top: 7px;
  }

  #rk-slab-guide .rk-slab-disclaimer {
    color: #6c8190;
    font-size: 0.78rem;
    margin: 15px 0 0;
  }

  #rk-slab-guide .rk-slab-cta {
    background:
      radial-gradient(circle at 93% 120%, rgba(41, 196, 215, 0.22) 0, rgba(41, 196, 215, 0.22) 19%, transparent 19.2%),
      linear-gradient(125deg, #0b2536 0%, #153e51 62%, #0d6272 100%);
    border-radius: 21px;
    color: #ffffff;
    margin-top: 34px;
    overflow: hidden;
    padding: 36px;
  }

  #rk-slab-guide .rk-slab-cta-title {
    color: #ffffff;
    font-size: clamp(1.7rem, 3.3vw, 2.8rem);
    margin: 0;
    max-width: 970px;
  }

  #rk-slab-guide .rk-slab-cta p {
    color: #cee0e6;
    margin: 14px 0 0;
    max-width: 970px;
  }

  #rk-slab-guide .rk-slab-cta-button {
    background: var(--rk-orange);
    border-radius: 12px;
    box-shadow: 0 12px 25px rgba(255, 104, 70, 0.24);
    color: #ffffff;
    display: inline-block;
    font-weight: 900;
    margin-top: 22px;
    padding: 14px 20px;
    text-decoration: none;
  }

  #rk-slab-guide .rk-slab-cta-button:hover,
  #rk-slab-guide .rk-slab-cta-button:focus-visible {
    background: #ffffff;
    color: var(--rk-orange-dark);
  }

  #rk-slab-guide .rk-slab-link-disclosure {
    color: #a9c4ce;
    display: block;
    font-size: 0.75rem;
    margin-top: 12px;
  }

  #rk-slab-guide .rk-slab-final {
    background: linear-gradient(180deg, #f4fafb 0%, #ffffff 100%);
  }

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

  #rk-slab-guide .rk-slab-source-card {
    background: #f2f7f9;
    border: 1px solid #cfe0e7;
    border-radius: 15px;
    padding: 20px;
  }

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

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

  #rk-slab-guide .rk-slab-responsibility {
    background: #fff0eb;
    border-left: 6px solid var(--rk-orange);
    border-radius: 14px;
    color: #613427;
    margin-top: 26px;
    padding: 19px 22px;
  }

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

  #rk-slab-guide .rk-slab-faq {
    display: grid;
    gap: 12px;
    margin-top: 30px;
  }

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

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

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

  #rk-slab-guide .rk-slab-faq summary::after {
    color: var(--rk-cyan-dark);
    content: "+";
    font-size: 1.55rem;
    font-weight: 700;
    position: absolute;
    right: 20px;
    top: 12px;
  }

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

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

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

  #rk-slab-guide .rk-slab-author {
    background: #eef6f8;
    border-top: 1px solid var(--rk-line);
    padding: 64px 58px;
  }

  #rk-slab-guide .rk-slab-author-card {
    border-radius: 24px;
    box-shadow: 0 18px 45px rgba(11, 37, 54, 0.12);
    overflow: hidden;
  }

  #rk-slab-guide .rk-slab-author-head {
    align-items: end;
    background: linear-gradient(125deg, #0b2536 0%, #153e51 62%, #164e61 100%);
    color: #ffffff;
    display: grid;
    gap: 24px;
    grid-template-columns: minmax(0, 1fr) auto;
    padding: 38px 46px;
  }

  #rk-slab-guide .rk-slab-author-head p {
    color: #d4e5ea;
    font-size: 1.08rem;
    margin: 15px 0 0;
    max-width: 900px;
  }

  #rk-slab-guide .rk-slab-author-update {
    border: 1px solid #487286;
    border-radius: 999px;
    color: #ffffff;
    font-size: 0.78rem;
    font-weight: 900;
    padding: 11px 16px;
    white-space: nowrap;
  }

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

  #rk-slab-guide .rk-slab-author-side {
    align-items: center;
    background: #12384b;
    color: #ffffff;
    display: flex;
    flex-direction: column;
    padding: 43px 28px;
    text-align: center;
  }

  #rk-slab-guide .rk-slab-author-photo {
    background: #ffffff;
    border: 6px solid rgba(255, 255, 255, 0.2);
    border-radius: 50%;
    overflow: hidden;
    width: 166px;
  }

  #rk-slab-guide .rk-slab-author-name {
    font-size: 1.32rem;
    font-weight: 900;
    margin-top: 20px;
  }

  #rk-slab-guide .rk-slab-author-role {
    color: #bcd2db;
    font-size: 0.84rem;
    margin: 8px 0 0;
  }

  #rk-slab-guide .rk-slab-author-social-label {
    color: #6de5ef;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-top: 22px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-author-social {
    display: flex;
    gap: 10px;
    margin-top: 11px;
  }

  #rk-slab-guide .rk-slab-author-social a {
    align-items: center;
    background: #234d61;
    border-radius: 50%;
    color: #ffffff;
    display: inline-flex;
    font-weight: 900;
    height: 44px;
    justify-content: center;
    text-decoration: none;
    width: 44px;
  }

  #rk-slab-guide .rk-slab-author-social a:hover {
    background: var(--rk-cyan);
    color: var(--rk-navy);
  }

  #rk-slab-guide .rk-slab-author-main {
    padding: 40px;
  }

  #rk-slab-guide .rk-slab-author-quote {
    color: var(--rk-ink);
    font-size: 1.08rem;
    font-style: italic;
    font-weight: 800;
    line-height: 1.72;
    margin: 0;
    padding-left: 58px;
    position: relative;
  }

  #rk-slab-guide .rk-slab-author-quote::before {
    color: var(--rk-cyan);
    content: "“";
    font-family: Georgia, serif;
    font-size: 4.8rem;
    left: 0;
    line-height: 1;
    position: absolute;
    top: -10px;
  }

  #rk-slab-guide .rk-slab-author-main > p {
    color: var(--rk-copy);
    margin: 20px 0 0;
  }

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

  #rk-slab-guide .rk-slab-author-fact {
    background: #eef7f9;
    border: 1px solid #d2e4e9;
    border-radius: 13px;
    color: var(--rk-copy);
    font-size: 0.84rem;
    padding: 15px;
  }

  #rk-slab-guide .rk-slab-author-fact strong {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.73rem;
    letter-spacing: 0.06em;
    margin-bottom: 5px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-author-portals {
    margin-top: 22px;
  }

  #rk-slab-guide .rk-slab-author-portals strong {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.72rem;
    letter-spacing: 0.07em;
    margin-bottom: 10px;
    text-transform: uppercase;
  }

  #rk-slab-guide .rk-slab-author-portals a {
    border: 1px solid var(--rk-line);
    border-radius: 999px;
    display: inline-block;
    font-size: 0.78rem;
    font-weight: 900;
    margin: 0 7px 7px 0;
    padding: 8px 12px;
    text-decoration: none;
  }

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

  @media (max-width: 1050px) {
    #rk-slab-guide .rk-slab-grid-4,
    #rk-slab-guide .rk-slab-flow {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-slab-guide .rk-slab-result-grid,
    #rk-slab-guide .rk-slab-module-facts {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  @media (max-width: 820px) {
    #rk-slab-guide .rk-slab-hero,
    #rk-slab-guide .rk-slab-section,
    #rk-slab-guide .rk-slab-author {
      padding-left: 28px;
      padding-right: 28px;
    }

    #rk-slab-guide .rk-slab-hero::before {
      left: 28px;
    }

    #rk-slab-guide .rk-slab-shortcuts {
      padding-left: 22px;
      padding-right: 22px;
    }

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

    #rk-slab-guide .rk-slab-author-head,
    #rk-slab-guide .rk-slab-author-layout {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-slab-guide .rk-slab-author-update {
      justify-self: start;
    }
  }

  @media (max-width: 660px) {
    #rk-slab-guide .rk-slab-hero {
      padding-bottom: 42px;
      padding-top: 52px;
    }

    #rk-slab-guide .rk-slab-section,
    #rk-slab-guide .rk-slab-author {
      padding-bottom: 46px;
      padding-top: 46px;
    }

    #rk-slab-guide .rk-slab-grid-2,
    #rk-slab-guide .rk-slab-grid-3,
    #rk-slab-guide .rk-slab-grid-4,
    #rk-slab-guide .rk-slab-fields,
    #rk-slab-guide .rk-slab-source-grid,
    #rk-slab-guide .rk-slab-author-facts,
    #rk-slab-guide .rk-slab-module-grid,
    #rk-slab-guide .rk-slab-result-counts,
    #rk-slab-guide .rk-slab-flow {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-slab-guide .rk-slab-modules,
    #rk-slab-guide .rk-slab-analyzer,
    #rk-slab-guide .rk-slab-cta {
      border-radius: 17px;
      padding: 20px;
    }

    #rk-slab-guide .rk-slab-module-panel,
    #rk-slab-guide .rk-slab-analyzer-stage,
    #rk-slab-guide .rk-slab-result {
      padding: 18px;
    }

    #rk-slab-guide .rk-slab-analyzer-actions {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-slab-guide .rk-slab-analyze-button,
    #rk-slab-guide .rk-slab-reset-button,
    #rk-slab-guide .rk-slab-cta-button {
      text-align: center;
      width: 100%;
    }

    #rk-slab-guide .rk-slab-table-wrap {
      overflow: visible;
    }

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

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

    #rk-slab-guide tbody {
      display: grid;
      gap: 14px;
    }

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

    #rk-slab-guide td,
    #rk-slab-guide tbody tr td:first-child,
    #rk-slab-guide tbody tr td:last-child {
      border: 0;
      border-bottom: 1px solid #e1ebef;
      border-radius: 0;
      padding: 13px 15px;
    }

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

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

    #rk-slab-guide .rk-slab-author-head {
      padding: 29px 22px;
    }

    #rk-slab-guide .rk-slab-author-main {
      padding: 28px 21px;
    }

    #rk-slab-guide .rk-slab-author-quote {
      padding-left: 43px;
    }
  }

  @media (max-width: 430px) {
    #rk-slab-guide .rk-slab-hero,
    #rk-slab-guide .rk-slab-section,
    #rk-slab-guide .rk-slab-author {
      padding-left: 18px;
      padding-right: 18px;
    }

    #rk-slab-guide .rk-slab-hero::before {
      left: 18px;
    }

    #rk-slab-guide .rk-slab-shortcuts {
      padding-left: 14px;
      padding-right: 14px;
    }

    #rk-slab-guide .rk-slab-shortcuts a {
      flex: 1 1 calc(50% - 9px);
      text-align: center;
    }

    #rk-slab-guide .rk-slab-shortcuts-label {
      flex: 1 0 100%;
    }

    #rk-slab-guide .rk-slab-hero-title {
      font-size: 2.2rem;
    }

    #rk-slab-guide .rk-slab-section-title,
    #rk-slab-guide .rk-slab-author-title {
      font-size: 1.9rem;
    }
  }

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

<article id="rk-slab-guide" aria-labelledby="rk-slab-visual-title">
  <div class="rk-slab-shell">
    <header class="rk-slab-hero">
      <span class="rk-slab-kicker">Płyta grzewcza · projekt i odbiór 2026</span>
      <div class="rk-slab-hero-title" id="rk-slab-visual-title">Ogrzewanie podłogowe w płycie fundamentowej: <span>zabetonuj obliczenia, nie założenia</span></div>
      <p class="rk-slab-hero-lead">Rury umieszczone w nośnej płycie mogą stworzyć trwały, niskotemperaturowy system grzewczy. Warunkiem jest zamknięcie przed betonowaniem decyzji cieplnych, hydraulicznych, konstrukcyjnych i wykonawczych — bo późniejsza korekta rozstawu, pętli albo kolizji nie będzie już możliwa.</p>
      <div class="rk-slab-hero-tags" aria-label="Zakres poradnika">
        <span>OZC pomieszczeń</span>
        <span>koordynacja konstrukcji</span>
        <span>pętle i hydraulika</span>
        <span>izolacja od gruntu</span>
        <span>próba i betonowanie</span>
      </div>
      <div class="rk-slab-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 29 minut</strong></span>
        <span>Aktualizacja techniczna: <strong>16 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-slab-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-slab-shortcuts-label">Na skróty</span>
      <a href="#rk-slab-answer">Szybka odpowiedź</a>
      <a href="#rk-slab-systems">Trzy rozwiązania</a>
      <a href="#rk-slab-tradeoffs">Zalety i ograniczenia</a>
      <a href="#rk-slab-responsibility">Odpowiedzialność</a>
      <a href="#rk-slab-input">Dane wejściowe</a>
      <a href="#rk-slab-analyzer-section">Analizator</a>
      <a href="#rk-slab-coordination">6 obszarów</a>
      <a href="#rk-slab-ground">Grunt i izolacja</a>
      <a href="#rk-slab-structure">Położenie rur</a>
      <a href="#rk-slab-layout">Aktywne pola</a>
      <a href="#rk-slab-hydraulics">Pętle i przepływy</a>
      <a href="#rk-slab-pipes">Rury i system</a>
      <a href="#rk-slab-pour">Próba i beton</a>
      <a href="#rk-slab-documentation">Dokumentacja</a>
      <a href="#rk-slab-control">Bezwładność</a>
      <a href="#rk-slab-coverings">Okładziny</a>
      <a href="#rk-slab-failure">Awaria</a>
      <a href="#rk-slab-errors">Błędy</a>
      <a href="#rk-slab-checklist">Checklista</a>
      <a href="#rk-slab-final">Projekt</a>
      <a href="#rk-slab-sources">Źródła</a>
      <a href="#rk-slab-faq">FAQ</a>
      <a href="#rk-slab-author">Autor</a>
    </nav>

    <section class="rk-slab-section" id="rk-slab-answer">
      <span class="rk-slab-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-slab-section-title">Czy warto umieścić ogrzewanie podłogowe w płycie fundamentowej?</h2>
      <p class="rk-slab-lead"><strong>Tak, jeżeli instalacja i płyta powstają jako jeden skoordynowany projekt.</strong> Nie jest to jednak zwykła podłogówka przeniesiona z jastrychu do grubszego betonu. Nośna płyta, izolacja od gruntu, położenie rur, hydraulika i technologia betonowania wzajemnie na siebie wpływają.</p>
      <div class="rk-slab-answer">
        <strong>Najważniejsze pytanie nie brzmi „czy zastosować rozstaw 10 czy 15 cm?”, lecz „czy przed betonowaniem zostały zamknięte wszystkie decyzje, których później nie da się bezpiecznie zmienić?”.</strong>
        <p>Rozstaw, temperatura zasilania i długość pętli nie są stałymi wartościami dla każdej płyty. Wynikają z obciążenia cieplnego pomieszczeń, aktywnej powierzchni, układu warstw, położenia rur, okładziny, przepływów i parametrów źródła ciepła.</p>
      </div>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-icon">1</span><h3>Najpierw budynek</h3><p>OZC pomieszczenie po pomieszczeniu określa, ile mocy ma oddać konkretna część podłogi w warunkach projektowych.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">2</span><h3>Potem koordynacja</h3><p>Trasy rur, zbrojenie, przepusty, odpływy, ściany i strefy późniejszego wiercenia muszą zostać uzgodnione przed montażem.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">3</span><h3>Na końcu beton</h3><p>Betonowanie rozpoczyna się po sprawdzeniu dokumentów, próbie, opisaniu pętli i przygotowaniu planu kontroli podczas prac.</p></article>
      </div>
      <p class="rk-slab-copy">Jeżeli chcesz zacząć od podstaw, przeczytaj, czym jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a> oraz jak działa <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">wodne ogrzewanie podłogowe</a>. Ten poradnik skupia się wyłącznie na dodatkowych wymaganiach wynikających z umieszczenia rur w elemencie związanym z posadowieniem budynku.</p>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-systems">
      <span class="rk-slab-eyebrow">Najpierw nazwij właściwy układ</span>
      <h2 class="rk-slab-section-title">Płyta grzewcza, jastrych nad płytą czy system producenta?</h2>
      <p class="rk-slab-lead">Pod wspólną nazwą „podłogówka w płycie” funkcjonują różne rozwiązania. Nie można bez sprawdzenia przenosić między nimi położenia rur, dylatacji, sposobu mocowania ani procedury rozruchu.</p>
      <div class="rk-slab-table-wrap">
        <table>
          <thead><tr><th>Rozwiązanie</th><th>Gdzie znajdują się rury?</th><th>Co jest kluczowe?</th><th>Czego nie zakładać?</th></tr></thead>
          <tbody>
            <tr><td data-label="Rozwiązanie"><strong>Rury w nośnej płycie</strong></td><td data-label="Położenie">W przekroju elementu konstrukcyjnego, na poziomie wskazanym w uzgodnionej dokumentacji.</td><td data-label="Kluczowe">Koordynacja z konstruktorem, zbrojeniem, otuliną, przepustami i technologią betonowania.</td><td data-label="Nie zakładaj">Że detal znany z jastrychu można skopiować bez zmian.</td></tr>
            <tr><td data-label="Rozwiązanie"><strong>Jastrych nad płytą</strong></td><td data-label="Położenie">W oddzielnej warstwie podłogowej wykonanej nad konstrukcją i jej izolacjami.</td><td data-label="Kluczowe">Układ podłogi, dylatacje jastrychu, izolacja, rozruch i okładzina.</td><td data-label="Nie zakładaj">Że płyta nośna automatycznie staje się powierzchnią grzewczą.</td></tr>
            <tr><td data-label="Rozwiązanie"><strong>Kompletny system płytowy</strong></td><td data-label="Położenie">Zgodnie z dokumentacją konkretnego systemu i projektem dla budynku.</td><td data-label="Kluczowe">Zakres odpowiedzialności dostawcy, dokumentacja, detale i ograniczenia rozwiązania.</td><td data-label="Nie zakładaj">Że każda „płyta termiczna” ma identyczny układ warstw.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-slab-note"><p><strong>Granica poradnika:</strong> omawiam projekt instalacji grzewczej i jej koordynację. Nie określam klasy betonu, zbrojenia, grubości płyty ani nośności — te parametry należą do projektu konstrukcyjnego i geotechnicznego.</p></div>
    </section>

    <section class="rk-slab-section" id="rk-slab-tradeoffs">
      <span class="rk-slab-eyebrow">Bez zachwytu i bez straszenia</span>
      <h2 class="rk-slab-section-title">Rzeczywiste zalety i ograniczenia ogrzewanej płyty</h2>
      <p class="rk-slab-lead">Masa betonu może stabilizować temperaturę i współpracować z niskotemperaturowym źródłem, ale nie gwarantuje automatycznie niskich rachunków. O wyniku decyduje cały budynek oraz sposób sterowania energią zgromadzoną w konstrukcji.</p>
      <div class="rk-slab-grid-2">
        <article class="rk-slab-card"><span class="rk-slab-card-number">KORZYŚCI</span><h3>Co może działać na plus</h3><ul class="rk-slab-bullets"><li>duża powierzchnia oddawania ciepła,</li><li>możliwość pracy przy niskiej temperaturze zasilania,</li><li>stabilna temperatura powierzchni i powietrza,</li><li>brak grzejników zajmujących ściany,</li><li>akumulacja ograniczająca krótkie wahania.</li></ul></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">OGRANICZENIA</span><h3>Co trzeba zaakceptować</h3><ul class="rk-slab-bullets"><li>bardzo małą możliwość korekty po betonowaniu,</li><li>dłuższą reakcję na zmianę nastawy i zyski słoneczne,</li><li>konieczność koordynacji wielu branż,</li><li>większą wagę dokumentacji powykonawczej,</li><li>naprawę zależną od zgody i oceny konstrukcyjnej.</li></ul></article>
      </div>
      <p class="rk-slab-copy">Opłacalność należy porównywać na podstawie dwóch kompletnych ofert o tym samym zakresie. Cena płyty z instalacją nie może być zestawiana wyłącznie z ceną samych ław, a następnie automatycznie uznawana za tańszą albo droższą.</p>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-responsibility">
      <span class="rk-slab-eyebrow">Jedna płyta, kilka odpowiedzialności</span>
      <h2 class="rk-slab-section-title">Kto projektuje ogrzewanie, a kto zatwierdza jego miejsce w konstrukcji?</h2>
      <p class="rk-slab-lead">Instalator nie powinien samodzielnie wybierać położenia rur w nośnej płycie, a projektant instalacji nie zastępuje konstruktora. Bezpieczna realizacja wymaga jednoznacznego podziału zakresów.</p>
      <div class="rk-slab-grid-4">
        <article class="rk-slab-card"><span class="rk-slab-card-number">01</span><h3>Geotechnika i posadowienie</h3><p>Warunki gruntu, wody, przygotowania podłoża i założenia dotyczące fundamentu.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">02</span><h3>Konstruktor</h3><p>Geometria płyty, zbrojenie, otulina, nośność, przerwy robocze, przepusty i dopuszczone sposoby prowadzenia instalacji.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">03</span><h3>Projektant instalacji</h3><p>OZC, moc powierzchni, rozstawy, pętle, przepływy, opory, rozdzielacz, parametry wody i źródła.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">04</span><h3>Wykonawca i kierownik</h3><p>Zgodność wykonania, ochrona instalacji, próba, kontrola betonowania, protokoły i dokumentacja powykonawcza.</p></article>
      </div>
      <div class="rk-slab-note rk-slab-note-bad"><p><strong>Sygnał ostrzegawczy:</strong> jeżeli nikt nie potrafi wskazać dokumentu określającego położenie i mocowanie rur względem zbrojenia, instalacja nie jest gotowa do montażu w elemencie konstrukcyjnym.</p></div>
    </section>

    <section class="rk-slab-section" id="rk-slab-input">
      <span class="rk-slab-eyebrow">Dane przed pierwszym metrem rury</span>
      <h2 class="rk-slab-section-title">Co trzeba policzyć i uzgodnić przed rozpoczęciem montażu?</h2>
      <p class="rk-slab-lead">Powierzchnia domu nie wystarcza do rozmieszczenia pętli. Dwa pomieszczenia o identycznym metrażu mogą mieć inne straty, inne pola wyłączone i inną dostępną powierzchnię oddawania ciepła.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-icon">Q</span><h3>Obciążenie każdego pomieszczenia</h3><p>Obliczenia dla temperatury projektowej, przegród, wentylacji i rzeczywistej lokalizacji budynku.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">A</span><h3>Powierzchnia aktywna</h3><p>Pola dostępne po odjęciu stałej zabudowy, przepustów, odpływów i stref wyłączonych przez projekt.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">R</span><h3>Opór podłogi</h3><p>Warstwy nad rurami, planowana okładzina i podkład wpływają na potrzebną temperaturę czynnika.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">T</span><h3>Temperatury pracy</h3><p>Zasilanie i powrót wynikają z wymaganej mocy oraz charakterystyki konkretnego układu.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">V̇</span><h3>Przepływy i opory</h3><p>Każda pętla wymaga przepływu odpowiadającego mocy i sprawdzenia drogi hydraulicznej.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">K</span><h3>Koordynacja konstrukcyjna</h3><p>Rury, mocowanie, przejścia i strefy bez instalacji muszą być zgodne z projektem płyty.</p></article>
      </div>
      <p class="rk-slab-copy">Punkt wyjścia stanowią <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">obliczenia strat cieplnych budynku</a>, poprawna <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/">temperatura projektowa dla lokalizacji</a> oraz rzut z kompletną konstrukcją i instalacjami.</p>
    </section>

    <section class="rk-slab-section rk-slab-section-dark" id="rk-slab-analyzer-section">
      <span class="rk-slab-eyebrow">Główne narzędzie artykułu</span>
      <h2 class="rk-slab-section-title">Analizator: czy instalacja jest gotowa do betonowania?</h2>
      <p class="rk-slab-lead">Odpowiedz na podstawie dokumentów i protokołów, a nie ustnych deklaracji. Wynik nie zatwierdza konstrukcji — pokazuje braki, które trzeba zamknąć przed rozpoczęciem nieodwracalnego etapu.</p>
      <div class="rk-slab-analyzer" id="rk-slab-analyzer">
        <div class="rk-slab-analyzer-head">
          <h3>Kontrola czterech obszarów przed zamówieniem betonu</h3>
          <p>Wybierz „potwierdzone” tylko wtedy, gdy możesz wskazać obliczenie, rysunek, uzgodnienie albo protokół.</p>
        </div>

        <div class="rk-slab-analyzer-stage">
          <div class="rk-slab-stage-head"><span class="rk-slab-stage-number">1</span><div><h4>Projekt cieplny i aktywna powierzchnia</h4><p>Czy wiadomo, ile ciepła ma oddać każde pomieszczenie i z jakiej powierzchni?</p></div></div>
          <div class="rk-slab-fields">
            <label class="rk-slab-field"><span>OZC wykonane osobno dla każdego pomieszczenia</span><select id="rk-slab-ozc"><option value="unknown">Brak danych / nie wiem</option><option value="yes">Potwierdzone w obliczeniach</option><option value="no">Nie wykonano</option></select></label>
            <label class="rk-slab-field"><span>Aktywne pola i wszystkie strefy wyłączone</span><select id="rk-slab-active"><option value="unknown">Nieustalone</option><option value="yes">Pokazane na skoordynowanym rzucie</option><option value="no">Rury mają być układane na budowie „na bieżąco”</option></select></label>
            <label class="rk-slab-field"><span>Moc powierzchni sprawdzona dla układu warstw</span><select id="rk-slab-output"><option value="unknown">Brak obliczenia</option><option value="yes">Sprawdzona dla konstrukcji i okładziny</option><option value="no">Przyjęto wyłącznie typową wartość W/m²</option></select></label>
            <label class="rk-slab-field"><span>Temperatura zasilania wynika z obliczeń</span><select id="rk-slab-temperature"><option value="unknown">Nieustalona</option><option value="yes">Powiązana z mocą i źródłem ciepła</option><option value="no">Przyjęta z góry bez sprawdzenia</option></select></label>
          </div>
        </div>

        <div class="rk-slab-analyzer-stage">
          <div class="rk-slab-stage-head"><span class="rk-slab-stage-number">2</span><div><h4>Konstrukcja i koordynacja międzybranżowa</h4><p>Projekt instalacji nie może samodzielnie rozstrzygać o zbrojeniu, otulinie i dopuszczonych przejściach.</p></div></div>
          <div class="rk-slab-fields">
            <label class="rk-slab-field"><span>Projekt konstrukcyjny płyty jest zakończony</span><select id="rk-slab-structural"><option value="unknown">Brak potwierdzenia</option><option value="yes">Dokumentacja jest dostępna</option><option value="no">Konstrukcja nadal jest zmieniana</option></select></label>
            <label class="rk-slab-field"><span>Położenie i mocowanie rur zaakceptowane konstrukcyjnie</span><select id="rk-slab-position"><option value="unknown">Nie ma pisemnego uzgodnienia</option><option value="yes">Pokazane lub zatwierdzone w dokumentacji</option><option value="no">Wybrał je samodzielnie wykonawca instalacji</option></select></label>
            <label class="rk-slab-field"><span>Przepusty, odpływy, kotwy, ściany i zbrojenie skoordynowane</span><select id="rk-slab-collisions"><option value="unknown">Koordynacja nie jest zakończona</option><option value="yes">Kolizje sprawdzono na wspólnym rzucie</option><option value="no">Branże korzystają z różnych, niespójnych rysunków</option></select></label>
            <label class="rk-slab-field"><span>Zakres odpowiedzialności uczestników jest ustalony</span><select id="rk-slab-roles"><option value="unknown">Nie jest jednoznaczny</option><option value="yes">Wiadomo, kto zatwierdza każdy etap</option><option value="no">Decyzje pozostawiono ekipom na dzień betonowania</option></select></label>
          </div>
        </div>

        <div class="rk-slab-analyzer-stage">
          <div class="rk-slab-stage-head"><span class="rk-slab-stage-number">3</span><div><h4>Hydraulika i konkretny system rur</h4><p>Długość pętli i przepływ muszą zostać ocenione razem, a nie przez jedną granicę metrażu.</p></div></div>
          <div class="rk-slab-fields">
            <label class="rk-slab-field"><span>Średnica, rozstaw i typ rury są określone</span><select id="rk-slab-pipe"><option value="unknown">Nieustalone</option><option value="yes">Wskazane w projekcie i dokumentacji systemu</option><option value="no">Produkt ma zostać wybrany po cenie na budowie</option></select></label>
            <label class="rk-slab-field"><span>Długości, przepływy i straty ciśnienia policzone dla pętli</span><select id="rk-slab-loops"><option value="unknown">Niepoliczone</option><option value="yes">Zestawione dla wszystkich obwodów</option><option value="no">Przyjęto tylko maksymalną długość w metrach</option></select></label>
            <label class="rk-slab-field"><span>Położenie rozdzielacza i dobiegi są na rzucie</span><select id="rk-slab-manifold"><option value="unknown">Nieustalone</option><option value="yes">Uwzględnione w długościach i koordynacji</option><option value="no">Miejsce zostanie wybrane po wykonaniu płyty</option></select></label>
            <label class="rk-slab-field"><span>Karta rury, złączki i wymagania montażowe są dostępne</span><select id="rk-slab-system"><option value="unknown">Brak dokumentów</option><option value="yes">Dokumentacja dotyczy konkretnego typu i wymiaru</option><option value="no">Jest tylko opis handlowy produktu</option></select></label>
          </div>
        </div>

        <div class="rk-slab-analyzer-stage">
          <div class="rk-slab-stage-head"><span class="rk-slab-stage-number">4</span><div><h4>Próba, betonowanie i zapis powykonawczy</h4><p>Kontrola nie kończy się w chwili zamocowania ostatniej pętli.</p></div></div>
          <div class="rk-slab-fields">
            <label class="rk-slab-field"><span>Procedura próby i kryteria odbioru są ustalone</span><select id="rk-slab-test-plan"><option value="unknown">Nieustalone</option><option value="yes">Opisane zgodnie z projektem i systemem</option><option value="no">Próba ma być wykonana bez przyjętej procedury</option></select></label>
            <label class="rk-slab-field"><span>Próba została wykonana i zaprotokołowana</span><select id="rk-slab-test"><option value="unknown">Jeszcze nie wykonano / brak protokołu</option><option value="yes">Wynik zaakceptowano przed betonowaniem</option><option value="no">Betonowanie planowane bez próby</option></select></label>
            <label class="rk-slab-field"><span>Ustalono kontrolę instalacji podczas betonowania</span><select id="rk-slab-monitor"><option value="unknown">Nie ma planu kontroli</option><option value="yes">Wyznaczono osoby, procedurę i reakcję na problem</option><option value="no">Instalacja nie będzie monitorowana</option></select></label>
            <label class="rk-slab-field"><span>Zdjęcia, oznaczenia pętli i rzut powykonawczy</span><select id="rk-slab-asbuilt"><option value="unknown">Nieprzygotowane</option><option value="yes">Zaplanowane lub wykonane przed zakryciem</option><option value="no">Nie będą sporządzane</option></select></label>
          </div>
        </div>

        <div class="rk-slab-analyzer-actions">
          <button class="rk-slab-analyze-button" id="rk-slab-run" type="button">Sprawdź gotowość do betonowania</button>
          <button class="rk-slab-reset-button" id="rk-slab-reset" type="button">Wyczyść odpowiedzi</button>
        </div>

        <div class="rk-slab-result" id="rk-slab-result" aria-live="polite">
          <p class="rk-slab-result-status" id="rk-slab-result-status">Uzupełnij cztery obszary kontroli</p>
          <p class="rk-slab-result-intro" id="rk-slab-result-intro">Wynik rozdzieli elementy potwierdzone, brakujące i krytyczne przed betonowaniem.</p>
          <div class="rk-slab-result-counts" aria-label="Podsumowanie liczby odpowiedzi">
            <div class="rk-slab-result-count"><strong id="rk-slab-ok-count">0</strong><span>potwierdzone</span></div>
            <div class="rk-slab-result-count"><strong id="rk-slab-check-count">0</strong><span>do uzupełnienia</span></div>
            <div class="rk-slab-result-count"><strong id="rk-slab-stop-count">0</strong><span>krytyczne</span></div>
          </div>
          <div class="rk-slab-result-grid">
            <div class="rk-slab-result-column is-ok"><h4>Potwierdzone</h4><ul id="rk-slab-ok-list"><li>Jeszcze brak ocenionych danych.</li></ul></div>
            <div class="rk-slab-result-column is-check"><h4>Do uzupełnienia</h4><ul id="rk-slab-check-list"><li>Uzupełnij formularz na podstawie dokumentów.</li></ul></div>
            <div class="rk-slab-result-column is-stop"><h4>Warunki krytyczne</h4><ul id="rk-slab-stop-list"><li>Brak oceny nie oznacza gotowości do betonowania.</li></ul></div>
          </div>
          <p class="rk-slab-disclaimer">Analizator nie ocenia nośności, zbrojenia, klasy betonu ani geotechniki. Nie zastępuje projektu konstrukcyjnego, projektu instalacji, instrukcji systemu, kierownika budowy ani odbioru robót.</p>
        </div>
      </div>

      <aside class="rk-slab-cta" aria-label="Projekt ogrzewania podłogowego w płycie fundamentowej">
        <div class="rk-slab-cta-title">Analizator może wykryć brakujące dane, ale nie policzy pętli dla konkretnej płyty</div>
        <p>Przed betonowaniem trzeba połączyć obciążenie cieplne każdego pomieszczenia z aktywną powierzchnią, rozstawem, długościami obwodów, przepływami, oporami i położeniem rozdzielacza. Następnie parametry instalacji muszą zostać skoordynowane z projektem konstrukcyjnym płyty.</p>
        <a class="rk-slab-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź zakres projektu podłogówki do płyty</a>
        <small class="rk-slab-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora. Projekt instalacji nie zastępuje projektu konstrukcyjnego płyty fundamentowej.</small>
      </aside>
    </section>

    <section class="rk-slab-section" id="rk-slab-coordination">
      <span class="rk-slab-eyebrow">Modułowa grafika edukacyjna</span>
      <h2 class="rk-slab-section-title">Od gruntu do rozdzielacza — sześć obszarów jednej decyzji</h2>
      <p class="rk-slab-lead">Wybierz obszar, aby zobaczyć jego funkcję, osobę odpowiedzialną i błąd, którego nie wolno ukryć w betonie. Moduł celowo nie pokazuje jednej „wzorcowej” wysokości rury — prawidłowe położenie wynika z konkretnego projektu.</p>
      <div class="rk-slab-modules" aria-labelledby="rk-slab-module-title">
        <p class="rk-slab-module-intro" id="rk-slab-module-title"><strong>Sześć połączonych obszarów:</strong> żadnego nie można oceniać wyłącznie z perspektywy instalatora albo jednego rysunku.</p>
        <div class="rk-slab-module-grid" role="tablist" aria-label="Obszary koordynacji ogrzewanej płyty">
          <button class="rk-slab-module-button" type="button" role="tab" aria-selected="true" data-rk-slab-module="ground"><span>01 · Podłoże</span>Grunt i posadowienie</button>
          <button class="rk-slab-module-button" type="button" role="tab" aria-selected="false" data-rk-slab-module="insulation"><span>02 · Ochrona cieplna</span>Izolacja i krawędź płyty</button>
          <button class="rk-slab-module-button" type="button" role="tab" aria-selected="false" data-rk-slab-module="structure"><span>03 · Nośność</span>Konstrukcja i zbrojenie</button>
          <button class="rk-slab-module-button" type="button" role="tab" aria-selected="false" data-rk-slab-module="pipes"><span>04 · Emisja</span>Rury i aktywne pola</button>
          <button class="rk-slab-module-button" type="button" role="tab" aria-selected="false" data-rk-slab-module="hydraulics"><span>05 · Przepływ</span>Pętle i rozdzielacz</button>
          <button class="rk-slab-module-button" type="button" role="tab" aria-selected="false" data-rk-slab-module="pour"><span>06 · Zamknięcie</span>Próba i betonowanie</button>
        </div>
        <div class="rk-slab-module-panel" role="tabpanel" aria-live="polite">
          <h3 id="rk-slab-module-heading">Grunt i posadowienie</h3>
          <p id="rk-slab-module-summary">Warunki gruntu, wody i przygotowania podłoża wpływają na konstrukcję oraz sposób ograniczenia strat do gruntu.</p>
          <div class="rk-slab-module-facts">
            <div class="rk-slab-module-fact"><strong>Odpowiada</strong><span id="rk-slab-module-owner">projektant konstrukcji i geotechnik</span></div>
            <div class="rk-slab-module-fact"><strong>Dokument</strong><span id="rk-slab-module-document">opinia lub dokumentacja geotechniczna oraz projekt posadowienia</span></div>
            <div class="rk-slab-module-fact"><strong>Nie ukrywaj w betonie</strong><span id="rk-slab-module-risk">niezgodnego podłoża, zmian rzędnych i nieuzgodnionych przejść instalacyjnych</span></div>
          </div>
        </div>
      </div>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-ground">
      <span class="rk-slab-eyebrow">Ciepło nie płynie tylko do pomieszczenia</span>
      <h2 class="rk-slab-section-title">Straty do gruntu, izolacja dolna i krawędź płyty</h2>
      <p class="rk-slab-lead">Podłoga stykająca się z gruntem nie zachowuje się jak ściana zewnętrzna poddana jednej, stałej różnicy temperatur. Znaczenie mają geometria, obwód, zagłębienie, właściwości gruntu, izolacja dolna i obwodowa oraz warunki okresowe.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-card-number">DÓŁ</span><h3>Izolacja pod płytą</h3><p>Jej grubość nie powinna wynikać z katalogowego „standardu systemu”, lecz z projektu cieplnego i konstrukcyjnego całej przegrody.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BRZEG</span><h3>Połączenie ze ścianą</h3><p>Krawędź płyty wymaga ciągłości ochrony cieplnej i rozwiązania detalu zgodnego z konstrukcją, hydroizolacją oraz elewacją.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">GRUNT</span><h3>Model obliczeniowy</h3><p>Strat do gruntu nie określamy przez proste pomnożenie powierzchni, U i różnicy temperatur jak dla ściany.</p></article>
      </div>
      <p class="rk-slab-copy">Wymagania cieplne trzeba powiązać z rozwiązaniem opisanym w projekcie płyty. Uzupełniająco zobacz poradnik o <a href="https://projekt-ogrzewania.pl/jakie-sa-najlepsze-sposoby-izolacji-pod-ogrzewanie-podlogowe/">izolacji pod ogrzewanie podłogowe</a> oraz o <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolacji brzegowej i dylatacjach</a>, pamiętając, że detale jastrychu nie są automatycznie detalami płyty nośnej.</p>
    </section>

    <section class="rk-slab-section" id="rk-slab-structure">
      <span class="rk-slab-eyebrow">Nie ma jednej bezpiecznej wysokości dla każdej płyty</span>
      <h2 class="rk-slab-section-title">Gdzie umieścić rury względem zbrojenia i powierzchni podłogi?</h2>
      <p class="rk-slab-lead">Głębokość rur wpływa na drogę przepływu ciepła, czas reakcji i temperaturę wody. Jednocześnie położenie instalacji nie może naruszać wymagań konstrukcyjnych, otuliny ani stref pracy zbrojenia.</p>
      <div class="rk-slab-grid-2">
        <article class="rk-slab-card"><span class="rk-slab-icon">↑</span><h3>Bliżej powierzchni</h3><p>Może skracać drogę przewodzenia do pomieszczenia, ale wymaga potwierdzenia otuliny, warstw wykończeniowych, ochrony rur i dopuszczalnego mocowania.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">↓</span><h3>Głębiej w przekroju</h3><p>Zwiększa masę aktywowaną cieplnie i może zmieniać dynamikę oraz wymagane parametry wody. Nie jest automatycznie bezpieczniejsze ani lepsze.</p></article>
      </div>
      <div class="rk-slab-note rk-slab-note-bad"><p><strong>Nie kopiuj przekroju z internetu.</strong> Rysunek bez informacji o konkretnej konstrukcji, zbrojeniu, obciążeniach i technologii płyty jest ilustracją, a nie detalem wykonawczym.</p></div>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-layout">
      <span class="rk-slab-eyebrow">Najpierw mapa wyłączeń, potem ślimak lub meander</span>
      <h2 class="rk-slab-section-title">Aktywne pola, rozstaw rur i kolizje instalacyjne</h2>
      <p class="rk-slab-lead">Rozstaw 10, 15 albo 20 cm jest wynikiem lokalnej wymaganej mocy i warunków przekazywania ciepła. Nie istnieje jeden „złoty standard” odpowiedni dla całej płyty i każdego pomieszczenia.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-card-number">MOC</span><h3>Obciążenie cieplne</h3><p>Im większa wymagana moc z dostępnego pola, tym dokładniej trzeba sprawdzić rozstaw, temperaturę powierzchni i zasilania.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">POLE</span><h3>Powierzchnia czynna</h3><p>Stałe zabudowy, kominy, przepusty, odpływy, strefy konstrukcyjne i późniejsze mocowania zmniejszają dostępne pole.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">TRASA</span><h3>Geometria pętli</h3><p>Dobiegi, nawroty i przejścia wpływają na długość, rozkład temperatury i możliwość zachowania promienia gięcia.</p></article>
      </div>
      <p class="rk-slab-copy">Szczegółowe kryteria opisują poradniki: <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur 10 czy 15 cm</a>, <a href="https://projekt-ogrzewania.pl/gdzie-nie-ukladac-ogrzewania-podlogowego/">gdzie nie prowadzić ogrzewania podłogowego</a> oraz <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/">jak zaplanować rozmieszczenie pętli</a>. W płycie fundamentowej wszystkie te decyzje muszą dodatkowo przejść koordynację konstrukcyjną.</p>
    </section>

    <section class="rk-slab-section" id="rk-slab-hydraulics">
      <span class="rk-slab-eyebrow">Metry nie są jedyną granicą</span>
      <h2 class="rk-slab-section-title">Długość pętli, przepływ i opór hydrauliczny</h2>
      <p class="rk-slab-lead">Nie można wyznaczyć bezpiecznej długości pętli z samej średnicy zewnętrznej rury. Potrzebne są także jej rzeczywiste światło, wymagany przepływ, temperatura i rodzaj medium, opory miejscowe oraz dostępny napór dla drogi krytycznej.</p>
      <div class="rk-slab-flow" aria-label="Kolejność obliczeń hydraulicznych">
        <div class="rk-slab-flow-step"><strong>1. Moc pomieszczenia</strong><span>Wynika z OZC i dostępnej powierzchni grzewczej.</span></div>
        <div class="rk-slab-flow-step"><strong>2. Przepływ</strong><span>Wynika z mocy i przyjętej różnicy temperatur wody.</span></div>
        <div class="rk-slab-flow-step"><strong>3. Podział pętli</strong><span>Uwzględnia geometrię, dobiegi, średnicę i równoważenie.</span></div>
        <div class="rk-slab-flow-step"><strong>4. Droga krytyczna</strong><span>Decyduje o wymaganym sprężu pompy i nastawach.</span></div>
      </div>
      <div class="rk-slab-note"><p><strong>100 m nie jest magiczną liczbą z normy.</strong> Dla rury 16 × 2 mm może być użytecznym ograniczeniem projektowym w określonych warunkach, ale konkretna pętla może wymagać krótszego odcinka albo pozwalać na inny wynik po sprawdzeniu hydrauliki.</p></div>
      <p class="rk-slab-copy">Rozwinięcie tematu znajdziesz w poradnikach o <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalnej długości pętli</a>, skutkach <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/">zbyt długiej pętli</a>, <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">średnicach rur</a> oraz <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">doborze pompy obiegowej</a>.</p>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-pipes">
      <span class="rk-slab-eyebrow">Produkt ma być możliwy do zidentyfikowania po latach</span>
      <h2 class="rk-slab-section-title">Jaka rura może zostać zabetonowana w płycie?</h2>
      <p class="rk-slab-lead">Nie wybieramy wyłącznie pomiędzy hasłami PE-X, PE-RT i rurą wielowarstwową. Liczy się konkretny wyrób, jego wymiar, klasa zastosowania, konstrukcja bariery tlenowej, promień gięcia, zgodny system połączeń i instrukcja montażu.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-card-number">DOKUMENT</span><h3>Karta dokładnego produktu</h3><p>Powinna identyfikować typ, wymiar, klasyfikację, warstwy, zakres pracy i zasady montażu.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">SYSTEM</span><h3>Zgodne elementy</h3><p>Rozdzielacz, przyłącza, ewentualne tuleje, narzędzia i procedury muszą pasować do wybranej konstrukcji rury.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">ŚLAD</span><h3>Partia i nadruk</h3><p>Przed zakryciem zapisz oznaczenia oraz partie kręgów przypisane do pętli i zachowaj zdjęcia etykiet.</p></article>
      </div>
      <ul class="rk-slab-bullets"><li>projektuj obwód z jednego odcinka bez planowanych połączeń w polu płyty,</li><li>chroń rurę przed zarysowaniem, załamaniem i kontaktem z ostrymi elementami,</li><li>nie naprawiaj załamania metodą spoza dokumentacji systemu,</li><li>nie zamieniaj produktu tylko dlatego, że ma taki sam zapis 16 × 2 mm.</li></ul>
      <p class="rk-slab-copy">Porównanie materiałów zawiera przewodnik <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/">rury do ogrzewania podłogowego</a>, a wymagania dotyczące ograniczania przenikania tlenu wyjaśnia artykuł o <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/">barierze antydyfuzyjnej EVOH</a>.</p>
    </section>

    <section class="rk-slab-section rk-slab-section-dark" id="rk-slab-pour">
      <span class="rk-slab-eyebrow">Ostatnia kontrola przed nieodwracalnym etapem</span>
      <h2 class="rk-slab-section-title">Próba, ochrona rur i betonowanie płyty</h2>
      <p class="rk-slab-lead">Nie wpisujemy jednego ciśnienia i czasu właściwego dla każdej budowy. Procedura powinna wskazywać medium, ciśnienie, etapy, stabilizację, czas obserwacji, kryteria akceptacji i sposób monitorowania podczas betonowania.</p>
      <div class="rk-slab-grid-4">
        <article class="rk-slab-card"><span class="rk-slab-card-number">1</span><h3>Oględziny</h3><p>Sprawdzenie mocowań, promieni, osłon, opisów, uszkodzeń, kolizji i zgodności tras z rysunkiem.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">2</span><h3>Próba</h3><p>Wykonanie zgodnie z przyjętą procedurą i dokumentacją systemu, z uwzględnieniem temperatury otoczenia.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">3</span><h3>Protokół</h3><p>Zapis medium, ciśnień, czasu, temperatur, przyrządu, wyniku, daty i osób uczestniczących w odbiorze.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">4</span><h3>Nadzór</h3><p>Ustalenie sposobu kontroli pętli podczas betonowania oraz procedury zatrzymania prac przy podejrzeniu uszkodzenia.</p></article>
      </div>
      <div class="rk-slab-note"><p><strong>Woda i sprężone powietrze nie są zamienne bezwarunkowo.</strong> Dobór medium badania musi uwzględniać dokumentację, temperaturę, ryzyko zamarznięcia, bezpieczeństwo pracy i przyjętą procedurę.</p></div>
      <p class="rk-slab-copy">Pełny temat odbioru instalacji przed zakryciem omawia poradnik o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>.</p>
    </section>

    <section class="rk-slab-section" id="rk-slab-documentation">
      <span class="rk-slab-eyebrow">Po związaniu betonu najważniejszy jest zapis</span>
      <h2 class="rk-slab-section-title">Dokumentacja powykonawcza i bezpieczne wiercenie</h2>
      <p class="rk-slab-lead">Zdjęcie bez skali nie wystarcza. Dokumentacja powinna pozwalać odtworzyć trasę, przypisać ją do rozdzielacza, zidentyfikować produkt i ocenić bezpieczne miejsca przyszłych mocowań.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-icon">R</span><h3>Rzut powykonawczy</h3><p>Trasy pętli, osie odniesienia, dobiegi, strefy wyłączone, przepusty i oznaczenia obwodów.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">F</span><h3>Fotografie z odniesieniem</h3><p>Zdjęcia pionowe i sytuacyjne wykonane przed betonowaniem, z rozpoznawalnymi punktami i skalą.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-icon">P</span><h3>Protokoły i identyfikacja</h3><p>Próba, partie rur, etykiety, odstępstwa, naprawy, odbiory i osoby odpowiedzialne.</p></article>
      </div>
      <div class="rk-slab-note rk-slab-note-good"><p><strong>Dobra dokumentacja pracuje przez cały okres życia budynku.</strong> Jest potrzebna nie tylko przy awarii, lecz także podczas montażu ścian, schodów, wyspy kuchennej, instalacji sanitarnych i innych elementów kotwionych do podłogi.</p></div>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-control">
      <span class="rk-slab-eyebrow">Duża masa zmienia sposób sterowania</span>
      <h2 class="rk-slab-section-title">Bezwładność, automatyka i współpraca ze źródłem ciepła</h2>
      <p class="rk-slab-lead">Ogrzewana płyta zwykle reaguje wolniej niż lekki system podłogowy. Nie oznacza to, że termostaty są zawsze bezużyteczne, lecz że gwałtowne dobowe obniżenia i agresywne sterowanie włącz–wyłącz mogą być nieskuteczne.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-card-number">POGODA</span><h3>Wyprzedzająca regulacja</h3><p>Krzywa grzewcza dostosowuje temperaturę wody do warunków zewnętrznych zamiast czekać na duży błąd temperatury w pokoju.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">STREFY</span><h3>Ostrożne zamykanie pętli</h3><p>Automatyka musi być skoordynowana z minimalnym przepływem źródła i działaniem pompy, a nie dodana bez analizy.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">ZYSKI</span><h3>Słońce i użytkownicy</h3><p>Duża masa ogranicza szybkie wahania, ale nie usuwa ryzyka przegrzewania pomieszczeń z dużymi przeszkleniami.</p></article>
      </div>
      <p class="rk-slab-copy">Szerzej opisują to poradniki o <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej podłogówki</a>, <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowaniu pogodowym</a> i <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekcie ogrzewania podłogowego z pompą ciepła</a>.</p>
    </section>

    <section class="rk-slab-section" id="rk-slab-coverings">
      <span class="rk-slab-eyebrow">Wykończenie jest częścią modelu cieplnego</span>
      <h2 class="rk-slab-section-title">Płytki, panele i drewno na ogrzewanej płycie</h2>
      <p class="rk-slab-lead">Ta sama instalacja oddaje inną moc pod gresem i inną pod podłogą drewnianą z podkładem. Okładzinę trzeba określić przed obliczeniem temperatur pracy, a nie dopiero po zabetonowaniu rur.</p>
      <div class="rk-slab-table-wrap">
        <table>
          <thead><tr><th>Wykończenie</th><th>Co sprawdzić?</th><th>Wpływ na projekt</th><th>Ryzyko uproszczenia</th></tr></thead>
          <tbody>
            <tr><td data-label="Wykończenie"><strong>Płytki lub gres</strong></td><td data-label="Sprawdź">Klej, warstwy, dylatacje i dopuszczenie do układu.</td><td data-label="Wpływ">Zwykle stosunkowo mały opór cieplny.</td><td data-label="Ryzyko">Nie rozwiązuje błędnej mocy lub hydrauliki.</td></tr>
            <tr><td data-label="Wykończenie"><strong>Panele</strong></td><td data-label="Sprawdź">Opór panelu i podkładu, limit temperatury oraz instrukcję montażu.</td><td data-label="Wpływ">Może podnieść wymaganą temperaturę wody.</td><td data-label="Ryzyko">Hasło „do podłogówki” bez liczbowych danych produktu.</td></tr>
            <tr><td data-label="Wykończenie"><strong>Drewno</strong></td><td data-label="Sprawdź">Gatunek, grubość, konstrukcję, wilgotność i sposób mocowania.</td><td data-label="Wpływ">Wymaga oceny mocy i warunków materiału.</td><td data-label="Ryzyko">Zmiana wykończenia po wykonaniu obliczeń bez ponownego sprawdzenia.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-slab-copy">Przed wyborem materiału zobacz, jak <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">okładzina wpływa na wydajność ogrzewania</a> oraz jak dobierać <a href="https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/">drewno do podłogówki</a>.</p>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-failure">
      <span class="rk-slab-eyebrow">Ryzyko można ograniczyć, ale nie wyzerować</span>
      <h2 class="rk-slab-section-title">Co zrobić przy podejrzeniu uszkodzenia rury w płycie?</h2>
      <p class="rk-slab-lead">Spadek ciśnienia nie oznacza automatycznie konieczności rozbierania całej płyty, ale lokalizacja i naprawa w elemencie nośnym nie mogą być prowadzone jak zwykłe kucie jastrychu.</p>
      <div class="rk-slab-flow" aria-label="Postępowanie po wykryciu nieszczelności">
        <div class="rk-slab-flow-step"><strong>1. Zatrzymaj prace</strong><span>Nie zalewaj ani nie kontynuuj użytkowania do czasu ustalenia przyczyny.</span></div>
        <div class="rk-slab-flow-step"><strong>2. Potwierdź obwód</strong><span>Oddziel wpływ armatury, rozdzielacza, temperatury i przyrządu pomiarowego.</span></div>
        <div class="rk-slab-flow-step"><strong>3. Zlokalizuj</strong><span>Dobierz metodę diagnostyczną do stanu budynku i rodzaju wycieku.</span></div>
        <div class="rk-slab-flow-step"><strong>4. Uzgodnij naprawę</strong><span>Zakres odkrycia i przywrócenia konstrukcji zatwierdź przed ingerencją.</span></div>
      </div>
      <div class="rk-slab-note rk-slab-note-bad"><p><strong>Kamera termowizyjna nie daje bezbłędnej lokalizacji w każdych warunkach.</strong> Skuteczność zależy od temperatury, stanu pracy instalacji, głębokości rury, wilgoci, czasu i konstrukcji. Metodę trzeba dobrać do konkretnej sytuacji.</p></div>
    </section>

    <section class="rk-slab-section" id="rk-slab-errors">
      <span class="rk-slab-eyebrow">Błędy, których beton nie naprawi</span>
      <h2 class="rk-slab-section-title">Najczęstsze błędy projektowe i wykonawcze</h2>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 1</span><h3>Jedna wartość W/m² dla całego domu</h3><p>Pomija różne straty pomieszczeń, przeszklenia, wentylację i dostępną powierzchnię czynną.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 2</span><h3>Rozstaw 15 cm wszędzie</h3><p>Może być odpowiedni w części stref, ale nie jest wynikiem bez obliczeń mocy i temperatur.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 3</span><h3>100 m zamiast hydrauliki</h3><p>Limit długości nie zastępuje przepływu, średnicy wewnętrznej, medium i strat ciśnienia.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 4</span><h3>Brak wspólnego rzutu branż</h3><p>Rury kolidują z odpływami, przepustami, kotwami, ścianami albo strefami zbrojenia.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 5</span><h3>Nieuzgodnione mocowanie</h3><p>Sposób „wygodny dla instalatora” nie musi być zgodny z projektem konstrukcyjnym i technologią prac.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 6</span><h3>Zakup rury bez dokumentacji</h3><p>Nazwa materiału i wymiar na etykiecie nie potwierdzają całego zakresu zastosowania.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 7</span><h3>Próba bez procedury</h3><p>Sam odczyt manometru nie stanowi pełnego odbioru, jeżeli nie wiadomo, jak i w jakich warunkach wykonano badanie.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 8</span><h3>Brak nadzoru podczas betonowania</h3><p>Odebrana wcześniej instalacja nadal może zostać uszkodzona przez kolejne prace.</p></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">BŁĄD 9</span><h3>Brak planu powykonawczego</h3><p>Po zakryciu nie wiadomo, gdzie można bezpiecznie wiercić i jak odtworzyć trasę obwodu.</p></article>
      </div>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-checklist">
      <span class="rk-slab-eyebrow">Do podpisania przed przyjazdem gruszki</span>
      <h2 class="rk-slab-section-title">Checklista odbioru ogrzewania w płycie fundamentowej</h2>
      <p class="rk-slab-lead">Poniższa lista nie zastępuje dokumentacji budowy. Pomaga sprawdzić, czy kluczowe decyzje mają właściciela, dokument oraz potwierdzenie wykonania.</p>
      <div class="rk-slab-grid-3">
        <article class="rk-slab-card"><span class="rk-slab-card-number">PROJEKT</span><h3>Przed montażem</h3><ul class="rk-slab-bullets"><li>OZC każdego pomieszczenia,</li><li>aktywne pola i wyłączenia,</li><li>rozstawy oraz podział pętli,</li><li>przepływy i straty ciśnienia,</li><li>uzgodnione położenie rur.</li></ul></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">WYKONANIE</span><h3>Po ułożeniu rur</h3><ul class="rk-slab-bullets"><li>zgodność z rzutem,</li><li>promienie i mocowania,</li><li>osłony oraz przejścia,</li><li>opisy pętli i partie rur,</li><li>brak nieuzgodnionych połączeń.</li></ul></article>
        <article class="rk-slab-card"><span class="rk-slab-card-number">ODBIÓR</span><h3>Przed betonowaniem</h3><ul class="rk-slab-bullets"><li>próba i protokół,</li><li>zdjęcia oraz rzut powykonawczy,</li><li>plan nadzoru podczas prac,</li><li>ustalona reakcja na uszkodzenie,</li><li>akceptacja osób odpowiedzialnych.</li></ul></article>
      </div>
      <div class="rk-slab-note rk-slab-note-good"><p><strong>Praktyczna zasada:</strong> jeżeli odpowiedź na krytyczne pytanie brzmi „ustalimy podczas betonowania”, decyzja jest podejmowana o jeden etap za późno.</p></div>
    </section>

    <section class="rk-slab-section rk-slab-final" id="rk-slab-final">
      <span class="rk-slab-eyebrow">Końcowy krok przed realizacją</span>
      <h2 class="rk-slab-section-title">Projekt instalacji musi być gotowy przed płytą, nie po niej</h2>
      <p class="rk-slab-lead">Dobrze zaprojektowana instalacja określa moc pomieszczeń, aktywne pola, rozstawy, pętle, przepływy, opory i położenie rozdzielacza. Konstruktor może wtedy skoordynować rzeczywiste trasy z płytą, zamiast akceptować instalację rozłożoną intuicyjnie na gotowym zbrojeniu.</p>
      <div class="rk-slab-cta">
        <div class="rk-slab-cta-title">Zanim beton zamknie instalację, zamknij wszystkie decyzje na rysunku</div>
        <p>Indywidualny projekt podłogówki daje wykonawcy jednoznaczny podział pętli, rozstawy, długości, przepływy i nastawy. W przypadku płyty fundamentowej dokumentacja instalacyjna musi zostać przekazana konstruktorowi oraz skoordynowana z technologią wykonania.</p>
        <a class="rk-slab-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
        <small class="rk-slab-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika. Zakres konstrukcji płyty wymaga odrębnej dokumentacji branżowej.</small>
      </div>
    </section>

    <section class="rk-slab-section" id="rk-slab-sources">
      <span class="rk-slab-eyebrow">Podstawa techniczna</span>
      <h2 class="rk-slab-section-title">Źródła oficjalne i zakres odpowiedzialności</h2>
      <p class="rk-slab-lead">Seria ISO 11855 rozdziela określanie wydajności, projektowanie, analizę dynamiczną, montaż i sterowanie. Obliczenia wymiany ciepła z gruntem wymagają odrębnej metody, a wymagania budowlane należy zawsze sprawdzać w aktualnym oficjalnym tekście przepisów.</p>
      <div class="rk-slab-source-grid">
        <article class="rk-slab-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 — wydajność systemów płaszczyznowych</a><p>Oficjalna karta metod określania strumienia ciepła oraz temperatur powierzchni dla wodnych systemów wbudowanych.</p></article>
        <article class="rk-slab-source-card"><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 — projektowanie i wymiarowanie</a><p>Oficjalna karta metody projektowania i wymiarowania systemów ogrzewania oraz chłodzenia płaszczyznowego.</p></article>
        <article class="rk-slab-source-card"><a href="https://www.iso.org/standard/74686.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-4:2021 — dynamiczna praca systemów TABS</a><p>Oficjalna karta obliczeń dynamicznej mocy systemów aktywujących cieplnie konstrukcję budynku.</p></article>
        <article class="rk-slab-source-card"><a href="https://www.iso.org/standard/74685.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-5:2021 — wymagania instalacyjne</a><p>Oficjalna karta wymagań dotyczących instalowania wodnych systemów ogrzewania i chłodzenia wbudowanych w przegrody.</p></article>
        <article class="rk-slab-source-card"><a href="https://www.iso.org/standard/64999.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-6:2018 — sterowanie</a><p>Oficjalna karta części dotyczącej kontroli i automatyki systemów ogrzewania oraz chłodzenia płaszczyznowego.</p></article>
        <article class="rk-slab-source-card"><a href="https://www.iso.org/standard/65716.html" target="_blank" rel="nofollow noopener noreferrer">ISO 13370:2017 — wymiana ciepła z gruntem</a><p>Oficjalna karta metod obliczania współczynników i strumieni ciepła dla przegród stykających się z gruntem.</p></article>
        <article class="rk-slab-source-card"><a href="https://eli.gov.pl/eli/DU/2022/1225/ogl" target="_blank" rel="nofollow noopener noreferrer">Warunki Techniczne — oficjalny tekst w ELI</a><p>Oficjalna karta tekstu jednolitego wraz z informacją o późniejszych aktach zmieniających.</p></article>
        <article class="rk-slab-source-card"><a href="https://www.iso.org/cms/live/live/en/sites/isoorg/contents/data/committee/05/47/54740/x/catalogue/" target="_blank" rel="nofollow noopener noreferrer">ISO/TC 205 — katalog aktualnych dokumentów</a><p>Oficjalny katalog serii ISO 11855 i dokumentów związanych z projektowaniem środowiska wewnętrznego budynków.</p></article>
      </div>
      <div class="rk-slab-responsibility"><p><strong>Zakres poradnika:</strong> treść pomaga inwestorowi rozpoznać dane, uzgodnienia i odbiory potrzebne przed betonowaniem. Nie jest projektem konstrukcji, opinią geotechniczną, projektem instalacji dla konkretnego budynku, instrukcją systemu, specyfikacją betonu ani zgodą na rozpoczęcie robót.</p></div>
    </section>

    <section class="rk-slab-section rk-slab-section-soft" id="rk-slab-faq">
      <span class="rk-slab-eyebrow">Pytania inwestorów, projektantów i wykonawców</span>
      <h2 class="rk-slab-section-title">FAQ — ogrzewanie podłogowe w płycie fundamentowej</h2>
      <div class="rk-slab-faq">
        <details><summary>Czym ogrzewanie w płycie fundamentowej różni się od podłogówki w jastrychu?</summary><div class="rk-slab-faq-answer"><p>W pierwszym rozwiązaniu rury współpracują z masą elementu konstrukcyjnego albo z układem bezpośrednio z nim związanym. W tradycyjnym systemie znajdują się w oddzielnej warstwie podłogowej nad konstrukcją. Zmienia to koordynację, dynamikę cieplną, naprawę i zakres odpowiedzialności.</p></div></details>
        <details><summary>Czy wolno umieścić rury grzewcze w nośnej płycie fundamentowej?</summary><div class="rk-slab-faq-answer"><p>Takie rozwiązanie jest możliwe, jeżeli zostało przewidziane i skoordynowane w dokumentacji. Projektant instalacji określa parametry cieplne i hydrauliczne, a konstruktor musi zaakceptować położenie, mocowanie, przejścia oraz wpływ instalacji na detal płyty.</p></div></details>
        <details><summary>Na jakiej głębokości powinny znajdować się rury?</summary><div class="rk-slab-faq-answer"><p>Nie ma jednej prawidłowej głębokości dla każdej płyty. Położenie wpływa na drogę przewodzenia ciepła i bezwładność, a równocześnie musi spełniać wymagania konstrukcyjne, otuliny i technologii wykonania. Powinno być pokazane lub zatwierdzone w dokumentacji konkretnego budynku.</p></div></details>
        <details><summary>Czy rury można mocować bezpośrednio do zbrojenia?</summary><div class="rk-slab-faq-answer"><p>Sposób mocowania musi być zaakceptowany dla konkretnej konstrukcji i systemu rury. Nie należy przyjmować, że rozwiązanie wygodne wykonawczo jest automatycznie dopuszczone przez projektanta konstrukcji.</p></div></details>
        <details><summary>Jaki rozstaw rur zastosować: 10, 15 czy 20 cm?</summary><div class="rk-slab-faq-answer"><p>Rozstaw wynika z wymaganej mocy pomieszczenia, aktywnej powierzchni, położenia rur, okładziny i temperatury wody. Żadna z tych wartości nie jest uniwersalnym standardem dla całego budynku.</p></div></details>
        <details><summary>Czy pętla rury 16 × 2 mm może mieć dokładnie 100 m?</summary><div class="rk-slab-faq-answer"><p>Około 100 m bywa przyjmowane jako ograniczenie robocze, ale nie zastępuje obliczenia. Dopuszczalna długość zależy od rzeczywistego światła rury, przepływu, medium, oporów miejscowych, różnicy temperatur i dostępnego naporu pompy.</p></div></details>
        <details><summary>Czy gęstszy rozstaw zawsze zwiększa opory hydrauliczne?</summary><div class="rk-slab-faq-answer"><p>Sam rozstaw nie jest oporem pętli. Gęstsze ułożenie zwiększa ilość rury potrzebnej na metr kwadratowy, lecz projektant może podzielić powierzchnię na większą liczbę krótszych obwodów. O wyniku decyduje kompletna geometria, przepływy i średnice.</p></div></details>
        <details><summary>Jaka rura jest najlepsza do płyty fundamentowej?</summary><div class="rk-slab-faq-answer"><p>Nie da się wskazać najlepszego materiału wyłącznie po nazwie PE-X, PE-RT lub rura wielowarstwowa. Trzeba zweryfikować konkretny wyrób: wymiar, klasę zastosowania, barierę tlenową, promień gięcia, dokumentację i zgodność z systemem połączeń.</p></div></details>
        <details><summary>Czy wszystkie pętle trzeba wykonać bez połączeń?</summary><div class="rk-slab-faq-answer"><p>Pętle należy projektować z jednego odcinka bez planowanych połączeń w polu płyty. Jeżeli dojdzie do uszkodzenia, sposób ewentualnej naprawy musi wynikać z dokumentacji systemu i zostać uzgodniony przed zakryciem.</p></div></details>
        <details><summary>Jakie ciśnienie zastosować podczas próby?</summary><div class="rk-slab-faq-answer"><p>Nie należy przyjmować jednej wartości dla każdej instalacji. Ciśnienie, medium, czas, stabilizacja i kryteria odbioru muszą wynikać z projektu, dokumentacji systemu, warunków budowy i przyjętej procedury.</p></div></details>
        <details><summary>Czy próbę wykonywać wodą czy sprężonym powietrzem?</summary><div class="rk-slab-faq-answer"><p>Wybór zależy od procedury, dokumentacji, temperatury i bezpieczeństwa. Próba gazem wymaga szczególnej ostrożności ze względu na energię zgromadzoną w sprężonym medium. Woda może być niewłaściwa, jeżeli instalacji grozi zamarznięcie przed uruchomieniem.</p></div></details>
        <details><summary>Czy rury powinny pozostawać pod ciśnieniem podczas betonowania?</summary><div class="rk-slab-faq-answer"><p>Sposób monitorowania podczas betonowania należy ustalić w procedurze wykonawczej i dokumentacji systemu. Istotne jest nie tylko ciśnienie, lecz także dostępny manometr, odpowiedzialna osoba i zdefiniowana reakcja na zmianę wskazania.</p></div></details>
        <details><summary>Ile czasu nagrzewa się ogrzewana płyta?</summary><div class="rk-slab-faq-answer"><p>Nie ma jednego czasu 24 lub 48 godzin dla każdej konstrukcji. Zależy on od masy aktywowanej cieplnie, położenia rur, mocy źródła, temperatury początkowej, izolacji i warstw wykończeniowych. Duża płyta reaguje wolniej niż lekki system, ale dokładny czas wymaga modelu lub pomiaru.</p></div></details>
        <details><summary>Czy przy tak dużej bezwładności termostaty są niepotrzebne?</summary><div class="rk-slab-faq-answer"><p>Nie można tego stwierdzić kategorycznie. Bezwładność ogranicza skuteczność szybkich zmian i głębokich obniżeń dobowych, lecz czujniki, ograniczenia temperatur, regulacja strefowa i sterowanie pogodowe nadal mogą pełnić określone funkcje.</p></div></details>
        <details><summary>Czy ogrzewana płyta dobrze współpracuje z pompą ciepła?</summary><div class="rk-slab-faq-answer"><p>Może tworzyć korzystny układ niskotemperaturowy, jeżeli powierzchnia pokrywa obciążenie budynku przy rozsądnej temperaturze wody, a przepływy i sterowanie są zgodne z wymaganiami pompy ciepła. Sama masa płyty nie gwarantuje wysokiego SCOP.</p></div></details>
        <details><summary>Czy na ogrzewanej płycie można ułożyć panele albo drewno?</summary><div class="rk-slab-faq-answer"><p>Tak, jeżeli konkretna okładzina i podkład są dopuszczone do ogrzewania podłogowego, a ich opór i ograniczenia temperaturowe zostały uwzględnione w obliczeniu mocy. Zmiana okładziny po wykonaniu projektu wymaga ponownego sprawdzenia.</p></div></details>
        <details><summary>Jak bezpiecznie wiercić w podłodze po zakończeniu budowy?</summary><div class="rk-slab-faq-answer"><p>Podstawą jest rzut powykonawczy uzupełniony zdjęciami z odniesieniem do trwałych punktów budynku. Przed ingerencją trzeba uwzględnić nie tylko rury grzewcze, ale także zbrojenie, inne instalacje i wymagania konstrukcyjne.</p></div></details>
        <details><summary>Czy uszkodzoną rurę w płycie można naprawić?</summary><div class="rk-slab-faq-answer"><p>Może być możliwa naprawa punktowa, ale jej zakres zależy od lokalizacji, systemu rury i konstrukcji. Przed kuciem należy potwierdzić miejsce uszkodzenia, uzgodnić dopuszczalną ingerencję z konstruktorem i zastosować rozwiązanie przewidziane przez dokumentację systemu.</p></div></details>
      </div>
    </section>

    <section class="rk-slab-author" id="rk-slab-author">
      <div class="rk-slab-author-card">
        <div class="rk-slab-author-head">
          <div>
            <span class="rk-slab-eyebrow">E-E-A-T i odpowiedzialność za treść</span>
            <h2 class="rk-slab-author-title">Autor i weryfikacja merytoryczna</h2>
            <p>Treść przygotowana z perspektywy obciążeń cieplnych, hydrauliki instalacji, parametrów źródła oraz ryzyka decyzji zamykanych w elemencie konstrukcyjnym.</p>
          </div>
          <div class="rk-slab-author-update">Aktualizacja: 16.09.2026</div>
        </div>
        <div class="rk-slab-author-layout">
          <aside class="rk-slab-author-side">
            <div class="rk-slab-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i autor poradnika" width="400" height="400" loading="lazy" decoding="async"></div>
            <div class="rk-slab-author-name">Robert Kucharski</div>
            <p class="rk-slab-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
            <span class="rk-slab-author-social-label">Profile branżowe</span>
            <div class="rk-slab-author-social" aria-label="Profile autora">
              <a href="https://www.linkedin.com/in/robert-kucharski-b8b906199/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
            </div>
          </aside>
          <div class="rk-slab-author-main">
            <blockquote class="rk-slab-author-quote">Moim zdaniem ogrzewanie w płycie fundamentowej nie jest trudne dlatego, że wymaga innej rury. Jest trudne dlatego, że wszystkie decyzje cieplne, hydrauliczne i konstrukcyjne trzeba zamknąć przed pierwszym betonowaniem.</blockquote>
            <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W poradnikach rozdziela wartości orientacyjne od parametrów, które muszą zostać policzone dla konkretnego budynku.</p>
            <p>Przy aktualizacji materiału usunięto uniwersalne limity rozstawu, długości, temperatury, ciśnienia i zwrotu z inwestycji. Zastąpiono je procedurą kontroli dokumentacji, koordynacji branżowej i odbioru przed betonowaniem.</p>
            <p><a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p>
            <div class="rk-slab-author-facts">
              <div class="rk-slab-author-fact"><strong>Praktyka projektowa</strong>OZC, podział pętli, przepływy, opory i współpraca podłogówki ze źródłem ciepła</div>
              <div class="rk-slab-author-fact"><strong>Metoda</strong>jawne założenia, dokumentacja wyrobu, koordynacja i kontrola przed zakryciem</div>
              <div class="rk-slab-author-fact"><strong>Zakres aktualizacji</strong>moc, hydraulika, instalacja w elemencie nośnym, odbiór i ograniczenia poradnika</div>
            </div>
            <div class="rk-slab-author-portals"><strong>Portale autora</strong><a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a><a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a><a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a></div>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": ["https://www.facebook.com/projektogrzewaniapl", "https://x.com/Projekt_HVAC"]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "knowsAbout": ["ogrzewanie podłogowe", "płyty fundamentowe z ogrzewaniem", "projektowe obciążenie cieplne", "hydraulika instalacji grzewczych", "pompy ciepła", "równoważenie hydrauliczne"],
      "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-b8b906199/", "https://www.facebook.com/projektogrzewaniapl", "https://x.com/Projekt_HVAC"]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/06/Ogrzewanie-podlogowe-w-plycie-fundamentowej.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/06/Ogrzewanie-podlogowe-w-plycie-fundamentowej.webp",
      "width": 1200,
      "height": 1200,
      "caption": "Ogrzewanie podłogowe w płycie fundamentowej"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/" },
        { "@type": "ListItem", "position": 2, "name": "Poradniki", "item": "https://projekt-ogrzewania.pl/blog/" },
        { "@type": "ListItem", "position": 3, "name": "Ogrzewanie podłogowe w płycie fundamentowej", "item": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/" }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#webpage",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/",
      "name": "Ogrzewanie podłogowe w płycie fundamentowej – projekt i montaż",
      "description": "Techniczny poradnik projektowania ogrzewania w płycie fundamentowej: OZC, położenie rur, pętle, izolacja, próba i betonowanie.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#breadcrumb" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#primaryimage" },
      "datePublished": "2026-06-28T16:13:31+00:00",
      "dateModified": "2026-09-16T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#article" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#article",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#webpage" },
      "headline": "Ogrzewanie podłogowe w płycie fundamentowej – projekt i montaż",
      "description": "Kompletny poradnik koordynacji cieplnej, hydraulicznej, konstrukcyjnej i wykonawczej ogrzewania podłogowego zatopionego w płycie fundamentowej.",
      "image": { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-06-28T16:13:31+00:00",
      "dateModified": "2026-09-16T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "about": ["ogrzewanie podłogowe w płycie fundamentowej", "płyta grzewcza", "OZC", "hydraulika pętli", "izolacja od gruntu", "próba ciśnieniowa", "betonowanie płyty"],
      "keywords": "ogrzewanie podłogowe w płycie fundamentowej, płyta fundamentowa z ogrzewaniem, rury w płycie, rozstaw rur, próba ciśnieniowa, projekt płyty grzewczej",
      "isAccessibleForFree": true,
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#analyzer" },
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#coordination-list" },
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#faq-schema" }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#analyzer",
      "name": "Analizator gotowości ogrzewania w płycie do betonowania",
      "url": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#rk-slab-analyzer-section",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie edukacyjne sprawdzające kompletność danych cieplnych, konstrukcyjnych, hydraulicznych i odbiorowych przed betonowaniem płyty fundamentowej."
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#coordination-list",
      "name": "Sześć obszarów koordynacji ogrzewanej płyty fundamentowej",
      "numberOfItems": 6,
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Grunt i posadowienie" },
        { "@type": "ListItem", "position": 2, "name": "Izolacja i krawędź płyty" },
        { "@type": "ListItem", "position": 3, "name": "Konstrukcja i zbrojenie" },
        { "@type": "ListItem", "position": 4, "name": "Rury i aktywne pola" },
        { "@type": "ListItem", "position": 5, "name": "Pętle i rozdzielacz" },
        { "@type": "ListItem", "position": 6, "name": "Próba i betonowanie" }
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#howto",
      "name": "Jak przygotować ogrzewanie w płycie fundamentowej do betonowania",
      "description": "Procedura kontroli projektu, wykonania, próby i dokumentacji przed zabetonowaniem pętli grzewczych.",
      "totalTime": "P30D",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Oblicz obciążenie cieplne", "text": "Określ projektowe straty ciepła osobno dla każdego pomieszczenia." },
        { "@type": "HowToStep", "position": 2, "name": "Wyznacz aktywne pola", "text": "Ustal powierzchnie dostępne po uwzględnieniu kolizji i stref wyłączonych." },
        { "@type": "HowToStep", "position": 3, "name": "Dobierz parametry cieplne", "text": "Sprawdź rozstaw, moc powierzchni i temperatury dla konstrukcji oraz okładziny." },
        { "@type": "HowToStep", "position": 4, "name": "Policz hydraulikę", "text": "Wyznacz pętle, długości, przepływy, straty ciśnienia i drogę krytyczną." },
        { "@type": "HowToStep", "position": 5, "name": "Skoordynuj konstrukcję", "text": "Uzgodnij położenie rur, mocowanie, zbrojenie, przepusty i strefy kolizji." },
        { "@type": "HowToStep", "position": 6, "name": "Zweryfikuj system rury", "text": "Sprawdź kartę, wymiar, barierę, promień gięcia i zgodne elementy systemu." },
        { "@type": "HowToStep", "position": 7, "name": "Odbierz wykonanie", "text": "Porównaj trasy, mocowania, oznaczenia i ochronę rur z dokumentacją." },
        { "@type": "HowToStep", "position": 8, "name": "Wykonaj próbę", "text": "Przeprowadź badanie według ustalonej procedury i sporządź protokół." },
        { "@type": "HowToStep", "position": 9, "name": "Udokumentuj pętle", "text": "Wykonaj rzut powykonawczy, zdjęcia i zapisz partie materiału." },
        { "@type": "HowToStep", "position": 10, "name": "Kontroluj betonowanie", "text": "Monitoruj instalację i stosuj uzgodnioną procedurę reakcji na uszkodzenie." }
      ]
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projekt ogrzewania podłogowego",
      "description": "Projekt instalacji obejmujący obciążenia cieplne, rozstawy, podział pętli, długości, przepływy, opory i nastawy."
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/#faq-schema",
      "mainEntity": [
        { "@type": "Question", "name": "Czym ogrzewanie w płycie fundamentowej różni się od podłogówki w jastrychu?", "acceptedAnswer": { "@type": "Answer", "text": "W pierwszym rozwiązaniu rury współpracują z masą elementu konstrukcyjnego albo z układem bezpośrednio z nim związanym. W tradycyjnym systemie znajdują się w oddzielnej warstwie podłogowej nad konstrukcją. Zmienia to koordynację, dynamikę cieplną, naprawę i zakres odpowiedzialności." } },
        { "@type": "Question", "name": "Czy wolno umieścić rury grzewcze w nośnej płycie fundamentowej?", "acceptedAnswer": { "@type": "Answer", "text": "Takie rozwiązanie jest możliwe, jeżeli zostało przewidziane i skoordynowane w dokumentacji. Konstruktor musi zaakceptować położenie, mocowanie i przejścia, a projektant instalacji określa parametry cieplne oraz hydrauliczne." } },
        { "@type": "Question", "name": "Na jakiej głębokości powinny znajdować się rury?", "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednej prawidłowej głębokości dla każdej płyty. Położenie wpływa na przewodzenie i bezwładność, a równocześnie musi spełniać wymagania konstrukcyjne, otuliny i technologii wykonania." } },
        { "@type": "Question", "name": "Czy rury można mocować bezpośrednio do zbrojenia?", "acceptedAnswer": { "@type": "Answer", "text": "Sposób mocowania musi być zaakceptowany dla konkretnej konstrukcji i systemu rury. Rozwiązanie wygodne wykonawczo nie jest automatycznie dopuszczone przez projektanta konstrukcji." } },
        { "@type": "Question", "name": "Jaki rozstaw rur zastosować: 10, 15 czy 20 cm?", "acceptedAnswer": { "@type": "Answer", "text": "Rozstaw wynika z wymaganej mocy pomieszczenia, aktywnej powierzchni, położenia rur, okładziny i temperatury wody. Żadna wartość nie jest uniwersalnym standardem dla całego budynku." } },
        { "@type": "Question", "name": "Czy pętla rury 16 × 2 mm może mieć dokładnie 100 m?", "acceptedAnswer": { "@type": "Answer", "text": "Około 100 m bywa ograniczeniem roboczym, ale nie zastępuje obliczenia. Dopuszczalna długość zależy od światła rury, przepływu, medium, oporów i dostępnego naporu pompy." } },
        { "@type": "Question", "name": "Czy gęstszy rozstaw zawsze zwiększa opory hydrauliczne?", "acceptedAnswer": { "@type": "Answer", "text": "Sam rozstaw nie jest oporem pętli. Gęstsze ułożenie zwiększa ilość rury na metr kwadratowy, ale powierzchnię można podzielić na większą liczbę krótszych obwodów. Decyduje kompletna geometria, przepływy i średnice." } },
        { "@type": "Question", "name": "Jaka rura jest najlepsza do płyty fundamentowej?", "acceptedAnswer": { "@type": "Answer", "text": "Nie da się wskazać najlepszego materiału wyłącznie po nazwie PE-X, PE-RT lub rura wielowarstwowa. Trzeba sprawdzić konkretny wyrób, wymiar, klasę, barierę tlenową, promień gięcia i dokumentację." } },
        { "@type": "Question", "name": "Czy wszystkie pętle trzeba wykonać bez połączeń?", "acceptedAnswer": { "@type": "Answer", "text": "Pętle należy projektować z jednego odcinka bez planowanych połączeń w polu płyty. Sposób ewentualnej naprawy musi wynikać z dokumentacji systemu i zostać uzgodniony przed zakryciem." } },
        { "@type": "Question", "name": "Jakie ciśnienie zastosować podczas próby?", "acceptedAnswer": { "@type": "Answer", "text": "Nie należy przyjmować jednej wartości dla każdej instalacji. Ciśnienie, medium, czas i kryteria odbioru muszą wynikać z projektu, dokumentacji systemu, warunków budowy i procedury." } },
        { "@type": "Question", "name": "Czy próbę wykonywać wodą czy sprężonym powietrzem?", "acceptedAnswer": { "@type": "Answer", "text": "Wybór zależy od procedury, dokumentacji, temperatury i bezpieczeństwa. Próba gazem wymaga szczególnej ostrożności, a woda może być niewłaściwa przy ryzyku zamarznięcia." } },
        { "@type": "Question", "name": "Czy rury powinny pozostawać pod ciśnieniem podczas betonowania?", "acceptedAnswer": { "@type": "Answer", "text": "Sposób monitorowania należy ustalić w procedurze wykonawczej i dokumentacji systemu. Potrzebne są przyrząd, osoba odpowiedzialna i zdefiniowana reakcja na zmianę wskazania." } },
        { "@type": "Question", "name": "Ile czasu nagrzewa się ogrzewana płyta?", "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednego czasu dla każdej konstrukcji. Zależy on od masy, położenia rur, mocy źródła, temperatury początkowej, izolacji i wykończenia." } },
        { "@type": "Question", "name": "Czy przy dużej bezwładności termostaty są niepotrzebne?", "acceptedAnswer": { "@type": "Answer", "text": "Nie można tego stwierdzić kategorycznie. Bezwładność ogranicza skuteczność szybkich zmian, ale czujniki, ograniczenia, regulacja strefowa i sterowanie pogodowe nadal mogą pełnić określone funkcje." } },
        { "@type": "Question", "name": "Czy ogrzewana płyta dobrze współpracuje z pompą ciepła?", "acceptedAnswer": { "@type": "Answer", "text": "Może tworzyć korzystny układ niskotemperaturowy, jeżeli powierzchnia pokrywa obciążenie przy rozsądnej temperaturze wody, a przepływy i sterowanie są zgodne z wymaganiami pompy." } },
        { "@type": "Question", "name": "Czy na ogrzewanej płycie można ułożyć panele albo drewno?", "acceptedAnswer": { "@type": "Answer", "text": "Tak, jeżeli okładzina i podkład są dopuszczone do ogrzewania podłogowego, a ich opór i ograniczenia temperaturowe uwzględniono w obliczeniu mocy." } },
        { "@type": "Question", "name": "Jak bezpiecznie wiercić w podłodze po zakończeniu budowy?", "acceptedAnswer": { "@type": "Answer", "text": "Podstawą jest rzut powykonawczy i zdjęcia odniesione do trwałych punktów. Przed ingerencją trzeba uwzględnić rury, zbrojenie, inne instalacje i wymagania konstrukcyjne." } },
        { "@type": "Question", "name": "Czy uszkodzoną rurę w płycie można naprawić?", "acceptedAnswer": { "@type": "Answer", "text": "Naprawa punktowa może być możliwa, ale zakres zależy od lokalizacji, systemu rury i konstrukcji. Przed kuciem trzeba zlokalizować uszkodzenie, uzgodnić ingerencję z konstruktorem i zastosować rozwiązanie systemowe." } }
      ]
    }
  ]
}
</script>

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

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

  var modules = {
    ground: {
      title: "Grunt i posadowienie",
      summary: "Warunki gruntu, wody i przygotowania podłoża wpływają na konstrukcję oraz sposób ograniczenia strat do gruntu.",
      owner: "projektant konstrukcji i geotechnik",
      document: "opinia lub dokumentacja geotechniczna oraz projekt posadowienia",
      risk: "niezgodnego podłoża, zmian rzędnych i nieuzgodnionych przejść instalacyjnych"
    },
    insulation: {
      title: "Izolacja i krawędź płyty",
      summary: "Ochrona dolna i obwodowa ogranicza straty, ale musi być spójna z geometrią, hydroizolacją oraz obciążeniami konstrukcji.",
      owner: "projektant konstrukcji i osoba wykonująca obliczenia cieplne",
      document: "detale warstw, krawędzi, ciągłości izolacji i przenikania ciepła do gruntu",
      risk: "przerw izolacji, przypadkowych zamian materiału i mostków na obwodzie płyty"
    },
    structure: {
      title: "Konstrukcja i zbrojenie",
      summary: "Położenie rur nie może kolidować ze zbrojeniem, otuliną, kotwami, strefami obciążeń ani technologią wykonywania płyty.",
      owner: "projektant konstrukcji oraz kierownik budowy",
      document: "projekt płyty i pisemne uzgodnienie sposobu prowadzenia oraz mocowania instalacji",
      risk: "samodzielnych zmian zbrojenia, otuliny, przejść i wysokości prowadzenia rur"
    },
    pipes: {
      title: "Rury i aktywne pola",
      summary: "Trasy wynikają z mocy pomieszczeń, powierzchni czynnej, kolizji i warunków montażu konkretnego systemu rury.",
      owner: "projektant instalacji, konstruktor i wykonawca",
      document: "rzut pętli, zestawienie rozstawów oraz karta techniczna wybranego wyrobu",
      risk: "układania na oko, zbyt małych promieni, uszkodzeń warstw i nieuzgodnionych połączeń"
    },
    hydraulics: {
      title: "Pętle i rozdzielacz",
      summary: "Każdy obwód potrzebuje obliczonego przepływu, straty ciśnienia i rzeczywistej długości razem z dobiegiem.",
      owner: "projektant instalacji grzewczej",
      document: "zestawienie pętli, przepływów, oporów, nastaw oraz punktu pracy pompy",
      risk: "jednego limitu metrów zamiast obliczeń i rozdzielacza wybieranego po wykonaniu płyty"
    },
    pour: {
      title: "Próba i betonowanie",
      summary: "Odbiór przed zakryciem oraz nadzór podczas prac ograniczają ryzyko pozostawienia niewykrytego uszkodzenia w gotowej płycie.",
      owner: "wykonawca, kierownik budowy i osoby wskazane w procedurze odbioru",
      document: "procedura próby, protokół, rzut powykonawczy, zdjęcia i plan kontroli betonowania",
      risk: "betonowania bez odbioru, bez obserwacji instalacji i bez reakcji na zmianę ciśnienia"
    }
  };

  var moduleButtons = guide.querySelectorAll("[data-rk-slab-module]");
  var moduleHeading = document.getElementById("rk-slab-module-heading");
  var moduleSummary = document.getElementById("rk-slab-module-summary");
  var moduleOwner = document.getElementById("rk-slab-module-owner");
  var moduleDocument = document.getElementById("rk-slab-module-document");
  var moduleRisk = document.getElementById("rk-slab-module-risk");

  function showModule(key) {
    var data = modules[key];
    if (!data) {
      return;
    }
    moduleHeading.textContent = data.title;
    moduleSummary.textContent = data.summary;
    moduleOwner.textContent = data.owner;
    moduleDocument.textContent = data.document;
    moduleRisk.textContent = data.risk;
    moduleButtons.forEach(function (button) {
      var active = button.getAttribute("data-rk-slab-module") === key;
      button.setAttribute("aria-selected", active ? "true" : "false");
    });
  }

  moduleButtons.forEach(function (button) {
    button.addEventListener("click", function () {
      showModule(button.getAttribute("data-rk-slab-module"));
    });
  });

  var checks = [
    { id: "rk-slab-ozc", yes: "OZC pomieszczeń jest udokumentowane.", unknown: "Uzupełnij obciążenie cieplne każdego pomieszczenia.", no: "Brak OZC — nie ma podstawy do doboru mocy i rozstawu.", critical: true },
    { id: "rk-slab-active", yes: "Aktywne pola i wyłączenia są pokazane na rzucie.", unknown: "Wyznacz aktywne pola i wszystkie strefy wyłączone.", no: "Trasy mają powstać bez skoordynowanego rzutu aktywnych pól.", critical: true },
    { id: "rk-slab-output", yes: "Moc powierzchni sprawdzono dla warstw podłogi.", unknown: "Sprawdź moc powierzchni dla konstrukcji i okładziny.", no: "Typowa wartość W/m² zastępuje obliczenie rzeczywistego układu.", critical: true },
    { id: "rk-slab-temperature", yes: "Temperatura zasilania jest powiązana z mocą i źródłem.", unknown: "Wyznacz temperatury pracy z obliczeń.", no: "Temperaturę zasilania przyjęto bez sprawdzenia wymaganej mocy.", critical: false },
    { id: "rk-slab-structural", yes: "Projekt konstrukcyjny płyty jest dostępny.", unknown: "Potwierdź zakończenie projektu konstrukcyjnego.", no: "Konstrukcja nadal się zmienia — instalacji nie należy zamykać w betonie.", critical: true },
    { id: "rk-slab-position", yes: "Położenie i mocowanie rur uzgodniono konstrukcyjnie.", unknown: "Uzyskaj jednoznaczne uzgodnienie położenia oraz mocowania rur.", no: "Położenie rur wybrano bez akceptacji konstrukcyjnej.", critical: true },
    { id: "rk-slab-collisions", yes: "Kolizje międzybranżowe zostały sprawdzone.", unknown: "Zakończ koordynację przepustów, odpływów, kotew, ścian i zbrojenia.", no: "Niespójne rysunki branż tworzą wysokie ryzyko kolizji w płycie.", critical: true },
    { id: "rk-slab-roles", yes: "Zakres odpowiedzialności jest jednoznaczny.", unknown: "Wskaż osoby zatwierdzające instalację, konstrukcję, próbę i betonowanie.", no: "Krytyczne decyzje pozostawiono ekipom na dzień betonowania.", critical: true },
    { id: "rk-slab-pipe", yes: "Rura, średnica i rozstaw są określone w dokumentacji.", unknown: "Wskaż konkretny typ, wymiar i rozstaw rur.", no: "Produkt ma być dobrany na budowie bez odniesienia do projektu.", critical: true },
    { id: "rk-slab-loops", yes: "Długości, przepływy i opory wszystkich pętli są policzone.", unknown: "Oblicz hydraulikę wszystkich obwodów.", no: "Sam limit długości zastępuje obliczenia przepływów i oporów.", critical: true },
    { id: "rk-slab-manifold", yes: "Rozdzielacz i dobiegi są uwzględnione na rzucie.", unknown: "Ustal rozdzielacz i rzeczywiste długości dobiegów.", no: "Miejsce rozdzielacza ma zostać wybrane po wykonaniu płyty.", critical: true },
    { id: "rk-slab-system", yes: "Dostępna jest dokumentacja konkretnej rury i systemu.", unknown: "Pozyskaj kartę, instrukcję i listę zgodnych elementów.", no: "Opis handlowy zastępuje dokumentację techniczną produktu.", critical: true },
    { id: "rk-slab-test-plan", yes: "Procedura próby i kryteria odbioru są określone.", unknown: "Ustal medium, ciśnienie, czas, temperaturę i kryteria próby.", no: "Próba ma być wykonana bez zdefiniowanej procedury.", critical: true },
    { id: "rk-slab-test", yes: "Próba została wykonana i zaprotokołowana.", unknown: "Wykonaj próbę i odbiór przed betonowaniem.", no: "Betonowanie bez próby jest warunkiem krytycznym.", critical: true },
    { id: "rk-slab-monitor", yes: "Kontrola instalacji podczas betonowania jest zaplanowana.", unknown: "Wyznacz kontrolę i reakcję na podejrzenie uszkodzenia.", no: "Instalacja ma zostać zabetonowana bez monitorowania.", critical: true },
    { id: "rk-slab-asbuilt", yes: "Dokumentacja powykonawcza jest przygotowana.", unknown: "Przygotuj zdjęcia, rzut, oznaczenia i zapis partii rur.", no: "Po zakryciu nie będzie wiarygodnego zapisu tras i materiałów.", critical: false }
  ];

  function valueOf(id) {
    var field = document.getElementById(id);
    if (!field) {
      return "unknown";
    }
    return field.value;
  }

  function renderList(id, items, emptyText) {
    var list = document.getElementById(id);
    list.textContent = "";
    if (items.length === 0) {
      var emptyItem = document.createElement("li");
      emptyItem.textContent = emptyText;
      list.appendChild(emptyItem);
      return;
    }
    items.forEach(function (textValue) {
      var item = document.createElement("li");
      item.textContent = textValue;
      list.appendChild(item);
    });
  }

  function analyzeReadiness() {
    var ok = [];
    var check = [];
    var stop = [];

    checks.forEach(function (item) {
      var value = valueOf(item.id);
      if (value === "yes") {
        ok.push(item.yes);
      } else {
        if (value === "no") {
          if (item.critical) {
            stop.push(item.no);
          } else {
            check.push(item.no);
          }
        } else {
          check.push(item.unknown);
        }
      }
    });

    var result = document.getElementById("rk-slab-result");
    var status = document.getElementById("rk-slab-result-status");
    var intro = document.getElementById("rk-slab-result-intro");
    result.classList.remove("is-good");
    result.classList.remove("is-stop");

    if (stop.length > 0) {
      result.classList.add("is-stop");
      status.textContent = "STOP — nie rozpoczynaj betonowania";
      intro.textContent = "Wykryto co najmniej jeden brak albo konflikt, którego nie należy zamykać w płycie.";
    } else {
      if (check.length > 0) {
        status.textContent = "Warunkowo gotowe — uzupełnij dokumenty i potwierdzenia";
        intro.textContent = "Nie wskazano jawnego konfliktu krytycznego, ale kontrola nie jest jeszcze kompletna.";
      } else {
        result.classList.add("is-good");
        status.textContent = "Dane przygotowane do formalnego odbioru";
        intro.textContent = "Formularz nie wykazał braków. Ostateczną zgodę wydają osoby odpowiedzialne za konstrukcję, instalację i prowadzenie robót.";
      }
    }

    document.getElementById("rk-slab-ok-count").textContent = String(ok.length);
    document.getElementById("rk-slab-check-count").textContent = String(check.length);
    document.getElementById("rk-slab-stop-count").textContent = String(stop.length);
    renderList("rk-slab-ok-list", ok, "Brak potwierdzonych elementów.");
    renderList("rk-slab-check-list", check, "Nie wskazano dodatkowych braków.");
    renderList("rk-slab-stop-list", stop, "Nie wykryto warunku krytycznego.");
  }

  var runButton = document.getElementById("rk-slab-run");
  var resetButton = document.getElementById("rk-slab-reset");

  runButton.addEventListener("click", analyzeReadiness);
  resetButton.addEventListener("click", function () {
    var fields = guide.querySelectorAll(".rk-slab-analyzer select");
    fields.forEach(function (field) {
      field.selectedIndex = 0;
    });
    var result = document.getElementById("rk-slab-result");
    result.classList.remove("is-good");
    result.classList.remove("is-stop");
    document.getElementById("rk-slab-result-status").textContent = "Uzupełnij cztery obszary kontroli";
    document.getElementById("rk-slab-result-intro").textContent = "Wynik rozdzieli elementy potwierdzone, brakujące i krytyczne przed betonowaniem.";
    document.getElementById("rk-slab-ok-count").textContent = "0";
    document.getElementById("rk-slab-check-count").textContent = "0";
    document.getElementById("rk-slab-stop-count").textContent = "0";
    renderList("rk-slab-ok-list", [], "Jeszcze brak ocenionych danych.");
    renderList("rk-slab-check-list", [], "Uzupełnij formularz na podstawie dokumentów.");
    renderList("rk-slab-stop-list", [], "Brak oceny nie oznacza gotowości do betonowania.");
  });

  showModule("ground");
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-plycie-fundamentowej-techniczny-przewodnik-po-projektowaniu-i-montazu/">Ogrzewanie podłogowe w płycie fundamentowej – projekt i montaż.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Samodzielny montaż ogrzewania podłogowego – 5 błędów przed wylewką.</title>
		<link>https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 19 Apr 2026 19:27:33 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Efektywne ogrzewanie]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Systemy ogrzewania]]></category>
		<category><![CDATA[Technika grzewcza]]></category>
		<category><![CDATA[Technika instalacyjna]]></category>
		<category><![CDATA[błędy wykonawcze]]></category>
		<category><![CDATA[budowa domu]]></category>
		<category><![CDATA[dylatacje]]></category>
		<category><![CDATA[hydraulika]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[montaż samodzielny]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[pętle grzewcze]]></category>
		<category><![CDATA[porady techniczne]]></category>
		<category><![CDATA[próba szczelności]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[rura pex]]></category>
		<category><![CDATA[zebra termiczna]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4245</guid>

					<description><![CDATA[<p>Planujesz samodzielny montaż instalacji grzewczej, by zaoszczędzić na robociźnie? Wiele osób, wpisując w wyszukiwarkę frazę „jak samemu zrobić ogrzewanie podłogowe”, skupia się wyłącznie na prostocie rozkładania rur PEX, zapominając o bezlitosnych prawach fizyki budowli i mechaniki płynów. Ten techniczny przewodnik obala popularne mity i analizuje pięć najpoważniejszych „grzechów głównych” popełnianych przez inwestorów. Dowiesz się z niego, dlaczego brak profesjonalnego projektu, zignorowanie dylatacji czy zbyt długie pętle grzewcze mogą doprowadzić do nieodwracalnych uszkodzeń wylewki i kosztownego remontu. Zamiast uczyć się na własnych błędach pod warstwą betonu, poznaj inżynierskie standardy, które zagwarantują Ci komfort cieplny i niskie rachunki przez kolejne trzydzieści lat.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/">Samodzielny montaż ogrzewania podłogowego – 5 błędów przed wylewką.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-diy-guide {
    --rk-navy: #0b2536;
    --rk-navy-2: #12394d;
    --rk-navy-3: #1b465b;
    --rk-cyan: #29c4d7;
    --rk-cyan-dark: #0786a6;
    --rk-cyan-soft: #def7fa;
    --rk-orange: #ff6846;
    --rk-orange-dark: #df4e30;
    --rk-yellow: #f2b526;
    --rk-green: #2fcda1;
    --rk-green-dark: #14775f;
    --rk-red: #d7504a;
    --rk-red-dark: #9f332e;
    --rk-ink: #10283a;
    --rk-copy: #3c5668;
    --rk-muted: #688091;
    --rk-line: #d3e2e8;
    --rk-bg: #f3f8fa;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: Arial, Helvetica, sans-serif;
    line-height: 1.62;
    margin: 0 auto;
    max-width: 1360px;
    overflow-wrap: anywhere;
    width: 100%;
  }

  #rk-diy-guide,
  #rk-diy-guide * {
    box-sizing: border-box;
    min-width: 0;
  }

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

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

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

  #rk-diy-guide button:focus-visible,
  #rk-diy-guide a:focus-visible,
  #rk-diy-guide summary:focus-visible,
  #rk-diy-guide select:focus-visible {
    outline: 3px solid rgba(41, 196, 215, 0.48);
    outline-offset: 3px;
  }

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

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

  #rk-diy-guide .rk-diy-hero {
    background:
      radial-gradient(circle at 89% 111%, rgba(41, 196, 215, 0.24) 0, rgba(41, 196, 215, 0.24) 17%, transparent 17.2%),
      linear-gradient(120deg, #0b2536 0%, #143e52 61%, #0d6576 100%);
    color: #ffffff;
    overflow: hidden;
    padding: 62px 58px 56px;
    position: relative;
  }

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

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

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

  #rk-diy-guide .rk-diy-hero-title {
    font-size: clamp(2.35rem, 5.8vw, 5.15rem);
    margin: 0;
    max-width: 1190px;
  }

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

  #rk-diy-guide .rk-diy-hero-lead {
    color: #e3f0f4;
    font-size: clamp(1.08rem, 2vw, 1.42rem);
    line-height: 1.55;
    margin: 27px 0 0;
    max-width: 1110px;
  }

  #rk-diy-guide .rk-diy-hero-tags,
  #rk-diy-guide .rk-diy-meta,
  #rk-diy-guide .rk-diy-shortcuts {
    display: flex;
    flex-wrap: wrap;
  }

  #rk-diy-guide .rk-diy-hero-tags {
    gap: 10px;
    margin-top: 30px;
  }

  #rk-diy-guide .rk-diy-hero-tags span {
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 999px;
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 800;
    padding: 8px 14px;
  }

  #rk-diy-guide .rk-diy-meta {
    color: #c5d9df;
    font-size: 0.83rem;
    font-weight: 700;
    gap: 12px 24px;
    margin-top: 34px;
  }

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

  #rk-diy-guide .rk-diy-shortcuts {
    align-items: center;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    gap: 9px;
    padding: 22px 34px;
    position: static;
  }

  #rk-diy-guide .rk-diy-shortcuts-label {
    color: var(--rk-ink);
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-right: 4px;
    text-transform: uppercase;
  }

  #rk-diy-guide .rk-diy-shortcuts a {
    background: #f1f6f8;
    border: 1px solid transparent;
    border-radius: 999px;
    color: var(--rk-ink);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    padding: 8px 12px;
    text-decoration: none;
  }

  #rk-diy-guide .rk-diy-shortcuts a:hover,
  #rk-diy-guide .rk-diy-shortcuts a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: #91dce5;
    color: #075f78;
  }

  #rk-diy-guide .rk-diy-section {
    padding: 64px 58px;
  }

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

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

  #rk-diy-guide .rk-diy-section-dark {
    background: var(--rk-navy);
    color: #ffffff;
  }

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

  #rk-diy-guide .rk-diy-section-dark .rk-diy-eyebrow {
    color: #68e6ef;
  }

  #rk-diy-guide .rk-diy-section-title,
  #rk-diy-guide .rk-diy-author-title {
    color: var(--rk-ink);
    font-size: clamp(2rem, 4vw, 3.55rem);
    margin: 0;
    max-width: 1090px;
  }

  #rk-diy-guide .rk-diy-section-dark .rk-diy-section-title {
    color: #ffffff;
  }

  #rk-diy-guide .rk-diy-lead {
    color: var(--rk-copy);
    font-size: clamp(1.03rem, 1.7vw, 1.25rem);
    line-height: 1.7;
    margin: 22px 0 0;
    max-width: 1130px;
  }

  #rk-diy-guide .rk-diy-copy {
    color: var(--rk-copy);
    margin: 22px 0 0;
  }

  #rk-diy-guide .rk-diy-section-dark .rk-diy-lead,
  #rk-diy-guide .rk-diy-section-dark .rk-diy-copy {
    color: #c8dbe2;
  }

  #rk-diy-guide .rk-diy-copy strong,
  #rk-diy-guide .rk-diy-lead strong {
    color: var(--rk-ink);
  }

  #rk-diy-guide .rk-diy-section-dark .rk-diy-copy strong,
  #rk-diy-guide .rk-diy-section-dark .rk-diy-lead strong {
    color: #ffffff;
  }

  #rk-diy-guide .rk-diy-answer {
    background: linear-gradient(135deg, #e6fafd 0%, #f8fcfd 100%);
    border: 1px solid #9cdfe8;
    border-left: 7px solid var(--rk-cyan);
    border-radius: 18px;
    margin-top: 28px;
    padding: 27px 29px;
  }

  #rk-diy-guide .rk-diy-answer strong {
    color: var(--rk-ink);
    display: block;
    font-size: 1.22rem;
    line-height: 1.4;
  }

  #rk-diy-guide .rk-diy-answer p {
    color: var(--rk-copy);
    margin: 10px 0 0;
  }

  #rk-diy-guide .rk-diy-grid-2,
  #rk-diy-guide .rk-diy-grid-3,
  #rk-diy-guide .rk-diy-grid-4,
  #rk-diy-guide .rk-diy-source-grid,
  #rk-diy-guide .rk-diy-author-facts {
    display: grid;
    gap: 18px;
    margin-top: 30px;
  }

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

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

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

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

  #rk-diy-guide .rk-diy-section-soft .rk-diy-card {
    background: rgba(255, 255, 255, 0.88);
  }

  #rk-diy-guide .rk-diy-card-number,
  #rk-diy-guide .rk-diy-icon {
    align-items: center;
    background: var(--rk-cyan-soft);
    border-radius: 10px;
    color: #076c85;
    display: inline-flex;
    font-size: 0.8rem;
    font-weight: 900;
    height: 36px;
    justify-content: center;
    margin-bottom: 14px;
    min-width: 36px;
    padding: 0 10px;
  }

  #rk-diy-guide .rk-diy-icon.is-stop {
    background: #ffe8e2;
    color: var(--rk-red-dark);
  }

  #rk-diy-guide .rk-diy-icon.is-check {
    background: #fff3d4;
    color: #79580d;
  }

  #rk-diy-guide .rk-diy-icon.is-ok {
    background: #e5f9f2;
    color: var(--rk-green-dark);
  }

  #rk-diy-guide .rk-diy-card h3,
  #rk-diy-guide .rk-diy-card h4 {
    color: var(--rk-ink);
    line-height: 1.3;
    margin: 0 0 9px;
  }

  #rk-diy-guide .rk-diy-card h3 {
    font-size: 1.12rem;
  }

  #rk-diy-guide .rk-diy-card h4 {
    font-size: 1rem;
  }

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

  #rk-diy-guide .rk-diy-card p + p {
    margin-top: 10px;
  }

  #rk-diy-guide .rk-diy-note {
    background: #fff6e2;
    border-left: 6px solid var(--rk-yellow);
    border-radius: 14px;
    color: #5b4a1d;
    margin-top: 26px;
    padding: 18px 21px;
  }

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

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

  #rk-diy-guide .rk-diy-note-bad {
    background: #fff0ec;
    border-left-color: var(--rk-orange);
    color: #743425;
  }

  #rk-diy-guide .rk-diy-bullets {
    color: var(--rk-copy);
    margin: 20px 0 0;
    padding-left: 22px;
  }

  #rk-diy-guide .rk-diy-bullets li + li {
    margin-top: 9px;
  }

  #rk-diy-guide .rk-diy-table-wrap {
    margin-top: 30px;
    overflow-x: auto;
  }

  #rk-diy-guide table {
    border-collapse: separate;
    border-spacing: 0;
    min-width: 780px;
    width: 100%;
  }

  #rk-diy-guide th {
    background: var(--rk-navy);
    border-bottom: 1px solid #31576a;
    color: #ffffff;
    font-size: 0.77rem;
    letter-spacing: 0.04em;
    padding: 15px 16px;
    text-align: left;
    text-transform: uppercase;
  }

  #rk-diy-guide th:first-child {
    border-radius: 14px 0 0;
  }

  #rk-diy-guide th:last-child {
    border-radius: 0 14px 0 0;
  }

  #rk-diy-guide td {
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    color: var(--rk-copy);
    padding: 16px;
    vertical-align: top;
  }

  #rk-diy-guide tbody tr td:first-child {
    border-left: 1px solid var(--rk-line);
  }

  #rk-diy-guide tbody tr td:last-child {
    border-right: 1px solid var(--rk-line);
  }

  #rk-diy-guide tbody tr:last-child td:first-child {
    border-radius: 0 0 0 14px;
  }

  #rk-diy-guide tbody tr:last-child td:last-child {
    border-radius: 0 0 14px;
  }

  #rk-diy-guide td strong {
    color: var(--rk-ink);
  }

  #rk-diy-guide .rk-diy-stage-graphic {
    background: var(--rk-navy);
    border-radius: 22px;
    color: #ffffff;
    margin-top: 32px;
    padding: 28px;
  }

  #rk-diy-guide .rk-diy-stage-intro {
    color: #bdd5de;
    margin: 0 0 20px;
  }

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

  #rk-diy-guide .rk-diy-stage-tab {
    background: #173e51;
    border: 1px solid #356178;
    border-radius: 13px;
    color: #ffffff;
    cursor: pointer;
    font-weight: 900;
    line-height: 1.25;
    min-height: 64px;
    padding: 11px 12px;
  }

  #rk-diy-guide .rk-diy-stage-tab[aria-selected="true"] {
    background: var(--rk-cyan);
    border-color: var(--rk-cyan);
    color: #072838;
  }

  #rk-diy-guide .rk-diy-stage-panel {
    background: #17394b;
    border: 1px solid #356178;
    border-radius: 18px;
    margin-top: 18px;
    padding: 25px;
  }

  #rk-diy-guide .rk-diy-stage-label {
    color: #71e6ef;
    display: block;
    font-size: 0.73rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  #rk-diy-guide .rk-diy-stage-panel h3 {
    color: #ffffff;
    font-size: 1.55rem;
    line-height: 1.25;
    margin: 7px 0 8px;
  }

  #rk-diy-guide .rk-diy-stage-panel > p {
    color: #c8dce3;
    margin: 0;
  }

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

  #rk-diy-guide .rk-diy-stage-fact {
    background: rgba(255, 255, 255, 0.055);
    border: 1px solid rgba(255, 255, 255, 0.13);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-diy-guide .rk-diy-stage-fact strong {
    color: #71e6ef;
    display: block;
    font-size: 0.72rem;
    letter-spacing: 0.07em;
    margin-bottom: 6px;
    text-transform: uppercase;
  }

  #rk-diy-guide .rk-diy-stage-fact span {
    color: #ffffff;
  }

  #rk-diy-guide .rk-diy-analyzer {
    background: #102f42;
    border: 1px solid #315a70;
    border-radius: 22px;
    margin-top: 32px;
    padding: 28px;
  }

  #rk-diy-guide .rk-diy-analyzer-head {
    border-bottom: 1px solid #315a70;
    margin-bottom: 25px;
    padding-bottom: 20px;
  }

  #rk-diy-guide .rk-diy-analyzer-head h3 {
    color: #ffffff;
    font-size: clamp(1.55rem, 3vw, 2.3rem);
    line-height: 1.2;
    margin: 0;
  }

  #rk-diy-guide .rk-diy-analyzer-head p {
    color: #bad3dc;
    margin: 9px 0 0;
  }

  #rk-diy-guide .rk-diy-analyzer-stage {
    background: #17394b;
    border: 1px solid #376177;
    border-radius: 17px;
    margin-top: 18px;
    padding: 22px;
  }

  #rk-diy-guide .rk-diy-analyzer-stage.is-optional {
    background: #153647;
  }

  #rk-diy-guide .rk-diy-stage-head {
    align-items: flex-start;
    display: flex;
    gap: 13px;
    margin-bottom: 18px;
  }

  #rk-diy-guide .rk-diy-stage-number {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 10px;
    color: #082c3c;
    display: inline-flex;
    flex: 0 0 38px;
    font-weight: 900;
    height: 38px;
    justify-content: center;
  }

  #rk-diy-guide .rk-diy-stage-head h4 {
    color: #ffffff;
    font-size: 1.15rem;
    line-height: 1.3;
    margin: 0;
  }

  #rk-diy-guide .rk-diy-stage-head p {
    color: #aecad5;
    font-size: 0.88rem;
    margin: 4px 0 0;
  }

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

  #rk-diy-guide .rk-diy-field {
    display: block;
  }

  #rk-diy-guide .rk-diy-field > span {
    color: #eaf6f8;
    display: block;
    font-size: 0.79rem;
    font-weight: 800;
    line-height: 1.35;
    margin-bottom: 7px;
  }

  #rk-diy-guide .rk-diy-field small {
    color: #9bbbc7;
    display: block;
    font-size: 0.72rem;
    line-height: 1.4;
    margin-top: 6px;
  }

  #rk-diy-guide .rk-diy-field select {
    appearance: auto;
    background: #ffffff;
    border: 1px solid #b8ccd5;
    border-radius: 10px;
    color: var(--rk-ink);
    min-height: 48px;
    padding: 10px 12px;
    width: 100%;
  }

  #rk-diy-guide .rk-diy-analyzer-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 11px;
    margin-top: 20px;
  }

  #rk-diy-guide .rk-diy-analyze-button,
  #rk-diy-guide .rk-diy-reset-button {
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    min-height: 48px;
    padding: 11px 18px;
  }

  #rk-diy-guide .rk-diy-analyze-button {
    background: var(--rk-orange);
    border: 1px solid var(--rk-orange);
    color: #ffffff;
  }

  #rk-diy-guide .rk-diy-analyze-button:hover {
    background: var(--rk-orange-dark);
  }

  #rk-diy-guide .rk-diy-reset-button {
    background: transparent;
    border: 1px solid #5d7c8d;
    color: #ffffff;
  }

  #rk-diy-guide .rk-diy-result {
    background: #ffffff;
    border-left: 7px solid var(--rk-yellow);
    border-radius: 17px;
    margin-top: 22px;
    padding: 24px;
  }

  #rk-diy-guide .rk-diy-result.is-good {
    border-left-color: var(--rk-green);
  }

  #rk-diy-guide .rk-diy-result.is-stop {
    border-left-color: var(--rk-orange);
  }

  #rk-diy-guide .rk-diy-result-status {
    color: var(--rk-ink) !important;
    font-size: clamp(1.35rem, 2.6vw, 2rem);
    font-weight: 900;
    line-height: 1.25;
    margin: 0;
  }

  #rk-diy-guide .rk-diy-result-intro {
    color: var(--rk-copy) !important;
    margin: 8px 0 0;
  }

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

  #rk-diy-guide .rk-diy-result-count {
    background: #f1f7f9;
    border: 1px solid var(--rk-line);
    border-radius: 12px;
    padding: 14px;
  }

  #rk-diy-guide .rk-diy-result-count span {
    color: var(--rk-muted) !important;
    display: block;
    font-size: 0.71rem;
    font-weight: 900;
    letter-spacing: 0.06em;
    text-transform: uppercase;
  }

  #rk-diy-guide .rk-diy-result-count strong {
    color: var(--rk-ink) !important;
    display: block;
    font-size: 1.45rem;
    margin-top: 3px;
  }

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

  #rk-diy-guide .rk-diy-result-column {
    background: #f5f9fa;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    padding: 16px;
  }

  #rk-diy-guide .rk-diy-result-column h4 {
    color: var(--rk-ink) !important;
    font-size: 0.88rem;
    letter-spacing: 0.05em;
    margin: 0 0 10px;
    text-transform: uppercase;
  }

  #rk-diy-guide .rk-diy-result-column.is-ok h4 {
    color: var(--rk-green-dark) !important;
  }

  #rk-diy-guide .rk-diy-result-column.is-check h4 {
    color: #88600e !important;
  }

  #rk-diy-guide .rk-diy-result-column.is-stop h4 {
    color: #a83d2d !important;
  }

  #rk-diy-guide .rk-diy-result-column ul {
    color: var(--rk-copy) !important;
    font-size: 0.87rem;
    margin: 0;
    padding-left: 18px;
  }

  #rk-diy-guide .rk-diy-result-column li + li {
    margin-top: 7px;
  }

  #rk-diy-guide .rk-diy-disclaimer {
    color: #667d8c !important;
    font-size: 0.78rem;
    margin: 15px 0 0;
  }

  #rk-diy-guide .rk-diy-cta {
    background:
      radial-gradient(circle at 93% 120%, rgba(41, 196, 215, 0.22) 0, rgba(41, 196, 215, 0.22) 19%, transparent 19.2%),
      linear-gradient(125deg, #0b2536 0%, #153e51 62%, #0d6272 100%);
    border-radius: 21px;
    color: #ffffff;
    margin-top: 34px;
    overflow: hidden;
    padding: 36px;
  }

  #rk-diy-guide .rk-diy-cta-title {
    color: #ffffff;
    font-size: clamp(1.7rem, 3.3vw, 2.8rem);
    margin: 0;
    max-width: 990px;
  }

  #rk-diy-guide .rk-diy-cta p {
    color: #cee0e6;
    margin: 14px 0 0;
    max-width: 990px;
  }

  #rk-diy-guide .rk-diy-cta-button {
    background: var(--rk-orange);
    border-radius: 12px;
    box-shadow: 0 12px 25px rgba(255, 104, 70, 0.24);
    color: #ffffff;
    display: inline-block;
    font-weight: 900;
    margin-top: 22px;
    padding: 14px 20px;
    text-decoration: none;
  }

  #rk-diy-guide .rk-diy-cta-button:hover,
  #rk-diy-guide .rk-diy-cta-button:focus-visible {
    background: #ffffff;
    color: var(--rk-orange-dark);
  }

  #rk-diy-guide .rk-diy-link-disclosure {
    color: #a9c4ce;
    display: block;
    font-size: 0.75rem;
    margin-top: 12px;
  }

  #rk-diy-guide .rk-diy-final {
    background: linear-gradient(180deg, #f4fafb 0%, #ffffff 100%);
  }

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

  #rk-diy-guide .rk-diy-source-card {
    background: #f2f7f9;
    border: 1px solid #cfe0e7;
    border-radius: 15px;
    padding: 20px;
  }

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

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

  #rk-diy-guide .rk-diy-responsibility {
    background: #fff0eb;
    border-left: 6px solid var(--rk-orange);
    border-radius: 14px;
    color: #613427;
    margin-top: 26px;
    padding: 19px 22px;
  }

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

  #rk-diy-guide .rk-diy-faq {
    display: grid;
    gap: 12px;
    margin-top: 30px;
  }

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

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

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

  #rk-diy-guide .rk-diy-faq summary::after {
    color: var(--rk-cyan-dark);
    content: "+";
    font-size: 1.55rem;
    font-weight: 700;
    position: absolute;
    right: 20px;
    top: 12px;
  }

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

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

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

  #rk-diy-guide .rk-diy-author {
    background: #eef6f8;
    border-top: 1px solid var(--rk-line);
    padding: 64px 58px;
  }

  #rk-diy-guide .rk-diy-author-layout {
    background: #ffffff;
    border: 1px solid #cbdde5;
    border-radius: 21px;
    display: grid;
    grid-template-columns: 290px minmax(0, 1fr);
    overflow: hidden;
  }

  #rk-diy-guide .rk-diy-author-side {
    align-items: center;
    background: var(--rk-navy);
    color: #ffffff;
    display: flex;
    flex-direction: column;
    padding: 35px 25px;
    text-align: center;
  }

  #rk-diy-guide .rk-diy-author-photo {
    background: #ffffff;
    border: 6px solid rgba(255, 255, 255, 0.2);
    border-radius: 50%;
    overflow: hidden;
    width: 158px;
  }

  #rk-diy-guide .rk-diy-author-name {
    font-size: 1.25rem;
    font-weight: 900;
    margin-top: 20px;
  }

  #rk-diy-guide .rk-diy-author-name a {
    color: #ffffff;
    text-decoration: none;
  }

  #rk-diy-guide .rk-diy-author-role {
    color: #bcd2db;
    font-size: 0.82rem;
    margin: 8px 0 0;
  }

  #rk-diy-guide .rk-diy-author-social {
    display: flex;
    gap: 10px;
    margin-top: 21px;
  }

  #rk-diy-guide .rk-diy-author-social a {
    align-items: center;
    border: 1px solid #497185;
    border-radius: 50%;
    color: #d8e9ee;
    display: inline-flex;
    height: 42px;
    justify-content: center;
    text-decoration: none;
    width: 42px;
  }

  #rk-diy-guide .rk-diy-author-social a:hover {
    background: var(--rk-cyan);
    color: var(--rk-navy);
  }

  #rk-diy-guide .rk-diy-author-main {
    padding: 37px;
  }

  #rk-diy-guide .rk-diy-author-title {
    font-size: clamp(1.85rem, 3.5vw, 3rem);
  }

  #rk-diy-guide .rk-diy-author-quote {
    background: #f7fbfc;
    border: 1px solid #cfe0e7;
    border-left: 6px solid var(--rk-cyan);
    border-radius: 14px;
    color: var(--rk-ink);
    font-size: 1.04rem;
    font-style: italic;
    font-weight: 700;
    line-height: 1.7;
    margin-top: 24px;
    padding: 20px 22px;
  }

  #rk-diy-guide .rk-diy-author-main > p {
    color: var(--rk-copy);
    margin: 18px 0 0;
  }

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

  #rk-diy-guide .rk-diy-author-fact {
    background: #eef7f9;
    border: 1px solid #d2e4e9;
    border-radius: 13px;
    color: var(--rk-copy);
    font-size: 0.84rem;
    padding: 15px;
  }

  #rk-diy-guide .rk-diy-author-fact strong {
    color: var(--rk-cyan-dark);
    display: block;
    font-size: 0.73rem;
    letter-spacing: 0.06em;
    margin-bottom: 5px;
    text-transform: uppercase;
  }

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

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

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

    #rk-diy-guide .rk-diy-result-grid,
    #rk-diy-guide .rk-diy-result-counts {
      grid-template-columns: minmax(0, 1fr);
    }
  }

  @media (max-width: 820px) {
    #rk-diy-guide .rk-diy-hero,
    #rk-diy-guide .rk-diy-section,
    #rk-diy-guide .rk-diy-author {
      padding-left: 28px;
      padding-right: 28px;
    }

    #rk-diy-guide .rk-diy-hero::before {
      left: 28px;
    }

    #rk-diy-guide .rk-diy-shortcuts {
      padding-left: 22px;
      padding-right: 22px;
    }

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

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

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

  @media (max-width: 660px) {
    #rk-diy-guide .rk-diy-hero {
      padding-bottom: 42px;
      padding-top: 52px;
    }

    #rk-diy-guide .rk-diy-section,
    #rk-diy-guide .rk-diy-author {
      padding-bottom: 46px;
      padding-top: 46px;
    }

    #rk-diy-guide .rk-diy-grid-2,
    #rk-diy-guide .rk-diy-grid-3,
    #rk-diy-guide .rk-diy-grid-4,
    #rk-diy-guide .rk-diy-fields,
    #rk-diy-guide .rk-diy-source-grid,
    #rk-diy-guide .rk-diy-author-facts,
    #rk-diy-guide .rk-diy-stage-tabs {
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-diy-guide .rk-diy-stage-graphic,
    #rk-diy-guide .rk-diy-analyzer,
    #rk-diy-guide .rk-diy-cta {
      border-radius: 17px;
      padding: 20px;
    }

    #rk-diy-guide .rk-diy-stage-panel,
    #rk-diy-guide .rk-diy-analyzer-stage,
    #rk-diy-guide .rk-diy-result {
      padding: 18px;
    }

    #rk-diy-guide .rk-diy-analyzer-actions {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
    }

    #rk-diy-guide .rk-diy-analyze-button,
    #rk-diy-guide .rk-diy-reset-button,
    #rk-diy-guide .rk-diy-cta-button {
      text-align: center;
      width: 100%;
    }

    #rk-diy-guide .rk-diy-table-wrap {
      overflow: visible;
    }

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

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

    #rk-diy-guide tbody {
      display: grid;
      gap: 14px;
    }

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

    #rk-diy-guide td,
    #rk-diy-guide tbody tr td:first-child,
    #rk-diy-guide tbody tr td:last-child {
      border: 0;
      border-bottom: 1px solid #e1ebef;
      border-radius: 0;
      padding: 13px 15px;
    }

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

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

    #rk-diy-guide .rk-diy-author-main {
      padding: 25px 20px;
    }
  }

  @media (max-width: 430px) {
    #rk-diy-guide .rk-diy-hero,
    #rk-diy-guide .rk-diy-section,
    #rk-diy-guide .rk-diy-author {
      padding-left: 18px;
      padding-right: 18px;
    }

    #rk-diy-guide .rk-diy-hero::before {
      left: 18px;
    }

    #rk-diy-guide .rk-diy-shortcuts {
      padding-left: 14px;
      padding-right: 14px;
    }

    #rk-diy-guide .rk-diy-shortcuts a {
      flex: 1 1 calc(50% - 9px);
      text-align: center;
    }

    #rk-diy-guide .rk-diy-shortcuts-label {
      flex: 1 0 100%;
    }

    #rk-diy-guide .rk-diy-hero-title {
      font-size: 2.2rem;
    }

    #rk-diy-guide .rk-diy-section-title {
      font-size: 1.88rem;
    }
  }

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

<article id="rk-diy-guide" aria-labelledby="rk-diy-visual-title">
  <div class="rk-diy-shell">
    <header class="rk-diy-hero">
      <span class="rk-diy-kicker">Samodzielny montaż · kontrola przed wylewką 2026</span>
      <div class="rk-diy-hero-title" id="rk-diy-visual-title">Samodzielny montaż ogrzewania podłogowego: <span>5 błędów, których beton nie ukryje</span></div>
      <p class="rk-diy-hero-lead">Ułożenie rury to tylko widoczna część pracy. O tym, czy instalacja będzie grzała równomiernie i da się wyregulować, decydują także obliczenia, hydraulika pętli, dylatacje, próba szczelności oraz dokumentacja wykonana przed zakryciem podłogi.</p>
      <div class="rk-diy-hero-tags" aria-label="Zakres poradnika">
        <span>projekt i OZC</span>
        <span>pętle i hydraulika</span>
        <span>rury i dylatacje</span>
        <span>próba szczelności</span>
        <span>jastrych i dokumentacja</span>
      </div>
      <div class="rk-diy-meta">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Czas czytania: <strong>około 27 minut</strong></span>
        <span>Aktualizacja techniczna: <strong>17 września 2026 r.</strong></span>
      </div>
    </header>

    <nav class="rk-diy-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-diy-shortcuts-label">Na skróty</span>
      <a href="#rk-diy-answer">Szybka odpowiedź</a>
      <a href="#rk-diy-scope">Zakres prac</a>
      <a href="#rk-diy-return">Punkt bez powrotu</a>
      <a href="#rk-diy-analyzer-section">Analizator</a>
      <a href="#rk-diy-error1">Błąd 1</a>
      <a href="#rk-diy-error2">Błąd 2</a>
      <a href="#rk-diy-repair">Uszkodzona rura</a>
      <a href="#rk-diy-error3">Błąd 3</a>
      <a href="#rk-diy-error4">Błąd 4</a>
      <a href="#rk-diy-error5">Błąd 5</a>
      <a href="#rk-diy-hydraulics">Hydraulika</a>
      <a href="#rk-diy-pour-day">Dzień wylewki</a>
      <a href="#rk-diy-documentation">Dokumentacja</a>
      <a href="#rk-diy-after">Po wylewce</a>
      <a href="#rk-diy-myths">Fakty i mity</a>
      <a href="#rk-diy-checklist">Checklista</a>
      <a href="#rk-diy-summary">Podsumowanie</a>
      <a href="#rk-diy-sources">Źródła</a>
      <a href="#rk-diy-faq">FAQ</a>
      <a href="#rk-diy-author">Autor</a>
    </nav>

    <section class="rk-diy-section" id="rk-diy-answer">
      <span class="rk-diy-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-diy-section-title">Czy można samemu zrobić ogrzewanie podłogowe?</h2>
      <p class="rk-diy-lead"><strong>Można samodzielnie wykonać część prac montażowych, ale nie należy zastępować obliczeń zestawem uniwersalnych reguł.</strong> Inwestor może przygotować podłoże, rozłożyć izolację, zamocować rury i wykonać dokumentację, jeżeli pracuje według kompletnego projektu oraz zna wymagania zastosowanego systemu.</p>
      <div class="rk-diy-answer">
        <strong>Samodzielność dotyczy sposobu wykonania — nie zwalnia z projektu, kontroli ani odbioru.</strong>
        <p>Przed wylewką trzeba potwierdzić powierzchnie czynne, rozstawy, podział i długości pętli, wymagane przepływy, stan rur, dylatacje, wynik próby szczelności oraz technologię jastrychu. Po zakryciu nie da się już łatwo przełożyć rury ani odtworzyć jej rzeczywistej trasy.</p>
      </div>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-icon is-ok">MOŻESZ</span><h3>Wykonać zgodnie z dokumentacją</h3><p>Przygotować warstwy, rozwinąć i zamocować rurę, oznaczyć pętle, zrobić zdjęcia oraz uczestniczyć w kontroli, jeżeli projekt i instrukcje są jednoznaczne.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-icon is-check">POLICZ</span><h3>Nie dobierać „na oko”</h3><p>Rozstaw, długość, przepływ, opór pętli, parametry wody i nastawy rozdzielacza muszą wynikać z obciążenia cieplnego oraz hydrauliki.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-icon is-stop">STOP</span><h3>Nie zakrywać wątpliwości</h3><p>Uszkodzona rura, niezgodny przebieg, brak próby lub nieustalone dylatacje są powodem do zatrzymania wylewki, a nie do liczenia na późniejszą regulację.</p></article>
      </div>
      <p class="rk-diy-copy">Punktem odniesienia powinien być <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">profesjonalny projekt ogrzewania podłogowego</a>, a nie sam schemat z katalogu lub metraż rury wyliczony z powierzchni domu.</p>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-scope">
      <span class="rk-diy-eyebrow">Rozdziel wykonanie od projektowania</span>
      <h2 class="rk-diy-section-title">Co można wykonać samodzielnie, a co wymaga obliczeń?</h2>
      <p class="rk-diy-lead">Najbezpieczniejszy model to samodzielny montaż według policzonej dokumentacji. Projekt określa wynik, a wykonawca — także inwestor wykonujący instalację dla siebie — odpowiada za przeniesienie go na budowę i zgłoszenie każdej potrzebnej zmiany.</p>
      <div class="rk-diy-table-wrap">
        <table>
          <thead><tr><th>Decyzja lub czynność</th><th>Co jest potrzebne</th><th>Czy można wykonać samodzielnie?</th><th>Dowód przed wylewką</th></tr></thead>
          <tbody>
            <tr><td data-label="Czynność"><strong>Przygotowanie podłoża i izolacji</strong></td><td data-label="Podstawa">Projekt warstw, rzędne, parametry materiałów i koordynacja instalacji.</td><td data-label="Samodzielnie">Tak, po rozpoznaniu podłoża i technologii.</td><td data-label="Dowód">Oględziny stabilności, ciągłości warstw i zdjęcia.</td></tr>
            <tr><td data-label="Czynność"><strong>Obciążenie cieplne pomieszczeń</strong></td><td data-label="Podstawa">Dane przegród, wentylacji, temperatur i warunków projektowych.</td><td data-label="Samodzielnie">Tylko przy właściwej wiedzy i metodzie obliczeniowej.</td><td data-label="Dowód">Wyniki dla każdego pomieszczenia, nie tylko całego domu.</td></tr>
            <tr><td data-label="Czynność"><strong>Rozstaw i podział pętli</strong></td><td data-label="Podstawa">Moc, powierzchnia czynna, podłoga, parametry wody i hydraulika.</td><td data-label="Samodzielnie">Układanie tak; dobór bez obliczeń — nie.</td><td data-label="Dowód">Rzut z rozstawami, trasami, długościami i numerami pętli.</td></tr>
            <tr><td data-label="Czynność"><strong>Rozwijanie i mocowanie rury</strong></td><td data-label="Podstawa">Instrukcja systemu, promienie gięcia, rozstaw mocowań i projekt.</td><td data-label="Samodzielnie">Tak, przy użyciu właściwych narzędzi i kontroli.</td><td data-label="Dowód">Brak uszkodzeń, zgodna trasa i zdjęcia z miarą.</td></tr>
            <tr><td data-label="Czynność"><strong>Próba i odbiór</strong></td><td data-label="Podstawa">Ustalona procedura, odpowiednie przyrządy i protokół.</td><td data-label="Samodzielnie">Tylko jeżeli osoba potrafi bezpiecznie wykonać i ocenić próbę.</td><td data-label="Dowód">Podpisany protokół z warunkami, czasem i wynikiem.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-diy-note"><p><strong>Ważne:</strong> fraza „robię sam” nie oznacza, że każdy etap musi być wykonany bez konsultacji. Najbardziej opłaca się zachować dla siebie prace kontrolowalne, a zlecić te, których błędny wynik zostanie trwale zamknięty w podłodze.</p></div>
    </section>

    <section class="rk-diy-section" id="rk-diy-return">
      <span class="rk-diy-eyebrow">Granica między poprawką a remontem</span>
      <h2 class="rk-diy-section-title">Punkt bez powrotu: co znika pod jastrychem?</h2>
      <p class="rk-diy-lead">Wykonanie wylewki nie kończy całej instalacji, ale zamyka dostęp do jej najdłuższego elementu. Dlatego odbiór przed zalaniem powinien dotyczyć nie tylko szczelności, lecz wszystkich cech, których później nie da się potwierdzić bez odkrywek.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-card-number">PRZED</span><h3>Łatwe do poprawienia</h3><ul class="rk-diy-bullets"><li>przebieg i rozstaw rur,</li><li>mocowanie oraz łuki,</li><li>oznaczenia pętli,</li><li>osłony przejść,</li><li>lokalizacja dylatacji.</li></ul></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">PO</span><h3>Możliwe bez kucia</h3><ul class="rk-diy-bullets"><li>odpowietrzenie,</li><li>regulacja przepływów,</li><li>nastawy temperatur,</li><li>część usterek automatyki,</li><li>serwis elementów rozdzielacza.</li></ul></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">TRUDNE</span><h3>Zamknięte w podłodze</h3><ul class="rk-diy-bullets"><li>zbyt mała powierzchnia czynna,</li><li>zły rozstaw lub podział obwodów,</li><li>załamanie i uszkodzenie rury,</li><li>brak ochrony na dylatacji,</li><li>nieznana trasa przewodów.</li></ul></article>
      </div>
      <div class="rk-diy-note rk-diy-note-bad"><p><strong>Nie traktuj regulacji jako planu naprawczego.</strong> Rotametr może ograniczyć lub ustawić przepływ w dostępnych granicach, ale nie zmieni powierzchni grzejnej, średnicy rury, jej przebiegu ani konstrukcji podłogi.</p></div>
    </section>

    <section class="rk-diy-section rk-diy-section-dark" id="rk-diy-analyzer-section">
      <span class="rk-diy-eyebrow">Jedno narzędzie, które ma praktyczny sens</span>
      <h2 class="rk-diy-section-title">Analizator: czy można już wykonać wylewkę?</h2>
      <p class="rk-diy-lead">To audyt kompletności, a nie kalkulator jakości i nie protokół odbioru. Odpowiadaj na podstawie projektu, oględzin, pomiarów i dokumentów. Wynik nie przyznaje punktów — rozdziela fakty potwierdzone, braki do sprawdzenia oraz warunki blokujące zakrycie instalacji.</p>
      <div class="rk-diy-analyzer" id="rk-diy-analyzer">
        <div class="rk-diy-analyzer-head">
          <h3>Kontrola przed zamówieniem jastrychu</h3>
          <p>Jeżeli nie masz dowodu, wybierz „nie wiem”. Brak informacji o elemencie ukrywanym w podłodze jest wynikiem kontroli, a nie neutralną odpowiedzią.</p>
        </div>

        <div class="rk-diy-analyzer-stage">
          <div class="rk-diy-stage-head"><span class="rk-diy-stage-number">1</span><div><h4>Projekt cieplny i układ pętli</h4><p>Czy wiadomo, jaką moc ma przekazać każde pomieszczenie i jak instalacja ma to osiągnąć?</p></div></div>
          <div class="rk-diy-fields">
            <label class="rk-diy-field"><span>Obciążenie cieplne jest określone dla każdego pomieszczenia</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Obciążenie cieplne pomieszczeń" data-action="Wstrzymaj wylewkę i ustal projektowe obciążenie cieplne każdego pomieszczenia."><option value="unknown">Nie wiem / brak dokumentu</option><option value="yes">Tak, mam wyniki</option><option value="no">Nie, przyjęto wartość orientacyjną</option></select></label>
            <label class="rk-diy-field"><span>Powierzchnie czynne i strefy bez rur są naniesione na rzut</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Powierzchnie czynne" data-action="Porównaj rzeczywiste pola grzewcze ze stałą zabudową i wymaganą mocą przed ich zakryciem."><option value="unknown">Nie wiem / nie porównano</option><option value="yes">Tak, są zgodne z rzutem</option><option value="no">Nie, układ zmieniano na budowie</option></select></label>
            <label class="rk-diy-field"><span>Rzut określa rozstawy, podział, długości i numery pętli</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Rzut wykonawczy pętli" data-action="Uzupełnij przebieg, rozstawy, podział i długości pętli oraz zweryfikuj je z wykonaniem."><option value="unknown">Brak kompletnego rzutu</option><option value="yes">Tak, wykonanie porównano</option><option value="no">Nie, pętle ułożono z głowy</option></select></label>
          </div>
        </div>

        <div class="rk-diy-analyzer-stage">
          <div class="rk-diy-stage-head"><span class="rk-diy-stage-number">2</span><div><h4>Hydraulika i identyfikacja obwodów</h4><p>Równe odstępy rur nie potwierdzają, że pompa i rozdzielacz zapewnią wymagane przepływy.</p></div></div>
          <div class="rk-diy-fields">
            <label class="rk-diy-field"><span>Typ i wymiar rury są zgodne z projektem oraz systemem połączeń</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Zgodność rury" data-action="Potwierdź dokładny typ, wymiar, barierę tlenową i zgodność połączeń przed zakryciem."><option value="unknown">Nie wiem / brak karty</option><option value="yes">Tak, zgodność potwierdzona</option><option value="no">Nie, zastosowano zamiennik bez weryfikacji</option></select></label>
            <label class="rk-diy-field"><span>Przepływy i opory pętli policzono dla rzeczywistych długości</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Hydraulika pętli" data-action="Policz wymagane przepływy i spadki ciśnienia dla rzeczywistych obwodów oraz medium."><option value="unknown">Nie wiem / niepoliczone</option><option value="yes">Tak, mam zestawienie</option><option value="no">Nie, oceniono tylko długość</option></select></label>
            <label class="rk-diy-field"><span>Każda pętla jest trwale opisana przy rozdzielaczu</span><select class="rk-diy-audit-field" data-severity="warning" data-label="Oznaczenia pętli" data-action="Oznacz zasilanie i powrót każdego obwodu oraz zapisz pomieszczenie i rzeczywistą długość."><option value="unknown">Nie wiem / opisy tymczasowe</option><option value="yes">Tak, oznaczenia są trwałe</option><option value="no">Nie, obwody nie są opisane</option></select></label>
          </div>
        </div>

        <div class="rk-diy-analyzer-stage">
          <div class="rk-diy-stage-head"><span class="rk-diy-stage-number">3</span><div><h4>Stan rur i przejścia</h4><p>Oględziny wykonuje się na całej dostępnej trasie, również przy nawrotach, dobiegach i mocowaniach.</p></div></div>
          <div class="rk-diy-fields">
            <label class="rk-diy-field"><span>Nie ma załamań, nacięć, spłaszczeń ani niezatwierdzonych napraw</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Stan rur" data-action="Wstrzymaj zakrycie, oznacz każde uszkodzenie i zastosuj wyłącznie procedurę dopuszczoną dla konkretnego systemu."><option value="unknown">Nie sprawdzono całej trasy</option><option value="yes">Tak, stan potwierdzony</option><option value="no">Nie, jest uszkodzenie lub przypadkowa naprawa</option></select></label>
            <label class="rk-diy-field"><span>Rury są stabilnie zamocowane, a łuki spełniają wymagania systemu</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Mocowanie i łuki" data-action="Popraw mocowania, nawroty i miejsca unoszenia się rury przed wykonaniem jastrychu."><option value="unknown">Nie sprawdzono</option><option value="yes">Tak, sprawdzono</option><option value="no">Nie, są luźne odcinki lub ciasne łuki</option></select></label>
            <label class="rk-diy-field"><span>Przejścia przez dylatacje i przegrody mają zaprojektowaną ochronę</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Ochrona przejść" data-action="Ustal i wykonaj osłony rur w miejscach ruchu pól oraz przejść przez przegrody."><option value="unknown">Nie wiem / brak planu</option><option value="yes">Tak, wykonano zgodnie z planem</option><option value="no">Nie, rura przechodzi bez ochrony</option></select></label>
          </div>
        </div>

        <div class="rk-diy-analyzer-stage">
          <div class="rk-diy-stage-head"><span class="rk-diy-stage-number">4</span><div><h4>Dylatacje, taśma brzegowa i próba</h4><p>Technologia jastrychu musi być skoordynowana z instalacją przed przyjazdem ekipy posadzkarskiej.</p></div></div>
          <div class="rk-diy-fields">
            <label class="rk-diy-field"><span>Taśma brzegowa jest ciągła i nie została obcięta przedwcześnie</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Taśma brzegowa" data-action="Przywróć ciągłe oddzielenie jastrychu od ścian, słupów i innych elementów zgodnie z technologią."><option value="unknown">Nie sprawdzono obwodu</option><option value="yes">Tak, ciągłość potwierdzona</option><option value="no">Nie, są przerwy lub za niski pas</option></select></label>
            <label class="rk-diy-field"><span>Plan pól i szczelin dylatacyjnych uzgodniono z jastrychem oraz okładziną</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Plan dylatacji" data-action="Uzgodnij podział pól, szczeliny konstrukcyjne i ich przeniesienie do okładziny przed wylewką."><option value="unknown">Nie wiem / brak planu</option><option value="yes">Tak, plan jest uzgodniony</option><option value="no">Nie, decyzję zostawiono ekipie w dniu wylewki</option></select></label>
            <label class="rk-diy-field"><span>Próba szczelności została wykonana właściwą procedurą i zakończona wynikiem pozytywnym</span><select class="rk-diy-audit-field" data-severity="critical" data-label="Próba szczelności" data-action="Nie wykonuj jastrychu bez zakończonej próby, wyjaśnienia nieprawidłowości i protokołu."><option value="unknown">Brak protokołu / nie wiem</option><option value="yes">Tak, wynik pozytywny</option><option value="no">Nie wykonano lub wynik budzi wątpliwości</option></select></label>
          </div>
        </div>

        <div class="rk-diy-analyzer-stage">
          <div class="rk-diy-stage-head"><span class="rk-diy-stage-number">5</span><div><h4>Dokumentacja i technologia jastrychu</h4><p>Ostatnia kontrola tworzy punkt odniesienia dla posadzkarza, późniejszego wiercenia i uruchomienia.</p></div></div>
          <div class="rk-diy-fields">
            <label class="rk-diy-field"><span>Zdjęcia pokazują wszystkie pętle, przejścia i odległości od stałych punktów</span><select class="rk-diy-audit-field" data-severity="warning" data-label="Dokumentacja zdjęciowa" data-action="Wykonaj zdjęcia całej powierzchni z miarą i punktami odniesienia przed zakryciem rur."><option value="unknown">Zdjęcia niepełne</option><option value="yes">Tak, komplet wykonany</option><option value="no">Nie wykonano zdjęć</option></select></label>
            <label class="rk-diy-field"><span>Protokół zawiera pętle, długości, odstępstwa i wynik próby</span><select class="rk-diy-audit-field" data-severity="warning" data-label="Protokół i inwentaryzacja" data-action="Uzupełnij zestawienie obwodów, zaakceptowane zmiany, wynik próby i osoby odpowiedzialne."><option value="unknown">Dokument niekompletny</option><option value="yes">Tak, dokumentacja kompletna</option><option value="no">Nie ma protokołu</option></select></label>
            <label class="rk-diy-field"><span>Rodzaj, grubość, pielęgnacja i procedura wygrzewania jastrychu są uzgodnione</span><select class="rk-diy-audit-field" data-severity="warning" data-label="Technologia jastrychu" data-action="Uzgodnij z wykonawcą jastrychu warunki ułożenia, pielęgnacji, uruchomienia i pomiaru wilgotności."><option value="unknown">Nie ustalono</option><option value="yes">Tak, mam pisemne wytyczne</option><option value="no">Nie, plan ma powstać później</option></select></label>
          </div>
        </div>

        <div class="rk-diy-analyzer-actions">
          <button class="rk-diy-analyze-button" id="rk-diy-run" type="button">Sprawdź gotowość do wylewki</button>
          <button class="rk-diy-reset-button" id="rk-diy-reset" type="button">Wyczyść odpowiedzi</button>
        </div>
        <div class="rk-diy-result" id="rk-diy-result" aria-live="polite">
          <p class="rk-diy-result-status" id="rk-diy-result-status">Uzupełnij 15 punktów na podstawie rzeczywistego wykonania</p>
          <p class="rk-diy-result-intro" id="rk-diy-result-intro">Wynik rozdzieli informacje potwierdzone, wymagające uzupełnienia i blokujące zakrycie instalacji.</p>
          <div class="rk-diy-result-counts" aria-label="Podsumowanie analizy">
            <div class="rk-diy-result-count"><span>Potwierdzone</span><strong id="rk-diy-ok-count">0</strong></div>
            <div class="rk-diy-result-count"><span>Do sprawdzenia</span><strong id="rk-diy-check-count">15</strong></div>
            <div class="rk-diy-result-count"><span>Krytyczne</span><strong id="rk-diy-stop-count">0</strong></div>
          </div>
          <div class="rk-diy-result-grid">
            <div class="rk-diy-result-column is-ok"><h4>Potwierdzone</h4><ul id="rk-diy-ok-list"><li>Jeszcze brak ocenionych danych.</li></ul></div>
            <div class="rk-diy-result-column is-check"><h4>Do sprawdzenia</h4><ul id="rk-diy-check-list"><li>Uzupełnij formularz na podstawie projektu, oględzin i protokołów.</li></ul></div>
            <div class="rk-diy-result-column is-stop"><h4>Wstrzymaj wylewkę</h4><ul id="rk-diy-stop-list"><li>Brak oceny nie oznacza gotowości do zakrycia rur.</li></ul></div>
          </div>
          <p class="rk-diy-disclaimer">Analizator jest edukacyjną listą kontrolną. Nie zastępuje projektu, instrukcji zastosowanego systemu, procedury próby, odbioru instalacji ani oceny technologii jastrychu.</p>
        </div>
      </div>

      <aside class="rk-diy-cta" aria-label="Weryfikacja projektu przed wykonaniem wylewki">
        <div class="rk-diy-cta-title">Rury są już rozłożone? Zanim zamówisz wylewkę, porównaj wykonanie z obliczeniami</div>
        <p>Projekt pozwala sprawdzić powierzchnie czynne, rozstawy, długości pętli, wymagane przepływy, spadki ciśnienia i nastawy rozdzielacza, dopóki instalacja pozostaje dostępna i można jeszcze skorygować jej przebieg.</p>
        <a class="rk-diy-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt i zweryfikuj układ przed wylewką</a>
        <small class="rk-diy-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </aside>
    </section>

    <section class="rk-diy-section" id="rk-diy-error1">
      <span class="rk-diy-eyebrow">Błąd 1 · montaż „na oko”</span>
      <h2 class="rk-diy-section-title">Układanie rur bez projektu cieplnego i hydraulicznego</h2>
      <p class="rk-diy-lead">Najbardziej niebezpieczny skrót zaczyna się od założenia, że jeden rozstaw i jedna maksymalna długość pętli pasują do każdego pomieszczenia. W rzeczywistości łazienka, salon z przeszkleniami i sypialnia mogą mieć inne obciążenie, inną powierzchnię czynną oraz inną okładzinę.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-card-number">1</span><h3>Brak mocy dla pomieszczeń</h3><p>Wskaźnik W/m² dla całego domu nie pokazuje, gdzie wystąpi największe obciążenie. Potrzebne jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne</a> przypisane do konkretnych pomieszczeń.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">2</span><h3>Rozstaw z przyzwyczajenia</h3><p>Odstęp rur wynika z wymaganej mocy, parametrów wody, konstrukcji podłogi i ograniczeń temperatury powierzchni, a nie z samego rodzaju źródła ciepła.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">3</span><h3>Metraż bez podziału obwodów</h3><p>Orientacyjna ilość rury nie wyznacza liczby pętli, ich dobiegów, wymaganych przepływów ani oporu krytycznej drogi.</p></article>
      </div>
      <p class="rk-diy-copy">Dylemat <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur co 10 czy 15 cm</a> należy rozstrzygać na podstawie warunków danego pola grzewczego. Gęściej nie zawsze znaczy lepiej: rośnie metraż, liczba obwodów i koszt, a ostateczny efekt nadal ogranicza podłoga oraz parametry wody.</p>
      <div class="rk-diy-note rk-diy-note-bad"><p><strong>Nie używaj tabeli „rozstaw = moc” bez warunków.</strong> Wydajność zależy od różnicy temperatur, budowy podłogi, położenia rury i oporu okładziny. Ta sama geometria nie daje jednej stałej mocy w każdym domu.</p></div>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-error2">
      <span class="rk-diy-eyebrow">Błąd 2 · estetyka zamiast kontroli</span>
      <h2 class="rk-diy-section-title">Niewłaściwe pętle, mocowanie i uszkodzenia rur</h2>
      <p class="rk-diy-lead">Równo ułożony ślimak może mieć niezgodną długość, zbyt ciasny nawrót albo uszkodzoną warstwę zewnętrzną. Odbiór nie powinien kończyć się na zdjęciu całego pomieszczenia — trzeba obejrzeć newralgiczne miejsca z bliska.</p>
      <div class="rk-diy-grid-4">
        <article class="rk-diy-card"><span class="rk-diy-card-number">A</span><h3>Rozwijanie kręgu</h3><p>Użyj rozwijaka i prowadź rurę bez skręcania osiowego. Nie ciągnij jej po ostrych krawędziach, zbrojeniu ani zabrudzonym podłożu.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">B</span><h3>Promień gięcia</h3><p>Wartość dopuszczalna zależy od konkretnego wyrobu, temperatury montażu i narzędzia. Nie przyjmuj uniwersalnej wielokrotności bez dokumentacji.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">C</span><h3>Mocowanie</h3><p>Rura ma pozostać w zaprojektowanym położeniu podczas chodzenia i wykonywania jastrychu, bez punktowego zgniatania oraz unoszenia łuków.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">D</span><h3>Dobiegi</h3><p>Odcinki od rozdzielacza do pola zwiększają długość i opór. Ich skupienie może też zmienić lokalną emisję ciepła i wymagać ochrony.</p></article>
      </div>
      <div class="rk-diy-note"><p><strong>Kolor rury niczego nie rozstrzyga.</strong> Przed montażem sprawdź dokładne oznaczenie, wymiar, klasę zastosowania, barierę ograniczającą przenikanie tlenu, zgodne złączki oraz instrukcję transportu i gięcia.</p></div>
    </section>

    <section class="rk-diy-section" id="rk-diy-repair">
      <span class="rk-diy-eyebrow">Nie improwizuj z elementem ukrywanym na dekady</span>
      <h2 class="rk-diy-section-title">Co zrobić z załamaną lub uszkodzoną rurą?</h2>
      <p class="rk-diy-lead">Nie istnieje jedna metoda naprawy właściwa dla każdego PE-X, PE-RT i przewodu wielowarstwowego. Sposób postępowania musi wynikać z dokumentacji dokładnego systemu. Podgrzewanie, prostowanie lub zakładanie przypadkowej złączki na podstawie filmu nie potwierdza trwałości naprawy.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-icon is-stop">1</span><h3>Zatrzymaj pracę</h3><p>Nie zakrywaj miejsca i nie próbuj ukryć śladu. Oznacz położenie, zrób zdjęcie oraz zapisz typ rury i charakter uszkodzenia.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-icon is-check">2</span><h3>Sprawdź procedurę systemu</h3><p>Ustal, czy wyrób dopuszcza przywrócenie kształtu, wycięcie odcinka, wymianę całej pętli albo konkretną naprawę systemową.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-icon is-ok">3</span><h3>Zweryfikuj i udokumentuj</h3><p>Po zaakceptowanej czynności wykonaj ponowną kontrolę i próbę. Miejsce nanieś na rzut powykonawczy wraz z użytymi elementami.</p></article>
      </div>
      <p class="rk-diy-copy"><strong>Celem pozostaje pętla z jednego odcinka bez ukrytych połączeń.</strong> Gdy naprawa pod jastrychem jest konieczna i dopuszczona, powinna być dostępna w dokumentacji systemu, wykonana właściwymi narzędziami, sprawdzona oraz trwale zlokalizowana.</p>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-error3">
      <span class="rk-diy-eyebrow">Błąd 3 · manometr bez procedury</span>
      <h2 class="rk-diy-section-title">Brak poprawnie udokumentowanej próby szczelności</h2>
      <p class="rk-diy-lead">Zdjęcie wskazówki manometru nie jest pełnym protokołem. Wynik trzeba interpretować razem z medium, temperaturą, czasem, ciśnieniem początkowym i końcowym, konfiguracją instalacji oraz wymaganiami przyjętej procedury.</p>
      <div class="rk-diy-table-wrap">
        <table>
          <thead><tr><th>Element protokołu</th><th>Dlaczego jest potrzebny</th><th>Czego nie wolno zakładać</th></tr></thead>
          <tbody>
            <tr><td data-label="Element"><strong>Identyfikacja instalacji</strong></td><td data-label="Znaczenie">Łączy wynik z budynkiem, rozdzielaczem, zakresem i datą próby.</td><td data-label="Nie zakładaj">Że samo zdjęcie bez opisu będzie czytelne po latach.</td></tr>
            <tr><td data-label="Element"><strong>Medium i warunki</strong></td><td data-label="Znaczenie">Zmiany temperatury i właściwości medium wpływają na wskazania.</td><td data-label="Nie zakładaj">Że każda zmiana wskazówki oznacza przeciek albo że każdy stabilny odczyt potwierdza całość.</td></tr>
            <tr><td data-label="Element"><strong>Ciśnienie i czas</strong></td><td data-label="Znaczenie">Muszą odpowiadać projektowi, dokumentacji elementów i przyjętej procedurze.</td><td data-label="Nie zakładaj">Uniwersalnego „6 bar przez 24 godziny” dla wszystkich systemów.</td></tr>
            <tr><td data-label="Element"><strong>Oględziny</strong></td><td data-label="Znaczenie">Pozwalają sprawdzić dostępne połączenia, rury i armaturę podczas próby.</td><td data-label="Nie zakładaj">Że manometr zastępuje kontrolę całej dostępnej instalacji.</td></tr>
            <tr><td data-label="Element"><strong>Wynik i podpisy</strong></td><td data-label="Znaczenie">Zapisują ocenę, uwagi, odstępstwa i odpowiedzialność uczestników.</td><td data-label="Nie zakładaj">Że brak zauważonego wycieku jest automatycznie formalnym odbiorem.</td></tr>
          </tbody>
        </table>
      </div>
      <p class="rk-diy-copy">Szczegółowy zakres czynności omawia poradnik o <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbie szczelności ogrzewania podłogowego</a>. Stan instalacji podczas wykonywania jastrychu również należy ustalić w procedurze — ciśnienie ma przede wszystkim umożliwić wykrycie uszkodzenia, a nie „usztywniać” rurę czy chronić nieistniejące połączenia w polu.</p>
    </section>

    <section class="rk-diy-section" id="rk-diy-error4">
      <span class="rk-diy-eyebrow">Błąd 4 · plan pól dopiero przy pompie</span>
      <h2 class="rk-diy-section-title">Dylatacje, taśma brzegowa i przejścia rur „na później”</h2>
      <p class="rk-diy-lead">Rura, jastrych, ściany i okładzina pracują w jednym układzie. Podział pól nie powinien powstać spontanicznie w dniu wylewki, bo musi uwzględniać geometrię pomieszczeń, istniejące szczeliny konstrukcyjne, przewężenia, progi i późniejsze wykończenie.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-card-number">OBWÓD</span><h3>Taśma brzegowa</h3><p>Oddziela jastrych od ścian, słupów i innych elementów. Musi tworzyć ciągłą barierę i zachować odpowiednią wysokość do zakończenia prac posadzkowych.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">POLE</span><h3>Szczeliny i podział</h3><p>Nie ma jednej powierzchni lub długości boku właściwej dla każdego jastrychu. Kryteria zależą od materiału, kształtu, grubości i technologii wykonawcy.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">PRZEJŚCIE</span><h3>Rury przez szczeliny</h3><p>Przejścia ogranicza się i chroni tak, aby ruch sąsiednich pól nie działał bezpośrednio na przewód. Rodzaj oraz długość osłony wynikają z rozwiązania projektowego.</p></article>
      </div>
      <p class="rk-diy-copy">Więcej przykładów i zasad koordynacji opisuje artykuł o <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">izolacji brzegowej i dylatacjach</a>. Plan szczelin trzeba też przekazać wykonawcy okładziny, ponieważ zachowanie jastrychu i wykończenia nie są od siebie niezależne.</p>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-error5">
      <span class="rk-diy-eyebrow">Błąd 5 · warstwy traktowane osobno</span>
      <h2 class="rk-diy-section-title">Zła izolacja, przypadkowy jastrych i zbyt wczesne uruchomienie</h2>
      <p class="rk-diy-lead">Podłogówka nie jest samą rurą. Izolacja, podłoże, jastrych, okładzina i sposób uruchomienia wpływają na straty w dół, trwałość podłogi, bezwładność oraz osiągalną moc.</p>
      <div class="rk-diy-grid-4">
        <article class="rk-diy-card"><span class="rk-diy-card-number">1</span><h3>Izolacja bez obliczeń</h3><p>Grubość w centymetrach nie wystarcza. Liczą się przewodność materiału, układ warstw, mostki, warunki pod przegrodą i wytrzymałość mechaniczna.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">2</span><h3>Niestabilne podparcie</h3><p>Szczeliny, kołyszące się płyty i instalacje wciśnięte przypadkowo pod izolację mogą tworzyć miejsca nierównomiernego podparcia jastrychu.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">3</span><h3>Jastrych „jak zawsze”</h3><p>Rodzaj, grubość, zbrojenie, dodatki, pola, pielęgnacja i dopuszczenie do ogrzewania muszą tworzyć jedną technologię, a nie zestaw osobnych porad.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">4</span><h3>Grzanie jako suszarka</h3><p>Nie uruchamiaj instalacji przypadkową temperaturą, aby przyspieszyć prace. Wygrzewanie i pomiar wilgotności wykonuje się według uzgodnionej procedury.</p></article>
      </div>
      <p class="rk-diy-copy">Warstwy izolacyjne szerzej omawia poradnik <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">ile styropianu pod ogrzewanie podłogowe</a>, a wymagania posadzki — <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">kompletny przewodnik po wylewce na podłogówkę</a>.</p>
    </section>

    <section class="rk-diy-section" id="rk-diy-hydraulics">
      <span class="rk-diy-eyebrow">Długość jest jednym z parametrów</span>
      <h2 class="rk-diy-section-title">Dlaczego długość pętli nie wystarcza do oceny hydrauliki?</h2>
      <p class="rk-diy-lead">Dwie pętle o tej samej długości mogą wymagać innych przepływów, a dwie o różnych długościach mogą być poprawnie zrównoważone. Ocena wymaga połączenia mocy, temperatur, geometrii rury, medium i dostępnego ciśnienia.</p>
      <div class="rk-diy-grid-4">
        <article class="rk-diy-card"><span class="rk-diy-card-number">Q</span><h3>Moc pętli</h3><p>Im więcej ciepła ma przenieść obwód przy przyjętej różnicy temperatur, tym większy przepływ może być potrzebny.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">dᵢ</span><h3>Średnica wewnętrzna</h3><p>Ten sam wymiar zewnętrzny nie zawsze oznacza identyczne światło i charakterystykę hydrauliczną produktu.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">L</span><h3>Cała droga</h3><p>Liczy się pętla wraz z dobiegami, przyłączami i elementami miejscowymi — od belki zasilającej do powrotnej.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">Δp</span><h3>Dostępny napór</h3><p>Pompa ma obsłużyć przepływ całego układu i opór drogi krytycznej, a rozdzielacz musi umożliwić regulację pozostałych obwodów.</p></article>
      </div>
      <div class="rk-diy-note"><p><strong>Około 100 m dla typowej rury 16 × 2 mm może być praktycznym pułapem roboczym, ale nie jest uniwersalnym limitem normowym.</strong> Dopuszczalna długość może być mniejsza lub inna zależnie od przepływu, światła rury, medium i założeń regulacji.</p></div>
      <p class="rk-diy-copy">Zobacz osobne wyjaśnienie <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalnej długości pętli</a> oraz skutków, jakie może powodować <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/">za długa pętla podłogówki</a>.</p>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-pour-day">
      <span class="rk-diy-eyebrow">Ostatnie godziny pełnego dostępu</span>
      <h2 class="rk-diy-section-title">Dzień wykonywania jastrychu: plan kontroli</h2>
      <p class="rk-diy-lead">W dniu wylewki nie powinny powstawać nowe decyzje projektowe. Celem jest ochrona wcześniej odebranej instalacji, kontrola uzgodnionych warunków i szybka reakcja, jeżeli podczas robót wydarzy się coś nieprzewidzianego.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-card-number">PRZED</span><h3>Odbiór i przekazanie</h3><ul class="rk-diy-bullets"><li>porównaj trasy z rzutem,</li><li>sprawdź wynik próby,</li><li>potwierdź taśmy i dylatacje,</li><li>wykonaj komplet zdjęć,</li><li>przekaż technologię ekipie.</li></ul></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">W TRAKCIE</span><h3>Ochrona instalacji</h3><ul class="rk-diy-bullets"><li>kontroluj sposób poruszania się,</li><li>nie przeciągaj sprzętu po rurach,</li><li>obserwuj wskazania przyjętej kontroli,</li><li>pilnuj szczelin i przejść,</li><li>zgłaszaj każde uszkodzenie natychmiast.</li></ul></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">PO</span><h3>Zapis warunków</h3><ul class="rk-diy-bullets"><li>zanotuj datę i rodzaj jastrychu,</li><li>zapisz zauważone zdarzenia,</li><li>potwierdź pielęgnację,</li><li>ustal termin kolejnych kontroli,</li><li>zabezpiecz dokumentację.</li></ul></article>
      </div>
      <div class="rk-diy-note rk-diy-note-bad"><p><strong>Jeżeli rura zostanie uszkodzona podczas prac, zatrzymaj roboty w tym miejscu.</strong> Natychmiastowa lokalizacja i naprawa według właściwej procedury są lepsze niż próba odnalezienia problemu po zakończeniu całej podłogi.</p></div>
    </section>

    <section class="rk-diy-section" id="rk-diy-documentation">
      <span class="rk-diy-eyebrow">Najtańsze ubezpieczenie wiedzy o instalacji</span>
      <h2 class="rk-diy-section-title">Zdjęcia i inwentaryzacja powykonawcza</h2>
      <p class="rk-diy-lead">Zdjęcia powinny pozwolić odtworzyć położenie rur, a nie tylko potwierdzić, że na budowie leżała podłogówka. Fotografuj całe pola i szczegóły, zawsze z rozpoznawalnym punktem odniesienia.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-card-number">KADR</span><h3>Pełne pomieszczenie</h3><p>Wykonaj zdjęcia z kilku stron, obejmujące ściany, otwory, stałe elementy i cały przebieg pętli. Zachowaj logiczną kolejność plików.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">MIARA</span><h3>Odległości od punktów stałych</h3><p>Dodaj miarkę lub zaznacz wymiary od ścian, progów, słupów i przepustów. Sama perspektywa aparatu nie pozwala później wyznaczyć bezpiecznego miejsca wiercenia.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">DETAL</span><h3>Przejścia i odstępstwa</h3><p>Sfotografuj dylatacje, osłony, podejścia do rozdzielacza, zagęszczenia dobiegów i każdą zaakceptowaną zmianę lub naprawę.</p></article>
      </div>
      <ul class="rk-diy-bullets">
        <li>zapisz producenta, pełne oznaczenie i numery partii rury,</li>
        <li>zanotuj rzeczywistą długość i obsługiwane pomieszczenie każdej pętli,</li>
        <li>oznacz pary zasilanie–powrót oraz numer belki rozdzielacza,</li>
        <li>dołącz protokół próby, zmiany względem projektu i osoby zatwierdzające,</li>
        <li>zachowaj dokumenty jastrychu, procedurę wygrzewania i późniejsze nastawy.</li>
      </ul>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-after">
      <span class="rk-diy-eyebrow">Zakrycie rur nie oznacza końca prac</span>
      <h2 class="rk-diy-section-title">Co robić po wykonaniu jastrychu?</h2>
      <p class="rk-diy-lead">Po wylewce rozpoczyna się etap pielęgnacji, kontrolowanego uruchomienia i przygotowania podłoża do okładziny. Terminy i temperatury zależą od konkretnego jastrychu — nie należy kopiować jednej procedury do każdego materiału.</p>
      <div class="rk-diy-grid-4">
        <article class="rk-diy-card"><span class="rk-diy-card-number">1</span><h3>Pielęgnacja</h3><p>Chroń podłogę przed zbyt szybkim wysychaniem, przeciągami, mrozem i obciążeniami zgodnie z wytycznymi wykonawcy jastrychu.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">2</span><h3>Wygrzewanie</h3><p>Rozpocznij w terminie i według przebiegu właściwego dla zastosowanej mieszanki. Zapisuj daty oraz temperatury zamiast polegać na pamięci.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">3</span><h3>Wilgotność</h3><p>Protokół wygrzewania nie zastępuje oceny wilgotności przed montażem okładziny. Metodę i wartości graniczne dobiera się do materiałów.</p></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">4</span><h3>Regulacja</h3><p>Po odpowietrzeniu i ustabilizowaniu pracy ustaw projektowe przepływy oraz parametry źródła. Nie kopiuj jednej wartości na wszystkie rotametry.</p></article>
      </div>
      <div class="rk-diy-note"><p><strong>Próba szczelności, wygrzewanie jastrychu, pomiar wilgotności i regulacja hydrauliczna to cztery różne czynności.</strong> Pozytywny wynik jednej nie zastępuje pozostałych.</p></div>
    </section>

    <section class="rk-diy-section" id="rk-diy-myths">
      <span class="rk-diy-eyebrow">Skróty myślowe, które trafiają pod beton</span>
      <h2 class="rk-diy-section-title">Fakty i mity samodzielnego montażu</h2>
      <div class="rk-diy-table-wrap">
        <table>
          <thead><tr><th>Stwierdzenie</th><th>Ocena</th><th>Wyjaśnienie</th></tr></thead>
          <tbody>
            <tr><td data-label="Stwierdzenie"><strong>„Rozstaw 15 cm pasuje do całego domu”</strong></td><td data-label="Ocena">Mit</td><td data-label="Wyjaśnienie">Rozstaw wynika z wymaganej mocy, powierzchni czynnej, podłogi i parametrów wody dla danego pomieszczenia.</td></tr>
            <tr><td data-label="Stwierdzenie"><strong>„Każda pętla musi mieć niemal identyczną długość”</strong></td><td data-label="Ocena">Mit</td><td data-label="Wyjaśnienie">Celem są właściwe przepływy i możliwa regulacja. Długość jest ważna, ale nie zastępuje obliczenia oporu.</td></tr>
            <tr><td data-label="Stwierdzenie"><strong>„100 m to absolutny limit każdej pętli”</strong></td><td data-label="Ocena">Mit</td><td data-label="Wyjaśnienie">To bywa praktyczny pułap w typowych warunkach, lecz granica zależy od rury, przepływu, medium i dostępnego ciśnienia.</td></tr>
            <tr><td data-label="Stwierdzenie"><strong>„6 bar przez 24 godziny wystarcza zawsze”</strong></td><td data-label="Ocena">Mit</td><td data-label="Wyjaśnienie">Warunki próby przyjmuje się z właściwej procedury, projektu i dokumentacji konkretnych elementów.</td></tr>
            <tr><td data-label="Stwierdzenie"><strong>„Zdjęcia przed wylewką są częścią dokumentacji”</strong></td><td data-label="Ocena">Fakt</td><td data-label="Wyjaśnienie">Pomagają odtworzyć trasy, ograniczyć ryzyko wiercenia i zlokalizować późniejsze odstępstwa.</td></tr>
            <tr><td data-label="Stwierdzenie"><strong>„Samodzielny montaż może być poprawny”</strong></td><td data-label="Ocena">Fakt warunkowy</td><td data-label="Wyjaśnienie">Wymaga projektu, właściwych materiałów, umiejętności, kontroli, próby i uczciwego zatrzymania prac przy niepewności.</td></tr>
          </tbody>
        </table>
      </div>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-checklist">
      <span class="rk-diy-eyebrow">Do wydrukowania przed odbiorem</span>
      <h2 class="rk-diy-section-title">Checklista przed wylewką</h2>
      <p class="rk-diy-lead">Poniższa lista jest podsumowaniem, nie substytutem dokumentacji systemu. Każde „nie wiem” przy elemencie ukrywanym pod jastrychem powinno mieć właściciela i termin wyjaśnienia.</p>
      <div class="rk-diy-grid-3">
        <article class="rk-diy-card"><span class="rk-diy-card-number">PROJEKT</span><h3>Dane zgodne z wykonaniem</h3><ul class="rk-diy-bullets"><li>obciążenia pomieszczeń,</li><li>powierzchnie czynne,</li><li>rozstawy i strefy brzegowe,</li><li>podział oraz długości pętli,</li><li>przepływy, opory i nastawy.</li></ul></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">MONTAŻ</span><h3>Warstwy i rury odebrane</h3><ul class="rk-diy-bullets"><li>stabilne podłoże i izolacja,</li><li>ciągła taśma brzegowa,</li><li>brak uszkodzeń rur,</li><li>poprawne mocowania i łuki,</li><li>chronione przejścia.</li></ul></article>
        <article class="rk-diy-card"><span class="rk-diy-card-number">DOWODY</span><h3>Dokumenty gotowe</h3><ul class="rk-diy-bullets"><li>pozytywny protokół próby,</li><li>opisy rozdzielacza,</li><li>zdjęcia z miarą,</li><li>rzut powykonawczy i zmiany,</li><li>procedura jastrychu i uruchomienia.</li></ul></article>
      </div>
      <div class="rk-diy-note rk-diy-note-good"><p><strong>Zasada odbioru:</strong> sprawdzaj cechę, dokumentuj wynik i przypisuj odpowiedzialność. Sam podpis pod ogólnym zdaniem „instalacja wykonana prawidłowo” nie zastępuje danych, na podstawie których można to stwierdzić.</p></div>
    </section>

    <section class="rk-diy-section rk-diy-final" id="rk-diy-summary">
      <span class="rk-diy-eyebrow">Najważniejszy wniosek</span>
      <h2 class="rk-diy-section-title">Samodzielny montaż ma sens, jeśli projekt wyprzedza wykonanie</h2>
      <p class="rk-diy-lead">Największą oszczędnością nie jest pominięcie obliczeń, lecz wykonanie pracy raz i zachowanie możliwości korekty do ostatniej chwili przed jastrychem. Projekt określa parametry, montaż je realizuje, a odbiór potwierdza zgodność.</p>
      <div class="rk-diy-cta">
        <div class="rk-diy-cta-title">Zanim beton zakryje instalację, zamień układ rur w sprawdzony projekt</div>
        <p>Opracowanie łączy obciążenia cieplne, powierzchnie czynne, rozstawy, długości obwodów, przepływy, spadki ciśnienia i nastawy rozdzielacza. Dzięki temu wiadomo, które elementy można wykonać samodzielnie i z czym porównać gotową instalację.</p>
        <a class="rk-diy-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
        <small class="rk-diy-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-diy-section" id="rk-diy-sources">
      <span class="rk-diy-eyebrow">Podstawa techniczna</span>
      <h2 class="rk-diy-section-title">Źródła oficjalne i zakres poradnika</h2>
      <p class="rk-diy-lead">Odnośniki zewnętrzne w treści zostały zebrane wyłącznie w tej sekcji i prowadzą do oficjalnych kart norm oraz dokumentów urzędowych. Pełne wymagania trzeba zawsze połączyć z projektem i dokumentacją dokładnie zastosowanego systemu.</p>
      <div class="rk-diy-source-grid">
        <article class="rk-diy-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 — wydajność systemów płaszczyznowych</a><p>Oficjalna karta części opisującej metody wyznaczania wydajności wbudowanych wodnych systemów ogrzewania i chłodzenia.</p></article>
        <article class="rk-diy-source-card"><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 — projektowanie i wymiarowanie</a><p>Oficjalna karta części obejmującej metody projektowania oraz wymiarowania systemów płaszczyznowych.</p></article>
        <article class="rk-diy-source-card"><a href="https://www.iso.org/standard/74685.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-5:2021 — instalowanie systemów</a><p>Oficjalna karta części dotyczącej wymagań instalacyjnych dla wbudowanych wodnych systemów ogrzewania i chłodzenia.</p></article>
        <article class="rk-diy-source-card"><a href="https://knowledge.bsigroup.com/products/water-based-surface-embedded-heating-and-cooling-systems-installation-1" target="_blank" rel="nofollow noopener noreferrer">BS EN 1264-4:2021 — instalowanie</a><p>Oficjalna karta BSI części normy dotyczącej konstrukcji, wykonania oraz kontroli systemów wbudowanych.</p></article>
        <article class="rk-diy-source-card"><a href="https://isap.sejm.gov.pl/isap.nsf/download.xsp/WDU20220001225/O/D20221225.pdf" target="_blank" rel="nofollow noopener noreferrer">Warunki Techniczne — tekst jednolity</a><p>Oficjalny dokument Dziennika Ustaw zawierający między innymi wymagania izolacyjności cieplnej przegród.</p></article>
      </div>
      <div class="rk-diy-responsibility"><p><strong>Zakres odpowiedzialności:</strong> poradnik i analizator pomagają uporządkować decyzje przed wylewką, lecz nie są projektem, instrukcją konkretnego wyrobu, protokołem próby, formalnym odbiorem ani oceną jastrychu. Ostateczne wymagania wynikają z dokumentacji inwestycji, aktualnych dokumentów zastosowanych elementów i rzeczywistych warunków budynku.</p></div>
    </section>

    <section class="rk-diy-section rk-diy-section-soft" id="rk-diy-faq">
      <span class="rk-diy-eyebrow">Pytania inwestorów wykonujących instalację samodzielnie</span>
      <h2 class="rk-diy-section-title">FAQ — samodzielny montaż ogrzewania podłogowego</h2>
      <div class="rk-diy-faq">
        <details><summary>Czy można samodzielnie zamontować wodne ogrzewanie podłogowe?</summary><div class="rk-diy-faq-answer"><p>Można samodzielnie wykonać prace montażowe, jeżeli instalacja ma kompletny projekt, zastosowane elementy są zgodne systemowo, a osoba wykonująca potrafi kontrolować warstwy, rury, połączenia i próbę. Samodzielność nie zastępuje obliczeń cieplnych, hydrauliki ani odbioru przed wylewką.</p></div></details>
        <details><summary>Czy projekt podłogówki jest formalnie obowiązkowy?</summary><div class="rk-diy-faq-answer"><p>Zakres formalny zależy od rodzaju inwestycji i dokumentacji budynku. Niezależnie od kwalifikacji prawnej potrzebne są dane wykonawcze pozwalające ustalić moc pomieszczeń, powierzchnie czynne, rozstawy, pętle, przepływy i nastawy. Brak jednego uniwersalnego obowiązku nie oznacza, że instalację można prawidłowo dobrać bez obliczeń.</p></div></details>
        <details><summary>Czy rozstaw 15 cm jest odpowiedni w każdym pomieszczeniu?</summary><div class="rk-diy-faq-answer"><p>Nie. Rozstaw dobiera się do obciążenia cieplnego, dostępnej powierzchni, konstrukcji podłogi, okładziny, temperatury wody i limitów temperatury powierzchni. Jedna wartość dla całego domu może prowadzić do niepotrzebnego zagęszczenia albo niedoboru mocy.</p></div></details>
        <details><summary>Czy 100 m to absolutna maksymalna długość pętli?</summary><div class="rk-diy-faq-answer"><p>Nie jest to uniwersalny limit normowy. Około 100 m bywa praktycznym pułapem dla typowych pętli 16 × 2 mm, lecz poprawność zależy od światła rury, przepływu, medium, oporów miejscowych, dostępnego ciśnienia i możliwości regulacji.</p></div></details>
        <details><summary>Czy wszystkie pętle powinny mieć taką samą długość?</summary><div class="rk-diy-faq-answer"><p>Nie. Powinny zapewniać wymagane przepływy i dać się zrównoważyć. Bardzo duże różnice mogą utrudniać regulację, ale sztuczne wydłużanie krótkiej pętli również zwiększa opór. Ocenia się obliczone przepływy i spadki ciśnienia, nie sam procent różnicy długości.</p></div></details>
        <details><summary>Jakie ciśnienie i czas próby szczelności zastosować?</summary><div class="rk-diy-faq-answer"><p>Nie należy przyjmować jednej wartości dla wszystkich instalacji. Ciśnienie, czas, medium, etapy i kryteria oceny trzeba ustalić według projektu, dokumentacji zastosowanych elementów oraz właściwej procedury odbiorowej. Warunki i wynik zapisuje się w protokole.</p></div></details>
        <details><summary>Czy rury powinny pozostać pod ciśnieniem podczas wykonywania jastrychu?</summary><div class="rk-diy-faq-answer"><p>Stan instalacji podczas robót ustala się według przyjętej procedury i dokumentacji systemu. Kontrola ma pomóc szybko wykryć ewentualne uszkodzenie. Nie należy uzasadniać jej twierdzeniem, że ciśnienie uniwersalnie usztywnia rurę lub zabezpiecza połączenia.</p></div></details>
        <details><summary>Czy próbę można wykonać sprężonym powietrzem?</summary><div class="rk-diy-faq-answer"><p>Medium próby oraz środki bezpieczeństwa muszą wynikać z właściwej procedury i warunków budowy. Gaz pod ciśnieniem magazynuje energię i wymaga szczególnej ostrożności, właściwych przyrządów oraz oceny ryzyka. Nie należy improwizować ani przekraczać dopuszczeń elementów.</p></div></details>
        <details><summary>Co zrobić z załamaną rurą ogrzewania podłogowego?</summary><div class="rk-diy-faq-answer"><p>Zatrzymaj montaż, oznacz miejsce i sprawdź instrukcję dokładnego produktu. Dopuszczona metoda zależy od materiału oraz konstrukcji rury. Po każdej zaakceptowanej naprawie potrzebna jest ponowna kontrola, próba i dokumentacja lokalizacji.</p></div></details>
        <details><summary>Czy wolno ukryć złączkę naprawczą pod wylewką?</summary><div class="rk-diy-faq-answer"><p>Pętle projektuje się bez ukrytych połączeń. Jeśli awaryjna naprawa jest konieczna, musi być rozwiązaniem wyraźnie dopuszczonym dla danego systemu, wykonanym właściwymi narzędziami, sprawdzonym próbą i dokładnie naniesionym na dokumentację. W wielu sytuacjach bezpieczniejsza jest wymiana całej pętli.</p></div></details>
        <details><summary>Gdzie trzeba wykonać dylatacje jastrychu?</summary><div class="rk-diy-faq-answer"><p>Podział zależy od materiału jastrychu, geometrii, grubości, przewężeń, istniejących szczelin konstrukcyjnych, pól grzewczych i wykończenia. Nie ma jednej powierzchni ani długości boku właściwej dla każdej technologii. Plan trzeba uzgodnić przed wylewką.</p></div></details>
        <details><summary>Jak chronić rurę przechodzącą przez dylatację?</summary><div class="rk-diy-faq-answer"><p>Przejścia ogranicza się do niezbędnych i prowadzi w osłonie pozwalającej przejąć ruch sąsiednich pól. Rodzaj oraz długość zabezpieczenia powinny wynikać z projektu i technologii jastrychu, a położenie należy sfotografować.</p></div></details>
        <details><summary>Ile izolacji ułożyć pod ogrzewaniem podłogowym?</summary><div class="rk-diy-faq-answer"><p>Nie można odpowiedzieć samą liczbą centymetrów. Dobór zależy od współczynnika przewodzenia materiału, wymaganej izolacyjności całej przegrody, temperatur po obu stronach, mostków cieplnych, dostępnej wysokości i wytrzymałości pod obciążeniem.</p></div></details>
        <details><summary>Kiedy można rozpocząć wygrzewanie jastrychu?</summary><div class="rk-diy-faq-answer"><p>Termin i przebieg zależą od rodzaju jastrychu, jego receptury, grubości, warunków dojrzewania oraz wytycznych wykonawcy. Nie należy automatycznie stosować jednej liczby dni i jednego przyrostu temperatury do wszystkich podłóg.</p></div></details>
        <details><summary>Jakie zdjęcia zrobić przed wylewką?</summary><div class="rk-diy-faq-answer"><p>Sfotografuj całe pomieszczenia z kilku kierunków, podejścia do rozdzielacza, przejścia, dylatacje, miejsca napraw i strefy bez rur. Dodaj miarę oraz stałe punkty odniesienia, aby można było odtworzyć odległości po zakryciu instalacji.</p></div></details>
        <details><summary>Co sprawdzić bezpośrednio przed rozpoczęciem wylewki?</summary><div class="rk-diy-faq-answer"><p>Porównaj wykonanie z projektem, obejrzyj całą rurę, sprawdź mocowania, osłony, taśmę i dylatacje, zakończ próbę z protokołem, oznacz pętle, wykonaj dokumentację zdjęciową oraz potwierdź technologię jastrychu, pielęgnację i późniejsze uruchomienie.</p></div></details>
      </div>
    </section>

    <section class="rk-diy-author" id="rk-diy-author">
      <span class="rk-diy-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-diy-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-diy-author-layout">
        <aside class="rk-diy-author-side">
          <div class="rk-diy-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-diy-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-diy-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-diy-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-b8b906199/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-diy-author-main">
          <div class="rk-diy-author-quote">„Moim zdaniem samodzielny montaż może być wykonany dobrze, ale tylko wtedy, gdy inwestor nie próbuje zastąpić projektu zestawem internetowych reguł. Rurę można ułożyć własnymi rękami; strat ciepła, przepływów i oporów nie da się jednak policzyć na oko.”</div>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały edukacyjne dla inwestorów i wykonawców. W poradnikach oddziela czynności możliwe do wykonania na budowie od decyzji wymagających danych oraz obliczeń.</p>
          <p>Weryfikacja tego materiału objęła obciążenia pomieszczeń, podział i hydraulikę pętli, wymagania przed zakryciem rur, znaczenie próby szczelności, koordynację dylatacji oraz dokumentację powykonawczą. Treść nie przypisuje uniwersalnych wartości wszystkim systemom, ponieważ warunki montażu i odbioru zależą od projektu oraz dokładnie zastosowanych elementów.</p>
          <p>Publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego w serwisie Projekt-Ogrzewania.pl</a>.</p>
          <div class="rk-diy-author-facts">
            <div class="rk-diy-author-fact"><strong>Zakres</strong>ogrzewanie podłogowe, bilanse cieplne i hydraulika instalacji</div>
            <div class="rk-diy-author-fact"><strong>Metoda pracy</strong>projekt, dokumentacja systemu i kontrola rzeczywistego wykonania</div>
            <div class="rk-diy-author-fact"><strong>Aktualizacja</strong>stan techniczny materiału sprawdzony 17 września 2026 r.</div>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "samodzielny montaż ogrzewania podłogowego",
        "projektowe obciążenie cieplne",
        "hydraulika pętli grzewczych",
        "próba szczelności instalacji",
        "równoważenie hydrauliczne"
      ],
      "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-b8b906199/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Samodzielny-montaz-ogrzewania-podlogowego-–-5-bledow-ktorych-nie-naprawisz-po-wylewce.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Samodzielny-montaz-ogrzewania-podlogowego-–-5-bledow-ktorych-nie-naprawisz-po-wylewce.webp",
      "width": 900,
      "height": 900,
      "caption": "Samodzielny montaż ogrzewania podłogowego — pięć błędów przed wylewką"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/" },
        { "@type": "ListItem", "position": 2, "name": "Poradniki", "item": "https://projekt-ogrzewania.pl/blog/" },
        { "@type": "ListItem", "position": 3, "name": "Samodzielny montaż ogrzewania podłogowego", "item": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/" }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#webpage",
      "url": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/",
      "name": "Samodzielny montaż ogrzewania podłogowego – 5 błędów przed wylewką",
      "description": "Praktyczny poradnik samodzielnego montażu podłogówki: projekt, pętle, rury, dylatacje, próba szczelności, jastrych i kontrola przed zakryciem instalacji.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#breadcrumb" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#primaryimage" },
      "datePublished": "2026-04-19T19:27:33+00:00",
      "dateModified": "2026-09-17T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#article" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#article",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#webpage" },
      "headline": "Samodzielny montaż ogrzewania podłogowego – 5 błędów przed wylewką",
      "description": "Techniczny przewodnik dla inwestora wykonującego podłogówkę samodzielnie, z analizatorem gotowości do wylewki i checklistą odbiorową.",
      "image": { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-04-19T19:27:33+00:00",
      "dateModified": "2026-09-17T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "about": [
        "samodzielny montaż ogrzewania podłogowego",
        "kontrola przed wylewką",
        "pętle ogrzewania podłogowego",
        "próba szczelności",
        "dylatacje jastrychu",
        "hydraulika podłogówki"
      ],
      "keywords": "samodzielny montaż ogrzewania podłogowego, montaż podłogówki, błędy przed wylewką, próba szczelności, pętle podłogówki, dylatacje",
      "isAccessibleForFree": true,
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#analyzer" },
        { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#error-list" },
        { "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#faq-schema" }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#analyzer",
      "name": "Analizator gotowości podłogówki do wykonania wylewki",
      "url": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#rk-diy-analyzer-section",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Edukacyjny audyt piętnastu warunków dotyczących projektu, hydrauliki, rur, dylatacji, próby i dokumentacji przed zakryciem instalacji."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#howto",
      "name": "Jak sprawdzić samodzielnie zamontowaną podłogówkę przed wylewką",
      "description": "Sześć etapów kontroli ogrzewania podłogowego przed wykonaniem jastrychu.",
      "totalTime": "PT45M",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Porównaj wykonanie z projektem", "text": "Sprawdź obciążenia pomieszczeń, powierzchnie czynne, rozstawy, trasy, długości i zaakceptowane zmiany." },
        { "@type": "HowToStep", "position": 2, "name": "Zweryfikuj hydraulikę", "text": "Porównaj rzeczywiste pętle z wymaganymi przepływami, oporami i zakresem regulacji rozdzielacza." },
        { "@type": "HowToStep", "position": 3, "name": "Obejrzyj rury", "text": "Sprawdź brak uszkodzeń, poprawne łuki, mocowania, osłony przejść i zgodność zastosowanego wyrobu." },
        { "@type": "HowToStep", "position": 4, "name": "Skontroluj taśmy i dylatacje", "text": "Potwierdź ciągłość oddzielenia brzegowego, podział pól i ochronę rur przechodzących przez szczeliny." },
        { "@type": "HowToStep", "position": 5, "name": "Wykonaj i udokumentuj próbę", "text": "Przeprowadź właściwą procedurę, wyjaśnij nieprawidłowości i zachowaj kompletny protokół." },
        { "@type": "HowToStep", "position": 6, "name": "Zapisz stan przed zakryciem", "text": "Wykonaj zdjęcia z miarą, opisz pętle, nanieś odstępstwa i uzgodnij technologię jastrychu oraz uruchomienia." }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#error-list",
      "name": "Pięć błędów samodzielnego montażu ogrzewania podłogowego",
      "numberOfItems": 5,
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Układanie rur bez projektu cieplnego i hydraulicznego" },
        { "@type": "ListItem", "position": 2, "name": "Niewłaściwe pętle, mocowanie i uszkodzenia rur" },
        { "@type": "ListItem", "position": 3, "name": "Brak poprawnie udokumentowanej próby szczelności" },
        { "@type": "ListItem", "position": 4, "name": "Brak koordynacji dylatacji, taśmy brzegowej i przejść rur" },
        { "@type": "ListItem", "position": 5, "name": "Zła izolacja, przypadkowy jastrych i zbyt wczesne uruchomienie" }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/#faq-schema",
      "mainEntity": [
        { "@type": "Question", "name": "Czy można samodzielnie zamontować wodne ogrzewanie podłogowe?", "acceptedAnswer": { "@type": "Answer", "text": "Można samodzielnie wykonać prace montażowe, jeżeli instalacja ma kompletny projekt, zastosowane elementy są zgodne, a wykonawca potrafi kontrolować warstwy, rury, połączenia i próbę. Samodzielność nie zastępuje obliczeń ani odbioru." } },
        { "@type": "Question", "name": "Czy projekt podłogówki jest formalnie obowiązkowy?", "acceptedAnswer": { "@type": "Answer", "text": "Zakres formalny zależy od inwestycji. Niezależnie od niego potrzebne są dane wykonawcze określające moc pomieszczeń, powierzchnie czynne, rozstawy, pętle, przepływy i nastawy." } },
        { "@type": "Question", "name": "Czy rozstaw 15 cm jest odpowiedni w każdym pomieszczeniu?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Rozstaw dobiera się do obciążenia cieplnego, powierzchni czynnej, konstrukcji podłogi, okładziny, temperatury wody i limitów temperatury powierzchni." } },
        { "@type": "Question", "name": "Czy 100 m to absolutna maksymalna długość pętli?", "acceptedAnswer": { "@type": "Answer", "text": "Nie jest to uniwersalny limit normowy. Poprawność zależy od światła rury, przepływu, medium, oporów miejscowych, dostępnego ciśnienia i możliwości regulacji." } },
        { "@type": "Question", "name": "Czy wszystkie pętle powinny mieć taką samą długość?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Pętle powinny zapewniać wymagane przepływy i dać się zrównoważyć. Ocenia się obliczone przepływy i spadki ciśnienia, nie sam procent różnicy długości." } },
        { "@type": "Question", "name": "Jakie ciśnienie i czas próby szczelności zastosować?", "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednej wartości dla wszystkich instalacji. Ciśnienie, czas, medium, etapy i kryteria oceny trzeba ustalić według projektu, dokumentacji elementów i właściwej procedury." } },
        { "@type": "Question", "name": "Czy rury powinny pozostać pod ciśnieniem podczas wykonywania jastrychu?", "acceptedAnswer": { "@type": "Answer", "text": "Stan instalacji podczas robót ustala się według przyjętej procedury i dokumentacji systemu. Kontrola ma pomóc wykryć ewentualne uszkodzenie." } },
        { "@type": "Question", "name": "Czy próbę można wykonać sprężonym powietrzem?", "acceptedAnswer": { "@type": "Answer", "text": "Medium próby i środki bezpieczeństwa muszą wynikać z właściwej procedury. Gaz pod ciśnieniem magazynuje energię i wymaga oceny ryzyka, odpowiednich przyrządów i ostrożności." } },
        { "@type": "Question", "name": "Co zrobić z załamaną rurą ogrzewania podłogowego?", "acceptedAnswer": { "@type": "Answer", "text": "Trzeba zatrzymać montaż, oznaczyć miejsce i sprawdzić instrukcję dokładnego produktu. Po zaakceptowanej naprawie potrzebne są kontrola, próba i dokumentacja lokalizacji." } },
        { "@type": "Question", "name": "Czy wolno ukryć złączkę naprawczą pod wylewką?", "acceptedAnswer": { "@type": "Answer", "text": "Pętle projektuje się bez ukrytych połączeń. Konieczna naprawa musi być rozwiązaniem dopuszczonym dla systemu, wykonanym właściwie, sprawdzonym i naniesionym na dokumentację." } },
        { "@type": "Question", "name": "Gdzie trzeba wykonać dylatacje jastrychu?", "acceptedAnswer": { "@type": "Answer", "text": "Podział zależy od materiału jastrychu, geometrii, grubości, przewężeń, istniejących szczelin, pól grzewczych i wykończenia. Plan trzeba uzgodnić przed wylewką." } },
        { "@type": "Question", "name": "Jak chronić rurę przechodzącą przez dylatację?", "acceptedAnswer": { "@type": "Answer", "text": "Przejścia ogranicza się do niezbędnych i prowadzi w osłonie pozwalającej przejąć ruch sąsiednich pól. Rodzaj zabezpieczenia wynika z projektu i technologii jastrychu." } },
        { "@type": "Question", "name": "Ile izolacji ułożyć pod ogrzewaniem podłogowym?", "acceptedAnswer": { "@type": "Answer", "text": "Dobór zależy od przewodności materiału, wymaganej izolacyjności przegrody, temperatur, mostków, dostępnej wysokości i wytrzymałości. Sama liczba centymetrów nie wystarcza." } },
        { "@type": "Question", "name": "Kiedy można rozpocząć wygrzewanie jastrychu?", "acceptedAnswer": { "@type": "Answer", "text": "Termin i przebieg zależą od rodzaju jastrychu, receptury, grubości, warunków dojrzewania oraz wytycznych wykonawcy. Nie ma jednej procedury dla wszystkich podłóg." } },
        { "@type": "Question", "name": "Jakie zdjęcia zrobić przed wylewką?", "acceptedAnswer": { "@type": "Answer", "text": "Należy sfotografować całe pomieszczenia, podejścia, przejścia, dylatacje, naprawy i strefy bez rur, dodając miarę oraz stałe punkty odniesienia." } },
        { "@type": "Question", "name": "Co sprawdzić bezpośrednio przed rozpoczęciem wylewki?", "acceptedAnswer": { "@type": "Answer", "text": "Trzeba porównać wykonanie z projektem, obejrzeć rury, mocowania, osłony, taśmę i dylatacje, zakończyć próbę, oznaczyć pętle, wykonać zdjęcia i uzgodnić technologię jastrychu." } }
      ]
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projekt ogrzewania podłogowego",
      "description": "Projekt obejmujący obliczenia cieplne i hydrauliczne, rozmieszczenie pętli, rozstawy, długości, przepływy i nastawy rozdzielacza."
    }
  ]
}
</script>

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

  var guide = document.getElementById("rk-diy-guide");
  if (!guide) {
    return;
  }
  if (guide.getAttribute("data-rk-ready") === "1") {
    return;
  }
  guide.setAttribute("data-rk-ready", "1");

  function renderList(elementId, items, emptyText) {
    var list = document.getElementById(elementId);
    if (!list) {
      return;
    }
    list.textContent = "";
    if (items.length === 0) {
      var emptyItem = document.createElement("li");
      emptyItem.textContent = emptyText;
      list.appendChild(emptyItem);
      return;
    }
    items.forEach(function (itemText) {
      var item = document.createElement("li");
      item.textContent = itemText;
      list.appendChild(item);
    });
  }

  function analyzeReadiness() {
    var fields = guide.querySelectorAll(".rk-diy-audit-field");
    var ok = [];
    var check = [];
    var stop = [];

    fields.forEach(function (field) {
      var value = field.value;
      var severity = field.getAttribute("data-severity") || "warning";
      var label = field.getAttribute("data-label") || "Element kontroli";
      var action = field.getAttribute("data-action") || "Wyjaśnij ten punkt przed wykonaniem jastrychu.";

      if (value === "yes") {
        ok.push(label + " — potwierdzone.");
        return;
      }
      if (severity === "critical") {
        if (value === "no") {
          stop.push(action);
          return;
        }
        stop.push("Brak potwierdzenia: " + label.toLowerCase() + ". " + action);
        return;
      }
      check.push(action);
    });

    var result = document.getElementById("rk-diy-result");
    var status = document.getElementById("rk-diy-result-status");
    var intro = document.getElementById("rk-diy-result-intro");
    result.classList.remove("is-good");
    result.classList.remove("is-stop");

    if (stop.length > 0) {
      result.classList.add("is-stop");
      status.textContent = "Nie zamawiaj jeszcze jastrychu — wyjaśnij warunki krytyczne";
      intro.textContent = "Co najmniej jeden brak dotyczy cechy, której po zakryciu nie da się wiarygodnie sprawdzić albo łatwo poprawić.";
    } else {
      if (check.length > 0) {
        status.textContent = "Dane krytyczne potwierdzone, ale dokumentacja nie jest kompletna";
        intro.textContent = "Uzupełnij wskazane materiały i uzgodnienia, a następnie wykonaj formalny odbiór przed wylewką.";
      } else {
        result.classList.add("is-good");
        status.textContent = "Lista kompletna — przejdź do formalnego odbioru instalacji";
        intro.textContent = "Analizator nie wykazał braków. Porównaj odpowiedzi z dokumentami i potwierdź gotowość zgodnie z procedurą inwestycji.";
      }
    }

    document.getElementById("rk-diy-ok-count").textContent = String(ok.length);
    document.getElementById("rk-diy-check-count").textContent = String(check.length);
    document.getElementById("rk-diy-stop-count").textContent = String(stop.length);
    renderList("rk-diy-ok-list", ok, "Brak potwierdzonych elementów.");
    renderList("rk-diy-check-list", check, "Brak dodatkowych punktów do sprawdzenia.");
    renderList("rk-diy-stop-list", stop, "Nie wskazano warunku blokującego wylewkę.");
  }

  function resetAnalyzer() {
    var fields = guide.querySelectorAll(".rk-diy-audit-field");
    fields.forEach(function (field) {
      field.selectedIndex = 0;
    });
    var result = document.getElementById("rk-diy-result");
    result.classList.remove("is-good");
    result.classList.remove("is-stop");
    document.getElementById("rk-diy-result-status").textContent = "Uzupełnij 15 punktów na podstawie rzeczywistego wykonania";
    document.getElementById("rk-diy-result-intro").textContent = "Wynik rozdzieli informacje potwierdzone, wymagające uzupełnienia i blokujące zakrycie instalacji.";
    document.getElementById("rk-diy-ok-count").textContent = "0";
    document.getElementById("rk-diy-check-count").textContent = String(fields.length);
    document.getElementById("rk-diy-stop-count").textContent = "0";
    renderList("rk-diy-ok-list", [], "Jeszcze brak ocenionych danych.");
    renderList("rk-diy-check-list", [], "Uzupełnij formularz na podstawie projektu, oględzin i protokołów.");
    renderList("rk-diy-stop-list", [], "Brak oceny nie oznacza gotowości do zakrycia rur.");
  }

  var runButton = document.getElementById("rk-diy-run");
  var resetButton = document.getElementById("rk-diy-reset");
  if (runButton) {
    runButton.addEventListener("click", analyzeReadiness);
  }
  if (resetButton) {
    resetButton.addEventListener("click", resetAnalyzer);
  }
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/">Samodzielny montaż ogrzewania podłogowego – 5 błędów przed wylewką.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Temperatura zasilania pompy ciepła – czy 35°C wystarczy?</title>
		<link>https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 10:17:48 +0000</pubDate>
				<category><![CDATA[Efektywne ogrzewanie]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje niskotemperaturowe]]></category>
		<category><![CDATA[Koszty ogrzewania]]></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[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technika grzewcza]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[koszty eksploatacji]]></category>
		<category><![CDATA[krzywa grzewcza]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[scop]]></category>
		<category><![CDATA[systemy niskotemperaturowe]]></category>
		<category><![CDATA[temperatura zasilania]]></category>
		<category><![CDATA[termodynamika]]></category>
		<category><![CDATA[współczynnik cop]]></category>
		<category><![CDATA[wylewka anhydrytowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4200</guid>

					<description><![CDATA[<p>Wybór odpowiednich parametrów grzewczych to absolutny fundament, od którego zależą Twoje przyszłe rachunki za prąd oraz trwałość wykończenia wnętrz. W świecie nowoczesnych instalacji coraz częściej pojawia się kluczowe pytanie o to, jaka powinna być niska temperatura zasilania pompy ciepła – dlaczego 35 stopni to ideał dla podłogówki? Odpowiedź na nie wymaga zrozumienia praw fizyki, a konkretnie zależności między temperaturą czynnika a współczynnikiem wydajności COP. Utrzymywanie zasilania na tym poziomie pozwala urządzeniu pracować z maksymalną efektywnością, co bezpośrednio przekłada się na realne oszczędności w domowym budżecie. W niniejszym tekście szczegółowo analizujemy aspekty techniczne, wpływ temperatury na jastrych oraz wyjaśniamy, dlaczego precyzyjny projekt instalacji jest ważniejszy niż zakup najdroższej jednostki grzewczej dostępnej na rynku.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">Temperatura zasilania pompy ciepła – czy 35°C wystarczy?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-temp35-guide {
    --rk-temp35-navy: #123247;
    --rk-temp35-navy-deep: #0b2536;
    --rk-temp35-teal: #0e7787;
    --rk-temp35-cyan: #5fdef0;
    --rk-temp35-orange: #ff7a21;
    --rk-temp35-green: #248c68;
    --rk-temp35-red: #c64b48;
    --rk-temp35-amber: #b77812;
    --rk-temp35-ink: #173246;
    --rk-temp35-muted: #5d7180;
    --rk-temp35-line: #d7e1e7;
    --rk-temp35-soft: #f3f7f9;
    --rk-temp35-white: #ffffff;
    --rk-temp35-shadow: 0 18px 48px rgba(13, 43, 60, 0.12);
    color: var(--rk-temp35-ink);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    font-size: 18px;
    line-height: 1.72;
    overflow-x: hidden;
  }

  #rk-temp35-guide,
  #rk-temp35-guide *,
  #rk-temp35-guide *::before,
  #rk-temp35-guide *::after {
    box-sizing: border-box;
  }

  #rk-temp35-guide .rk-temp35-shell {
    width: min(1240px, 100%);
    margin: 0 auto;
  }

  #rk-temp35-guide a {
    color: #087a9f;
    text-decoration-thickness: 1.5px;
    text-underline-offset: 3px;
    overflow-wrap: anywhere;
  }

  #rk-temp35-guide a:hover {
    color: #055d79;
  }

  #rk-temp35-guide p,
  #rk-temp35-guide ul,
  #rk-temp35-guide ol {
    margin: 0 0 1.1rem;
  }

  #rk-temp35-guide strong {
    color: inherit;
  }

  #rk-temp35-guide .rk-temp35-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(42px, 6vw, 78px);
    border-radius: 32px;
    background:
      radial-gradient(circle at 90% 112%, rgba(95, 222, 240, 0.16) 0 150px, transparent 151px),
      radial-gradient(circle at 90% 112%, transparent 0 205px, rgba(95, 222, 240, 0.09) 206px 275px, transparent 276px),
      linear-gradient(115deg, #122f43 0%, #123c4f 56%, #0d5b63 100%);
    color: #ffffff;
    box-shadow: var(--rk-temp35-shadow);
  }

  #rk-temp35-guide .rk-temp35-hero::before {
    content: "";
    position: absolute;
    z-index: -1;
    left: -120px;
    bottom: -180px;
    width: 440px;
    height: 440px;
    border-radius: 50%;
    background: rgba(255, 122, 33, 0.10);
    filter: blur(2px);
  }

  #rk-temp35-guide .rk-temp35-hero-inner {
    position: relative;
    z-index: 1;
  }

  #rk-temp35-guide .rk-temp35-kicker,
  #rk-temp35-guide .rk-temp35-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
    color: var(--rk-temp35-orange);
    font-size: 0.78rem;
    font-weight: 850;
    letter-spacing: 0.13em;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-temp35-guide .rk-temp35-kicker::before,
  #rk-temp35-guide .rk-temp35-eyebrow::before {
    content: "";
    flex: 0 0 9px;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: currentColor;
  }

  #rk-temp35-guide .rk-temp35-hero-title {
    max-width: 1110px;
    margin: 0;
    color: #ffffff;
    font-size: clamp(2.55rem, 6.1vw, 5.2rem);
    font-weight: 900;
    letter-spacing: -0.055em;
    line-height: 0.98;
    text-wrap: balance;
  }

  #rk-temp35-guide .rk-temp35-hero-title span {
    color: var(--rk-temp35-cyan);
  }

  #rk-temp35-guide .rk-temp35-hero-lead {
    max-width: 1050px;
    margin: 30px 0 0;
    color: #eef9fc;
    font-size: clamp(1.05rem, 2vw, 1.34rem);
    line-height: 1.62;
  }

  #rk-temp35-guide .rk-temp35-hero-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 11px;
    margin: 28px 0 0;
  }

  #rk-temp35-guide .rk-temp35-hero-tag {
    display: inline-flex;
    align-items: center;
    min-height: 42px;
    padding: 8px 17px;
    border: 1px solid rgba(255, 255, 255, 0.26);
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 0.84rem;
    font-weight: 800;
    line-height: 1.3;
  }

  #rk-temp35-guide .rk-temp35-byline {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 24px;
    margin: 34px 0 0;
    color: #e5f0f4;
    font-size: 0.85rem;
    font-weight: 700;
  }

  #rk-temp35-guide .rk-temp35-hero-metrics {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
    margin-top: 38px;
  }

  #rk-temp35-guide .rk-temp35-hero-metric {
    min-width: 0;
    padding: 22px 24px;
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 19px;
    background: rgba(255, 255, 255, 0.08);
    color: #eff9fb;
    backdrop-filter: blur(5px);
  }

  #rk-temp35-guide .rk-temp35-hero-metric b {
    display: block;
    margin-bottom: 7px;
    color: #ffffff;
    font-size: 1.02rem;
    line-height: 1.3;
  }

  #rk-temp35-guide .rk-temp35-hero-metric span {
    display: block;
    color: #e2f1f5;
    font-size: 0.88rem;
    line-height: 1.55;
  }

  #rk-temp35-guide .rk-temp35-shortcuts {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin: 24px 0;
    padding: 22px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 22px;
    background: #ffffff;
    box-shadow: 0 10px 30px rgba(18, 50, 71, 0.07);
  }

  #rk-temp35-guide .rk-temp35-shortcuts-label {
    display: block;
    flex-basis: 100%;
    color: var(--rk-temp35-navy);
    font-size: 0.8rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-temp35-guide .rk-temp35-shortcuts a {
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: 7px 13px;
    border: 1px solid #cbd9e1;
    border-radius: 999px;
    background: var(--rk-temp35-soft);
    color: var(--rk-temp35-navy);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    text-decoration: none;
  }

  #rk-temp35-guide .rk-temp35-shortcuts a:hover {
    border-color: var(--rk-temp35-teal);
    background: #e8f6f8;
    color: #075f6b;
  }

  #rk-temp35-guide .rk-temp35-section,
  #rk-temp35-guide .rk-temp35-author {
    margin: 24px 0;
    padding: clamp(30px, 5vw, 62px);
    border: 1px solid var(--rk-temp35-line);
    border-radius: 28px;
    background: #ffffff;
    box-shadow: 0 14px 42px rgba(18, 50, 71, 0.07);
    scroll-margin-top: 28px;
  }

  #rk-temp35-guide .rk-temp35-section-soft {
    background: var(--rk-temp35-soft);
  }

  #rk-temp35-guide .rk-temp35-section-dark {
    border-color: #234c61;
    background:
      radial-gradient(circle at 105% 100%, rgba(95, 222, 240, 0.12) 0 190px, transparent 191px),
      linear-gradient(135deg, #102d40, #0e4854);
    color: #eff8fb;
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-section-title,
  #rk-temp35-guide .rk-temp35-section-dark h3,
  #rk-temp35-guide .rk-temp35-section-dark strong {
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-lead,
  #rk-temp35-guide .rk-temp35-section-dark p,
  #rk-temp35-guide .rk-temp35-section-dark li {
    color: #e3f0f4;
  }

  #rk-temp35-guide .rk-temp35-section-title,
  #rk-temp35-guide .rk-temp35-author-title {
    max-width: 1010px;
    margin: 0 0 18px;
    color: var(--rk-temp35-navy);
    font-size: clamp(1.8rem, 3.7vw, 3.05rem);
    font-weight: 900;
    letter-spacing: -0.035em;
    line-height: 1.12;
    text-wrap: balance;
  }

  #rk-temp35-guide .rk-temp35-lead {
    max-width: 1040px;
    color: #314c5e;
    font-size: 1.08rem;
    line-height: 1.75;
  }

  #rk-temp35-guide .rk-temp35-answer {
    margin: 24px 0;
    padding: 26px 28px;
    border-left: 6px solid var(--rk-temp35-cyan);
    border-radius: 8px 20px 20px 8px;
    background: var(--rk-temp35-navy);
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-answer-label {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-temp35-cyan);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  #rk-temp35-guide .rk-temp35-answer p {
    margin: 0;
    color: #ffffff;
    font-size: 1.06rem;
  }

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

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

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

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

  #rk-temp35-guide .rk-temp35-card {
    min-width: 0;
    padding: 23px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 20px;
    background: #ffffff;
    color: var(--rk-temp35-ink);
  }

  #rk-temp35-guide .rk-temp35-card h3 {
    margin: 0 0 10px;
    color: var(--rk-temp35-navy);
    font-size: 1.06rem;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-card p,
  #rk-temp35-guide .rk-temp35-card li {
    color: #3e5869;
    font-size: 0.92rem;
    line-height: 1.65;
  }

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

  #rk-temp35-guide .rk-temp35-card-number {
    display: inline-grid;
    place-items: center;
    width: 36px;
    height: 36px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: #dff8fb;
    color: #086678;
    font-size: 0.85rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-callout,
  #rk-temp35-guide .rk-temp35-note,
  #rk-temp35-guide .rk-temp35-warning {
    margin: 24px 0 0;
    padding: 20px 22px;
    border-radius: 16px;
    color: #274657;
    font-size: 0.94rem;
    line-height: 1.68;
  }

  #rk-temp35-guide .rk-temp35-callout {
    border: 1px solid #b9e7ed;
    background: #eaf9fb;
  }

  #rk-temp35-guide .rk-temp35-note {
    border: 1px solid #d7e1e7;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-warning {
    border: 1px solid #efd0a1;
    background: #fff6e9;
  }

  #rk-temp35-guide .rk-temp35-tool {
    overflow: hidden;
    margin: 28px 0 0;
    border: 1px solid #aacbd2;
    border-radius: 26px;
    background: #ffffff;
    box-shadow: 0 18px 46px rgba(15, 66, 78, 0.12);
  }

  #rk-temp35-guide .rk-temp35-tool-head {
    padding: 28px clamp(22px, 4vw, 40px);
    background: linear-gradient(125deg, var(--rk-temp35-navy), #0d5962);
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-tool-head .rk-temp35-eyebrow {
    color: #ffad73;
  }

  #rk-temp35-guide .rk-temp35-tool-head h3 {
    margin: 0 0 10px;
    color: #ffffff;
    font-size: clamp(1.35rem, 3vw, 2.05rem);
    line-height: 1.2;
  }

  #rk-temp35-guide .rk-temp35-tool-head p {
    max-width: 920px;
    margin: 0;
    color: #e9f7fa;
    font-size: 0.94rem;
  }

  #rk-temp35-guide .rk-temp35-tool-body {
    padding: clamp(22px, 4vw, 40px);
  }

  #rk-temp35-guide .rk-temp35-control-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin-bottom: 22px;
  }

  #rk-temp35-guide .rk-temp35-control {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 18px;
    background: var(--rk-temp35-soft);
  }

  #rk-temp35-guide .rk-temp35-control-label {
    display: block;
    margin-bottom: 11px;
    color: var(--rk-temp35-navy);
    font-size: 0.84rem;
    font-weight: 900;
  }

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

  #rk-temp35-guide .rk-temp35-segmented button {
    min-width: 0;
    min-height: 48px;
    padding: 9px 12px;
    border: 1px solid #bfd0d9;
    border-radius: 13px;
    background: #ffffff;
    color: var(--rk-temp35-navy);
    font: inherit;
    font-size: 0.84rem;
    font-weight: 850;
    line-height: 1.25;
    cursor: pointer;
    transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
  }

  #rk-temp35-guide .rk-temp35-segmented button:hover {
    transform: translateY(-1px);
    border-color: var(--rk-temp35-teal);
  }

  #rk-temp35-guide .rk-temp35-segmented button[aria-pressed="true"] {
    border-color: var(--rk-temp35-navy);
    background: var(--rk-temp35-navy);
    color: #ffffff;
    box-shadow: 0 8px 18px rgba(18, 50, 71, 0.18);
  }

  #rk-temp35-guide .rk-temp35-state-summary {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 16px;
    align-items: center;
    margin: 0 0 22px;
    padding: 20px;
    border: 1px solid #b9e7ed;
    border-radius: 18px;
    background: #eaf9fb;
  }

  #rk-temp35-guide .rk-temp35-state-dot {
    display: grid;
    place-items: center;
    width: 50px;
    height: 50px;
    border-radius: 50%;
    background: var(--rk-temp35-green);
    color: #ffffff;
    font-size: 1.25rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-state-summary[data-flow="closed"] {
    border-color: #e5c4c2;
    background: #fff1f0;
  }

  #rk-temp35-guide .rk-temp35-state-summary[data-flow="closed"] .rk-temp35-state-dot {
    background: var(--rk-temp35-red);
  }

  #rk-temp35-guide .rk-temp35-state-summary strong {
    display: block;
    margin-bottom: 2px;
    color: var(--rk-temp35-navy);
    font-size: 1.05rem;
  }

  #rk-temp35-guide .rk-temp35-state-summary p {
    margin: 0;
    color: #405c6d;
    font-size: 0.91rem;
    line-height: 1.55;
  }

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

  #rk-temp35-guide .rk-temp35-flow-step {
    position: relative;
    min-width: 0;
    padding: 22px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 20px;
    background: #ffffff;
    color: var(--rk-temp35-ink);
    transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  }

  #rk-temp35-guide .rk-temp35-flow-step.is-active {
    border-color: #64c7d2;
    box-shadow: 0 12px 28px rgba(14, 119, 135, 0.13);
    transform: translateY(-2px);
  }

  #rk-temp35-guide .rk-temp35-flow-step.is-rest {
    background: #f7f9fa;
  }

  #rk-temp35-guide .rk-temp35-flow-top {
    display: flex;
    gap: 13px;
    align-items: center;
    margin-bottom: 14px;
  }

  #rk-temp35-guide .rk-temp35-flow-icon {
    display: grid;
    flex: 0 0 52px;
    place-items: center;
    width: 52px;
    height: 52px;
    border-radius: 16px;
    background: #e6f7f9;
    color: #087083;
  }

  #rk-temp35-guide .rk-temp35-flow-icon svg {
    width: 29px;
    height: 29px;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.8;
  }

  #rk-temp35-guide .rk-temp35-flow-number {
    display: block;
    color: var(--rk-temp35-orange);
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-temp35-guide .rk-temp35-flow-step h4 {
    margin: 2px 0 0;
    color: var(--rk-temp35-navy);
    font-size: 1rem;
    line-height: 1.25;
  }

  #rk-temp35-guide .rk-temp35-flow-value {
    display: inline-flex;
    align-items: center;
    min-height: 31px;
    margin-bottom: 10px;
    padding: 5px 11px;
    border-radius: 999px;
    background: #dff6e9;
    color: #176a4e;
    font-size: 0.77rem;
    font-weight: 900;
    line-height: 1.2;
  }

  #rk-temp35-guide .rk-temp35-flow-value.is-off {
    background: #eef1f3;
    color: #5c6e79;
  }

  #rk-temp35-guide .rk-temp35-flow-value.is-closed {
    background: #fde7e6;
    color: #9c3936;
  }

  #rk-temp35-guide .rk-temp35-flow-copy {
    margin: 0;
    color: #405b6c;
    font-size: 0.87rem;
    line-height: 1.6;
  }

  #rk-temp35-guide .rk-temp35-tool-disclaimer {
    margin: 22px 0 0;
    padding: 17px 19px;
    border: 1px solid #efd0a1;
    border-radius: 15px;
    background: #fff6e9;
    color: #5f4a2c;
    font-size: 0.86rem;
    line-height: 1.6;
  }

  #rk-temp35-guide .rk-temp35-compare-table,
  #rk-temp35-guide .rk-temp35-diagnostic-table {
    overflow: hidden;
    margin: 24px 0;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 20px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-table-row {
    display: grid;
    grid-template-columns: minmax(150px, 0.8fr) repeat(2, minmax(0, 1fr));
    border-top: 1px solid var(--rk-temp35-line);
  }

  #rk-temp35-guide .rk-temp35-table-row:first-child {
    border-top: 0;
  }

  #rk-temp35-guide .rk-temp35-table-row > div {
    min-width: 0;
    padding: 18px 20px;
    border-left: 1px solid var(--rk-temp35-line);
    color: #3b5667;
    font-size: 0.89rem;
    line-height: 1.58;
  }

  #rk-temp35-guide .rk-temp35-table-row > div:first-child {
    border-left: 0;
  }

  #rk-temp35-guide .rk-temp35-table-head {
    background: var(--rk-temp35-navy);
  }

  #rk-temp35-guide .rk-temp35-table-head > div {
    color: #ffffff;
    font-weight: 850;
  }

  #rk-temp35-guide .rk-temp35-table-label {
    background: #f2f6f8;
    color: var(--rk-temp35-navy) !important;
    font-weight: 850;
  }

  #rk-temp35-guide .rk-temp35-diagnostic-table .rk-temp35-table-row {
    grid-template-columns: minmax(180px, 0.8fr) minmax(0, 1fr) minmax(0, 1.15fr);
  }

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

  #rk-temp35-guide .rk-temp35-spec {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 14px;
    align-items: start;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 17px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-spec-mark {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: #daf4f7;
    color: #0b7180;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-spec strong {
    display: block;
    margin-bottom: 4px;
    color: var(--rk-temp35-navy);
    font-size: 0.94rem;
  }

  #rk-temp35-guide .rk-temp35-spec span {
    display: block;
    color: #4b6474;
    font-size: 0.84rem;
    line-height: 1.55;
  }

  #rk-temp35-guide .rk-temp35-chain {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
    align-items: stretch;
    margin: 26px 0;
  }

  #rk-temp35-guide .rk-temp35-chain-item {
    position: relative;
    min-width: 0;
    padding: 19px 15px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 17px;
    background: #ffffff;
    color: var(--rk-temp35-ink);
    text-align: center;
  }

  #rk-temp35-guide .rk-temp35-chain-item::after {
    content: "→";
    position: absolute;
    top: 50%;
    right: -15px;
    z-index: 2;
    width: 18px;
    color: var(--rk-temp35-orange);
    font-size: 1.15rem;
    font-weight: 900;
    line-height: 1;
    transform: translateY(-50%);
  }

  #rk-temp35-guide .rk-temp35-chain-item:last-child::after {
    display: none;
  }

  #rk-temp35-guide .rk-temp35-chain-item strong {
    display: block;
    color: var(--rk-temp35-navy);
    font-size: 0.9rem;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-chain-item span {
    display: block;
    margin-top: 5px;
    color: #56707f;
    font-size: 0.75rem;
    line-height: 1.45;
  }

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

  #rk-temp35-guide .rk-temp35-step {
    position: relative;
    min-width: 0;
    padding: 21px 21px 21px 67px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 19px;
    background: #ffffff;
    color: var(--rk-temp35-ink);
    counter-increment: rk-temp35-step;
  }

  #rk-temp35-guide .rk-temp35-step::before {
    content: counter(rk-temp35-step);
    position: absolute;
    top: 20px;
    left: 20px;
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--rk-temp35-navy);
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-step h3 {
    margin: 0 0 7px;
    color: var(--rk-temp35-navy);
    font-size: 1rem;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-step p {
    margin: 0;
    color: #435e6f;
    font-size: 0.88rem;
    line-height: 1.6;
  }

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

  #rk-temp35-guide .rk-temp35-mistake {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 13px;
    min-width: 0;
    padding: 19px;
    border: 1px solid #ead4d2;
    border-radius: 17px;
    background: #fff7f6;
  }

  #rk-temp35-guide .rk-temp35-mistake-icon {
    display: grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-temp35-red);
    color: #ffffff;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-mistake strong {
    color: #7e302e;
    font-size: 0.94rem;
  }

  #rk-temp35-guide .rk-temp35-mistake p {
    margin: 4px 0 0;
    color: #5f4d4c;
    font-size: 0.85rem;
    line-height: 1.55;
  }

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

  #rk-temp35-guide .rk-temp35-checklist-item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 13px;
    align-items: start;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 17px;
    background: #ffffff;
    color: #425d6e;
    font-size: 0.86rem;
    line-height: 1.55;
  }

  #rk-temp35-guide .rk-temp35-checklist-item > span {
    display: grid;
    place-items: center;
    width: 31px;
    height: 31px;
    border-radius: 50%;
    background: #dff6e9;
    color: var(--rk-temp35-green);
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-checklist-item strong {
    color: var(--rk-temp35-navy);
    font-size: 0.92rem;
  }

  #rk-temp35-guide .rk-temp35-formula {
    display: grid;
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
    gap: 18px;
    align-items: stretch;
    margin: 24px 0;
  }

  #rk-temp35-guide .rk-temp35-formula-box {
    display: grid;
    place-items: center;
    min-height: 170px;
    padding: 24px;
    border-radius: 20px;
    background: var(--rk-temp35-navy);
    color: #ffffff;
    text-align: center;
  }

  #rk-temp35-guide .rk-temp35-formula-box strong {
    display: block;
    color: var(--rk-temp35-cyan);
    font-size: clamp(1.35rem, 3vw, 2rem);
    line-height: 1.25;
  }

  #rk-temp35-guide .rk-temp35-formula-box span {
    display: block;
    margin-top: 8px;
    color: #dcecf2;
    font-size: 0.82rem;
  }

  #rk-temp35-guide .rk-temp35-formula-copy {
    padding: 23px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 20px;
    background: #ffffff;
    color: #3f596a;
  }

  #rk-temp35-guide .rk-temp35-formula-copy h3 {
    margin: 0 0 9px;
    color: var(--rk-temp35-navy);
    font-size: 1.08rem;
  }

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

  #rk-temp35-guide .rk-temp35-cta {
    margin: 32px 0 0;
    padding: clamp(27px, 4vw, 42px);
    border-radius: 24px;
    background:
      radial-gradient(circle at 100% 110%, rgba(95, 222, 240, 0.14) 0 130px, transparent 131px),
      linear-gradient(125deg, var(--rk-temp35-navy), #0b5761);
    color: #ffffff;
    box-shadow: 0 18px 45px rgba(11, 45, 62, 0.18);
  }

  #rk-temp35-guide .rk-temp35-cta-title {
    max-width: 930px;
    margin: 0 0 12px;
    color: #ffffff;
    font-size: clamp(1.45rem, 3.2vw, 2.35rem);
    font-weight: 900;
    letter-spacing: -0.03em;
    line-height: 1.16;
  }

  #rk-temp35-guide .rk-temp35-cta p {
    max-width: 980px;
    margin-bottom: 20px;
    color: #e7f3f6;
  }

  #rk-temp35-guide .rk-temp35-cta-button {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    min-height: 52px;
    padding: 12px 20px;
    border: 2px solid var(--rk-temp35-orange);
    border-radius: 12px;
    background: var(--rk-temp35-orange);
    color: #ffffff !important;
    font-weight: 900;
    line-height: 1.3;
    text-align: center;
    text-decoration: none !important;
    box-shadow: 0 10px 22px rgba(255, 122, 33, 0.22);
  }

  #rk-temp35-guide .rk-temp35-cta-button:hover {
    border-color: #ff9652;
    background: #ff9652;
    color: #ffffff !important;
  }

  #rk-temp35-guide .rk-temp35-link-disclosure {
    display: block;
    margin-top: 13px;
    color: #cfe1e6;
    font-size: 0.72rem;
    line-height: 1.45;
  }

  #rk-temp35-guide .rk-temp35-source-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    margin-top: 24px;
  }

  #rk-temp35-guide .rk-temp35-source-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 18px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-source-card a {
    display: inline-block;
    color: var(--rk-temp35-navy);
    font-size: 0.93rem;
    font-weight: 900;
    line-height: 1.45;
  }

  #rk-temp35-guide .rk-temp35-source-card p {
    margin: 8px 0 0;
    color: #516a79;
    font-size: 0.83rem;
    line-height: 1.55;
  }

  #rk-temp35-guide .rk-temp35-responsibility {
    margin-top: 20px;
    padding: 21px;
    border: 1px solid #d7e1e7;
    border-radius: 18px;
    background: #ffffff;
    color: #405a6b;
    font-size: 0.87rem;
    line-height: 1.62;
  }

  #rk-temp35-guide .rk-temp35-responsibility p:last-child {
    margin-bottom: 0;
  }

  #rk-temp35-guide .rk-temp35-faq details {
    overflow: hidden;
    margin: 12px 0;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 16px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-faq summary {
    position: relative;
    padding: 18px 52px 18px 20px;
    color: var(--rk-temp35-navy);
    font-size: 0.96rem;
    font-weight: 850;
    line-height: 1.45;
    cursor: pointer;
    list-style: none;
  }

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

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

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

  #rk-temp35-guide .rk-temp35-faq-answer {
    padding: 0 20px 18px;
    color: #415c6d;
    font-size: 0.9rem;
    line-height: 1.65;
  }

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

  #rk-temp35-guide .rk-temp35-author {
    background:
      radial-gradient(circle at 98% 100%, rgba(95, 222, 240, 0.12) 0 150px, transparent 151px),
      linear-gradient(130deg, #102d40, #113f4e);
    color: #eaf4f7;
  }

  #rk-temp35-guide .rk-temp35-author .rk-temp35-eyebrow {
    color: #ff9a57;
  }

  #rk-temp35-guide .rk-temp35-author-title {
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-author-layout {
    display: grid;
    grid-template-columns: minmax(210px, 0.34fr) minmax(0, 1fr);
    gap: 28px;
    align-items: start;
    margin-top: 25px;
  }

  #rk-temp35-guide .rk-temp35-author-side {
    padding: 22px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 20px;
    background: rgba(255, 255, 255, 0.07);
    text-align: center;
  }

  #rk-temp35-guide .rk-temp35-author-photo {
    width: 150px;
    height: 150px;
    margin: 0 auto 16px;
    overflow: hidden;
    border: 4px solid rgba(255, 255, 255, 0.24);
    border-radius: 50%;
    background: #ffffff;
  }

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

  #rk-temp35-guide .rk-temp35-author-name a {
    color: #ffffff;
    font-size: 1.12rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-author-role {
    margin: 7px 0 13px;
    color: #dbeaf0;
    font-size: 0.82rem;
    line-height: 1.5;
  }

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

  #rk-temp35-guide .rk-temp35-author-social a {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 0.8rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-temp35-guide .rk-temp35-author-main p {
    color: #dcecf1;
    font-size: 0.92rem;
  }

  #rk-temp35-guide .rk-temp35-author-main a {
    color: var(--rk-temp35-cyan);
  }

  #rk-temp35-guide .rk-temp35-author-quote {
    margin-bottom: 21px;
    padding: 22px;
    border-left: 5px solid var(--rk-temp35-cyan);
    border-radius: 7px 17px 17px 7px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 1.03rem;
    font-weight: 750;
    line-height: 1.6;
  }

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

  #rk-temp35-guide .rk-temp35-author-fact {
    min-width: 0;
    padding: 15px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-radius: 15px;
    background: rgba(255, 255, 255, 0.06);
    color: #d7e8ed;
    font-size: 0.75rem;
    line-height: 1.45;
  }

  #rk-temp35-guide .rk-temp35-author-fact strong {
    display: block;
    margin-bottom: 4px;
    color: #ffffff;
    font-size: 0.8rem;
  }

  #rk-temp35-guide .rk-temp35-tool-tabs,
  #rk-temp35-guide .rk-temp35-graphic-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin: 0 0 22px;
  }

  #rk-temp35-guide .rk-temp35-tool-tabs button,
  #rk-temp35-guide .rk-temp35-graphic-controls button {
    min-height: 44px;
    padding: 9px 15px;
    border: 1px solid #bdd0d8;
    border-radius: 999px;
    background: #ffffff;
    color: var(--rk-temp35-navy);
    font: inherit;
    font-size: 0.8rem;
    font-weight: 850;
    line-height: 1.25;
    cursor: pointer;
  }

  #rk-temp35-guide .rk-temp35-tool-tabs button[aria-selected="true"],
  #rk-temp35-guide .rk-temp35-graphic-controls button[aria-pressed="true"] {
    border-color: var(--rk-temp35-navy);
    background: var(--rk-temp35-navy);
    color: #ffffff;
    box-shadow: 0 8px 20px rgba(18, 50, 71, 0.18);
  }

  #rk-temp35-guide .rk-temp35-panel[hidden],
  #rk-temp35-guide .rk-temp35-is-hidden {
    display: none !important;
  }

  #rk-temp35-guide .rk-temp35-field-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 18px 0;
  }

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

  #rk-temp35-guide .rk-temp35-field {
    min-width: 0;
    padding: 16px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 16px;
    background: var(--rk-temp35-soft);
  }

  #rk-temp35-guide .rk-temp35-field label,
  #rk-temp35-guide .rk-temp35-field-label {
    display: block;
    margin: 0 0 7px;
    color: var(--rk-temp35-navy);
    font-size: 0.79rem;
    font-weight: 900;
    line-height: 1.4;
  }

  #rk-temp35-guide .rk-temp35-field input,
  #rk-temp35-guide .rk-temp35-field select,
  #rk-temp35-guide .rk-temp35-loop-row input,
  #rk-temp35-guide .rk-temp35-curve-row input {
    width: 100%;
    min-height: 47px;
    margin: 0;
    padding: 10px 12px;
    border: 1px solid #b9cbd4;
    border-radius: 11px;
    background: #ffffff;
    color: #173246;
    font: inherit;
    font-size: 0.91rem;
    line-height: 1.2;
  }

  #rk-temp35-guide .rk-temp35-field input:focus,
  #rk-temp35-guide .rk-temp35-field select:focus,
  #rk-temp35-guide .rk-temp35-loop-row input:focus,
  #rk-temp35-guide .rk-temp35-curve-row input:focus {
    outline: 3px solid rgba(95, 222, 240, 0.34);
    border-color: var(--rk-temp35-teal);
  }

  #rk-temp35-guide .rk-temp35-field-help {
    display: block;
    margin-top: 7px;
    color: #5c7180;
    font-size: 0.7rem;
    line-height: 1.45;
  }

  #rk-temp35-guide .rk-temp35-tool-subtitle {
    margin: 26px 0 10px;
    color: var(--rk-temp35-navy);
    font-size: 1.12rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-loop-editor,
  #rk-temp35-guide .rk-temp35-curve-editor {
    margin: 18px 0;
    padding: 18px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 18px;
    background: var(--rk-temp35-soft);
  }

  #rk-temp35-guide .rk-temp35-loop-row,
  #rk-temp35-guide .rk-temp35-curve-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(120px, 0.46fr) auto;
    gap: 9px;
    align-items: end;
    margin-top: 10px;
  }

  #rk-temp35-guide .rk-temp35-curve-row {
    grid-template-columns: 42px repeat(2, minmax(110px, 1fr));
  }

  #rk-temp35-guide .rk-temp35-loop-row:first-child,
  #rk-temp35-guide .rk-temp35-curve-row:first-child {
    margin-top: 0;
  }

  #rk-temp35-guide .rk-temp35-loop-cell label,
  #rk-temp35-guide .rk-temp35-curve-cell label {
    display: block;
    margin-bottom: 5px;
    color: #496371;
    font-size: 0.68rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-remove-loop,
  #rk-temp35-guide .rk-temp35-add-loop {
    min-height: 45px;
    padding: 9px 13px;
    border: 1px solid #c7d5dc;
    border-radius: 11px;
    background: #ffffff;
    color: var(--rk-temp35-navy);
    font: inherit;
    font-size: 0.77rem;
    font-weight: 850;
    cursor: pointer;
  }

  #rk-temp35-guide .rk-temp35-remove-loop {
    width: 45px;
    padding: 8px;
    color: #9b3b38;
  }

  #rk-temp35-guide .rk-temp35-add-loop {
    margin-top: 13px;
    border-color: #86cdd5;
    background: #eaf9fb;
    color: #075f6b;
  }

  #rk-temp35-guide .rk-temp35-calc-layout {
    display: grid;
    grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
    gap: 20px;
    align-items: start;
  }

  #rk-temp35-guide .rk-temp35-results {
    min-width: 0;
  }

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

  #rk-temp35-guide .rk-temp35-result {
    min-width: 0;
    padding: 17px;
    border: 1px solid #b8dce1;
    border-radius: 16px;
    background: #effbfc;
  }

  #rk-temp35-guide .rk-temp35-result span {
    display: block;
    color: #4c6876;
    font-size: 0.7rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-result strong {
    display: block;
    margin-top: 4px;
    color: var(--rk-temp35-navy);
    font-size: clamp(1.2rem, 2.5vw, 1.7rem);
    line-height: 1.2;
  }

  #rk-temp35-guide .rk-temp35-breakdown {
    padding: 18px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 17px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-breakdown-title {
    display: block;
    margin-bottom: 12px;
    color: var(--rk-temp35-navy);
    font-size: 0.86rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-break-row {
    display: grid;
    grid-template-columns: minmax(104px, 0.62fr) minmax(0, 1fr) auto;
    gap: 10px;
    align-items: center;
    margin: 9px 0;
    color: #496371;
    font-size: 0.73rem;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-break-row strong,
  #rk-temp35-guide .rk-temp35-curve-row > strong {
    color: var(--rk-temp35-navy);
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-callout strong {
    color: var(--rk-temp35-navy);
  }

  #rk-temp35-guide .rk-temp35-break-track {
    height: 9px;
    overflow: hidden;
    border-radius: 999px;
    background: #e8eef1;
  }

  #rk-temp35-guide .rk-temp35-break-fill {
    display: block;
    width: 0;
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, var(--rk-temp35-teal), var(--rk-temp35-cyan));
  }

  #rk-temp35-guide .rk-temp35-chart-card {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 18px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-chart-title {
    margin: 0 0 11px;
    color: var(--rk-temp35-navy);
    font-size: 0.95rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-chart-wrap {
    width: 100%;
    min-width: 0;
    overflow: hidden;
    border-radius: 13px;
    background: #f8fbfc;
  }

  #rk-temp35-guide .rk-temp35-chart-wrap svg {
    display: block;
    width: 100%;
    height: auto;
    min-height: 310px;
  }

  #rk-temp35-guide .rk-temp35-chart-grid-line {
    stroke: #dbe5ea;
    stroke-width: 1;
  }

  #rk-temp35-guide .rk-temp35-chart-axis {
    stroke: #6f8592;
    stroke-width: 1.4;
  }

  #rk-temp35-guide .rk-temp35-system-path {
    fill: none;
    stroke: var(--rk-temp35-teal);
    stroke-width: 4;
  }

  #rk-temp35-guide .rk-temp35-device-path {
    fill: none;
    stroke: var(--rk-temp35-orange);
    stroke-width: 4;
  }

  #rk-temp35-guide .rk-temp35-design-point {
    fill: var(--rk-temp35-navy);
    stroke: #ffffff;
    stroke-width: 4;
  }

  #rk-temp35-guide .rk-temp35-operating-point {
    fill: var(--rk-temp35-orange);
    stroke: #ffffff;
    stroke-width: 4;
  }

  #rk-temp35-guide .rk-temp35-chart-tick,
  #rk-temp35-guide .rk-temp35-chart-label {
    fill: #55707f;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
  }

  #rk-temp35-guide .rk-temp35-chart-label {
    fill: var(--rk-temp35-navy);
    font-size: 13px;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 15px;
    margin-top: 12px;
    color: #536d7b;
    font-size: 0.69rem;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-legend span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
  }

  #rk-temp35-guide .rk-temp35-legend i {
    display: inline-block;
    width: 25px;
    height: 4px;
    border-radius: 999px;
    background: var(--rk-temp35-teal);
  }

  #rk-temp35-guide .rk-temp35-legend .is-pump i {
    background: var(--rk-temp35-orange);
  }

  #rk-temp35-guide .rk-temp35-legend .is-point i {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--rk-temp35-navy);
  }

  #rk-temp35-guide .rk-temp35-status {
    margin: 15px 0 0;
    padding: 15px 17px;
    border: 1px solid #b8dce1;
    border-radius: 14px;
    background: #effbfc;
    color: #315261;
    font-size: 0.79rem;
    line-height: 1.55;
  }

  #rk-temp35-guide .rk-temp35-status.is-warning {
    border-color: #efd0a1;
    background: #fff6e9;
    color: #664d2b;
  }

  #rk-temp35-guide .rk-temp35-status.is-bad {
    border-color: #e6c2c0;
    background: #fff2f1;
    color: #743b38;
  }

  #rk-temp35-guide .rk-temp35-status.is-good {
    border-color: #b8ddce;
    background: #eefaf5;
    color: #245d48;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin-top: 18px;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 18px;
    background: #ffffff;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card.is-active {
    border-color: #5fc6d1;
    box-shadow: 0 12px 28px rgba(14, 119, 135, 0.13);
    transform: translateY(-2px);
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card.is-muted {
    opacity: 0.58;
    background: #f3f6f7;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-number {
    display: inline-grid;
    place-items: center;
    width: 34px;
    height: 34px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: #ddf6f8;
    color: #086878;
    font-size: 0.78rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card h3 {
    margin: 0 0 8px;
    color: var(--rk-temp35-navy);
    font-size: 1rem;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-value {
    display: inline-flex;
    min-height: 29px;
    align-items: center;
    margin: 0 0 9px;
    padding: 5px 10px;
    border-radius: 999px;
    background: #eef4f6;
    color: #3f5e6d;
    font-size: 0.71rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card.is-active .rk-temp35-hydraulic-value {
    background: #dff6e9;
    color: #21664e;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card p {
    margin: 0;
    color: #466171;
    font-size: 0.82rem;
    line-height: 1.58;
  }

  #rk-temp35-guide .rk-temp35-graphic-result {
    margin-top: 16px;
    padding: 20px;
    border-left: 5px solid var(--rk-temp35-cyan);
    border-radius: 8px 16px 16px 8px;
    background: var(--rk-temp35-navy);
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-graphic-result strong {
    display: block;
    margin-bottom: 5px;
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-graphic-result p {
    margin: 0;
    color: #e8f5f8;
    font-size: 0.87rem;
  }

  #rk-temp35-guide .rk-temp35-equation {
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
  }

  #rk-temp35-guide .rk-temp35-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

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

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

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

    #rk-temp35-guide .rk-temp35-chain-item::after {
      display: none;
    }

    #rk-temp35-guide .rk-temp35-calc-layout {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 820px) {
    #rk-temp35-guide {
      font-size: 17px;
    }

    #rk-temp35-guide .rk-temp35-hero {
      border-radius: 24px;
    }

    #rk-temp35-guide .rk-temp35-hero-metrics,
    #rk-temp35-guide .rk-temp35-grid-3,
    #rk-temp35-guide .rk-temp35-source-grid,
    #rk-temp35-guide .rk-temp35-author-facts {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-control-grid,
    #rk-temp35-guide .rk-temp35-formula,
    #rk-temp35-guide .rk-temp35-author-layout {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-author-side {
      max-width: 430px;
    }

    #rk-temp35-guide .rk-temp35-field-grid-3,
    #rk-temp35-guide .rk-temp35-hydraulic-grid {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 700px) {
    #rk-temp35-guide .rk-temp35-section,
    #rk-temp35-guide .rk-temp35-author {
      border-radius: 22px;
    }

    #rk-temp35-guide .rk-temp35-grid-2,
    #rk-temp35-guide .rk-temp35-grid-4,
    #rk-temp35-guide .rk-temp35-flow-grid,
    #rk-temp35-guide .rk-temp35-spec-grid,
    #rk-temp35-guide .rk-temp35-steps,
    #rk-temp35-guide .rk-temp35-mistakes,
    #rk-temp35-guide .rk-temp35-checklist,
    #rk-temp35-guide .rk-temp35-chain {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-field-grid,
    #rk-temp35-guide .rk-temp35-result-grid {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-table-row,
    #rk-temp35-guide .rk-temp35-diagnostic-table .rk-temp35-table-row {
      display: block;
      padding: 8px 0;
      border-top: 8px solid var(--rk-temp35-soft);
    }

    #rk-temp35-guide .rk-temp35-table-row:first-child {
      display: none;
    }

    #rk-temp35-guide .rk-temp35-table-row > div {
      display: grid;
      grid-template-columns: minmax(104px, 0.42fr) minmax(0, 1fr);
      gap: 10px;
      padding: 12px 15px;
      border: 0;
    }

    #rk-temp35-guide .rk-temp35-table-row > div::before {
      content: attr(data-label);
      color: var(--rk-temp35-navy);
      font-size: 0.76rem;
      font-weight: 900;
      line-height: 1.45;
    }

    #rk-temp35-guide .rk-temp35-table-label {
      background: #eef4f6;
    }

    #rk-temp35-guide .rk-temp35-loop-row {
      grid-template-columns: minmax(0, 1fr) minmax(100px, 0.6fr) auto;
    }
  }

  @media (max-width: 520px) {
    #rk-temp35-guide {
      font-size: 16px;
    }

    #rk-temp35-guide .rk-temp35-hero {
      padding: 34px 22px;
      border-radius: 20px;
    }

    #rk-temp35-guide .rk-temp35-hero-title {
      font-size: clamp(2.25rem, 12vw, 3.5rem);
      letter-spacing: -0.05em;
    }

    #rk-temp35-guide .rk-temp35-hero-lead {
      margin-top: 23px;
    }

    #rk-temp35-guide .rk-temp35-hero-tag {
      min-height: 38px;
      padding: 7px 12px;
      font-size: 0.75rem;
    }

    #rk-temp35-guide .rk-temp35-byline {
      display: grid;
      gap: 7px;
    }

    #rk-temp35-guide .rk-temp35-hero-metric {
      padding: 19px;
    }

    #rk-temp35-guide .rk-temp35-shortcuts {
      padding: 17px;
      border-radius: 18px;
    }

    #rk-temp35-guide .rk-temp35-shortcuts a {
      font-size: 0.72rem;
    }

    #rk-temp35-guide .rk-temp35-section,
    #rk-temp35-guide .rk-temp35-author {
      padding: 28px 19px;
    }

    #rk-temp35-guide .rk-temp35-answer,
    #rk-temp35-guide .rk-temp35-card,
    #rk-temp35-guide .rk-temp35-flow-step {
      padding: 20px;
    }

    #rk-temp35-guide .rk-temp35-tool-head,
    #rk-temp35-guide .rk-temp35-tool-body {
      padding: 22px 17px;
    }

    #rk-temp35-guide .rk-temp35-segmented {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-state-summary {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-state-dot {
      width: 44px;
      height: 44px;
    }

    #rk-temp35-guide .rk-temp35-step {
      padding: 66px 19px 19px;
    }

    #rk-temp35-guide .rk-temp35-step::before {
      top: 19px;
      left: 19px;
    }

    #rk-temp35-guide .rk-temp35-cta-button {
      width: 100%;
    }

    #rk-temp35-guide .rk-temp35-table-row > div {
      grid-template-columns: 1fr;
      gap: 4px;
    }

    #rk-temp35-guide .rk-temp35-loop-row,
    #rk-temp35-guide .rk-temp35-curve-row {
      grid-template-columns: 1fr;
      padding: 13px;
      border: 1px solid var(--rk-temp35-line);
      border-radius: 14px;
      background: #ffffff;
    }

    #rk-temp35-guide .rk-temp35-remove-loop {
      width: 100%;
    }

    #rk-temp35-guide .rk-temp35-chart-wrap svg {
      min-height: 260px;
    }

    #rk-temp35-guide .rk-temp35-break-row {
      grid-template-columns: 1fr auto;
    }

    #rk-temp35-guide .rk-temp35-break-track {
      grid-column: 1 / -1;
      grid-row: 2;
    }
  }

  @media print {
    #rk-temp35-guide .rk-temp35-shortcuts,
    #rk-temp35-guide .rk-temp35-control-grid {
      display: none !important;
    }

    #rk-temp35-guide .rk-temp35-section,
    #rk-temp35-guide .rk-temp35-author,
    #rk-temp35-guide .rk-temp35-hero {
      break-inside: avoid;
      box-shadow: none;
    }

    #rk-temp35-guide .rk-temp35-faq details {
      break-inside: avoid;
    }

    #rk-temp35-guide .rk-temp35-faq details:not([open]) .rk-temp35-faq-answer {
      display: block;
    }
  }

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

  #rk-temp35-guide .rk-temp35-field input.rk-temp35-range {
    width: 100%;
    min-height: 10px;
    height: 10px;
    padding: 0;
    border: 0;
    border-radius: 999px;
    background: #dce8ed;
    accent-color: var(--rk-temp35-orange);
    cursor: pointer;
  }

  #rk-temp35-guide .rk-temp35-field input.rk-temp35-range:focus {
    outline: 3px solid rgba(95, 222, 240, 0.34);
    outline-offset: 5px;
  }

  #rk-temp35-guide .rk-temp35-control-label {
    display: block;
    margin: 22px 0 10px;
    color: var(--rk-temp35-navy);
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-limit-line {
    stroke: #ad6f13;
    stroke-width: 2;
    stroke-dasharray: 7 6;
  }

  #rk-temp35-guide .rk-temp35-limit-label {
    fill: #8a5914;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-current-guide {
    stroke: #8da0aa;
    stroke-width: 1.5;
    stroke-dasharray: 3 5;
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-card {
    border-color: #cbd9e1;
    background: #ffffff;
    color: #173246;
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-card h3 {
    color: #123247;
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-card p,
  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-card li {
    color: #3e5869;
  }

  #rk-temp35-guide .rk-temp35-section-dark .rk-temp35-card a {
    color: #087a9f;
  }

  #rk-temp35-guide button:focus-visible,
  #rk-temp35-guide a:focus-visible,
  #rk-temp35-guide summary:focus-visible {
    outline: 3px solid var(--rk-temp35-cyan);
    outline-offset: 3px;
  }

  @media (max-width: 520px) {
    #rk-temp35-guide .rk-temp35-chart-card {
      padding: 12px;
    }

    #rk-temp35-guide .rk-temp35-chart-wrap svg {
      min-height: 235px;
    }

    #rk-temp35-guide .rk-temp35-graphic-controls button {
      width: 100%;
    }
  }



  #rk-temp35-guide .rk-temp35-equation-box {
    margin: 20px 0;
    padding: clamp(20px, 3vw, 30px);
    border: 1px solid #add6dc;
    border-radius: 20px;
    background: linear-gradient(135deg, #f0fbfc 0%, #ffffff 100%);
    box-shadow: 0 12px 30px rgba(13, 73, 88, 0.08);
  }

  #rk-temp35-guide .rk-temp35-equation-label {
    display: block;
    margin-bottom: 8px;
    color: #087083;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-temp35-guide .rk-temp35-equation-main {
    margin-bottom: 10px;
    color: var(--rk-temp35-navy);
    font-size: clamp(1.18rem, 3vw, 1.78rem);
    font-weight: 950;
    line-height: 1.25;
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
  }

  #rk-temp35-guide .rk-temp35-equation-box p {
    margin: 0;
    color: #3f5b69;
  }

  #rk-temp35-guide .rk-temp35-chart-bar {
    fill: var(--rk-temp35-teal);
    stroke: transparent;
    stroke-width: 0;
    transition: opacity 0.18s ease, fill 0.18s ease;
  }

  #rk-temp35-guide .rk-temp35-chart-bar:hover,
  #rk-temp35-guide .rk-temp35-chart-bar:focus {
    opacity: 0.78;
    outline: none;
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-selected {
    fill: var(--rk-temp35-orange);
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-over {
    fill: var(--rk-temp35-red);
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-selected.is-over {
    fill: var(--rk-temp35-red);
    stroke: var(--rk-temp35-orange);
    stroke-width: 4;
  }

  #rk-temp35-guide .rk-temp35-chart-target-line {
    stroke: #9b6512;
    stroke-width: 2;
    stroke-dasharray: 8 6;
  }

  #rk-temp35-guide .rk-temp35-chart-target-label {
    fill: #81540e;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-chart-value {
    fill: #294b5c;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-chart-axis-title {
    fill: #476474;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-legend .is-danger i {
    background: var(--rk-temp35-red);
  }

  @media (max-width: 620px) {
    #rk-temp35-guide .rk-temp35-equation-main {
      font-size: 1.08rem;
    }

    #rk-temp35-guide .rk-temp35-chart-value,
    #rk-temp35-guide .rk-temp35-chart-target-label,
    #rk-temp35-guide .rk-temp35-chart-axis-title {
      font-size: 10px;
    }
  }



  #rk-temp35-guide .rk-temp35-circuit-editor {
    display: grid;
    gap: 11px;
    margin: 22px 0 12px;
  }

  #rk-temp35-guide .rk-temp35-circuit-row {
    display: grid;
    grid-template-columns: minmax(135px, 1.2fr) minmax(105px, 0.8fr) minmax(135px, 0.9fr) minmax(112px, 0.7fr) 42px;
    gap: 10px;
    align-items: end;
    padding: 12px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 15px;
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-circuit-cell label,
  #rk-temp35-guide .rk-temp35-circuit-flow span {
    display: block;
    margin-bottom: 6px;
    color: #496674;
    font-size: 0.72rem;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-circuit-cell input {
    width: 100%;
    min-height: 44px;
    margin: 0;
    padding: 9px 10px;
    border: 1px solid #b9ccd5;
    border-radius: 10px;
    background: #ffffff;
    color: var(--rk-temp35-navy);
    font: inherit;
    font-weight: 750;
    line-height: 1.25;
  }

  #rk-temp35-guide .rk-temp35-circuit-cell input:focus {
    border-color: var(--rk-temp35-teal);
    outline: 3px solid rgba(15, 137, 151, 0.18);
  }

  #rk-temp35-guide .rk-temp35-circuit-flow {
    min-height: 44px;
    padding: 7px 9px;
    border-radius: 10px;
    background: #eef8fa;
  }

  #rk-temp35-guide .rk-temp35-circuit-flow span {
    margin-bottom: 2px;
  }

  #rk-temp35-guide .rk-temp35-circuit-flow strong {
    display: block;
    color: var(--rk-temp35-navy);
    font-size: 0.94rem;
    font-variant-numeric: tabular-nums;
  }

  #rk-temp35-guide .rk-temp35-add-loop:disabled {
    cursor: not-allowed;
    opacity: 0.56;
  }

  #rk-temp35-guide .rk-temp35-chart-common {
    fill: #80cbd3;
  }

  #rk-temp35-guide .rk-temp35-chart-branch {
    fill: var(--rk-temp35-teal);
  }

  #rk-temp35-guide .rk-temp35-chart-critical-outline {
    fill: none;
    stroke: var(--rk-temp35-orange);
    stroke-width: 4;
  }

  #rk-temp35-guide .rk-temp35-chart-grid {
    stroke: #dbe5e9;
    stroke-width: 1;
  }

  #rk-temp35-guide .rk-temp35-chart-tick,
  #rk-temp35-guide .rk-temp35-chart-name,
  #rk-temp35-guide .rk-temp35-chart-index,
  #rk-temp35-guide .rk-temp35-chart-value,
  #rk-temp35-guide .rk-temp35-chart-axis-title {
    fill: #3f5d6c;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-chart-value {
    fill: var(--rk-temp35-navy);
    font-size: 12px;
    font-weight: 950;
  }

  #rk-temp35-guide .rk-temp35-chart-index {
    fill: #6e8490;
    font-size: 9px;
  }

  #rk-temp35-guide .rk-temp35-legend .is-common i {
    background: #80cbd3;
  }

  #rk-temp35-guide .rk-temp35-legend .is-pump i {
    border: 3px solid var(--rk-temp35-orange);
    background: transparent;
  }

  #rk-temp35-guide .rk-temp35-state-controls {
    margin-bottom: 18px;
  }

  @media (max-width: 900px) {
    #rk-temp35-guide .rk-temp35-circuit-row {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-temp35-guide .rk-temp35-circuit-flow {
      align-self: end;
    }

    #rk-temp35-guide .rk-temp35-remove-loop {
      width: 100%;
      grid-column: 1 / -1;
    }
  }

  @media (max-width: 560px) {
    #rk-temp35-guide .rk-temp35-circuit-row {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-chart-tick,
    #rk-temp35-guide .rk-temp35-chart-name,
    #rk-temp35-guide .rk-temp35-chart-value,
    #rk-temp35-guide .rk-temp35-chart-axis-title {
      font-size: 9px;
    }
  }



  #rk-temp35-guide .rk-temp35-segmented button[aria-selected="true"] {
    border-color: var(--rk-temp35-navy);
    background: var(--rk-temp35-navy);
    color: #ffffff;
    box-shadow: 0 8px 18px rgba(18, 50, 71, 0.18);
  }

  #rk-temp35-guide .rk-temp35-field-grid-single {
    grid-template-columns: minmax(0, 1fr);
  }

  #rk-temp35-guide .rk-temp35-calc-summary {
    margin: 22px 0;
    padding: 18px;
    border: 1px solid #b9e3e8;
    border-radius: 18px;
    background: #f0fbfc;
  }

  #rk-temp35-guide .rk-temp35-calc-summary .rk-temp35-result-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-bottom: 13px;
  }

  #rk-temp35-guide .rk-temp35-calc-summary .rk-temp35-result {
    background: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-calc-summary .rk-temp35-result strong {
    font-size: clamp(1.05rem, 2.1vw, 1.42rem);
  }

  #rk-temp35-guide .rk-temp35-calc-summary .rk-temp35-equation {
    margin: 0;
    color: #365665;
    font-size: 0.78rem;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-pipe-results {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 20px 0;
  }

  #rk-temp35-guide .rk-temp35-pipe-result {
    min-width: 0;
    padding: 19px;
    border: 1px solid var(--rk-temp35-line);
    border-radius: 18px;
    background: #ffffff;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
  }

  #rk-temp35-guide .rk-temp35-pipe-result.is-selected {
    border-color: var(--rk-temp35-orange);
    box-shadow: 0 12px 28px rgba(245, 112, 32, 0.13);
    transform: translateY(-2px);
  }

  #rk-temp35-guide .rk-temp35-pipe-result-head {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 7px 14px;
    align-items: baseline;
    margin-bottom: 13px;
    color: var(--rk-temp35-navy);
  }

  #rk-temp35-guide .rk-temp35-pipe-result-head span {
    font-size: 1.05rem;
    font-weight: 950;
  }

  #rk-temp35-guide .rk-temp35-pipe-result-head strong {
    color: #54707e;
    font-size: 0.74rem;
  }

  #rk-temp35-guide .rk-temp35-pipe-metrics {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  #rk-temp35-guide .rk-temp35-pipe-metrics > div {
    min-width: 0;
    padding: 11px;
    border-radius: 11px;
    background: #f2f7f8;
  }

  #rk-temp35-guide .rk-temp35-pipe-metrics span,
  #rk-temp35-guide .rk-temp35-pipe-metrics strong {
    display: block;
  }

  #rk-temp35-guide .rk-temp35-pipe-metrics span {
    color: #5b7380;
    font-size: 0.65rem;
    font-weight: 800;
    line-height: 1.35;
  }

  #rk-temp35-guide .rk-temp35-pipe-metrics strong {
    margin-top: 3px;
    color: var(--rk-temp35-navy);
    font-size: 0.87rem;
    font-variant-numeric: tabular-nums;
    line-height: 1.3;
  }

  #rk-temp35-guide .rk-temp35-pipe-status {
    margin: 12px 0;
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 0.72rem;
    font-weight: 800;
    line-height: 1.45;
  }

  #rk-temp35-guide .rk-temp35-pipe-status.is-within {
    background: #eaf8f1;
    color: #245e49;
  }

  #rk-temp35-guide .rk-temp35-pipe-status.is-over {
    background: #fff2e8;
    color: #7b421d;
  }

  #rk-temp35-guide .rk-temp35-pipe-result button {
    width: 100%;
    min-height: 44px;
    padding: 9px 12px;
    border: 1px solid #bcd0d8;
    border-radius: 11px;
    background: #ffffff;
    color: var(--rk-temp35-navy);
    font: inherit;
    font-size: 0.74rem;
    font-weight: 850;
    line-height: 1.3;
    cursor: pointer;
  }

  #rk-temp35-guide .rk-temp35-pipe-result button[aria-pressed="true"] {
    border-color: var(--rk-temp35-navy);
    background: var(--rk-temp35-navy);
    color: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-series-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 7px 13px;
    margin: 0 0 12px;
  }

  #rk-temp35-guide .rk-temp35-series-controls button {
    display: inline-flex;
    min-height: 40px;
    align-items: center;
    gap: 7px;
    padding: 7px 10px;
    border: 1px solid transparent;
    border-radius: 9px;
    background: transparent;
    color: #425f6e;
    font: inherit;
    font-size: 0.72rem;
    font-weight: 850;
    cursor: pointer;
  }

  #rk-temp35-guide .rk-temp35-series-controls button[aria-pressed="false"] {
    opacity: 0.45;
    text-decoration: line-through;
  }

  #rk-temp35-guide .rk-temp35-series-controls i {
    display: inline-block;
    width: 24px;
    height: 4px;
    border-radius: 999px;
  }

  #rk-temp35-guide .rk-temp35-series-controls .is-p16,
  #rk-temp35-guide .rk-temp35-chart-curve.is-p16,
  #rk-temp35-guide .rk-temp35-chart-point.is-p16 {
    stroke: #e96a28;
    background: #e96a28;
    fill: #e96a28;
  }

  #rk-temp35-guide .rk-temp35-series-controls .is-p17,
  #rk-temp35-guide .rk-temp35-chart-curve.is-p17,
  #rk-temp35-guide .rk-temp35-chart-point.is-p17 {
    stroke: #087f91;
    background: #087f91;
    fill: #087f91;
  }

  #rk-temp35-guide .rk-temp35-series-controls .is-p20,
  #rk-temp35-guide .rk-temp35-chart-curve.is-p20,
  #rk-temp35-guide .rk-temp35-chart-point.is-p20 {
    stroke: #315aa6;
    background: #315aa6;
    fill: #315aa6;
  }

  #rk-temp35-guide .rk-temp35-series-controls .is-custom,
  #rk-temp35-guide .rk-temp35-chart-curve.is-custom,
  #rk-temp35-guide .rk-temp35-chart-point.is-custom {
    stroke: #7a4ea3;
    background: #7a4ea3;
    fill: #7a4ea3;
  }

  #rk-temp35-guide .rk-temp35-chart-grid line {
    stroke: #dbe5e9;
    stroke-width: 1;
  }

  #rk-temp35-guide .rk-temp35-chart-grid text,
  #rk-temp35-guide .rk-temp35-chart-axis-title,
  #rk-temp35-guide .rk-temp35-chart-criterion-label {
    fill: #506d7b;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 750;
  }

  #rk-temp35-guide .rk-temp35-chart-axis-title {
    fill: var(--rk-temp35-navy);
    font-size: 12px;
    font-weight: 900;
  }

  #rk-temp35-guide .rk-temp35-chart-frame {
    fill: none;
    stroke: #91a8b2;
    stroke-width: 1.2;
  }

  #rk-temp35-guide .rk-temp35-chart-curve {
    stroke-width: 2.4;
    stroke-linecap: round;
    stroke-linejoin: round;
  }

  #rk-temp35-guide .rk-temp35-chart-curve.is-selected {
    stroke-width: 4.5;
  }

  #rk-temp35-guide .rk-temp35-chart-guide {
    stroke: var(--rk-temp35-navy);
    stroke-width: 1.5;
    stroke-dasharray: 6 5;
  }

  #rk-temp35-guide .rk-temp35-chart-point {
    stroke-width: 2;
    stroke: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-chart-point.is-selected {
    stroke: var(--rk-temp35-navy);
    stroke-width: 3;
  }

  #rk-temp35-guide .rk-temp35-chart-criterion {
    stroke: #ac5a24;
    stroke-width: 1.5;
    stroke-dasharray: 3 4;
  }

  #rk-temp35-guide .rk-temp35-chart-criterion-label {
    fill: #7b4a29;
  }

  #rk-temp35-guide .rk-temp35-chart-reading {
    margin-top: 12px;
    padding: 13px 15px;
    border-left: 4px solid var(--rk-temp35-cyan);
    border-radius: 7px 12px 12px 7px;
    background: #edf8fa;
    color: #345463;
    font-size: 0.75rem;
    line-height: 1.5;
  }

  #rk-temp35-guide .rk-temp35-chart-reading strong {
    color: var(--rk-temp35-navy);
  }

  @media (max-width: 900px) {
    #rk-temp35-guide .rk-temp35-calc-summary .rk-temp35-result-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 700px) {
    #rk-temp35-guide .rk-temp35-pipe-results {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 460px) {
    #rk-temp35-guide .rk-temp35-calc-summary .rk-temp35-result-grid,
    #rk-temp35-guide .rk-temp35-pipe-metrics {
      grid-template-columns: 1fr;
    }

    #rk-temp35-guide .rk-temp35-chart-grid text,
    #rk-temp35-guide .rk-temp35-chart-axis-title {
      font-size: 10px;
    }
  }


  /* Dodatkowe style modułów temperatury zasilania */
  #rk-temp35-guide .rk-temp35-result-grid-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

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

  #rk-temp35-guide .rk-temp35-chart-card {
    margin-top: 24px;
  }

  #rk-temp35-guide .rk-temp35-chart-unit {
    fill: #476474;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 14px;
    font-weight: 850;
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-required {
    fill: #123247;
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-available {
    fill: #0e7787;
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-low {
    fill: #248c68;
  }

  #rk-temp35-guide .rk-temp35-chart-bar.is-high {
    fill: #ff7a21;
  }

  #rk-temp35-guide .rk-temp35-chart-value.is-inside {
    fill: #ffffff;
  }

  #rk-temp35-guide .rk-temp35-chart-label {
    font-size: 14px;
  }

  #rk-temp35-guide .rk-temp35-chart-value {
    font-size: 14px;
  }

  #rk-temp35-guide .rk-temp35-chart-reading {
    margin-top: 12px;
    padding: 13px 15px;
    border: 1px solid #cfe0e6;
    border-radius: 12px;
    background: #f5f9fa;
    color: #365665;
    font-size: 0.78rem;
    line-height: 1.55;
  }

  #rk-temp35-guide .rk-temp35-equation {
    margin: 15px 0 0;
    padding: 14px 16px;
    border: 1px solid #d6e3e8;
    border-radius: 13px;
    background: #ffffff;
    color: #365665;
    font-size: 0.78rem;
    font-weight: 800;
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card.is-warning {
    border-color: #e3ad58;
    background: #fff8ed;
    box-shadow: 0 12px 28px rgba(183, 120, 18, 0.12);
    transform: translateY(-2px);
  }

  #rk-temp35-guide .rk-temp35-hydraulic-card.is-warning .rk-temp35-hydraulic-value {
    background: #ffe9c5;
    color: #7a4e0c;
  }

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

  @media (max-width: 1040px) {
    #rk-temp35-guide .rk-temp35-field-grid-4 {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 820px) {
    #rk-temp35-guide .rk-temp35-source-grid {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 700px) {
    #rk-temp35-guide .rk-temp35-result-grid-3,
    #rk-temp35-guide .rk-temp35-field-grid-4 {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 520px) {
    #rk-temp35-guide .rk-temp35-chart-label,
    #rk-temp35-guide .rk-temp35-chart-tick,
    #rk-temp35-guide .rk-temp35-chart-value,
    #rk-temp35-guide .rk-temp35-chart-unit {
      font-size: 12px;
    }
  }
</style>

<article id="rk-temp35-guide" aria-labelledby="rk-temp35-visual-title">
  <div class="rk-temp35-shell">
    <header class="rk-temp35-hero">
      <div class="rk-temp35-hero-inner">
        <span class="rk-temp35-kicker">35°C to punkt projektowy, nie dogmat</span>
        <div class="rk-temp35-hero-title" id="rk-temp35-visual-title">Najniższa temperatura, <span>która pokrywa straty</span></div>
        <p class="rk-temp35-hero-lead">Podłogówka nie potrzebuje z definicji dokładnie 35°C. Prawidłowa temperatura zasilania wynika z obciążenia każdego pomieszczenia, czynnej powierzchni podłogi, jej konstrukcji, okładziny i warunków obliczeniowych. Dla pompy ciepła celem jest możliwie niski parametr, ale bez utraty wymaganej mocy.</p>

        <div class="rk-temp35-hero-tags" aria-label="Zakres poradnika">
          <span class="rk-temp35-hero-tag">parametr 35/30°C</span>
          <span class="rk-temp35-hero-tag">moc podłogi</span>
          <span class="rk-temp35-hero-tag">COP i SCOP</span>
          <span class="rk-temp35-hero-tag">krzywa grzewcza</span>
          <span class="rk-temp35-hero-tag">przepływ i ΔT</span>
        </div>

        <div class="rk-temp35-byline">
          <span>Autor: <strong>Robert Kucharski</strong></span>
          <span>Czas czytania: około 39 minut</span>
          <span>Aktualizacja techniczna: 11 września 2026 r.</span>
        </div>

        <div class="rk-temp35-hero-metrics" aria-label="Trzy etapy wyznaczania temperatury zasilania">
          <div class="rk-temp35-hero-metric">
            <b>OZC wyznacza potrzebną moc</b>
            <span>Najpierw ustala się obciążenie każdego pomieszczenia w warunkach projektowych.</span>
          </div>
          <div class="rk-temp35-hero-metric">
            <b>Podłoga musi ją przekazać</b>
            <span>Liczą się powierzchnia czynna, rozstaw, warstwy, okładzina oraz średnia temperatura wody.</span>
          </div>
          <div class="rk-temp35-hero-metric">
            <b>Pompa pracuje w wynikowym punkcie</b>
            <span>Sprawność zależy od rzeczywistych temperatur, pogody, obciążenia i konkretnego urządzenia.</span>
          </div>
        </div>
      </div>
    </header>

    <nav class="rk-temp35-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-temp35-shortcuts-label">Na skróty — wszystkie H2</span>
      <a href="#rk-temp35-answer">Szybka odpowiedź</a>
      <a href="#rk-temp35-notation">Co oznacza 35/30°C?</a>
      <a href="#rk-temp35-efficiency">Wpływ na sprawność</a>
      <a href="#rk-temp35-not-universal">Dlaczego nie zawsze 35°C?</a>
      <a href="#rk-temp35-factors">Czynniki doboru</a>
      <a href="#rk-temp35-heat-flux">Wymagane W/m²</a>
      <a href="#rk-temp35-calculator">Kalkulator i wykres</a>
      <a href="#rk-temp35-results">Interpretacja</a>
      <a href="#rk-temp35-graphic">Grafika zależności</a>
      <a href="#rk-temp35-spacing">Rozstaw rur</a>
      <a href="#rk-temp35-coverings">Okładziny</a>
      <a href="#rk-temp35-curve">Krzywa grzewcza</a>
      <a href="#rk-temp35-hydraulics">ΔT i przepływ</a>
      <a href="#rk-temp35-architecture">Układ instalacji</a>
      <a href="#rk-temp35-buffer">Bufor i zład</a>
      <a href="#rk-temp35-example">Przykład</a>
      <a href="#rk-temp35-errors">Błędy i mity</a>
      <a href="#rk-temp35-checklist">Lista kontrolna</a>
      <a href="#rk-temp35-conclusions">Wnioski</a>
      <a href="#rk-temp35-references">Źródła</a>
      <a href="#rk-temp35-faq">FAQ</a>
      <a href="#rk-temp35-author">Autor</a>
    </nav>

    <section class="rk-temp35-section" id="rk-temp35-answer">
      <span class="rk-temp35-eyebrow">Odpowiedź w 30 sekund</span>
      <h2 class="rk-temp35-section-title">Czy 35°C zawsze wystarczy do ogrzewania podłogowego?</h2>
      <div class="rk-temp35-answer">
        <span class="rk-temp35-answer-label">Najkrótsza poprawna odpowiedź</span>
        <p><strong>Nie zawsze. Temperatura zasilania 35°C wystarczy wtedy, gdy rzeczywista moc ogrzewania podłogowego przy danej konstrukcji i powierzchni czynnej jest co najmniej równa obciążeniu wszystkich pomieszczeń. W dobrze ocieplonym domu może wystarczyć jeszcze niższa wartość, a w pomieszczeniu o dużych stratach, małej powierzchni czynnej lub opornej okładzinie może być potrzebny wyższy parametr albo zmiana projektu emitera.</strong></p>
      </div>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>32°C może wystarczyć</h3><p>W budynku o małym obciążeniu i dużej powierzchni czynnej podłoga może pokryć straty przy temperaturze niższej niż 35°C.</p></article>
        <article class="rk-temp35-card"><h3>35°C jest częstym założeniem</h3><p>Parametr 35/30°C jest użytecznym punktem obliczeniowym, ale jego skuteczność trzeba potwierdzić dla każdego pomieszczenia.</p></article>
        <article class="rk-temp35-card"><h3>40°C nie oznacza awarii projektu</h3><p>Wyższy parametr może być uzasadniony w trudniejszym budynku. Nadal należy szukać najniższej wartości zapewniającej wymaganą moc.</p></article>
      </div>

      <p>Najważniejsza zasada brzmi: <strong>nie wybieramy temperatury na podstawie samego napisu „pompa ciepła”</strong>. Punktem wyjścia jest <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a>, a następnie zdolność konkretnej podłogi do przekazania tej mocy. Dopiero wtedy ocenia się wymagany parametr źródła.</p>
      <div class="rk-temp35-callout"><strong>35°C nie jest uniwersalnym nakazem normowym.</strong> Normowe metody opisują sposób wyznaczania mocy i wymiarowania ogrzewania płaszczyznowego. Wynik zależy od różnicy temperatur, konstrukcji, geometrii oraz warunków pomieszczenia.</div>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-notation">
      <span class="rk-temp35-eyebrow">Jedna liczba nie opisuje całego obiegu</span>
      <h2 class="rk-temp35-section-title">Co właściwie oznacza parametr 35/30°C?</h2>
      <p class="rk-temp35-lead">Zapis 35/30°C oznacza projektową temperaturę zasilania 35°C i powrotu 30°C. Różnica wynosi 5 K, a średnia temperatura wody — w prostym ujęciu — 32,5°C.</p>

      <div class="rk-temp35-equation-box">
        <span class="rk-temp35-equation-label">Podstawowe zależności</span>
        <div class="rk-temp35-equation-main">ΔT = 35 − 30 = 5 K &nbsp; | &nbsp; θ<sub>m</sub> = (35 + 30) ÷ 2 = 32,5°C</div>
        <p>Do emisji podłogi istotna jest średnia różnica pomiędzy temperaturą czynnika i pomieszczenia, a nie wyłącznie temperatura na króćcu zasilającym.</p>
      </div>

      <div class="rk-temp35-compare-table" role="table" aria-label="Znaczenie temperatur w instalacji ogrzewania podłogowego">
        <div class="rk-temp35-table-row rk-temp35-table-head" role="row"><div role="columnheader">Wielkość</div><div role="columnheader">Co opisuje?</div><div role="columnheader">Dlaczego jest ważna?</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wielkość" role="cell">Zasilanie 35°C</div><div data-label="Opis" role="cell">Temperaturę wody wpływającej do obiegu lub rozdzielacza.</div><div data-label="Znaczenie" role="cell">Wpływa na możliwą moc emitera i punkt pracy pompy ciepła.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wielkość" role="cell">Powrót 30°C</div><div data-label="Opis" role="cell">Temperaturę wody po oddaniu części energii do podłogi.</div><div data-label="Znaczenie" role="cell">Wspólnie z zasilaniem określa średnią temperaturę i projektowe ΔT.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wielkość" role="cell">Podłoga 24–29°C</div><div data-label="Opis" role="cell">Temperaturę powierzchni odczuwaną w pomieszczeniu.</div><div data-label="Znaczenie" role="cell">Nie jest równa temperaturze wody i wynika z przekazywanego strumienia ciepła.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wielkość" role="cell">Powietrze 20–24°C</div><div data-label="Opis" role="cell">Projektową lub regulowaną temperaturę pomieszczenia.</div><div data-label="Znaczenie" role="cell">Zmienia różnicę napędzającą przepływ ciepła z podłogi.</div></div>
      </div>

      <p>Parametr 35/30°C nie gwarantuje automatycznie określonej temperatury posadzki. Zależność opisuje poradnik o <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalnej temperaturze ogrzewania podłogowego</a>. Osobno należy kontrolować również <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalną temperaturę zasilania podłogówki</a>.</p>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-efficiency">
      <span class="rk-temp35-eyebrow">Niższe podnoszenie temperatury zwykle pomaga</span>
      <h2 class="rk-temp35-section-title">Dlaczego niższa temperatura zasilania wspiera sprawność pompy ciepła?</h2>
      <p class="rk-temp35-lead">Pompa ciepła przenosi energię z dolnego źródła do instalacji. Im mniejsza różnica pomiędzy temperaturą źródła i wymaganą temperaturą wody, tym korzystniejsze mogą być warunki pracy sprężarki. Nie istnieje jednak jeden procent poprawy wspólny dla wszystkich urządzeń.</p>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Temperatura dolnego źródła</h3><p>Powietrze zewnętrzne, grunt lub woda zmieniają warunki parowania. Dlatego COP ma sens tylko razem z opisem punktu pomiarowego.</p></article>
        <article class="rk-temp35-card"><h3>Temperatura po stronie instalacji</h3><p>Wyższa temperatura wody zwykle zwiększa wymagane podniesienie temperatury, lecz skala skutku zależy od konstrukcji urządzenia.</p></article>
        <article class="rk-temp35-card"><h3>Obciążenie częściowe</h3><p>Modulacja, odszranianie, praca pomp i przygotowanie CWU wpływają na wynik sezonowy inaczej niż pojedynczy punkt katalogowy.</p></article>
      </div>

      <div class="rk-temp35-grid-2">
        <article class="rk-temp35-card"><h3>COP</h3><p>Opisuje stosunek uzyskanej mocy cieplnej do pobranej mocy elektrycznej w konkretnych warunkach badania lub pracy.</p></article>
        <article class="rk-temp35-card"><h3>SCOP</h3><p>Jest wskaźnikiem sezonowym. Nie powinno się go zastępować pojedynczym COP ani obliczać z samej temperatury zasilania.</p></article>
      </div>

      <p>W praktyce porównujemy dane tego samego modelu w porównywalnych warunkach. Nie przenosimy COP jednej pompy na inne urządzenie i nie wyznaczamy trwałości sprężarki z prostego suwaka temperatury. Ogólny kontekst pracy źródła rozwija poradnik <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła i instalacja ogrzewania podłogowego</a>.</p>
    </section>

    <section class="rk-temp35-section rk-temp35-section-dark" id="rk-temp35-not-universal">
      <span class="rk-temp35-eyebrow">Najpierw moc, potem parametr</span>
      <h2 class="rk-temp35-section-title">Dlaczego 35°C nie jest uniwersalnym optimum?</h2>
      <p class="rk-temp35-lead">Dwa domy z identyczną pompą mogą wymagać innej temperatury. Nawet w jednym budynku łazienka, salon z przeszkleniami i sypialnia mogą mieć zupełnie różne obciążenie przypadające na metr czynnej podłogi.</p>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Za niska temperatura</h3><p>Jeżeli podłoga nie pokrywa strat w warunkach projektowych, pomieszczenie nie osiągnie zadanej temperatury mimo prawidłowego przepływu.</p></article>
        <article class="rk-temp35-card"><h3>Temperatura wystarczająca</h3><p>Emiter pokrywa obciążenie z rozsądną rezerwą, a instalacja zachowuje wymagane warunki powierzchniowe i hydrauliczne.</p></article>
        <article class="rk-temp35-card"><h3>Temperatura niepotrzebnie wysoka</h3><p>Może pogarszać warunki pracy źródła i regulację, choć pomieszczenia nadal będą ogrzane.</p></article>
      </div>

      <p>Właściwy cel to <strong>najniższa krzywa grzewcza zapewniająca bilans wszystkich pomieszczeń</strong>, a nie bezwarunkowe utrzymywanie 35°C przez cały sezon. Czasami wymaga to zagęszczenia rur, zwiększenia powierzchni czynnej, zmiany okładziny, ograniczenia strat budynku albo zastosowania dodatkowego emitera.</p>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-factors">
      <span class="rk-temp35-eyebrow">Osiem danych zamiast jednej liczby</span>
      <h2 class="rk-temp35-section-title">Od czego zależy wymagana temperatura zasilania?</h2>
      <p class="rk-temp35-lead">Temperatura jest wynikiem projektu cieplnego. Nie można jej dobrać poprawnie z powierzchni domu, mocy znamionowej pompy ani samego rozstawu rur.</p>

      <div class="rk-temp35-spec-grid">
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">1</span><div><strong>Obciążenie pomieszczenia</strong><span>Projektowe straty w watach dla temperatury zewnętrznej właściwej lokalizacji.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">2</span><div><strong>Powierzchnia czynna</strong><span>Fragment podłogi rzeczywiście uczestniczący w oddawaniu ciepła.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">3</span><div><strong>Temperatura pomieszczenia</strong><span>Inne warunki projektowe przyjmuje się dla sypialni, salonu i łazienki.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">4</span><div><strong>Rozstaw oraz rura</strong><span>Geometria systemu wpływa na pole charakterystyk cieplnych i hydraulikę.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">5</span><div><strong>Warstwy nad rurą</strong><span>Rodzaj i grubość jastrychu zmieniają przewodzenie oraz bezwładność.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">6</span><div><strong>Okładzina podłogowa</strong><span>Płytki, winyl, panele i drewno mają różny opór cieplny oraz ograniczenia producenta.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">7</span><div><strong>Temperatura i ΔT wody</strong><span>Zasilanie oraz powrót wyznaczają średnią temperaturę czynnika i przepływ.</span></div></div>
        <div class="rk-temp35-spec"><span class="rk-temp35-spec-mark">8</span><div><strong>Warunki źródła</strong><span>Charakterystyka pompy, przepływ minimalny, automatyka i temperatura zewnętrzna.</span></div></div>
      </div>

      <p>Podstawą pozostaje obliczenie dla każdego pomieszczenia. Zobacz, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty ciepła budynku</a> oraz jak powstaje <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>.</p>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-heat-flux">
      <span class="rk-temp35-eyebrow">Wymagana moc przypada na powierzchnię, która naprawdę grzeje</span>
      <h2 class="rk-temp35-section-title">Jak obciążenie i powierzchnia czynna wyznaczają wymagane W/m²?</h2>
      <p class="rk-temp35-lead">Jeżeli pomieszczenie wymaga 1000 W, nie wolno dzielić tej wartości przez cały metraż, gdy część podłogi zajmuje stała zabudowa. Najpierw ustala się powierzchnię aktywną.</p>

      <div class="rk-temp35-equation-box">
        <span class="rk-temp35-equation-label">Wymagana gęstość strumienia ciepła</span>
        <div class="rk-temp35-equation-main">q<sub>wym.</sub> = Q<sub>pom.</sub> ÷ A<sub>czynna</sub></div>
        <p>Dla obciążenia 1000 W i 20 m² czynnej podłogi potrzeba średnio 50 W/m². Jeżeli powierzchnia zmaleje do 16 m², wymaganie wzrośnie do 62,5 W/m².</p>
      </div>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Q pomieszczenia</h3><p>Pochodzi z OZC. Nie dodajemy automatycznego procentowego narzutu bez wskazania jego przyczyny.</p></article>
        <article class="rk-temp35-card"><h3>A czynna</h3><p>Powinna wynikać z rzutu i uzgodnionej zabudowy, a nie z przybliżonego udziału procentowego.</p></article>
        <article class="rk-temp35-card"><h3>q dostępne</h3><p>Odczytuje się z obliczenia lub tabeli konkretnego systemu dla przyjętych temperatur i warstw.</p></article>
      </div>

      <p>Dopiero zestawienie q<sub>wym.</sub> z dostępną mocą podłogi odpowiada na pytanie, czy 35/30°C wystarczy. Znaczenie mebli i powierzchni wyłączonych omawia poradnik <a href="https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/">ogrzewanie podłogowe a meble</a>.</p>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-calculator">
      <span class="rk-temp35-eyebrow">Kalkulator bilansu i porównania sezonowego</span>
      <h2 class="rk-temp35-section-title">Sprawdź parametr 35/30°C i porównaj koszty na podstawie SCOP</h2>
      <p class="rk-temp35-lead">Pierwsza zakładka weryfikuje bilans jednego pomieszczenia. Druga porównuje dwa warianty na podstawie sezonowych współczynników wpisanych z dokumentacji konkretnego urządzenia.</p>

      <div class="rk-temp35-tool" id="rk-temp35-calculator-tool">
        <div class="rk-temp35-tool-head">
          <span class="rk-temp35-eyebrow">Jedno narzędzie, dwa odrębne pytania</span>
          <h3>Weryfikator temperatury i kosztów pracy pompy ciepła</h3>
          <p>Kalkulator nie zgaduje mocy podłogi ani SCOP. Wymaga wprowadzenia danych z projektu, tabel systemu podłogowego i dokumentacji pompy.</p>
        </div>

        <div class="rk-temp35-tool-body">
          <div class="rk-temp35-segmented" role="tablist" aria-label="Wybierz rodzaj obliczenia">
            <button type="button" role="tab" id="rk-temp35-tab-balance" data-rk-temp35-mode="balance" aria-selected="true" aria-controls="rk-temp35-panel-balance">Czy 35/30°C wystarczy?</button>
            <button type="button" role="tab" id="rk-temp35-tab-scop" data-rk-temp35-mode="scop" aria-selected="false" aria-controls="rk-temp35-panel-scop">Porównaj SCOP i koszt</button>
          </div>

          <div class="rk-temp35-panel" id="rk-temp35-panel-balance" role="tabpanel" aria-labelledby="rk-temp35-tab-balance">
            <div class="rk-temp35-field-grid rk-temp35-field-grid-3">
              <div class="rk-temp35-field">
                <label for="rk-temp35-room-load">Obciążenie pomieszczenia</label>
                <input id="rk-temp35-room-load" type="number" min="10" max="20000" step="10" value="1000" inputmode="decimal">
                <span class="rk-temp35-field-help">Projektowa wartość Q w watach.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-active-area">Czynna powierzchnia podłogi</label>
                <input id="rk-temp35-active-area" type="number" min="0.5" max="300" step="0.5" value="20" inputmode="decimal">
                <span class="rk-temp35-field-help">Powierzchnia faktycznie oddająca ciepło w m².</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-table-output">Moc podłogi z tabeli</label>
                <input id="rk-temp35-table-output" type="number" min="1" max="250" step="1" value="50" inputmode="decimal">
                <span class="rk-temp35-field-help">W/m² dla wpisanego parametru i konkretnej konstrukcji.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-supply-temp">Temperatura zasilania</label>
                <input id="rk-temp35-supply-temp" type="number" min="20" max="70" step="0.5" value="35" inputmode="decimal">
                <span class="rk-temp35-field-help">Temperatura projektowa w °C.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-return-temp">Temperatura powrotu</label>
                <input id="rk-temp35-return-temp" type="number" min="15" max="65" step="0.5" value="30" inputmode="decimal">
                <span class="rk-temp35-field-help">Musi być niższa od zasilania.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-room-temp">Temperatura pomieszczenia</label>
                <input id="rk-temp35-room-temp" type="number" min="15" max="28" step="0.5" value="20" inputmode="decimal">
                <span class="rk-temp35-field-help">Do pokazania średniej różnicy temperatur.</span>
              </div>
            </div>

            <div class="rk-temp35-result-grid rk-temp35-result-grid-3">
              <div class="rk-temp35-result"><span>Wymagana moc jednostkowa</span><strong id="rk-temp35-result-required-output">50,0 W/m²</strong></div>
              <div class="rk-temp35-result"><span>Dostępna moc podłogi</span><strong id="rk-temp35-result-available-power">1000 W</strong></div>
              <div class="rk-temp35-result"><span>Bilans mocy</span><strong id="rk-temp35-result-balance">0 W</strong></div>
              <div class="rk-temp35-result"><span>Potrzebna powierzchnia</span><strong id="rk-temp35-result-required-area">20,0 m²</strong></div>
              <div class="rk-temp35-result"><span>Przepływ dla pomieszczenia</span><strong id="rk-temp35-result-flow">2,87 l/min</strong></div>
              <div class="rk-temp35-result"><span>Średnia różnica woda–pokój</span><strong id="rk-temp35-result-medium-delta">12,5 K</strong></div>
            </div>

            <p class="rk-temp35-equation" id="rk-temp35-balance-equation">1000 W ÷ 20 m² = 50,0 W/m²; 50 W/m² × 20 m² = 1000 W.</p>
          </div>

          <div class="rk-temp35-panel" id="rk-temp35-panel-scop" role="tabpanel" aria-labelledby="rk-temp35-tab-scop" hidden="">
            <div class="rk-temp35-field-grid rk-temp35-field-grid-3">
              <div class="rk-temp35-field">
                <label for="rk-temp35-annual-heat">Roczne użyteczne ciepło</label>
                <input id="rk-temp35-annual-heat" type="number" min="100" max="200000" step="100" value="10000" inputmode="decimal">
                <span class="rk-temp35-field-help">Energia dostarczana do budynku w kWh/rok.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-energy-price">Cena energii elektrycznej</label>
                <input id="rk-temp35-energy-price" type="number" min="0.01" max="10" step="0.01" value="1.10" inputmode="decimal">
                <span class="rk-temp35-field-help">Łączny koszt 1 kWh w PLN.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-years">Okres porównania</label>
                <input id="rk-temp35-years" type="number" min="1" max="30" step="1" value="10" inputmode="numeric">
                <span class="rk-temp35-field-help">Bez prognozowania zmian ceny energii.</span>
              </div>
            </div>
            <div class="rk-temp35-field-grid rk-temp35-field-grid-4">
              <div class="rk-temp35-field">
                <label for="rk-temp35-low-temp">Niższa temperatura zasilania</label>
                <input id="rk-temp35-low-temp" type="number" min="20" max="65" step="1" value="35" inputmode="decimal">
                <span class="rk-temp35-field-help">Etykieta wariantu w °C.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-low-scop">SCOP niższego parametru</label>
                <input id="rk-temp35-low-scop" type="number" min="1" max="10" step="0.1" value="4.2" inputmode="decimal">
                <span class="rk-temp35-field-help">Wartość z porównywalnych danych producenta.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-high-temp">Wyższa temperatura zasilania</label>
                <input id="rk-temp35-high-temp" type="number" min="20" max="70" step="1" value="45" inputmode="decimal">
                <span class="rk-temp35-field-help">Etykieta wariantu porównawczego w °C.</span>
              </div>
              <div class="rk-temp35-field">
                <label for="rk-temp35-high-scop">SCOP wyższego parametru</label>
                <input id="rk-temp35-high-scop" type="number" min="1" max="10" step="0.1" value="3.4" inputmode="decimal">
                <span class="rk-temp35-field-help">Nie zastępuj SCOP chwilowym COP.</span>
              </div>
            </div>

            <div class="rk-temp35-result-grid rk-temp35-result-grid-3">
              <div class="rk-temp35-result"><span id="rk-temp35-low-energy-label">Prąd przy 35°C</span><strong id="rk-temp35-result-low-energy">2381 kWh/rok</strong></div>
              <div class="rk-temp35-result"><span id="rk-temp35-high-energy-label">Prąd przy 45°C</span><strong id="rk-temp35-result-high-energy">2941 kWh/rok</strong></div>
              <div class="rk-temp35-result"><span>Różnica zużycia</span><strong id="rk-temp35-result-energy-difference">560 kWh/rok</strong></div>
              <div class="rk-temp35-result"><span id="rk-temp35-low-cost-label">Koszt przy 35°C</span><strong id="rk-temp35-result-low-cost">2619 zł/rok</strong></div>
              <div class="rk-temp35-result"><span id="rk-temp35-high-cost-label">Koszt przy 45°C</span><strong id="rk-temp35-result-high-cost">3235 zł/rok</strong></div>
              <div class="rk-temp35-result"><span>Różnica w całym okresie</span><strong id="rk-temp35-result-period-difference">6162 zł</strong></div>
            </div>

            <p class="rk-temp35-equation" id="rk-temp35-scop-equation">10 000 kWh ÷ 4,2 = 2381 kWh prądu; 10 000 kWh ÷ 3,4 = 2941 kWh prądu.</p>
          </div>

          <div class="rk-temp35-chart-card">
            <div class="rk-temp35-chart-title" id="rk-temp35-chart-visible-title">Bilans mocy pomieszczenia przy wpisanym parametrze</div>
            <div class="rk-temp35-chart-wrap" id="rk-temp35-chart-wrap">
              <svg id="rk-temp35-comparison-chart" viewBox="0 0 760 330" role="img" aria-labelledby="rk-temp35-chart-title-svg rk-temp35-chart-desc">
                <title id="rk-temp35-chart-title-svg">Porównanie wymaganej i dostępnej mocy</title>
                <desc id="rk-temp35-chart-desc">Wykres porównuje projektowe obciążenie pomieszczenia z mocą dostępną z czynnej powierzchni podłogi.</desc>
              </svg>
            </div>
            <div class="rk-temp35-chart-reading" id="rk-temp35-chart-reading" aria-live="polite"><strong>Bilans:</strong> dostępna moc 1000 W odpowiada obciążeniu 1000 W.</div>
          </div>

          <div class="rk-temp35-status is-good" id="rk-temp35-calculator-status" role="status">Dla wpisanych danych podłoga pokrywa projektowe obciążenie bez rezerwy. Zweryfikuj, czy 50 W/m² pochodzi z tabeli odpowiadającej dokładnie parametrowi 35/30°C i konstrukcji podłogi.</div>
          <div class="rk-temp35-tool-disclaimer"><strong>Granice kalkulatora:</strong> narzędzie nie wyznacza mocy podłogi z rozstawu rur, nie oblicza temperatury powierzchni i nie tworzy charakterystyki pompy ciepła. Wartość W/m² oraz SCOP muszą pochodzić z wiarygodnych, porównywalnych danych. Wynik nie zastępuje projektu według właściwych metod obliczeniowych ani dokumentacji producentów.</div>
        </div>
      </div>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-results">
      <span class="rk-temp35-eyebrow">Wynik mówi o bilansie, nie o całym projekcie</span>
      <h2 class="rk-temp35-section-title">Jak interpretować wynik kalkulatora?</h2>
      <p class="rk-temp35-lead">Kalkulator odpowiada na dwa precyzyjne pytania: czy wpisana moc jednostkowa wystarcza dla danego pomieszczenia oraz jak zmienia się rachunek przy dwóch wpisanych wartościach SCOP. Nie wybiera automatycznie temperatury ani urządzenia.</p>

      <div class="rk-temp35-compare-table" role="table" aria-label="Interpretacja bilansu mocy ogrzewania podłogowego">
        <div class="rk-temp35-table-row rk-temp35-table-head" role="row"><div role="columnheader">Wynik</div><div role="columnheader">Co oznacza?</div><div role="columnheader">Co sprawdzić dalej?</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wynik" role="cell">Dodatnia rezerwa</div><div data-label="Znaczenie" role="cell">Wpisana moc podłogi przewyższa obciążenie pomieszczenia.</div><div data-label="Dalsza kontrola" role="cell">Temperaturę powierzchni, dane systemu, hydraulikę oraz pozostałe pomieszczenia.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wynik" role="cell">Bilans bliski zera</div><div data-label="Znaczenie" role="cell">Podłoga pokrywa obciążenie bez istotnej rezerwy dla wpisanych danych.</div><div data-label="Dalsza kontrola" role="cell">Dokładność OZC, powierzchnię czynną i warunki skrajne.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wynik" role="cell">Deficyt mocy</div><div data-label="Znaczenie" role="cell">Przyjęta moc W/m² pomnożona przez powierzchnię jest zbyt mała.</div><div data-label="Dalsza kontrola" role="cell">Możliwość zwiększenia powierzchni, zmiany konstrukcji, rozstawu, parametru lub dodania emitera.</div></div>
      </div>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Nie przenoś wyniku na cały dom</h3><p>Salon może mieć rezerwę, a łazienka lub pomieszczenie z dużymi przeszkleniami — deficyt. Sprawdza się każde pomieszczenie.</p></article>
        <article class="rk-temp35-card"><h3>Nie mieszaj COP ze SCOP</h3><p>Chwilowy COP nie służy bezpośrednio do prognozy rocznego zużycia. Kalkulator kosztów wymaga sezonowych danych.</p></article>
        <article class="rk-temp35-card"><h3>Nie traktuj W/m² jako stałej</h3><p>Moc z tabeli musi odpowiadać temperaturze, rozstawowi, konstrukcji, okładzinie i warunkom pomieszczenia.</p></article>
      </div>

      <div class="rk-temp35-cta">
        <div class="rk-temp35-cta-title">35°C wystarcza tylko wtedy, gdy wynika to z bilansu pomieszczeń</div>
        <p>Kalkulator sprawdza jeden warunek dla wpisanych danych. W kompletnym projekcie trzeba połączyć OZC każdego pomieszczenia, powierzchnie czynne, warstwy podłogi, rozstaw rur, parametr 35/30°C, długości pętli, przepływy oraz punkt pracy pompy obiegowej. Dopiero wtedy wiadomo, gdzie niska temperatura rzeczywiście wystarczy.</p>
        <a class="rk-temp35-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki do pompy ciepła</a>
        <small class="rk-temp35-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-graphic">
      <span class="rk-temp35-eyebrow">Interaktywna grafika edukacyjna</span>
      <h2 class="rk-temp35-section-title">Jak budynek i podłoga prowadzą do temperatury pracy pompy?</h2>
      <p class="rk-temp35-lead">Wybierz zmianę. Sześć modułów pokaże jej kierunek oddziaływania — od warunków budynku do wymaganego parametru i pracy źródła.</p>

      <div class="rk-temp35-tool" id="rk-temp35-dependency-tool">
        <div class="rk-temp35-tool-head">
          <span class="rk-temp35-eyebrow">Łańcuch cieplny od pogody do sprężarki</span>
          <h3>Sprawdź, co naprawdę zmienia wymagane zasilanie</h3>
          <p>Grafika pokazuje kierunek zmian przy pozostałych warunkach niezmienionych. Nie przypisuje uniwersalnych wartości temperatury ani sprawności.</p>
        </div>
        <div class="rk-temp35-tool-body">
          <div class="rk-temp35-graphic-controls" role="group" aria-label="Wybierz analizowaną zmianę">
            <button type="button" data-rk-temp35-scenario="insulation" aria-pressed="true">Mniejsze straty budynku</button>
            <button type="button" data-rk-temp35-scenario="area" aria-pressed="false">Mniej czynnej podłogi</button>
            <button type="button" data-rk-temp35-scenario="covering" aria-pressed="false">Większy opór okładziny</button>
            <button type="button" data-rk-temp35-scenario="spacing" aria-pressed="false">Gęstszy rozstaw rur</button>
          </div>

          <div class="rk-temp35-hydraulic-grid" aria-live="polite">
            <article class="rk-temp35-hydraulic-card is-muted" data-rk-temp35-component="weather"><span class="rk-temp35-hydraulic-number">1</span><h3>Warunki zewnętrzne</h3><span class="rk-temp35-hydraulic-value" data-rk-temp35-component-value="">Bez zmian</span><p data-rk-temp35-component-copy="">Temperatura obliczeniowa lokalizacji pozostaje taka sama.</p></article>
            <article class="rk-temp35-hydraulic-card is-active" data-rk-temp35-component="load"><span class="rk-temp35-hydraulic-number">2</span><h3>Obciążenie pomieszczenia</h3><span class="rk-temp35-hydraulic-value" data-rk-temp35-component-value="">Maleje</span><p data-rk-temp35-component-copy="">Lepsza izolacyjność ogranicza moc potrzebną do utrzymania temperatury.</p></article>
            <article class="rk-temp35-hydraulic-card is-muted" data-rk-temp35-component="area"><span class="rk-temp35-hydraulic-number">3</span><h3>Powierzchnia czynna</h3><span class="rk-temp35-hydraulic-value" data-rk-temp35-component-value="">Bez zmian</span><p data-rk-temp35-component-copy="">Dostępny obszar grzewczy nie zmienia się.</p></article>
            <article class="rk-temp35-hydraulic-card is-active" data-rk-temp35-component="emission"><span class="rk-temp35-hydraulic-number">4</span><h3>Wymagane W/m²</h3><span class="rk-temp35-hydraulic-value" data-rk-temp35-component-value="">Maleją</span><p data-rk-temp35-component-copy="">Ta sama podłoga musi przekazać mniej energii na każdy metr kwadratowy.</p></article>
            <article class="rk-temp35-hydraulic-card is-active" data-rk-temp35-component="water"><span class="rk-temp35-hydraulic-number">5</span><h3>Temperatura wody</h3><span class="rk-temp35-hydraulic-value" data-rk-temp35-component-value="">Może być niższa</span><p data-rk-temp35-component-copy="">Do uzyskania mniejszej mocy może wystarczyć niższa średnia temperatura czynnika.</p></article>
            <article class="rk-temp35-hydraulic-card is-active" data-rk-temp35-component="pump"><span class="rk-temp35-hydraulic-number">6</span><h3>Pompa ciepła</h3><span class="rk-temp35-hydraulic-value" data-rk-temp35-component-value="">Korzystniejszy punkt</span><p data-rk-temp35-component-copy="">Mniejszy wymagany poziom temperatury może poprawić warunki pracy urządzenia.</p></article>
          </div>

          <div class="rk-temp35-graphic-result" id="rk-temp35-scenario-result" role="status" aria-live="polite"><strong>Mniejsze straty budynku otwierają drogę do niższej temperatury.</strong><p>Obciążenie na metr czynnej powierzchni maleje. Nie oznacza to automatycznie konkretnej wartości — trzeba ponownie odczytać moc systemu dla jego konstrukcji.</p></div>
          <div class="rk-temp35-tool-disclaimer"><strong>Granica grafiki:</strong> moduł nie liczy mocy i nie zastępuje OZC ani tabel systemu. Pokazuje, który element łańcucha się zmienia i dlaczego temperatura zasilania jest wynikiem, a nie punktem wyjścia.</div>
        </div>
      </div>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-spacing">
      <span class="rk-temp35-eyebrow">10 cm nie jest jedynym poprawnym rozstawem</span>
      <h2 class="rk-temp35-section-title">Jak temperatura zasilania wiąże się z rozstawem rur?</h2>
      <p class="rk-temp35-lead">Mniejszy rozstaw może zwiększyć zdolność przekazywania ciepła przy tej samej średniej temperaturze wody i poprawić równomierność powierzchni. Nie oznacza jednak, że każdy dom z pompą ciepła wymaga rur co 10 cm.</p>

      <div class="rk-temp35-compare-table" role="table" aria-label="Znaczenie rozstawu rur dla temperatury zasilania">
        <div class="rk-temp35-table-row rk-temp35-table-head" role="row"><div role="columnheader">Rozstaw</div><div role="columnheader">Możliwa rola</div><div role="columnheader">Warunek zastosowania</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Rozstaw" role="cell">10 cm</div><div data-label="Rola" role="cell">Większa długość rury na m² i zwykle korzystniejsze pole charakterystyk cieplnych.</div><div data-label="Warunek" role="cell">Musi wynikać z mocy, hydrauliki, długości pętli oraz wykonalności.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Rozstaw" role="cell">15 cm</div><div data-label="Rola" role="cell">Częsty kompromis w pomieszczeniach o umiarkowanym obciążeniu.</div><div data-label="Warunek" role="cell">Podłoga musi pokrywać obliczone W/m² przy przyjętych temperaturach.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Rozstaw" role="cell">20 cm</div><div data-label="Rola" role="cell">Może być wystarczający w strefach o małym zapotrzebowaniu albo odpowiedniej konstrukcji.</div><div data-label="Warunek" role="cell">Nie wolno go zatwierdzić wyłącznie na podstawie oszczędności rury.</div></div>
      </div>

      <p>Rozstaw dobiera się z obliczeń, a nie z rodzaju źródła. Więcej przykładów zawiera poradnik <a href="https://projekt-ogrzewania.pl/rozstaw-rur-ogrzewania-podlogowego-przy-pompie-ciepla/">rozstaw rur przy pompie ciepła</a> oraz analiza, <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/">jak gęsto rozkładać podłogówkę</a>.</p>
      <div class="rk-temp35-note"><strong>Gęściej nie znaczy automatycznie lepiej.</strong> Większa długość rury wpływa na liczbę pętli, opory, objętość wody, rozdzielacz i koszt. Korzyść cieplną trzeba połączyć z poprawnym projektem hydraulicznym.</div>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-coverings">
      <span class="rk-temp35-eyebrow">Temperatura wody nie omija oporu warstw</span>
      <h2 class="rk-temp35-section-title">Jak płytki, panele i drewno zmieniają wymagany parametr?</h2>
      <p class="rk-temp35-lead">Okładzina o większym oporze cieplnym ogranicza strumień przekazywany do pomieszczenia przy tej samej temperaturze wody. Projekt musi jednocześnie respektować dopuszczalne warunki pracy wykończenia podane przez jego producenta.</p>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Płytki ceramiczne</h3><p>Zwykle mają korzystne przewodzenie i ułatwiają uzyskanie wymaganej mocy przy niższej temperaturze, ale znaczenie ma cały układ kleju i jastrychu.</p></article>
        <article class="rk-temp35-card"><h3>Panele i winyl</h3><p>Należy sprawdzić łączny opór panelu oraz podkładu, dopuszczenie do ogrzewania podłogowego i maksymalną temperaturę powierzchni.</p></article>
        <article class="rk-temp35-card"><h3>Drewno</h3><p>Liczą się gatunek, budowa warstwowa, grubość, stabilność wymiarowa, wilgotność oraz wymagania producenta podłogi i chemii.</p></article>
      </div>

      <p>Nie można zagwarantować określonej temperatury powierzchni ani wilgotności drewna wyłącznie przez ustawienie 35°C. Zobacz, <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">jak okładzina wpływa na wydajność podłogówki</a>, oraz porównanie <a href="https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/">gatunków drewna na ogrzewanie podłogowe</a>.</p>
    </section>

    <section class="rk-temp35-section rk-temp35-section-dark" id="rk-temp35-curve">
      <span class="rk-temp35-eyebrow">Przez większość sezonu potrzebna jest niższa temperatura niż projektowa</span>
      <h2 class="rk-temp35-section-title">Co zmienia krzywa grzewcza?</h2>
      <p class="rk-temp35-lead">Jeżeli 35°C jest wymagane przy obliczeniowej temperaturze zewnętrznej, nie oznacza to stałego zasilania 35°C jesienią, wiosną i podczas łagodnej zimy. Automatyka pogodowa powinna dopasowywać parametr do bieżącego obciążenia.</p>

      <div class="rk-temp35-chain" aria-label="Zależność działania krzywej grzewczej">
        <div class="rk-temp35-chain-item"><strong>Pogoda</strong><span>zmienia straty</span></div>
        <div class="rk-temp35-chain-item"><strong>Obciążenie</strong><span>zmienia potrzebną moc</span></div>
        <div class="rk-temp35-chain-item"><strong>Krzywa</strong><span>wyznacza zasilanie</span></div>
        <div class="rk-temp35-chain-item"><strong>Podłoga</strong><span>oddaje energię</span></div>
        <div class="rk-temp35-chain-item"><strong>Korekta</strong><span>stabilizuje komfort</span></div>
      </div>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Nachylenie</h3><p>Określa, jak mocno temperatura wody ma wzrastać wraz ze spadkiem temperatury zewnętrznej.</p></article>
        <article class="rk-temp35-card"><h3>Przesunięcie</h3><p>Koryguje cały poziom krzywej bez automatycznego zmieniania wszystkich pozostałych elementów projektu.</p></article>
        <article class="rk-temp35-card"><h3>Weryfikacja</h3><p>Nastawy dopracowuje się na stabilnie pracującej instalacji, małymi zmianami i z uwzględnieniem bezwładności podłogi.</p></article>
      </div>

      <p>Nie istnieje uniwersalne nachylenie 0,2 albo 0,3 dla każdego budynku. Mechanizm oraz sposób regulacji opisuje poradnik <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywa grzewcza w ogrzewaniu podłogowym</a>.</p>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-hydraulics">
      <span class="rk-temp35-eyebrow">Niska temperatura nie oznacza automatycznie „potężnego przepływu”</span>
      <h2 class="rk-temp35-section-title">Jak temperatura, ΔT i przepływ łączą się hydraulicznie?</h2>
      <p class="rk-temp35-lead">Dla zadanej mocy przepływ zależy przede wszystkim od projektowej różnicy temperatur pomiędzy zasilaniem i powrotem oraz właściwości czynnika. Sama wartość 35°C nie wyznacza strumienia.</p>

      <div class="rk-temp35-equation-box">
        <span class="rk-temp35-equation-label">Przybliżenie dla wody</span>
        <div class="rk-temp35-equation-main">V̇ [l/h] ≈ 0,86 × Q [W] ÷ ΔT [K]</div>
        <p>Dla mocy 1000 W i ΔT = 5 K przepływ wynosi około 172 l/h, czyli 2,87 l/min. Jeżeli tę moc przenoszą dwie pętle, przepływ rozdziela się zgodnie z ich udziałem.</p>
      </div>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Mniejsze ΔT</h3><p>Przy tej samej mocy wymaga większego przepływu, co może podnieść prędkość i opór instalacji.</p></article>
        <article class="rk-temp35-card"><h3>Większe ΔT</h3><p>Zmniejsza wymagany przepływ, ale wpływa na średnią temperaturę wody i rozkład temperatury wzdłuż pętli.</p></article>
        <article class="rk-temp35-card"><h3>Podział na pętle</h3><p>Zmienia przepływ oraz opór pojedynczej gałęzi, choć suma energii potrzebnej w pomieszczeniu pozostaje taka sama.</p></article>
      </div>

      <p>ΔT nie powinno być wybierane jedynie z etykiety źródła. Zależność rozwija materiał o <a href="https://projekt-ogrzewania.pl/spadek-temperatury-%ce%b4t-roznica-miedzy-temperatura-zasilania-a-powrotu/">różnicy temperatur zasilania i powrotu</a>. Opory warto później sprawdzić w poradnikach o <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">średnicach rur podłogówki</a> i <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">doborze pompy obiegowej</a>.</p>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-architecture">
      <span class="rk-temp35-eyebrow">Jedna temperatura nie opisuje całej instalacji</span>
      <h2 class="rk-temp35-section-title">Układ bezpośredni, mieszacz czy dwa poziomy temperatury?</h2>
      <p class="rk-temp35-lead">Sposób wytworzenia 35°C zależy od architektury instalacji. Inaczej pracuje pompa ciepła zasilająca wyłącznie podłogówkę, a inaczej system mieszany z grzejnikami, kilkoma obiegami lub elementem separującym hydraulicznie.</p>

      <div class="rk-temp35-compare-table" role="table" aria-label="Porównanie architektury instalacji niskotemperaturowej">
        <div class="rk-temp35-table-row rk-temp35-table-head" role="row"><div role="columnheader">Wariant</div><div role="columnheader">Kiedy ma sens?</div><div role="columnheader">Co trzeba zweryfikować?</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Układ bezpośredni</div><div data-label="Zastosowanie" role="cell">Jednorodny obieg niskotemperaturowy, w którym źródło podaje parametr wymagany przez podłogę.</div><div data-label="Weryfikacja" role="cell">Minimalny przepływ i zład źródła, zakres modulacji, regulację pogodową oraz pracę po zamknięciu stref.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Układ z mieszaniem</div><div data-label="Zastosowanie" role="cell">Wspólne źródło obsługuje obiegi wymagające różnych temperatur albo podłoga musi otrzymać parametr niższy od obiegu pierwotnego.</div><div data-label="Weryfikacja" role="cell">Autorytet zaworu, temperatury obu stron, pompę obiegu, sterowanie i wpływ mieszania na pracę źródła.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Separacja hydrauliczna</div><div data-label="Zastosowanie" role="cell">Kilka obiegów ma różne przepływy albo producent źródła wymaga stabilnych warunków po stronie pierwotnej.</div><div data-label="Weryfikacja" role="cell">Czy separacja jest rzeczywiście potrzebna, ile pomp wymaga układ i jakie straty oraz konsekwencje regulacyjne wprowadza.</div></div>
      </div>

      <p>Sam mieszacz nie naprawi zbyt małej powierzchni grzewczej, a sprzęgło nie zastąpi obliczeń. Zobacz, jak działa <a href="https://projekt-ogrzewania.pl/obieg-grzewczy-w-wodnym-ogrzewaniu-podlogowym/">obieg grzewczy podłogówki</a>, kiedy stosuje się <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/">zawór mieszający</a> oraz jak połączyć <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-mozna-podlaczyc-do-grzejnikow/">ogrzewanie podłogowe z grzejnikami</a>.</p>
      <div class="rk-temp35-callout"><strong>Najprostszy poprawny układ jest zwykle najłatwiejszy do regulacji.</strong> Liczba pomp, zaworów i elementów separujących powinna wynikać z funkcji hydraulicznej, a nie z automatycznego schematu przypisanego do pompy ciepła.</div>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-buffer">
      <span class="rk-temp35-eyebrow">35°C nie odpowiada na pytanie o objętość i minimalny przepływ</span>
      <h2 class="rk-temp35-section-title">Czy niska temperatura zasilania eliminuje potrzebę bufora?</h2>
      <p class="rk-temp35-lead">Nie. O potrzebie, funkcji i wielkości bufora decydują wymagania konkretnego źródła oraz zachowanie całego układu: minimalny zład, minimalny przepływ, modulacja, odszranianie, liczba zamykanych stref, separacja hydrauliczna i sposób sterowania.</p>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Bufor jako zwiększenie zładu</h3><p>Może pomagać spełnić wymaganie minimalnej objętości wody lub ograniczyć niekorzystne skutki krótkich cykli, jeżeli wynika to z danych urządzenia.</p></article>
        <article class="rk-temp35-card"><h3>Bufor jako separacja</h3><p>Może rozdzielać obiegi o różnych przepływach, ale zmienia hydraulikę, liczbę pomp i sposób regulacji temperatury.</p></article>
        <article class="rk-temp35-card"><h3>Instalacja bez bufora</h3><p>Może być poprawna, gdy układ bezpośredni zapewnia wymagany zład, przepływ, odbiór mocy i warunki pracy w każdym stanie regulacji.</p></article>
      </div>

      <p>Gęstszy rozstaw zwiększa długość rur i ilość wody, lecz nie daje automatycznie wszystkich funkcji bufora. Osobno trzeba przeanalizować <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła w ogrzewaniu podłogowym</a> oraz wpływ <a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">sterowania strefowego</a> na minimalny czynny obieg.</p>
      <div class="rk-temp35-warning"><strong>Nie usuwaj bufora tylko dlatego, że projekt pracuje na 35°C.</strong> Najpierw sprawdź dokumentację pompy ciepła i policz aktywny zład oraz przepływ przy najbardziej ograniczonym stanie pracy instalacji.</div>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-example">
      <span class="rk-temp35-eyebrow">Przejrzysty przykład bez udawania tabeli systemowej</span>
      <h2 class="rk-temp35-section-title">Przykład: czy 35/30°C wystarczy w salonie?</h2>
      <p class="rk-temp35-lead">Załóżmy projektowe obciążenie salonu 1150 W, powierzchnię brutto 28 m² oraz 6 m² trwałej zabudowy. Czynna podłoga ma więc 22 m², a wymaganie wynosi 52,3 W/m². Przyjmijmy wyłącznie do porównania, że sprawdzona tabela konkretnego systemu podaje 48 W/m² dla 35/30°C.</p>

      <div class="rk-temp35-compare-table" role="table" aria-label="Przykład bilansu mocy salonu dla parametru 35 na 30 stopni Celsjusza">
        <div class="rk-temp35-table-row rk-temp35-table-head" role="row"><div role="columnheader">Wariant</div><div role="columnheader">Obliczenie</div><div role="columnheader">Wniosek</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Bazowy: 22 m² i 48 W/m²</div><div data-label="Obliczenie" role="cell">Dostępna moc 1056 W; deficyt 94 W.</div><div data-label="Wniosek" role="cell">Dla założeń przykładu 35/30°C nie wystarcza.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Większa powierzchnia: 24 m²</div><div data-label="Obliczenie" role="cell">24 × 48 = 1152 W; rezerwa 2 W.</div><div data-label="Wniosek" role="cell">Bilans się domyka, jeżeli dodatkowe 2 m² rzeczywiście mogą grzać.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Wyższa moc systemu: 53 W/m²</div><div data-label="Obliczenie" role="cell">22 × 53 = 1166 W; rezerwa 16 W.</div><div data-label="Wniosek" role="cell">Może pomóc inna konstrukcja lub geometria, ale wartość musi pochodzić z weryfikacji.</div></div>
        <div class="rk-temp35-table-row" role="row"><div class="rk-temp35-table-label" data-label="Wariant" role="cell">Dodatkowy emiter</div><div data-label="Obliczenie" role="cell">Podłoga pozostaje przy 1056 W, a emiter pokrywa co najmniej brakujące 94 W.</div><div data-label="Wniosek" role="cell">Pozwala zachować niski parametr, jeżeli oba emitery są do niego dobrane.</div></div>
      </div>

      <p>Dla mocy 1150 W i ΔT = 5 K wymagany przepływ dla salonu wynosi około 198 l/h, czyli 3,30 l/min. Przy dwóch równomiernie obciążonych pętlach byłoby to orientacyjnie po 1,65 l/min, lecz rzeczywiste nastawy wynikają z przypisanej mocy każdej pętli i jej hydrauliki.</p>
      <div class="rk-temp35-note"><strong>To przykład metody, nie uniwersalna charakterystyka podłogi.</strong> Wartość 48 W/m² została przyjęta hipotetycznie. W projekcie odczytuje się ją z obliczeń lub dokumentacji odpowiadającej dokładnej konstrukcji, rozstawowi, okładzinie i temperaturom.</div>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-errors">
      <span class="rk-temp35-eyebrow">Najgroźniejsze skróty myślowe brzmią jak precyzyjne reguły</span>
      <h2 class="rk-temp35-section-title">Najczęstsze błędy i mity o zasilaniu 35°C</h2>
      <div class="rk-temp35-mistakes">
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>„35°C wymaga norma”</strong><p>Metoda normowa prowadzi do obliczenia mocy i wymiarowania systemu; nie nadaje jednej temperatury każdemu budynkowi.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>Prognoza COP z samej temperatury</strong><p>COP zależy między innymi od warunków źródła, obciążenia i konkretnego urządzenia. Do rocznych porównań potrzebne są porównywalne dane sezonowe.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>Wyliczanie trwałości sprężarki suwakiem</strong><p>Nie ma podstaw, aby z samego przejścia z 35 na 45°C obliczać procent skrócenia życia urządzenia.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>Rozstaw 10 cm w każdym pomieszczeniu</strong><p>Geometria wynika z wymaganej mocy, konstrukcji i hydrauliki. Ten sam rozstaw nie musi być optymalny w całym domu.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>Naprawianie deficytu rotametrem</strong><p>Zwiększenie przepływu nie zastąpi brakującej powierzchni i nie stworzy dowolnej mocy przy zbyt niskiej średniej temperaturze wody.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>Stały narzut procentowy do OZC</strong><p>Rezerwę należy uzasadnić niepewnością danych, dynamiką lub konkretnym ryzykiem, a nie dodawać automatycznie do każdego pomieszczenia.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>„Dużo rury zastępuje bufor”</strong><p>Zład wodny jest tylko jednym warunkiem. Znaczenie mają także minimalny przepływ, regulacja, odszranianie i funkcja hydrauliczna bufora.</p></div></div>
        <div class="rk-temp35-mistake"><span class="rk-temp35-mistake-icon">!</span><div><strong>Sprawdzenie domu bez pomieszczeń</strong><p>Bilans całego budynku może wyglądać dobrze, gdy pojedyncza łazienka lub strefa przy przeszkleniach nadal ma deficyt mocy.</p></div></div>
      </div>

      <p>Niepewności warto opisywać wprost, a każdą liczbę przypisać do źródła lub obliczenia. Pomaga w tym analiza, czy <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-moze-byc-jedynym-zrodlem-ciepla-w-domu-analiza-dla-polskich-warunkow/">podłogówka może być jedynym źródłem ciepła</a>, oraz poradnik o <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefach brzegowych</a>.</p>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-checklist">
      <span class="rk-temp35-eyebrow">Przed zatwierdzeniem temperatury projektowej</span>
      <h2 class="rk-temp35-section-title">Lista kontrolna instalacji 35/30°C</h2>
      <p class="rk-temp35-lead">Każdy punkt powinien mieć odpowiedź w obliczeniach, dokumentacji produktu albo projekcie wykonawczym. Braku nie uzupełnia się intuicyjną temperaturą.</p>

      <div class="rk-temp35-checklist">
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Lokalizacja i warunki obliczeniowe</strong><br>Czy przyjęto właściwą temperaturę zewnętrzną i warunki brzegowe budynku?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>OZC każdego pomieszczenia</strong><br>Czy znane jest projektowe obciążenie w watach, a nie tylko wskaźnik całego domu?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Powierzchnia czynna</strong><br>Czy odjęto trwałą zabudowę i skoordynowano układ z aranżacją?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Temperatura pomieszczenia</strong><br>Czy łazienka, salon i sypialnie mają właściwe założenia projektowe?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Konstrukcja podłogi</strong><br>Czy znane są jastrych, położenie rury i wszystkie warstwy nad nią?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Okładzina i jej ograniczenia</strong><br>Czy sprawdzono łączny opór cieplny oraz warunki producentów materiałów?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Moc przy docelowym parametrze</strong><br>Czy W/m² pochodzi z obliczenia lub właściwej tabeli systemu dla 35/30°C?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Temperatura powierzchni</strong><br>Czy obliczony strumień nie narusza warunków komfortu i zastosowanych materiałów?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Rozstaw i trasy rur</strong><br>Czy geometria pokrywa obciążenie i daje wykonalne długości pętli?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>ΔT i przepływy</strong><br>Czy dla każdej pętli obliczono strumień odpowiadający jej mocy?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Opory i pompa obiegowa</strong><br>Czy droga krytyczna mieści się w osiągalnym punkcie pracy?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Dane pompy ciepła</strong><br>Czy moc, COP lub SCOP, zakres modulacji i ograniczenia odczytano dla właściwych warunków?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Minimalny przepływ, zład i sterowanie</strong><br>Czy układ spełnia wymagania źródła także po zamknięciu części stref?</div></div>
        <div class="rk-temp35-checklist-item"><span>✓</span><div><strong>Dokumentacja i uruchomienie</strong><br>Czy zapisano krzywą, przepływy, nastawy, próby oraz sposób późniejszej korekty?</div></div>
      </div>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-conclusions">
      <span class="rk-temp35-eyebrow">Wnioski projektanta</span>
      <h2 class="rk-temp35-section-title">Kiedy 35°C jest dobrym parametrem dla pompy ciepła?</h2>
      <p class="rk-temp35-lead">Wtedy, gdy przy projektowej pogodzie podłoga pokrywa obciążenie każdego pomieszczenia, pozostaje zgodna z ograniczeniami powierzchni i materiałów, a hydraulika oraz pompa ciepła pracują w zweryfikowanym zakresie.</p>

      <div class="rk-temp35-grid-3">
        <article class="rk-temp35-card"><h3>Moc się bilansuje</h3><p>Dostępne W/m² pomnożone przez powierzchnię czynną pokrywają projektowe straty pomieszczenia.</p></article>
        <article class="rk-temp35-card"><h3>Hydraulika jest osiągalna</h3><p>Przepływy, ΔT, opory, zład oraz stany częściowego odbioru odpowiadają urządzeniom i armaturze.</p></article>
        <article class="rk-temp35-card"><h3>Regulacja obniża parametr</h3><p>Krzywa pogodowa prowadzi instalację poniżej wartości projektowej, gdy na zewnątrz robi się cieplej.</p></article>
      </div>

      <div class="rk-temp35-answer"><span class="rk-temp35-answer-label">Reguła końcowa</span><p><strong>Nie projektuj domu „na 35°C”. Zaprojektuj podłogę dla obciążeń pomieszczeń, a następnie wyznacz najniższą temperaturę zasilania, przy której cały system spełnia wymagania w warunkach projektowych.</strong></p></div>

      <div class="rk-temp35-cta">
        <div class="rk-temp35-cta-title">Zaprojektuj najniższą temperaturę, która naprawdę wystarczy</div>
        <p>Kompletny projekt łączy OZC, powierzchnie czynne, warstwy podłogi, temperatury, rozstawy, pętle, przepływy, opory, rozdzielacze, punkt pracy pompy oraz nastawy potrzebne do uruchomienia układu.</p>
        <a class="rk-temp35-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
        <small class="rk-temp35-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-temp35-section rk-temp35-section-soft" id="rk-temp35-references">
      <span class="rk-temp35-eyebrow">Podstawa techniczna i granice interpretacji</span>
      <h2 class="rk-temp35-section-title">Źródła i zakres odpowiedzialności</h2>
      <p class="rk-temp35-lead">Oficjalne źródła potwierdzają potrzebę obliczenia mocy i wymiarowania systemu oraz znaczenie optymalizacji całej instalacji. Nie stanowią podstawy do przypisania jednego COP, kosztu albo temperatury wszystkim budynkom.</p>

      <div class="rk-temp35-source-grid">
        <article class="rk-temp35-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 wraz z Amd 1:2023 — określanie mocy</a><p>Oficjalna karta wydania dotyczącego wyznaczania strumienia ciepła, temperatur powierzchni i zależności charakterystycznych wodnych systemów ogrzewania oraz chłodzenia.</p></article>
        <article class="rk-temp35-source-card"><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 wraz z Amd 1:2023 — projektowanie i wymiarowanie</a><p>Oficjalna karta wydania opisującego metodę projektowania i wymiarowania wbudowanych systemów płaszczyznowych.</p></article>
        <article class="rk-temp35-source-card"><a href="https://www.gov.uk/government/news/heat-pumps-explained-experts-answer-your-questions" target="_blank" rel="nofollow noopener noreferrer">DESNZ — Heat pumps explained: experts answer your questions</a><p>Oficjalny materiał brytyjskiego resortu energii wyjaśniający znaczenie projektu całego systemu i warunków pracy dla efektywności pompy ciepła.</p></article>
      </div>

      <div class="rk-temp35-responsibility">
        <p><strong>Status źródeł:</strong> oficjalne karty ISO wskazują wydania z 2021 r. i poprawki Amd 1:2023. Stan odnośników i opisu technicznego sprawdzono 11 września 2026 r.</p>
        <p><strong>Zakres kalkulatora:</strong> bilans korzysta z danych wpisanych przez użytkownika, a przepływ z przybliżenia dla wody. Porównanie sezonowe dzieli użyteczne ciepło przez podany SCOP; nie modeluje pogody, taryf godzinowych, CWU, grzałki, odszraniania ani charakterystyki urządzenia.</p>
        <p><strong>Odpowiedzialność:</strong> artykuł ma charakter edukacyjny. Nie jest projektem wykonawczym, doborem pompy ciepła, instrukcją producenta, audytem energetycznym ani oceną istniejącej instalacji.</p>
      </div>
    </section>

    <section class="rk-temp35-section" id="rk-temp35-faq">
      <span class="rk-temp35-eyebrow">Najczęstsze pytania o niskotemperaturową podłogówkę</span>
      <h2 class="rk-temp35-section-title">FAQ — temperatura zasilania pompy ciepła i podłogówki</h2>
      <div class="rk-temp35-faq">
        <details><summary>Czy 35°C zawsze wystarczy do ogrzewania podłogowego?</summary><div class="rk-temp35-faq-answer"><p>Nie. Wystarczy tylko wtedy, gdy moc podłogi przy przyjętym zasilaniu, powrocie, konstrukcji i okładzinie pokrywa obciążenie każdego pomieszczenia. W domu o małych stratach może wystarczyć mniej, a w trudnym pomieszczeniu może być potrzebna zmiana emitera lub wyższy parametr.</p></div></details>
        <details><summary>Czy 35°C jest temperaturą wymaganą przez normę?</summary><div class="rk-temp35-faq-answer"><p>Nie należy przedstawiać jej jako jednej temperatury nakazanej dla wszystkich instalacji. Metody projektowe służą do określania mocy i wymiarowania systemu, dlatego wynik zależy od warunków pomieszczenia, powierzchni, konstrukcji i geometrii.</p></div></details>
        <details><summary>Co dokładnie oznacza zapis 35/30°C?</summary><div class="rk-temp35-faq-answer"><p>Najczęściej oznacza projektową temperaturę zasilania 35°C i powrotu 30°C, czyli ΔT równe 5 K. Nie jest to temperatura podłogi ani powietrza w pomieszczeniu.</p></div></details>
        <details><summary>Czy niższa temperatura zasilania zawsze zwiększa COP?</summary><div class="rk-temp35-faq-answer"><p>Niższy wymagany poziom temperatury może poprawiać warunki pracy pompy, lecz dokładny skutek zależy od dolnego źródła, pogody, obciążenia i konstrukcji urządzenia. Warto porównywać dane tego samego modelu w tych samych warunkach.</p></div></details>
        <details><summary>Jak sprawdzić, czy parametr 35/30°C pokryje straty?</summary><div class="rk-temp35-faq-answer"><p>Podziel obciążenie pomieszczenia przez czynną powierzchnię podłogi, a otrzymane W/m² porównaj z mocą konkretnego systemu przy 35/30°C, właściwej temperaturze wnętrza, rozstawie i okładzinie. Następnie sprawdź temperaturę powierzchni oraz hydraulikę.</p></div></details>
        <details><summary>Czy rury trzeba zawsze układać co 10 cm przy pompie ciepła?</summary><div class="rk-temp35-faq-answer"><p>Nie. Rozstaw 10 cm może być uzasadniony obliczoną mocą i charakterystyką systemu, ale w części pomieszczeń wystarczający może być inny rozstaw. Trzeba równocześnie kontrolować długości, liczbę pętli, przepływy i opory.</p></div></details>
        <details><summary>Czy drewno na podłodze wyklucza zasilanie 35°C?</summary><div class="rk-temp35-faq-answer"><p>Nie automatycznie. Trzeba sprawdzić cały opór cieplny warstw, dopuszczenie produktu do podłogówki, warunki montażu i ograniczenia temperatury powierzchni. Następnie oblicza się, czy dostępna moc pokrywa obciążenie.</p></div></details>
        <details><summary>Czy podniesienie przepływu naprawi za niską moc podłogi?</summary><div class="rk-temp35-faq-answer"><p>Nie zawsze. Przepływ wpływa na ΔT i rozkład temperatury, ale nie może dowolnie zwiększyć mocy ograniczonej przez średnią temperaturę wody, powierzchnię oraz opór warstw. Najpierw trzeba ustalić przyczynę deficytu.</p></div></details>
        <details><summary>Czy instalacja 35/30°C potrzebuje bufora?</summary><div class="rk-temp35-faq-answer"><p>Sam parametr nie rozstrzyga tej kwestii. Decydują wymagania producenta pompy, minimalny zład i przepływ, modulacja, odszranianie, sterowanie strefowe oraz funkcja hydrauliczna, którą bufor miałby pełnić.</p></div></details>
        <details><summary>Jak ustawić krzywą grzewczą dla podłogówki?</summary><div class="rk-temp35-faq-answer"><p>Punkt projektowy wynika z obliczeń, a nachylenie i przesunięcie dopracowuje się podczas stabilnej pracy instalacji małymi krokami. Należy uwzględnić bezwładność podłogi i nie oceniać każdej zmiany po kilku minutach.</p></div></details>
      </div>
    </section>

    <section class="rk-temp35-author" id="rk-temp35-author">
      <span class="rk-temp35-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-temp35-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-temp35-author-layout">
        <aside class="rk-temp35-author-side">
          <div class="rk-temp35-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-temp35-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-temp35-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-temp35-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-temp35-author-main">
          <div class="rk-temp35-author-quote">„35°C nie jest nagrodą za wybór pompy ciepła. To jeden z możliwych wyników bilansu pomieszczeń, konstrukcji podłogi i hydrauliki całej instalacji.”</div>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz dokumentację wykonawczą dla inwestorów i wykonawców. W projekcie łączy OZC, aktywne powierzchnie, model emisji, trasy pętli, przepływy, opory i wymagania źródła.</p>
          <p>W tej aktualizacji usunięto bezwarunkowe przedstawianie 35°C jako ideału, stałe procenty wpływu temperatury na koszty i trwałość sprężarki, obowiązkowy rozstaw 10 cm, automatyczny narzut do OZC oraz stwierdzenie, że duży zład w rurach zawsze zastępuje bufor.</p>
          <p>Kalkulator rozdziela bilans pomieszczenia od porównania sezonowego. Nie wyprowadza SCOP z temperatury, lecz pozwala wpisać porównywalne dane konkretnej pompy. Interaktywna grafika pokazuje cały łańcuch prowadzący od strat budynku do punktu pracy źródła.</p>
          <p>Autor publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego</a>.</p>
          <div class="rk-temp35-author-facts">
            <div class="rk-temp35-author-fact"><strong>Zakres</strong>ogrzewanie podłogowe, pompy ciepła i hydraulika instalacji</div>
            <div class="rk-temp35-author-fact"><strong>Metoda pracy</strong>OZC, moc powierzchniowa, temperatura, przepływy i punkt pracy źródła</div>
            <div class="rk-temp35-author-fact"><strong>Aktualizacja</strong>stan techniczny materiału sprawdzony 11 września 2026 r.</div>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

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

  var root = document.getElementById('rk-temp35-guide');
  if (!root) return;

  var svgNamespace = 'http://www.w3.org/2000/svg';
  var mode = 'balance';
  var lastBalance = null;
  var lastScop = null;
  var resizeTimer = null;

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

  function each(selector, callback) {
    var nodes = root.querySelectorAll(selector);
    Array.prototype.forEach.call(nodes, callback);
  }

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

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

  function signed(value, decimals, unit) {
    var prefix = value > 0 ? '+' : '';
    return prefix + formatNumber(value, decimals) + ' ' + unit;
  }

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

  function setStatus(message, kind) {
    var status = byId('rk-temp35-calculator-status');
    if (!status) return;
    status.textContent = message;
    status.classList.remove('is-good');
    status.classList.remove('is-warning');
    if (kind) status.classList.add(kind);
  }

  function isPositive(value) {
    return Number.isFinite(value) ? value > 0 : false;
  }

  function calculateBalance() {
    var roomLoad = numberFrom('rk-temp35-room-load');
    var activeArea = numberFrom('rk-temp35-active-area');
    var tableOutput = numberFrom('rk-temp35-table-output');
    var supply = numberFrom('rk-temp35-supply-temp');
    var returnTemperature = numberFrom('rk-temp35-return-temp');
    var roomTemperature = numberFrom('rk-temp35-room-temp');

    var baseValid = isPositive(roomLoad) ? isPositive(activeArea) : false;
    baseValid = baseValid ? isPositive(tableOutput) : false;
    baseValid = baseValid ? Number.isFinite(supply) : false;
    baseValid = baseValid ? Number.isFinite(returnTemperature) : false;
    baseValid = baseValid ? Number.isFinite(roomTemperature) : false;

    if (!baseValid) {
      setStatus('Uzupełnij wszystkie pola dodatnimi, liczbowymi wartościami.', 'is-warning');
      return;
    }

    var deltaT = supply - returnTemperature;
    if (deltaT <= 0) {
      setStatus('Temperatura zasilania musi być wyższa od temperatury powrotu.', 'is-warning');
      return;
    }

    var requiredOutput = roomLoad / activeArea;
    var availablePower = tableOutput * activeArea;
    var balance = availablePower - roomLoad;
    var requiredArea = roomLoad / tableOutput;
    var flowLh = 0.86 * roomLoad / deltaT;
    var flowLmin = flowLh / 60;
    var meanWaterTemperature = (supply + returnTemperature) / 2;
    var mediumDelta = meanWaterTemperature - roomTemperature;

    setText('rk-temp35-result-required-output', formatNumber(requiredOutput, 1) + ' W/m²');
    setText('rk-temp35-result-available-power', formatNumber(availablePower, 0) + ' W');
    setText('rk-temp35-result-balance', signed(balance, 0, 'W'));
    setText('rk-temp35-result-required-area', formatNumber(requiredArea, 1) + ' m²');
    setText('rk-temp35-result-flow', formatNumber(flowLmin, 2) + ' l/min');
    setText('rk-temp35-result-medium-delta', formatNumber(mediumDelta, 1) + ' K');
    setText(
      'rk-temp35-balance-equation',
      formatNumber(roomLoad, 0) + ' W ÷ ' + formatNumber(activeArea, 1) + ' m² = ' +
      formatNumber(requiredOutput, 1) + ' W/m²; ' + formatNumber(tableOutput, 1) +
      ' W/m² × ' + formatNumber(activeArea, 1) + ' m² = ' + formatNumber(availablePower, 0) + ' W.'
    );

    var tolerance = Math.max(1, roomLoad * 0.01);
    var reserveThreshold = Math.max(1, roomLoad * 0.03);
    if (balance >= reserveThreshold) {
      setStatus(
        'Dla wpisanych danych podłoga pokrywa obciążenie z rezerwą ' +
        formatNumber(balance, 0) + ' W. Nadal sprawdź temperaturę powierzchni, hydraulikę i pozostałe pomieszczenia.',
        'is-good'
      );
    } else if (balance >= -tolerance) {
      setStatus(
        'Dla wpisanych danych bilans jest bliski zeru. Zweryfikuj dokładność OZC, powierzchnię czynną i moc z tabeli systemu.',
        'is-good'
      );
    } else {
      setStatus(
        'Dla wpisanych danych brakuje ' + formatNumber(Math.abs(balance), 0) +
        ' W. Nie kompensuj tego samym przepływem — sprawdź powierzchnię, konstrukcję, rozstaw, temperaturę lub dodatkowy emiter.',
        'is-warning'
      );
    }

    lastBalance = {
      required: roomLoad,
      available: availablePower,
      balance: balance,
      supply: supply,
      returnTemperature: returnTemperature
    };
    drawChart();
  }

  function calculateScop() {
    var annualHeat = numberFrom('rk-temp35-annual-heat');
    var energyPrice = numberFrom('rk-temp35-energy-price');
    var years = numberFrom('rk-temp35-years');
    var lowTemperature = numberFrom('rk-temp35-low-temp');
    var lowScop = numberFrom('rk-temp35-low-scop');
    var highTemperature = numberFrom('rk-temp35-high-temp');
    var highScop = numberFrom('rk-temp35-high-scop');

    var valid = isPositive(annualHeat) ? isPositive(energyPrice) : false;
    valid = valid ? isPositive(years) : false;
    valid = valid ? Number.isFinite(lowTemperature) : false;
    valid = valid ? isPositive(lowScop) : false;
    valid = valid ? Number.isFinite(highTemperature) : false;
    valid = valid ? isPositive(highScop) : false;

    if (!valid) {
      setStatus('Uzupełnij wszystkie pola porównania dodatnimi, liczbowymi wartościami.', 'is-warning');
      return;
    }

    var lowEnergy = annualHeat / lowScop;
    var highEnergy = annualHeat / highScop;
    var energyDifference = highEnergy - lowEnergy;
    var lowCost = lowEnergy * energyPrice;
    var highCost = highEnergy * energyPrice;
    var annualCostDifference = highCost - lowCost;
    var periodDifference = annualCostDifference * years;
    var percentageDifference = lowEnergy > 0 ? (highEnergy / lowEnergy - 1) * 100 : 0;

    setText('rk-temp35-low-energy-label', 'Prąd przy ' + formatNumber(lowTemperature, 0) + '°C');
    setText('rk-temp35-high-energy-label', 'Prąd przy ' + formatNumber(highTemperature, 0) + '°C');
    setText('rk-temp35-low-cost-label', 'Koszt przy ' + formatNumber(lowTemperature, 0) + '°C');
    setText('rk-temp35-high-cost-label', 'Koszt przy ' + formatNumber(highTemperature, 0) + '°C');
    setText('rk-temp35-result-low-energy', formatNumber(lowEnergy, 0) + ' kWh/rok');
    setText('rk-temp35-result-high-energy', formatNumber(highEnergy, 0) + ' kWh/rok');
    setText('rk-temp35-result-energy-difference', signed(energyDifference, 0, 'kWh/rok'));
    setText('rk-temp35-result-low-cost', formatNumber(lowCost, 0) + ' zł/rok');
    setText('rk-temp35-result-high-cost', formatNumber(highCost, 0) + ' zł/rok');
    setText('rk-temp35-result-period-difference', signed(periodDifference, 0, 'zł'));
    setText(
      'rk-temp35-scop-equation',
      formatNumber(annualHeat, 0) + ' kWh ÷ ' + formatNumber(lowScop, 1) + ' = ' +
      formatNumber(lowEnergy, 0) + ' kWh prądu; ' + formatNumber(annualHeat, 0) +
      ' kWh ÷ ' + formatNumber(highScop, 1) + ' = ' + formatNumber(highEnergy, 0) + ' kWh prądu.'
    );

    if (energyDifference > 0) {
      setStatus(
        'Z wpisanych wartości wynika, że wariant ' + formatNumber(highTemperature, 0) + '°C zużywa o ' +
        formatNumber(energyDifference, 0) + ' kWh/rok więcej, czyli o ' + formatNumber(percentageDifference, 1) +
        '%. To porównanie danych wejściowych, nie prognoza SCOP z temperatury.',
        'is-good'
      );
    } else if (Math.abs(energyDifference) < 0.5) {
      setStatus('Wpisane wartości SCOP dają praktycznie takie samo zużycie energii w obu wariantach.', 'is-good');
    } else {
      setStatus(
        'Wpisane dane pokazują mniejsze zużycie dla wariantu o wyższej temperaturze. Sprawdź, czy wartości SCOP pochodzą z porównywalnych warunków i tego samego urządzenia.',
        'is-warning'
      );
    }

    lastScop = {
      lowTemperature: lowTemperature,
      highTemperature: highTemperature,
      lowEnergy: lowEnergy,
      highEnergy: highEnergy,
      difference: energyDifference,
      years: years,
      periodDifference: periodDifference
    };
    drawChart();
  }

  function svgElement(name, attributes, content) {
    var element = document.createElementNS(svgNamespace, name);
    Object.keys(attributes).forEach(function (key) {
      element.setAttribute(key, attributes[key]);
    });
    if (typeof content === 'string') element.textContent = content;
    return element;
  }

  function appendSvg(parent, name, attributes, content) {
    var element = svgElement(name, attributes, content);
    parent.appendChild(element);
    return element;
  }

  function drawBarChart(data, unit, title, description, reading) {
    var svg = byId('rk-temp35-comparison-chart');
    if (!svg) return;
    while (svg.firstChild) svg.removeChild(svg.firstChild);

    appendSvg(svg, 'title', { id: 'rk-temp35-chart-title-svg' }, title);
    appendSvg(svg, 'desc', { id: 'rk-temp35-chart-desc' }, description);

    var renderedWidth = 760;
    var wrap = byId('rk-temp35-chart-wrap');
    if (wrap) {
      var measuredWidth = Number(wrap.clientWidth);
      if (Number.isFinite(measuredWidth)) {
        if (measuredWidth > 0) renderedWidth = measuredWidth;
      }
    }
    var compact = renderedWidth < 560;
    var width = compact ? 420 : 760;
    var height = 330;
    var left = compact ? 18 : 205;
    var right = compact ? 24 : 78;
    var top = compact ? 88 : 70;
    var plotWidth = width - left - right;
    var maxValue = Math.max(data[0].value, data[1].value, 1) * 1.12;
    var ticks = 4;

    svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height);

    appendSvg(svg, 'text', { x: left, y: 31, class: 'rk-temp35-chart-unit' }, unit);
    for (var tick = 0; tick <= ticks; tick += 1) {
      var ratio = tick / ticks;
      var x = left + plotWidth * ratio;
      appendSvg(svg, 'line', {
        x1: x,
        y1: top - 10,
        x2: x,
        y2: height - 44,
        class: 'rk-temp35-chart-grid-line'
      });
      appendSvg(svg, 'text', {
        x: x,
        y: height - 18,
        'text-anchor': 'middle',
        class: 'rk-temp35-chart-tick'
      }, formatNumber(maxValue * ratio, 0));
    }

    data.forEach(function (item, index) {
      var y = top + index * 105;
      var barWidth = Math.max(2, plotWidth * item.value / maxValue);
      appendSvg(svg, 'text', {
        x: compact ? left : 18,
        y: compact ? y - 10 : y + 31,
        class: 'rk-temp35-chart-label'
      }, item.label);
      appendSvg(svg, 'rect', {
        x: left,
        y: y,
        width: barWidth,
        height: 48,
        rx: 10,
        class: 'rk-temp35-chart-bar ' + item.className
      });

      var valueInside = barWidth >= 105;
      var valueX = valueInside ? left + barWidth - 12 : left + barWidth + 10;
      appendSvg(svg, 'text', {
        x: valueX,
        y: y + 31,
        'text-anchor': valueInside ? 'end' : 'start',
        class: valueInside ? 'rk-temp35-chart-value is-inside' : 'rk-temp35-chart-value'
      }, formatNumber(item.value, 0));
    });

    setText('rk-temp35-chart-visible-title', title);
    var readingElement = byId('rk-temp35-chart-reading');
    if (readingElement) readingElement.innerHTML = reading;
  }

  function drawChart() {
    if (mode === 'scop') {
      if (!lastScop) return;
      var scopReading;
      if (lastScop.difference >= 0) {
        scopReading = '<strong>Różnica:</strong> wariant ' + formatNumber(lastScop.highTemperature, 0) +
          '°C wymaga według wpisanych SCOP o ' + formatNumber(lastScop.difference, 0) +
          ' kWh energii elektrycznej rocznie więcej.';
      } else {
        scopReading = '<strong>Sprawdź dane:</strong> wpisane SCOP dają niższe zużycie wariantowi ' +
          formatNumber(lastScop.highTemperature, 0) + '°C.';
      }
      drawBarChart(
        [
          { label: 'Wariant ' + formatNumber(lastScop.lowTemperature, 0) + '°C', value: lastScop.lowEnergy, className: 'is-low' },
          { label: 'Wariant ' + formatNumber(lastScop.highTemperature, 0) + '°C', value: lastScop.highEnergy, className: 'is-high' }
        ],
        'Zużycie energii elektrycznej [kWh/rok]',
        'Roczne zużycie energii na podstawie wpisanych wartości SCOP',
        'Wykres porównuje roczne zużycie energii elektrycznej obliczone z użytecznego ciepła i wpisanych wartości SCOP.',
        scopReading
      );
      return;
    }

    if (!lastBalance) return;
    var balanceReading;
    if (lastBalance.balance > 0) {
      balanceReading = '<strong>Rezerwa:</strong> dostępna moc jest wyższa od obciążenia o ' +
        formatNumber(lastBalance.balance, 0) + ' W.';
    } else if (lastBalance.balance < 0) {
      balanceReading = '<strong>Deficyt:</strong> dostępna moc jest niższa od obciążenia o ' +
        formatNumber(Math.abs(lastBalance.balance), 0) + ' W.';
    } else {
      balanceReading = '<strong>Bilans:</strong> dostępna moc odpowiada projektowemu obciążeniu pomieszczenia.';
    }
    drawBarChart(
      [
        { label: 'Obciążenie pomieszczenia', value: lastBalance.required, className: 'is-required' },
        { label: 'Moc dostępna z podłogi', value: lastBalance.available, className: 'is-available' }
      ],
      'Moc [W]',
      'Bilans mocy pomieszczenia dla ' + formatNumber(lastBalance.supply, 1) + '/' +
        formatNumber(lastBalance.returnTemperature, 1) + '°C',
      'Wykres porównuje projektowe obciążenie pomieszczenia z mocą dostępną z czynnej powierzchni podłogi.',
      balanceReading
    );
  }

  function selectMode(nextMode, focusTab) {
    mode = nextMode === 'scop' ? 'scop' : 'balance';
    each('[data-rk-temp35-mode]', function (button) {
      var selected = button.getAttribute('data-rk-temp35-mode') === mode;
      button.setAttribute('aria-selected', selected ? 'true' : 'false');
      if (selected) {
        button.removeAttribute('tabindex');
        if (focusTab) button.focus();
      } else {
        button.setAttribute('tabindex', '-1');
      }
    });

    var balancePanel = byId('rk-temp35-panel-balance');
    var scopPanel = byId('rk-temp35-panel-scop');
    if (balancePanel) balancePanel.hidden = mode !== 'balance';
    if (scopPanel) scopPanel.hidden = mode !== 'scop';
    if (mode === 'scop') calculateScop();
    else calculateBalance();
  }

  var scenarios = {
    insulation: {
      components: {
        weather: ['Bez zmian', 'Temperatura obliczeniowa lokalizacji pozostaje taka sama.', 'muted'],
        load: ['Maleje', 'Lepsza izolacyjność ogranicza moc potrzebną do utrzymania temperatury.', 'active'],
        area: ['Bez zmian', 'Dostępny obszar grzewczy nie zmienia się.', 'muted'],
        emission: ['Maleją', 'Ta sama podłoga musi przekazać mniej energii na każdy metr kwadratowy.', 'active'],
        water: ['Może być niższa', 'Do uzyskania mniejszej mocy może wystarczyć niższa średnia temperatura czynnika.', 'active'],
        pump: ['Korzystniejszy punkt', 'Mniejszy wymagany poziom temperatury może poprawić warunki pracy urządzenia.', 'active']
      },
      title: 'Mniejsze straty budynku otwierają drogę do niższej temperatury.',
      copy: 'Obciążenie na metr czynnej powierzchni maleje. Nie oznacza to automatycznie konkretnej wartości — trzeba ponownie odczytać moc systemu dla jego konstrukcji.'
    },
    area: {
      components: {
        weather: ['Bez zmian', 'Warunki zewnętrzne i lokalizacja pozostają takie same.', 'muted'],
        load: ['Bez zmian', 'Pomieszczenie nadal traci tę samą projektową moc.', 'muted'],
        area: ['Maleje', 'Stała zabudowa ogranicza fragment powierzchni, który może oddawać ciepło.', 'warning'],
        emission: ['Rosną', 'Ta sama moc musi zostać przekazana przez mniejszą liczbę metrów kwadratowych.', 'warning'],
        water: ['Może być wyższa', 'Jeżeli system nie osiąga wymaganych W/m², może wymagać zmiany geometrii lub temperatury.', 'warning'],
        pump: ['Trudniejszy punkt', 'Wyższy wymagany poziom temperatury może pogarszać warunki pracy źródła.', 'warning']
      },
      title: 'Mniejsza powierzchnia czynna zwiększa wymaganie W/m².',
      copy: 'Najpierw sprawdź możliwość uwolnienia powierzchni lub zmianę systemu. Podnoszenie temperatury jest jedną z opcji, ale nie pierwszym automatycznym ruchem.'
    },
    covering: {
      components: {
        weather: ['Bez zmian', 'Temperatura zewnętrzna nie zależy od wyboru okładziny.', 'muted'],
        load: ['Bez zmian', 'Straty pomieszczenia pozostają takie same.', 'muted'],
        area: ['Bez zmian', 'W przykładzie zmienia się materiał, a nie ogrzewany obszar.', 'muted'],
        emission: ['Trudniejsza', 'Większy opór warstw ogranicza moc przy tej samej temperaturze wody.', 'warning'],
        water: ['Może być wyższa', 'Do pokrycia tej samej mocy może być potrzebna większa różnica temperatur.', 'warning'],
        pump: ['Mniej korzystny punkt', 'Wyższy parametr może zwiększyć wymagane podniesienie temperatury.', 'warning']
      },
      title: 'Większy opór okładziny ogranicza zdolność oddawania ciepła.',
      copy: 'Nie wolno jednak przekraczać ograniczeń producenta podłogi. Rozwiązaniem może być także redukcja strat, większa powierzchnia albo dodatkowy emiter.'
    },
    spacing: {
      components: {
        weather: ['Bez zmian', 'Warunki zewnętrzne nie zależą od rozstawu rur.', 'muted'],
        load: ['Bez zmian', 'Zagęszczenie rury nie zmienia strat pomieszczenia.', 'muted'],
        area: ['Bez zmian', 'Czynny obszar podłogi pozostaje taki sam.', 'muted'],
        emission: ['Wymaganie bez zmian', 'Potrzebne W/m² nadal wynikają z obciążenia i powierzchni.', 'muted'],
        water: ['Może być niższa', 'Korzystniejsza charakterystyka systemu może pokryć tę samą moc przy niższym parametrze.', 'active'],
        pump: ['Bilans do sprawdzenia', 'Niższa temperatura może pomóc źródłu, ale większa długość rur zmienia hydraulikę.', 'active']
      },
      title: 'Gęstszy rozstaw może obniżyć wymagany parametr, lecz zwiększa długość rur.',
      copy: 'Korzyść cieplną trzeba zestawić z liczbą pętli, oporami, przepływem, kosztami i możliwościami wykonawczymi.'
    }
  };

  function selectScenario(name) {
    var scenario = scenarios[name] || scenarios.insulation;
    each('[data-rk-temp35-scenario]', function (button) {
      button.setAttribute('aria-pressed', button.getAttribute('data-rk-temp35-scenario') === name ? 'true' : 'false');
    });

    each('[data-rk-temp35-component]', function (card) {
      var key = card.getAttribute('data-rk-temp35-component');
      var item = scenario.components[key];
      if (!item) return;
      card.classList.remove('is-active');
      card.classList.remove('is-muted');
      card.classList.remove('is-warning');
      card.classList.add('is-' + item[2]);
      var value = card.querySelector('[data-rk-temp35-component-value]');
      var copy = card.querySelector('[data-rk-temp35-component-copy]');
      if (value) value.textContent = item[0];
      if (copy) copy.textContent = item[1];
    });

    var result = byId('rk-temp35-scenario-result');
    if (result) result.innerHTML = '<strong>' + scenario.title + '</strong><p>' + scenario.copy + '</p>';
  }

  each('[data-rk-temp35-mode]', function (button, index) {
    button.addEventListener('click', function () {
      selectMode(button.getAttribute('data-rk-temp35-mode'), false);
    });
    button.addEventListener('keydown', function (event) {
      if (['ArrowRight', 'ArrowLeft'].indexOf(event.key) === -1) return;
      event.preventDefault();
      var nextIndex = event.key === 'ArrowRight' ? index + 1 : index - 1;
      var tabs = root.querySelectorAll('[data-rk-temp35-mode]');
      if (nextIndex >= tabs.length) nextIndex = 0;
      if (nextIndex < 0) nextIndex = tabs.length - 1;
      selectMode(tabs[nextIndex].getAttribute('data-rk-temp35-mode'), true);
    });
  });

  each('#rk-temp35-calculator-tool input', function (input) {
    input.addEventListener('input', function () {
      if (mode === 'scop') calculateScop();
      else calculateBalance();
    });
  });

  each('[data-rk-temp35-scenario]', function (button) {
    button.addEventListener('click', function () {
      selectScenario(button.getAttribute('data-rk-temp35-scenario'));
    });
  });

  calculateBalance();
  calculateScop();
  selectMode('balance', false);
  selectScenario('insulation');

  if (typeof window !== 'undefined') {
    window.addEventListener('resize', function () {
      if (resizeTimer) window.clearTimeout(resizeTimer);
      resizeTimer = window.setTimeout(drawChart, 100);
    });
  }
}());
</script>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "description": "Profesjonalne projektowanie ogrzewania podłogowego i poradniki techniczne HVAC.",
      "inLanguage": "pl-PL",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://projekt-ogrzewania.pl/?s={search_term_string}"
        },
        "query-input": "required name=search_term_string"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@id": "https://projekt-ogrzewania.pl/#logo"
      },
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#logo",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "width": 1024,
      "height": 1024,
      "caption": "Projekt Ogrzewania"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "affiliation": [
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "pompy ciepła",
        "obliczenia OZC",
        "temperatura zasilania",
        "hydraulika instalacji",
        "krzywa grzewcza"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Niska-temperatura-zasilania-pompy-ciepla-–-dlaczego-35-stopni-to-ideal-dla-podlogowki.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Niska-temperatura-zasilania-pompy-ciepla-–-dlaczego-35-stopni-to-ideal-dla-podlogowki.webp",
      "width": 900,
      "height": 900,
      "caption": "Niska temperatura zasilania pompy ciepła i ogrzewania podłogowego"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Strona główna",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Pompa ciepła",
          "item": "https://projekt-ogrzewania.pl/pompa-ciepla/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Temperatura zasilania pompy ciepła",
          "item": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#webpage",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/",
      "name": "Temperatura zasilania pompy ciepła – czy 35°C wystarczy?",
      "description": "Czy 35°C wystarczy do podłogówki z pompą ciepła? Sprawdź wpływ OZC, powierzchni czynnej i okładziny na dobór zasilania, COP oraz koszty pracy.",
      "inLanguage": "pl-PL",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#breadcrumb"
      },
      "primaryImageOfPage": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#primaryimage"
      },
      "datePublished": "2026-04-17T10:17:48+00:00",
      "dateModified": "2026-09-11T00:00:00+00:00",
      "mainEntity": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#article"
      },
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          "#rk-temp35-answer",
          "#rk-temp35-conclusions"
        ]
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#article",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/",
      "headline": "Temperatura zasilania pompy ciepła do podłogówki – czy 35°C zawsze wystarczy?",
      "alternativeHeadline": "Czy zasilanie 35°C jest optymalne dla podłogówki z pompą ciepła?",
      "description": "Czy 35°C wystarczy do podłogówki z pompą ciepła? Sprawdź wpływ OZC, powierzchni czynnej i okładziny na dobór zasilania, COP oraz koszty pracy.",
      "image": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#primaryimage"
      },
      "thumbnailUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Niska-temperatura-zasilania-pompy-ciepla-–-dlaczego-35-stopni-to-ideal-dla-podlogowki.webp",
      "datePublished": "2026-04-17T10:17:48+00:00",
      "dateModified": "2026-09-11T00:00:00+00:00",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "wordCount": 4433,
      "timeRequired": "PT39M",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#webpage"
      },
      "articleSection": [
        "Temperatura zasilania ogrzewania podłogowego",
        "Pompa ciepła i sprawność",
        "Moc powierzchniowa podłogi",
        "Krzywa grzewcza",
        "Hydraulika i przepływ",
        "Bufor i sterowanie"
      ],
      "keywords": [
        "temperatura zasilania pompy ciepła",
        "czy 35°C wystarczy do podłogówki",
        "parametr 35/30°C",
        "jaka temperatura podłogówki przy pompie ciepła",
        "COP a temperatura zasilania",
        "SCOP pompy ciepła",
        "krzywa grzewcza ogrzewania podłogowego",
        "przepływ podłogówki przy ΔT 5 K"
      ],
      "about": [
        {
          "@type": "Thing",
          "name": "Pompa ciepła"
        },
        {
          "@type": "Thing",
          "name": "Wodne ogrzewanie podłogowe"
        },
        {
          "@type": "Thing",
          "name": "Temperatura zasilania"
        },
        {
          "@type": "Thing",
          "name": "Sezonowy współczynnik efektywności SCOP"
        }
      ],
      "citation": [
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://www.gov.uk/government/news/heat-pumps-explained-experts-answer-your-questions"
      ],
      "hasPart": [
        {
          "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#calculator-app"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#dependency-app"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#howto"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#checklist-schema"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#faq-schema"
        }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#calculator-app",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#rk-temp35-calculator",
      "name": "Kalkulator bilansu 35/30°C i porównania kosztów na podstawie SCOP",
      "description": "Sprawdza bilans mocy jednego pomieszczenia i porównuje roczne zużycie oraz koszt dwóch wariantów na podstawie danych wpisanych przez użytkownika.",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      },
      "featureList": [
        "obliczenie wymaganej mocy jednostkowej",
        "bilans obciążenia i dostępnej mocy",
        "przepływ dla wpisanego ΔT",
        "porównanie zużycia na podstawie SCOP",
        "responsywny wykres wyników"
      ],
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#article"
      }
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#dependency-app",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#rk-temp35-graphic",
      "name": "Interaktywna grafika zależności temperatury zasilania",
      "description": "Pokazuje, jak straty budynku, powierzchnia czynna, okładzina i rozstaw rur wpływają na wymagane W/m², temperaturę wody i warunki pracy pompy ciepła.",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      },
      "featureList": [
        "cztery scenariusze zmian",
        "sześć modułów zależności",
        "interpretacja bez uniwersalnych temperatur",
        "układ responsywny dla desktopu i telefonu"
      ],
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#article"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#howto",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#rk-temp35-checklist",
      "name": "Jak sprawdzić, czy 35/30°C wystarczy do ogrzewania podłogowego",
      "description": "Proces od obciążenia pomieszczeń do weryfikacji źródła, hydrauliki i regulacji.",
      "inLanguage": "pl-PL",
      "totalTime": "PT10M",
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Oblicz OZC pomieszczeń",
          "text": "Wyznacz projektowe straty ciepła dla właściwych warunków zewnętrznych i temperatur wnętrz."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Ustal powierzchnie czynne",
          "text": "Odejmij trwałą zabudowę i skoordynuj aktywną podłogę z aranżacją."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Oblicz wymagane W/m²",
          "text": "Podziel obciążenie każdego pomieszczenia przez jego powierzchnię czynną."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Sprawdź konstrukcję i okładzinę",
          "text": "Uwzględnij warstwy podłogi, ich opór oraz ograniczenia producentów."
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Zweryfikuj moc przy 35/30°C",
          "text": "Porównaj wymaganie z charakterystyką konkretnego systemu dla przyjętego rozstawu i temperatur."
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Policz przepływy i opory",
          "text": "Wyznacz przepływy z mocy i ΔT, a następnie sprawdź pętle oraz drogę krytyczną."
        },
        {
          "@type": "HowToStep",
          "position": 7,
          "name": "Sprawdź wymagania pompy ciepła",
          "text": "Porównaj moc, punkt pracy, minimalny przepływ, zład, modulację i sposób sterowania."
        },
        {
          "@type": "HowToStep",
          "position": 8,
          "name": "Ustaw i zweryfikuj krzywą",
          "text": "Uruchom układ z nastawami projektowymi i koryguj krzywą małymi krokami po ustabilizowaniu instalacji."
        }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#checklist-schema",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#rk-temp35-checklist",
      "name": "Lista kontrolna instalacji 35/30°C",
      "numberOfItems": 14,
      "itemListOrder": "https://schema.org/ItemListOrderAscending",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Lokalizacja i warunki obliczeniowe",
          "description": "Czy przyjęto właściwą temperaturę zewnętrzną i warunki brzegowe budynku?"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "OZC każdego pomieszczenia",
          "description": "Czy znane jest projektowe obciążenie w watach, a nie tylko wskaźnik całego domu?"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Powierzchnia czynna",
          "description": "Czy odjęto trwałą zabudowę i skoordynowano układ z aranżacją?"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Temperatura pomieszczenia",
          "description": "Czy łazienka, salon i sypialnie mają właściwe założenia projektowe?"
        },
        {
          "@type": "ListItem",
          "position": 5,
          "name": "Konstrukcja podłogi",
          "description": "Czy znane są jastrych, położenie rury i wszystkie warstwy nad nią?"
        },
        {
          "@type": "ListItem",
          "position": 6,
          "name": "Okładzina i jej ograniczenia",
          "description": "Czy sprawdzono łączny opór cieplny oraz warunki producentów materiałów?"
        },
        {
          "@type": "ListItem",
          "position": 7,
          "name": "Moc przy docelowym parametrze",
          "description": "Czy W/m² pochodzi z obliczenia lub właściwej tabeli systemu dla 35/30°C?"
        },
        {
          "@type": "ListItem",
          "position": 8,
          "name": "Temperatura powierzchni",
          "description": "Czy obliczony strumień nie narusza warunków komfortu i zastosowanych materiałów?"
        },
        {
          "@type": "ListItem",
          "position": 9,
          "name": "Rozstaw i trasy rur",
          "description": "Czy geometria pokrywa obciążenie i daje wykonalne długości pętli?"
        },
        {
          "@type": "ListItem",
          "position": 10,
          "name": "ΔT i przepływy",
          "description": "Czy dla każdej pętli obliczono strumień odpowiadający jej mocy?"
        },
        {
          "@type": "ListItem",
          "position": 11,
          "name": "Opory i pompa obiegowa",
          "description": "Czy droga krytyczna mieści się w osiągalnym punkcie pracy?"
        },
        {
          "@type": "ListItem",
          "position": 12,
          "name": "Dane pompy ciepła",
          "description": "Czy moc, COP lub SCOP, zakres modulacji i ograniczenia odczytano dla właściwych warunków?"
        },
        {
          "@type": "ListItem",
          "position": 13,
          "name": "Minimalny przepływ, zład i sterowanie",
          "description": "Czy układ spełnia wymagania źródła także po zamknięciu części stref?"
        },
        {
          "@type": "ListItem",
          "position": 14,
          "name": "Dokumentacja i uruchomienie",
          "description": "Czy zapisano krzywą, przepływy, nastawy, próby oraz sposób późniejszej korekty?"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#faq-schema",
      "url": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#rk-temp35-faq",
      "name": "FAQ — temperatura zasilania pompy ciepła i podłogówki",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy 35°C zawsze wystarczy do ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Wystarczy tylko wtedy, gdy moc podłogi przy przyjętym zasilaniu, powrocie, konstrukcji i okładzinie pokrywa obciążenie każdego pomieszczenia. W domu o małych stratach może wystarczyć mniej, a w trudnym pomieszczeniu może być potrzebna zmiana emitera lub wyższy parametr."
          }
        },
        {
          "@type": "Question",
          "name": "Czy 35°C jest temperaturą wymaganą przez normę?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie należy przedstawiać jej jako jednej temperatury nakazanej dla wszystkich instalacji. Metody projektowe służą do określania mocy i wymiarowania systemu, dlatego wynik zależy od warunków pomieszczenia, powierzchni, konstrukcji i geometrii."
          }
        },
        {
          "@type": "Question",
          "name": "Co dokładnie oznacza zapis 35/30°C?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Najczęściej oznacza projektową temperaturę zasilania 35°C i powrotu 30°C, czyli ΔT równe 5 K. Nie jest to temperatura podłogi ani powietrza w pomieszczeniu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy niższa temperatura zasilania zawsze zwiększa COP?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Niższy wymagany poziom temperatury może poprawiać warunki pracy pompy, lecz dokładny skutek zależy od dolnego źródła, pogody, obciążenia i konstrukcji urządzenia. Warto porównywać dane tego samego modelu w tych samych warunkach."
          }
        },
        {
          "@type": "Question",
          "name": "Jak sprawdzić, czy parametr 35/30°C pokryje straty?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Podziel obciążenie pomieszczenia przez czynną powierzchnię podłogi, a otrzymane W/m² porównaj z mocą konkretnego systemu przy 35/30°C, właściwej temperaturze wnętrza, rozstawie i okładzinie. Następnie sprawdź temperaturę powierzchni oraz hydraulikę."
          }
        },
        {
          "@type": "Question",
          "name": "Czy rury trzeba zawsze układać co 10 cm przy pompie ciepła?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Rozstaw 10 cm może być uzasadniony obliczoną mocą i charakterystyką systemu, ale w części pomieszczeń wystarczający może być inny rozstaw. Trzeba równocześnie kontrolować długości, liczbę pętli, przepływy i opory."
          }
        },
        {
          "@type": "Question",
          "name": "Czy drewno na podłodze wyklucza zasilanie 35°C?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie automatycznie. Trzeba sprawdzić cały opór cieplny warstw, dopuszczenie produktu do podłogówki, warunki montażu i ograniczenia temperatury powierzchni. Następnie oblicza się, czy dostępna moc pokrywa obciążenie."
          }
        },
        {
          "@type": "Question",
          "name": "Czy podniesienie przepływu naprawi za niską moc podłogi?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie zawsze. Przepływ wpływa na ΔT i rozkład temperatury, ale nie może dowolnie zwiększyć mocy ograniczonej przez średnią temperaturę wody, powierzchnię oraz opór warstw. Najpierw trzeba ustalić przyczynę deficytu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy instalacja 35/30°C potrzebuje bufora?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sam parametr nie rozstrzyga tej kwestii. Decydują wymagania producenta pompy, minimalny zład i przepływ, modulacja, odszranianie, sterowanie strefowe oraz funkcja hydrauliczna, którą bufor miałby pełnić."
          }
        },
        {
          "@type": "Question",
          "name": "Jak ustawić krzywą grzewczą dla podłogówki?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Punkt projektowy wynika z obliczeń, a nachylenie i przesunięcie dopracowuje się podczas stabilnej pracy instalacji małymi krokami. Należy uwzględnić bezwładność podłogi i nie oceniać każdej zmiany po kilku minutach."
          }
        }
      ],
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/#webpage"
      }
    }
  ]
}
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/niska-temperatura-zasilania-pompy-ciepla-dlaczego-35-stopni-to-ideal-dla-podlogowki/">Temperatura zasilania pompy ciepła – czy 35°C wystarczy?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</title>
		<link>https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 18:14:51 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Instalacje budowlane]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Okna]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[dom energooszczędny]]></category>
		<category><![CDATA[duże przeszklenia]]></category>
		<category><![CDATA[izolacja xps]]></category>
		<category><![CDATA[komfort termiczny]]></category>
		<category><![CDATA[konwektory kanałowe]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[okna panoramiczne]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[strefa brzegowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4070</guid>

					<description><![CDATA[<p>Współczesna architektura zachwyca ogromnymi przeszkleniami, które otwierają wnętrza na ogród i wpuszczają do środka mnóstwo naturalnego światła. Jednak to, co cieszy oko, bywa sporym wyzwaniem dla inżynierów sanitarnych. Zimne tafle szkła generują zjawisko spływu chłodnego powietrza, co może prowadzić do powstawania nieprzyjemnych przeciągów i dyskomfortu termicznego. Właściwie przygotowany projekt ogrzewania podłogowego do domu z dużymi przeszkleniami musi uwzględniać specyfikę strefy brzegowej, aby skutecznie zniwelować straty ciepła przy oknach tarasowych. W naszym poradniku szczegółowo analizujemy fizykę tego zjawiska, podpowiadamy, jak obliczyć zagęszczenie rur, jaką izolację zastosować oraz kiedy niezbędne okaże się wsparcie w postaci konwektorów kanałowych. Dowiedz się, jak zaprojektować system, który zagwarantuje ciepłe stopy nawet przy panoramicznych oknach w mroźne dni.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-glazing-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e8fbff;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff0e9;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #e8ad2c;
    --rk-yellow-soft: #fff8df;
    --rk-red: #c7443a;
    --rk-red-soft: #fff0ee;
    --rk-purple: #6659c7;
    --rk-purple-soft: #f1efff;
    --rk-ink: #1d2b36;
    --rk-text: #465b6b;
    --rk-muted: #667b8b;
    --rk-line: #d7e6ec;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    color: var(--rk-ink);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
    font-size: 18px;
    line-height: 1.72;
    margin: 0 auto;
    max-width: 1240px;
    overflow: hidden;
    width: 100%;
  }

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

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

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

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

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

  #rk-glazing-guide button {
    font: inherit;
  }

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

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

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

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

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

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

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

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

  #rk-glazing-guide .rk-glz-hero-inner {
    max-width: 1080px;
    position: relative;
    z-index: 1;
  }

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

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

  #rk-glazing-guide .rk-glz-hero-title {
    color: #ffffff;
    font-size: clamp(2.25rem, 6.8vw, 5rem);
    margin: 0;
    max-width: 1100px;
  }

  #rk-glazing-guide .rk-glz-hero-title span {
    color: #6cecff;
  }

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

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

  #rk-glazing-guide .rk-glz-hero-tags span {
    background: rgba(255, 255, 255, 0.08);
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 999px;
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 850;
    padding: 7px 14px;
  }

  #rk-glazing-guide .rk-glz-meta {
    border-top: 1px solid rgba(255, 255, 255, 0.18);
    color: #d6e8ee;
    font-size: 0.85rem;
    font-weight: 700;
    margin-top: 24px;
    padding-top: 18px;
  }

  #rk-glazing-guide .rk-glz-meta strong {
    color: #ffffff;
  }

  #rk-glazing-guide .rk-glz-toc {
    align-items: flex-start;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-line);
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    padding: 22px clamp(20px, 5vw, 58px);
  }

  #rk-glazing-guide .rk-glz-toc-label {
    color: var(--rk-dark);
    flex: 0 0 100%;
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

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

  #rk-glazing-guide .rk-glz-toc a:hover,
  #rk-glazing-guide .rk-glz-toc a:focus-visible {
    background: var(--rk-cyan-soft);
    border-color: var(--rk-cyan);
    color: var(--rk-dark);
  }

  #rk-glazing-guide .rk-glz-section {
    border-bottom: 1px solid var(--rk-line);
    padding: clamp(42px, 7vw, 78px) clamp(22px, 7vw, 76px);
  }

  #rk-glazing-guide .rk-glz-section:last-child {
    border-bottom: 0;
  }

  #rk-glazing-guide .rk-glz-section-alt {
    background: var(--rk-soft);
  }

  #rk-glazing-guide .rk-glz-section-dark {
    background: var(--rk-dark);
    color: #eaf7fa;
  }

  #rk-glazing-guide .rk-glz-section-dark h2,
  #rk-glazing-guide .rk-glz-section-dark h3,
  #rk-glazing-guide .rk-glz-section-dark h4 {
    color: #ffffff;
  }

  #rk-glazing-guide .rk-glz-section-dark p,
  #rk-glazing-guide .rk-glz-section-dark li {
    color: #d3e7ed;
  }

  #rk-glazing-guide .rk-glz-copy {
    color: var(--rk-text);
    max-width: 920px;
  }

  #rk-glazing-guide .rk-glz-lead {
    color: var(--rk-text);
    font-size: 1.1rem;
    line-height: 1.65;
    max-width: 970px;
  }

  #rk-glazing-guide .rk-glz-answer {
    background: linear-gradient(135deg, var(--rk-cyan-soft), #ffffff);
    border-left: 6px solid var(--rk-cyan);
    border-radius: 0 18px 18px 0;
    color: var(--rk-dark);
    font-size: 1.08rem;
    margin: 28px 0 0;
    padding: 24px 26px;
  }

  #rk-glazing-guide .rk-glz-answer strong {
    color: var(--rk-dark);
  }

  #rk-glazing-guide .rk-glz-grid {
    display: grid;
    gap: 18px;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    margin-top: 28px;
  }

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

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

  #rk-glazing-guide .rk-glz-card-accent {
    background: var(--rk-cyan-soft);
    border-color: #b9e9f1;
  }

  #rk-glazing-guide .rk-glz-card-warn {
    background: var(--rk-yellow-soft);
    border-color: #f0d783;
  }

  #rk-glazing-guide .rk-glz-card-risk {
    background: var(--rk-red-soft);
    border-color: #efbbb5;
  }

  #rk-glazing-guide .rk-glz-card-good {
    background: var(--rk-green-soft);
    border-color: #bfe5d8;
  }

  #rk-glazing-guide .rk-glz-card p:last-child,
  #rk-glazing-guide .rk-glz-note p:last-child,
  #rk-glazing-guide .rk-glz-answer p:last-child {
    margin-bottom: 0;
  }

  #rk-glazing-guide .rk-glz-card-number {
    align-items: center;
    background: var(--rk-dark);
    border-radius: 12px;
    color: #ffffff;
    display: inline-flex;
    font-size: 0.85rem;
    font-weight: 900;
    height: 38px;
    justify-content: center;
    margin-bottom: 14px;
    width: 38px;
  }

  #rk-glazing-guide .rk-glz-note {
    background: #ffffff;
    border-left: 5px solid var(--rk-blue);
    border-radius: 0 14px 14px 0;
    color: var(--rk-text);
    margin: 28px 0;
    padding: 20px 22px;
  }

  #rk-glazing-guide .rk-glz-note-warn {
    background: var(--rk-yellow-soft);
    border-left-color: var(--rk-yellow);
    color: #4d431f;
  }

  #rk-glazing-guide .rk-glz-note-risk {
    background: var(--rk-red-soft);
    border-left-color: var(--rk-orange);
    color: #512e29;
  }

  #rk-glazing-guide .rk-glz-formula {
    background: var(--rk-dark);
    border-radius: 18px;
    color: #ffffff;
    margin: 22px 0;
    overflow: hidden;
    padding: 24px;
  }

  #rk-glazing-guide .rk-glz-formula code {
    color: #79effa;
    display: block;
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
    font-size: clamp(1rem, 2.7vw, 1.35rem);
    font-weight: 800;
    line-height: 1.5;
    overflow-wrap: anywhere;
    white-space: normal;
  }

  #rk-glazing-guide .rk-glz-formula span {
    color: #bfd9e2;
    display: block;
    font-size: 0.8rem;
    margin-top: 9px;
  }

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

  #rk-glazing-guide .rk-glz-checklist li {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    color: var(--rk-text);
    margin: 0;
    padding: 15px 16px 15px 48px;
    position: relative;
  }

  #rk-glazing-guide .rk-glz-checklist li::before {
    align-items: center;
    background: var(--rk-green-soft);
    border-radius: 50%;
    color: var(--rk-green);
    content: "✓";
    display: flex;
    font-weight: 900;
    height: 26px;
    justify-content: center;
    left: 14px;
    position: absolute;
    top: 15px;
    width: 26px;
  }

  #rk-glazing-guide .rk-glz-table-wrap {
    margin: 26px 0;
    overflow: visible;
  }

  #rk-glazing-guide table {
    border-collapse: separate;
    border-spacing: 0;
    font-size: 0.88rem;
    width: 100%;
  }

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

  #rk-glazing-guide th {
    background: var(--rk-dark);
    color: #ffffff;
    font-weight: 850;
  }

  #rk-glazing-guide th:first-child {
    border-radius: 14px 0 0 0;
  }

  #rk-glazing-guide th:last-child {
    border-radius: 0 14px 0 0;
  }

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

  #rk-glazing-guide .rk-glz-visual {
    background: linear-gradient(145deg, #102536, #173e53);
    border-radius: 24px;
    color: #ffffff;
    margin-top: 28px;
    overflow: hidden;
    padding: clamp(20px, 4vw, 34px);
  }

  #rk-glazing-guide .rk-glz-visual-head {
    margin-bottom: 20px;
  }

  #rk-glazing-guide .rk-glz-visual-head h3 {
    color: #ffffff;
  }

  #rk-glazing-guide .rk-glz-visual-head p {
    color: #cce2e9;
    margin-bottom: 0;
    max-width: 880px;
  }

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

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

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

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

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

  #rk-glazing-guide .rk-glz-indicator-head {
    align-items: center;
    display: flex;
    gap: 12px;
    justify-content: space-between;
    margin-bottom: 10px;
  }

  #rk-glazing-guide .rk-glz-indicator-head span {
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 850;
  }

  #rk-glazing-guide .rk-glz-indicator-head output {
    background: #ffffff;
    border-radius: 999px;
    color: var(--rk-dark);
    flex: 0 0 auto;
    font-size: 0.76rem;
    font-weight: 900;
    padding: 5px 10px;
  }

  #rk-glazing-guide .rk-glz-indicator-track {
    background: #284d60;
    border-radius: 999px;
    height: 10px;
    overflow: hidden;
  }

  #rk-glazing-guide .rk-glz-indicator-fill {
    background: var(--rk-cyan);
    border-radius: inherit;
    display: block;
    height: 100%;
    transition: width 240ms ease, background-color 240ms ease;
  }

  #rk-glazing-guide .rk-glz-indicator-fill.is-alert {
    background: var(--rk-orange);
  }

  #rk-glazing-guide .rk-glz-indicator-fill.is-solar {
    background: var(--rk-yellow);
  }

  #rk-glazing-guide .rk-glz-indicator-scale {
    color: #a8cad3;
    display: flex;
    font-size: 0.68rem;
    justify-content: space-between;
    margin-top: 5px;
  }

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

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

  #rk-glazing-guide .rk-glz-viz-panel h4 {
    color: #ffffff;
  }

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

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

  #rk-glazing-guide .rk-glz-viz-canvas svg {
    display: block;
    height: auto;
    width: 100%;
  }

  #rk-glazing-guide .rk-glz-diagram-label,
  #rk-glazing-guide .rk-glz-diagram-small {
    fill: #17364a;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
    font-weight: 900;
  }

  #rk-glazing-guide .rk-glz-diagram-label {
    font-size: 14px;
  }

  #rk-glazing-guide .rk-glz-diagram-small {
    font-size: 12px;
    letter-spacing: 0.03em;
  }

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

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

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

  #rk-glazing-guide .rk-glz-result strong {
    color: #ffffff;
    display: block;
    font-size: 1.02rem;
    line-height: 1.25;
  }

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

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

  #rk-glazing-guide .rk-glz-tool-status.is-solar {
    background: rgba(232, 173, 44, 0.13);
    border-color: var(--rk-yellow);
  }

  #rk-glazing-guide .rk-glz-tool-status strong {
    color: #ffffff;
    display: block;
    margin-bottom: 4px;
  }

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

  #rk-glazing-guide .rk-glz-visual-caption {
    color: #accbd5;
    font-size: 0.76rem;
    margin: 16px 0 0;
  }

  #rk-glazing-guide .rk-glz-cta {
    background: linear-gradient(125deg, var(--rk-dark), #155d70);
    border-radius: 24px;
    color: #ffffff;
    margin: 34px 0 0;
    overflow: hidden;
    padding: clamp(28px, 5vw, 46px);
    position: relative;
  }

  #rk-glazing-guide .rk-glz-cta::after {
    border: 32px solid rgba(37, 199, 216, 0.12);
    border-radius: 50%;
    content: "";
    height: 180px;
    position: absolute;
    right: -70px;
    top: -76px;
    width: 180px;
  }

  #rk-glazing-guide .rk-glz-cta > * {
    position: relative;
    z-index: 1;
  }

  #rk-glazing-guide .rk-glz-cta-title {
    color: #ffffff;
    font-size: clamp(1.45rem, 3.4vw, 2.2rem);
    margin: 0 0 12px;
  }

  #rk-glazing-guide .rk-glz-cta p {
    color: #dceef2;
    max-width: 880px;
  }

  #rk-glazing-guide .rk-glz-cta-button {
    background: var(--rk-orange);
    border-radius: 14px;
    box-shadow: 0 12px 30px rgba(255, 106, 61, 0.24);
    color: #ffffff;
    display: inline-flex;
    font-weight: 900;
    justify-content: center;
    margin-top: 5px;
    padding: 14px 21px;
    text-decoration: none;
  }

  #rk-glazing-guide .rk-glz-cta-button:hover,
  #rk-glazing-guide .rk-glz-cta-button:focus-visible {
    background: #eb542b;
    color: #ffffff;
  }

  #rk-glazing-guide .rk-glz-steps {
    counter-reset: rk-glz-step;
    display: grid;
    gap: 16px;
    margin-top: 24px;
  }

  #rk-glazing-guide .rk-glz-step {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    counter-increment: rk-glz-step;
    padding: 22px 22px 22px 74px;
    position: relative;
  }

  #rk-glazing-guide .rk-glz-step::before {
    align-items: center;
    background: var(--rk-cyan);
    border-radius: 12px;
    color: var(--rk-dark);
    content: counter(rk-glz-step);
    display: flex;
    font-weight: 900;
    height: 42px;
    justify-content: center;
    left: 18px;
    position: absolute;
    top: 20px;
    width: 42px;
  }

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

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

  #rk-glazing-guide .rk-glz-faq summary {
    color: var(--rk-dark);
    cursor: pointer;
    font-weight: 850;
    list-style: none;
    padding: 19px 56px 19px 20px;
    position: relative;
  }

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

  #rk-glazing-guide .rk-glz-faq summary::after {
    color: var(--rk-blue);
    content: "+";
    font-size: 1.5rem;
    font-weight: 500;
    position: absolute;
    right: 20px;
    top: 10px;
  }

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

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

  #rk-glazing-guide .rk-glz-sources {
    font-size: 0.9rem;
  }

  #rk-glazing-guide .rk-glz-sources li {
    overflow-wrap: anywhere;
  }

  #rk-glazing-guide .rk-glz-author {
    background: var(--rk-soft);
    border-top: 1px solid var(--rk-line);
  }

  #rk-glazing-guide .rk-glz-author > input {
    position: absolute;
    opacity: 0;
    pointer-events: none;
  }

  #rk-glazing-guide .rk-glz-author-head {
    align-items: center;
    background: linear-gradient(120deg, var(--rk-dark), #16566a);
    color: #ffffff;
    display: flex;
    justify-content: space-between;
    padding: 30px clamp(22px, 7vw, 76px);
  }

  #rk-glazing-guide .rk-glz-author-title {
    color: #ffffff;
    font-size: clamp(1.65rem, 3.8vw, 2.45rem);
    margin: 0;
  }

  #rk-glazing-guide .rk-glz-author-head p {
    color: #cce2e9;
    margin: 7px 0 0;
  }

  #rk-glazing-guide .rk-glz-author-mark {
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 999px;
    color: #8df3fb;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    padding: 8px 13px;
    text-transform: uppercase;
  }

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

  #rk-glazing-guide .rk-glz-author-side {
    background: var(--rk-dark);
    color: #ffffff;
    padding: 34px;
    text-align: center;
  }

  #rk-glazing-guide .rk-glz-author-photo {
    border: 6px solid rgba(255, 255, 255, 0.18);
    border-radius: 50%;
    margin: 0 auto 18px;
    max-width: 178px;
    overflow: hidden;
  }

  #rk-glazing-guide .rk-glz-author-photo img {
    aspect-ratio: 1;
    object-fit: cover;
    width: 100%;
  }

  #rk-glazing-guide .rk-glz-author-name a {
    color: #ffffff;
    font-size: 1.35rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-glazing-guide .rk-glz-author-role {
    color: #bdd5dd;
    font-size: 0.82rem;
    line-height: 1.55;
    margin-top: 8px;
  }

  #rk-glazing-guide .rk-glz-author-social-label {
    color: #8eabb6;
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    margin-top: 26px;
    text-transform: uppercase;
  }

  #rk-glazing-guide .rk-glz-author-social {
    display: flex;
    gap: 10px;
    justify-content: center;
    margin-top: 12px;
  }

  #rk-glazing-guide .rk-glz-author-social a {
    align-items: center;
    border: 1px solid #416476;
    border-radius: 50%;
    color: #d7ebf0;
    display: flex;
    height: 48px;
    justify-content: center;
    text-decoration: none;
    width: 48px;
  }

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

  #rk-glazing-guide .rk-glz-author-social svg {
    height: 21px;
    width: 21px;
  }

  #rk-glazing-guide .rk-glz-author-main {
    padding: 34px clamp(24px, 5vw, 54px) 42px;
  }

  #rk-glazing-guide .rk-glz-author-quote {
    background: #ffffff;
    border: 1px solid var(--rk-line);
    border-radius: 17px;
    margin: 0 0 24px;
    padding: 24px 25px 20px 70px;
    position: relative;
  }

  #rk-glazing-guide .rk-glz-author-quote::before {
    color: var(--rk-cyan);
    content: "“";
    font-family: Georgia, serif;
    font-size: 4.6rem;
    left: 24px;
    line-height: 1;
    position: absolute;
    top: 11px;
  }

  #rk-glazing-guide .rk-glz-author-quote p {
    color: var(--rk-dark);
    font-weight: 800;
  }

  #rk-glazing-guide .rk-glz-author-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-bottom: 20px;
  }

  #rk-glazing-guide .rk-glz-author-tab {
    background: #e4eef2;
    border-radius: 999px;
    color: #607685;
    cursor: pointer;
    font-size: 0.76rem;
    font-weight: 850;
    padding: 9px 15px;
  }

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

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

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

  #rk-glazing-guide .rk-glz-site-links {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin-top: 16px;
  }

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

  #rk-glazing-guide .rk-glz-final-cta {
    background:
      radial-gradient(circle at 92% 110%, rgba(37, 199, 216, 0.18) 0 150px, transparent 151px),
      linear-gradient(125deg, #102536, #155d70);
    color: #ffffff;
    padding: clamp(42px, 7vw, 72px) clamp(24px, 7vw, 76px);
    text-align: center;
  }

  #rk-glazing-guide .rk-glz-final-cta .rk-glz-cta-title {
    margin-left: auto;
    margin-right: auto;
    max-width: 900px;
  }

  #rk-glazing-guide .rk-glz-final-cta p {
    color: #d9edf2;
    margin-left: auto;
    margin-right: auto;
    max-width: 860px;
  }

  @media (max-width: 920px) {
    #rk-glazing-guide .rk-glz-grid-3 {
      grid-template-columns: 1fr;
    }

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

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

  @media (max-width: 760px) {
    #rk-glazing-guide {
      font-size: 16px;
      overflow-wrap: anywhere;
    }

    #rk-glazing-guide .rk-glz-shell {
      border-radius: 18px;
    }

    #rk-glazing-guide .rk-glz-grid,
    #rk-glazing-guide .rk-glz-checklist,
    #rk-glazing-guide .rk-glz-indicators,
    #rk-glazing-guide .rk-glz-viz-grid,
    #rk-glazing-guide .rk-glz-author-layout {
      grid-template-columns: 1fr;
    }

    #rk-glazing-guide .rk-glz-author-head {
      align-items: flex-start;
      flex-direction: column;
      gap: 14px;
    }

    #rk-glazing-guide .rk-glz-author-side {
      padding: 30px 22px;
    }

    #rk-glazing-guide .rk-glz-author-main {
      padding: 28px 20px 34px;
    }

    #rk-glazing-guide .rk-glz-author-quote {
      padding: 58px 20px 18px;
    }

    #rk-glazing-guide .rk-glz-author-quote::before {
      left: 18px;
      top: 4px;
    }

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

    #rk-glazing-guide thead {
      border: 0;
      clip: rect(0 0 0 0);
      height: 1px;
      margin: -1px;
      overflow: hidden;
      padding: 0;
      position: absolute;
      width: 1px;
    }

    #rk-glazing-guide tbody {
      display: grid;
      gap: 14px;
    }

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

    #rk-glazing-guide td,
    #rk-glazing-guide tbody tr:nth-child(even) td {
      background: #ffffff;
      border-bottom: 1px solid var(--rk-line);
      display: grid;
      gap: 6px;
      grid-template-columns: minmax(105px, 0.85fr) minmax(0, 1.35fr);
      padding: 13px 15px;
    }

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

    #rk-glazing-guide td::before {
      color: var(--rk-muted);
      content: attr(data-label);
      font-size: 0.72rem;
      font-weight: 850;
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }

    #rk-glazing-guide .rk-glz-mode {
      width: 100%;
    }

    #rk-glazing-guide .rk-glz-diagram-label {
      font-size: 22px;
    }

    #rk-glazing-guide .rk-glz-diagram-small {
      font-size: 19px;
    }
  }

  @media (max-width: 470px) {
    #rk-glazing-guide .rk-glz-hero-title {
      font-size: clamp(2rem, 13vw, 3rem);
    }

    #rk-glazing-guide .rk-glz-toc a {
      border-radius: 12px;
      flex: 1 1 142px;
      justify-content: center;
      text-align: center;
    }

    #rk-glazing-guide .rk-glz-scenarios,
    #rk-glazing-guide .rk-glz-results {
      grid-template-columns: 1fr;
    }

    #rk-glazing-guide .rk-glz-card,
    #rk-glazing-guide .rk-glz-formula,
    #rk-glazing-guide .rk-glz-visual {
      padding: 18px;
    }

    #rk-glazing-guide .rk-glz-step {
      padding: 68px 18px 18px;
    }

    #rk-glazing-guide .rk-glz-step::before {
      left: 18px;
      top: 16px;
    }

    #rk-glazing-guide .rk-glz-cta-button {
      width: 100%;
    }

    #rk-glazing-guide .rk-glz-viz-panel {
      padding: 10px;
    }

    #rk-glazing-guide .rk-glz-indicators {
      padding: 14px;
    }

    #rk-glazing-guide .rk-glz-indicator-head {
      align-items: flex-start;
      flex-direction: column;
      gap: 7px;
    }

    #rk-glazing-guide .rk-glz-diagram-small {
      display: none;
    }
  }

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

<article id="rk-glazing-guide">
  <div class="rk-glz-shell">
    <header class="rk-glz-hero">
      <div class="rk-glz-hero-inner">
        <div class="rk-glz-eyebrow"><b aria-hidden="true"></b> DUŻE PRZESZKLENIA • AKTUALIZACJA 2026</div>
        <div class="rk-glz-hero-title">Podłogówka przy dużych oknach — <span>strefa brzegowa bez zgadywania</span></div>
        <p class="rk-glz-hero-lead">Duże przeszklenie nie oznacza automatycznie rur co 10 cm, pasa o szerokości 1,2 m ani osobnej pętli. Najpierw trzeba zestawić projektową stratę ciepła pomieszczenia z mocą rzeczywiście dostępnej powierzchni podłogi.</p>
        <div class="rk-glz-hero-tags" aria-label="Zakres poradnika">
          <span>okna HS i HST</span>
          <span>strefa brzegowa</span>
          <span>rozstaw rur</span>
          <span>mostek przy progu</span>
          <span>zyski słoneczne</span>
        </div>
        <div class="rk-glz-meta">
          <span>Autor: <strong>Robert Kucharski</strong></span>
          <span>Czas czytania: <strong>około 22 minuty</strong></span>
          <span>Aktualizacja techniczna: <strong>9 września 2026 r.</strong></span>
        </div>
      </div>
    </header>

    <nav class="rk-glz-toc" aria-label="Nawigacja po artykule">
      <span class="rk-glz-toc-label">Na skróty — wszystkie H2</span>
      <a href="#rk-glz-answer">Szybka odpowiedź</a>
      <a href="#rk-glz-physics">Co zmienia przeszklenie</a>
      <a href="#rk-glz-data">Dane do projektu</a>
      <a href="#rk-glz-method">Jak liczyć</a>
      <a href="#rk-glz-visual">Animowany przekrój</a>
      <a href="#rk-glz-edge">Strefa brzegowa</a>
      <a href="#rk-glz-spacing">Rozstaw rur</a>
      <a href="#rk-glz-loop">Osobna pętla</a>
      <a href="#rk-glz-threshold">Próg i mostek</a>
      <a href="#rk-glz-finishes">Okładzina</a>
      <a href="#rk-glz-solar">Słońce i sterowanie</a>
      <a href="#rk-glz-emitter">Dodatkowy odbiornik</a>
      <a href="#rk-glz-hydraulics">Hydraulika</a>
      <a href="#rk-glz-errors">Błędy</a>
      <a href="#rk-glz-checklist">Checklista</a>
      <a href="#rk-glz-faq">FAQ</a>
      <a href="#rk-glz-sources">Źródła</a>
      <a href="#rk-glz-author">Autor</a>
    </nav>

    <main>
      <section class="rk-glz-section" id="rk-glz-answer">
        <span class="rk-glz-kicker">Odpowiedź w 30 sekund</span>
        <h2>Czy duże przeszklenie zawsze wymaga strefy brzegowej?</h2>
        <p class="rk-glz-lead"><strong>Nie.</strong> Strefa brzegowa jest rozwiązaniem projektowym, a nie obowiązkowym dodatkiem do każdego okna tarasowego. Może być potrzebna, gdy lokalne obciążenie jest duże, powierzchnia czynna mała albo standardowy wariant podłogi nie pokrywa zapotrzebowania przy założonej temperaturze wody.</p>
        <div class="rk-glz-answer">
          <p><strong>Właściwa kolejność:</strong> policz stratę ciepła pomieszczenia, określ powierzchnię czynną, sprawdź możliwą moc podłogi, a dopiero później wybierz rozstaw, szerokość ewentualnej strefy i podział pętli.</p>
        </div>
        <div class="rk-glz-grid rk-glz-grid-3">
          <article class="rk-glz-card rk-glz-card-good">
            <span class="rk-glz-card-number">1</span>
            <h3>Może wystarczyć zwykły układ</h3>
            <p>Jeżeli całe pomieszczenie bilansuje się przy bezpiecznej temperaturze powierzchni, nie trzeba tworzyć strefy tylko dlatego, że okno jest szerokie.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-accent">
            <span class="rk-glz-card-number">2</span>
            <h3>Może pomóc zagęszczenie</h3>
            <p>Gęstszy rozstaw może zwiększyć lokalną wydajność i równomierność temperatury, lecz musi zostać sprawdzony dla konkretnej konstrukcji podłogi.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-warn">
            <span class="rk-glz-card-number">3</span>
            <h3>Podłoga może nie wystarczyć</h3>
            <p>Gdy moc wymagana przewyższa możliwą emisję, trzeba ograniczyć straty albo zastosować dodatkową powierzchnię grzewczą lub odbiornik.</p>
          </article>
        </div>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-physics">
        <span class="rk-glz-kicker">Fizyka bez mitów</span>
        <h2>Co naprawdę zmienia duże przeszklenie?</h2>
        <p class="rk-glz-lead">Okno zwykle izoluje słabiej niż dobrze ocieplona ściana. Przy niskiej temperaturze zewnętrznej jego powierzchnia od strony pomieszczenia może być chłodniejsza, co wpływa zarówno na bilans ciepła, jak i na odczuwany komfort w pobliżu fasady.</p>
        <div class="rk-glz-grid">
          <article class="rk-glz-card">
            <h3>Strata przez przenikanie</h3>
            <p>Rośnie wraz z powierzchnią okna, jego współczynnikiem <code>U<sub>w</sub></code> i projektową różnicą temperatur. Do bilansu pomieszczenia dochodzą pozostałe przegrody oraz wentylacja i infiltracja.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Mostek w miejscu montażu</h3>
            <p>Próg, rama i połączenie z warstwami podłogi mogą tworzyć dodatkową stratę liniową. Nie da się jej wiarygodnie zastąpić jednym procentowym narzutem dla wszystkich budynków.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Lokalny komfort</h3>
            <p>Chłodniejsza pionowa powierzchnia może zwiększać asymetrię promieniowania i wywoływać ruch powietrza przy szybie. Termostat w głębi salonu nie opisuje tych zjawisk.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Zyski słoneczne</h3>
            <p>W słoneczny dzień przeszklenie może dostarczać dużo energii i powodować przegrzewanie. Nie oznacza to jednak, że zysk będzie dostępny podczas mroźnej nocy obliczeniowej.</p>
          </article>
        </div>
        <div class="rk-glz-note rk-glz-note-warn">
          <p><strong>Ważne:</strong> temperatura powietrza 22°C nie gwarantuje takiego samego komfortu w każdym miejscu pokoju. Standard komfortu cieplnego rozpatruje również lokalne czynniki dyskomfortu, w tym asymetrię promieniowania, przeciąg i temperaturę podłogi.</p>
        </div>
      </section>

      <section class="rk-glz-section" id="rk-glz-data">
        <span class="rk-glz-kicker">Wejście do obliczeń</span>
        <h2>Jakie dane trzeba znać przed wyborem rozstawu przy oknie?</h2>
        <p class="rk-glz-lead">Sama informacja „mam sześć metrów przeszklenia” nie wystarcza. Wiarygodna ocena wymaga danych o budynku, oknie, podłodze i instalacji.</p>
        <ul class="rk-glz-checklist">
          <li><strong>Wymiary całego okna</strong> i podział na szyby, ramy oraz elementy nieprzezroczyste.</li>
          <li><strong>Wartość U<sub>w</sub></strong> dla całego okna, a nie wyłącznie U<sub>g</sub> pakietu szybowego.</li>
          <li><strong>Projektowa temperatura zewnętrzna</strong> właściwa dla lokalizacji budynku.</li>
          <li><strong>Temperatura wewnętrzna</strong> przyjęta dla konkretnego pomieszczenia.</li>
          <li><strong>Detal progu i montażu</strong>, w tym materiał podparcia i liniowy mostek cieplny.</li>
          <li><strong>Szczelność budynku</strong>, wentylacja oraz możliwa infiltracja przy drzwiach tarasowych.</li>
          <li><strong>Powierzchnia czynna podłogi</strong> po odjęciu zabudowy i wyłączonych fragmentów.</li>
          <li><strong>Opór cieplny okładziny</strong> razem z podkładem, klejem i pozostałymi warstwami.</li>
          <li><strong>Konstrukcja podłogi</strong>, położenie rury, rodzaj i grubość jastrychu.</li>
          <li><strong>Temperatura zasilania i powrotu</strong> oraz docelowa temperatura pomieszczenia.</li>
          <li><strong>Geometria pętli</strong>, długość dobiegów i położenie rozdzielacza.</li>
          <li><strong>Orientacja fasady i osłony</strong>, potrzebne do oceny ryzyka przegrzewania latem i w okresach przejściowych.</li>
        </ul>
        <p class="rk-glz-copy" style="margin-top:26px">Jeżeli nie masz jeszcze obliczeń dla poszczególnych pomieszczeń, zacznij od poradnika wyjaśniającego, <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">jak oblicza się straty cieplne w budynku</a>. Uproszczony <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">kalkulator strat ciepła</a> może pomóc zrozumieć składniki bilansu, ale nie zastępuje projektu pomieszczenie po pomieszczeniu.</p>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-method">
        <span class="rk-glz-kicker">Kolejność obliczeń</span>
        <h2>Jak sprawdzić, czy podłogówka pokryje obciążenie przy dużym oknie?</h2>
        <p class="rk-glz-lead">Najpierw liczymy całe pomieszczenie. Dopiero później analizujemy, czy w części przy fasadzie występuje lokalne ryzyko dyskomfortu i czy warto inaczej rozłożyć moc.</p>

        <h3>1. Strata przez całe okno</h3>
        <div class="rk-glz-formula">
          <code>Q<sub>okna</sub> = U<sub>w</sub> × A<sub>okna</sub> × ΔT</code>
          <span>Q w W, U<sub>w</sub> w W/(m²K), powierzchnia w m², różnica temperatur w K.</span>
        </div>

        <h3>2. Strata liniowa w miejscu połączenia</h3>
        <div class="rk-glz-formula">
          <code>Q<sub>ψ</sub> = ψ × l × ΔT</code>
          <span>Współczynnik ψ oraz długość połączenia powinny odpowiadać rzeczywistemu detalowi montażowemu.</span>
        </div>

        <h3>3. Wymagana moc z powierzchni czynnej</h3>
        <div class="rk-glz-formula">
          <code>q<sub>wym</sub> = Q<sub>pomieszczenia</sub> ÷ A<sub>czynna</sub></code>
          <span>Powierzchnia czynna nie jest automatycznie równa całej powierzchni salonu.</span>
        </div>

        <h3>4. Porównanie z charakterystyką konkretnej podłogi</h3>
        <p class="rk-glz-copy">Wymaganą moc zestawiamy z wydajnością systemu przy określonym rozstawie, średniej temperaturze wody, temperaturze pomieszczenia, konstrukcji jastrychu i oporze okładziny. Właśnie dlatego uniwersalne tabele typu „10 cm daje 140 W/m²” są mylące. Metodyka <a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021</a> wiąże strumień ciepła z modelem systemu i warunkami temperaturowymi.</p>

        <div class="rk-glz-note rk-glz-note-risk">
          <p><strong>Nie dodajemy automatycznego „30% na bryzę”.</strong> Ruch chłodniejszego powietrza i asymetria promieniowania są ważne dla komfortu, ale nie tworzą uniwersalnego procentowego dodatku do straty przez każde okno.</p>
        </div>
      </section>

      <section class="rk-glz-section rk-glz-section-dark" id="rk-glz-visual">
        <span class="rk-glz-kicker">Model edukacyjny</span>
        <h2>Jak podłogówka pracuje przy dużym przeszkleniu?</h2>
        <p class="rk-glz-lead" style="color:#d7eaf0">Przełącz scenariusz i obserwuj prosty przekrój przy fasadzie. Model pokazuje zależności, ale nie dobiera rozstawu rur i nie zastępuje obliczeń pomieszczenia.</p>

        <div class="rk-glz-visual">
          <div class="rk-glz-visual-head">
            <h3>Porównaj cztery sytuacje przy dużym oknie</h3>
            <p>Rysunek jest celowo uproszczony. Pokazuje kierunek zjawisk i logikę decyzji projektowej, a nie wartości w watach ani gotowy układ rur.</p>
          </div>

          <div class="rk-glz-scenarios" role="group" aria-label="Wybierz scenariusz modelu">
            <button class="rk-glz-mode is-active" type="button" data-rk-glz-mode="night" aria-pressed="true">Mroźna noc</button>
            <button class="rk-glz-mode" type="button" data-rk-glz-mode="edge" aria-pressed="false">Obliczona strefa</button>
            <button class="rk-glz-mode" type="button" data-rk-glz-mode="deficit" aria-pressed="false">Niedobór mocy</button>
            <button class="rk-glz-mode" type="button" data-rk-glz-mode="solar" aria-pressed="false">Słoneczny dzień</button>
          </div>

          <div class="rk-glz-indicators" aria-label="Poglądowe wskaźniki wybranego scenariusza">
            <div class="rk-glz-indicator">
              <div class="rk-glz-indicator-head"><span>Oddziaływanie chłodniejszej szyby</span><output id="rk-glz-cold-output">duże</output></div>
              <div class="rk-glz-indicator-track" role="img" aria-label="Poglądowa intensywność wpływu chłodniejszej szyby"><span class="rk-glz-indicator-fill" id="rk-glz-cold-fill" style="width:88%"></span></div>
              <div class="rk-glz-indicator-scale"><span>małe</span><span>średnie</span><span>duże</span></div>
            </div>
            <div class="rk-glz-indicator">
              <div class="rk-glz-indicator-head"><span>Relacja emisji podłogi do potrzeby</span><output id="rk-glz-balance-output">nieustalona</output></div>
              <div class="rk-glz-indicator-track" role="img" aria-label="Poglądowa relacja emisji podłogi do bieżącej potrzeby"><span class="rk-glz-indicator-fill" id="rk-glz-balance-fill" style="width:52%"></span></div>
              <div class="rk-glz-indicator-scale"><span>niedobór</span><span>bilans</span><span>nadwyżka</span></div>
            </div>
          </div>

          <div class="rk-glz-viz-grid">
            <div class="rk-glz-viz-panel">
              <h4>Przekrój przy fasadzie</h4>
              <p>Kolory pokazują względne kierunki oddziaływania szyby i ogrzewanej podłogi.</p>
              <div class="rk-glz-viz-canvas">
                <svg id="rk-glz-cross-svg" viewBox="0 0 620 420" role="img" aria-labelledby="rk-glz-cross-title rk-glz-cross-desc">
                  <title id="rk-glz-cross-title">Poglądowy przekrój ogrzewania podłogowego przy dużym oknie</title>
                  <desc id="rk-glz-cross-desc">Uproszczony przekrój pokazujący szybę, podłogę, ruch chłodniejszego powietrza, ciepło z podłogi, strefę brzegową, zysk słoneczny i możliwy dodatkowy odbiornik.</desc>
                  <rect width="620" height="420" fill="#f7fbfc"></rect>
                  <rect x="28" y="46" width="128" height="274" rx="10" fill="#d9eff5"></rect>
                  <rect x="156" y="46" width="18" height="274" rx="3" fill="#173e53"></rect>
                  <rect x="180" y="46" width="28" height="274" rx="4" fill="#9fd6e4" stroke="#ffffff" stroke-width="5"></rect>
                  <rect x="208" y="46" width="384" height="274" fill="#eef8fb"></rect>
                  <text x="48" y="32" class="rk-glz-diagram-label">ZEWNĄTRZ</text>
                  <text x="458" y="32" class="rk-glz-diagram-label">WNĘTRZE</text>

                  <rect x="28" y="320" width="564" height="28" fill="#dfcdb9"></rect>
                  <rect x="28" y="348" width="564" height="38" fill="#d8e7ec"></rect>
                  <rect x="28" y="386" width="564" height="18" fill="#6f7f87"></rect>

                  <g id="rk-glz-cross-edge" visibility="hidden">
                    <rect x="208" y="302" width="168" height="62" fill="#fff0e9" stroke="#ff9b79" stroke-width="2" opacity="0.78"></rect>
                    <circle cx="226" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <circle cx="264" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <circle cx="302" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <circle cx="340" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <path d="M232 296 C232 250 244 220 260 188" fill="none" stroke="#ff6a3d" stroke-width="8" stroke-linecap="round"></path>
                    <path d="M294 296 C294 244 306 213 324 178" fill="none" stroke="#ff6a3d" stroke-width="8" stroke-linecap="round"></path>
                  </g>

                  <g id="rk-glz-cross-standard">
                    <circle cx="386" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <circle cx="474" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <circle cx="562" cy="344" r="10" fill="#ff6a3d" stroke="#ffffff" stroke-width="3"></circle>
                    <path d="M386 306 C386 258 392 226 404 190" fill="none" stroke="#ff6a3d" stroke-width="8" stroke-linecap="round"></path>
                    <path d="M474 306 C474 258 480 226 492 190" fill="none" stroke="#ff6a3d" stroke-width="8" stroke-linecap="round"></path>
                    <path d="M562 306 C562 258 568 226 580 190" fill="none" stroke="#ff6a3d" stroke-width="8" stroke-linecap="round"></path>
                  </g>

                  <g id="rk-glz-cross-cold">
                    <path d="M224 82 C270 138 264 218 228 286" fill="none" stroke="#078fbe" stroke-width="10" stroke-linecap="round"></path>
                    <path d="M252 104 C286 158 280 218 252 264" fill="none" stroke="#25c7d8" stroke-width="7" stroke-linecap="round"></path>
                    <path d="M218 280 L228 300 L239 280 Z" fill="#078fbe"></path>
                  </g>

                  <g id="rk-glz-cross-emitter" visibility="hidden">
                    <rect x="218" y="300" width="156" height="22" rx="6" fill="#6659c7"></rect>
                    <line x1="240" y1="305" x2="240" y2="317" stroke="#ffffff" stroke-width="3"></line>
                    <line x1="276" y1="305" x2="276" y2="317" stroke="#ffffff" stroke-width="3"></line>
                    <line x1="312" y1="305" x2="312" y2="317" stroke="#ffffff" stroke-width="3"></line>
                    <line x1="348" y1="305" x2="348" y2="317" stroke="#ffffff" stroke-width="3"></line>
                    <path d="M260 288 C252 246 266 212 290 184" fill="none" stroke="#6659c7" stroke-width="8" stroke-linecap="round"></path>
                    <path d="M334 288 C328 248 340 218 362 192" fill="none" stroke="#6659c7" stroke-width="8" stroke-linecap="round"></path>
                  </g>

                  <g id="rk-glz-cross-sun" visibility="hidden">
                    <circle cx="88" cy="104" r="34" fill="#e8ad2c"></circle>
                    <path d="M122 122 L366 278" fill="none" stroke="#e8ad2c" stroke-width="8" stroke-linecap="round" opacity="0.72"></path>
                    <path d="M126 90 L398 218" fill="none" stroke="#e8ad2c" stroke-width="8" stroke-linecap="round" opacity="0.58"></path>
                  </g>
                </svg>
              </div>
            </div>

          </div>

          <div class="rk-glz-results" aria-live="polite">
            <div class="rk-glz-result"><span>Scenariusz</span><strong id="rk-glz-result-mode">Mroźna noc</strong></div>
            <div class="rk-glz-result"><span>Strefa przy oknie</span><strong id="rk-glz-result-edge">nie z automatu</strong></div>
            <div class="rk-glz-result"><span>Dodatkowy odbiornik</span><strong id="rk-glz-result-emitter">brak decyzji</strong></div>
            <div class="rk-glz-result"><span>Priorytet</span><strong id="rk-glz-result-priority">bilans pomieszczenia</strong></div>
          </div>

          <div class="rk-glz-tool-status" id="rk-glz-tool-status" aria-live="polite"><strong id="rk-glz-status-title">Co pokazuje ten wariant?</strong> <span id="rk-glz-status-text">Brak słońca ujawnia projektowe obciążenie. Chłodniejsza powierzchnia może pogarszać komfort przy fasadzie, ale sama szerokość okna nie wyznacza jeszcze rozstawu rur.</span></div>
          <p class="rk-glz-tool-note">Model jakościowy. Wskaźniki nie są procentami obliczeniowymi, rysunki nie odwzorowują konkretnej geometrii pętli, a przedstawione zagęszczenie nie stanowi rekomendacji rozstawu. Decyzję podejmuje się po obliczeniu straty pomieszczenia, mocy czynnej powierzchni podłogi i hydrauliki obwodów.</p>
        </div>

        <aside class="rk-glz-cta" aria-label="Indywidualny projekt strefy przy dużych przeszkleniach">
          <div class="rk-glz-kicker" style="color:#7beaf4">Od modelu do konkretnego rzutu</div>
          <div class="rk-glz-cta-title">Sprawdź strefę przy oknach na podstawie rzeczywistych danych budynku</div>
          <p>Model pokazuje mechanizm, ale nie zna U<sub>w</sub> okna, mostka przy progu, temperatury obliczeniowej, powierzchni czynnej ani oporu planowanej posadzki. Dopiero obliczenie pomieszczenia pokaże, czy wystarczy standardowy rozstaw, potrzebna jest strefa brzegowa, osobna pętla lub dodatkowy odbiornik.</p>
          <a class="rk-glz-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki z obliczoną strefą przy oknach</a>
        </aside>
      </section>

      <section class="rk-glz-section" id="rk-glz-edge">
        <span class="rk-glz-kicker">Decyzja projektowa</span>
        <h2>Kiedy strefa brzegowa przy oknie ma sens?</h2>
        <p class="rk-glz-lead">Strefa brzegowa ma sens wtedy, gdy pomaga rozwiązać konkretny problem wykazany w obliczeniach. Nie tworzymy jej na podstawie samego wyglądu fasady ani nazwy źródła ciepła.</p>

        <div class="rk-glz-grid">
          <article class="rk-glz-card rk-glz-card-good">
            <h3>Strefa może być zbędna</h3>
            <ul>
              <li>okno ma dobre parametry i poprawny montaż,</li>
              <li>strata całego pomieszczenia jest niewielka,</li>
              <li>dostępna jest duża powierzchnia czynna,</li>
              <li>standardowy wariant podłogi pokrywa obciążenie,</li>
              <li>temperatura powierzchni pozostaje w przyjętym zakresie.</li>
            </ul>
          </article>
          <article class="rk-glz-card rk-glz-card-accent">
            <h3>Strefę warto przeanalizować</h3>
            <ul>
              <li>fasada ma dużą powierzchnię i lokalnie wysoką stratę,</li>
              <li>przy oknie pozostaje mało aktywnej podłogi,</li>
              <li>okładzina ogranicza możliwą emisję,</li>
              <li>występuje wyraźny mostek przy progu,</li>
              <li>istotny jest komfort bezpośrednio przy przeszkleniu.</li>
            </ul>
          </article>
        </div>

        <h3 style="margin-top:30px">Jak szeroka powinna być strefa?</h3>
        <p class="rk-glz-copy">Nie ma jednej obowiązkowej szerokości 1,0 lub 1,2 m dla każdego okna. Szerokość powinna wynikać z geometrii pomieszczenia, układu pętli, powierzchni dostępnej przed fasadą i sposobu rozłożenia wymaganej mocy. W jednym projekcie będzie to węższy pas, w innym większa część salonu, a w kolejnym oddzielna strefa nie będzie potrzebna.</p>
        <p class="rk-glz-copy">Przed podjęciem decyzji warto porównać warianty opisane w artykule <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur 10 czy 15 cm</a>. Kluczowe jest porównanie ich przy tych samych temperaturach, tej samej konstrukcji podłogi i tym samym oporze okładziny.</p>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-spacing">
        <span class="rk-glz-kicker">Bez automatycznych recept</span>
        <h2>Jaki rozstaw rur zastosować przy dużych oknach?</h2>
        <p class="rk-glz-lead">Rozstaw może wynosić 10, 15 lub 20 cm, a w szczególnych systemach także inną wartość. Nie wybieramy go jednak z samej informacji, że w salonie znajduje się okno panoramiczne.</p>

        <div class="rk-glz-table-wrap">
          <table>
            <thead>
              <tr>
                <th>Wariant</th>
                <th>Co może zmienić</th>
                <th>Czego nie rozstrzyga</th>
                <th>Co trzeba sprawdzić</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Wariant"><strong>Rozstaw 20 cm</strong></td>
                <td data-label="Możliwy wpływ">Mniej rury i mniejsza równomierność temperatury powierzchni.</td>
                <td data-label="Nie rozstrzyga">Nie oznacza automatycznie niedogrzania.</td>
                <td data-label="Sprawdzenie">Moc dla konkretnej temperatury wody i podłogi.</td>
              </tr>
              <tr>
                <td data-label="Wariant"><strong>Rozstaw 15 cm</strong></td>
                <td data-label="Możliwy wpływ">Częsty kompromis między ilością rury, mocą i równomiernością.</td>
                <td data-label="Nie rozstrzyga">Nie jest uniwersalnym optimum przy każdym oknie.</td>
                <td data-label="Sprawdzenie">Bilans pomieszczenia i powierzchnia czynna.</td>
              </tr>
              <tr>
                <td data-label="Wariant"><strong>Rozstaw 10 cm</strong></td>
                <td data-label="Możliwy wpływ">Więcej rury i możliwość większej emisji przy tych samych warunkach.</td>
                <td data-label="Nie rozstrzyga">Nie uratuje podłogi o zbyt małej powierzchni lub wysokim oporze.</td>
                <td data-label="Sprawdzenie">Temperatura powierzchni, długości pętli i hydraulika.</td>
              </tr>
            </tbody>
          </table>
        </div>

        <div class="rk-glz-note">
          <p><strong>Podłoga nie wie, skąd pochodzi ciepła woda.</strong> Przy tej samej temperaturze zasilania i powrotu zachowuje się podobnie niezależnie od tego, czy współpracuje z pompą ciepła, kotłem czy innym źródłem.</p>
        </div>
        <p class="rk-glz-copy">Więcej o zależności między temperaturą, konstrukcją i rozstawem znajdziesz w opracowaniu o <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawie rur w wodnym ogrzewaniu podłogowym</a>. Praktyczne konsekwencje różnych podziałek wyjaśnia również poradnik <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/">jak gęsto rozkładać podłogówkę</a>.</p>
      </section>

      <section class="rk-glz-section" id="rk-glz-loop">
        <span class="rk-glz-kicker">Podział obwodów</span>
        <h2>Czy strefa przyokienna powinna mieć osobną pętlę?</h2>
        <p class="rk-glz-lead">Osobna pętla może ułatwić projektowanie, regulację i późniejszą kontrolę strefy, ale nie jest obowiązkowa po przekroczeniu umownej długości okna. Decyzję podejmujemy na podstawie całej geometrii instalacji.</p>

        <div class="rk-glz-grid">
          <article class="rk-glz-card rk-glz-card-accent">
            <h3>Kiedy osobny obwód pomaga?</h3>
            <ul>
              <li>strefa ma wyraźnie inne obciążenie niż reszta salonu,</li>
              <li>potrzebny jest inny przepływ lub sposób regulacji,</li>
              <li>wydzielenie pozwala utrzymać rozsądne długości pętli,</li>
              <li>geometria umożliwia logiczne pokrycie pasa przy fasadzie.</li>
            </ul>
          </article>
          <article class="rk-glz-card">
            <h3>Kiedy jedna pętla może wystarczyć?</h3>
            <ul>
              <li>lokalna różnica obciążenia jest niewielka,</li>
              <li>cały obwód ma prawidłową długość i przepływ,</li>
              <li>zróżnicowany rozstaw nie powoduje przekroczenia ograniczeń,</li>
              <li>całe pomieszczenie może być sterowane jako jedna strefa.</li>
            </ul>
          </article>
        </div>

        <div class="rk-glz-note rk-glz-note-warn">
          <p><strong>Rotametr reguluje cały obwód.</strong> Jeżeli na jednej pętli występują dwa rozstawy, nie można osobno zmienić przepływu tylko w pasie przy oknie. Nie oznacza to jednak, że taka pętla jest z definicji niemożliwa do zrównoważenia.</p>
        </div>
        <p class="rk-glz-copy">Podział trzeba zestawić z <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalną długością pętli ogrzewania podłogowego</a> i rzeczywistą długością dobiegów. Sam metraż pomieszczenia nie określa jeszcze liczby obwodów, co szerzej pokazuje poradnik <a href="https://projekt-ogrzewania.pl/salon-ile-petli-podlogowki/">ile pętli podłogówki zaplanować w salonie</a>.</p>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-threshold">
        <span class="rk-glz-kicker">Detal budowlany</span>
        <h2>Próg okna HS lub HST, izolacja i mostek cieplny</h2>
        <p class="rk-glz-lead">Ogrzewanie podłogowe nie naprawi źle zaprojektowanego montażu dużego okna. Próg musi mieć ciągłość izolacji, szczelność i podparcie dostosowane do rzeczywistych obciążeń konstrukcji.</p>

        <div class="rk-glz-grid rk-glz-grid-3">
          <article class="rk-glz-card">
            <h3>Nośność</h3>
            <p>Materiał i sposób podparcia dobiera się do ciężaru okna, układu podpór i wymagań konstrukcyjnych. Sama nazwa EPS albo XPS nie rozstrzyga poprawności detalu.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Ciągłość cieplna</h3>
            <p>Połączenie progu z fundamentem i warstwami podłogi powinno ograniczać mostek liniowy. Potrzebny jest konkretny przekrój, a nie uniwersalny pas materiału.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Szczelność i wilgoć</h3>
            <p>Warstwy uszczelniające trzeba połączyć z hydroizolacją i izolacją powietrzną budynku zgodnie z projektem przegrody i warunkami montażu.</p>
          </article>
        </div>

        <div class="rk-glz-note rk-glz-note-risk">
          <p><strong>Nie przepisujemy automatycznie XPS 300.</strong> Wytrzymałość, grubość i szerokość elementu pod progiem muszą wynikać z obciążenia oraz detalu konstrukcyjno-cieplnego. Przypadkowa zmiana materiału może poprawić jeden parametr i jednocześnie zepsuć inny.</p>
        </div>
        <p class="rk-glz-copy">Ogólne wymagania dotyczące izolacyjności budynku wynikają z obowiązujących <a href="https://eli.gov.pl/eli/DU/2022/1225/ogl" target="_blank" rel="nofollow noopener noreferrer">Warunków Technicznych</a>, ale detal montażu konkretnego progu nadal wymaga dokumentacji projektowej. Warstwy pod ogrzewaniem warto jednocześnie skonfrontować z opracowaniem <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/">ile izolacji przewidzieć pod ogrzewaniem podłogowym</a>.</p>
      </section>

      <section class="rk-glz-section" id="rk-glz-finishes">
        <span class="rk-glz-kicker">Droga ciepła do pomieszczenia</span>
        <h2>Płytki, panele i drewno w strefie przy dużym oknie</h2>
        <p class="rk-glz-lead">Materiał wykończeniowy wpływa na możliwą moc podłogi, ale nie powinien być oceniany tylko po nazwie. Liczy się deklarowany opór całego zestawu i dopuszczalna temperatura użytkowania.</p>

        <div class="rk-glz-table-wrap">
          <table>
            <thead>
              <tr>
                <th>Wykończenie</th>
                <th>Najważniejsza zaleta</th>
                <th>Co może ograniczać projekt</th>
                <th>Co sprawdzić</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td data-label="Wykończenie"><strong>Płytki lub kamień</strong></td>
                <td data-label="Zaleta">Zwykle niski opór cieplny całej warstwy.</td>
                <td data-label="Ograniczenie">Klej, dylatacje i wymagania jastrychu.</td>
                <td data-label="Sprawdzenie">Cały przekrój, nie tylko samą płytkę.</td>
              </tr>
              <tr>
                <td data-label="Wykończenie"><strong>Panele winylowe</strong></td>
                <td data-label="Zaleta">Mogą tworzyć cienki zestaw o niewielkim oporze.</td>
                <td data-label="Ograniczenie">Limit temperatury, klej lub podkład.</td>
                <td data-label="Sprawdzenie">Deklarację konkretnego produktu i montażu.</td>
              </tr>
              <tr>
                <td data-label="Wykończenie"><strong>Panele laminowane</strong></td>
                <td data-label="Zaleta">Dostępne są zestawy przeznaczone na podłogówkę.</td>
                <td data-label="Ograniczenie">Podkład może istotnie zwiększyć opór.</td>
                <td data-label="Sprawdzenie">Łączny opór panelu i podkładu.</td>
              </tr>
              <tr>
                <td data-label="Wykończenie"><strong>Drewno</strong></td>
                <td data-label="Zaleta">Może być stosowane po prawidłowym zaprojektowaniu.</td>
                <td data-label="Ograniczenie">Opór, wilgotność i dopuszczalna temperatura.</td>
                <td data-label="Sprawdzenie">Instrukcję producenta oraz warunki eksploatacji.</td>
              </tr>
            </tbody>
          </table>
        </div>

        <p class="rk-glz-copy">Nie będziemy pisać, że każdy grubszy parkiet jest zakazany ani że każdy LVT pozostaje całkowicie stabilny. Zależność pomiędzy oporem warstw i wydajnością wyjaśnia artykuł <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">jak okładzina wpływa na wydajność ogrzewania podłogowego</a>. Porównanie praktyczne znajduje się również w poradniku <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">panele czy płytki na ogrzewanie podłogowe</a>.</p>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-solar">
        <span class="rk-glz-kicker">Dwie różne sytuacje</span>
        <h2>Zyski słoneczne, bezwładność podłogi i sterowanie</h2>
        <p class="rk-glz-lead">Duże przeszklenie może zwiększać zimową stratę przez przenikanie, a kilka godzin później dostarczać do pomieszczenia intensywny zysk słoneczny. Oba zjawiska trzeba rozpatrywać oddzielnie.</p>

        <div class="rk-glz-grid">
          <article class="rk-glz-card rk-glz-card-accent">
            <h3>Mroźna noc obliczeniowa</h3>
            <p>Brak promieniowania słonecznego ujawnia projektowe obciążenie. To właśnie w takim stanie system ma utrzymać założoną temperaturę wewnętrzną.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-warn">
            <h3>Słoneczny dzień</h3>
            <p>Zysk przechodzący przez szybę może szybko podnieść temperaturę operacyjną. Posadzka nadal oddaje jednak energię zgromadzoną wcześniej w jastrychu.</p>
          </article>
        </div>

        <p class="rk-glz-copy">Zamknięcie siłownika nie chłodzi natychmiast podłogi. Dlatego lepszy efekt daje połączenie możliwie niskiej temperatury wody, prawidłowej krzywej grzewczej, rozsądnej regulacji pokojowej oraz skutecznych osłon przeciwsłonecznych. O roli temperatury źródła przeczytasz w poradniku o <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalnej temperaturze zasilania podłogówki</a>, a praktyczne ustawienie opisuje artykuł o <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowaniu pogodowym</a>.</p>
        <p class="rk-glz-copy">Czujnik temperatury powietrza umieszczony w bezpośredniej plamie słonecznej będzie przekazywał informację reprezentującą tylko fragment pomieszczenia. Zasady lokalizacji i ograniczeń regulatorów omawia poradnik <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostat w ogrzewaniu podłogowym</a>.</p>
        <div class="rk-glz-note">
          <p>Okna wpływają jednocześnie na przenikanie ciepła, dostęp światła i zyski słoneczne. Zależność tę opisuje również program badawczy <a href="https://www.energy.gov/cmei/buildings/windows" target="_blank" rel="nofollow noopener noreferrer">Windows Departamentu Energii USA</a>.</p>
        </div>
      </section>

      <section class="rk-glz-section" id="rk-glz-emitter">
        <span class="rk-glz-kicker">Granica możliwości podłogi</span>
        <h2>Kiedy rozważyć konwektor kanałowy lub inny odbiornik?</h2>
        <p class="rk-glz-lead">Dodatkowy odbiornik nie staje się konieczny po przekroczeniu określonej wysokości okna. Pojawia się jako rozwiązanie wtedy, gdy podłoga nie może pokryć obciążenia w przyjętych warunkach.</p>

        <div class="rk-glz-steps">
          <article class="rk-glz-step">
            <h3>Najpierw sprawdź stratę</h3>
            <p>Upewnij się, że bilans obejmuje rzeczywiste U<sub>w</sub>, powierzchnię okna, mostek montażowy, wentylację oraz pozostałe przegrody.</p>
          </article>
          <article class="rk-glz-step">
            <h3>Sprawdź powierzchnię czynną</h3>
            <p>Duży salon może mieć mało podłogi zdolnej do oddawania ciepła, jeżeli znaczną część zajmuje stała zabudowa, kominek, kuchnia lub inne wyłączenia.</p>
          </article>
          <article class="rk-glz-step">
            <h3>Wyznacz możliwą moc podłogi</h3>
            <p>Uwzględnij konstrukcję, okładzinę, temperaturę wody i przyjęty limit temperatury powierzchni. Dopiero to pokazuje rzeczywisty niedobór.</p>
          </article>
          <article class="rk-glz-step">
            <h3>Porównaj rozwiązania</h3>
            <p>Można ograniczyć stratę, zwiększyć powierzchnię grzewczą, zastosować ogrzewanie ścienne, grzejnik lub odpowiednio dobrany konwektor. Wybór zależy od architektury i źródła ciepła.</p>
          </article>
        </div>

        <div class="rk-glz-note rk-glz-note-warn">
          <p><strong>Nie dobieraj konwektora z mocy katalogowej dla wysokiej temperatury.</strong> Jego wydajność musi odpowiadać rzeczywistym parametrom zasilania instalacji. To szczególnie ważne przy pompie ciepła.</p>
        </div>
        <p class="rk-glz-copy">Jeżeli źródłem ma być pompa ciepła, warto najpierw sprawdzić, <a href="https://projekt-ogrzewania.pl/czy-pompa-ciepla-ogrzeje-dom-z-podlogowka/">czy pompa ciepła i podłogówka pokryją obciążenie budynku</a>. Kompletny dobór wymaga równoczesnego sprawdzenia źródła oraz odbiorników, a nie ratowania instalacji samym podnoszeniem temperatury wody.</p>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-hydraulics">
        <span class="rk-glz-kicker">Rura, przepływ i opory</span>
        <h2>Jak strefa przy oknie wpływa na hydraulikę instalacji?</h2>
        <p class="rk-glz-lead">Gęstszy rozstaw zwiększa ilość rury potrzebnej do pokrycia tej samej powierzchni. Nie oznacza jednak automatycznie, że każda pętla potrzebuje określonego wysokiego przepływu.</p>

        <div class="rk-glz-grid rk-glz-grid-3">
          <article class="rk-glz-card">
            <h3>Ilość rury</h3>
            <p>Orientacyjnie rozstaw 10 cm wymaga około dwa razy więcej rury w polu niż rozstaw 20 cm. Trzeba doliczyć łuki i dobiegi, dlatego dokładna długość wynika z rzutu.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Przepływ pętli</h3>
            <p>Wynika z mocy przypisanej do obwodu i projektowej różnicy temperatur. Sam rozstaw nie wymusza wartości 1,8 albo 2,0 l/min.</p>
          </article>
          <article class="rk-glz-card">
            <h3>Strata ciśnienia</h3>
            <p>Zależy przede wszystkim od długości, średnicy, przepływu, medium oraz oporów rozdzielacza i armatury. Liczymy ją dla konkretnego obwodu.</p>
          </article>
        </div>

        <p class="rk-glz-copy">Orientacyjne zużycie materiału opisuje poradnik <a href="https://projekt-ogrzewania.pl/ile-rury-na-m%C2%B2-ogrzewania-podlogowego/">ile rury potrzeba na m² ogrzewania podłogowego</a>. Po rozrysowaniu geometrii trzeba zweryfikować, <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">ile metrów może mieć pojedyncza pętla</a>, a następnie policzyć jej przepływ i nastawę <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametru na rozdzielaczu</a>.</p>
        <p class="rk-glz-copy">Jeżeli dodatkowa pętla zwiększa sumaryczny przepływ rozdzielacza, trzeba również sprawdzić wspólną magistralę. Osobno omawiamy, <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">jak dobrać średnicę rury zasilającej rozdzielacz</a>.</p>
      </section>

      <section class="rk-glz-section" id="rk-glz-errors">
        <span class="rk-glz-kicker">Kontrola przed wylewką</span>
        <h2>Najczęstsze błędy przy ogrzewaniu podłogowym obok dużych okien</h2>
        <div class="rk-glz-grid">
          <article class="rk-glz-card rk-glz-card-risk">
            <h3>Rozstaw wybrany z samej szerokości okna</h3>
            <p>Okno o długości 4 lub 6 m nie przesądza, czy potrzebne jest 10 cm. Bez straty pomieszczenia i charakterystyki podłogi taka decyzja jest zgadywaniem.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-risk">
            <h3>Liczenie wyłącznie pakietu szybowego</h3>
            <p>U<sub>g</sub> nie zastępuje U<sub>w</sub> całego okna. Trzeba też uwzględnić ramę i miejsce montażu, szczególnie przy rozbudowanym progu.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-risk">
            <h3>Traktowanie słońca jako pewnego zysku zimowego</h3>
            <p>Podczas warunków obliczeniowych zysk może nie występować. Osobno analizuje się ryzyko przegrzewania i działanie osłon.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-risk">
            <h3>Automatyczna osobna pętla</h3>
            <p>Wydzielenie obwodu bez sprawdzenia jego mocy, długości i przepływu może zwiększyć liczbę pętli bez realnej korzyści.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-risk">
            <h3>Dylatacja wyznaczona granicą rozstawu</h3>
            <p>Układ szczelin wynika z konstrukcji i geometrii jastrychu, nie z samego przejścia między podziałką 10 i 15 cm.</p>
          </article>
          <article class="rk-glz-card rk-glz-card-risk">
            <h3>Rury w miejscach niedostępnych lub ryzykownych</h3>
            <p>Przed montażem trzeba skoordynować profile okienne, mocowania, stałą zabudowę, szczeliny dylatacyjne i miejsca wiercenia.</p>
          </article>
        </div>
        <p class="rk-glz-copy" style="margin-top:26px">Przed rozłożeniem przewodów sprawdź także poradnik <a href="https://projekt-ogrzewania.pl/gdzie-nie-ukladac-ogrzewania-podlogowego/">gdzie nie układać ogrzewania podłogowego</a>. Zasady podziału pól i przygotowania warstw rozwija artykuł o <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">wylewce na ogrzewanie podłogowe</a>.</p>
      </section>

      <section class="rk-glz-section rk-glz-section-alt" id="rk-glz-checklist">
        <span class="rk-glz-kicker">Do projektu i na budowę</span>
        <h2>Checklista strefy przy dużym przeszkleniu</h2>
        <p class="rk-glz-lead">Poniższą listę warto zamknąć przed zamówieniem rury i przed rozpoczęciem montażu.</p>
        <ul class="rk-glz-checklist">
          <li>Mam U<sub>w</sub> całego okna oraz jego rzeczywiste wymiary.</li>
          <li>Znam projektową temperaturę zewnętrzną i wewnętrzną.</li>
          <li>Bilans cieplny został wykonany oddzielnie dla salonu.</li>
          <li>Powierzchnia czynna nie obejmuje stałej zabudowy i wyłączeń.</li>
          <li>Znam opór okładziny razem z podkładem lub klejem.</li>
          <li>Sprawdziłem temperaturę powierzchni dla planowanego wariantu.</li>
          <li>Próg ma skoordynowany detal konstrukcyjny, cieplny i wilgotnościowy.</li>
          <li>Rozstaw został sprawdzony przy konkretnej temperaturze wody.</li>
          <li>Każda pętla ma policzoną długość, moc, przepływ i stratę ciśnienia.</li>
          <li>Rozdzielacz i magistrala obsługują sumaryczny przepływ.</li>
          <li>Czujnik pokojowy nie znajduje się w bezpośredniej plamie słonecznej.</li>
          <li>Osłony przeciwsłoneczne uwzględniono w ocenie przegrzewania.</li>
          <li>Przebieg rur jest skoordynowany z dylatacjami oraz mocowaniami okna.</li>
          <li>Jeżeli podłoga nie pokrywa obciążenia, wskazano dodatkowy odbiornik.</li>
        </ul>
        <p class="rk-glz-copy" style="margin-top:26px">W budynku z wentylacją mechaniczną warto dodatkowo połączyć analizę fasady z projektem wymiany powietrza. Wyjaśniamy to w poradniku <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">rekuperacja i ogrzewanie podłogowe</a>. Jeżeli planujesz pompę ciepła, sprawdź również zasady tworzenia <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projektu ogrzewania podłogowego z pompą ciepła</a>.</p>
      </section>

      <section class="rk-glz-section" id="rk-glz-faq">
        <span class="rk-glz-kicker">Krótkie odpowiedzi</span>
        <h2>FAQ — podłogówka przy dużych oknach</h2>
        <div class="rk-glz-faq">
          <details>
            <summary>Czy przy każdym oknie tarasowym trzeba układać rury co 10 cm?</summary>
            <div class="rk-glz-faq-answer"><p>Nie. Rozstaw powinien wynikać z obciążenia pomieszczenia, powierzchni czynnej, parametrów wody, konstrukcji podłogi i oporu wykończenia.</p></div>
          </details>
          <details>
            <summary>Jak szeroka powinna być strefa brzegowa?</summary>
            <div class="rk-glz-faq-answer"><p>Nie ma jednej właściwej szerokości dla każdego budynku. Ustala się ją razem z geometrią pętli i rozkładem wymaganej mocy. W niektórych pomieszczeniach osobna strefa nie jest potrzebna.</p></div>
          </details>
          <details>
            <summary>Czy okno o długości ponad 4 m wymaga osobnej pętli?</summary>
            <div class="rk-glz-faq-answer"><p>Nie istnieje uniwersalna granica długości okna nakazująca osobny obwód. O podziale decydują moc, geometria, długość rury, przepływ i zakładany sposób regulacji.</p></div>
          </details>
          <details>
            <summary>Czy można połączyć dwa rozstawy na jednej pętli?</summary>
            <div class="rk-glz-faq-answer"><p>Tak, jeżeli cały obwód jest poprawnie zaprojektowany. Trzeba jednak pamiętać, że rotametr reguluje przepływ całej pętli i nie pozwala niezależnie sterować jej fragmentem przy oknie.</p></div>
          </details>
          <details>
            <summary>Czy podłogówka całkowicie zatrzyma chłód od szyby?</summary>
            <div class="rk-glz-faq-answer"><p>Może poprawić lokalny komfort i pokryć obciążenie, ale nie naprawi słabego okna, nieszczelności ani wadliwego mostka przy progu. Nie należy obiecywać całkowitego wyeliminowania każdego ruchu powietrza.</p></div>
          </details>
          <details>
            <summary>Czy przy pompie ciepła zawsze stosuje się gęstszy rozstaw?</summary>
            <div class="rk-glz-faq-answer"><p>Nie. Pompa ciepła zachęca do pracy z możliwie niską temperaturą wody, ale rozstaw nadal wynika z obliczonej mocy podłogi i warunków konkretnego pomieszczenia.</p></div>
          </details>
          <details>
            <summary>Czy drewno można ułożyć przed dużym przeszkleniem?</summary>
            <div class="rk-glz-faq-answer"><p>Można, jeżeli cały zestaw ma odpowiedni opór, a producent dopuszcza taką temperaturę i sposób montażu. Jeżeli ograniczenia zmniejszają moc podłogi, trzeba ponownie domknąć bilans.</p></div>
          </details>
          <details>
            <summary>Czy rekuperacja usuwa potrzebę analizy strefy przy oknie?</summary>
            <div class="rk-glz-faq-answer"><p>Nie. Rekuperacja ogranicza część strat wentylacyjnych, lecz nie usuwa przenikania przez okno ani mostka montażowego. Może natomiast zmienić całkowity bilans pomieszczenia.</p></div>
          </details>
          <details>
            <summary>Czy konwektor kanałowy jest obowiązkowy przy wysokim przeszkleniu?</summary>
            <div class="rk-glz-faq-answer"><p>Nie. Wysokość okna nie jest samodzielnym kryterium. Dodatkowy odbiornik rozważa się wtedy, gdy podłoga nie może zapewnić wymaganej mocy lub komfortu w przyjętych warunkach.</p></div>
          </details>
          <details>
            <summary>Gdzie umieścić czujnik podłogowy?</summary>
            <div class="rk-glz-faq-answer"><p>Jego lokalizacja zależy od funkcji sterowania. Powinien znajdować się w rurce ochronnej i reprezentować kontrolowaną powierzchnię, a nie przypadkowo najcieplejszy lub nasłoneczniony fragment. Więcej wyjaśnia poradnik o <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujniku podłogowym</a>.</p></div>
          </details>
        </div>
      </section>

      <section class="rk-glz-section rk-glz-section-alt rk-glz-sources" id="rk-glz-sources">
        <span class="rk-glz-kicker">Weryfikowalne podstawy</span>
        <h2>Podstawa techniczna opracowania</h2>
        <p class="rk-glz-copy">Artykuł opiera się na zasadzie, że wydajność powierzchni grzewczej i komfort przy fasadzie są dwoma powiązanymi, lecz odrębnymi zagadnieniami. Nie przypisuje wymagań normowych do wartości, których norma nie ustala uniwersalnie.</p>
        <ol>
          <li><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 — wyznaczanie projektowej wydajności systemów ogrzewania i chłodzenia płaszczyznowego</a>.</li>
          <li><a href="https://www.iso.org/standard/85803.html" target="_blank" rel="nofollow noopener noreferrer">ISO 7730:2025 — komfort cieplny i kryteria lokalnego dyskomfortu</a>.</li>
          <li><a href="https://eli.gov.pl/eli/DU/2022/1225/ogl" target="_blank" rel="nofollow noopener noreferrer">Dziennik Ustaw — tekst Warunków Technicznych z wykazem aktów zmieniających</a>.</li>
          <li><a href="https://www.energy.gov/cmei/buildings/windows" target="_blank" rel="nofollow noopener noreferrer">U.S. Department of Energy — wpływ okien na energię, komfort, zyski słoneczne i osłony</a>.</li>
        </ol>
        <div class="rk-glz-note">
          <p><strong>Zakres artykułu:</strong> materiał służy do zrozumienia decyzji projektowych. Nie zastępuje obliczeń strat ciepła, charakterystyki konkretnego systemu, projektu konstrukcyjnego progu ani instrukcji zastosowanych materiałów.</p>
        </div>
      </section>
    </main>

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

      <header class="rk-glz-author-head">
        <div>
          <span class="rk-glz-kicker" style="color:#83f1fb">Autor opracowania technicznego</span>
          <h2 class="rk-glz-author-title">Robert Kucharski</h2>
          <p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p>
        </div>
        <span class="rk-glz-author-mark">PRZESZKLENIA • BILANS • HYDRAULIKA</span>
      </header>

      <div class="rk-glz-author-layout">
        <aside class="rk-glz-author-side">
          <div class="rk-glz-author-photo">
            <img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant ogrzewania podłogowego" width="600" height="600" loading="lazy" decoding="async">
          </div>
          <div class="rk-glz-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <div class="rk-glz-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
          <div class="rk-glz-author-social-label">Profile autora</div>
          <div class="rk-glz-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer" aria-label="LinkedIn Roberta Kucharskiego">
              <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M5.2 3.5A2.2 2.2 0 1 1 5.2 8a2.2 2.2 0 0 1 0-4.5ZM3.3 9.7h3.8V21H3.3V9.7Zm6.1 0H13v1.5h.1c.5-.9 1.7-1.9 3.6-1.9 3.9 0 4.6 2.5 4.6 5.8V21h-3.8v-5.2c0-1.2 0-2.8-1.8-2.8s-2 1.3-2 2.7V21H9.4V9.7Z"/></svg>
            </a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer" aria-label="Facebook Projekt Ogrzewania">
              <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M13.7 21v-8h2.7l.4-3.1h-3.1v-2c0-.9.3-1.5 1.6-1.5H17V3.6c-.3 0-1.3-.1-2.5-.1-2.5 0-4.2 1.5-4.2 4.3v2.1H7.5V13h2.8v8h3.4Z"/></svg>
            </a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer" aria-label="Profil Projekt HVAC w serwisie X">
              <svg viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 3h4.7l4.1 5.5L17.6 3H20l-6.1 7.2L21 21h-4.7l-4.6-6.2L6.4 21H4l6.6-7.9L4 3Zm3.5 1.8 9.7 14.4h1.6L9.1 4.8H7.5Z"/></svg>
            </a>
          </div>
        </aside>

        <div class="rk-glz-author-main">
          <blockquote class="rk-glz-author-quote">
            <p>Przy dużym przeszkleniu nie zaczynam od pytania „10 czy 15 cm?”. Najpierw sprawdzam stratę pomieszczenia, aktywną powierzchnię podłogi i możliwą moc przy rzeczywistych temperaturach instalacji.</p>
          </blockquote>
          <div class="rk-glz-author-tabs" role="tablist" aria-label="Informacje o autorze">
            <label class="rk-glz-author-tab" for="rk-glz-author-about">O autorze</label>
            <label class="rk-glz-author-tab" for="rk-glz-author-exp">Doświadczenie</label>
            <label class="rk-glz-author-tab" for="rk-glz-author-method">Metodyka</label>
            <label class="rk-glz-author-tab" for="rk-glz-author-sites">Portale</label>
          </div>
          <div class="rk-glz-author-panel rk-glz-author-panel-about">
            <p>Robert Kucharski opracowuje projekty wodnego ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz materiały techniczne dla inwestorów i wykonawców. Łączy straty ciepła poszczególnych pomieszczeń z powierzchnią czynną, konstrukcją podłogi, temperaturą wody, rozstawem rur, długościami pętli, przepływami i nastawami rozdzielacza.</p>
          </div>
          <div class="rk-glz-author-panel rk-glz-author-panel-exp">
            <p>Praktyka autora obejmuje nowe domy i modernizacje, instalacje współpracujące z pompami ciepła, kotłami oraz układami mieszanymi. Szczególnym obszarem pracy jest koordynacja ogrzewania płaszczyznowego z architekturą: dużymi przeszkleniami, stałą zabudową, różnymi okładzinami, dylatacjami i ograniczoną powierzchnią oddawania ciepła.</p>
          </div>
          <div class="rk-glz-author-panel rk-glz-author-panel-method">
            <p>W opracowaniach autor oddziela obliczenia od modeli edukacyjnych. Wartości rozstawu, przepływu i temperatury nie są dobierane z jednej cechy budynku. Każdy wariant jest oceniany jako całość: bilans pomieszczenia, wydajność podłogi, temperatura powierzchni, hydraulika i warunki wykonawcze.</p>
          </div>
          <div class="rk-glz-author-panel rk-glz-author-panel-sites">
            <p>Robert Kucharski jest właścicielem serwisów Projekt-Ogrzewania.pl, Remont.biz.pl oraz Sobir.pl. Powiązanie portali jest podane jawnie, aby czytelnik znał autorstwo i kontekst publikacji.</p>
            <div class="rk-glz-site-links">
              <a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a>
              <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a>
              <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>
            </div>
          </div>
        </div>
      </div>
    </section>

    <section class="rk-glz-final-cta" aria-label="Zamówienie projektu ogrzewania podłogowego">
      <div class="rk-glz-kicker" style="color:#83f1fb">Obliczenia zamiast uniwersalnej recepty</div>
      <div class="rk-glz-cta-title">Zaprojektuj podłogówkę razem ze strefą przy dużych przeszkleniach</div>
      <p>Otrzymasz rozstaw rur naniesiony na rzut, długości pętli, przepływy, nastawy rozdzielacza oraz sprawdzenie, czy aktywna powierzchnia podłogi pokrywa projektową stratę poszczególnych pomieszczeń.</p>
      <a class="rk-glz-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt-Ogrzewania.pl",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@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",
      "worksFor": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "obliczenia cieplne budynków",
        "hydraulika instalacji grzewczych",
        "duże przeszklenia",
        "strefy brzegowe",
        "pompy ciepła"
      ],
      "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/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#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": "Ogrzewanie podłogowe przy dużych przeszkleniach",
          "item": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#webpage",
      "url": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/",
      "name": "Ogrzewanie podłogowe przy dużych przeszkleniach – strefa brzegowa, rozstaw rur i komfort",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#breadcrumb"
      },
      "dateModified": "2026-09-09",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#article",
      "headline": "Ogrzewanie podłogowe przy dużych przeszkleniach – strefa brzegowa, rozstaw rur i komfort",
      "description": "Jak obliczyć strefę przy dużym przeszkleniu, dobrać rozstaw rur, ocenić powierzchnię czynną i sprawdzić, kiedy potrzebny jest dodatkowy odbiornik.",
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#webpage"
      },
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "dateModified": "2026-09-09",
      "inLanguage": "pl-PL",
      "about": [
        "ogrzewanie podłogowe przy dużych przeszkleniach",
        "strefa brzegowa",
        "rozstaw rur",
        "komfort cieplny przy oknie",
        "mostek cieplny progu"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#visualization",
      "name": "Interaktywny model podłogówki przy dużym przeszkleniu",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Any",
      "browserRequirements": "Przeglądarka z obsługą SVG, CSS i JavaScript",
      "isAccessibleForFree": true,
      "description": "Poglądowy przekrój przy fasadzie w czterech scenariuszach cieplnych.",
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#howto",
      "name": "Jak sprawdzić strefę podłogówki przy dużym oknie",
      "description": "Kolejność oceny bilansu pomieszczenia, powierzchni czynnej, mocy podłogi i podziału pętli.",
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Policz stratę pomieszczenia",
          "text": "Uwzględnij całe okno, mostek montażowy, pozostałe przegrody oraz wentylację i infiltrację."
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Określ powierzchnię czynną",
          "text": "Odejmij stałą zabudowę i fragmenty, w których nie można ułożyć rur."
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Sprawdź możliwą moc podłogi",
          "text": "Porównaj warianty przy tej samej temperaturze wody, konstrukcji i oporze okładziny."
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Dobierz rozstaw i obwody",
          "text": "Wybierz strefę brzegową lub dodatkowy odbiornik tylko wtedy, gdy wynika to z obliczeń."
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy przy każdym oknie tarasowym trzeba układać rury co 10 cm?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Rozstaw powinien wynikać z obciążenia pomieszczenia, powierzchni czynnej, parametrów wody, konstrukcji podłogi i oporu wykończenia."
          }
        },
        {
          "@type": "Question",
          "name": "Jak szeroka powinna być strefa brzegowa?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie ma jednej właściwej szerokości. Ustala się ją razem z geometrią pętli, powierzchnią czynną i rozkładem wymaganej mocy."
          }
        },
        {
          "@type": "Question",
          "name": "Czy okno o długości ponad 4 m wymaga osobnej pętli?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie istnieje uniwersalna granica długości okna. O podziale decydują moc, geometria, długość rury, przepływ i sposób regulacji."
          }
        },
        {
          "@type": "Question",
          "name": "Czy można połączyć dwa rozstawy na jednej pętli?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Tak, jeżeli cały obwód jest poprawnie zaprojektowany. Rotametr reguluje jednak przepływ całej pętli, a nie jej pojedynczego fragmentu."
          }
        },
        {
          "@type": "Question",
          "name": "Czy konwektor kanałowy jest obowiązkowy przy wysokim przeszkleniu?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Dodatkowy odbiornik rozważa się wtedy, gdy podłoga nie może zapewnić wymaganej mocy lub komfortu w przyjętych warunkach."
          }
        }
      ]
    }
  ]
}
</script>

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

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

  var buttons = root.querySelectorAll("[data-rk-glz-mode]");
  var coldFill = document.getElementById("rk-glz-cold-fill");
  var balanceFill = document.getElementById("rk-glz-balance-fill");
  var coldOutput = document.getElementById("rk-glz-cold-output");
  var balanceOutput = document.getElementById("rk-glz-balance-output");
  var crossCold = document.getElementById("rk-glz-cross-cold");
  var crossStandard = document.getElementById("rk-glz-cross-standard");
  var crossEdge = document.getElementById("rk-glz-cross-edge");
  var crossEmitter = document.getElementById("rk-glz-cross-emitter");
  var crossSun = document.getElementById("rk-glz-cross-sun");
  var resultMode = document.getElementById("rk-glz-result-mode");
  var resultEdge = document.getElementById("rk-glz-result-edge");
  var resultEmitter = document.getElementById("rk-glz-result-emitter");
  var resultPriority = document.getElementById("rk-glz-result-priority");
  var status = document.getElementById("rk-glz-tool-status");
  var statusTitle = document.getElementById("rk-glz-status-title");
  var statusText = document.getElementById("rk-glz-status-text");

  var modes = {
    night: {
      label: "Mroźna noc",
      coldValue: 88,
      coldText: "duże",
      balanceValue: 52,
      balanceText: "nieustalona",
      balanceTone: "",
      edge: false,
      emitter: false,
      sun: false,
      coldOpacity: "1",
      heatOpacity: "0.82",
      edgeResult: "nie z automatu",
      emitterResult: "brak decyzji",
      priority: "bilans pomieszczenia",
      statusClass: "rk-glz-tool-status",
      statusTitle: "Co pokazuje ten wariant?",
      statusText: "Brak słońca ujawnia projektowe obciążenie. Chłodniejsza powierzchnia może pogarszać komfort przy fasadzie, ale sama szerokość okna nie wyznacza jeszcze rozstawu rur."
    },
    edge: {
      label: "Obliczona strefa",
      coldValue: 68,
      coldText: "umiarkowane",
      balanceValue: 74,
      balanceText: "możliwe pokrycie",
      balanceTone: "",
      edge: true,
      emitter: false,
      sun: false,
      coldOpacity: "0.44",
      heatOpacity: "0.42",
      edgeResult: "po obliczeniu",
      emitterResult: "nie wynika",
      priority: "geometria pętli",
      statusClass: "rk-glz-tool-status",
      statusTitle: "Strefa ma odpowiadać rzeczywistej potrzebie",
      statusText: "Lokalne zagęszczenie może poprawić równomierność i zwiększyć dostępną moc. Jego szerokość, rozstaw i podział pętli muszą wynikać z obliczeń, a nie z uniwersalnej reguły."
    },
    deficit: {
      label: "Niedobór mocy",
      coldValue: 92,
      coldText: "bardzo duże",
      balanceValue: 28,
      balanceText: "niedobór",
      balanceTone: "is-alert",
      edge: true,
      emitter: true,
      sun: false,
      coldOpacity: "0.72",
      heatOpacity: "0.18",
      edgeResult: "nie wystarcza",
      emitterResult: "do rozważenia",
      priority: "ograniczenie straty",
      statusClass: "rk-glz-tool-status is-warning",
      statusTitle: "Sam rozstaw 10 cm nie rozwiąże każdego przypadku",
      statusText: "Jeżeli aktywna podłoga nie pokrywa obciążenia bez przekroczenia ograniczeń, trzeba ograniczyć straty albo zastosować dodatkową powierzchnię grzewczą lub właściwie dobrany odbiornik."
    },
    solar: {
      label: "Słoneczny dzień",
      coldValue: 18,
      coldText: "małe",
      balanceValue: 92,
      balanceText: "chwilowa nadwyżka",
      balanceTone: "is-solar",
      edge: false,
      emitter: false,
      sun: true,
      coldOpacity: "0.12",
      heatOpacity: "0.52",
      edgeResult: "nie usuwa zysku",
      emitterResult: "niepotrzebny",
      priority: "osłony i sterowanie",
      statusClass: "rk-glz-tool-status is-solar",
      statusTitle: "Zysk słoneczny zmienia bieżący bilans",
      statusText: "Promieniowanie może szybko podnieść temperaturę przy fasadzie. Zamknięcie siłownika nie usuwa od razu energii zgromadzonej w jastrychu, dlatego ważne są osłony oraz spokojne sterowanie."
    }
  };

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

  function render(modeName) {
    var config = modes[modeName];
    if (!config) {
      return;
    }

    coldFill.style.width = config.coldValue + "%";
    balanceFill.style.width = config.balanceValue + "%";
    balanceFill.className = "rk-glz-indicator-fill";
    if (config.balanceTone) {
      balanceFill.classList.add(config.balanceTone);
    }

    coldOutput.textContent = config.coldText;
    balanceOutput.textContent = config.balanceText;
    crossCold.setAttribute("opacity", config.coldOpacity);
    crossStandard.setAttribute("opacity", config.heatOpacity);
    setVisible(crossEdge, config.edge);
    setVisible(crossEmitter, config.emitter);
    setVisible(crossSun, config.sun);

    resultMode.textContent = config.label;
    resultEdge.textContent = config.edgeResult;
    resultEmitter.textContent = config.emitterResult;
    resultPriority.textContent = config.priority;
    status.className = config.statusClass;
    statusTitle.textContent = config.statusTitle;
    statusText.textContent = config.statusText;

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

  var buttonIndex;
  for (buttonIndex = 0; buttonIndex < buttons.length; buttonIndex += 1) {
    buttons[buttonIndex].addEventListener("click", function (event) {
      render(event.currentTarget.getAttribute("data-rk-glz-mode"));
    });
  }

  render("night");
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<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>
		<item>
		<title>Kompleksowy kalkulator ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 01 Mar 2026 15:07:17 +0000</pubDate>
				<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Kalkulatory budowlane]]></category>
		<category><![CDATA[Narzędzia i kalkulatory]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technika instalacyjna]]></category>
		<category><![CDATA[Technologia grzewcza]]></category>
		<category><![CDATA[długość rury pex]]></category>
		<category><![CDATA[instalacja podłogowa krok po kroku]]></category>
		<category><![CDATA[kalkulator ogrzewania podłogowego]]></category>
		<category><![CDATA[moc ogrzewania podłogowego]]></category>
		<category><![CDATA[obliczenia ogrzewania podłogowego]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[przepływy w pętlach]]></category>
		<category><![CDATA[rozdzielacz podłogówki]]></category>
		<category><![CDATA[rozstaw rur podłogówka]]></category>
		<category><![CDATA[temperatura zasilania podłogówka]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3552</guid>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  #rk-floor-calc-guide .rk-calc-step::before {
    content: counter(rk-calc-step, decimal-leading-zero);
    display: inline-flex;
    width: 48px;
    height: 48px;
    align-items: center;
    justify-content: center;
    margin-bottom: 17px;
    border-radius: 14px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-blue), var(--rk-cyan));
    font-size: 0.75rem;
    font-weight: 950;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          <div class="rk-calc-inline-cta">
            <span class="rk-calc-kicker">Wynik orientacyjny a dokumentacja wykonawcza</span>
            <h3>Kalkulator policzył zależności, ale nie zna rzutu Twojego domu</h3>
            <p>Narzędzie nie widzi okien, ścian zewnętrznych, mostków cieplnych, stałej zabudowy na rysunku ani rzeczywistych tras do rozdzielacza. Projekt określa przebieg każdej pętli, obciążenie poszczególnych pomieszczeń, rozstaw, przepływy, opory i nastawy potrzebne wykonawcy.</p>
            <a class="rk-calc-cta-button rk-calc-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt z obliczeniami dla każdego pomieszczenia</a>
            <small class="rk-calc-disclosure">Odnośnik prowadzi do strony sprzedażowej Projekt-Ogrzewania.pl — serwisu należącego do autora artykułu.</small>
          </div>
        </div>
      </section>

      <section class="rk-calc-section" id="rk-calc-method">
        <span class="rk-calc-kicker">Metodologia zamiast pozornej dokładności</span>
        <h2>Jak kalkulator ogrzewania podłogowego przechodzi od watów do rur i przepływów?</h2>
        <p class="rk-calc-lead">Obliczenie jest łańcuchem zależności. Projektowe obciążenie pomieszczenia wyznacza wymaganą moc aktywnej posadzki. Temperatura wody, temperatura wnętrza, rozstaw i opór okładziny określają orientacyjne możliwości podłogi. Dopiero później można szacować długość rur, liczbę pętli i hydraulikę.</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            <div class="rk-calc-author-panel rk-calc-author-panel-sites">
              <p>Autor jest właścicielem trzech serwisów poświęconych projektowaniu instalacji, budowie i remontom. Powiązanie portali jest podane jawnie, aby czytelnik znał autorstwo oraz kontekst linkowania.</p>
              <div class="rk-calc-site-links">
                <a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a>
                <a href="https://remont.biz.pl/" target="_blank" rel="noopener nofollow">Remont.biz.pl</a>
                <a href="https://sobir.pl/" target="_blank" rel="noopener nofollow">Sobir.pl</a>
              </div>
            </div>
          </div>
        </div>
      </section>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  function attemptFloorCalculatorInitialization() {
    initializeFloorCalculator();
  }

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

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

  if (window.MutationObserver) {
    var observer = new MutationObserver(function () {
      var root = document.getElementById("rk-floor-calc-guide");
      if (root) {
        initializeFloorCalculator();
        if (root.getAttribute("data-rk-calc-ready") === "1") {
          observer.disconnect();
        }
      }
    });
    observer.observe(document.documentElement, { childList: true, subtree: true });
  }
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/">Kompleksowy kalkulator ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Punkt rosy przy chłodzeniu podłogowym – kalkulator i zabezpieczenia.</title>
		<link>https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 09:58:03 +0000</pubDate>
				<category><![CDATA[Chłodzenie płaszczyznowe]]></category>
		<category><![CDATA[Fizyka budowli]]></category>
		<category><![CDATA[Instalacje domowe]]></category>
		<category><![CDATA[Instalacje wodne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Porady dla inwestorów]]></category>
		<category><![CDATA[Porady inwestycyjne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[analiza techniczna]]></category>
		<category><![CDATA[automatyka instalacji]]></category>
		<category><![CDATA[chłodzenie domu]]></category>
		<category><![CDATA[chłodzenie podłogowe]]></category>
		<category><![CDATA[dew point control]]></category>
		<category><![CDATA[fizyka budowli]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[kondensacja]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pompa ciepła]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[punkt rosy]]></category>
		<category><![CDATA[rekuperacja]]></category>
		<category><![CDATA[temperatura podłogi]]></category>
		<category><![CDATA[wilgotność powietrza]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3528</guid>

					<description><![CDATA[<p>Chłodzenie podłogówką brzmi jak idealne rozwiązanie na upalne lato – cicho, bez przeciągów i bez widocznych urządzeń. Jednak kluczowym parametrem, który decyduje o bezpieczeństwie całego systemu, jest punkt rosy w ogrzewaniu podłogowym. To on wyznacza granicę między komfortowym chłodem a ryzykiem kondensacji, mokrej posadzki i rozwoju pleśni. W artykule wyjaśniam, jak kontrolować wilgotność, jaką temperaturę podłogi uznać za bezpieczną oraz dlaczego automatyka antykondensacyjna to nie dodatek, lecz konieczność.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/">Punkt rosy przy chłodzeniu podłogowym – kalkulator i zabezpieczenia.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-dew-guide {
    --rk-dp-dark: #0d2738;
    --rk-dp-navy: #143c50;
    --rk-dp-navy-2: #1b5262;
    --rk-dp-blue: #078fbe;
    --rk-dp-cyan: #2bc8d9;
    --rk-dp-cyan-soft: #e7fafd;
    --rk-dp-orange: #ff6946;
    --rk-dp-orange-soft: #fff0ea;
    --rk-dp-green: #16836b;
    --rk-dp-green-soft: #eaf8f3;
    --rk-dp-yellow: #b97908;
    --rk-dp-yellow-soft: #fff7dc;
    --rk-dp-red: #ca463d;
    --rk-dp-red-soft: #fff0ee;
    --rk-dp-purple: #6657c8;
    --rk-dp-purple-soft: #f1efff;
    --rk-dp-ink: #132a3b;
    --rk-dp-text: #455d6d;
    --rk-dp-muted: #6b7f8d;
    --rk-dp-line: #d2e2e9;
    --rk-dp-soft: #f3f8fa;
    --rk-dp-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 72px;
    color: var(--rk-dp-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.72;
  }
  #rk-dew-guide,
  #rk-dew-guide * { box-sizing: border-box; }
  #rk-dew-guide img,
  #rk-dew-guide svg,
  #rk-dew-guide canvas { max-width: 100%; }
  #rk-dew-guide button,
  #rk-dew-guide input,
  #rk-dew-guide select,
  #rk-dew-guide label,
  #rk-dew-guide summary,
  #rk-dew-guide a { font: inherit; -webkit-tap-highlight-color: transparent; }
  #rk-dew-guide a {
    color: var(--rk-dp-blue);
    font-weight: 780;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
  }
  #rk-dew-guide a:hover,
  #rk-dew-guide a:focus-visible { color: var(--rk-dp-red); }
  #rk-dew-guide p,
  #rk-dew-guide ul,
  #rk-dew-guide ol { margin-top: 0; margin-bottom: 1.05em; }
  #rk-dew-guide h2,
  #rk-dew-guide h3,
  #rk-dew-guide h4 {
    margin-top: 0;
    color: var(--rk-dp-dark);
    font-weight: 930;
    letter-spacing: -.035em;
    line-height: 1.14;
    overflow-wrap: anywhere;
  }
  #rk-dew-guide h2 { margin-bottom: 18px; font-size: clamp(1.72rem, 4vw, 2.72rem); }
  #rk-dew-guide h3 { margin-bottom: 11px; font-size: clamp(1.12rem, 2.3vw, 1.46rem); }
  #rk-dew-guide h4 { margin-bottom: 8px; font-size: 1rem; }
  #rk-dew-guide strong { font-weight: 860; }
  #rk-dew-guide [hidden] { display: none !important; }
  #rk-dew-guide .rk-dp-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

  #rk-dew-guide .rk-dp-shell {
    overflow: hidden;
    border: 1px solid var(--rk-dp-line);
    border-radius: 27px;
    background: var(--rk-dp-white);
    box-shadow: 0 24px 72px rgba(13, 39, 56, .11);
  }
  #rk-dew-guide .rk-dp-hero {
    position: relative;
    overflow: hidden;
    padding: clamp(38px, 7vw, 78px) clamp(25px, 6vw, 76px) 42px;
    color: var(--rk-dp-white);
    background:
      radial-gradient(circle at 92% 8%, rgba(43, 200, 217, .29), transparent 29%),
      radial-gradient(circle at 8% 105%, rgba(255, 105, 70, .23), transparent 32%),
      linear-gradient(135deg, #0c2434 0%, #123d51 55%, #145f66 100%);
  }
  #rk-dew-guide .rk-dp-hero::after {
    position: absolute;
    right: -58px;
    bottom: -135px;
    width: 370px;
    height: 370px;
    border: 48px solid rgba(255, 255, 255, .05);
    border-radius: 50%;
    content: "";
  }
  #rk-dew-guide .rk-dp-kicker {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    gap: 9px;
    margin-bottom: 16px;
    color: #75effd;
    font-size: .69rem;
    font-weight: 950;
    letter-spacing: .095em;
    line-height: 1.2;
    text-transform: uppercase;
  }
  #rk-dew-guide .rk-dp-kicker::before {
    width: 9px;
    height: 9px;
    flex: 0 0 9px;
    border-radius: 50%;
    background: var(--rk-dp-orange);
    box-shadow: 0 0 0 6px rgba(255, 105, 70, .14);
    content: "";
  }
  #rk-dew-guide .rk-dp-hero-title {
    position: relative;
    z-index: 1;
    max-width: 1020px;
    margin: 0 0 21px;
    color: var(--rk-dp-white);
    font-size: clamp(2.2rem, 7.2vw, 5.05rem);
    font-weight: 950;
    letter-spacing: -.065em;
    line-height: .99;
  }
  #rk-dew-guide .rk-dp-hero-title span { color: #64e7f4; }
  #rk-dew-guide .rk-dp-lead {
    position: relative;
    z-index: 1;
    max-width: 965px;
    margin-bottom: 24px;
    color: #e1f1f5;
    font-size: clamp(1rem, 2.2vw, 1.3rem);
    line-height: 1.56;
  }
  #rk-dew-guide .rk-dp-tags,
  #rk-dew-guide .rk-dp-byline {
    position: relative;
    z-index: 1;
    display: flex;
    flex-wrap: wrap;
    gap: 9px 12px;
  }
  #rk-dew-guide .rk-dp-tag {
    padding: 8px 13px;
    border: 1px solid rgba(255, 255, 255, .22);
    border-radius: 999px;
    color: var(--rk-dp-white);
    background: rgba(255, 255, 255, .075);
    font-size: .67rem;
    font-weight: 850;
    line-height: 1.2;
  }
  #rk-dew-guide .rk-dp-byline {
    margin-top: 27px;
    color: #c9e0e6;
    font-size: .68rem;
    font-weight: 720;
  }
  #rk-dew-guide .rk-dp-byline strong { color: var(--rk-dp-white); }
  #rk-dew-guide .rk-dp-hero-metrics {
    position: relative;
    z-index: 1;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin-top: 29px;
  }
  #rk-dew-guide .rk-dp-hero-metric {
    min-width: 0;
    padding: 18px;
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: 15px;
    background: rgba(255, 255, 255, .07);
  }
  #rk-dew-guide .rk-dp-hero-metric b {
    display: block;
    margin-bottom: 5px;
    color: var(--rk-dp-white);
    font-size: .74rem;
  }
  #rk-dew-guide .rk-dp-hero-metric span {
    display: block;
    color: #c9e1e7;
    font-size: .64rem;
    line-height: 1.48;
  }

  #rk-dew-guide .rk-dp-nav {
    padding: 18px clamp(20px, 4vw, 46px);
    border-bottom: 1px solid var(--rk-dp-line);
    background: var(--rk-dp-white);
  }
  #rk-dew-guide .rk-dp-nav-label {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-dp-dark);
    font-size: .62rem;
    font-weight: 950;
    letter-spacing: .08em;
    text-transform: uppercase;
  }
  #rk-dew-guide .rk-dp-nav-track {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    width: 100%;
    min-width: 0;
    white-space: normal;
  }
  #rk-dew-guide .rk-dp-nav a {
    display: inline-flex;
    align-items: center;
    min-height: 36px;
    max-width: 100%;
    padding: 8px 12px;
    border-radius: 999px;
    color: var(--rk-dp-dark);
    background: #eef5f7;
    font-size: .63rem;
    font-weight: 900;
    line-height: 1.2;
    text-decoration: none;
    white-space: normal;
  }
  #rk-dew-guide .rk-dp-nav a:hover,
  #rk-dew-guide .rk-dp-nav a:focus-visible { color: var(--rk-dp-white); background: var(--rk-dp-blue); }

  #rk-dew-guide .rk-dp-content { padding: 0 clamp(20px, 5.4vw, 64px) 64px; }
  #rk-dew-guide .rk-dp-section {
    scroll-margin-top: 28px;
    padding: clamp(46px, 7vw, 74px) 0;
    border-bottom: 1px solid var(--rk-dp-line);
  }
  #rk-dew-guide .rk-dp-section:last-child { border-bottom: 0; }
  #rk-dew-guide .rk-dp-eyebrow {
    display: block;
    margin-bottom: 10px;
    color: var(--rk-dp-orange);
    font-size: .67rem;
    font-weight: 950;
    letter-spacing: .09em;
    line-height: 1.2;
    text-transform: uppercase;
  }
  #rk-dew-guide .rk-dp-intro { max-width: 930px; color: var(--rk-dp-text); font-size: 1.02rem; }
  #rk-dew-guide .rk-dp-intro-lg { max-width: 980px; color: var(--rk-dp-text); font-size: 1.13rem; }
  #rk-dew-guide .rk-dp-grid-2,
  #rk-dew-guide .rk-dp-grid-3,
  #rk-dew-guide .rk-dp-grid-4 {
    display: grid;
    gap: 16px;
    margin-top: 24px;
  }
  #rk-dew-guide .rk-dp-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-dew-guide .rk-dp-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-dew-guide .rk-dp-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-dew-guide .rk-dp-card {
    min-width: 0;
    padding: 22px;
    border: 1px solid var(--rk-dp-line);
    border-radius: 17px;
    background: var(--rk-dp-white);
  }
  #rk-dew-guide .rk-dp-card--soft { background: var(--rk-dp-soft); }
  #rk-dew-guide .rk-dp-card--cyan { border-color: #bee6ed; background: var(--rk-dp-cyan-soft); }
  #rk-dew-guide .rk-dp-card--orange { border-color: #f5cabc; background: var(--rk-dp-orange-soft); }
  #rk-dew-guide .rk-dp-card--green { border-color: #bfe4d8; background: var(--rk-dp-green-soft); }
  #rk-dew-guide .rk-dp-card--yellow { border-color: #eddca1; background: var(--rk-dp-yellow-soft); }
  #rk-dew-guide .rk-dp-card h3,
  #rk-dew-guide .rk-dp-card h4 { margin-bottom: 10px; }
  #rk-dew-guide .rk-dp-card p:last-child,
  #rk-dew-guide .rk-dp-card ul:last-child { margin-bottom: 0; }
  #rk-dew-guide .rk-dp-card p,
  #rk-dew-guide .rk-dp-card li { color: var(--rk-dp-text); }
  #rk-dew-guide .rk-dp-number-row { display: flex; align-items: flex-start; gap: 16px; }
  #rk-dew-guide .rk-dp-number {
    display: grid;
    place-items: center;
    width: 48px;
    height: 48px;
    min-width: 48px;
    flex: 0 0 48px;
    padding: 0;
    margin: 0;
    border-radius: 50%;
    color: var(--rk-dp-dark);
    background: #d5f2f6;
    font-size: .82rem;
    font-weight: 950;
    line-height: 1;
    text-align: center;
  }
  #rk-dew-guide .rk-dp-number--orange { background: #ffe0d5; }
  #rk-dew-guide .rk-dp-number--green { background: #d9f1e8; }
  #rk-dew-guide .rk-dp-number--purple { background: #e6e1ff; }
  #rk-dew-guide .rk-dp-number--yellow { background: #ffedb8; }
  #rk-dew-guide .rk-dp-number-copy { min-width: 0; }
  #rk-dew-guide .rk-dp-number-copy h3 { margin: 2px 0 8px; font-size: 1.08rem; }
  #rk-dew-guide .rk-dp-number-copy p { margin: 0; color: var(--rk-dp-text); }

  #rk-dew-guide .rk-dp-answer {
    display: grid;
    grid-template-columns: 1.2fr .8fr;
    gap: 18px;
    margin-top: 25px;
    padding: clamp(24px, 4vw, 37px);
    border-radius: 20px;
    color: var(--rk-dp-white);
    background: linear-gradient(135deg, var(--rk-dp-dark), #155a64);
  }
  #rk-dew-guide .rk-dp-answer h3 { color: var(--rk-dp-white); font-size: clamp(1.3rem, 2.8vw, 2rem); }
  #rk-dew-guide .rk-dp-answer p { margin-bottom: 0; color: #d6e9ee; }
  #rk-dew-guide .rk-dp-answer-rule {
    align-self: stretch;
    display: grid;
    place-items: center;
    padding: 20px;
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: 16px;
    background: rgba(255, 255, 255, .08);
    color: var(--rk-dp-white);
    text-align: center;
  }
  #rk-dew-guide .rk-dp-answer-rule b { display: block; color: #79edfa; font-size: 1.42rem; line-height: 1.25; }
  #rk-dew-guide .rk-dp-answer-rule span { display: block; margin-top: 7px; color: #cfe4ea; font-size: .68rem; }

  #rk-dew-guide .rk-dp-note,
  #rk-dew-guide .rk-dp-warning,
  #rk-dew-guide .rk-dp-important {
    margin-top: 22px;
    padding: 19px 21px;
    border-radius: 15px;
    color: var(--rk-dp-text);
  }
  #rk-dew-guide .rk-dp-note { border: 1px solid #c9e5eb; border-left: 6px solid var(--rk-dp-cyan); background: #f0fbfd; }
  #rk-dew-guide .rk-dp-warning { border: 1px solid #ecd99a; border-left: 6px solid #e1a01b; background: var(--rk-dp-yellow-soft); }
  #rk-dew-guide .rk-dp-important { border: 1px solid #f1c2b7; border-left: 6px solid var(--rk-dp-orange); background: var(--rk-dp-orange-soft); }
  #rk-dew-guide .rk-dp-note p:last-child,
  #rk-dew-guide .rk-dp-warning p:last-child,
  #rk-dew-guide .rk-dp-important p:last-child { margin-bottom: 0; }
  #rk-dew-guide .rk-dp-formula {
    margin: 25px 0;
    padding: 24px;
    border: 1px solid #badfe7;
    border-radius: 17px;
    background: linear-gradient(135deg, #edfafd, #f8fcfd);
    text-align: center;
  }
  #rk-dew-guide .rk-dp-formula-main {
    color: var(--rk-dp-dark);
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
    font-size: clamp(.9rem, 2.4vw, 1.18rem);
    font-weight: 900;
    overflow-wrap: anywhere;
  }
  #rk-dew-guide .rk-dp-formula small { display: block; margin-top: 9px; color: var(--rk-dp-muted); font-size: .67rem; }

  #rk-dew-guide .rk-dp-table-wrap {
    width: 100%;
    margin-top: 24px;
    overflow: hidden;
    border: 1px solid var(--rk-dp-line);
    border-radius: 18px;
  }
  #rk-dew-guide table { width: 100%; border-collapse: collapse; table-layout: fixed; }
  #rk-dew-guide th,
  #rk-dew-guide td { padding: 16px 17px; border-right: 1px solid var(--rk-dp-line); border-bottom: 1px solid var(--rk-dp-line); vertical-align: top; overflow-wrap: anywhere; }
  #rk-dew-guide th:last-child,
  #rk-dew-guide td:last-child { border-right: 0; }
  #rk-dew-guide tbody tr:last-child td { border-bottom: 0; }
  #rk-dew-guide th { color: var(--rk-dp-white); background: var(--rk-dp-navy); font-size: .72rem; font-weight: 900; text-align: left; }
  #rk-dew-guide td { color: var(--rk-dp-text); background: var(--rk-dp-white); font-size: .83rem; }
  #rk-dew-guide tbody tr:nth-child(even) td { background: #f7fafb; }

  #rk-dew-guide .rk-dp-tool {
    margin-top: 28px;
    overflow: hidden;
    border: 1px solid #bcdce5;
    border-radius: 23px;
    background: var(--rk-dp-white);
    box-shadow: 0 18px 45px rgba(13, 39, 56, .09);
  }
  #rk-dew-guide .rk-dp-tool-head {
    padding: clamp(24px, 4vw, 38px);
    color: var(--rk-dp-white);
    background: linear-gradient(135deg, var(--rk-dp-dark), #155e68);
  }
  #rk-dew-guide .rk-dp-tool-head .rk-dp-eyebrow { color: #76eafa; }
  #rk-dew-guide .rk-dp-tool-head h3 { margin-bottom: 10px; color: var(--rk-dp-white); font-size: clamp(1.45rem, 3.7vw, 2.45rem); }
  #rk-dew-guide .rk-dp-tool-head p { max-width: 940px; margin: 0; color: #d3e8ed; }
  #rk-dew-guide .rk-dp-tool-body { padding: clamp(20px, 4vw, 38px); }
  #rk-dew-guide .rk-dp-presets { display: flex; flex-wrap: wrap; gap: 9px; margin-bottom: 23px; }
  #rk-dew-guide .rk-dp-preset,
  #rk-dew-guide .rk-dp-action,
  #rk-dew-guide .rk-dp-chart-temp,
  #rk-dew-guide .rk-dp-auto-card {
    appearance: none;
    border: 0;
    cursor: pointer;
  }
  #rk-dew-guide .rk-dp-preset {
    min-height: 42px;
    padding: 9px 14px;
    border: 1px solid #bfd9e3;
    border-radius: 999px;
    color: var(--rk-dp-dark);
    background: var(--rk-dp-white);
    font-size: .67rem;
    font-weight: 900;
  }
  #rk-dew-guide .rk-dp-preset:hover,
  #rk-dew-guide .rk-dp-preset:focus-visible,
  #rk-dew-guide .rk-dp-preset.is-active { color: var(--rk-dp-white); border-color: var(--rk-dp-blue); background: var(--rk-dp-blue); }
  #rk-dew-guide .rk-dp-input-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; }
  #rk-dew-guide .rk-dp-field { min-width: 0; }
  #rk-dew-guide .rk-dp-field label { display: block; margin-bottom: 7px; color: var(--rk-dp-dark); font-size: .7rem; font-weight: 880; line-height: 1.35; }
  #rk-dew-guide .rk-dp-field small { display: block; margin-top: 6px; color: var(--rk-dp-muted); font-size: .61rem; line-height: 1.45; }
  #rk-dew-guide .rk-dp-input-shell { display: flex; align-items: center; overflow: hidden; border: 1px solid #bcd4de; border-radius: 12px; background: var(--rk-dp-white); }
  #rk-dew-guide .rk-dp-input-shell:focus-within { border-color: var(--rk-dp-blue); box-shadow: 0 0 0 3px rgba(7, 143, 190, .12); }
  #rk-dew-guide .rk-dp-input-shell input {
    width: 100%;
    min-width: 0;
    padding: 12px 12px;
    border: 0;
    outline: 0;
    color: var(--rk-dp-dark);
    background: transparent;
    font-size: .88rem;
    font-weight: 800;
  }
  #rk-dew-guide .rk-dp-unit { flex: 0 0 auto; padding: 0 12px; color: var(--rk-dp-muted); font-size: .66rem; font-weight: 850; }
  #rk-dew-guide .rk-dp-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 52px;
    margin-top: 22px;
    padding: 13px 21px;
    border-radius: 12px;
    color: var(--rk-dp-white);
    background: var(--rk-dp-blue);
    font-size: .74rem;
    font-weight: 930;
  }
  #rk-dew-guide .rk-dp-action:hover,
  #rk-dew-guide .rk-dp-action:focus-visible { background: #067ba4; }
  #rk-dew-guide .rk-dp-results { margin-top: 27px; }
  #rk-dew-guide .rk-dp-result-status {
    display: grid;
    grid-template-columns: 68px minmax(0, 1fr);
    gap: 17px;
    align-items: center;
    padding: 21px;
    border: 1px solid #bfe3d7;
    border-radius: 17px;
    background: var(--rk-dp-green-soft);
  }
  #rk-dew-guide .rk-dp-result-status.is-warning { border-color: #ead58b; background: var(--rk-dp-yellow-soft); }
  #rk-dew-guide .rk-dp-result-status.is-danger { border-color: #efbcb7; background: var(--rk-dp-red-soft); }
  #rk-dew-guide .rk-dp-status-icon {
    display: grid;
    place-items: center;
    width: 58px;
    height: 58px;
    border-radius: 50%;
    color: var(--rk-dp-white);
    background: var(--rk-dp-green);
    font-size: 1.25rem;
    font-weight: 950;
    line-height: 1;
  }
  #rk-dew-guide .is-warning .rk-dp-status-icon { background: #d99a14; }
  #rk-dew-guide .is-danger .rk-dp-status-icon { background: var(--rk-dp-red); }
  #rk-dew-guide .rk-dp-status-copy strong { display: block; margin-bottom: 4px; color: var(--rk-dp-dark); font-size: 1.05rem; }
  #rk-dew-guide .rk-dp-status-copy span { display: block; color: var(--rk-dp-text); font-size: .75rem; line-height: 1.55; }
  #rk-dew-guide .rk-dp-result-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-top: 13px; }
  #rk-dew-guide .rk-dp-result-card { min-width: 0; padding: 17px; border: 1px solid var(--rk-dp-line); border-radius: 14px; background: #f8fbfc; }
  #rk-dew-guide .rk-dp-result-card span { display: block; min-height: 2.6em; color: var(--rk-dp-muted); font-size: .58rem; font-weight: 850; letter-spacing: .04em; line-height: 1.3; text-transform: uppercase; }
  #rk-dew-guide .rk-dp-result-card b { display: block; margin-top: 6px; color: var(--rk-dp-dark); font-size: clamp(1.05rem, 2.8vw, 1.5rem); line-height: 1.15; }
  #rk-dew-guide .rk-dp-result-card small { display: block; margin-top: 5px; color: var(--rk-dp-muted); font-size: .58rem; line-height: 1.4; }
  #rk-dew-guide .rk-dp-water-note { margin-top: 13px; padding: 15px 17px; border: 1px solid #d5e4e9; border-radius: 13px; color: var(--rk-dp-text); background: #f6fafb; font-size: .69rem; }
  #rk-dew-guide .rk-dp-tool-limit { margin-top: 18px; color: var(--rk-dp-muted); font-size: .65rem; line-height: 1.55; }

  #rk-dew-guide .rk-dp-chart-controls {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: 18px;
    margin-bottom: 22px;
  }
  #rk-dew-guide .rk-dp-range-card { padding: 17px; border: 1px solid var(--rk-dp-line); border-radius: 14px; background: #f7fafb; }
  #rk-dew-guide .rk-dp-range-head { display: flex; justify-content: space-between; gap: 15px; margin-bottom: 10px; color: var(--rk-dp-dark); font-size: .68rem; font-weight: 900; }
  #rk-dew-guide .rk-dp-range-head output { color: var(--rk-dp-blue); white-space: nowrap; }
  #rk-dew-guide input[type="range"] { width: 100%; accent-color: var(--rk-dp-blue); }
  #rk-dew-guide .rk-dp-chart-legend { display: flex; flex-wrap: wrap; gap: 9px 16px; margin-bottom: 15px; }
  #rk-dew-guide .rk-dp-legend-item { display: inline-flex; align-items: center; gap: 7px; color: var(--rk-dp-text); font-size: .63rem; font-weight: 800; }
  #rk-dew-guide .rk-dp-legend-line { width: 27px; height: 4px; border-radius: 999px; background: var(--rk-dp-dark); }
  #rk-dew-guide .rk-dp-legend-line--target { background: var(--rk-dp-orange); }
  #rk-dew-guide .rk-dp-legend-line--surface { background: var(--rk-dp-cyan); }
  #rk-dew-guide .rk-dp-canvas-shell { width: 100%; padding: 12px; border: 1px solid var(--rk-dp-line); border-radius: 17px; background: var(--rk-dp-white); }
  #rk-dew-guide #rk-dp-chart { display: block; width: 100%; height: 430px; }
  #rk-dew-guide .rk-dp-chart-summary { margin-top: 14px; padding: 17px; border-radius: 13px; color: var(--rk-dp-text); background: var(--rk-dp-soft); font-size: .72rem; }

  #rk-dew-guide .rk-dp-auto-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 13px; margin-top: 24px; }
  #rk-dew-guide .rk-dp-auto-card {
    min-width: 0;
    min-height: 155px;
    padding: 19px;
    border: 1px solid var(--rk-dp-line);
    border-radius: 16px;
    color: var(--rk-dp-dark);
    background: var(--rk-dp-white);
    text-align: left;
  }
  #rk-dew-guide .rk-dp-auto-card:hover,
  #rk-dew-guide .rk-dp-auto-card:focus-visible,
  #rk-dew-guide .rk-dp-auto-card.is-active { border-color: var(--rk-dp-blue); background: var(--rk-dp-cyan-soft); box-shadow: inset 0 0 0 1px var(--rk-dp-blue); }
  #rk-dew-guide .rk-dp-auto-card .rk-dp-number { width: 42px; height: 42px; min-width: 42px; margin-bottom: 13px; }
  #rk-dew-guide .rk-dp-auto-card b { display: block; margin-bottom: 5px; font-size: .78rem; }
  #rk-dew-guide .rk-dp-auto-card span { display: block; color: var(--rk-dp-text); font-size: .64rem; line-height: 1.45; }
  #rk-dew-guide .rk-dp-auto-detail {
    margin-top: 14px;
    padding: clamp(22px, 4vw, 32px);
    border-radius: 18px;
    color: var(--rk-dp-white);
    background: linear-gradient(135deg, var(--rk-dp-dark), #155462);
  }
  #rk-dew-guide .rk-dp-auto-detail-label { display: block; margin-bottom: 8px; color: #72e9f7; font-size: .61rem; font-weight: 950; letter-spacing: .08em; text-transform: uppercase; }
  #rk-dew-guide .rk-dp-auto-detail h3 { margin-bottom: 10px; color: var(--rk-dp-white); }
  #rk-dew-guide .rk-dp-auto-detail p { margin-bottom: 0; color: #d5e8ed; }
  #rk-dew-guide .rk-dp-auto-facts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 11px; margin-top: 18px; }
  #rk-dew-guide .rk-dp-auto-fact { min-width: 0; padding: 14px; border: 1px solid rgba(255, 255, 255, .15); border-radius: 12px; background: rgba(255, 255, 255, .07); }
  #rk-dew-guide .rk-dp-auto-fact b { display: block; margin-bottom: 4px; color: #79edf9; font-size: .62rem; }
  #rk-dew-guide .rk-dp-auto-fact span { display: block; color: #d3e7ec; font-size: .62rem; line-height: 1.45; }

  #rk-dew-guide .rk-dp-cta {
    margin: 35px 0 0;
    padding: clamp(28px, 5vw, 48px);
    border-radius: 21px;
    color: var(--rk-dp-white);
    background:
      radial-gradient(circle at 90% 10%, rgba(43, 200, 217, .24), transparent 30%),
      linear-gradient(135deg, #102b3c, #174f5d);
  }
  #rk-dew-guide .rk-dp-cta .rk-dp-eyebrow { color: #72eafb; }
  #rk-dew-guide .rk-dp-cta h3 { max-width: 900px; margin-bottom: 12px; color: var(--rk-dp-white); font-size: clamp(1.4rem, 3.3vw, 2.25rem); }
  #rk-dew-guide .rk-dp-cta p { max-width: 920px; color: #d4e8ed; }
  #rk-dew-guide .rk-dp-cta-limit { margin: 18px 0; padding: 16px 18px; border: 1px solid rgba(255, 255, 255, .17); border-radius: 13px; color: #edf8fa; background: rgba(255, 255, 255, .07); font-size: .72rem; }
  #rk-dew-guide .rk-dp-cta-button {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 51px;
    padding: 13px 21px;
    border-radius: 12px;
    color: var(--rk-dp-white);
    background: var(--rk-dp-orange);
    font-size: .73rem;
    font-weight: 930;
    line-height: 1.3;
    text-decoration: none;
  }
  #rk-dew-guide .rk-dp-cta-button:hover,
  #rk-dew-guide .rk-dp-cta-button:focus-visible { color: var(--rk-dp-white); background: #e95734; }

  #rk-dew-guide .rk-dp-checklist { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin-top: 23px; }
  #rk-dew-guide .rk-dp-check {
    display: grid;
    grid-template-columns: 32px minmax(0, 1fr);
    gap: 12px;
    align-items: start;
    padding: 17px;
    border: 1px solid var(--rk-dp-line);
    border-radius: 14px;
    background: var(--rk-dp-white);
  }
  #rk-dew-guide .rk-dp-check-icon { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; color: var(--rk-dp-white); background: var(--rk-dp-green); font-size: .7rem; font-weight: 950; line-height: 1; }
  #rk-dew-guide .rk-dp-check b { display: block; margin-bottom: 4px; color: var(--rk-dp-dark); font-size: .72rem; }
  #rk-dew-guide .rk-dp-check span { display: block; color: var(--rk-dp-text); font-size: .66rem; line-height: 1.48; }

  #rk-dew-guide .rk-dp-faq { display: grid; gap: 11px; margin-top: 23px; }
  #rk-dew-guide .rk-dp-faq details { overflow: hidden; border: 1px solid var(--rk-dp-line); border-radius: 14px; background: var(--rk-dp-white); }
  #rk-dew-guide .rk-dp-faq summary { position: relative; padding: 16px 54px 16px 18px; color: var(--rk-dp-dark); cursor: pointer; font-size: .76rem; font-weight: 880; line-height: 1.45; list-style: none; }
  #rk-dew-guide .rk-dp-faq summary::-webkit-details-marker { display: none; }
  #rk-dew-guide .rk-dp-faq summary::after { position: absolute; top: 10px; right: 18px; color: var(--rk-dp-blue); content: "+"; font-size: 1.5rem; font-weight: 700; }
  #rk-dew-guide .rk-dp-faq details[open] summary::after { content: "−"; }
  #rk-dew-guide .rk-dp-faq-answer { padding: 17px 18px; border-top: 1px solid var(--rk-dp-line); color: var(--rk-dp-text); font-size: .8rem; }
  #rk-dew-guide .rk-dp-faq-answer p:last-child { margin-bottom: 0; }

  #rk-dew-guide .rk-dp-source-list { display: grid; gap: 12px; margin-top: 22px; }
  #rk-dew-guide .rk-dp-source { padding: 18px; border: 1px solid var(--rk-dp-line); border-radius: 14px; background: #f8fbfc; }
  #rk-dew-guide .rk-dp-source b { display: block; margin-bottom: 5px; color: var(--rk-dp-dark); font-size: .74rem; }
  #rk-dew-guide .rk-dp-source p { margin: 0; color: var(--rk-dp-text); font-size: .7rem; }

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

  @media (max-width: 940px) {
    #rk-dew-guide .rk-dp-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-dew-guide .rk-dp-result-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-dew-guide .rk-dp-input-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-dew-guide .rk-dp-author-layout { grid-template-columns: 250px minmax(0, 1fr); }
    #rk-dew-guide .rk-dp-author-facts { grid-template-columns: 1fr; }
  }
  @media (max-width: 760px) {
    #rk-dew-guide { margin-top: 22px; font-size: 16px; }
    #rk-dew-guide .rk-dp-shell { border-radius: 20px; }
    #rk-dew-guide .rk-dp-hero-metrics,
    #rk-dew-guide .rk-dp-grid-2,
    #rk-dew-guide .rk-dp-grid-3,
    #rk-dew-guide .rk-dp-answer,
    #rk-dew-guide .rk-dp-input-grid,
    #rk-dew-guide .rk-dp-chart-controls,
    #rk-dew-guide .rk-dp-auto-grid,
    #rk-dew-guide .rk-dp-checklist,
    #rk-dew-guide .rk-dp-author-layout { grid-template-columns: 1fr; }
    #rk-dew-guide .rk-dp-author-side { border-right: 0; border-bottom: 1px solid rgba(255, 255, 255, .13); }
    #rk-dew-guide #rk-dp-chart { height: 350px; }
    #rk-dew-guide .rk-dp-auto-facts { grid-template-columns: 1fr; }
    #rk-dew-guide .rk-dp-table-wrap { overflow: visible; border: 0; border-radius: 0; }
    #rk-dew-guide table,
    #rk-dew-guide thead,
    #rk-dew-guide tbody,
    #rk-dew-guide tr,
    #rk-dew-guide th,
    #rk-dew-guide td { display: block; width: 100%; }
    #rk-dew-guide thead { position: absolute; width: 1px; height: 1px; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); }
    #rk-dew-guide tbody { display: grid; gap: 12px; }
    #rk-dew-guide tbody tr { overflow: hidden; border: 1px solid var(--rk-dp-line); border-radius: 14px; background: var(--rk-dp-white); }
    #rk-dew-guide td,
    #rk-dew-guide tbody tr:nth-child(even) td {
      display: grid;
      grid-template-columns: minmax(112px, 42%) minmax(0, 1fr);
      gap: 12px;
      padding: 13px 15px;
      border-right: 0;
      border-bottom: 1px solid var(--rk-dp-line);
      background: var(--rk-dp-white);
    }
    #rk-dew-guide td::before { color: var(--rk-dp-dark); content: attr(data-label); font-size: .63rem; font-weight: 900; line-height: 1.4; }
    #rk-dew-guide tbody tr td:last-child { border-bottom: 0; }
  }
  @media (max-width: 520px) {
    #rk-dew-guide .rk-dp-content { padding-right: 16px; padding-left: 16px; }
    #rk-dew-guide .rk-dp-hero { padding-right: 21px; padding-left: 21px; }
    #rk-dew-guide .rk-dp-grid-4,
    #rk-dew-guide .rk-dp-result-grid { grid-template-columns: 1fr; }
    #rk-dew-guide .rk-dp-result-status { grid-template-columns: 50px minmax(0, 1fr); }
    #rk-dew-guide .rk-dp-status-icon { width: 46px; height: 46px; }
    #rk-dew-guide .rk-dp-result-card span { min-height: 0; }
    #rk-dew-guide #rk-dp-chart { height: 315px; }
    #rk-dew-guide .rk-dp-cta-button,
    #rk-dew-guide .rk-dp-action { width: 100%; text-align: center; }
    #rk-dew-guide .rk-dp-author-main { padding-right: 18px; padding-left: 18px; }
    #rk-dew-guide .rk-dp-author-quote { padding-left: 55px; }
    #rk-dew-guide td,
    #rk-dew-guide tbody tr:nth-child(even) td { grid-template-columns: 1fr; gap: 4px; }
  }
  @media (prefers-reduced-motion: reduce) {
    #rk-dew-guide * { scroll-behavior: auto !important; transition: none !important; }
  }
</style>

<article id="rk-dew-guide" aria-labelledby="rk-dp-visual-title">
  <div class="rk-dp-shell">
    <header class="rk-dp-hero">
      <span class="rk-dp-kicker">Chłodzenie zaczyna się od wilgotności</span>
      <div class="rk-dp-hero-title" id="rk-dp-visual-title">Punkt rosy wyznacza granicę <span>chłodzenia podłogowego</span></div>
      <p class="rk-dp-lead">Nie istnieje jedna bezpieczna temperatura wody na całe lato. Trzeba znać temperaturę i wilgotność powietrza, obliczyć punkt rosy, przyjąć margines sterowania oraz sprawdzić, czy najzimniejsza powierzchnia instalacji pozostaje powyżej tej granicy.</p>
      <div class="rk-dp-tags" aria-label="Zakres artykułu">
        <span class="rk-dp-tag">kalkulator punktu rosy</span>
        <span class="rk-dp-tag">temperatura powierzchni</span>
        <span class="rk-dp-tag">wilgotność względna</span>
        <span class="rk-dp-tag">automatyka antykondensacyjna</span>
        <span class="rk-dp-tag">pompa ciepła</span>
      </div>
      <div class="rk-dp-byline">
        <span><strong>Autor:</strong> Robert Kucharski</span>
        <span><strong>Czas czytania:</strong> około 31 minut</span>
        <span><strong>Aktualizacja techniczna:</strong> 14 września 2026 r.</span>
      </div>
      <div class="rk-dp-hero-metrics">
        <div class="rk-dp-hero-metric"><b>1. Zmierz warunki powietrza</b><span>Temperatura i RH muszą pochodzić ze strefy, którą chcesz chłodzić.</span></div>
        <div class="rk-dp-hero-metric"><b>2. Oblicz granicę powierzchni</b><span>Punkt rosy powiększ o margines wynikający z projektu i sterowania.</span></div>
        <div class="rk-dp-hero-metric"><b>3. Domknij automatykę</b><span>Układ ma zareagować przed osiągnięciem granicy, także w najbardziej wilgotnej strefie.</span></div>
      </div>
    </header>

    <nav class="rk-dp-nav" aria-label="Na skróty">
      <span class="rk-dp-nav-label">Na skróty — wszystkie główne części poradnika</span>
      <div class="rk-dp-nav-track">
        <a href="#rk-dp-szybka">Szybka odpowiedź</a>
        <a href="#rk-dp-trzy-temperatury">Trzy temperatury</a>
        <a href="#rk-dp-kalkulator">Kalkulator</a>
        <a href="#rk-dp-wykres">Wykres</a>
        <a href="#rk-dp-interpretacja">Interpretacja</a>
        <a href="#rk-dp-automatyka">Automatyka</a>
        <a href="#rk-dp-strefy">Strefy i czujniki</a>
        <a href="#rk-dp-wilgoc">Wilgoć i wentylacja</a>
        <a href="#rk-dp-aktywne-pasywne">Aktywne i pasywne</a>
        <a href="#rk-dp-moc">Moc chłodnicza</a>
        <a href="#rk-dp-hydraulika">Hydraulika</a>
        <a href="#rk-dp-okladzina">Okładzina</a>
        <a href="#rk-dp-uruchomienie">Uruchomienie</a>
        <a href="#rk-dp-bledy">Błędy</a>
        <a href="#rk-dp-podsumowanie">Podsumowanie</a>
        <a href="#rk-dp-zrodla">Źródła</a>
        <a href="#rk-dp-faq">FAQ</a>
        <a href="#rk-dp-author">Autor</a>
      </div>
    </nav>

    <main class="rk-dp-content">
      <section class="rk-dp-section" id="rk-dp-szybka">
        <span class="rk-dp-eyebrow">Odpowiedź w 60 sekund</span>
        <h2>Jak bezpiecznie chłodzić dom podłogówką?</h2>
        <p class="rk-dp-intro-lg">Kondensacja zaczyna się wtedy, gdy temperatura powierzchni osiągnie punkt rosy otaczającego ją powietrza. Dlatego bezpieczeństwa nie określa sama wilgotność, jedna nastawa pompy ciepła ani temperatura wody odczytana na rozdzielaczu. Liczy się ich aktualna zależność.</p>

        <div class="rk-dp-answer">
          <div>
            <h3>Najpierw punkt rosy, później temperatura instalacji</h3>
            <p>Automatyka powinna na bieżąco wyznaczać temperaturę punktu rosy z pomiaru temperatury i wilgotności względnej. Następnie dodaje się zaprojektowany margines i porównuje wynik z temperaturą chronionej powierzchni. Jeżeli zapas maleje, układ podnosi temperaturę wody, ogranicza chłodzenie strefy albo je zatrzymuje.</p>
          </div>
          <div class="rk-dp-answer-rule">
            <div><b>T powierzchni &gt; T rosy + margines</b><span>Podstawowa relacja ochrony przed kondensacją</span></div>
          </div>
        </div>

        <div class="rk-dp-grid-3">
          <div class="rk-dp-card rk-dp-card--cyan">
            <h3>Punkt rosy nie jest stały</h3>
            <p>Zmienia się wraz z temperaturą i zawartością wilgoci. Otwarcie okien w parny dzień, kąpiel albo gotowanie może szybko zmienić warunki w jednej części domu.</p>
          </div>
          <div class="rk-dp-card rk-dp-card--green">
            <h3>Podłoga nie usuwa wilgoci</h3>
            <p>Ma odbierać ciepło jawne bez wykraplania wody. Wilgoć utajoną musi obsłużyć wentylacja z odpowiednią obróbką powietrza, klimatyzacja lub osuszacz.</p>
          </div>
          <div class="rk-dp-card rk-dp-card--orange">
            <h3>Kalkulator nie projektuje układu</h3>
            <p>Wyznacza granicę termodynamiczną, ale nie oblicza zysków chłodniczych, temperatury powierzchni z temperatury wody ani wymaganych przepływów.</p>
          </div>
        </div>

        <p class="rk-dp-note">Jeżeli chłodzenie zapewnia <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">rewersyjna pompa ciepła</a>, funkcja chłodzenia urządzenia jest tylko jednym elementem. Równie ważne są odbiorniki, hydraulika, czujniki i scenariusz awaryjny.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-trzy-temperatury">
        <span class="rk-dp-eyebrow">Najważniejsze rozróżnienie</span>
        <h2>Temperatura powietrza, podłogi i wody to trzy różne wartości</h2>
        <p class="rk-dp-intro">Najczęstszy błąd polega na porównaniu punktu rosy wyłącznie z temperaturą zasilania. Woda przepływa wewnątrz rury, rura przekazuje chłód warstwom podłogi, a dopiero powierzchnia wymienia energię z pomieszczeniem. Różnice zależą od konstrukcji, przepływu, rozstawu, okładziny i chwilowego obciążenia.</p>

        <div class="rk-dp-grid-3">
          <div class="rk-dp-card">
            <div class="rk-dp-number-row">
              <span class="rk-dp-number">1</span>
              <div class="rk-dp-number-copy"><h3>Powietrze w strefie</h3><p>Temperatura i RH służą do obliczenia punktu rosy. Pomiar powinien reprezentować warunki pomieszczenia, a nie wnętrze rozdzielacza.</p></div>
            </div>
          </div>
          <div class="rk-dp-card">
            <div class="rk-dp-number-row">
              <span class="rk-dp-number rk-dp-number--orange">2</span>
              <div class="rk-dp-number-copy"><h3>Powierzchnia podłogi</h3><p>To jej kontakt z powietrzem decyduje o kondensacji powierzchniowej. Najzimniejszy fragment może być ważniejszy niż średnia z całego pokoju.</p></div>
            </div>
          </div>
          <div class="rk-dp-card">
            <div class="rk-dp-number-row">
              <span class="rk-dp-number rk-dp-number--green">3</span>
              <div class="rk-dp-number-copy"><h3>Woda i elementy hydrauliczne</h3><p>Zasilanie może być chłodniejsze od powierzchni. Rury doprowadzające, armatura i rozdzielacz także wymagają ochrony oraz właściwej izolacji.</p></div>
            </div>
          </div>
        </div>

        <div class="rk-dp-formula" aria-label="Reguła wyznaczania najniższej dopuszczalnej temperatury powierzchni">
          <div class="rk-dp-formula-main">T<sub>pow,min</sub> = max(T<sub>rosy</sub> + ΔT<sub>bezp.</sub>, limit komfortu i materiału, ograniczenie systemu)</div>
          <small>Najbardziej restrykcyjny warunek wyznacza rzeczywistą dolną granicę temperatury powierzchni.</small>
        </div>

        <p>Wymagania komfortu i sposoby obliczania emisji powierzchniowej szerzej omawia poradnik o <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">obliczeniach według EN 1264</a>. Ochrona przed punktem rosy jest osobnym sprawdzeniem i nie powinna być zastępowana jedną tabelą temperatur.</p>

        <div class="rk-dp-table-wrap">
          <table>
            <thead><tr><th>Wielkość</th><th>Co opisuje</th><th>Jak ją uzyskać</th><th>Czego nie wolno zakładać</th></tr></thead>
            <tbody>
              <tr><td data-label="Wielkość"><strong>Temperatura powietrza</strong></td><td data-label="Co opisuje">Warunki cieplne w strefie na poziomie reprezentatywnym dla użytkownika.</td><td data-label="Jak ją uzyskać">Czujnik pokojowy umieszczony poza słońcem, nawiewem i zimną ścianą.</td><td data-label="Czego nie zakładać">Że jeden czujnik zawsze opisuje cały dom.</td></tr>
              <tr><td data-label="Wielkość"><strong>Wilgotność względna</strong></td><td data-label="Co opisuje">Stopień nasycenia powietrza parą wodną przy aktualnej temperaturze.</td><td data-label="Jak ją uzyskać">Skalibrowany czujnik RH lub termohigrometr.</td><td data-label="Czego nie zakładać">Że sama wartość 60% albo 70% przesądza o kondensacji.</td></tr>
              <tr><td data-label="Wielkość"><strong>Punkt rosy</strong></td><td data-label="Co opisuje">Temperaturę, przy której dane powietrze osiąga nasycenie.</td><td data-label="Jak ją uzyskać">Obliczenie z temperatury oraz RH.</td><td data-label="Czego nie zakładać">Że pozostanie stały po zmianie pogody lub użytkowania.</td></tr>
              <tr><td data-label="Wielkość"><strong>Temperatura powierzchni</strong></td><td data-label="Co opisuje">Warunek kondensacji i komfortu na wykończonej podłodze.</td><td data-label="Jak ją uzyskać">Pomiar, obliczenia konstrukcji albo oba źródła danych.</td><td data-label="Czego nie zakładać">Że jest równa temperaturze wody.</td></tr>
              <tr><td data-label="Wielkość"><strong>Temperatura zasilania</strong></td><td data-label="Co opisuje">Parametr wody dopływającej do pętli.</td><td data-label="Jak ją uzyskać">Pomiar na instalacji oraz nastawa regulatora.</td><td data-label="Czego nie zakładać">Że jedna wartość 16–18°C jest bezpieczna w każdych warunkach.</td></tr>
            </tbody>
          </table>
        </div>
      </section>

      <section class="rk-dp-section" id="rk-dp-kalkulator">
        <span class="rk-dp-eyebrow">Narzędzie główne</span>
        <h2>Kalkulator punktu rosy i bezpiecznej temperatury podłogi</h2>
        <p class="rk-dp-intro">Wprowadź warunki z konkretnej strefy oraz zmierzoną lub planowaną temperaturę powierzchni. Kalkulator wyznaczy punkt rosy, temperaturę powierzchni z przyjętym marginesem, rzeczywisty zapas oraz maksymalną wilgotność dla podanych warunków.</p>

        <div class="rk-dp-tool" aria-labelledby="rk-dp-calc-heading">
          <div class="rk-dp-tool-head">
            <span class="rk-dp-eyebrow">Kalkulator techniczny</span>
            <h3 id="rk-dp-calc-heading">Sprawdź granicę kondensacji</h3>
            <p>Wzór Magnus-Tetensa jest tu używany jako praktyczne przybliżenie dla typowych warunków wewnętrznych. Wynik nie zastępuje projektu, pomiarów powierzchni ani logiki bezpieczeństwa sterownika.</p>
          </div>
          <div class="rk-dp-tool-body">
            <div class="rk-dp-presets" aria-label="Przykładowe scenariusze">
              <button class="rk-dp-preset" type="button" data-preset="humid">Parny dzień</button>
              <button class="rk-dp-preset is-active" type="button" data-preset="typical">Warunki umiarkowane</button>
              <button class="rk-dp-preset" type="button" data-preset="dry">Powietrze suche</button>
            </div>

            <div class="rk-dp-input-grid">
              <div class="rk-dp-field">
                <label for="rk-dp-air-temp">Temperatura powietrza w strefie</label>
                <div class="rk-dp-input-shell"><input id="rk-dp-air-temp" type="number" min="10" max="40" step="0.1" value="26" inputmode="decimal"><span class="rk-dp-unit">°C</span></div>
                <small>Pomiar reprezentatywny dla pomieszczenia.</small>
              </div>
              <div class="rk-dp-field">
                <label for="rk-dp-rh">Wilgotność względna</label>
                <div class="rk-dp-input-shell"><input id="rk-dp-rh" type="number" min="20" max="95" step="1" value="50" inputmode="decimal"><span class="rk-dp-unit">% RH</span></div>
                <small>Nie oceniaj ryzyka na podstawie samego RH.</small>
              </div>
              <div class="rk-dp-field">
                <label for="rk-dp-surface-temp">Najzimniejsza temperatura powierzchni</label>
                <div class="rk-dp-input-shell"><input id="rk-dp-surface-temp" type="number" min="5" max="35" step="0.1" value="20" inputmode="decimal"><span class="rk-dp-unit">°C</span></div>
                <small>Nie musi odpowiadać średniej temperaturze podłogi.</small>
              </div>
              <div class="rk-dp-field">
                <label for="rk-dp-margin">Przyjęty margines bezpieczeństwa</label>
                <div class="rk-dp-input-shell"><input id="rk-dp-margin" type="number" min="0.5" max="4" step="0.1" value="2" inputmode="decimal"><span class="rk-dp-unit">K</span></div>
                <small>Parametr projektowy, nie uniwersalna stała.</small>
              </div>
              <div class="rk-dp-field">
                <label for="rk-dp-supply">Temperatura wody na zasilaniu</label>
                <div class="rk-dp-input-shell"><input id="rk-dp-supply" type="number" min="5" max="35" step="0.1" value="18" inputmode="decimal"><span class="rk-dp-unit">°C</span></div>
                <small>Służy do kontroli najzimniejszych elementów hydraulicznych.</small>
              </div>
              <div class="rk-dp-field">
                <label for="rk-dp-return">Temperatura wody na powrocie</label>
                <div class="rk-dp-input-shell"><input id="rk-dp-return" type="number" min="5" max="35" step="0.1" value="21" inputmode="decimal"><span class="rk-dp-unit">°C</span></div>
                <small>Kalkulator nie przelicza z niej temperatury powierzchni.</small>
              </div>
            </div>

            <button class="rk-dp-action" id="rk-dp-calc-button" type="button">Oblicz i oceń warunki</button>

            <div class="rk-dp-results" aria-live="polite">
              <div class="rk-dp-result-status" id="rk-dp-result-status">
                <div class="rk-dp-status-icon" id="rk-dp-status-icon" aria-hidden="true">✓</div>
                <div class="rk-dp-status-copy"><strong id="rk-dp-status-title">Bezpieczny zapas powierzchni</strong><span id="rk-dp-status-text">Temperatura podłogi pozostaje powyżej punktu rosy wraz z przyjętym marginesem.</span></div>
              </div>
              <div class="rk-dp-result-grid">
                <div class="rk-dp-result-card"><span>Obliczony punkt rosy</span><b id="rk-dp-dew-result">14,8°C</b><small>Granica nasycenia dla podanych warunków.</small></div>
                <div class="rk-dp-result-card"><span>Powierzchnia z marginesem</span><b id="rk-dp-target-result">16,8°C</b><small>Punkt rosy powiększony o wybrany zapas.</small></div>
                <div class="rk-dp-result-card"><span>Rzeczywisty zapas do rosy</span><b id="rk-dp-gap-result">5,2 K</b><small>Różnica między powierzchnią i punktem rosy.</small></div>
                <div class="rk-dp-result-card"><span>Maksymalne RH dla powierzchni</span><b id="rk-dp-max-rh-result">61%</b><small>Dla tej temperatury powietrza i marginesu.</small></div>
              </div>
              <div class="rk-dp-water-note" id="rk-dp-water-note">Najchłodniejsza wpisana temperatura wody wynosi 18,0°C. To nie jest obliczona temperatura posadzki; rury, rozdzielacz i armatura wymagają osobnego sprawdzenia oraz izolacji.</div>
            </div>

            <p class="rk-dp-tool-limit"><strong>Zakres odpowiedzialności narzędzia:</strong> wynik dotyczy wpisanych danych i wskazanej powierzchni. Kalkulator nie zna dokładności czujników, gradientu temperatury podłogi, mostków cieplnych, temperatury rur w szachcie ani rozkładu wilgotności w innych pomieszczeniach. Wartości skrajne i wyniki graniczne powinny zostać potwierdzone pomiarem oraz dokumentacją automatyki.</p>
          </div>
        </div>
      </section>

      <section class="rk-dp-section" id="rk-dp-wykres">
        <span class="rk-dp-eyebrow">Zobacz moment przecięcia granicy</span>
        <h2>Interaktywny wykres punktu rosy, wilgotności i temperatury podłogi</h2>
        <p class="rk-dp-intro">Wykres pokazuje, jak przy stałej temperaturze powietrza wzrost wilgotności podnosi punkt rosy. Niebieska linia powierzchni pozostaje pozioma, natomiast granice kondensacji przesuwają się w górę. Miejsce przecięcia odpowiada maksymalnej wilgotności dla wybranego marginesu.</p>

        <div class="rk-dp-tool" aria-labelledby="rk-dp-chart-heading">
          <div class="rk-dp-tool-head">
            <span class="rk-dp-eyebrow">Wykres edukacyjny</span>
            <h3 id="rk-dp-chart-heading">Co zmieni się po wzroście wilgotności?</h3>
            <p>Przesuń suwaki. Zielone pole oznacza zachowany margines, żółte — pracę bliżej granicy, a czerwone — warunki, w których wpisana temperatura powierzchni osiąga punkt rosy.</p>
          </div>
          <div class="rk-dp-tool-body">
            <div class="rk-dp-chart-controls">
              <div class="rk-dp-range-card">
                <div class="rk-dp-range-head"><label for="rk-dp-chart-air">Temperatura powietrza</label><output id="rk-dp-chart-air-output">26,0°C</output></div>
                <input id="rk-dp-chart-air" type="range" min="20" max="32" step="0.5" value="26">
              </div>
              <div class="rk-dp-range-card">
                <div class="rk-dp-range-head"><label for="rk-dp-chart-surface">Temperatura powierzchni</label><output id="rk-dp-chart-surface-output">20,0°C</output></div>
                <input id="rk-dp-chart-surface" type="range" min="14" max="25" step="0.5" value="20">
              </div>
            </div>
            <div class="rk-dp-chart-legend" aria-label="Legenda wykresu">
              <span class="rk-dp-legend-item"><span class="rk-dp-legend-line"></span>Punkt rosy</span>
              <span class="rk-dp-legend-item"><span class="rk-dp-legend-line rk-dp-legend-line--target"></span>Punkt rosy + margines</span>
              <span class="rk-dp-legend-item"><span class="rk-dp-legend-line rk-dp-legend-line--surface"></span>Temperatura podłogi</span>
            </div>
            <div class="rk-dp-canvas-shell">
              <canvas id="rk-dp-chart" width="1050" height="430" role="img" aria-label="Wykres punktu rosy w funkcji wilgotności względnej"></canvas>
            </div>
            <div class="rk-dp-chart-summary" id="rk-dp-chart-summary" aria-live="polite">Dla temperatury powietrza 26,0°C, powierzchni 20,0°C i marginesu 2,0 K zapas projektowy zostaje wykorzystany przy wilgotności około 61% RH. Sama kondensacja zaczyna się przy wyższej wilgotności.</div>
          </div>
        </div>

        <div class="rk-dp-warning"><p><strong>Wykres nie jest tabelą mocy chłodniczej.</strong> Pokazuje granicę wilgotnościową dla wybranej powierzchni. Moc trzeba policzyć z różnicy temperatur, powierzchni czynnej, konstrukcji, okładziny i zysków chłodniczych pomieszczenia.</p></div>
      </section>

      <section class="rk-dp-section" id="rk-dp-interpretacja">
        <span class="rk-dp-eyebrow">Od liczby do decyzji</span>
        <h2>Jak interpretować wynik kalkulatora punktu rosy?</h2>
        <p class="rk-dp-intro">Wynik nie powinien odpowiadać jedynie „bezpiecznie” albo „niebezpiecznie”. Dla automatyki ważne jest, ile zapasu pozostało, jak szybko zmieniają się warunki i czy pomiar opisuje rzeczywiście najchłodniejsze miejsce.</p>

        <div class="rk-dp-grid-3">
          <div class="rk-dp-card rk-dp-card--green"><h3>Bezpieczny zapas</h3><p>Powierzchnia jest cieplejsza od punktu rosy o wartość równą lub większą od przyjętego marginesu. Nie oznacza to jeszcze, że instalacja ma wystarczającą moc chłodniczą.</p></div>
          <div class="rk-dp-card rk-dp-card--yellow"><h3>Zmniejszony margines</h3><p>Kondensacja jeszcze nie zachodzi, ale część zapasu została wykorzystana. Regulator powinien ograniczać chłodzenie odpowiednio wcześnie, zamiast czekać na pierwszą kroplę.</p></div>
          <div class="rk-dp-card rk-dp-card--orange"><h3>Ryzyko kondensacji</h3><p>Temperatura powierzchni osiąga punkt rosy albo spada niżej. Trzeba podnieść temperaturę chronionego elementu, odciąć strefę i ustalić przyczynę.</p></div>
        </div>

        <div class="rk-dp-important"><p><strong>Ważne:</strong> podłoga o temperaturze 20°C może mieć duży zapas przy suchym powietrzu i znaleźć się blisko granicy po wzroście RH. Z kolei 70% RH nie tworzy automatycznie kondensacji na każdej powierzchni — decyduje porównanie z aktualnym punktem rosy.</p></div>

        <h3>Dlaczego margines nie jest jedną normową liczbą dla każdego domu?</h3>
        <p>Margines ma uwzględnić niepewność pomiaru, dokładność czujników, ich położenie, histerezę sterownika, bezwładność zaworu i podłogi oraz różnice temperatur w obrębie powierzchni. Innej oceny może wymagać układ z jednym czujnikiem centralnym, a innej instalacja z pomiarem RH w wielu strefach i kontrolą najzimniejszych elementów.</p>
        <p>Bezwładność ma znaczenie także latem. Po zmianie sygnału sterującego temperatura masywnej podłogi nie zmienia się natychmiast; więcej o tej zależności wyjaśnia poradnik o <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej ogrzewania podłogowego</a>.</p>

        <aside class="rk-dp-cta" aria-label="Projekt instalacji podłogowej">
          <span class="rk-dp-eyebrow">Granica jest policzona — teraz trzeba sprawdzić wydajność</span>
          <h3>Punkt rosy mówi, jak nisko wolno zejść. Projekt odpowiada, czy przy tej temperaturze podłoga odbierze zyski ciepła.</h3>
          <p>Kalkulator nie zna powierzchni czynnej, nasłonecznienia, okładziny, długości pętli, przepływów ani sposobu sterowania każdą strefą. Te elementy trzeba połączyć z bilansem pomieszczeń i hydrauliką całej instalacji.</p>
          <div class="rk-dp-cta-limit"><strong>Przed zamówieniem sprawdź zakres:</strong> projekt ogrzewania podłogowego powinien określić geometrię pętli, przepływy i parametry grzewcze. Jeżeli instalacja ma również chłodzić, ten tryb, jego obciążenia oraz zabezpieczenia trzeba potwierdzić oddzielnie w założeniach projektu.</div>
          <a class="rk-dp-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź zakres indywidualnego projektu podłogówki</a>
        </aside>
      </section>

      <section class="rk-dp-section" id="rk-dp-automatyka">
        <span class="rk-dp-eyebrow">Interaktywna grafika edukacyjna</span>
        <h2>Jak automatyka zabezpiecza chłodzenie podłogowe przed kondensacją?</h2>
        <p class="rk-dp-intro">Kliknij kolejny moduł. Poprawna ochrona nie polega na zapisaniu jednej minimalnej temperatury wody. To łańcuch pomiaru, obliczenia, porównania i reakcji, który musi pozostawać spójny również po awarii czujnika lub utracie komunikacji.</p>

        <div class="rk-dp-auto-grid" role="group" aria-label="Sześć modułów ochrony przed kondensacją">
          <button class="rk-dp-auto-card is-active" type="button" data-auto-step="1" aria-pressed="true">
            <span class="rk-dp-number">1</span><b>Pomiar temperatury i RH</b><span>Warunki powietrza w odpowiedniej strefie.</span>
          </button>
          <button class="rk-dp-auto-card" type="button" data-auto-step="2" aria-pressed="false">
            <span class="rk-dp-number rk-dp-number--orange">2</span><b>Obliczenie punktu rosy</b><span>Aktualna granica zamiast stałej wartości sezonowej.</span>
          </button>
          <button class="rk-dp-auto-card" type="button" data-auto-step="3" aria-pressed="false">
            <span class="rk-dp-number rk-dp-number--green">3</span><b>Dodanie marginesu</b><span>Zapas na błędy pomiaru i dynamikę układu.</span>
          </button>
          <button class="rk-dp-auto-card" type="button" data-auto-step="4" aria-pressed="false">
            <span class="rk-dp-number rk-dp-number--purple">4</span><b>Porównanie powierzchni</b><span>Kontrola najzimniejszego chronionego miejsca.</span>
          </button>
          <button class="rk-dp-auto-card" type="button" data-auto-step="5" aria-pressed="false">
            <span class="rk-dp-number rk-dp-number--yellow">5</span><b>Ograniczenie chłodzenia</b><span>Zmiana temperatury, przepływu lub stanu strefy.</span>
          </button>
          <button class="rk-dp-auto-card" type="button" data-auto-step="6" aria-pressed="false">
            <span class="rk-dp-number">6</span><b>Obsługa wilgoci i awarii</b><span>Osuszanie, alarm i bezpieczny stan instalacji.</span>
          </button>
        </div>

        <div class="rk-dp-auto-detail" id="rk-dp-auto-detail" aria-live="polite">
          <span class="rk-dp-auto-detail-label" id="rk-dp-auto-label">Moduł 1 · dane wejściowe</span>
          <h3 id="rk-dp-auto-title">Pomiar musi opisywać warunki w chłodzonej strefie</h3>
          <p id="rk-dp-auto-text">Czujnik temperatury i wilgotności względnej nie powinien znajdować się w słońcu, przy nawiewie, nad źródłem pary ani wewnątrz szafy. Jeden pomiar centralny może nie wychwycić lokalnego wzrostu wilgotności w łazience, kuchni lub pokoju po otwarciu okna.</p>
          <div class="rk-dp-auto-facts">
            <div class="rk-dp-auto-fact"><b id="rk-dp-auto-fact1-title">Co sprawdzić</b><span id="rk-dp-auto-fact1">Miejsce czujnika, częstotliwość odczytu i dokładność RH.</span></div>
            <div class="rk-dp-auto-fact"><b id="rk-dp-auto-fact2-title">Typowy błąd</b><span id="rk-dp-auto-fact2">Sterowanie całym domem według jednego, przypadkowo umieszczonego sensora.</span></div>
            <div class="rk-dp-auto-fact"><b id="rk-dp-auto-fact3-title">Bezpieczna reakcja</b><span id="rk-dp-auto-fact3">Brak wiarygodnego odczytu powinien ograniczyć chłodzenie, a nie zezwalać na pełną moc.</span></div>
          </div>
        </div>

        <p class="rk-dp-note">Regulator pogodowy może zarządzać temperaturą źródła, ale sama <a href="https://projekt-ogrzewania.pl/sterownik-regulator-pogodowy/">regulacja pogodowa</a> nie zna lokalnej wilgotności w pokojach. Z kolei <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/">zawór mieszający</a> jest elementem wykonawczym — nie zastępuje algorytmu ani czujników.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-strefy">
        <span class="rk-dp-eyebrow">Najgorszy przypadek, nie średnia domu</span>
        <h2>Strefy, czujniki i najzimniejsze miejsca instalacji</h2>
        <p class="rk-dp-intro">Wspólna temperatura zasilania obsługuje zwykle kilka pomieszczeń. Jeżeli jedna strefa ma wyższy punkt rosy, to ona może wyznaczyć ograniczenie dla całej grupy. Oddzielne odcięcie pętli pomaga tylko wtedy, gdy logika źródła i pompy przewiduje pracę przy zmniejszonym przepływie.</p>

        <div class="rk-dp-grid-2">
          <div class="rk-dp-card rk-dp-card--soft">
            <h3>Pomieszczenia szczególnego ryzyka</h3>
            <ul>
              <li>łazienka po kąpieli i kuchnia podczas gotowania,</li>
              <li>strefa przy otwartych drzwiach tarasowych w parny dzień,</li>
              <li>pomieszczenie z inną wentylacją lub bez przepływu powietrza,</li>
              <li>fragment podłogi o lokalnie niższej temperaturze,</li>
              <li>rozdzielacz, armatura i przewody prowadzone poza strefą kontrolowaną.</li>
            </ul>
          </div>
          <div class="rk-dp-card rk-dp-card--cyan">
            <h3>Co powinno być przypisane do strefy?</h3>
            <ul>
              <li>pomiar temperatury i RH,</li>
              <li>pętle obsługujące dane pomieszczenie,</li>
              <li>warunek odcięcia albo ograniczenia,</li>
              <li>priorytet wobec wspólnego zasilania,</li>
              <li>stan awaryjny po utracie pomiaru.</li>
            </ul>
          </div>
        </div>

        <h3>Jeden czujnik centralny czy pomiar w każdym pokoju?</h3>
        <p>Nie ma jednej odpowiedzi dla wszystkich instalacji. Otwarta część dzienna może być reprezentowana przez poprawnie umieszczony czujnik, ale niezależna łazienka, sypialnia z otwieranym oknem albo kondygnacja o innym profilu wilgotności może wymagać osobnego pomiaru. Trzeba ustalić, czy system ogranicza wspólne zasilanie, czy potrafi zamknąć tylko zagrożoną strefę.</p>
        <p>Mechanikę zamykania pętli opisuje poradnik o <a href="https://projekt-ogrzewania.pl/silowniki-termoelektryczne-na-rozdzielaczach/">siłownikach termoelektrycznych</a>. Wpływ zamykania obwodów na cały układ wyjaśnia natomiast analiza <a href="https://projekt-ogrzewania.pl/sterowanie-strefowe-ogrzewaniem-czy-warto/">sterowania strefowego ogrzewaniem</a>. W trybie chłodzenia dochodzi do tego nadrzędny warunek wilgotnościowy.</p>

        <div class="rk-dp-warning"><p><strong>Czujnik podłogowy i czujnik RH pełnią inne funkcje.</strong> Pierwszy może kontrolować temperaturę w wybranym miejscu, drugi dostarcza danych o wilgotności powietrza. Do obliczenia punktu rosy potrzebne są temperatura powietrza oraz RH; sam <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujnik podłogowy</a> nie wystarczy.</p></div>
      </section>

      <section class="rk-dp-section" id="rk-dp-wilgoc">
        <span class="rk-dp-eyebrow">Ciepło jawne i wilgoć utajona</span>
        <h2>Chłodzenie podłogowe a rekuperacja, klimatyzacja i osuszanie</h2>
        <p class="rk-dp-intro">Podłoga odbiera energię bez celowego wykraplania wody. Oznacza to, że nie zapewnia kontrolowanego usuwania wilgoci utajonej. Jeżeli zawartość wilgoci w powietrzu rośnie, punkt rosy przesuwa się w górę i ogranicza dostępną różnicę temperatur dla chłodzenia powierzchniowego.</p>

        <div class="rk-dp-table-wrap">
          <table>
            <thead><tr><th>Element</th><th>Co może zrobić</th><th>Czego nie należy mu przypisywać</th><th>Co sprawdzić</th></tr></thead>
            <tbody>
              <tr><td data-label="Element"><strong>Podłoga chłodząca</strong></td><td data-label="Co może zrobić">Odbierać ciepło jawne przy zachowaniu temperatury powierzchni ponad punktem rosy.</td><td data-label="Czego nie przypisywać">Kontrolowanego osuszania powietrza.</td><td data-label="Co sprawdzić">Moc, powierzchnię czynną, komfort i granicę kondensacji.</td></tr>
              <tr><td data-label="Element"><strong>Wentylacja mechaniczna</strong></td><td data-label="Co może zrobić">Wymieniać powietrze i wpływać na bilans wilgoci zależnie od warunków zewnętrznych oraz wymiennika.</td><td data-label="Czego nie przypisywać">Gwarantowanego osuszania w każdy parny dzień.</td><td data-label="Co sprawdzić">Strumienie, rodzaj odzysku, powietrze zewnętrzne i sposób obróbki.</td></tr>
              <tr><td data-label="Element"><strong>Chłodnica powietrza</strong></td><td data-label="Co może zrobić">Obniżać temperaturę powietrza, a poniżej punktu rosy również usuwać wilgoć i odprowadzać skropliny.</td><td data-label="Czego nie przypisywać">Wydajności niezależnej od temperatury czynnika i przepływu powietrza.</td><td data-label="Co sprawdzić">Moc jawną i utajoną, odpływ kondensatu oraz automatykę.</td></tr>
              <tr><td data-label="Element"><strong>Klimatyzator lub osuszacz</strong></td><td data-label="Co może zrobić">Aktywnie obniżać zawartość wilgoci w określonych warunkach pracy.</td><td data-label="Czego nie przypisywać">Automatycznej współpracy z podłogą bez wspólnej logiki.</td><td data-label="Co sprawdzić">Wydajność osuszania, sterowanie, hałas, energię i odpływ skroplin.</td></tr>
            </tbody>
          </table>
        </div>

        <p>Rekuperator z wymiennikiem entalpicznym może ograniczać przenoszenie wilgoci między strumieniami w pewnych warunkach, ale nie jest tym samym co aktywny osuszacz. Gdy powietrze zewnętrzne ma wysoką zawartość wilgoci, zwiększenie wentylacji bez analizy bilansu może podnieść obciążenie wilgocią zamiast je zmniejszyć. Więcej o roli centrali wyjaśnia poradnik <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/">rekuperacja i ogrzewanie podłogowe</a>.</p>
        <p>Warto również odróżnić wilgotność względną od ilości pary wodnej. Sam spadek temperatury powietrza podnosi RH nawet bez dopływu dodatkowej wilgoci. Zależność tę rozwija artykuł o tym, <a href="https://projekt-ogrzewania.pl/jak-ogrzewanie-podlogowe-wplywa-na-wilgotnosc-powietrza-w-domu/">jak ogrzewanie podłogowe wpływa na wilgotność powietrza</a>.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-aktywne-pasywne">
        <span class="rk-dp-eyebrow">Inne źródło chłodu, ta sama granica powierzchni</span>
        <h2>Chłodzenie aktywne i pasywne pompą ciepła</h2>
        <p class="rk-dp-intro">Sposób wytwarzania chłodu zmienia pracę źródła, ale nie usuwa ograniczenia wynikającego z punktu rosy. Zarówno przy pracy rewersyjnej sprężarki, jak i przy chłodzeniu pasywnym, instalacja po stronie budynku musi dostarczyć wodę o temperaturze wynikającej z aktualnych warunków oraz konstrukcji podłogi.</p>

        <div class="rk-dp-grid-2">
          <div class="rk-dp-card rk-dp-card--cyan">
            <h3>Chłodzenie aktywne</h3>
            <p>Pompa ciepła pracuje w odwróconym obiegu chłodniczym. Temperatura wody i dostępna moc zależą od możliwości urządzenia, warunków pracy, przepływu i sterowania. Nie należy zakładać, że najniższa możliwa nastawa urządzenia jest właściwa dla podłogi.</p>
          </div>
          <div class="rk-dp-card rk-dp-card--green">
            <h3>Chłodzenie pasywne</h3>
            <p>Energia może być przekazywana do gruntu przez wymiennik z ograniczoną pracą sprężarki. Niska temperatura po stronie dolnego źródła nadal wymaga kontrolowanego przekazania do obiegu budynku i ochrony wszystkich zimnych elementów.</p>
          </div>
        </div>

        <p>Jeżeli obiegi są rozdzielone, trzeba policzyć warunki po obu stronach <a href="https://projekt-ogrzewania.pl/zasada-dzialania-wymiennika-plytowego-w-ogrzewaniu-podlogowym/">wymiennika płytowego</a>. Sam wymiennik nie ustala bezpiecznej temperatury i wprowadza własny spadek temperatury oraz opór hydrauliczny. Dla instalacji projektowanej od początku warto połączyć tę analizę z zasadami opisanymi w poradniku <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>.</p>

        <div class="rk-dp-note"><p><strong>Najważniejsze:</strong> automatyka źródła może znać temperaturę zasilania i warunki zewnętrzne, ale punkt rosy powinien być wyznaczany z warunków powietrza wewnątrz odpowiedniej strefy. Pogoda zewnętrzna nie zastępuje pomiaru wewnętrznego.</p></div>
      </section>

      <section class="rk-dp-section" id="rk-dp-moc">
        <span class="rk-dp-eyebrow">Granica kondensacji nie jest bilansem pomieszczenia</span>
        <h2>Jak sprawdzić możliwą moc chłodniczą podłogi?</h2>
        <p class="rk-dp-intro">Nie można przypisać gotowej mocy 20, 35 albo 45 W/m² wyłącznie do temperatury powietrza i RH. Punkt rosy określa dolną granicę powierzchni, natomiast strumień chłodu zależy od różnicy temperatur między pomieszczeniem i podłogą, wymiany konwekcyjnej oraz radiacyjnej, powierzchni czynnej i całej konstrukcji.</p>

        <div class="rk-dp-grid-4">
          <div class="rk-dp-card"><div class="rk-dp-number-row"><span class="rk-dp-number">1</span><div class="rk-dp-number-copy"><h3>Policz zyski</h3><p>Uwzględnij słońce, przeszklenia, ludzi, urządzenia, przegrody i wentylację.</p></div></div></div>
          <div class="rk-dp-card"><div class="rk-dp-number-row"><span class="rk-dp-number rk-dp-number--orange">2</span><div class="rk-dp-number-copy"><h3>Ustal powierzchnię</h3><p>Liczy się fragment podłogi rzeczywiście uczestniczący w wymianie ciepła.</p></div></div></div>
          <div class="rk-dp-card"><div class="rk-dp-number-row"><span class="rk-dp-number rk-dp-number--green">3</span><div class="rk-dp-number-copy"><h3>Wyznacz limit</h3><p>Punkt rosy, margines, komfort i okładzina ograniczają temperaturę powierzchni.</p></div></div></div>
          <div class="rk-dp-card"><div class="rk-dp-number-row"><span class="rk-dp-number rk-dp-number--purple">4</span><div class="rk-dp-number-copy"><h3>Porównaj moce</h3><p>Dostępna moc podłogi musi zostać zestawiona z obciążeniem każdej strefy.</p></div></div></div>
        </div>

        <div class="rk-dp-formula">
          <div class="rk-dp-formula-main">Q<sub>dostępne</sub> = A<sub>czynna</sub> × q<sub>powierzchni</sub> &nbsp;&nbsp; oraz &nbsp;&nbsp; Q<sub>dostępne</sub> ≥ Q<sub>chłodnicze strefy</sub></div>
          <small>Wartość q powierzchni trzeba wyznaczyć dla konkretnego układu, temperatur i sposobu obliczeń — nie odczytywać z tabeli samej wilgotności.</small>
        </div>

        <p>Podstawą jest obliczenie letnich zysków ciepła, a nie wykorzystanie zimowego wyniku <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowego obciążenia cieplnego OZC</a> jako gotowej mocy chłodniczej. Szczególnej uwagi wymagają pokoje z dużą ekspozycją słoneczną; zależności po stronie przegrzewania rozwija poradnik o <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/">pasywnych zyskach ciepła</a>.</p>
        <p>Jeżeli podłoga nie pokrywa obciążenia przy bezpiecznej temperaturze powierzchni, rozwiązaniem nie jest automatyczne obniżenie temperatury wody. Najpierw rozważa się ograniczenie zysków słonecznych, pracę wyprzedzającą, dodatkowy emiter chłodniczy lub urządzenie zdolne także do osuszania. Dobrym punktem odniesienia jest analiza <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">podłogówki w domu z dużymi przeszkleniami</a>, przy czym warunki zimowe i letnie należy liczyć oddzielnie.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-hydraulika">
        <span class="rk-dp-eyebrow">Przepływ wynika z mocy i różnicy temperatur</span>
        <h2>Temperatura wody, przepływy, pętle i pompa obiegowa</h2>
        <p class="rk-dp-intro">Nie ma zasady, że chłodzenie zawsze wymaga dwukrotnie większego przepływu. Dla określonej mocy zmniejszenie różnicy temperatur między zasilaniem i powrotem zwiększa wymagany przepływ, ale rzeczywisty wynik zależy od przyjętej mocy, temperatur, liczby czynnych pętli oraz oporów instalacji.</p>

        <div class="rk-dp-formula">
          <div class="rk-dp-formula-main">Q = ρ × c<sub>p</sub> × V̇ × ΔT</div>
          <small>Ta sama zależność obowiązuje w ogrzewaniu i chłodzeniu. Najpierw ustala się moc oraz ΔT, następnie przepływ, a dopiero później opory i punkt pracy pompy.</small>
        </div>

        <div class="rk-dp-grid-3">
          <div class="rk-dp-card"><h3>Obieg i zasilanie</h3><p>Trzeba ustalić, kto reguluje temperaturę, gdzie jest pompa, czy występuje mieszanie lub wymiennik i jak wygląda droga krytyczna. Pomaga w tym opis <a href="https://projekt-ogrzewania.pl/obieg-grzewczy-w-wodnym-ogrzewaniu-podlogowym/">obiegu grzewczego podłogówki</a>.</p></div>
          <div class="rk-dp-card"><h3>Pompa i stany częściowe</h3><p>Pompa ma zapewnić wymagany przepływ przy oporze najbardziej wymagającej czynnej drogi. Trzeba sprawdzić także sytuację po zamknięciu części stref. Zobacz zasady <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">doboru pompy obiegowej</a>.</p></div>
          <div class="rk-dp-card"><h3>ΔT nie jest stałe</h3><p>Różnica zasilanie–powrót jest wynikiem przepływu i odbieranej mocy. Nie należy jej przepisywać bez sprawdzenia; szerzej wyjaśnia to artykuł o <a href="https://projekt-ogrzewania.pl/spadek-temperatury-%ce%b4t-roznica-miedzy-temperatura-zasilania-a-powrotu/">różnicy temperatur ΔT</a>.</p></div>
        </div>

        <h3>Czy pętla chłodząca musi mieć maksymalnie 80 metrów?</h3>
        <p>Nie jest to uniwersalna granica. Długość ograniczają średnica wewnętrzna, wymagany przepływ, opory miejscowe, charakterystyka pompy, liczba równoległych pętli i dopuszczalny spadek ciśnienia. Każda <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">pętla ogrzewania podłogowego</a> powinna mieć policzoną moc, przepływ i opór także dla rozważanego trybu chłodzenia. Znaczenie geometrii i wymiaru przewodów rozwija poradnik o <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">średnicach rur w ogrzewaniu podłogowym</a>.</p>

        <h3>Czy chłodzenie wymaga zawsze rozstawu 10 cm i ślimaka?</h3>
        <p>Gęstszy rozstaw oraz układ ślimakowy mogą poprawiać równomierność temperatury, lecz nie są samodzielnym zabezpieczeniem przed kondensacją. O wyniku decydują obciążenie, konstrukcja i przepływ. Porównanie geometrii znajdziesz w poradniku <a href="https://projekt-ogrzewania.pl/jak-ukladac-rury-w-ogrzewaniu-slimak-meander-czy-podwojny-meander/">ślimak, meander czy podwójny meander</a>, a wpływ odległości między przewodami w analizie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstawu rur 10 lub 15 cm</a>.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-okladzina">
        <span class="rk-dp-eyebrow">Opór cieplny i ograniczenia materiału</span>
        <h2>Chłodzenie podłogowe pod płytkami, panelami i drewnem</h2>
        <p class="rk-dp-intro">Rodzaj okładziny wpływa na przepływ ciepła między wodą a pomieszczeniem oraz może mieć własne ograniczenia temperatury i wilgotności. Nie oznacza to jednak, że płytki są „w 100% bezpieczne”, a drewno automatycznie tworzy kondensację. Dla każdej powierzchni nadal obowiązuje porównanie z punktem rosy.</p>

        <div class="rk-dp-table-wrap">
          <table>
            <thead><tr><th>Okładzina</th><th>Wpływ na chłodzenie</th><th>Co trzeba zweryfikować</th><th>Błędny skrót</th></tr></thead>
            <tbody>
              <tr><td data-label="Okładzina"><strong>Płytki i kamień</strong></td><td data-label="Wpływ">Zwykle niski opór warstwy sprzyja przekazywaniu energii.</td><td data-label="Weryfikacja">Temperaturę powierzchni, klej, dylatacje i warunki użytkowania.</td><td data-label="Błędny skrót">„Płytka nie może się wykraplać”.</td></tr>
              <tr><td data-label="Okładzina"><strong>Panele i winyl</strong></td><td data-label="Wpływ">Opór zależy od produktu, podkładu i sposobu montażu.</td><td data-label="Weryfikacja">Dopuszczenie producenta do chłodzenia, limity temperatury i wilgotności.</td><td data-label="Błędny skrót">„Każdy panel działa tak samo”.</td></tr>
              <tr><td data-label="Okładzina"><strong>Drewno warstwowe</strong></td><td data-label="Wpływ">Wyższy opór może ograniczać dostępną moc powierzchniową.</td><td data-label="Weryfikacja">Gatunek, konstrukcję deski, grubość, klejenie i zakres RH.</td><td data-label="Błędny skrót">„Drewno wymaga zawsze wody minimum 19°C”.</td></tr>
              <tr><td data-label="Okładzina"><strong>Dywan lub gruby podkład</strong></td><td data-label="Wpływ">Może istotnie ograniczyć wymianę ciepła i zmienić lokalny rozkład temperatur.</td><td data-label="Weryfikacja">Łączny opór wszystkich warstw i rzeczywistą powierzchnię czynną.</td><td data-label="Błędny skrót">„Liczy się tylko jastrych”.</td></tr>
            </tbody>
          </table>
        </div>

        <p>Przed wyborem parkietu warto sprawdzić <a href="https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/">gatunki drewna do ogrzewania podłogowego</a> oraz wymagania producenta dotyczące trybu chłodzenia. Sam parametr R opisuje opór termiczny, ale nie zastępuje danych o stabilności materiału; jego znaczenie wyjaśnia poradnik o <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">oporze cieplnym okładziny</a>. Oddzielne porównanie wykończeń znajdziesz również w materiale <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">panele czy płytki na podłogówkę</a>.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-uruchomienie">
        <span class="rk-dp-eyebrow">Zanim zacznie się pierwszy parny dzień</span>
        <h2>Jak uruchomić i przetestować zabezpieczenie punktu rosy?</h2>
        <p class="rk-dp-intro">Ochronę należy sprawdzić w kontrolowanych warunkach, zanim instalacja będzie potrzebna przy wysokiej temperaturze i wilgotności. Test powinien obejmować pomiar, reakcję regulatora, elementy wykonawcze, źródło, pompę oraz alarm.</p>

        <div class="rk-dp-checklist">
          <div class="rk-dp-check"><span class="rk-dp-check-icon">1</span><div><b>Porównaj czujniki</b><span>Zestaw temperaturę i RH z miernikiem odniesienia; zapisz odchyłkę oraz czas stabilizacji.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">2</span><div><b>Sprawdź lokalizację</b><span>Wyklucz bezpośrednie słońce, nawiew, źródła pary i miejsca niereprezentatywne.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">3</span><div><b>Zasymuluj wzrost punktu rosy</b><span>Zmień wartość testową zgodnie z instrukcją regulatora i obserwuj reakcję bez zawilgacania podłogi.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">4</span><div><b>Potwierdź działanie zaworu</b><span>Sprawdź kierunek ruchu, czas przejścia, pozycję po zaniku sygnału i temperaturę za mieszaniem.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">5</span><div><b>Sprawdź każdą strefę</b><span>Potwierdź przypisanie czujnika do właściwych siłowników oraz zachowanie pozostałych obiegów.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">6</span><div><b>Przetestuj utratę komunikacji</b><span>Awaria czujnika lub magistrali powinna prowadzić do wcześniej zdefiniowanego stanu bezpiecznego.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">7</span><div><b>Obserwuj przepływy częściowe</b><span>Po zamknięciu stref sprawdź pompę, minimalny przepływ źródła i pracę obiegu wspólnego.</span></div></div>
          <div class="rk-dp-check"><span class="rk-dp-check-icon">8</span><div><b>Zapisz nastawy</b><span>Udokumentuj margines, histerezę, alarmy, limity temperatur i odpowiedzialność serwisową.</span></div></div>
        </div>

        <p>Próba ochrony przed kondensacją nie zastępuje hydraulicznej <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próby szczelności ogrzewania podłogowego</a>. Są to dwa różne etapy odbioru: pierwszy dotyczy sterowania i wilgotności, drugi integralności przewodów.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-bledy">
        <span class="rk-dp-eyebrow">Błędy, które da się wykryć przed sezonem</span>
        <h2>Najczęstsze błędy przy chłodzeniu podłogowym</h2>
        <div class="rk-dp-grid-2">
          <div class="rk-dp-card"><h3>Porównanie punktu rosy tylko z wodą</h3><p>Temperatura zasilania nie opisuje automatycznie powierzchni podłogi, ale zimna armatura może kondensować wcześniej niż posadzka.</p></div>
          <div class="rk-dp-card"><h3>Jedna nastawa na całe lato</h3><p>Warunki powietrza zmieniają się. Stały limit nie śledzi punktu rosy i może jednocześnie niepotrzebnie ograniczać moc w suche dni.</p></div>
          <div class="rk-dp-card"><h3>Blokada według samego RH</h3><p>Wilgotność względna bez temperatury nie wyznacza punktu rosy. Próg RH może być sygnałem pomocniczym, nie pełnym obliczeniem.</p></div>
          <div class="rk-dp-card"><h3>Wiara, że rekuperacja zawsze osusza</h3><p>Bilans wilgoci zależy od warunków zewnętrznych, wymiennika, strumieni i ewentualnej aktywnej obróbki powietrza.</p></div>
          <div class="rk-dp-card"><h3>Brak reakcji na awarię sensora</h3><p>Utrata pomiaru nie może pozostawić chłodzenia na pełnej mocy bez kontroli granicy kondensacji.</p></div>
          <div class="rk-dp-card"><h3>Gotowa moc przypisana do wilgotności</h3><p>Punkt rosy ogranicza temperaturę, ale moc wymaga obliczenia powierzchni, różnicy temperatur i konstrukcji.</p></div>
          <div class="rk-dp-card"><h3>Obowiązkowe 10 cm i 80 m</h3><p>Rozstaw i długość pętli wynikają z wymaganej mocy, równomierności, średnicy, przepływu i oporów.</p></div>
          <div class="rk-dp-card"><h3>Brak wspólnej logiki urządzeń</h3><p>Źródło, mieszanie, pompa, siłowniki i osuszanie mogą działać poprawnie osobno, a mimo to tworzyć błędną całość.</p></div>
        </div>
        <p class="rk-dp-note">Błędy chłodzenia nakładają się na typowe problemy wykonawcze. Przed zalaniem rur warto przejrzeć również <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstsze błędy montażu ogrzewania podłogowego</a>, ale nie należy przedstawiać dylatacji, izolacji podłogi czy geometrii pętli jako bezpośrednich zamienników kontroli punktu rosy.</p>
      </section>

      <section class="rk-dp-section" id="rk-dp-podsumowanie">
        <span class="rk-dp-eyebrow">Wnioski dla inwestora i projektanta</span>
        <h2>Punkt rosy ogranicza temperaturę, a projekt domyka moc i hydraulikę</h2>
        <p class="rk-dp-intro-lg">Bezpieczne chłodzenie podłogowe wymaga równoczesnego sprawdzenia warunków wilgotnościowych, najzimniejszych powierzchni, mocy dostępnej przy dopuszczalnej temperaturze, przepływów oraz reakcji automatyki. Żaden z tych elementów nie powinien być zastępowany jedną „typową” temperaturą wody.</p>

        <div class="rk-dp-grid-3">
          <div class="rk-dp-card rk-dp-card--cyan"><h3>1. Obliczaj dynamicznie</h3><p>Punkt rosy zmienia się wraz z temperaturą i RH, dlatego granica pracy musi reagować na warunki w strefie.</p></div>
          <div class="rk-dp-card rk-dp-card--green"><h3>2. Rozdziel funkcje</h3><p>Podłoga odbiera ciepło jawne, a kontrolowane usuwanie wilgoci wymaga odpowiedniego urządzenia powietrznego.</p></div>
          <div class="rk-dp-card rk-dp-card--orange"><h3>3. Sprawdź cały układ</h3><p>Temperatura, przepływ, pompa, strefy, materiał posadzki i stan awaryjny muszą być opisane wspólnie.</p></div>
        </div>

        <aside class="rk-dp-cta" aria-label="Końcowe zamówienie projektu ogrzewania podłogowego">
          <span class="rk-dp-eyebrow">Od założeń do dokumentacji wykonawczej</span>
          <h3>Zaprojektuj podłogówkę z policzonymi pętlami, przepływami i temperaturą pracy</h3>
          <p>Jeżeli wodna instalacja podłogowa ma współpracować z pompą ciepła, już na etapie projektu trzeba połączyć obciążenia pomieszczeń, powierzchnię czynną, okładziny, geometrię pętli, rozdzielacze oraz hydraulikę źródła.</p>
          <div class="rk-dp-cta-limit"><strong>Tryb chłodzenia wymaga osobnego potwierdzenia:</strong> kalkulator z tego artykułu pomaga ocenić punkt rosy, lecz nie stanowi projektu chłodniczego ani dokumentacji automatyki antykondensacyjnej.</div>
          <a class="rk-dp-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów indywidualny projekt ogrzewania podłogowego</a>
        </aside>
      </section>

      <section class="rk-dp-section" id="rk-dp-zrodla">
        <span class="rk-dp-eyebrow">Materiały techniczne i zakres odpowiedzialności</span>
        <h2>Źródła dotyczące punktu rosy i chłodzenia powierzchniowego</h2>
        <p class="rk-dp-intro">Poniższe materiały służą do weryfikacji sposobu obliczania punktu rosy oraz zależności właściwych dla układów promieniujących. Źródło nie zastępuje instrukcji urządzeń, projektu budynku ani wymagań konkretnego systemu sterowania.</p>
        <div class="rk-dp-source-list">
          <div class="rk-dp-source"><b>National Weather Service / NOAA — obliczanie punktu rosy</b><p>Oficjalny opis wyznaczania temperatury punktu rosy z temperatury powietrza i wilgotności względnej: <a href="https://www.weather.gov/media/epz/wxcalc/wetBulbTdFromRh.pdf" target="_blank" rel="nofollow noopener noreferrer">Wet-bulb Temperature and Dewpoint Temperature from Air Temperature and Relative Humidity</a>.</p></div>
          <div class="rk-dp-source"><b>Center for the Built Environment, University of California Berkeley</b><p>Program badań dotyczących projektowania, sterowania, obciążeń i komfortu instalacji promieniujących: <a href="https://cbe.berkeley.edu/research/radiant-systems-research/" target="_blank" rel="nofollow noopener noreferrer">Radiant Systems Research</a>.</p></div>
          <div class="rk-dp-source"><b>UC Berkeley — przegląd badań chłodzenia promieniującego</b><p>Materiał pokazujący między innymi różnice między obciążeniami systemów promieniujących i powietrznych oraz wpływ temperatur powierzchni: <a href="https://cbe.berkeley.edu/wp-content/uploads/2019/03/CBE-radiant-systems-research-march2014.pdf" target="_blank" rel="nofollow noopener noreferrer">Overview of Radiant Systems Research</a>.</p></div>
          <div class="rk-dp-source"><b>California Energy Commission — systemy z masą termiczną</b><p>Raport techniczny dotyczący zintegrowanych systemów i sterowania płytami promieniującymi: <a href="https://ww2.energy.ca.gov/2014publications/CEC-500-2014-074/CEC-500-2014-074.pdf" target="_blank" rel="nofollow noopener noreferrer">Advanced Integrated Systems Technology Development</a>.</p></div>
        </div>
        <div class="rk-dp-important"><p><strong>Zakres poradnika:</strong> wzór i narzędzia mają charakter edukacyjny. Ostateczne temperatury, marginesy, rozmieszczenie czujników i sekwencje awaryjne należy ustalić na podstawie obliczeń, dokumentacji producentów, dokładności aparatury oraz warunków konkretnego budynku.</p></div>
      </section>

      <section class="rk-dp-section" id="rk-dp-faq">
        <span class="rk-dp-eyebrow">Najczęstsze pytania</span>
        <h2>FAQ — punkt rosy przy chłodzeniu podłogowym</h2>
        <div class="rk-dp-faq">
          <details><summary>Co to jest punkt rosy przy chłodzeniu podłogowym?</summary><div class="rk-dp-faq-answer"><p>To temperatura, przy której powietrze o aktualnej temperaturze i wilgotności osiąga nasycenie. Jeżeli powierzchnia podłogi lub inny element instalacji osiągnie tę temperaturę albo będzie chłodniejszy, może rozpocząć się kondensacja pary wodnej.</p></div></details>
          <details><summary>Jaka jest bezpieczna temperatura podłogi podczas chłodzenia?</summary><div class="rk-dp-faq-answer"><p>Nie ma jednej wartości dla całego sezonu. Dolną granicę wyznacza aktualny punkt rosy powiększony o przyjęty margines, a także ograniczenia komfortu, okładziny i systemu. Obowiązuje najbardziej restrykcyjny z tych warunków.</p></div></details>
          <details><summary>Jaka temperatura wody jest bezpieczna dla chłodzenia podłogowego?</summary><div class="rk-dp-faq-answer"><p>Nie można jej poprawnie wyznaczyć wyłącznie z punktu rosy. Temperatura powierzchni różni się od temperatury wody i zależy od konstrukcji, przepływu, obciążenia oraz okładziny. Zasilanie trzeba tak regulować, aby wszystkie chronione powierzchnie zachowały wymagany zapas.</p></div></details>
          <details><summary>Czy przy wilgotności 70% podłogówka musi się wyłączyć?</summary><div class="rk-dp-faq-answer"><p>Nie na podstawie samego RH. Trzeba znać również temperaturę powietrza i powierzchni. Wysoka wilgotność zwykle podnosi punkt rosy i może bardzo ograniczyć chłodzenie, ale decyzja powinna wynikać z obliczonej granicy i logiki systemu.</p></div></details>
          <details><summary>Czy rekuperacja zabezpiecza przed kondensacją?</summary><div class="rk-dp-faq-answer"><p>Nie automatycznie. Wentylacja wpływa na bilans wilgoci, ale wynik zależy od powietrza zewnętrznego, strumieni, rodzaju wymiennika i ewentualnej aktywnej obróbki. Ochronę powierzchni musi zapewnić niezależna kontrola punktu rosy.</p></div></details>
          <details><summary>Czy chłodzenie podłogowe osusza powietrze?</summary><div class="rk-dp-faq-answer"><p>Nie powinno. System ma pracować powyżej punktu rosy, a więc bez celowego wykraplania wody. Kontrolowane osuszanie zapewnia urządzenie z odpowiednio zimną powierzchnią wymiany i odpływem kondensatu, takie jak klimatyzator, chłodnica lub osuszacz.</p></div></details>
          <details><summary>Czy czujnik temperatury podłogi wystarczy?</summary><div class="rk-dp-faq-answer"><p>Nie. Do obliczenia punktu rosy potrzebne są temperatura powietrza i wilgotność względna. Czujnik podłogowy może dostarczyć temperaturę konkretnego miejsca, lecz nie opisuje samodzielnie zawartości wilgoci w powietrzu.</p></div></details>
          <details><summary>Czy chłodzenie podłogowe można stosować pod drewnem?</summary><div class="rk-dp-faq-answer"><p>Może być możliwe, jeżeli producent okładziny dopuszcza taki tryb, a projekt uwzględnia opór cieplny, stabilność materiału, zakres wilgotności oraz ograniczenia temperatury. Drewno może ograniczyć moc, ale nie jest automatyczną przyczyną kondensacji.</p></div></details>
          <details><summary>Czy do chłodzenia zawsze trzeba układać rury co 10 cm?</summary><div class="rk-dp-faq-answer"><p>Nie. Gęstszy rozstaw może poprawić wydajność i równomierność, lecz powinien wynikać z obliczeń konkretnej strefy. Nie zastępuje kontroli wilgotności ani sprawdzenia temperatury powierzchni.</p></div></details>
          <details><summary>Czy kalkulator punktu rosy zastępuje projekt chłodzenia?</summary><div class="rk-dp-faq-answer"><p>Nie. Kalkulator wyznacza granicę dla wpisanych danych. Projekt musi dodatkowo policzyć zyski chłodnicze, powierzchnie czynne, temperatury powierzchni i wody, przepływy, opory, automatykę, osuszanie oraz zachowanie instalacji w stanach częściowych i awaryjnych.</p></div></details>
        </div>
      </section>
    </main>

    <section class="rk-dp-author" id="rk-dp-author" aria-labelledby="rk-dp-author-heading">
      <div class="rk-dp-author-head">
        <span class="rk-dp-eyebrow">E-E-A-T i odpowiedzialność za treść</span>
        <h2 id="rk-dp-author-heading">Autor i weryfikacja merytoryczna</h2>
        <p>Treść przygotowana z perspektywy projektowania instalacji podłogowych, hydrauliki, obliczeń cieplnych oraz rzeczywistego sterowania źródłem, pompą i strefami.</p>
        <span class="rk-dp-author-update">Aktualizacja: 14.09.2026</span>
      </div>
      <div class="rk-dp-author-layout">
        <aside class="rk-dp-author-side">
          <div class="rk-dp-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-dp-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-dp-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-dp-author-social-label">Profile branżowe</div>
          <div class="rk-dp-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-dp-author-main">
          <blockquote class="rk-dp-author-quote"><p>Moim zdaniem w chłodzeniu podłogowym nie ustawia się jednej „bezpiecznej” temperatury na całe lato. Granicę wyznacza aktualny punkt rosy w najbardziej wymagającej strefie, a automatyka musi zareagować, zanim najzimniejsza powierzchnia osiągnie tę temperaturę.</p></blockquote>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz poradniki techniczne dla inwestorów i wykonawców. W analizie instalacji łączy obciążenia pomieszczeń, powierzchnię czynną, konstrukcję podłogi, temperatury wody, przepływy, opory rozdzielaczy i wymagania źródła.</p>
          <p>W tym poradniku oddzielono obliczenie punktu rosy od wyznaczania temperatury powierzchni oraz mocy chłodniczej. Usunięto uniwersalne reguły dotyczące stałej temperatury zasilania, obowiązkowego rozstawu, długości pętli i przepływu pompy. Kalkulator pokazuje granicę dla wpisanych warunków, a nie gotowy projekt chłodzenia.</p>
          <div class="rk-dp-author-facts">
            <div class="rk-dp-author-fact"><strong>Praktyka projektowa</strong><span>Analiza obciążeń, powierzchni czynnej, pętli, przepływów, rozdzielaczy i automatyki.</span></div>
            <div class="rk-dp-author-fact"><strong>Metoda</strong><span>Oddzielenie obliczeń technicznych od profili edukacyjnych i jawne opisanie ograniczeń narzędzi.</span></div>
            <div class="rk-dp-author-fact"><strong>Zakres aktualizacji</strong><span>Punkt rosy, temperatura powierzchni i wody, wilgoć utajona, hydraulika oraz logika awaryjna.</span></div>
          </div>
          <p class="rk-dp-author-portals">Autor i właściciel serwisów:<br>
            <a href="https://projekt-ogrzewania.pl/author/admin3399/">Projekt-Ogrzewania.pl</a>
            <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a>
            <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>
          </p>
        </div>
      </div>
    </section>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg"
      },
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image" },
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "chłodzenie płaszczyznowe",
        "punkt rosy",
        "hydraulika instalacji",
        "pompy ciepła",
        "automatyka HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/02/Punkt-rosy-w-ogrzewaniu-podlogowym.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/02/Punkt-rosy-w-ogrzewaniu-podlogowym.webp",
      "width": 945,
      "height": 945,
      "caption": "Punkt rosy przy chłodzeniu podłogowym — kalkulator i zabezpieczenia",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "caption": "Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#webpage",
      "url": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/",
      "name": "Punkt rosy przy chłodzeniu podłogowym – kalkulator i zabezpieczenia",
      "description": "Oblicz punkt rosy, bezpieczną temperaturę podłogi i margines kondensacji. Sprawdź wilgotność, automatykę oraz ograniczenia chłodzenia podłogowego.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "primaryImageOfPage": { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#primaryimage" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#breadcrumb" },
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#article" },
      "datePublished": "2026-02-28T09:58:03+00:00",
      "dateModified": "2026-09-14",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#breadcrumb",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/" },
        { "@type": "ListItem", "position": 2, "name": "Ogrzewanie podłogowe", "item": "https://projekt-ogrzewania.pl/category/ogrzewanie-podlogowe/" },
        { "@type": "ListItem", "position": 3, "name": "Punkt rosy przy chłodzeniu podłogowym", "item": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/" }
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#article",
      "headline": "Punkt rosy przy chłodzeniu podłogowym – kalkulator i zabezpieczenia",
      "description": "Praktyczny poradnik o obliczaniu punktu rosy, bezpiecznej temperaturze powierzchni, wilgotności, automatyce antykondensacyjnej i ograniczeniach chłodzenia podłogowego.",
      "url": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#webpage" },
      "image": { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#primaryimage" },
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "reviewedBy": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "datePublished": "2026-02-28T09:58:03+00:00",
      "dateModified": "2026-09-14",
      "timeRequired": "PT31M",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "proficiencyLevel": "Beginner to Intermediate",
      "about": [
        { "@type": "Thing", "name": "Punkt rosy" },
        { "@type": "Thing", "name": "Chłodzenie podłogowe" },
        { "@type": "Thing", "name": "Kondensacja powierzchniowa" },
        { "@type": "Thing", "name": "Automatyka antykondensacyjna" },
        { "@type": "Thing", "name": "Pompa ciepła" }
      ],
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#calculator" },
        { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#chart" },
        { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#faq" }
      ],
      "keywords": "punkt rosy przy chłodzeniu podłogowym, kalkulator punktu rosy, bezpieczna temperatura podłogi, temperatura wody do chłodzenia podłogowego, wilgotność względna, automatyka antykondensacyjna, chłodzenie pompą ciepła"
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#calculator",
      "name": "Kalkulator punktu rosy i bezpiecznej temperatury podłogi",
      "url": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#rk-dp-kalkulator",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "offers": { "@type": "Offer", "price": "0", "priceCurrency": "PLN" },
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "description": "Narzędzie oblicza punkt rosy, temperaturę powierzchni z marginesem, rzeczywisty zapas oraz maksymalną wilgotność dla wpisanej temperatury podłogi.",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#chart",
      "name": "Interaktywny wykres punktu rosy i wilgotności",
      "url": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#rk-dp-wykres",
      "applicationCategory": "EducationalApplication",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript i Canvas",
      "isAccessibleForFree": true,
      "offers": { "@type": "Offer", "price": "0", "priceCurrency": "PLN" },
      "creator": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "description": "Wykres pokazuje zmianę punktu rosy i granicy z marginesem w funkcji wilgotności względnej dla wybranej temperatury powietrza i powierzchni.",
      "inLanguage": "pl-PL"
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#howto",
      "name": "Jak sprawdzić bezpieczne warunki chłodzenia podłogowego",
      "description": "Sześć kroków od pomiaru warunków powietrza do reakcji automatyki antykondensacyjnej.",
      "totalTime": "PT10M",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Zmierz temperaturę i wilgotność", "text": "Wykonaj reprezentatywny pomiar temperatury powietrza oraz wilgotności względnej w chłodzonej strefie." },
        { "@type": "HowToStep", "position": 2, "name": "Oblicz punkt rosy", "text": "Wyznacz temperaturę punktu rosy z aktualnej temperatury i wilgotności względnej." },
        { "@type": "HowToStep", "position": 3, "name": "Dodaj margines", "text": "Dodaj margines wynikający z dokładności czujników, dynamiki instalacji i logiki regulatora." },
        { "@type": "HowToStep", "position": 4, "name": "Porównaj temperaturę powierzchni", "text": "Sprawdź najzimniejszą chronioną powierzchnię, a nie wyłącznie średnią temperaturę podłogi." },
        { "@type": "HowToStep", "position": 5, "name": "Ogranicz chłodzenie", "text": "Przed osiągnięciem granicy podnieś temperaturę zasilania, ogranicz lub zamknij właściwą strefę." },
        { "@type": "HowToStep", "position": 6, "name": "Sprawdź wilgoć i stan awaryjny", "text": "Zweryfikuj sposób osuszania oraz bezpieczną reakcję po utracie pomiaru lub komunikacji." }
      ],
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/#faq",
      "mainEntity": [
        { "@type": "Question", "name": "Co to jest punkt rosy przy chłodzeniu podłogowym?", "acceptedAnswer": { "@type": "Answer", "text": "To temperatura, przy której powietrze o aktualnej temperaturze i wilgotności osiąga nasycenie. Gdy powierzchnia osiągnie tę temperaturę albo będzie chłodniejsza, może rozpocząć się kondensacja." } },
        { "@type": "Question", "name": "Jaka jest bezpieczna temperatura podłogi podczas chłodzenia?", "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednej wartości dla całego sezonu. Dolną granicę wyznacza aktualny punkt rosy powiększony o przyjęty margines, a także ograniczenia komfortu, okładziny i systemu." } },
        { "@type": "Question", "name": "Jaka temperatura wody jest bezpieczna dla chłodzenia podłogowego?", "acceptedAnswer": { "@type": "Answer", "text": "Nie można jej poprawnie wyznaczyć wyłącznie z punktu rosy. Temperatura powierzchni różni się od temperatury wody i zależy od konstrukcji, przepływu, obciążenia oraz okładziny." } },
        { "@type": "Question", "name": "Czy przy wilgotności 70% podłogówka musi się wyłączyć?", "acceptedAnswer": { "@type": "Answer", "text": "Nie na podstawie samej wilgotności względnej. Potrzebne są również temperatura powietrza i temperatura powierzchni, a decyzja powinna wynikać z obliczonego punktu rosy oraz marginesu." } },
        { "@type": "Question", "name": "Czy rekuperacja zabezpiecza przed kondensacją?", "acceptedAnswer": { "@type": "Answer", "text": "Nie automatycznie. Wentylacja wpływa na bilans wilgoci, ale wynik zależy od powietrza zewnętrznego, strumieni, rodzaju wymiennika i ewentualnej aktywnej obróbki." } },
        { "@type": "Question", "name": "Czy chłodzenie podłogowe osusza powietrze?", "acceptedAnswer": { "@type": "Answer", "text": "Nie powinno, ponieważ system ma pracować powyżej punktu rosy. Kontrolowane osuszanie zapewnia urządzenie z odpływem kondensatu, na przykład klimatyzator, chłodnica lub osuszacz." } },
        { "@type": "Question", "name": "Czy czujnik temperatury podłogi wystarczy?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Do obliczenia punktu rosy potrzebne są temperatura powietrza i wilgotność względna. Czujnik podłogowy może dostarczyć temperaturę konkretnego miejsca." } },
        { "@type": "Question", "name": "Czy chłodzenie podłogowe można stosować pod drewnem?", "acceptedAnswer": { "@type": "Answer", "text": "Może być możliwe, jeżeli producent okładziny dopuszcza taki tryb, a projekt uwzględnia opór cieplny, stabilność materiału, zakres wilgotności oraz ograniczenia temperatury." } },
        { "@type": "Question", "name": "Czy do chłodzenia zawsze trzeba układać rury co 10 cm?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Rozstaw powinien wynikać z obliczeń konkretnej strefy. Gęstsze ułożenie może poprawiać wydajność i równomierność, ale nie zastępuje kontroli punktu rosy." } },
        { "@type": "Question", "name": "Czy kalkulator punktu rosy zastępuje projekt chłodzenia?", "acceptedAnswer": { "@type": "Answer", "text": "Nie. Kalkulator wyznacza granicę dla wpisanych danych. Projekt musi dodatkowo policzyć zyski chłodnicze, powierzchnie, temperatury, przepływy, opory, automatykę i osuszanie." } }
      ],
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Service",
      "@id": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/#service",
      "name": "Indywidualny projekt instalacji ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "serviceType": "Projektowanie instalacji ogrzewania podłogowego",
      "description": "Projekt pętli, rozstawów, przepływów, rozdzielaczy i parametrów wodnego ogrzewania podłogowego przygotowany dla konkretnego budynku.",
      "audience": { "@type": "Audience", "audienceType": "Inwestorzy budujący i modernizujący dom" }
    }
  ]
}
</script>

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

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

  var factorA = 17.62;
  var factorB = 243.12;

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

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

  function readNumber(id, minimum, maximum) {
    var field = byId(id);
    if (!field) { return null; }
    var raw = String(field.value).replace(",", ".");
    var value = parseFloat(raw);
    field.removeAttribute("aria-invalid");
    if (!isFinite(value)) {
      field.setAttribute("aria-invalid", "true");
      return null;
    }
    if (value < minimum) {
      field.setAttribute("aria-invalid", "true");
      return null;
    }
    if (value > maximum) {
      field.setAttribute("aria-invalid", "true");
      return null;
    }
    return value;
  }

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

  function dewPoint(airTemperature, relativeHumidity) {
    var gamma = Math.log(relativeHumidity / 100) + factorA * airTemperature / (factorB + airTemperature);
    return factorB * gamma / (factorA - gamma);
  }

  function maximumRelativeHumidity(airTemperature, permittedDewPoint) {
    var exponent = factorA * permittedDewPoint / (factorB + permittedDewPoint) - factorA * airTemperature / (factorB + airTemperature);
    return clamp(100 * Math.exp(exponent), 0, 100);
  }

  function showInputError() {
    var status = byId("rk-dp-result-status");
    status.className = "rk-dp-result-status is-danger";
    byId("rk-dp-status-icon").textContent = "!";
    byId("rk-dp-status-title").textContent = "Sprawdź zakres wpisanych danych";
    byId("rk-dp-status-text").textContent = "Uzupełnij wszystkie pola liczbami mieszczącymi się w zakresach podanych przy formularzu.";
  }

  function setPreset(name) {
    var presets = {
      humid: { air: 28, rh: 70, surface: 24, margin: 2, supply: 20, back: 23 },
      typical: { air: 26, rh: 50, surface: 20, margin: 2, supply: 18, back: 21 },
      dry: { air: 24, rh: 40, surface: 19, margin: 2, supply: 17, back: 20 }
    };
    var data = presets[name];
    if (!data) { return; }
    byId("rk-dp-air-temp").value = data.air;
    byId("rk-dp-rh").value = data.rh;
    byId("rk-dp-surface-temp").value = data.surface;
    byId("rk-dp-margin").value = data.margin;
    byId("rk-dp-supply").value = data.supply;
    byId("rk-dp-return").value = data.back;

    var buttons = root.querySelectorAll(".rk-dp-preset");
    var index;
    for (index = 0; index < buttons.length; index += 1) {
      buttons[index].classList.remove("is-active");
      if (buttons[index].getAttribute("data-preset") === name) {
        buttons[index].classList.add("is-active");
      }
    }
    updateCalculator(true);
  }

  function updateCalculator(syncChart) {
    var air = readNumber("rk-dp-air-temp", 10, 40);
    var rh = readNumber("rk-dp-rh", 20, 95);
    var surface = readNumber("rk-dp-surface-temp", 5, 35);
    var margin = readNumber("rk-dp-margin", 0.5, 4);
    var supply = readNumber("rk-dp-supply", 5, 35);
    var back = readNumber("rk-dp-return", 5, 35);

    if (air === null) { showInputError(); return; }
    if (rh === null) { showInputError(); return; }
    if (surface === null) { showInputError(); return; }
    if (margin === null) { showInputError(); return; }
    if (supply === null) { showInputError(); return; }
    if (back === null) { showInputError(); return; }

    var dew = dewPoint(air, rh);
    var target = dew + margin;
    var gap = surface - dew;
    var maxRh = maximumRelativeHumidity(air, surface - margin);
    var status = byId("rk-dp-result-status");
    var icon = byId("rk-dp-status-icon");
    var title = byId("rk-dp-status-title");
    var copy = byId("rk-dp-status-text");

    status.className = "rk-dp-result-status";
    if (surface <= dew) {
      status.className += " is-danger";
      icon.textContent = "!";
      title.textContent = "Ryzyko kondensacji na wpisanej powierzchni";
      copy.textContent = "Temperatura powierzchni osiąga punkt rosy lub jest niższa. Ogranicz chłodzenie i sprawdź warunki w strefie oraz najzimniejsze elementy instalacji.";
    } else if (surface < target) {
      status.className += " is-warning";
      icon.textContent = "≈";
      title.textContent = "Powierzchnia jest powyżej rosy, ale bez pełnego marginesu";
      copy.textContent = "Kondensacja nie wynika jeszcze z wpisanych wartości, jednak część przyjętego zapasu została wykorzystana. Automatyka powinna reagować przed osiągnięciem punktu rosy.";
    } else {
      icon.textContent = "✓";
      title.textContent = "Bezpieczny zapas powierzchni dla wpisanych danych";
      copy.textContent = "Temperatura powierzchni pozostaje powyżej punktu rosy wraz z przyjętym marginesem. Wynik nie potwierdza jeszcze mocy chłodniczej ani warunków innych stref.";
    }

    byId("rk-dp-dew-result").textContent = formatNumber(dew, 1) + "°C";
    byId("rk-dp-target-result").textContent = formatNumber(target, 1) + "°C";
    byId("rk-dp-gap-result").textContent = formatNumber(gap, 1) + " K";
    byId("rk-dp-max-rh-result").textContent = formatNumber(maxRh, 0) + "%";

    var coldestWater = Math.min(supply, back);
    var waterText = "Najchłodniejsza wpisana temperatura wody wynosi " + formatNumber(coldestWater, 1) + "°C. ";
    if (coldestWater <= dew) {
      waterText += "Jest równa punktowi rosy lub niższa. Nie przesądza to o temperaturze wierzchu podłogi, ale niezaizolowane przewody, rozdzielacz lub armatura mogą znaleźć się w warunkach kondensacji.";
    } else if (coldestWater < target) {
      waterText += "Pozostaje powyżej punktu rosy, lecz poniżej granicy uwzględniającej wybrany margines. Elementy hydrauliczne wymagają osobnego sprawdzenia i izolacji.";
    } else {
      waterText += "Pozostaje powyżej punktu rosy z wybranym marginesem, ale nadal nie jest obliczoną temperaturą powierzchni podłogi.";
    }
    byId("rk-dp-water-note").textContent = waterText;

    if (syncChart) {
      byId("rk-dp-chart-air").value = clamp(air, 20, 32);
      byId("rk-dp-chart-surface").value = clamp(surface, 14, 25);
    }
    drawChart();
  }

  var canvas = byId("rk-dp-chart");

  function drawChart() {
    if (!canvas) { return; }
    var context = canvas.getContext("2d");
    if (!context) { return; }

    var air = parseFloat(byId("rk-dp-chart-air").value);
    var surface = parseFloat(byId("rk-dp-chart-surface").value);
    var margin = readNumber("rk-dp-margin", 0.5, 4);
    if (margin === null) { margin = 2; }

    byId("rk-dp-chart-air-output").textContent = formatNumber(air, 1) + "°C";
    byId("rk-dp-chart-surface-output").textContent = formatNumber(surface, 1) + "°C";

    var cssWidth = canvas.clientWidth;
    if (cssWidth < 280) { cssWidth = 280; }
    var cssHeight = canvas.clientHeight;
    if (cssHeight < 280) { cssHeight = 315; }
    var ratio = window.devicePixelRatio;
    if (!ratio) { ratio = 1; }
    ratio = Math.min(ratio, 2);
    canvas.width = Math.round(cssWidth * ratio);
    canvas.height = Math.round(cssHeight * ratio);
    context.setTransform(ratio, 0, 0, ratio, 0, 0);
    context.clearRect(0, 0, cssWidth, cssHeight);

    var compact = cssWidth < 560;
    var left = compact ? 47 : 66;
    var right = compact ? 14 : 28;
    var top = 26;
    var bottom = compact ? 56 : 62;
    var plotWidth = cssWidth - left - right;
    var plotHeight = cssHeight - top - bottom;
    var minRh = 20;
    var maxRhValue = 95;
    var minTemp = 4;
    var maxTemp = 34;

    function xPosition(rhValue) {
      return left + (rhValue - minRh) / (maxRhValue - minRh) * plotWidth;
    }
    function yPosition(tempValue) {
      return top + (maxTemp - tempValue) / (maxTemp - minTemp) * plotHeight;
    }

    var safeRh = maximumRelativeHumidity(air, surface - margin);
    var condensationRh = maximumRelativeHumidity(air, surface);
    var safeEdge = xPosition(clamp(safeRh, minRh, maxRhValue));
    var condensationEdge = xPosition(clamp(condensationRh, minRh, maxRhValue));

    context.fillStyle = "rgba(22, 131, 107, 0.10)";
    context.fillRect(left, top, Math.max(0, safeEdge - left), plotHeight);
    context.fillStyle = "rgba(214, 154, 22, 0.12)";
    context.fillRect(safeEdge, top, Math.max(0, condensationEdge - safeEdge), plotHeight);
    context.fillStyle = "rgba(202, 70, 61, 0.10)";
    context.fillRect(condensationEdge, top, Math.max(0, left + plotWidth - condensationEdge), plotHeight);

    context.lineWidth = 1;
    context.strokeStyle = "#d7e4e9";
    context.fillStyle = "#617786";
    context.font = compact ? "11px system-ui" : "12px system-ui";
    context.textAlign = "right";
    context.textBaseline = "middle";
    var temperatureTick;
    for (temperatureTick = 5; temperatureTick <= 30; temperatureTick += 5) {
      var y = yPosition(temperatureTick);
      context.beginPath();
      context.moveTo(left, y);
      context.lineTo(left + plotWidth, y);
      context.stroke();
      context.fillText(String(temperatureTick), left - 8, y);
    }

    var rhTicks = [20, 35, 50, 65, 80, 95];
    context.textAlign = "center";
    context.textBaseline = "top";
    var tickIndex;
    for (tickIndex = 0; tickIndex < rhTicks.length; tickIndex += 1) {
      var x = xPosition(rhTicks[tickIndex]);
      context.beginPath();
      context.moveTo(x, top);
      context.lineTo(x, top + plotHeight);
      context.stroke();
      context.fillText(String(rhTicks[tickIndex]), x, top + plotHeight + 9);
    }

    context.strokeStyle = "#8195a1";
    context.lineWidth = 1.2;
    context.beginPath();
    context.moveTo(left, top);
    context.lineTo(left, top + plotHeight);
    context.lineTo(left + plotWidth, top + plotHeight);
    context.stroke();

    function drawCurve(color, extraTemperature, width) {
      context.strokeStyle = color;
      context.lineWidth = width;
      context.beginPath();
      var rhValue;
      for (rhValue = minRh; rhValue <= maxRhValue; rhValue += 1) {
        var pointTemperature = dewPoint(air, rhValue) + extraTemperature;
        var px = xPosition(rhValue);
        var py = yPosition(pointTemperature);
        if (rhValue === minRh) { context.moveTo(px, py); }
        else { context.lineTo(px, py); }
      }
      context.stroke();
    }

    drawCurve("#183b50", 0, 3);
    drawCurve("#ff6946", margin, 3);

    context.strokeStyle = "#20b7cb";
    context.lineWidth = 4;
    context.beginPath();
    context.moveTo(left, yPosition(surface));
    context.lineTo(left + plotWidth, yPosition(surface));
    context.stroke();

    if (safeRh >= minRh) {
      if (safeRh <= maxRhValue) {
        context.save();
        context.setLineDash([6, 5]);
        context.strokeStyle = "#078fbe";
        context.lineWidth = 1.5;
        context.beginPath();
        context.moveTo(xPosition(safeRh), top);
        context.lineTo(xPosition(safeRh), top + plotHeight);
        context.stroke();
        context.restore();
      }
    }

    context.fillStyle = "#243d4c";
    context.font = compact ? "600 11px system-ui" : "700 12px system-ui";
    context.textAlign = "center";
    context.fillText("Wilgotność względna RH [%]", left + plotWidth / 2, cssHeight - 23);
    context.save();
    context.translate(compact ? 13 : 18, top + plotHeight / 2);
    context.rotate(-Math.PI / 2);
    context.fillText("Temperatura [°C]", 0, 0);
    context.restore();

    var summary = "Dla temperatury powietrza " + formatNumber(air, 1) + "°C, powierzchni " + formatNumber(surface, 1) + "°C i marginesu " + formatNumber(margin, 1) + " K ";
    if (safeRh < minRh) {
      summary += "pełny margines nie jest zachowany nawet przy 20% RH w zakresie wykresu. ";
    } else if (safeRh > maxRhValue) {
      summary += "pełny margines pozostaje zachowany do 95% RH w zakresie wykresu. ";
    } else {
      summary += "pełny margines zostaje wykorzystany przy około " + formatNumber(safeRh, 0) + "% RH. ";
    }
    if (condensationRh < 100) {
      summary += "Sama granica kondensacji dla wpisanej powierzchni wypada przy około " + formatNumber(condensationRh, 0) + "% RH.";
    } else {
      summary += "W zakresie do 100% RH wpisana powierzchnia pozostaje powyżej punktu rosy.";
    }
    byId("rk-dp-chart-summary").textContent = summary;
  }

  var autoData = {
    "1": {
      label: "Moduł 1 · dane wejściowe",
      title: "Pomiar musi opisywać warunki w chłodzonej strefie",
      text: "Czujnik temperatury i wilgotności względnej nie powinien znajdować się w słońcu, przy nawiewie, nad źródłem pary ani wewnątrz szafy. Jeden pomiar centralny może nie wychwycić lokalnego wzrostu wilgotności w łazience, kuchni lub pokoju po otwarciu okna.",
      fact1Title: "Co sprawdzić", fact1: "Miejsce czujnika, częstotliwość odczytu i dokładność RH.",
      fact2Title: "Typowy błąd", fact2: "Sterowanie całym domem według jednego, przypadkowo umieszczonego sensora.",
      fact3Title: "Bezpieczna reakcja", fact3: "Brak wiarygodnego odczytu powinien ograniczyć chłodzenie, a nie zezwalać na pełną moc."
    },
    "2": {
      label: "Moduł 2 · obliczenie",
      title: "Punkt rosy trzeba przeliczać po każdej istotnej zmianie warunków",
      text: "Algorytm łączy temperaturę powietrza i wilgotność względną. Stała granica zapisana na początku sezonu nie reaguje na napływ wilgotnego powietrza, kąpiel, gotowanie ani zmianę temperatury w pomieszczeniu.",
      fact1Title: "Dane", fact1: "Temperatura powietrza i RH z tej samej, aktualnej chwili.",
      fact2Title: "Typowy błąd", fact2: "Przyjęcie, że 16°C na zasilaniu jest bezpieczne przez całe lato.",
      fact3Title: "Bezpieczna reakcja", fact3: "Regularne przeliczenie i odrzucenie nielogicznych lub brakujących odczytów."
    },
    "3": {
      label: "Moduł 3 · zapas regulacyjny",
      title: "Margines ma uwzględniać niepewność oraz czas reakcji",
      text: "Regulator nie powinien czekać, aż powierzchnia dokładnie zrówna się z punktem rosy. Zapas dobiera się do dokładności czujników, ich rozmieszczenia, nierównomierności temperatur, histerezy, bezwładności podłogi i czasu przejścia elementów wykonawczych.",
      fact1Title: "Co sprawdzić", fact1: "Dokładność, histerezę, opóźnienie pomiaru i dynamikę zaworu.",
      fact2Title: "Typowy błąd", fact2: "Traktowanie 2 K jako uniwersalnego wymagania niezależnego od systemu.",
      fact3Title: "Bezpieczna reakcja", fact3: "Udokumentowany margines i wcześniejsze ograniczanie mocy."
    },
    "4": {
      label: "Moduł 4 · porównanie",
      title: "Liczy się najzimniejsza chroniona powierzchnia, nie tylko średnia podłogi",
      text: "Temperatura wierzchu posadzki może różnić się w pobliżu rur, przy krawędziach i pod różnymi okładzinami. Jeszcze chłodniejsze mogą być niezaizolowane przewody doprowadzające, armatura i rozdzielacz.",
      fact1Title: "Co sprawdzić", fact1: "Powierzchnię podłogi, przewody, rozdzielacz, armaturę i lokalne mostki.",
      fact2Title: "Typowy błąd", fact2: "Uznanie temperatury powrotu albo średniej pokojowej za temperaturę każdego elementu.",
      fact3Title: "Bezpieczna reakcja", fact3: "Kontrola krytycznych miejsc i poprawna izolacja elementów hydraulicznych."
    },
    "5": {
      label: "Moduł 5 · elementy wykonawcze",
      title: "Ograniczenie musi dotrzeć do właściwego elementu instalacji",
      text: "System może podnieść temperaturę zasilania, zmienić pozycję zaworu, ograniczyć przepływ lub zamknąć konkretną strefę. Sposób reakcji zależy od architektury, lecz nie może powodować utraty minimalnego przepływu źródła albo niekontrolowanej pracy pompy.",
      fact1Title: "Co sprawdzić", fact1: "Kierunek zaworu, przypisanie siłowników, pompę i sygnał do źródła.",
      fact2Title: "Typowy błąd", fact2: "Zamknięcie pętli bez sprawdzenia zachowania całego obiegu.",
      fact3Title: "Bezpieczna reakcja", fact3: "Sekwencja stopniowa oraz potwierdzenie osiągnięcia oczekiwanego stanu."
    },
    "6": {
      label: "Moduł 6 · wilgoć i awaria",
      title: "Gdy podłoga jest ograniczona, wilgoć i brakującą moc obsługuje inny element",
      text: "Podłoga ma nie kondensować. Jeżeli wysokie zyski i wilgotność ograniczają jej pracę, potrzebny może być system powietrzny zdolny do odbioru dodatkowej mocy oraz kontrolowanego odprowadzania skroplin. Awaria pomiaru powinna wywołać alarm i bezpieczny stan.",
      fact1Title: "Co sprawdzić", fact1: "Wydajność jawną i utajoną, odpływ skroplin oraz priorytety sterowania.",
      fact2Title: "Typowy błąd", fact2: "Założenie, że zwykła wentylacja zawsze obniży RH w parny dzień.",
      fact3Title: "Bezpieczna reakcja", fact3: "Ograniczenie podłogi, uruchomienie właściwego wsparcia i sygnalizacja usterki."
    }
  };

  function showAutoStep(step) {
    var data = autoData[step];
    if (!data) { return; }
    byId("rk-dp-auto-label").textContent = data.label;
    byId("rk-dp-auto-title").textContent = data.title;
    byId("rk-dp-auto-text").textContent = data.text;
    byId("rk-dp-auto-fact1-title").textContent = data.fact1Title;
    byId("rk-dp-auto-fact1").textContent = data.fact1;
    byId("rk-dp-auto-fact2-title").textContent = data.fact2Title;
    byId("rk-dp-auto-fact2").textContent = data.fact2;
    byId("rk-dp-auto-fact3-title").textContent = data.fact3Title;
    byId("rk-dp-auto-fact3").textContent = data.fact3;

    var cards = root.querySelectorAll(".rk-dp-auto-card");
    var index;
    for (index = 0; index < cards.length; index += 1) {
      cards[index].classList.remove("is-active");
      cards[index].setAttribute("aria-pressed", "false");
      if (cards[index].getAttribute("data-auto-step") === step) {
        cards[index].classList.add("is-active");
        cards[index].setAttribute("aria-pressed", "true");
      }
    }
  }

  var presetButtons = root.querySelectorAll(".rk-dp-preset");
  var presetIndex;
  for (presetIndex = 0; presetIndex < presetButtons.length; presetIndex += 1) {
    presetButtons[presetIndex].addEventListener("click", function () {
      setPreset(this.getAttribute("data-preset"));
    });
  }

  var calculatorInputs = ["rk-dp-air-temp", "rk-dp-rh", "rk-dp-surface-temp", "rk-dp-margin", "rk-dp-supply", "rk-dp-return"];
  var inputIndex;
  for (inputIndex = 0; inputIndex < calculatorInputs.length; inputIndex += 1) {
    byId(calculatorInputs[inputIndex]).addEventListener("input", function () {
      updateCalculator(false);
    });
  }
  byId("rk-dp-calc-button").addEventListener("click", function () {
    updateCalculator(true);
  });

  byId("rk-dp-chart-air").addEventListener("input", drawChart);
  byId("rk-dp-chart-surface").addEventListener("input", drawChart);

  var autoCards = root.querySelectorAll(".rk-dp-auto-card");
  var autoIndex;
  for (autoIndex = 0; autoIndex < autoCards.length; autoIndex += 1) {
    autoCards[autoIndex].addEventListener("click", function () {
      showAutoStep(this.getAttribute("data-auto-step"));
    });
  }

  var resizeTimer;
  window.addEventListener("resize", function () {
    window.clearTimeout(resizeTimer);
    resizeTimer = window.setTimeout(drawChart, 120);
  });

  updateCalculator(true);
  showAutoStep("1");
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/punkt-rosy-w-ogrzewaniu-podlogowym-jak-bezpiecznie-chlodzic-dom-bez-ryzyka-kondensacji/">Punkt rosy przy chłodzeniu podłogowym – kalkulator i zabezpieczenia.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Średnice rur do podłogówki – 16, 17 czy 20 mm?</title>
		<link>https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 24 Feb 2026 10:52:01 +0000</pubDate>
				<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Hydraulika grzewcza]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Projekty instalacji]]></category>
		<category><![CDATA[Technologia grzewcza]]></category>
		<category><![CDATA[długość pętli podłogówki]]></category>
		<category><![CDATA[dobór rur ogrzewanie podłogowe]]></category>
		<category><![CDATA[hydraulika ogrzewania podłogowego]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[projektowanie podłogówki]]></category>
		<category><![CDATA[przepływ w ogrzewaniu podłogowym]]></category>
		<category><![CDATA[rura 16x2 ogrzewanie podłogowe]]></category>
		<category><![CDATA[rura 20x2 ogrzewanie podłogowe]]></category>
		<category><![CDATA[spadki ciśnienia ogrzewanie podłogowe]]></category>
		<category><![CDATA[średnice rur ogrzewanie podłogowe]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3505</guid>

					<description><![CDATA[<p>Dobór elementów instalacji grzewczej to nie przypadek, lecz świadoma decyzja techniczna. Średnice rur w ogrzewaniu podłogowym mają bezpośredni wpływ na przepływ wody, opory hydrauliczne oraz efektywność całego systemu. Zbyt mała średnica może powodować nadmierne spadki ciśnienia i niedogrzanie pomieszczeń, natomiast zbyt duża utrudnia regulację i zwiększa koszty inwestycji. W artykule pokazujemy konkretne obliczenia, przykłady oraz praktyczne zasady projektowe, które pozwalają dobrać optymalne parametry instalacji zarówno dla kotłów gazowych, jak i pomp ciepła.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">Średnice rur do podłogówki – 16, 17 czy 20 mm?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-diameter-guide {
    --rk-diameter-navy: #123247;
    --rk-diameter-navy-deep: #0b2536;
    --rk-diameter-teal: #0e7787;
    --rk-diameter-cyan: #5fdef0;
    --rk-diameter-orange: #ff7a21;
    --rk-diameter-green: #248c68;
    --rk-diameter-red: #c64b48;
    --rk-diameter-amber: #b77812;
    --rk-diameter-ink: #173246;
    --rk-diameter-muted: #5d7180;
    --rk-diameter-line: #d7e1e7;
    --rk-diameter-soft: #f3f7f9;
    --rk-diameter-white: #ffffff;
    --rk-diameter-shadow: 0 18px 48px rgba(13, 43, 60, 0.12);
    color: var(--rk-diameter-ink);
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    font-size: 18px;
    line-height: 1.72;
    overflow-x: hidden;
  }

  #rk-diameter-guide,
  #rk-diameter-guide *,
  #rk-diameter-guide *::before,
  #rk-diameter-guide *::after {
    box-sizing: border-box;
  }

  #rk-diameter-guide .rk-diameter-shell {
    width: min(1240px, 100%);
    margin: 0 auto;
  }

  #rk-diameter-guide a {
    color: #087a9f;
    text-decoration-thickness: 1.5px;
    text-underline-offset: 3px;
    overflow-wrap: anywhere;
  }

  #rk-diameter-guide a:hover {
    color: #055d79;
  }

  #rk-diameter-guide p,
  #rk-diameter-guide ul,
  #rk-diameter-guide ol {
    margin: 0 0 1.1rem;
  }

  #rk-diameter-guide strong {
    color: inherit;
  }

  #rk-diameter-guide .rk-diameter-hero {
    position: relative;
    isolation: isolate;
    overflow: hidden;
    padding: clamp(42px, 6vw, 78px);
    border-radius: 32px;
    background:
      radial-gradient(circle at 90% 112%, rgba(95, 222, 240, 0.16) 0 150px, transparent 151px),
      radial-gradient(circle at 90% 112%, transparent 0 205px, rgba(95, 222, 240, 0.09) 206px 275px, transparent 276px),
      linear-gradient(115deg, #122f43 0%, #123c4f 56%, #0d5b63 100%);
    color: #ffffff;
    box-shadow: var(--rk-diameter-shadow);
  }

  #rk-diameter-guide .rk-diameter-hero::before {
    content: "";
    position: absolute;
    z-index: -1;
    left: -120px;
    bottom: -180px;
    width: 440px;
    height: 440px;
    border-radius: 50%;
    background: rgba(255, 122, 33, 0.10);
    filter: blur(2px);
  }

  #rk-diameter-guide .rk-diameter-hero-inner {
    position: relative;
    z-index: 1;
  }

  #rk-diameter-guide .rk-diameter-kicker,
  #rk-diameter-guide .rk-diameter-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 18px;
    color: var(--rk-diameter-orange);
    font-size: 0.78rem;
    font-weight: 850;
    letter-spacing: 0.13em;
    line-height: 1.35;
    text-transform: uppercase;
  }

  #rk-diameter-guide .rk-diameter-kicker::before,
  #rk-diameter-guide .rk-diameter-eyebrow::before {
    content: "";
    flex: 0 0 9px;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    background: currentColor;
  }

  #rk-diameter-guide .rk-diameter-hero-title {
    max-width: 1110px;
    margin: 0;
    color: #ffffff;
    font-size: clamp(2.55rem, 6.1vw, 5.2rem);
    font-weight: 900;
    letter-spacing: -0.055em;
    line-height: 0.98;
    text-wrap: balance;
  }

  #rk-diameter-guide .rk-diameter-hero-title span {
    color: var(--rk-diameter-cyan);
  }

  #rk-diameter-guide .rk-diameter-hero-lead {
    max-width: 1050px;
    margin: 30px 0 0;
    color: #eef9fc;
    font-size: clamp(1.05rem, 2vw, 1.34rem);
    line-height: 1.62;
  }

  #rk-diameter-guide .rk-diameter-hero-tags {
    display: flex;
    flex-wrap: wrap;
    gap: 11px;
    margin: 28px 0 0;
  }

  #rk-diameter-guide .rk-diameter-hero-tag {
    display: inline-flex;
    align-items: center;
    min-height: 42px;
    padding: 8px 17px;
    border: 1px solid rgba(255, 255, 255, 0.26);
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 0.84rem;
    font-weight: 800;
    line-height: 1.3;
  }

  #rk-diameter-guide .rk-diameter-byline {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 24px;
    margin: 34px 0 0;
    color: #e5f0f4;
    font-size: 0.85rem;
    font-weight: 700;
  }

  #rk-diameter-guide .rk-diameter-hero-metrics {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 18px;
    margin-top: 38px;
  }

  #rk-diameter-guide .rk-diameter-hero-metric {
    min-width: 0;
    padding: 22px 24px;
    border: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 19px;
    background: rgba(255, 255, 255, 0.08);
    color: #eff9fb;
    backdrop-filter: blur(5px);
  }

  #rk-diameter-guide .rk-diameter-hero-metric b {
    display: block;
    margin-bottom: 7px;
    color: #ffffff;
    font-size: 1.02rem;
    line-height: 1.3;
  }

  #rk-diameter-guide .rk-diameter-hero-metric span {
    display: block;
    color: #e2f1f5;
    font-size: 0.88rem;
    line-height: 1.55;
  }

  #rk-diameter-guide .rk-diameter-shortcuts {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin: 24px 0;
    padding: 22px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 22px;
    background: #ffffff;
    box-shadow: 0 10px 30px rgba(18, 50, 71, 0.07);
  }

  #rk-diameter-guide .rk-diameter-shortcuts-label {
    display: block;
    flex-basis: 100%;
    color: var(--rk-diameter-navy);
    font-size: 0.8rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-diameter-guide .rk-diameter-shortcuts a {
    display: inline-flex;
    align-items: center;
    min-height: 38px;
    padding: 7px 13px;
    border: 1px solid #cbd9e1;
    border-radius: 999px;
    background: var(--rk-diameter-soft);
    color: var(--rk-diameter-navy);
    font-size: 0.76rem;
    font-weight: 800;
    line-height: 1.25;
    text-decoration: none;
  }

  #rk-diameter-guide .rk-diameter-shortcuts a:hover {
    border-color: var(--rk-diameter-teal);
    background: #e8f6f8;
    color: #075f6b;
  }

  #rk-diameter-guide .rk-diameter-section,
  #rk-diameter-guide .rk-diameter-author {
    margin: 24px 0;
    padding: clamp(30px, 5vw, 62px);
    border: 1px solid var(--rk-diameter-line);
    border-radius: 28px;
    background: #ffffff;
    box-shadow: 0 14px 42px rgba(18, 50, 71, 0.07);
    scroll-margin-top: 28px;
  }

  #rk-diameter-guide .rk-diameter-section-soft {
    background: var(--rk-diameter-soft);
  }

  #rk-diameter-guide .rk-diameter-section-dark {
    border-color: #234c61;
    background:
      radial-gradient(circle at 105% 100%, rgba(95, 222, 240, 0.12) 0 190px, transparent 191px),
      linear-gradient(135deg, #102d40, #0e4854);
    color: #eff8fb;
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-section-title,
  #rk-diameter-guide .rk-diameter-section-dark h3,
  #rk-diameter-guide .rk-diameter-section-dark strong {
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-lead,
  #rk-diameter-guide .rk-diameter-section-dark p,
  #rk-diameter-guide .rk-diameter-section-dark li {
    color: #e3f0f4;
  }

  #rk-diameter-guide .rk-diameter-section-title,
  #rk-diameter-guide .rk-diameter-author-title {
    max-width: 1010px;
    margin: 0 0 18px;
    color: var(--rk-diameter-navy);
    font-size: clamp(1.8rem, 3.7vw, 3.05rem);
    font-weight: 900;
    letter-spacing: -0.035em;
    line-height: 1.12;
    text-wrap: balance;
  }

  #rk-diameter-guide .rk-diameter-lead {
    max-width: 1040px;
    color: #314c5e;
    font-size: 1.08rem;
    line-height: 1.75;
  }

  #rk-diameter-guide .rk-diameter-answer {
    margin: 24px 0;
    padding: 26px 28px;
    border-left: 6px solid var(--rk-diameter-cyan);
    border-radius: 8px 20px 20px 8px;
    background: var(--rk-diameter-navy);
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-answer-label {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-diameter-cyan);
    font-size: 0.76rem;
    font-weight: 900;
    letter-spacing: 0.1em;
    text-transform: uppercase;
  }

  #rk-diameter-guide .rk-diameter-answer p {
    margin: 0;
    color: #ffffff;
    font-size: 1.06rem;
  }

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

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

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

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

  #rk-diameter-guide .rk-diameter-card {
    min-width: 0;
    padding: 23px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 20px;
    background: #ffffff;
    color: var(--rk-diameter-ink);
  }

  #rk-diameter-guide .rk-diameter-card h3 {
    margin: 0 0 10px;
    color: var(--rk-diameter-navy);
    font-size: 1.06rem;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-card p,
  #rk-diameter-guide .rk-diameter-card li {
    color: #3e5869;
    font-size: 0.92rem;
    line-height: 1.65;
  }

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

  #rk-diameter-guide .rk-diameter-card-number {
    display: inline-grid;
    place-items: center;
    width: 36px;
    height: 36px;
    margin-bottom: 14px;
    border-radius: 50%;
    background: #dff8fb;
    color: #086678;
    font-size: 0.85rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-callout,
  #rk-diameter-guide .rk-diameter-note,
  #rk-diameter-guide .rk-diameter-warning {
    margin: 24px 0 0;
    padding: 20px 22px;
    border-radius: 16px;
    color: #274657;
    font-size: 0.94rem;
    line-height: 1.68;
  }

  #rk-diameter-guide .rk-diameter-callout {
    border: 1px solid #b9e7ed;
    background: #eaf9fb;
  }

  #rk-diameter-guide .rk-diameter-note {
    border: 1px solid #d7e1e7;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-warning {
    border: 1px solid #efd0a1;
    background: #fff6e9;
  }

  #rk-diameter-guide .rk-diameter-tool {
    overflow: hidden;
    margin: 28px 0 0;
    border: 1px solid #aacbd2;
    border-radius: 26px;
    background: #ffffff;
    box-shadow: 0 18px 46px rgba(15, 66, 78, 0.12);
  }

  #rk-diameter-guide .rk-diameter-tool-head {
    padding: 28px clamp(22px, 4vw, 40px);
    background: linear-gradient(125deg, var(--rk-diameter-navy), #0d5962);
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-tool-head .rk-diameter-eyebrow {
    color: #ffad73;
  }

  #rk-diameter-guide .rk-diameter-tool-head h3 {
    margin: 0 0 10px;
    color: #ffffff;
    font-size: clamp(1.35rem, 3vw, 2.05rem);
    line-height: 1.2;
  }

  #rk-diameter-guide .rk-diameter-tool-head p {
    max-width: 920px;
    margin: 0;
    color: #e9f7fa;
    font-size: 0.94rem;
  }

  #rk-diameter-guide .rk-diameter-tool-body {
    padding: clamp(22px, 4vw, 40px);
  }

  #rk-diameter-guide .rk-diameter-control-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    margin-bottom: 22px;
  }

  #rk-diameter-guide .rk-diameter-control {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 18px;
    background: var(--rk-diameter-soft);
  }

  #rk-diameter-guide .rk-diameter-control-label {
    display: block;
    margin-bottom: 11px;
    color: var(--rk-diameter-navy);
    font-size: 0.84rem;
    font-weight: 900;
  }

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

  #rk-diameter-guide .rk-diameter-segmented button {
    min-width: 0;
    min-height: 48px;
    padding: 9px 12px;
    border: 1px solid #bfd0d9;
    border-radius: 13px;
    background: #ffffff;
    color: var(--rk-diameter-navy);
    font: inherit;
    font-size: 0.84rem;
    font-weight: 850;
    line-height: 1.25;
    cursor: pointer;
    transition: background-color 0.18s ease, color 0.18s ease, border-color 0.18s ease, transform 0.18s ease;
  }

  #rk-diameter-guide .rk-diameter-segmented button:hover {
    transform: translateY(-1px);
    border-color: var(--rk-diameter-teal);
  }

  #rk-diameter-guide .rk-diameter-segmented button[aria-pressed="true"] {
    border-color: var(--rk-diameter-navy);
    background: var(--rk-diameter-navy);
    color: #ffffff;
    box-shadow: 0 8px 18px rgba(18, 50, 71, 0.18);
  }

  #rk-diameter-guide .rk-diameter-state-summary {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 16px;
    align-items: center;
    margin: 0 0 22px;
    padding: 20px;
    border: 1px solid #b9e7ed;
    border-radius: 18px;
    background: #eaf9fb;
  }

  #rk-diameter-guide .rk-diameter-state-dot {
    display: grid;
    place-items: center;
    width: 50px;
    height: 50px;
    border-radius: 50%;
    background: var(--rk-diameter-green);
    color: #ffffff;
    font-size: 1.25rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-state-summary[data-flow="closed"] {
    border-color: #e5c4c2;
    background: #fff1f0;
  }

  #rk-diameter-guide .rk-diameter-state-summary[data-flow="closed"] .rk-diameter-state-dot {
    background: var(--rk-diameter-red);
  }

  #rk-diameter-guide .rk-diameter-state-summary strong {
    display: block;
    margin-bottom: 2px;
    color: var(--rk-diameter-navy);
    font-size: 1.05rem;
  }

  #rk-diameter-guide .rk-diameter-state-summary p {
    margin: 0;
    color: #405c6d;
    font-size: 0.91rem;
    line-height: 1.55;
  }

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

  #rk-diameter-guide .rk-diameter-flow-step {
    position: relative;
    min-width: 0;
    padding: 22px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 20px;
    background: #ffffff;
    color: var(--rk-diameter-ink);
    transition: border-color 0.2s ease, box-shadow 0.2s ease, transform 0.2s ease;
  }

  #rk-diameter-guide .rk-diameter-flow-step.is-active {
    border-color: #64c7d2;
    box-shadow: 0 12px 28px rgba(14, 119, 135, 0.13);
    transform: translateY(-2px);
  }

  #rk-diameter-guide .rk-diameter-flow-step.is-rest {
    background: #f7f9fa;
  }

  #rk-diameter-guide .rk-diameter-flow-top {
    display: flex;
    gap: 13px;
    align-items: center;
    margin-bottom: 14px;
  }

  #rk-diameter-guide .rk-diameter-flow-icon {
    display: grid;
    flex: 0 0 52px;
    place-items: center;
    width: 52px;
    height: 52px;
    border-radius: 16px;
    background: #e6f7f9;
    color: #087083;
  }

  #rk-diameter-guide .rk-diameter-flow-icon svg {
    width: 29px;
    height: 29px;
    fill: none;
    stroke: currentColor;
    stroke-linecap: round;
    stroke-linejoin: round;
    stroke-width: 1.8;
  }

  #rk-diameter-guide .rk-diameter-flow-number {
    display: block;
    color: var(--rk-diameter-orange);
    font-size: 0.7rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-diameter-guide .rk-diameter-flow-step h4 {
    margin: 2px 0 0;
    color: var(--rk-diameter-navy);
    font-size: 1rem;
    line-height: 1.25;
  }

  #rk-diameter-guide .rk-diameter-flow-value {
    display: inline-flex;
    align-items: center;
    min-height: 31px;
    margin-bottom: 10px;
    padding: 5px 11px;
    border-radius: 999px;
    background: #dff6e9;
    color: #176a4e;
    font-size: 0.77rem;
    font-weight: 900;
    line-height: 1.2;
  }

  #rk-diameter-guide .rk-diameter-flow-value.is-off {
    background: #eef1f3;
    color: #5c6e79;
  }

  #rk-diameter-guide .rk-diameter-flow-value.is-closed {
    background: #fde7e6;
    color: #9c3936;
  }

  #rk-diameter-guide .rk-diameter-flow-copy {
    margin: 0;
    color: #405b6c;
    font-size: 0.87rem;
    line-height: 1.6;
  }

  #rk-diameter-guide .rk-diameter-tool-disclaimer {
    margin: 22px 0 0;
    padding: 17px 19px;
    border: 1px solid #efd0a1;
    border-radius: 15px;
    background: #fff6e9;
    color: #5f4a2c;
    font-size: 0.86rem;
    line-height: 1.6;
  }

  #rk-diameter-guide .rk-diameter-compare-table,
  #rk-diameter-guide .rk-diameter-diagnostic-table {
    overflow: hidden;
    margin: 24px 0;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 20px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-table-row {
    display: grid;
    grid-template-columns: minmax(150px, 0.8fr) repeat(2, minmax(0, 1fr));
    border-top: 1px solid var(--rk-diameter-line);
  }

  #rk-diameter-guide .rk-diameter-table-row:first-child {
    border-top: 0;
  }

  #rk-diameter-guide .rk-diameter-table-row > div {
    min-width: 0;
    padding: 18px 20px;
    border-left: 1px solid var(--rk-diameter-line);
    color: #3b5667;
    font-size: 0.89rem;
    line-height: 1.58;
  }

  #rk-diameter-guide .rk-diameter-table-row > div:first-child {
    border-left: 0;
  }

  #rk-diameter-guide .rk-diameter-table-head {
    background: var(--rk-diameter-navy);
  }

  #rk-diameter-guide .rk-diameter-table-head > div {
    color: #ffffff;
    font-weight: 850;
  }

  #rk-diameter-guide .rk-diameter-table-label {
    background: #f2f6f8;
    color: var(--rk-diameter-navy) !important;
    font-weight: 850;
  }

  #rk-diameter-guide .rk-diameter-diagnostic-table .rk-diameter-table-row {
    grid-template-columns: minmax(180px, 0.8fr) minmax(0, 1fr) minmax(0, 1.15fr);
  }

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

  #rk-diameter-guide .rk-diameter-spec {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 14px;
    align-items: start;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 17px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-spec-mark {
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: #daf4f7;
    color: #0b7180;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-spec strong {
    display: block;
    margin-bottom: 4px;
    color: var(--rk-diameter-navy);
    font-size: 0.94rem;
  }

  #rk-diameter-guide .rk-diameter-spec span {
    display: block;
    color: #4b6474;
    font-size: 0.84rem;
    line-height: 1.55;
  }

  #rk-diameter-guide .rk-diameter-chain {
    display: grid;
    grid-template-columns: repeat(5, minmax(0, 1fr));
    gap: 12px;
    align-items: stretch;
    margin: 26px 0;
  }

  #rk-diameter-guide .rk-diameter-chain-item {
    position: relative;
    min-width: 0;
    padding: 19px 15px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 17px;
    background: #ffffff;
    color: var(--rk-diameter-ink);
    text-align: center;
  }

  #rk-diameter-guide .rk-diameter-chain-item::after {
    content: "→";
    position: absolute;
    top: 50%;
    right: -15px;
    z-index: 2;
    width: 18px;
    color: var(--rk-diameter-orange);
    font-size: 1.15rem;
    font-weight: 900;
    line-height: 1;
    transform: translateY(-50%);
  }

  #rk-diameter-guide .rk-diameter-chain-item:last-child::after {
    display: none;
  }

  #rk-diameter-guide .rk-diameter-chain-item strong {
    display: block;
    color: var(--rk-diameter-navy);
    font-size: 0.9rem;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-chain-item span {
    display: block;
    margin-top: 5px;
    color: #56707f;
    font-size: 0.75rem;
    line-height: 1.45;
  }

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

  #rk-diameter-guide .rk-diameter-step {
    position: relative;
    min-width: 0;
    padding: 21px 21px 21px 67px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 19px;
    background: #ffffff;
    color: var(--rk-diameter-ink);
    counter-increment: rk-diameter-step;
  }

  #rk-diameter-guide .rk-diameter-step::before {
    content: counter(rk-diameter-step);
    position: absolute;
    top: 20px;
    left: 20px;
    display: grid;
    place-items: center;
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--rk-diameter-navy);
    color: #ffffff;
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-step h3 {
    margin: 0 0 7px;
    color: var(--rk-diameter-navy);
    font-size: 1rem;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-step p {
    margin: 0;
    color: #435e6f;
    font-size: 0.88rem;
    line-height: 1.6;
  }

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

  #rk-diameter-guide .rk-diameter-mistake {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 13px;
    min-width: 0;
    padding: 19px;
    border: 1px solid #ead4d2;
    border-radius: 17px;
    background: #fff7f6;
  }

  #rk-diameter-guide .rk-diameter-mistake-icon {
    display: grid;
    place-items: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-diameter-red);
    color: #ffffff;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-mistake strong {
    color: #7e302e;
    font-size: 0.94rem;
  }

  #rk-diameter-guide .rk-diameter-mistake p {
    margin: 4px 0 0;
    color: #5f4d4c;
    font-size: 0.85rem;
    line-height: 1.55;
  }

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

  #rk-diameter-guide .rk-diameter-checklist-item {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 13px;
    align-items: start;
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 17px;
    background: #ffffff;
    color: #425d6e;
    font-size: 0.86rem;
    line-height: 1.55;
  }

  #rk-diameter-guide .rk-diameter-checklist-item > span {
    display: grid;
    place-items: center;
    width: 31px;
    height: 31px;
    border-radius: 50%;
    background: #dff6e9;
    color: var(--rk-diameter-green);
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-checklist-item strong {
    color: var(--rk-diameter-navy);
    font-size: 0.92rem;
  }

  #rk-diameter-guide .rk-diameter-formula {
    display: grid;
    grid-template-columns: minmax(0, 0.8fr) minmax(0, 1.2fr);
    gap: 18px;
    align-items: stretch;
    margin: 24px 0;
  }

  #rk-diameter-guide .rk-diameter-formula-box {
    display: grid;
    place-items: center;
    min-height: 170px;
    padding: 24px;
    border-radius: 20px;
    background: var(--rk-diameter-navy);
    color: #ffffff;
    text-align: center;
  }

  #rk-diameter-guide .rk-diameter-formula-box strong {
    display: block;
    color: var(--rk-diameter-cyan);
    font-size: clamp(1.35rem, 3vw, 2rem);
    line-height: 1.25;
  }

  #rk-diameter-guide .rk-diameter-formula-box span {
    display: block;
    margin-top: 8px;
    color: #dcecf2;
    font-size: 0.82rem;
  }

  #rk-diameter-guide .rk-diameter-formula-copy {
    padding: 23px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 20px;
    background: #ffffff;
    color: #3f596a;
  }

  #rk-diameter-guide .rk-diameter-formula-copy h3 {
    margin: 0 0 9px;
    color: var(--rk-diameter-navy);
    font-size: 1.08rem;
  }

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

  #rk-diameter-guide .rk-diameter-cta {
    margin: 32px 0 0;
    padding: clamp(27px, 4vw, 42px);
    border-radius: 24px;
    background:
      radial-gradient(circle at 100% 110%, rgba(95, 222, 240, 0.14) 0 130px, transparent 131px),
      linear-gradient(125deg, var(--rk-diameter-navy), #0b5761);
    color: #ffffff;
    box-shadow: 0 18px 45px rgba(11, 45, 62, 0.18);
  }

  #rk-diameter-guide .rk-diameter-cta-title {
    max-width: 930px;
    margin: 0 0 12px;
    color: #ffffff;
    font-size: clamp(1.45rem, 3.2vw, 2.35rem);
    font-weight: 900;
    letter-spacing: -0.03em;
    line-height: 1.16;
  }

  #rk-diameter-guide .rk-diameter-cta p {
    max-width: 980px;
    margin-bottom: 20px;
    color: #e7f3f6;
  }

  #rk-diameter-guide .rk-diameter-cta-button {
    display: inline-flex;
    justify-content: center;
    align-items: center;
    min-height: 52px;
    padding: 12px 20px;
    border: 2px solid var(--rk-diameter-orange);
    border-radius: 12px;
    background: var(--rk-diameter-orange);
    color: #ffffff !important;
    font-weight: 900;
    line-height: 1.3;
    text-align: center;
    text-decoration: none !important;
    box-shadow: 0 10px 22px rgba(255, 122, 33, 0.22);
  }

  #rk-diameter-guide .rk-diameter-cta-button:hover {
    border-color: #ff9652;
    background: #ff9652;
    color: #ffffff !important;
  }

  #rk-diameter-guide .rk-diameter-link-disclosure {
    display: block;
    margin-top: 13px;
    color: #cfe1e6;
    font-size: 0.72rem;
    line-height: 1.45;
  }

  #rk-diameter-guide .rk-diameter-source-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
    margin-top: 24px;
  }

  #rk-diameter-guide .rk-diameter-source-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 18px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-source-card a {
    display: inline-block;
    color: var(--rk-diameter-navy);
    font-size: 0.93rem;
    font-weight: 900;
    line-height: 1.45;
  }

  #rk-diameter-guide .rk-diameter-source-card p {
    margin: 8px 0 0;
    color: #516a79;
    font-size: 0.83rem;
    line-height: 1.55;
  }

  #rk-diameter-guide .rk-diameter-responsibility {
    margin-top: 20px;
    padding: 21px;
    border: 1px solid #d7e1e7;
    border-radius: 18px;
    background: #ffffff;
    color: #405a6b;
    font-size: 0.87rem;
    line-height: 1.62;
  }

  #rk-diameter-guide .rk-diameter-responsibility p:last-child {
    margin-bottom: 0;
  }

  #rk-diameter-guide .rk-diameter-faq details {
    overflow: hidden;
    margin: 12px 0;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 16px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-faq summary {
    position: relative;
    padding: 18px 52px 18px 20px;
    color: var(--rk-diameter-navy);
    font-size: 0.96rem;
    font-weight: 850;
    line-height: 1.45;
    cursor: pointer;
    list-style: none;
  }

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

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

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

  #rk-diameter-guide .rk-diameter-faq-answer {
    padding: 0 20px 18px;
    color: #415c6d;
    font-size: 0.9rem;
    line-height: 1.65;
  }

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

  #rk-diameter-guide .rk-diameter-author {
    background:
      radial-gradient(circle at 98% 100%, rgba(95, 222, 240, 0.12) 0 150px, transparent 151px),
      linear-gradient(130deg, #102d40, #113f4e);
    color: #eaf4f7;
  }

  #rk-diameter-guide .rk-diameter-author .rk-diameter-eyebrow {
    color: #ff9a57;
  }

  #rk-diameter-guide .rk-diameter-author-title {
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-author-layout {
    display: grid;
    grid-template-columns: minmax(210px, 0.34fr) minmax(0, 1fr);
    gap: 28px;
    align-items: start;
    margin-top: 25px;
  }

  #rk-diameter-guide .rk-diameter-author-side {
    padding: 22px;
    border: 1px solid rgba(255, 255, 255, 0.18);
    border-radius: 20px;
    background: rgba(255, 255, 255, 0.07);
    text-align: center;
  }

  #rk-diameter-guide .rk-diameter-author-photo {
    width: 150px;
    height: 150px;
    margin: 0 auto 16px;
    overflow: hidden;
    border: 4px solid rgba(255, 255, 255, 0.24);
    border-radius: 50%;
    background: #ffffff;
  }

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

  #rk-diameter-guide .rk-diameter-author-name a {
    color: #ffffff;
    font-size: 1.12rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-author-role {
    margin: 7px 0 13px;
    color: #dbeaf0;
    font-size: 0.82rem;
    line-height: 1.5;
  }

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

  #rk-diameter-guide .rk-diameter-author-social a {
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border: 1px solid rgba(255, 255, 255, 0.24);
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 0.8rem;
    font-weight: 900;
    text-decoration: none;
  }

  #rk-diameter-guide .rk-diameter-author-main p {
    color: #dcecf1;
    font-size: 0.92rem;
  }

  #rk-diameter-guide .rk-diameter-author-main a {
    color: var(--rk-diameter-cyan);
  }

  #rk-diameter-guide .rk-diameter-author-quote {
    margin-bottom: 21px;
    padding: 22px;
    border-left: 5px solid var(--rk-diameter-cyan);
    border-radius: 7px 17px 17px 7px;
    background: rgba(255, 255, 255, 0.08);
    color: #ffffff;
    font-size: 1.03rem;
    font-weight: 750;
    line-height: 1.6;
  }

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

  #rk-diameter-guide .rk-diameter-author-fact {
    min-width: 0;
    padding: 15px;
    border: 1px solid rgba(255, 255, 255, 0.16);
    border-radius: 15px;
    background: rgba(255, 255, 255, 0.06);
    color: #d7e8ed;
    font-size: 0.75rem;
    line-height: 1.45;
  }

  #rk-diameter-guide .rk-diameter-author-fact strong {
    display: block;
    margin-bottom: 4px;
    color: #ffffff;
    font-size: 0.8rem;
  }

  #rk-diameter-guide .rk-diameter-tool-tabs,
  #rk-diameter-guide .rk-diameter-graphic-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 9px;
    margin: 0 0 22px;
  }

  #rk-diameter-guide .rk-diameter-tool-tabs button,
  #rk-diameter-guide .rk-diameter-graphic-controls button {
    min-height: 44px;
    padding: 9px 15px;
    border: 1px solid #bdd0d8;
    border-radius: 999px;
    background: #ffffff;
    color: var(--rk-diameter-navy);
    font: inherit;
    font-size: 0.8rem;
    font-weight: 850;
    line-height: 1.25;
    cursor: pointer;
  }

  #rk-diameter-guide .rk-diameter-tool-tabs button[aria-selected="true"],
  #rk-diameter-guide .rk-diameter-graphic-controls button[aria-pressed="true"] {
    border-color: var(--rk-diameter-navy);
    background: var(--rk-diameter-navy);
    color: #ffffff;
    box-shadow: 0 8px 20px rgba(18, 50, 71, 0.18);
  }

  #rk-diameter-guide .rk-diameter-panel[hidden],
  #rk-diameter-guide .rk-diameter-is-hidden {
    display: none !important;
  }

  #rk-diameter-guide .rk-diameter-field-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 18px 0;
  }

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

  #rk-diameter-guide .rk-diameter-field {
    min-width: 0;
    padding: 16px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 16px;
    background: var(--rk-diameter-soft);
  }

  #rk-diameter-guide .rk-diameter-field label,
  #rk-diameter-guide .rk-diameter-field-label {
    display: block;
    margin: 0 0 7px;
    color: var(--rk-diameter-navy);
    font-size: 0.79rem;
    font-weight: 900;
    line-height: 1.4;
  }

  #rk-diameter-guide .rk-diameter-field input,
  #rk-diameter-guide .rk-diameter-field select,
  #rk-diameter-guide .rk-diameter-loop-row input,
  #rk-diameter-guide .rk-diameter-curve-row input {
    width: 100%;
    min-height: 47px;
    margin: 0;
    padding: 10px 12px;
    border: 1px solid #b9cbd4;
    border-radius: 11px;
    background: #ffffff;
    color: #173246;
    font: inherit;
    font-size: 0.91rem;
    line-height: 1.2;
  }

  #rk-diameter-guide .rk-diameter-field input:focus,
  #rk-diameter-guide .rk-diameter-field select:focus,
  #rk-diameter-guide .rk-diameter-loop-row input:focus,
  #rk-diameter-guide .rk-diameter-curve-row input:focus {
    outline: 3px solid rgba(95, 222, 240, 0.34);
    border-color: var(--rk-diameter-teal);
  }

  #rk-diameter-guide .rk-diameter-field-help {
    display: block;
    margin-top: 7px;
    color: #5c7180;
    font-size: 0.7rem;
    line-height: 1.45;
  }

  #rk-diameter-guide .rk-diameter-tool-subtitle {
    margin: 26px 0 10px;
    color: var(--rk-diameter-navy);
    font-size: 1.12rem;
    font-weight: 900;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-loop-editor,
  #rk-diameter-guide .rk-diameter-curve-editor {
    margin: 18px 0;
    padding: 18px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 18px;
    background: var(--rk-diameter-soft);
  }

  #rk-diameter-guide .rk-diameter-loop-row,
  #rk-diameter-guide .rk-diameter-curve-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(120px, 0.46fr) auto;
    gap: 9px;
    align-items: end;
    margin-top: 10px;
  }

  #rk-diameter-guide .rk-diameter-curve-row {
    grid-template-columns: 42px repeat(2, minmax(110px, 1fr));
  }

  #rk-diameter-guide .rk-diameter-loop-row:first-child,
  #rk-diameter-guide .rk-diameter-curve-row:first-child {
    margin-top: 0;
  }

  #rk-diameter-guide .rk-diameter-loop-cell label,
  #rk-diameter-guide .rk-diameter-curve-cell label {
    display: block;
    margin-bottom: 5px;
    color: #496371;
    font-size: 0.68rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-remove-loop,
  #rk-diameter-guide .rk-diameter-add-loop {
    min-height: 45px;
    padding: 9px 13px;
    border: 1px solid #c7d5dc;
    border-radius: 11px;
    background: #ffffff;
    color: var(--rk-diameter-navy);
    font: inherit;
    font-size: 0.77rem;
    font-weight: 850;
    cursor: pointer;
  }

  #rk-diameter-guide .rk-diameter-remove-loop {
    width: 45px;
    padding: 8px;
    color: #9b3b38;
  }

  #rk-diameter-guide .rk-diameter-add-loop {
    margin-top: 13px;
    border-color: #86cdd5;
    background: #eaf9fb;
    color: #075f6b;
  }

  #rk-diameter-guide .rk-diameter-calc-layout {
    display: grid;
    grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.08fr);
    gap: 20px;
    align-items: start;
  }

  #rk-diameter-guide .rk-diameter-results {
    min-width: 0;
  }

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

  #rk-diameter-guide .rk-diameter-result {
    min-width: 0;
    padding: 17px;
    border: 1px solid #b8dce1;
    border-radius: 16px;
    background: #effbfc;
  }

  #rk-diameter-guide .rk-diameter-result span {
    display: block;
    color: #4c6876;
    font-size: 0.7rem;
    font-weight: 850;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-result strong {
    display: block;
    margin-top: 4px;
    color: var(--rk-diameter-navy);
    font-size: clamp(1.2rem, 2.5vw, 1.7rem);
    line-height: 1.2;
  }

  #rk-diameter-guide .rk-diameter-breakdown {
    padding: 18px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 17px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-breakdown-title {
    display: block;
    margin-bottom: 12px;
    color: var(--rk-diameter-navy);
    font-size: 0.86rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-break-row {
    display: grid;
    grid-template-columns: minmax(104px, 0.62fr) minmax(0, 1fr) auto;
    gap: 10px;
    align-items: center;
    margin: 9px 0;
    color: #496371;
    font-size: 0.73rem;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-break-row strong,
  #rk-diameter-guide .rk-diameter-curve-row > strong {
    color: var(--rk-diameter-navy);
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-callout strong {
    color: var(--rk-diameter-navy);
  }

  #rk-diameter-guide .rk-diameter-break-track {
    height: 9px;
    overflow: hidden;
    border-radius: 999px;
    background: #e8eef1;
  }

  #rk-diameter-guide .rk-diameter-break-fill {
    display: block;
    width: 0;
    height: 100%;
    border-radius: inherit;
    background: linear-gradient(90deg, var(--rk-diameter-teal), var(--rk-diameter-cyan));
  }

  #rk-diameter-guide .rk-diameter-chart-card {
    min-width: 0;
    padding: 18px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 18px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-chart-title {
    margin: 0 0 11px;
    color: var(--rk-diameter-navy);
    font-size: 0.95rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-chart-wrap {
    width: 100%;
    min-width: 0;
    overflow: hidden;
    border-radius: 13px;
    background: #f8fbfc;
  }

  #rk-diameter-guide .rk-diameter-chart-wrap svg {
    display: block;
    width: 100%;
    height: auto;
    min-height: 310px;
  }

  #rk-diameter-guide .rk-diameter-chart-grid-line {
    stroke: #dbe5ea;
    stroke-width: 1;
  }

  #rk-diameter-guide .rk-diameter-chart-axis {
    stroke: #6f8592;
    stroke-width: 1.4;
  }

  #rk-diameter-guide .rk-diameter-system-path {
    fill: none;
    stroke: var(--rk-diameter-teal);
    stroke-width: 4;
  }

  #rk-diameter-guide .rk-diameter-device-path {
    fill: none;
    stroke: var(--rk-diameter-orange);
    stroke-width: 4;
  }

  #rk-diameter-guide .rk-diameter-design-point {
    fill: var(--rk-diameter-navy);
    stroke: #ffffff;
    stroke-width: 4;
  }

  #rk-diameter-guide .rk-diameter-operating-point {
    fill: var(--rk-diameter-orange);
    stroke: #ffffff;
    stroke-width: 4;
  }

  #rk-diameter-guide .rk-diameter-chart-tick,
  #rk-diameter-guide .rk-diameter-chart-label {
    fill: #55707f;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
  }

  #rk-diameter-guide .rk-diameter-chart-label {
    fill: var(--rk-diameter-navy);
    font-size: 13px;
    font-weight: 800;
  }

  #rk-diameter-guide .rk-diameter-legend {
    display: flex;
    flex-wrap: wrap;
    gap: 8px 15px;
    margin-top: 12px;
    color: #536d7b;
    font-size: 0.69rem;
    font-weight: 800;
  }

  #rk-diameter-guide .rk-diameter-legend span {
    display: inline-flex;
    align-items: center;
    gap: 7px;
  }

  #rk-diameter-guide .rk-diameter-legend i {
    display: inline-block;
    width: 25px;
    height: 4px;
    border-radius: 999px;
    background: var(--rk-diameter-teal);
  }

  #rk-diameter-guide .rk-diameter-legend .is-pump i {
    background: var(--rk-diameter-orange);
  }

  #rk-diameter-guide .rk-diameter-legend .is-point i {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--rk-diameter-navy);
  }

  #rk-diameter-guide .rk-diameter-status {
    margin: 15px 0 0;
    padding: 15px 17px;
    border: 1px solid #b8dce1;
    border-radius: 14px;
    background: #effbfc;
    color: #315261;
    font-size: 0.79rem;
    line-height: 1.55;
  }

  #rk-diameter-guide .rk-diameter-status.is-warning {
    border-color: #efd0a1;
    background: #fff6e9;
    color: #664d2b;
  }

  #rk-diameter-guide .rk-diameter-status.is-bad {
    border-color: #e6c2c0;
    background: #fff2f1;
    color: #743b38;
  }

  #rk-diameter-guide .rk-diameter-status.is-good {
    border-color: #b8ddce;
    background: #eefaf5;
    color: #245d48;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 14px;
    margin-top: 18px;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 18px;
    background: #ffffff;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-card.is-active {
    border-color: #5fc6d1;
    box-shadow: 0 12px 28px rgba(14, 119, 135, 0.13);
    transform: translateY(-2px);
  }

  #rk-diameter-guide .rk-diameter-hydraulic-card.is-muted {
    opacity: 0.58;
    background: #f3f6f7;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-number {
    display: inline-grid;
    place-items: center;
    width: 34px;
    height: 34px;
    margin-bottom: 12px;
    border-radius: 50%;
    background: #ddf6f8;
    color: #086878;
    font-size: 0.78rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-card h3 {
    margin: 0 0 8px;
    color: var(--rk-diameter-navy);
    font-size: 1rem;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-value {
    display: inline-flex;
    min-height: 29px;
    align-items: center;
    margin: 0 0 9px;
    padding: 5px 10px;
    border-radius: 999px;
    background: #eef4f6;
    color: #3f5e6d;
    font-size: 0.71rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-card.is-active .rk-diameter-hydraulic-value {
    background: #dff6e9;
    color: #21664e;
  }

  #rk-diameter-guide .rk-diameter-hydraulic-card p {
    margin: 0;
    color: #466171;
    font-size: 0.82rem;
    line-height: 1.58;
  }

  #rk-diameter-guide .rk-diameter-graphic-result {
    margin-top: 16px;
    padding: 20px;
    border-left: 5px solid var(--rk-diameter-cyan);
    border-radius: 8px 16px 16px 8px;
    background: var(--rk-diameter-navy);
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-graphic-result strong {
    display: block;
    margin-bottom: 5px;
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-graphic-result p {
    margin: 0;
    color: #e8f5f8;
    font-size: 0.87rem;
  }

  #rk-diameter-guide .rk-diameter-equation {
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
  }

  #rk-diameter-guide .rk-diameter-visually-hidden {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }

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

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

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

    #rk-diameter-guide .rk-diameter-chain-item::after {
      display: none;
    }

    #rk-diameter-guide .rk-diameter-calc-layout {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 820px) {
    #rk-diameter-guide {
      font-size: 17px;
    }

    #rk-diameter-guide .rk-diameter-hero {
      border-radius: 24px;
    }

    #rk-diameter-guide .rk-diameter-hero-metrics,
    #rk-diameter-guide .rk-diameter-grid-3,
    #rk-diameter-guide .rk-diameter-source-grid,
    #rk-diameter-guide .rk-diameter-author-facts {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-control-grid,
    #rk-diameter-guide .rk-diameter-formula,
    #rk-diameter-guide .rk-diameter-author-layout {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-author-side {
      max-width: 430px;
    }

    #rk-diameter-guide .rk-diameter-field-grid-3,
    #rk-diameter-guide .rk-diameter-hydraulic-grid {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 700px) {
    #rk-diameter-guide .rk-diameter-section,
    #rk-diameter-guide .rk-diameter-author {
      border-radius: 22px;
    }

    #rk-diameter-guide .rk-diameter-grid-2,
    #rk-diameter-guide .rk-diameter-grid-4,
    #rk-diameter-guide .rk-diameter-flow-grid,
    #rk-diameter-guide .rk-diameter-spec-grid,
    #rk-diameter-guide .rk-diameter-steps,
    #rk-diameter-guide .rk-diameter-mistakes,
    #rk-diameter-guide .rk-diameter-checklist,
    #rk-diameter-guide .rk-diameter-chain {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-field-grid,
    #rk-diameter-guide .rk-diameter-result-grid {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-table-row,
    #rk-diameter-guide .rk-diameter-diagnostic-table .rk-diameter-table-row {
      display: block;
      padding: 8px 0;
      border-top: 8px solid var(--rk-diameter-soft);
    }

    #rk-diameter-guide .rk-diameter-table-row:first-child {
      display: none;
    }

    #rk-diameter-guide .rk-diameter-table-row > div {
      display: grid;
      grid-template-columns: minmax(104px, 0.42fr) minmax(0, 1fr);
      gap: 10px;
      padding: 12px 15px;
      border: 0;
    }

    #rk-diameter-guide .rk-diameter-table-row > div::before {
      content: attr(data-label);
      color: var(--rk-diameter-navy);
      font-size: 0.76rem;
      font-weight: 900;
      line-height: 1.45;
    }

    #rk-diameter-guide .rk-diameter-table-label {
      background: #eef4f6;
    }

    #rk-diameter-guide .rk-diameter-loop-row {
      grid-template-columns: minmax(0, 1fr) minmax(100px, 0.6fr) auto;
    }
  }

  @media (max-width: 520px) {
    #rk-diameter-guide {
      font-size: 16px;
    }

    #rk-diameter-guide .rk-diameter-hero {
      padding: 34px 22px;
      border-radius: 20px;
    }

    #rk-diameter-guide .rk-diameter-hero-title {
      font-size: clamp(2.25rem, 12vw, 3.5rem);
      letter-spacing: -0.05em;
    }

    #rk-diameter-guide .rk-diameter-hero-lead {
      margin-top: 23px;
    }

    #rk-diameter-guide .rk-diameter-hero-tag {
      min-height: 38px;
      padding: 7px 12px;
      font-size: 0.75rem;
    }

    #rk-diameter-guide .rk-diameter-byline {
      display: grid;
      gap: 7px;
    }

    #rk-diameter-guide .rk-diameter-hero-metric {
      padding: 19px;
    }

    #rk-diameter-guide .rk-diameter-shortcuts {
      padding: 17px;
      border-radius: 18px;
    }

    #rk-diameter-guide .rk-diameter-shortcuts a {
      font-size: 0.72rem;
    }

    #rk-diameter-guide .rk-diameter-section,
    #rk-diameter-guide .rk-diameter-author {
      padding: 28px 19px;
    }

    #rk-diameter-guide .rk-diameter-answer,
    #rk-diameter-guide .rk-diameter-card,
    #rk-diameter-guide .rk-diameter-flow-step {
      padding: 20px;
    }

    #rk-diameter-guide .rk-diameter-tool-head,
    #rk-diameter-guide .rk-diameter-tool-body {
      padding: 22px 17px;
    }

    #rk-diameter-guide .rk-diameter-segmented {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-state-summary {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-state-dot {
      width: 44px;
      height: 44px;
    }

    #rk-diameter-guide .rk-diameter-step {
      padding: 66px 19px 19px;
    }

    #rk-diameter-guide .rk-diameter-step::before {
      top: 19px;
      left: 19px;
    }

    #rk-diameter-guide .rk-diameter-cta-button {
      width: 100%;
    }

    #rk-diameter-guide .rk-diameter-table-row > div {
      grid-template-columns: 1fr;
      gap: 4px;
    }

    #rk-diameter-guide .rk-diameter-loop-row,
    #rk-diameter-guide .rk-diameter-curve-row {
      grid-template-columns: 1fr;
      padding: 13px;
      border: 1px solid var(--rk-diameter-line);
      border-radius: 14px;
      background: #ffffff;
    }

    #rk-diameter-guide .rk-diameter-remove-loop {
      width: 100%;
    }

    #rk-diameter-guide .rk-diameter-chart-wrap svg {
      min-height: 260px;
    }

    #rk-diameter-guide .rk-diameter-break-row {
      grid-template-columns: 1fr auto;
    }

    #rk-diameter-guide .rk-diameter-break-track {
      grid-column: 1 / -1;
      grid-row: 2;
    }
  }

  @media print {
    #rk-diameter-guide .rk-diameter-shortcuts,
    #rk-diameter-guide .rk-diameter-control-grid {
      display: none !important;
    }

    #rk-diameter-guide .rk-diameter-section,
    #rk-diameter-guide .rk-diameter-author,
    #rk-diameter-guide .rk-diameter-hero {
      break-inside: avoid;
      box-shadow: none;
    }

    #rk-diameter-guide .rk-diameter-faq details {
      break-inside: avoid;
    }

    #rk-diameter-guide .rk-diameter-faq details:not([open]) .rk-diameter-faq-answer {
      display: block;
    }
  }

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

  #rk-diameter-guide .rk-diameter-field input.rk-diameter-range {
    width: 100%;
    min-height: 10px;
    height: 10px;
    padding: 0;
    border: 0;
    border-radius: 999px;
    background: #dce8ed;
    accent-color: var(--rk-diameter-orange);
    cursor: pointer;
  }

  #rk-diameter-guide .rk-diameter-field input.rk-diameter-range:focus {
    outline: 3px solid rgba(95, 222, 240, 0.34);
    outline-offset: 5px;
  }

  #rk-diameter-guide .rk-diameter-control-label {
    display: block;
    margin: 22px 0 10px;
    color: var(--rk-diameter-navy);
    font-size: 0.82rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-limit-line {
    stroke: #ad6f13;
    stroke-width: 2;
    stroke-dasharray: 7 6;
  }

  #rk-diameter-guide .rk-diameter-limit-label {
    fill: #8a5914;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 800;
  }

  #rk-diameter-guide .rk-diameter-current-guide {
    stroke: #8da0aa;
    stroke-width: 1.5;
    stroke-dasharray: 3 5;
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-card {
    border-color: #cbd9e1;
    background: #ffffff;
    color: #173246;
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-card h3 {
    color: #123247;
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-card p,
  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-card li {
    color: #3e5869;
  }

  #rk-diameter-guide .rk-diameter-section-dark .rk-diameter-card a {
    color: #087a9f;
  }

  #rk-diameter-guide button:focus-visible,
  #rk-diameter-guide a:focus-visible,
  #rk-diameter-guide summary:focus-visible {
    outline: 3px solid var(--rk-diameter-cyan);
    outline-offset: 3px;
  }

  @media (max-width: 520px) {
    #rk-diameter-guide .rk-diameter-chart-card {
      padding: 12px;
    }

    #rk-diameter-guide .rk-diameter-chart-wrap svg {
      min-height: 235px;
    }

    #rk-diameter-guide .rk-diameter-graphic-controls button {
      width: 100%;
    }
  }



  #rk-diameter-guide .rk-diameter-equation-box {
    margin: 20px 0;
    padding: clamp(20px, 3vw, 30px);
    border: 1px solid #add6dc;
    border-radius: 20px;
    background: linear-gradient(135deg, #f0fbfc 0%, #ffffff 100%);
    box-shadow: 0 12px 30px rgba(13, 73, 88, 0.08);
  }

  #rk-diameter-guide .rk-diameter-equation-label {
    display: block;
    margin-bottom: 8px;
    color: #087083;
    font-size: 0.72rem;
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
  }

  #rk-diameter-guide .rk-diameter-equation-main {
    margin-bottom: 10px;
    color: var(--rk-diameter-navy);
    font-size: clamp(1.18rem, 3vw, 1.78rem);
    font-weight: 950;
    line-height: 1.25;
    overflow-wrap: anywhere;
    font-variant-numeric: tabular-nums;
  }

  #rk-diameter-guide .rk-diameter-equation-box p {
    margin: 0;
    color: #3f5b69;
  }

  #rk-diameter-guide .rk-diameter-chart-bar {
    fill: var(--rk-diameter-teal);
    stroke: transparent;
    stroke-width: 0;
    transition: opacity 0.18s ease, fill 0.18s ease;
  }

  #rk-diameter-guide .rk-diameter-chart-bar:hover,
  #rk-diameter-guide .rk-diameter-chart-bar:focus {
    opacity: 0.78;
    outline: none;
  }

  #rk-diameter-guide .rk-diameter-chart-bar.is-selected {
    fill: var(--rk-diameter-orange);
  }

  #rk-diameter-guide .rk-diameter-chart-bar.is-over {
    fill: var(--rk-diameter-red);
  }

  #rk-diameter-guide .rk-diameter-chart-bar.is-selected.is-over {
    fill: var(--rk-diameter-red);
    stroke: var(--rk-diameter-orange);
    stroke-width: 4;
  }

  #rk-diameter-guide .rk-diameter-chart-target-line {
    stroke: #9b6512;
    stroke-width: 2;
    stroke-dasharray: 8 6;
  }

  #rk-diameter-guide .rk-diameter-chart-target-label {
    fill: #81540e;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-chart-value {
    fill: #294b5c;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-chart-axis-title {
    fill: #476474;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 12px;
    font-weight: 800;
  }

  #rk-diameter-guide .rk-diameter-legend .is-danger i {
    background: var(--rk-diameter-red);
  }

  @media (max-width: 620px) {
    #rk-diameter-guide .rk-diameter-equation-main {
      font-size: 1.08rem;
    }

    #rk-diameter-guide .rk-diameter-chart-value,
    #rk-diameter-guide .rk-diameter-chart-target-label,
    #rk-diameter-guide .rk-diameter-chart-axis-title {
      font-size: 10px;
    }
  }



  #rk-diameter-guide .rk-diameter-circuit-editor {
    display: grid;
    gap: 11px;
    margin: 22px 0 12px;
  }

  #rk-diameter-guide .rk-diameter-circuit-row {
    display: grid;
    grid-template-columns: minmax(135px, 1.2fr) minmax(105px, 0.8fr) minmax(135px, 0.9fr) minmax(112px, 0.7fr) 42px;
    gap: 10px;
    align-items: end;
    padding: 12px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 15px;
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-circuit-cell label,
  #rk-diameter-guide .rk-diameter-circuit-flow span {
    display: block;
    margin-bottom: 6px;
    color: #496674;
    font-size: 0.72rem;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-circuit-cell input {
    width: 100%;
    min-height: 44px;
    margin: 0;
    padding: 9px 10px;
    border: 1px solid #b9ccd5;
    border-radius: 10px;
    background: #ffffff;
    color: var(--rk-diameter-navy);
    font: inherit;
    font-weight: 750;
    line-height: 1.25;
  }

  #rk-diameter-guide .rk-diameter-circuit-cell input:focus {
    border-color: var(--rk-diameter-teal);
    outline: 3px solid rgba(15, 137, 151, 0.18);
  }

  #rk-diameter-guide .rk-diameter-circuit-flow {
    min-height: 44px;
    padding: 7px 9px;
    border-radius: 10px;
    background: #eef8fa;
  }

  #rk-diameter-guide .rk-diameter-circuit-flow span {
    margin-bottom: 2px;
  }

  #rk-diameter-guide .rk-diameter-circuit-flow strong {
    display: block;
    color: var(--rk-diameter-navy);
    font-size: 0.94rem;
    font-variant-numeric: tabular-nums;
  }

  #rk-diameter-guide .rk-diameter-add-loop:disabled {
    cursor: not-allowed;
    opacity: 0.56;
  }

  #rk-diameter-guide .rk-diameter-chart-common {
    fill: #80cbd3;
  }

  #rk-diameter-guide .rk-diameter-chart-branch {
    fill: var(--rk-diameter-teal);
  }

  #rk-diameter-guide .rk-diameter-chart-critical-outline {
    fill: none;
    stroke: var(--rk-diameter-orange);
    stroke-width: 4;
  }

  #rk-diameter-guide .rk-diameter-chart-grid {
    stroke: #dbe5e9;
    stroke-width: 1;
  }

  #rk-diameter-guide .rk-diameter-chart-tick,
  #rk-diameter-guide .rk-diameter-chart-name,
  #rk-diameter-guide .rk-diameter-chart-index,
  #rk-diameter-guide .rk-diameter-chart-value,
  #rk-diameter-guide .rk-diameter-chart-axis-title {
    fill: #3f5d6c;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 800;
  }

  #rk-diameter-guide .rk-diameter-chart-value {
    fill: var(--rk-diameter-navy);
    font-size: 12px;
    font-weight: 950;
  }

  #rk-diameter-guide .rk-diameter-chart-index {
    fill: #6e8490;
    font-size: 9px;
  }

  #rk-diameter-guide .rk-diameter-legend .is-common i {
    background: #80cbd3;
  }

  #rk-diameter-guide .rk-diameter-legend .is-pump i {
    border: 3px solid var(--rk-diameter-orange);
    background: transparent;
  }

  #rk-diameter-guide .rk-diameter-state-controls {
    margin-bottom: 18px;
  }

  @media (max-width: 900px) {
    #rk-diameter-guide .rk-diameter-circuit-row {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    #rk-diameter-guide .rk-diameter-circuit-flow {
      align-self: end;
    }

    #rk-diameter-guide .rk-diameter-remove-loop {
      width: 100%;
      grid-column: 1 / -1;
    }
  }

  @media (max-width: 560px) {
    #rk-diameter-guide .rk-diameter-circuit-row {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-chart-tick,
    #rk-diameter-guide .rk-diameter-chart-name,
    #rk-diameter-guide .rk-diameter-chart-value,
    #rk-diameter-guide .rk-diameter-chart-axis-title {
      font-size: 9px;
    }
  }



  #rk-diameter-guide .rk-diameter-segmented button[aria-selected="true"] {
    border-color: var(--rk-diameter-navy);
    background: var(--rk-diameter-navy);
    color: #ffffff;
    box-shadow: 0 8px 18px rgba(18, 50, 71, 0.18);
  }

  #rk-diameter-guide .rk-diameter-field-grid-single {
    grid-template-columns: minmax(0, 1fr);
  }

  #rk-diameter-guide .rk-diameter-calc-summary {
    margin: 22px 0;
    padding: 18px;
    border: 1px solid #b9e3e8;
    border-radius: 18px;
    background: #f0fbfc;
  }

  #rk-diameter-guide .rk-diameter-calc-summary .rk-diameter-result-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr));
    margin-bottom: 13px;
  }

  #rk-diameter-guide .rk-diameter-calc-summary .rk-diameter-result {
    background: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-calc-summary .rk-diameter-result strong {
    font-size: clamp(1.05rem, 2.1vw, 1.42rem);
  }

  #rk-diameter-guide .rk-diameter-calc-summary .rk-diameter-equation {
    margin: 0;
    color: #365665;
    font-size: 0.78rem;
    font-weight: 800;
  }

  #rk-diameter-guide .rk-diameter-pipe-results {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 14px;
    margin: 20px 0;
  }

  #rk-diameter-guide .rk-diameter-pipe-result {
    min-width: 0;
    padding: 19px;
    border: 1px solid var(--rk-diameter-line);
    border-radius: 18px;
    background: #ffffff;
    transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
  }

  #rk-diameter-guide .rk-diameter-pipe-result.is-selected {
    border-color: var(--rk-diameter-orange);
    box-shadow: 0 12px 28px rgba(245, 112, 32, 0.13);
    transform: translateY(-2px);
  }

  #rk-diameter-guide .rk-diameter-pipe-result-head {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 7px 14px;
    align-items: baseline;
    margin-bottom: 13px;
    color: var(--rk-diameter-navy);
  }

  #rk-diameter-guide .rk-diameter-pipe-result-head span {
    font-size: 1.05rem;
    font-weight: 950;
  }

  #rk-diameter-guide .rk-diameter-pipe-result-head strong {
    color: #54707e;
    font-size: 0.74rem;
  }

  #rk-diameter-guide .rk-diameter-pipe-metrics {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
  }

  #rk-diameter-guide .rk-diameter-pipe-metrics > div {
    min-width: 0;
    padding: 11px;
    border-radius: 11px;
    background: #f2f7f8;
  }

  #rk-diameter-guide .rk-diameter-pipe-metrics span,
  #rk-diameter-guide .rk-diameter-pipe-metrics strong {
    display: block;
  }

  #rk-diameter-guide .rk-diameter-pipe-metrics span {
    color: #5b7380;
    font-size: 0.65rem;
    font-weight: 800;
    line-height: 1.35;
  }

  #rk-diameter-guide .rk-diameter-pipe-metrics strong {
    margin-top: 3px;
    color: var(--rk-diameter-navy);
    font-size: 0.87rem;
    font-variant-numeric: tabular-nums;
    line-height: 1.3;
  }

  #rk-diameter-guide .rk-diameter-pipe-status {
    margin: 12px 0;
    padding: 10px 12px;
    border-radius: 10px;
    font-size: 0.72rem;
    font-weight: 800;
    line-height: 1.45;
  }

  #rk-diameter-guide .rk-diameter-pipe-status.is-within {
    background: #eaf8f1;
    color: #245e49;
  }

  #rk-diameter-guide .rk-diameter-pipe-status.is-over {
    background: #fff2e8;
    color: #7b421d;
  }

  #rk-diameter-guide .rk-diameter-pipe-result button {
    width: 100%;
    min-height: 44px;
    padding: 9px 12px;
    border: 1px solid #bcd0d8;
    border-radius: 11px;
    background: #ffffff;
    color: var(--rk-diameter-navy);
    font: inherit;
    font-size: 0.74rem;
    font-weight: 850;
    line-height: 1.3;
    cursor: pointer;
  }

  #rk-diameter-guide .rk-diameter-pipe-result button[aria-pressed="true"] {
    border-color: var(--rk-diameter-navy);
    background: var(--rk-diameter-navy);
    color: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-series-controls {
    display: flex;
    flex-wrap: wrap;
    gap: 7px 13px;
    margin: 0 0 12px;
  }

  #rk-diameter-guide .rk-diameter-series-controls button {
    display: inline-flex;
    min-height: 40px;
    align-items: center;
    gap: 7px;
    padding: 7px 10px;
    border: 1px solid transparent;
    border-radius: 9px;
    background: transparent;
    color: #425f6e;
    font: inherit;
    font-size: 0.72rem;
    font-weight: 850;
    cursor: pointer;
  }

  #rk-diameter-guide .rk-diameter-series-controls button[aria-pressed="false"] {
    opacity: 0.45;
    text-decoration: line-through;
  }

  #rk-diameter-guide .rk-diameter-series-controls i {
    display: inline-block;
    width: 24px;
    height: 4px;
    border-radius: 999px;
  }

  #rk-diameter-guide .rk-diameter-series-controls .is-p16,
  #rk-diameter-guide .rk-diameter-chart-curve.is-p16,
  #rk-diameter-guide .rk-diameter-chart-point.is-p16 {
    stroke: #e96a28;
    background: #e96a28;
    fill: #e96a28;
  }

  #rk-diameter-guide .rk-diameter-series-controls .is-p17,
  #rk-diameter-guide .rk-diameter-chart-curve.is-p17,
  #rk-diameter-guide .rk-diameter-chart-point.is-p17 {
    stroke: #087f91;
    background: #087f91;
    fill: #087f91;
  }

  #rk-diameter-guide .rk-diameter-series-controls .is-p20,
  #rk-diameter-guide .rk-diameter-chart-curve.is-p20,
  #rk-diameter-guide .rk-diameter-chart-point.is-p20 {
    stroke: #315aa6;
    background: #315aa6;
    fill: #315aa6;
  }

  #rk-diameter-guide .rk-diameter-series-controls .is-custom,
  #rk-diameter-guide .rk-diameter-chart-curve.is-custom,
  #rk-diameter-guide .rk-diameter-chart-point.is-custom {
    stroke: #7a4ea3;
    background: #7a4ea3;
    fill: #7a4ea3;
  }

  #rk-diameter-guide .rk-diameter-chart-grid line {
    stroke: #dbe5e9;
    stroke-width: 1;
  }

  #rk-diameter-guide .rk-diameter-chart-grid text,
  #rk-diameter-guide .rk-diameter-chart-axis-title,
  #rk-diameter-guide .rk-diameter-chart-criterion-label {
    fill: #506d7b;
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 11px;
    font-weight: 750;
  }

  #rk-diameter-guide .rk-diameter-chart-axis-title {
    fill: var(--rk-diameter-navy);
    font-size: 12px;
    font-weight: 900;
  }

  #rk-diameter-guide .rk-diameter-chart-frame {
    fill: none;
    stroke: #91a8b2;
    stroke-width: 1.2;
  }

  #rk-diameter-guide .rk-diameter-chart-curve {
    stroke-width: 2.4;
    stroke-linecap: round;
    stroke-linejoin: round;
  }

  #rk-diameter-guide .rk-diameter-chart-curve.is-selected {
    stroke-width: 4.5;
  }

  #rk-diameter-guide .rk-diameter-chart-guide {
    stroke: var(--rk-diameter-navy);
    stroke-width: 1.5;
    stroke-dasharray: 6 5;
  }

  #rk-diameter-guide .rk-diameter-chart-point {
    stroke-width: 2;
    stroke: #ffffff;
  }

  #rk-diameter-guide .rk-diameter-chart-point.is-selected {
    stroke: var(--rk-diameter-navy);
    stroke-width: 3;
  }

  #rk-diameter-guide .rk-diameter-chart-criterion {
    stroke: #ac5a24;
    stroke-width: 1.5;
    stroke-dasharray: 3 4;
  }

  #rk-diameter-guide .rk-diameter-chart-criterion-label {
    fill: #7b4a29;
  }

  #rk-diameter-guide .rk-diameter-chart-reading {
    margin-top: 12px;
    padding: 13px 15px;
    border-left: 4px solid var(--rk-diameter-cyan);
    border-radius: 7px 12px 12px 7px;
    background: #edf8fa;
    color: #345463;
    font-size: 0.75rem;
    line-height: 1.5;
  }

  #rk-diameter-guide .rk-diameter-chart-reading strong {
    color: var(--rk-diameter-navy);
  }

  @media (max-width: 900px) {
    #rk-diameter-guide .rk-diameter-calc-summary .rk-diameter-result-grid {
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }
  }

  @media (max-width: 700px) {
    #rk-diameter-guide .rk-diameter-pipe-results {
      grid-template-columns: 1fr;
    }
  }

  @media (max-width: 460px) {
    #rk-diameter-guide .rk-diameter-calc-summary .rk-diameter-result-grid,
    #rk-diameter-guide .rk-diameter-pipe-metrics {
      grid-template-columns: 1fr;
    }

    #rk-diameter-guide .rk-diameter-chart-grid text,
    #rk-diameter-guide .rk-diameter-chart-axis-title {
      font-size: 10px;
    }
  }

</style>

<article id="rk-diameter-guide" aria-labelledby="rk-diameter-visual-title">
  <div class="rk-diameter-shell">
    <header class="rk-diameter-hero">
      <div class="rk-diameter-hero-inner">
        <span class="rk-diameter-kicker">Od oznaczenia rury do punktu pracy</span>
        <div class="rk-diameter-hero-title" id="rk-diameter-visual-title">16, 17 czy 20 mm? <span>Liczy się wnętrze</span></div>
        <p class="rk-diameter-hero-lead">Średnica zewnętrzna nie mówi jeszcze, jak zachowa się pętla. Przepływ wynika z przypisanej mocy i projektowego ΔT, a prędkość oraz strata ciśnienia zależą przede wszystkim od rzeczywistej średnicy wewnętrznej, długości i właściwości czynnika.</p>

        <div class="rk-diameter-hero-tags" aria-label="Zakres poradnika">
          <span class="rk-diameter-hero-tag">rura 16×2</span>
          <span class="rk-diameter-hero-tag">rura 17×2</span>
          <span class="rk-diameter-hero-tag">rura 20×2</span>
          <span class="rk-diameter-hero-tag">przepływ i prędkość</span>
          <span class="rk-diameter-hero-tag">spadek ciśnienia</span>
        </div>

        <div class="rk-diameter-byline">
          <span>Autor: <strong>Robert Kucharski</strong></span>
          <span>Czas czytania: około 38 minut</span>
          <span>Aktualizacja techniczna: 11 września 2026 r.</span>
        </div>

        <div class="rk-diameter-hero-metrics" aria-label="Trzy zasady doboru średnicy rury">
          <div class="rk-diameter-hero-metric">
            <b>Przepływ z mocy i ΔT</b>
            <span>Rodzaj źródła sam nie wyznacza strumienia pojedynczej pętli ani jej średnicy.</span>
          </div>
          <div class="rk-diameter-hero-metric">
            <b>Hydraulika z wnętrza rury</b>
            <span>O prędkości i oporze decyduje średnica wewnętrzna, nie tylko liczba nadrukowana na rurze.</span>
          </div>
          <div class="rk-diameter-hero-metric">
            <b>Wybór z całego układu</b>
            <span>Pętla, rozdzielacz, magistrala i pompa muszą pracować w jednym obliczonym punkcie Q–H.</span>
          </div>
        </div>
      </div>
    </header>

    <nav class="rk-diameter-shortcuts" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-diameter-shortcuts-label">Na skróty</span>
      <a href="#rk-diameter-answer">Szybka odpowiedź</a>
      <a href="#rk-diameter-notation">Co znaczy 16×2?</a>
      <a href="#rk-diameter-influence">Wpływ średnicy</a>
      <a href="#rk-diameter-feeders">Pętla a magistrala</a>
      <a href="#rk-diameter-data">Dane projektowe</a>
      <a href="#rk-diameter-flow">Przepływ</a>
      <a href="#rk-diameter-calculator">Kalkulator i wykres</a>
      <a href="#rk-diameter-results">Interpretacja</a>
      <a href="#rk-diameter-graphic">Grafika zależności</a>
      <a href="#rk-diameter-comparison">Porównanie rur</a>
      <a href="#rk-diameter-materials">Materiały</a>
      <a href="#rk-diameter-length">Długość pętli</a>
      <a href="#rk-diameter-heat-pump">Pompa ciepła</a>
      <a href="#rk-diameter-pump">Pompa obiegowa</a>
      <a href="#rk-diameter-balancing">Równoważenie</a>
      <a href="#rk-diameter-installation">Wykonanie</a>
      <a href="#rk-diameter-example">Przykład</a>
      <a href="#rk-diameter-errors">Błędy</a>
      <a href="#rk-diameter-checklist">Lista kontrolna</a>
      <a href="#rk-diameter-conclusions">Wnioski</a>
      <a href="#rk-diameter-references">Źródła</a>
      <a href="#rk-diameter-faq">FAQ</a>
      <a href="#rk-diameter-author">Autor</a>
    </nav>

    <section class="rk-diameter-section" id="rk-diameter-answer">
      <span class="rk-diameter-eyebrow">Odpowiedź w 30 sekund</span>
      <h2 class="rk-diameter-section-title">Jaka średnica rury do ogrzewania podłogowego?</h2>
      <div class="rk-diameter-answer">
        <span class="rk-diameter-answer-label">Najkrótsza poprawna odpowiedź</span>
        <p><strong>Nie ma jednej najlepszej średnicy dla każdego pomieszczenia i źródła. Rura 16×2 mm jest częstym rozwiązaniem w pętlach domowej podłogówki, ale 17×2 lub 20×2 mm mogą być uzasadnione, gdy obliczony przepływ i długość powodują zbyt duży opór. Alternatywą dla zwiększenia średnicy bywa podział powierzchni na większą liczbę krótszych pętli.</strong></p>
      </div>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>16×2 mm</h3><p>Przy ściance 2 mm ma nominalnie około 12 mm średnicy wewnętrznej. Jest elastyczna i często wystarcza, ale każdą pętlę trzeba policzyć.</p></article>
        <article class="rk-diameter-card"><h3>17×2 mm</h3><p>Nominalne 13 mm wewnątrz daje większy przekrój niż 16×2. Efekt hydrauliczny zależy od faktycznych wymiarów konkretnego produktu.</p></article>
        <article class="rk-diameter-card"><h3>20×2 mm</h3><p>Nominalne 16 mm wewnątrz wyraźnie ogranicza prędkość i opór przy tym samym przepływie, lecz zwiększa promień gięcia, zład i koszt systemu.</p></article>
      </div>

      <p>Średnicy nie dobiera się do nazwy pomieszczenia. Najpierw trzeba znać moc wynikającą z <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowego obciążenia cieplnego OZC</a>, podział powierzchni na pętle, projektowe ΔT i rzeczywiste trasy. Dopiero wtedy porównuje się opory.</p>
      <div class="rk-diameter-callout"><strong>Praktyka autora, nie zapis normy:</strong> dla rur 16×2 mm w projektach przyjmowany jest zwykle limit długości do 100 m razem z podejściami oraz dążenie do spadku ciśnienia pętli około 15–20 kPa. Są to kryteria projektowe, które nadal wymagają obliczenia konkretnej gałęzi.</div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-notation">
      <span class="rk-diameter-eyebrow">Najważniejsza liczba jest po drugiej stronie ścianki</span>
      <h2 class="rk-diameter-section-title">Co oznacza zapis 16×2, 17×2 i 20×2 mm?</h2>
      <p class="rk-diameter-lead">Pierwsza liczba oznacza średnicę zewnętrzną, a druga nominalną grubość ścianki. W uproszczeniu średnicę wewnętrzną otrzymuje się przez odjęcie podwójnej grubości ścianki.</p>

      <div class="rk-diameter-equation-box">
        <span class="rk-diameter-equation-label">Zależność geometryczna</span>
        <div class="rk-diameter-equation-main">d<sub>wew.</sub> = d<sub>zew.</sub> − 2 × grubość ścianki</div>
        <p>Dla rury 16×2 mm: 16 − 2 × 2 = 12 mm. Obliczenie jest nominalne — rzeczywiste wymiary i tolerancje należy odczytać z dokumentacji wybranego produktu.</p>
      </div>

      <div class="rk-diameter-compare-table" role="table" aria-label="Nominalna geometria rur 16x2, 17x2 i 20x2">
        <div class="rk-diameter-table-row rk-diameter-table-head" role="row"><div role="columnheader">Oznaczenie</div><div role="columnheader">Nominalne wnętrze i przekrój</div><div role="columnheader">Teoretyczna pojemność</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Oznaczenie" role="cell">16×2 mm</div><div data-label="Wnętrze i przekrój" role="cell">12 mm; około 113,1 mm²</div><div data-label="Pojemność" role="cell">około 0,113 l/m</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Oznaczenie" role="cell">17×2 mm</div><div data-label="Wnętrze i przekrój" role="cell">13 mm; około 132,7 mm²</div><div data-label="Pojemność" role="cell">około 0,133 l/m</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Oznaczenie" role="cell">20×2 mm</div><div data-label="Wnętrze i przekrój" role="cell">16 mm; około 201,1 mm²</div><div data-label="Pojemność" role="cell">około 0,201 l/m</div></div>
      </div>

      <p>Przekrój nominalnej rury 20×2 jest około 78% większy niż 16×2. Nie oznacza to jednak 78% większej mocy grzewczej. Zwiększa się przede wszystkim pole przepływu i objętość wody. Osobny poradnik pokazuje, <a href="https://projekt-ogrzewania.pl/ile-wody-miesci-sie-w-1-metrze-rury-pex-pert-16/">ile wody mieści się w metrze rury PEX i PE-RT 16</a>.</p>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-influence">
      <span class="rk-diameter-eyebrow">Oddzielmy stronę cieplną od hydraulicznej</span>
      <h2 class="rk-diameter-section-title">Na co naprawdę wpływa średnica rury podłogówki?</h2>
      <p class="rk-diameter-lead">Średnica jest ważna, ale nie zastępuje obliczenia mocy podłogi. Jej najsilniejszy bezpośredni wpływ dotyczy transportu wody, a nie zapotrzebowania budynku.</p>

      <div class="rk-diameter-grid-4">
        <article class="rk-diameter-card"><span class="rk-diameter-card-number">1</span><h3>Prędkość wody</h3><p>Przy tym samym przepływie mniejszy przekrój powoduje większą prędkość czynnika.</p></article>
        <article class="rk-diameter-card"><span class="rk-diameter-card-number">2</span><h3>Spadek ciśnienia</h3><p>Zmiana średnicy wewnętrznej silnie zmienia jednostkowy opór i wymaganą różnicę ciśnień.</p></article>
        <article class="rk-diameter-card"><span class="rk-diameter-card-number">3</span><h3>Pojemność wodna</h3><p>Większy przekrój oznacza większy zład, ale nie tworzy automatycznie funkcjonalnego bufora.</p></article>
        <article class="rk-diameter-card"><span class="rk-diameter-card-number">4</span><h3>Wykonanie</h3><p>Średnica, materiał i konstrukcja wpływają na promień gięcia, mocowanie oraz dostępne elementy systemu.</p></article>
      </div>

      <div class="rk-diameter-grid-2">
        <article class="rk-diameter-card"><h3>Czego średnica nie ustala samodzielnie?</h3><p>Nie wyznacza strat ciepła budynku, mocy potrzebnej w pomieszczeniu, dopuszczalnej temperatury posadzki ani przepływu wynikającego z bilansu energii.</p></article>
        <article class="rk-diameter-card"><h3>Czy większa rura daje więcej ciepła?</h3><p>W modelu emisji znaczenie może mieć geometria całego systemu, lecz sama zamiana średnicy bez ponownego sprawdzenia rozstawu, warstw i temperatur nie jest gwarancją większej mocy.</p></article>
      </div>

      <p>Pełny mechanizm oddawania energii opisuje poradnik <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">jak działa ogrzewanie podłogowe</a>. Informacje o liczbie metrów wynikającej z rozstawu znajdują się w materiale <a href="https://projekt-ogrzewania.pl/ile-rury-na-m%c2%b2-ogrzewania-podlogowego/">ile rury potrzeba na m² podłogówki</a>.</p>
    </section>

    <section class="rk-diameter-section rk-diameter-section-dark" id="rk-diameter-feeders">
      <span class="rk-diameter-eyebrow">Dwie różne funkcje, dwa różne obliczenia</span>
      <h2 class="rk-diameter-section-title">Średnica pętli a średnica rury zasilającej rozdzielacz</h2>
      <p class="rk-diameter-lead">Pojedyncza pętla przenosi przepływ przypisany do części pomieszczenia. Magistrala rozdzielacza przenosi sumę przepływów wielu równoległych pętli. Nie wolno dobierać obu przewodów tą samą regułą.</p>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Pętla grzewcza</h3><p>Najczęściej rozpatruje się 16×2, 17×2 lub 20×2 mm. Obliczenie dotyczy jej własnej mocy, przepływu, długości i oporu.</p></article>
        <article class="rk-diameter-card"><h3>Przewód do rozdzielacza</h3><p>Może wymagać średnicy 25, 32 lub większej, ponieważ transportuje sumaryczny strumień całej grupy pętli.</p></article>
        <article class="rk-diameter-card"><h3>Droga krytyczna</h3><p>Pompa pokonuje opory elementów wspólnych oraz najbardziej wymagającej równoległej gałęzi, a nie sumę oporów wszystkich pętli.</p></article>
      </div>

      <p>Oddzielne narzędzie służy do obliczania <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">średnicy rury zasilającej rozdzielacz</a>. Zależność pomiędzy pętlą, magistralą i źródłem rozwija artykuł <a href="https://projekt-ogrzewania.pl/obieg-grzewczy-w-wodnym-ogrzewaniu-podlogowym/">obieg grzewczy w wodnym ogrzewaniu podłogowym</a>.</p>
      <div class="rk-diameter-callout"><strong>Najczęstsza pomyłka:</strong> wymaganie dużego przepływu przez pompę ciepła dotyczy całego urządzenia i instalacji. Nie oznacza automatycznie, że taki sam strumień ma przepłynąć przez jedną pętlę podłogówki.</div>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-data">
      <span class="rk-diameter-eyebrow">Średnicę wybieramy dopiero po zebraniu danych</span>
      <h2 class="rk-diameter-section-title">Jakie dane są potrzebne do doboru rury?</h2>
      <p class="rk-diameter-lead">Oznaczenie źródła i powierzchnia domu nie wystarczą. Obliczenie musi dotyczyć konkretnej pętli oraz jej miejsca w całej sieci hydraulicznej.</p>

      <div class="rk-diameter-spec-grid">
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">1</span><div><strong>Moc pomieszczenia</strong><span>Wynika z OZC wykonanego dla projektowych warunków zewnętrznych i wewnętrznych.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">2</span><div><strong>Powierzchnia czynna</strong><span>Określa, ile energii musi przekazać każdy metr podłogi i jak podzielić pole na pętle.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">3</span><div><strong>Moc pojedynczej pętli</strong><span>Przepływu nie oblicza się z mocy całego domu, jeżeli analizowana jest tylko jedna gałąź.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">4</span><div><strong>Projektowe ΔT</strong><span>Różnica temperatur zasilania i powrotu wiąże przekazywaną moc z wymaganym strumieniem wody.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">5</span><div><strong>Rzeczywista długość</strong><span>Trasa obejmuje rurę w polu oraz oba podejścia pomiędzy rozdzielaczem i ogrzewaną powierzchnią.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">6</span><div><strong>Średnica wewnętrzna</strong><span>Trzeba użyć danych konkretnej rury, a nie tylko przybliżonego oznaczenia zewnętrznego.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">7</span><div><strong>Czynnik i temperatura</strong><span>Gęstość oraz lepkość wody lub mieszaniny wpływają na prędkość, liczbę Reynoldsa i opór.</span></div></div>
        <div class="rk-diameter-spec"><span class="rk-diameter-spec-mark">8</span><div><strong>Armatura i pompa</strong><span>Zawory, rozdzielacz i przewody wspólne zużywają część dostępnej różnicy ciśnień.</span></div></div>
      </div>

      <p>Podstawę stanowi <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">obliczenie strat ciepła budynku</a>. Dopiero później projektuje się powierzchnię, rozstaw, podział oraz <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/">rozmieszczenie pętli grzewczych</a>.</p>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-flow">
      <span class="rk-diameter-eyebrow">Najpierw bilans energii, później hydraulika</span>
      <h2 class="rk-diameter-section-title">Jak moc i ΔT wyznaczają przepływ pętli?</h2>
      <p class="rk-diameter-lead">Dla tej samej mocy mniejsze projektowe ΔT wymaga większego przepływu. Średnica nie pojawia się w pierwszym bilansie — służy dopiero do sprawdzenia, czy wymagany strumień można przetransportować przy akceptowalnych warunkach hydraulicznych.</p>

      <div class="rk-diameter-equation-box">
        <span class="rk-diameter-equation-label">Praktyczne przybliżenie dla wody</span>
        <div class="rk-diameter-equation-main">V̇ [l/h] ≈ 0,86 × P [W] ÷ ΔT [K]</div>
        <p>Pętla o mocy 1000 W przy ΔT = 5 K wymaga około 172 l/h, czyli 2,87 l/min. Przy ΔT = 7 K ten sam bilans daje około 123 l/h.</p>
      </div>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Moc jest przypisana do pętli</h3><p>Jeżeli jedno pomieszczenie ma kilka pętli, moc i przepływ trzeba rozdzielić zgodnie z ich powierzchniami oraz projektem.</p></article>
        <article class="rk-diameter-card"><h3>ΔT jest założeniem projektowym</h3><p>Wartość nie powinna być automatycznie pobierana wyłącznie z etykiety „pompa ciepła” albo „kocioł”.</p></article>
        <article class="rk-diameter-card"><h3>Medium ma znaczenie</h3><p>Współczynnik 0,86 jest przybliżeniem dla wody. Dla glikolu należy zastosować właściwe parametry mieszaniny.</p></article>
      </div>

      <p>Znaczenie parametru rozwija poradnik o <a href="https://projekt-ogrzewania.pl/spadek-temperatury-%ce%b4t-roznica-miedzy-temperatura-zasilania-a-powrotu/">ΔT między zasilaniem i powrotem</a>. Wartość obserwowana podczas chwilowej pracy nie musi być identyczna z różnicą przyjętą do obliczeń projektowych.</p>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-calculator">
      <span class="rk-diameter-eyebrow">Kalkulator hydrauliczny i interaktywny wykres</span>
      <h2 class="rk-diameter-section-title">Porównaj rurę 16×2, 17×2 i 20×2 mm</h2>
      <p class="rk-diameter-lead">Wprowadź dane jednej pętli. Kalkulator wyznaczy przepływ, prędkość, pojemność i modelową stratę ciśnienia dla trzech nominalnych rur oraz własnej średnicy wewnętrznej.</p>

      <div class="rk-diameter-tool" id="rk-diameter-calculator-tool">
        <div class="rk-diameter-tool-head">
          <span class="rk-diameter-eyebrow">Jedne wymagania, cztery przekroje</span>
          <h3>Kalkulator średnicy rury ogrzewania podłogowego</h3>
          <p>Obliczenie wykorzystuje równanie Darcy’ego–Weisbacha, modelowy współczynnik tarcia oraz właściwości wody zależne od temperatury. Dane konkretnego producenta mają pierwszeństwo.</p>
        </div>

        <div class="rk-diameter-tool-body">
          <div class="rk-diameter-segmented" role="tablist" aria-label="Sposób podania przepływu">
            <button type="button" role="tab" id="rk-diameter-tab-power" data-rk-diameter-mode="power" aria-selected="true" aria-controls="rk-diameter-panel-power">Z mocy i ΔT</button>
            <button type="button" role="tab" id="rk-diameter-tab-flow" data-rk-diameter-mode="flow" aria-selected="false" aria-controls="rk-diameter-panel-flow">Podaj przepływ</button>
          </div>

          <div class="rk-diameter-panel" id="rk-diameter-panel-power" role="tabpanel" aria-labelledby="rk-diameter-tab-power">
            <div class="rk-diameter-field-grid">
              <div class="rk-diameter-field">
                <label for="rk-diameter-power">Moc przypisana do pętli</label>
                <input id="rk-diameter-power" type="number" min="10" max="10000" step="10" value="1000" inputmode="decimal">
                <span class="rk-diameter-field-help">Wartość w watach, nie moc całego domu.</span>
              </div>
              <div class="rk-diameter-field">
                <label for="rk-diameter-delta">Projektowe ΔT wody</label>
                <input id="rk-diameter-delta" type="number" min="1" max="20" step="0.5" value="5" inputmode="decimal">
                <span class="rk-diameter-field-help">Różnica zasilanie–powrót w kelwinach.</span>
              </div>
            </div>
          </div>

          <div class="rk-diameter-panel" id="rk-diameter-panel-flow" role="tabpanel" aria-labelledby="rk-diameter-tab-flow" hidden="">
            <div class="rk-diameter-field-grid rk-diameter-field-grid-single">
              <div class="rk-diameter-field">
                <label for="rk-diameter-direct-flow">Znany przepływ pętli</label>
                <input id="rk-diameter-direct-flow" type="number" min="0.05" max="15" step="0.05" value="2.87" inputmode="decimal">
                <span class="rk-diameter-field-help">Wartość w l/min wynikająca z projektu lub pomiaru.</span>
              </div>
            </div>
          </div>

          <div class="rk-diameter-field-grid rk-diameter-field-grid-3">
            <div class="rk-diameter-field">
              <label for="rk-diameter-loop-length">Długość pętli</label>
              <input id="rk-diameter-loop-length" type="number" min="1" max="300" step="1" value="80" inputmode="decimal">
              <span class="rk-diameter-field-help">Metry razem z podejściami.</span>
            </div>
            <div class="rk-diameter-field">
              <label for="rk-diameter-water-temp">Średnia temperatura wody</label>
              <input id="rk-diameter-water-temp" type="number" min="5" max="90" step="1" value="35" inputmode="decimal">
              <span class="rk-diameter-field-help">Do oszacowania gęstości i lepkości.</span>
            </div>
            <div class="rk-diameter-field">
              <label for="rk-diameter-extra-loss">Dodatkowe straty drogi</label>
              <input id="rk-diameter-extra-loss" type="number" min="0" max="100" step="0.5" value="4" inputmode="decimal">
              <span class="rk-diameter-field-help">Rozdzielacz i armatura w kPa.</span>
            </div>
            <div class="rk-diameter-field">
              <label for="rk-diameter-custom-id">Własna średnica wewnętrzna</label>
              <input id="rk-diameter-custom-id" type="number" min="5" max="40" step="0.1" value="14" inputmode="decimal">
              <span class="rk-diameter-field-help">Do porównania konkretnego produktu.</span>
            </div>
            <div class="rk-diameter-field">
              <label for="rk-diameter-loss-limit">Przyjęty limit całej drogi</label>
              <input id="rk-diameter-loss-limit" type="number" min="1" max="150" step="1" value="20" inputmode="decimal">
              <span class="rk-diameter-field-help">Kryterium użytkownika w kPa, nie „limit normowy”.</span>
            </div>
          </div>

          <div class="rk-diameter-calc-summary" aria-live="polite">
            <div class="rk-diameter-result-grid">
              <div class="rk-diameter-result"><span>Przepływ pętli</span><strong id="rk-diameter-result-flow-hour">172 l/h</strong></div>
              <div class="rk-diameter-result"><span>Przepływ minutowy</span><strong id="rk-diameter-result-flow-minute">2,87 l/min</strong></div>
              <div class="rk-diameter-result"><span>Gęstość wody</span><strong id="rk-diameter-result-density">994,1 kg/m³</strong></div>
              <div class="rk-diameter-result"><span>Lepkość dynamiczna</span><strong id="rk-diameter-result-viscosity">0,718 mPa·s</strong></div>
            </div>
            <p class="rk-diameter-equation" id="rk-diameter-live-equation">0,86 × 1000 W ÷ 5 K = 172 l/h = 2,87 l/min.</p>
          </div>

          <div class="rk-diameter-pipe-results" id="rk-diameter-pipe-results" aria-live="polite">
            <article class="rk-diameter-pipe-result is-selected" data-rk-diameter-pipe-card="p16">
              <div class="rk-diameter-pipe-result-head"><span>16×2 mm</span><strong>Ø wew. 12 mm</strong></div>
              <div class="rk-diameter-pipe-metrics">
                <div><span>Prędkość</span><strong data-rk-diameter-metric="velocity">0,42 m/s</strong></div>
                <div><span>Opór jednostkowy</span><strong data-rk-diameter-metric="gradient">259 Pa/m</strong></div>
                <div><span>Strata samej rury</span><strong data-rk-diameter-metric="pipe-loss">20,7 kPa</strong></div>
                <div><span>Cała wpisana droga</span><strong data-rk-diameter-metric="total-loss">24,7 kPa</strong></div>
                <div><span>Pojemność pętli</span><strong data-rk-diameter-metric="volume">9,0 l</strong></div>
                <div><span>Odpowiednik wysokości</span><strong data-rk-diameter-metric="head">2,54 m</strong></div>
              </div>
              <p class="rk-diameter-pipe-status is-over" data-rk-diameter-metric="status">Przekracza wpisany limit 20 kPa.</p>
              <button type="button" data-rk-diameter-select-pipe="p16" aria-pressed="true">Wyróżnij 16×2 na wykresie</button>
            </article>

            <article class="rk-diameter-pipe-result" data-rk-diameter-pipe-card="p17">
              <div class="rk-diameter-pipe-result-head"><span>17×2 mm</span><strong>Ø wew. 13 mm</strong></div>
              <div class="rk-diameter-pipe-metrics">
                <div><span>Prędkość</span><strong data-rk-diameter-metric="velocity">0,36 m/s</strong></div>
                <div><span>Opór jednostkowy</span><strong data-rk-diameter-metric="gradient">177 Pa/m</strong></div>
                <div><span>Strata samej rury</span><strong data-rk-diameter-metric="pipe-loss">14,2 kPa</strong></div>
                <div><span>Cała wpisana droga</span><strong data-rk-diameter-metric="total-loss">18,2 kPa</strong></div>
                <div><span>Pojemność pętli</span><strong data-rk-diameter-metric="volume">10,6 l</strong></div>
                <div><span>Odpowiednik wysokości</span><strong data-rk-diameter-metric="head">1,87 m</strong></div>
              </div>
              <p class="rk-diameter-pipe-status is-within" data-rk-diameter-metric="status">Mieści się we wpisanym limicie 20 kPa.</p>
              <button type="button" data-rk-diameter-select-pipe="p17" aria-pressed="false">Wyróżnij 17×2 na wykresie</button>
            </article>

            <article class="rk-diameter-pipe-result" data-rk-diameter-pipe-card="p20">
              <div class="rk-diameter-pipe-result-head"><span>20×2 mm</span><strong>Ø wew. 16 mm</strong></div>
              <div class="rk-diameter-pipe-metrics">
                <div><span>Prędkość</span><strong data-rk-diameter-metric="velocity">0,24 m/s</strong></div>
                <div><span>Opór jednostkowy</span><strong data-rk-diameter-metric="gradient">66 Pa/m</strong></div>
                <div><span>Strata samej rury</span><strong data-rk-diameter-metric="pipe-loss">5,3 kPa</strong></div>
                <div><span>Cała wpisana droga</span><strong data-rk-diameter-metric="total-loss">9,3 kPa</strong></div>
                <div><span>Pojemność pętli</span><strong data-rk-diameter-metric="volume">16,1 l</strong></div>
                <div><span>Odpowiednik wysokości</span><strong data-rk-diameter-metric="head">0,95 m</strong></div>
              </div>
              <p class="rk-diameter-pipe-status is-within" data-rk-diameter-metric="status">Mieści się we wpisanym limicie 20 kPa.</p>
              <button type="button" data-rk-diameter-select-pipe="p20" aria-pressed="false">Wyróżnij 20×2 na wykresie</button>
            </article>

            <article class="rk-diameter-pipe-result" data-rk-diameter-pipe-card="custom">
              <div class="rk-diameter-pipe-result-head"><span>Własna rura</span><strong data-rk-diameter-custom-label="">Ø wew. 14 mm</strong></div>
              <div class="rk-diameter-pipe-metrics">
                <div><span>Prędkość</span><strong data-rk-diameter-metric="velocity">0,31 m/s</strong></div>
                <div><span>Opór jednostkowy</span><strong data-rk-diameter-metric="gradient">125 Pa/m</strong></div>
                <div><span>Strata samej rury</span><strong data-rk-diameter-metric="pipe-loss">10,0 kPa</strong></div>
                <div><span>Cała wpisana droga</span><strong data-rk-diameter-metric="total-loss">14,0 kPa</strong></div>
                <div><span>Pojemność pętli</span><strong data-rk-diameter-metric="volume">12,3 l</strong></div>
                <div><span>Odpowiednik wysokości</span><strong data-rk-diameter-metric="head">1,43 m</strong></div>
              </div>
              <p class="rk-diameter-pipe-status is-within" data-rk-diameter-metric="status">Mieści się we wpisanym limicie 20 kPa.</p>
              <button type="button" data-rk-diameter-select-pipe="custom" aria-pressed="false">Wyróżnij własną rurę na wykresie</button>
            </article>
          </div>

          <div class="rk-diameter-chart-card">
            <div class="rk-diameter-chart-title">Opór jednostkowy a przepływ — porównanie średnic wewnętrznych</div>
            <div class="rk-diameter-series-controls" role="group" aria-label="Widoczne serie wykresu">
              <button type="button" data-rk-diameter-series="p16" aria-pressed="true"><i class="is-p16"></i>16×2</button>
              <button type="button" data-rk-diameter-series="p17" aria-pressed="true"><i class="is-p17"></i>17×2</button>
              <button type="button" data-rk-diameter-series="p20" aria-pressed="true"><i class="is-p20"></i>20×2</button>
              <button type="button" data-rk-diameter-series="custom" aria-pressed="true"><i class="is-custom"></i>własna</button>
            </div>
            <div class="rk-diameter-chart-wrap" id="rk-diameter-chart-wrap">
              <svg id="rk-diameter-pressure-chart" viewBox="0 0 760 410" role="img" aria-labelledby="rk-diameter-chart-title-svg rk-diameter-chart-desc">
                <title id="rk-diameter-chart-title-svg">Porównanie oporu rur w funkcji przepływu</title>
                <desc id="rk-diameter-chart-desc">Wykres pokazuje nieliniową zmianę oporu jednostkowego rur o różnych średnicach wewnętrznych oraz aktualny przepływ pętli.</desc>
              </svg>
            </div>
            <div class="rk-diameter-chart-reading" id="rk-diameter-chart-reading" aria-live="polite"><strong>Wybrana rura 16×2:</strong> przy 2,87 l/min model wskazuje około 259 Pa/m.</div>
          </div>

          <div class="rk-diameter-status is-good" id="rk-diameter-calculator-status">Porównano wszystkie rury dla identycznego wymaganego przepływu. Wpisany limit służy do kontroli założenia użytkownika i nie jest automatycznie wymaganiem normowym.</div>
          <div class="rk-diameter-tool-disclaimer"><strong>Granice kalkulatora:</strong> wynik dotyczy wody i gładkiej rury o przyjętej chropowatości bez uwzględnienia tolerancji wymiarowych, sposobu ułożenia, wpływu rozdzielacza poza wpisaną stratą ani rzeczywistej charakterystyki pompy. Dla konkretnego produktu należy użyć jego średnicy wewnętrznej i zweryfikować wynik z tabelą producenta. Kalkulator nie dobiera automatycznie rury ani pompy.</div>
        </div>
      </div>

      <p>Jeżeli potrzebujesz sprawdzić również przepływ całego rozdzielacza i wysokość podnoszenia, przejdź do <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulatora doboru pompy obiegowej</a>. Ten moduł celowo analizuje jedną drogę, aby nie mieszać oporu pętli z sumarycznym przepływem instalacji.</p>

      <div class="rk-diameter-cta">
        <div class="rk-diameter-cta-title">Policzyłeś pojedynczą pętlę. Teraz trzeba sprawdzić, czy cały układ się bilansuje</div>
        <p>Średnica jednej rury nie rozstrzyga jeszcze o przepływie całego rozdzielacza, średnicy magistrali ani punkcie pracy pompy. Kompletny projekt łączy OZC, podział powierzchni, rzeczywiste trasy, temperatury, przepływy, opory i wymagania źródła ciepła.</p>
        <a class="rk-diameter-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
        <small class="rk-diameter-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-results">
      <span class="rk-diameter-eyebrow">Wynik to dane do decyzji, nie automatyczny werdykt</span>
      <h2 class="rk-diameter-section-title">Jak interpretować prędkość i spadek ciśnienia?</h2>
      <p class="rk-diameter-lead">Kalkulator porównuje konsekwencje hydrauliczne, ale większa średnica nie wygrywa automatycznie. Wynik trzeba zestawić z długością pętli, możliwością podziału powierzchni, charakterystyką pompy, regulacją i wymaganiami systemu.</p>

      <div class="rk-diameter-compare-table" role="table" aria-label="Przykładowe wyniki dla rur o różnych średnicach">
        <div class="rk-diameter-table-row rk-diameter-table-head" role="row"><div role="columnheader">Rura</div><div role="columnheader">Wynik modelowy</div><div role="columnheader">Wniosek</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Rura" role="cell">16×2; wnętrze 12 mm</div><div data-label="Wynik" role="cell">około 0,42 m/s i 259 Pa/m</div><div data-label="Wniosek" role="cell">Dla 80 m sama rura daje około 20,7 kPa; po dodaniu 4 kPa przekracza przykładowy limit 20 kPa.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Rura" role="cell">17×2; wnętrze 13 mm</div><div data-label="Wynik" role="cell">około 0,36 m/s i 177 Pa/m</div><div data-label="Wniosek" role="cell">W tym samym przykładzie cała wpisana droga wynosi około 18,2 kPa.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Rura" role="cell">20×2; wnętrze 16 mm</div><div data-label="Wynik" role="cell">około 0,24 m/s i 66 Pa/m</div><div data-label="Wniosek" role="cell">Opór spada wyraźnie, ale trzeba jeszcze ocenić wykonanie, koszt i zasadność takiej średnicy.</div></div>
      </div>

      <p>Porównanie zakłada 1000 W, ΔT = 5 K, 80 m rury, wodę o średniej temperaturze 35°C i 4 kPa dodatkowych strat. Zmiana jednego parametru zmienia wyniki, dlatego tabela jest przykładem, a nie katalogiem dopuszczalnych długości.</p>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Prędkość nie jest celem</h3><p>Zakres 0,15–0,6 m/s może być kontrolowany w praktyce autora, ale nie należy „dobić” do górnej granicy. Ocenia się hałas, regulację i dokumentację elementów.</p></article>
        <article class="rk-diameter-card"><h3>20 kPa nie jest ścianą fizyczną</h3><p>To może być rozsądny cel projektowy dla pętli, lecz osiągalność przepływu wynika z pełnego punktu Q–H oraz rezerwy regulacyjnej.</p></article>
        <article class="rk-diameter-card"><h3>Tabela producenta ma pierwszeństwo</h3><p>Model nie zna tolerancji rury, konstrukcji warstw ani danych zaworów. Ostateczny projekt należy sprawdzić na danych konkretnego systemu.</p></article>
      </div>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-graphic">
      <span class="rk-diameter-eyebrow">Interaktywna grafika edukacyjna</span>
      <h2 class="rk-diameter-section-title">Co zmienia mniejsze ΔT, węższa rura, dłuższa pętla lub jej podział?</h2>
      <p class="rk-diameter-lead">Wybierz jedną zmianę. Sześć modułów pokaże jej konsekwencje bez udawania, że pojedyncza cecha wystarcza do wyboru rury.</p>

      <div class="rk-diameter-tool" id="rk-diameter-dependency-tool">
        <div class="rk-diameter-tool-head">
          <span class="rk-diameter-eyebrow">Łańcuch zależności cieplnych i hydraulicznych</span>
          <h3>Prześledź zmianę od obciążenia do pompy</h3>
          <p>Każdy wariant zakłada, że pozostałe parametry nie zmieniają się. W rzeczywistym projekcie kilka zmian może wystąpić jednocześnie.</p>
        </div>
        <div class="rk-diameter-tool-body">
          <div class="rk-diameter-graphic-controls" role="group" aria-label="Wybierz analizowaną zmianę">
            <button type="button" data-rk-diameter-scenario="diameter" aria-pressed="true">Mniejsza średnica</button>
            <button type="button" data-rk-diameter-scenario="delta">Mniejsze ΔT</button>
            <button type="button" data-rk-diameter-scenario="length">Dłuższa pętla</button>
            <button type="button" data-rk-diameter-scenario="split">Więcej pętli</button>
          </div>

          <div class="rk-diameter-hydraulic-grid" aria-live="polite">
            <article class="rk-diameter-hydraulic-card is-muted" data-rk-diameter-component="load"><span class="rk-diameter-hydraulic-number">1</span><h3>Obciążenie cieplne</h3><span class="rk-diameter-hydraulic-value" data-rk-diameter-component-value="">Nie zmienia się</span><p data-rk-diameter-component-copy="">Zmiana średnicy rury nie zmienia strat ciepła pomieszczenia.</p></article>
            <article class="rk-diameter-hydraulic-card is-muted" data-rk-diameter-component="flow"><span class="rk-diameter-hydraulic-number">2</span><h3>Wymagany przepływ</h3><span class="rk-diameter-hydraulic-value" data-rk-diameter-component-value="">Pozostaje taki sam</span><p data-rk-diameter-component-copy="">Przy tej samej mocy i ΔT bilans energii wymaga tego samego strumienia.</p></article>
            <article class="rk-diameter-hydraulic-card is-active" data-rk-diameter-component="section"><span class="rk-diameter-hydraulic-number">3</span><h3>Przekrój rury</h3><span class="rk-diameter-hydraulic-value" data-rk-diameter-component-value="">Maleje</span><p data-rk-diameter-component-copy="">Mniejsza średnica wewnętrzna daje mniejsze pole dostępne dla przepływu.</p></article>
            <article class="rk-diameter-hydraulic-card is-active" data-rk-diameter-component="velocity"><span class="rk-diameter-hydraulic-number">4</span><h3>Prędkość</h3><span class="rk-diameter-hydraulic-value" data-rk-diameter-component-value="">Rośnie</span><p data-rk-diameter-component-copy="">Ten sam strumień musi przepłynąć przez mniejszy przekrój.</p></article>
            <article class="rk-diameter-hydraulic-card is-active" data-rk-diameter-component="pressure"><span class="rk-diameter-hydraulic-number">5</span><h3>Spadek ciśnienia</h3><span class="rk-diameter-hydraulic-value" data-rk-diameter-component-value="">Rośnie silnie</span><p data-rk-diameter-component-copy="">Zależność od przepływu i średnicy jest nieliniowa, dlatego nawet mała zmiana wnętrza może być odczuwalna.</p></article>
            <article class="rk-diameter-hydraulic-card is-active" data-rk-diameter-component="system"><span class="rk-diameter-hydraulic-number">6</span><h3>Pompa i regulacja</h3><span class="rk-diameter-hydraulic-value" data-rk-diameter-component-value="">Potrzebują większego H</span><p data-rk-diameter-component-copy="">Droga krytyczna wymaga większej dostępnej różnicy ciśnień i może ograniczyć regulację.</p></article>
          </div>

          <div class="rk-diameter-graphic-result" id="rk-diameter-scenario-result" role="status" aria-live="polite"><strong>Mniejsza średnica nie zmniejsza wymaganego przepływu.</strong><p>Podnosi prędkość oraz opór dla tego samego strumienia. Jeżeli wynik staje się nieakceptowalny, można zwiększyć średnicę, skrócić pętlę lub inaczej podzielić powierzchnię.</p></div>
          <div class="rk-diameter-tool-disclaimer"><strong>Granica grafiki:</strong> moduł pokazuje kierunek zależności. Nie wyznacza wartości i nie zastępuje modelu emisji podłogi, rzeczywistej geometrii tras, tabel rury ani charakterystyki pompy.</div>
        </div>
      </div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-comparison">
      <span class="rk-diameter-eyebrow">Większa średnica pomaga hydraulicznie, ale kosztuje wykonawczo</span>
      <h2 class="rk-diameter-section-title">Rura 16×2, 17×2 czy 20×2 — porównanie praktyczne</h2>
      <p class="rk-diameter-lead">Poniższe zestawienie opisuje typowe konsekwencje wymiarów nominalnych. Nie zastępuje karty technicznej, ponieważ rzeczywiste średnice, promienie gięcia, warstwy i systemy mocowania różnią się pomiędzy produktami.</p>

      <div class="rk-diameter-compare-table" role="table" aria-label="Porównanie rur 16x2, 17x2 i 20x2 w ogrzewaniu podłogowym">
        <div class="rk-diameter-table-row rk-diameter-table-head" role="row"><div role="columnheader">Cecha</div><div role="columnheader">16×2 i 17×2 mm</div><div role="columnheader">20×2 mm</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Cecha" role="cell">Hydraulika</div><div data-label="16×2 i 17×2" role="cell">Mniejszy przekrój oznacza wyższą prędkość i większy opór przy tym samym przepływie.</div><div data-label="20×2" role="cell">Większe wnętrze obniża prędkość oraz spadek ciśnienia, szczególnie przy większych strumieniach.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Cecha" role="cell">Pojemność</div><div data-label="16×2 i 17×2" role="cell">Około 0,113 lub 0,133 l/m dla nominalnych wymiarów.</div><div data-label="20×2" role="cell">Około 0,201 l/m, czyli większy zład na tę samą długość.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Cecha" role="cell">Układanie</div><div data-label="16×2 i 17×2" role="cell">Zwykle łatwiejsze prowadzenie w gęstym rozstawie i niewielkich polach.</div><div data-label="20×2" role="cell">Zwykle większy promień gięcia oraz większa siła potrzebna do ułożenia; decyduje producent.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Cecha" role="cell">Rozdzielacz i system</div><div data-label="16×2 i 17×2" role="cell">Wymagają elementów zgodnych z dokładną średnicą i konstrukcją rury.</div><div data-label="20×2" role="cell">Potrzebne są odpowiednie przyłącza, rozstawy króćców i elementy mocujące.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Cecha" role="cell">Kiedy rozważać</div><div data-label="16×2 i 17×2" role="cell">Gdy obliczone przepływy i długości mieszczą się w przyjętych warunkach hydraulicznych.</div><div data-label="20×2" role="cell">Gdy większy przekrój rozwiązuje konkretny problem hydrauliczny lepiej niż inny podział pętli.</div></div>
      </div>

      <div class="rk-diameter-note"><strong>17×2 nie jest po prostu „prawie tym samym” co 16×2.</strong> Nominalne wnętrze 13 zamiast 12 mm zwiększa pole przekroju o około 17%. To może zauważalnie obniżyć opór, ale dokładny efekt trzeba policzyć dla konkretnego przepływu.</div>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-materials">
      <span class="rk-diameter-eyebrow">Ten sam wymiar nie oznacza identycznego produktu</span>
      <h2 class="rk-diameter-section-title">PEX, PE-RT i rury wielowarstwowe — co poza średnicą?</h2>
      <p class="rk-diameter-lead">Hydraulika zaczyna się od średnicy wewnętrznej, ale wybór rury obejmuje również konstrukcję, barierę tlenową, promień gięcia, klasę zastosowania, maksymalne parametry pracy i kompletność systemu.</p>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>PEX</h3><p>Usieciowany polietylen występuje w różnych metodach sieciowania i konstrukcjach warstw. Należy sprawdzić dokładne wymiary, barierę tlenową i sposób łączenia.</p></article>
        <article class="rk-diameter-card"><h3>PE-RT</h3><p>Polietylen o podwyższonej odporności temperaturowej może występować jako rura jednorodna lub element konstrukcji wielowarstwowej.</p></article>
        <article class="rk-diameter-card"><h3>Rura z warstwą aluminium</h3><p>Warstwa aluminium wpływa na stabilność kształtu, rozszerzalność i sposób gięcia, ale nie zwalnia z kontroli średnicy wewnętrznej oraz oporów.</p></article>
      </div>

      <p>Szerzej omawiają to poradniki: <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/">rura PEX do ogrzewania podłogowego</a>, <a href="https://projekt-ogrzewania.pl/rura-pert-do-ogrzewania-podlogowego/">rura PE-RT do podłogówki</a> oraz zestawienie <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/">rodzajów rur do ogrzewania podłogowego</a>. Znaczenie ochrony instalacji opisuje artykuł o <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/">barierze antydyfuzyjnej EVOH</a>.</p>
      <div class="rk-diameter-warning"><strong>Nie wybieraj rury wyłącznie po napisie 16×2.</strong> Dwa produkty o podobnym oznaczeniu mogą różnić się tolerancją, budową warstw, promieniem gięcia, dopuszczalnymi parametrami i charakterystyką hydrauliczną.</div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-length">
      <span class="rk-diameter-eyebrow">Metry są skutkiem trasy, nie samodzielnym kryterium</span>
      <h2 class="rk-diameter-section-title">Jak średnica wpływa na dopuszczalną długość pętli?</h2>
      <p class="rk-diameter-lead">Przy tym samym przepływie i rodzaju rury strata liniowa rośnie w przybliżeniu proporcjonalnie do długości. Nie istnieje jednak jedna maksymalna liczba metrów niezależna od mocy, ΔT, średnicy wewnętrznej i dostępnej różnicy ciśnień.</p>

      <div class="rk-diameter-chain" aria-label="Kolejność sprawdzania długości pętli">
        <div class="rk-diameter-chain-item"><strong>Moc</strong><span>przypisana do pola</span></div>
        <div class="rk-diameter-chain-item"><strong>ΔT</strong><span>projektowy przepływ</span></div>
        <div class="rk-diameter-chain-item"><strong>Trasa</strong><span>rura i podejścia</span></div>
        <div class="rk-diameter-chain-item"><strong>Średnica</strong><span>prędkość i Pa/m</span></div>
        <div class="rk-diameter-chain-item"><strong>Pompa</strong><span>punkt Q–H</span></div>
      </div>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Limit projektowy autora</h3><p>Dla 16×2 mm stosuje się zwykle do 100 m łącznie z podejściami, lecz nie przedstawiamy tego jako uniwersalnego zapisu normowego.</p></article>
        <article class="rk-diameter-card"><h3>Dłuższa rura wymaga obliczenia</h3><p>Pętla przekraczająca przyjęty limit nie staje się automatycznie niesprawna, ale jej przepływ, opór i możliwość regulacji wymagają świadomej weryfikacji.</p></article>
        <article class="rk-diameter-card"><h3>Podział bywa lepszy niż większa średnica</h3><p>Dwie krótsze gałęzie mogą ograniczyć opór oraz poprawić rozkład powierzchni, ale zwiększają liczbę obwodów rozdzielacza.</p></article>
      </div>

      <p>Więcej przykładów zawierają poradniki o <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalnej długości pętli podłogówki</a>, <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/">objawach zbyt długiej pętli</a> oraz o tym, <a href="https://projekt-ogrzewania.pl/ile-metrow-podlogowki-na-jednej-petli/">ile metrów podłogówki planować na jednej pętli</a>.</p>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-heat-pump">
      <span class="rk-diameter-eyebrow">Źródło stawia wymagania całemu obiegowi</span>
      <h2 class="rk-diameter-section-title">Czy pompa ciepła wymaga rury 20 mm w podłogówce?</h2>
      <div class="rk-diameter-answer"><span class="rk-diameter-answer-label">Nie — nie wynika to z samej nazwy źródła</span><p><strong>Pompa ciepła może wymagać określonego minimalnego przepływu przez urządzenie, ale przepływ ten rozdziela się pomiędzy wiele pętli. Średnicę pojedynczej gałęzi dobiera się do jej własnej mocy, ΔT, długości i oporu. Rura 20 mm jest rozwiązaniem możliwym, a nie obowiązkowym standardem.</strong></p></div>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Małe ΔT zwiększa przepływ</h3><p>Jeżeli projekt przyjmuje mniejszą różnicę temperatur, dla tej samej mocy potrzebny jest większy strumień. Dotyczy to bilansu, nie etykiety urządzenia.</p></article>
        <article class="rk-diameter-card"><h3>Przepływ źródła to suma</h3><p>Wymagany strumień pompy ciepła może być zapewniany przez wiele równoległych pętli i odpowiednio dobrane przewody wspólne.</p></article>
        <article class="rk-diameter-card"><h3>Temperatura także ma znaczenie</h3><p>Podłoga powinna pokryć obciążenie przy możliwie racjonalnym parametrze, lecz średnica nie naprawi zbyt małej powierzchni czynnej.</p></article>
      </div>

      <p>Kompletną zależność omawia poradnik <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt ogrzewania podłogowego z pompą ciepła</a>. Ogólne wymagania źródła opisuje również materiał <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła i ogrzewanie podłogowe</a>.</p>
      <div class="rk-diameter-note"><strong>Większy zład nie jest automatycznie buforem.</strong> Objętość rur należy uwzględnić w bilansie instalacji, ale o potrzebie bufora decydują wymagania urządzenia, minimalny przepływ, sterowanie, odszranianie i wszystkie stany odbioru.</div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-dark" id="rk-diameter-pump">
      <span class="rk-diameter-eyebrow">Pompa pracuje w punkcie, a nie na samej wysokości</span>
      <h2 class="rk-diameter-section-title">Jak średnica rury wpływa na dobór pompy obiegowej?</h2>
      <p class="rk-diameter-lead">Pompa musi jednocześnie zapewnić przepływ całkowity Q oraz różnicę ciśnień H potrzebną najbardziej wymagającej drodze. Zwiększenie średnicy pętli może obniżyć jej opór, lecz nie zmniejsza automatycznie sumarycznego przepływu wynikającego z mocy.</p>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Q przewodów wspólnych</h3><p>Jest sumą projektowych przepływów pętli pracujących jednocześnie.</p></article>
        <article class="rk-diameter-card"><h3>H drogi krytycznej</h3><p>Obejmuje wspólne przewody i armaturę oraz jedną najbardziej wymagającą pętlę.</p></article>
        <article class="rk-diameter-card"><h3>Regulacja</h3><p>Punkt pracy zmienia się po zamknięciu stref, dlatego trzeba sprawdzić również częściowy i minimalny odbiór.</p></article>
      </div>

      <p>Nie dobiera się większej pompy po to, aby przykryć przypadkowo zaprojektowane trasy. Zasady doboru rozwija artykuł <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">pompa obiegowa w instalacji podłogowej</a>.</p>
      <div class="rk-diameter-callout"><strong>Spadków równoległych pętli nie sumujemy.</strong> Sumują się ich przepływy, natomiast do wymaganej wysokości podnoszenia wybiera się drogę o największym łącznym oporze przy jej projektowym strumieniu.</div>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-balancing">
      <span class="rk-diameter-eyebrow">Różne długości nie oznaczają automatycznie błędu</span>
      <h2 class="rk-diameter-section-title">Czy wszystkie pętle muszą mieć tę samą średnicę i długość?</h2>
      <p class="rk-diameter-lead">Pętle połączone równolegle mogą mieć różne długości, przepływy, a w uzasadnionym projekcie także średnice. Warunkiem jest możliwość uzyskania i ustawienia wymaganych strumieni bez nadmiernego dławienia ani przekroczenia możliwości pompy.</p>

      <div class="rk-diameter-steps">
        <article class="rk-diameter-step"><h3>Przypisz moc</h3><p>Każda pętla musi mieć określoną powierzchnię i projektową moc.</p></article>
        <article class="rk-diameter-step"><h3>Policz przepływ</h3><p>Strumień wynika z mocy pętli oraz przyjętego ΔT, a nie z jej długości.</p></article>
        <article class="rk-diameter-step"><h3>Policz opór</h3><p>Użyj rzeczywistej długości, średnicy wewnętrznej, czynnika i danych zaworów.</p></article>
        <article class="rk-diameter-step"><h3>Wyznacz drogę krytyczną</h3><p>Sprawdź, która gałąź potrzebuje największej różnicy ciśnień.</p></article>
        <article class="rk-diameter-step"><h3>Ustaw rozdzielacz</h3><p>Rotametry i zawory służą do uzyskania projektowych przepływów, a nie jednakowych wskazań.</p></article>
        <article class="rk-diameter-step"><h3>Skontroluj całość</h3><p>Po każdej korekcie trzeba ponownie sprawdzić pozostałe równoległe gałęzie.</p></article>
      </div>

      <p>Praktyczne zasady regulacji opisuje poradnik o <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrze na rozdzielaczu</a>. Budowę samej gałęzi rozwija artykuł <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">pętla grzewcza — długość, przepływ i opór</a>.</p>
      <div class="rk-diameter-warning"><strong>Nie ma uniwersalnego wymogu różnicy długości do 10–15%.</strong> Warto unikać niepotrzebnie skrajnych dysproporcji, ale o możliwości zrównoważenia decydują obliczone opory, zawory i dostępne ciśnienie, a nie sam procent metrów.</div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-installation">
      <span class="rk-diameter-eyebrow">Parametry hydrauliczne muszą być możliwe do wykonania</span>
      <h2 class="rk-diameter-section-title">Co sprawdzić przed ułożeniem rury w podłodze?</h2>
      <p class="rk-diameter-lead">Projektowy przekrój nie wystarczy, jeżeli rury nie da się prawidłowo wygiąć, zamocować, podłączyć do rozdzielacza lub ułożyć zgodnie z dokumentacją wybranego systemu.</p>

      <div class="rk-diameter-grid-4">
        <article class="rk-diameter-card"><h3>Promień gięcia</h3><p>Minimalna wartość zależy od materiału, konstrukcji i metody gięcia podanej przez producenta.</p></article>
        <article class="rk-diameter-card"><h3>Rozstaw i mocowanie</h3><p>Większa oraz sztywniejsza rura może ograniczać gęsty rozstaw i wymagać innych elementów mocujących.</p></article>
        <article class="rk-diameter-card"><h3>Przejścia i dylatacje</h3><p>Trasy trzeba skoordynować z podziałem pól, osłonami oraz konstrukcją warstw podłogowych.</p></article>
        <article class="rk-diameter-card"><h3>Rozdzielacz</h3><p>Złączki, rozstaw króćców, szafka i liczba sekcji muszą pasować do wybranych rur oraz tras.</p></article>
      </div>

      <p>Sposób prowadzenia przewodów omawia poradnik <a href="https://projekt-ogrzewania.pl/jak-ukladac-rury-w-ogrzewaniu-slimak-meander-czy-podwojny-meander/">ślimak, meander czy podwójny meander</a>. Rozdzielacz i jego wyposażenie opisuje materiał <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do ogrzewania podłogowego</a>.</p>
      <div class="rk-diameter-note"><strong>Nie zakładaj automatycznie grubszej wylewki dla rury 20 mm.</strong> Wymaganą konstrukcję, położenie rury i grubość przykrycia należy odczytać z dokumentacji konkretnego systemu oraz projektu podłogi.</div>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-example">
      <span class="rk-diameter-eyebrow">Przykład pokazuje dwie możliwe drogi</span>
      <h2 class="rk-diameter-section-title">Przykład: zwiększyć średnicę czy podzielić salon na więcej pętli?</h2>
      <p class="rk-diameter-lead">Załóżmy modelową powierzchnię 45 m², moc 2400 W i ΔT = 5 K. Przepływ całkowity wynosi około 413 l/h. Przy rozstawie 15 cm sama długość w polu to około 300 m, jeszcze bez podejść.</p>

      <div class="rk-diameter-compare-table" role="table" aria-label="Przykład podziału dużej powierzchni na pętle">
        <div class="rk-diameter-table-row rk-diameter-table-head" role="row"><div role="columnheader">Wariant uproszczony</div><div role="columnheader">Przepływ i hydraulika</div><div role="columnheader">Co wynika z porównania</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Wariant" role="cell">2 pętle 16×2 po około 150 m</div><div data-label="Hydraulika" role="cell">Około 207 l/h na pętlę; duża długość i wysoki opór wymagają ponownego podziału.</div><div data-label="Wniosek" role="cell">Nie należy ratować układu samym zwiększeniem biegu pompy.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Wariant" role="cell">3 pętle 16×2 po około 100 m</div><div data-label="Hydraulika" role="cell">Około 138 l/h na pętlę; mniejszy strumień i krótsza trasa wyraźnie ograniczają opór.</div><div data-label="Wniosek" role="cell">Podział może pozwolić zachować standardową średnicę.</div></div>
        <div class="rk-diameter-table-row" role="row"><div class="rk-diameter-table-label" data-label="Wariant" role="cell">2 pętle 20×2 po około 150 m</div><div data-label="Hydraulika" role="cell">Większy przekrój obniża opór, lecz pozostają długa trasa, wykonanie i zgodność systemu.</div><div data-label="Wniosek" role="cell">Hydraulicznie możliwe nie zawsze oznacza rozwiązanie najkorzystniejsze całościowo.</div></div>
      </div>

      <p>To przykład porównawczy bez podejść, oporów rozdzielacza, dokładnego modelu emisji i danych konkretnej rury. W realnym projekcie trzeba narysować rzeczywiste trasy oraz skontrolować strefy, dylatacje i regulację. Liczbę pętli dla dużej przestrzeni rozwija poradnik <a href="https://projekt-ogrzewania.pl/salon-ile-petli-podlogowki/">ile pętli podłogówki zaplanować w salonie</a>.</p>
      <div class="rk-diameter-callout"><strong>Najważniejszy wniosek:</strong> problem hydrauliczny ma zwykle więcej niż jedno rozwiązanie. Można zmienić średnicę, podział, trasę, rozdzielacz lub założenia temperaturowe — ale każda zmiana wpływa na inne części projektu.</div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-errors">
      <span class="rk-diameter-eyebrow">Błędy wynikają głównie z wyboru jednej liczby bez bilansu</span>
      <h2 class="rk-diameter-section-title">Najczęstsze błędy przy doborze średnicy rury</h2>
      <div class="rk-diameter-mistakes">
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Średnica dobierana do źródła</strong><p>Hasło „pompa ciepła = rura 20 mm” pomija podział przepływu pomiędzy równoległe pętle.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Patrzenie tylko na średnicę zewnętrzną</strong><p>O hydraulice decyduje wnętrze rury, którego nie można ustalić bez grubości ścianki i danych produktu.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>20 kPa przedstawiane jako norma</strong><p>To może być kryterium projektowe autora, lecz nie automatyczny limit każdej możliwej instalacji.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Jedna maksymalna długość</strong><p>Ta sama rura przy różnych przepływach może mieć całkowicie inny spadek ciśnienia.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Wymuszanie równych długości</strong><p>Pętle powinny mieć obliczone przepływy i opory, a nie identyczną liczbę metrów za wszelką cenę.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Sumowanie oporów równoległych pętli</strong><p>Do wysokości podnoszenia analizuje się drogę krytyczną, natomiast sumuje się przepływy.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Większa pompa zamiast poprawy projektu</strong><p>Zwiększanie H może powodować hałas i trudniejszą regulację, nie usuwając przyczyny nadmiernych oporów.</p></div></div>
        <div class="rk-diameter-mistake"><span class="rk-diameter-mistake-icon">!</span><div><strong>Największa rura jako zawsze najlepsza</strong><p>Większy przekrój pomaga hydraulicznie, ale może utrudnić wykonanie i zwiększyć koszt bez potrzebnego efektu.</p></div></div>
      </div>

      <p>Szerszy kontekst wykonawczy zawiera zestawienie <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstszych błędów montażu ogrzewania podłogowego</a>.</p>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-checklist">
      <span class="rk-diameter-eyebrow">Przed zakupem rury i zatwierdzeniem projektu</span>
      <h2 class="rk-diameter-section-title">Lista kontrolna doboru średnicy</h2>
      <p class="rk-diameter-lead">Jeżeli któregoś parametru nie znamy, nie zastępujemy go nazwą źródła ani powierzchnią całego domu.</p>

      <div class="rk-diameter-checklist">
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>OZC pomieszczenia</strong><br>Czy znana jest projektowa moc, którą ma przekazać podłoga?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Powierzchnia czynna</strong><br>Czy wyłączono trwałą zabudowę i sprawdzono wymaganą moc na m²?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Podział na pętle</strong><br>Czy każda gałąź ma przypisaną powierzchnię oraz moc?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Projektowe ΔT</strong><br>Czy wartość wynika z koncepcji całego układu, a nie tylko typu źródła?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Przepływ pętli</strong><br>Czy został obliczony z jej mocy i właściwości czynnika?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Rzeczywista trasa</strong><br>Czy długość obejmuje pole grzewcze, oba podejścia i korekty geometrii?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Średnica wewnętrzna</strong><br>Czy pochodzi z karty wybranego produktu?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Opór jednostkowy</strong><br>Czy zweryfikowano go dla przepływu i temperatury obliczeniowej?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Armatura</strong><br>Czy uwzględniono zawory, rozdzielacz i pozostałe elementy drogi?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Prędkość</strong><br>Czy sprawdzono ją jako parametr roboczy, a nie cel do maksymalizacji?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Droga krytyczna</strong><br>Czy ustalono ją z obliczeń, a nie wyłącznie z długości?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Punkt pracy pompy</strong><br>Czy przepływ Q oraz wymagane H porównano z charakterystyką urządzenia?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Wykonalność</strong><br>Czy promień gięcia, mocowania i przyłącza odpowiadają średnicy?</div></div>
        <div class="rk-diameter-checklist-item"><span>✓</span><div><strong>Dokumentacja</strong><br>Czy końcowe średnice, długości, przepływy i nastawy zapisano dla wykonawcy?</div></div>
      </div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-conclusions">
      <span class="rk-diameter-eyebrow">Wnioski projektanta</span>
      <h2 class="rk-diameter-section-title">Kiedy średnica rury jest dobrana prawidłowo?</h2>
      <p class="rk-diameter-lead">Prawidłowa średnica pozwala uzyskać wymagany przepływ przy kontrolowanej prędkości i stracie ciśnienia, mieści się w bilansie pompy, pasuje do systemu wykonawczego oraz nie jest większa wyłącznie „na zapas”.</p>

      <div class="rk-diameter-grid-3">
        <article class="rk-diameter-card"><h3>Bilans cieplny jest znany</h3><p>Moc i przepływ pętli wynikają z OZC, powierzchni oraz projektowego ΔT.</p></article>
        <article class="rk-diameter-card"><h3>Hydraulika się domyka</h3><p>Rzeczywista średnica, długość i armatura tworzą osiągalną drogę krytyczną.</p></article>
        <article class="rk-diameter-card"><h3>Rozwiązanie da się wykonać</h3><p>Rura, rozdzielacz, promienie gięcia, mocowania i konstrukcja podłogi są wzajemnie zgodne.</p></article>
      </div>

      <div class="rk-diameter-answer"><span class="rk-diameter-answer-label">Reguła końcowa</span><p><strong>Najpierw policz moc i przepływ, później narysuj rzeczywistą trasę, następnie porównaj prędkość oraz opór średnic wewnętrznych, a na końcu sprawdź drogę krytyczną z charakterystyką pompy i możliwością regulacji całego rozdzielacza.</strong></p></div>

      <div class="rk-diameter-cta">
        <div class="rk-diameter-cta-title">Dobierz średnice wszystkich pętli, magistralę i pompę jako jeden układ</div>
        <p>Kompletny projekt obejmuje OZC, powierzchnie czynne, temperatury, rozstawy, rzeczywiste trasy, średnice, przepływy, spadki ciśnienia, rozdzielacze oraz nastawy potrzebne wykonawcy i użytkownikowi.</p>
        <a class="rk-diameter-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt instalacji ogrzewania podłogowego</a>
        <small class="rk-diameter-link-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-diameter-section" id="rk-diameter-references">
      <span class="rk-diameter-eyebrow">Podstawa techniczna i granice modelu</span>
      <h2 class="rk-diameter-section-title">Źródła i zakres odpowiedzialności</h2>
      <p class="rk-diameter-lead">Normy systemów płaszczyznowych rozdzielają określanie mocy, projektowanie i wykonanie. Nie należy przypisywać im jednej średnicy, długości, prędkości ani spadku ciśnienia właściwego dla każdej pętli.</p>

      <div class="rk-diameter-source-grid">
        <article class="rk-diameter-source-card"><a href="https://www.iso.org/standard/74683.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-2:2021 wraz z Amd 1:2023 — określanie mocy</a><p>Oficjalna karta wydania dotyczącego wyznaczania strumienia ciepła, temperatur powierzchni i zależności charakterystycznych wodnych systemów ogrzewania oraz chłodzenia.</p></article>
        <article class="rk-diameter-source-card"><a href="https://www.iso.org/standard/74684.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-3:2021 wraz z Amd 1:2023 — projektowanie i wymiarowanie</a><p>Oficjalna karta wydania ustanawiającego metodę projektowania i wymiarowania wbudowanych systemów płaszczyznowych.</p></article>
        <article class="rk-diameter-source-card"><a href="https://www.iso.org/standard/74685.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-5:2021 wraz z Amd 1:2023 — wykonanie</a><p>Oficjalna karta wydania obejmującego wymagania instalacyjne dla elementów tworzących ogrzewaną lub chłodzoną powierzchnię.</p></article>
      </div>

      <div class="rk-diameter-responsibility">
        <p><strong>Status źródeł:</strong> oficjalne karty ISO wskazują, że wymienione wydania z 2021 r. mają poprawki Amd 1:2023 i we wrześniu 2026 r. pozostają opublikowane, ale znajdują się w przeglądzie systematycznym.</p>
        <p><strong>Zakres kalkulatora:</strong> narzędzie wykorzystuje równanie Darcy’ego–Weisbacha, modelowy współczynnik tarcia, nominalne średnice oraz przybliżone właściwości wody. Nie jest tabelą hydrauliczną konkretnego producenta i nie obejmuje glikolu.</p>
        <p><strong>Odpowiedzialność:</strong> artykuł ma charakter edukacyjny. Nie jest projektem wykonawczym, instrukcją producenta, protokołem uruchomienia ani oceną istniejącej instalacji. Stan techniczny materiału zweryfikowano 11 września 2026 r.</p>
      </div>
    </section>

    <section class="rk-diameter-section rk-diameter-section-soft" id="rk-diameter-faq">
      <span class="rk-diameter-eyebrow">Najczęstsze pytania inwestorów i wykonawców</span>
      <h2 class="rk-diameter-section-title">FAQ — średnice rur w ogrzewaniu podłogowym</h2>
      <div class="rk-diameter-faq">
        <details><summary>Jaka średnica rury jest najlepsza do ogrzewania podłogowego?</summary><div class="rk-diameter-faq-answer"><p>Nie ma jednej najlepszej średnicy. W domowych pętlach często stosuje się 16×2 mm, ale wybór 17×2 lub 20×2 może wynikać z większego przepływu, długości i oporu. Trzeba porównać również podział powierzchni, wykonanie oraz punkt pracy pompy.</p></div></details>
        <details><summary>Czy rura 16×2 mm wystarczy do podłogówki z pompą ciepła?</summary><div class="rk-diameter-faq-answer"><p>Może wystarczyć. Minimalny przepływ pompy ciepła dotyczy całego urządzenia, a nie jednej pętli. Dla każdej gałęzi oblicza się jej moc, przepływ, długość i opór. Jeżeli wynik jest zbyt wysoki, można zmienić podział pętli lub średnicę.</p></div></details>
        <details><summary>Czym różni się rura 16×2 od 17×2 mm?</summary><div class="rk-diameter-faq-answer"><p>Przy nominalnej ściance 2 mm ich średnice wewnętrzne wynoszą około 12 i 13 mm. Wnętrze 13 mm ma około 17% większe pole przekroju, dlatego przy tym samym przepływie daje mniejszą prędkość i zwykle niższy opór.</p></div></details>
        <details><summary>Czy rura 20 mm jest zawsze lepsza od 16 mm?</summary><div class="rk-diameter-faq-answer"><p>Nie. Większy przekrój ogranicza opór, ale zwiększa objętość, koszt, promień gięcia i wymagania wykonawcze. Jeżeli pętla 16×2 spełnia przyjęte warunki, zastosowanie 20×2 może nie wnieść istotnej korzyści.</p></div></details>
        <details><summary>Jaka jest maksymalna długość pętli dla rury 16×2?</summary><div class="rk-diameter-faq-answer"><p>Nie ma jednej uniwersalnej długości wynikającej wyłącznie ze średnicy. W praktyce autora przyjmuje się zwykle do 100 m razem z podejściami, lecz każdą pętlę należy sprawdzić dla jej przepływu, medium, armatury i dostępnej różnicy ciśnień.</p></div></details>
        <details><summary>Jak obliczyć przepływ w rurze ogrzewania podłogowego?</summary><div class="rk-diameter-faq-answer"><p>Dla wody można użyć przybliżenia: przepływ w l/h wynosi około 0,86 razy moc pętli w watach podzielona przez projektowe ΔT w kelwinach. Dopiero dla tego przepływu oblicza się prędkość oraz spadek ciśnienia wybranej rury.</p></div></details>
        <details><summary>Czy 20 kPa jest normową granicą oporu pętli?</summary><div class="rk-diameter-faq-answer"><p>Nie należy przedstawiać tej wartości jako uniwersalnej granicy normowej. Może być przyjętym celem projektowym ułatwiającym regulację i dobór pompy, ale dopuszczalność punktu pracy zależy od pełnej instalacji, zaworów i charakterystyki urządzenia.</p></div></details>
        <details><summary>Czy w jednym rozdzielaczu można stosować różne średnice pętli?</summary><div class="rk-diameter-faq-answer"><p>Technicznie może to być możliwe, jeżeli rozdzielacz, złączki i system są kompatybilne, a każda gałąź ma obliczony przepływ oraz opór. Nie powinno się jednak mieszać średnic bez udokumentowanego powodu i kompletu nastaw.</p></div></details>
        <details><summary>Co jest ważniejsze: średnica zewnętrzna czy wewnętrzna?</summary><div class="rk-diameter-faq-answer"><p>Dla prędkości, pojemności i oporu hydraulicznego najważniejsza jest rzeczywista średnica wewnętrzna. Średnica zewnętrzna pozostaje ważna dla emisji systemu, mocowania, promieni gięcia, przyłączy i konstrukcji podłogi.</p></div></details>
        <details><summary>Czy średnicę zasilania rozdzielacza dobiera się tak samo jak pętle?</summary><div class="rk-diameter-faq-answer"><p>Nie. Pojedyncza pętla przenosi swój przepływ, natomiast przewód zasilający rozdzielacz transportuje sumę strumieni wielu pętli. Magistralę oblicza się osobno pod względem przepływu, prędkości, straty ciśnienia i drogi krytycznej.</p></div></details>
      </div>
    </section>

    <section class="rk-diameter-author" id="rk-diameter-author">
      <span class="rk-diameter-eyebrow">Opracowanie eksperckie</span>
      <h2 class="rk-diameter-author-title">Autor i weryfikacja merytoryczna</h2>
      <div class="rk-diameter-author-layout">
        <aside class="rk-diameter-author-side">
          <div class="rk-diameter-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i specjalista HVAC" width="400" height="400" loading="lazy" decoding="async"></div>
          <div class="rk-diameter-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
          <p class="rk-diameter-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
          <div class="rk-diameter-author-social" aria-label="Profile autora">
            <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego">in</a>
            <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Facebook Projekt Ogrzewania">f</a>
            <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Profil Projekt HVAC w serwisie X">X</a>
          </div>
        </aside>
        <div class="rk-diameter-author-main">
          <div class="rk-diameter-author-quote">„Średnica nie jest odpowiedzią na pytanie o źródło ciepła. Jest odpowiedzią na konkretny przepływ, długość i dostępne ciśnienie w obliczonej drodze hydraulicznej.”</div>
          <p>Robert Kucharski opracowuje projekty ogrzewania podłogowego, obliczenia cieplne i hydrauliczne oraz dokumentację wykonawczą dla inwestorów i wykonawców. W projekcie łączy OZC, powierzchnie czynne, trasy pętli, średnice, przepływy, spadki ciśnienia, rozdzielacze i charakterystykę pompy.</p>
          <p>W tej aktualizacji usunięto automatyczne przypisanie rury 20 mm do pompy ciepła, limit 20 kPa przedstawiany jako normę, obowiązkową różnicę długości do 10–15%, sztywne przypisanie ΔT do rodzaju źródła oraz nieudokumentowane procenty kosztów i oszczędności.</p>
          <p>Kalkulator nie udaje tabeli producenta ani projektu. Pokazuje konsekwencje zmiany średnicy wewnętrznej w jawnym modelu hydraulicznym, a grafika wyjaśnia, dlaczego średnica jest tylko jednym z elementów całego łańcucha.</p>
          <p>Autor publikuje również w portalach <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a> i <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>. <a href="https://projekt-ogrzewania.pl/author/admin3399/">Zobacz pozostałe artykuły Roberta Kucharskiego</a>.</p>
          <div class="rk-diameter-author-facts">
            <div class="rk-diameter-author-fact"><strong>Zakres</strong>ogrzewanie podłogowe, hydraulika i źródła niskotemperaturowe</div>
            <div class="rk-diameter-author-fact"><strong>Metoda pracy</strong>OZC, model emisji, przepływy, opory i punkt pracy pompy</div>
            <div class="rk-diameter-author-fact"><strong>Aktualizacja</strong>stan techniczny materiału sprawdzony 11 września 2026 r.</div>
          </div>
        </div>
      </div>
    </section>
  </div>
</article>

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

  var root = document.getElementById('rk-diameter-guide');
  if (!root) return;

  var mode = 'power';
  var selectedPipe = 'p16';
  var visibleSeries = { p16: true, p17: true, p20: true, custom: true };
  var lastModel = null;
  var resizeTimer = null;
  var ns = 'http://www.w3.org/2000/svg';

  var pipeDefinitions = {
    p16: { name: '16×2', diameter: 12, className: 'is-p16' },
    p17: { name: '17×2', diameter: 13, className: 'is-p17' },
    p20: { name: '20×2', diameter: 16, className: 'is-p20' },
    custom: { name: 'własna rura', diameter: 14, className: 'is-custom' }
  };

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

  function each(nodes, callback) {
    Array.prototype.forEach.call(nodes, callback);
  }

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

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

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

  function formatFlexible(value, digits) {
    if (!isFiniteNumber(value)) return '—';
    return value.toLocaleString('pl-PL', {
      minimumFractionDigits: 0,
      maximumFractionDigits: digits
    });
  }

  function densityOfWater(temperature) {
    var numerator = (temperature + 288.9414) * Math.pow(temperature - 3.9863, 2);
    var denominator = 508929.2 * (temperature + 68.12963);
    return 1000 * (1 - numerator / denominator);
  }

  function viscosityOfWater(temperature) {
    return 2.414e-5 * Math.pow(10, 247.8 / (temperature + 133.15));
  }

  function frictionFactor(reynolds, diameterMetres) {
    if (reynolds <= 0) return 0;
    if (reynolds < 2300) return 64 / reynolds;
    var roughness = 0.000007;
    var turbulent = 0.25 / Math.pow(Math.log10(roughness / (3.7 * diameterMetres) + 5.74 / Math.pow(reynolds, 0.9)), 2);
    if (reynolds >= 4000) return turbulent;
    var laminar = 64 / reynolds;
    var blend = (reynolds - 2300) / 1700;
    return laminar + (turbulent - laminar) * blend;
  }

  function calculatePipe(flowHour, diameterMm, length, extraLoss, density, viscosity) {
    var diameter = diameterMm / 1000;
    var flowCubic = flowHour / 3600000;
    var area = Math.PI * diameter * diameter / 4;
    var velocity = area > 0 ? flowCubic / area : 0;
    var reynolds = viscosity > 0 ? density * velocity * diameter / viscosity : 0;
    var friction = frictionFactor(reynolds, diameter);
    var gradient = friction * density * velocity * velocity / (2 * diameter);
    var pipeLoss = gradient * length / 1000;
    var totalLoss = pipeLoss + extraLoss;
    var head = totalLoss * 1000 / (density * 9.80665);
    var volume = area * length * 1000;
    return {
      diameter: diameterMm,
      area: area,
      velocity: velocity,
      reynolds: reynolds,
      friction: friction,
      gradient: gradient,
      pipeLoss: pipeLoss,
      totalLoss: totalLoss,
      head: head,
      volume: volume
    };
  }

  function setStatus(message, type, isAlert) {
    var status = byId('rk-diameter-calculator-status');
    if (!status) return;
    status.textContent = message;
    status.className = 'rk-diameter-status ' + type;
    status.setAttribute('role', isAlert ? 'alert' : 'status');
  }

  function collectInput() {
    var length = readNumber('rk-diameter-loop-length');
    var waterTemperature = readNumber('rk-diameter-water-temp');
    var extraLoss = readNumber('rk-diameter-extra-loss');
    var customDiameter = readNumber('rk-diameter-custom-id');
    var lossLimit = readNumber('rk-diameter-loss-limit');
    var flowHour;
    var equation;

    if (mode === 'power') {
      var power = readNumber('rk-diameter-power');
      var delta = readNumber('rk-diameter-delta');
      if (!isFiniteNumber(power) || power <= 0 || !isFiniteNumber(delta) || delta <= 0) {
        return { error: 'Wprowadź dodatnią moc pętli i projektowe ΔT większe od zera.' };
      }
      flowHour = 0.86 * power / delta;
      equation = '0,86 × ' + formatFlexible(power, 0) + ' W ÷ ' + formatFlexible(delta, 1) + ' K = ' + formatFlexible(flowHour, 0) + ' l/h = ' + formatNumber(flowHour / 60, 2) + ' l/min.';
    } else {
      var directFlow = readNumber('rk-diameter-direct-flow');
      if (!isFiniteNumber(directFlow) || directFlow <= 0) {
        return { error: 'Wprowadź dodatni przepływ pętli w litrach na minutę.' };
      }
      flowHour = directFlow * 60;
      equation = formatNumber(directFlow, 2) + ' l/min × 60 = ' + formatFlexible(flowHour, 0) + ' l/h.';
    }

    if (!isFiniteNumber(length) || length <= 0) return { error: 'Długość pętli musi być większa od zera.' };
    if (!isFiniteNumber(waterTemperature) || waterTemperature < 5 || waterTemperature > 90) return { error: 'Podaj średnią temperaturę wody od 5 do 90°C.' };
    if (!isFiniteNumber(extraLoss) || extraLoss < 0) return { error: 'Dodatkowe straty nie mogą być ujemne.' };
    if (!isFiniteNumber(customDiameter) || customDiameter <= 0) return { error: 'Własna średnica wewnętrzna musi być większa od zera.' };
    if (!isFiniteNumber(lossLimit) || lossLimit <= 0) return { error: 'Przyjęty limit całej drogi musi być większy od zera.' };

    return {
      flowHour: flowHour,
      flowMinute: flowHour / 60,
      equation: equation,
      length: length,
      waterTemperature: waterTemperature,
      extraLoss: extraLoss,
      customDiameter: customDiameter,
      lossLimit: lossLimit
    };
  }

  function setMetric(card, name, value) {
    var target = card.querySelector('[data-rk-diameter-metric="' + name + '"]');
    if (target) target.textContent = value;
  }

  function updatePipeCard(key, result, limit) {
    var card = root.querySelector('[data-rk-diameter-pipe-card="' + key + '"]');
    if (!card) return;
    setMetric(card, 'velocity', formatNumber(result.velocity, 2) + ' m/s');
    setMetric(card, 'gradient', formatFlexible(result.gradient, 0) + ' Pa/m');
    setMetric(card, 'pipe-loss', formatNumber(result.pipeLoss, 1) + ' kPa');
    setMetric(card, 'total-loss', formatNumber(result.totalLoss, 1) + ' kPa');
    setMetric(card, 'volume', formatNumber(result.volume, 1) + ' l');
    setMetric(card, 'head', formatNumber(result.head, 2) + ' m');

    var status = card.querySelector('[data-rk-diameter-metric="status"]');
    if (status) {
      if (result.totalLoss <= limit) {
        status.className = 'rk-diameter-pipe-status is-within';
        status.textContent = 'Mieści się we wpisanym limicie ' + formatFlexible(limit, 1) + ' kPa.';
      } else {
        status.className = 'rk-diameter-pipe-status is-over';
        status.textContent = 'Przekracza wpisany limit ' + formatFlexible(limit, 1) + ' kPa.';
      }
    }
    card.classList.toggle('is-selected', key === selectedPipe);
  }

  function updateSelectedButtons() {
    each(root.querySelectorAll('[data-rk-diameter-select-pipe]'), function (button) {
      button.setAttribute('aria-pressed', button.getAttribute('data-rk-diameter-select-pipe') === selectedPipe ? 'true' : 'false');
    });
  }

  function calculate() {
    var input = collectInput();
    if (input.error) {
      setStatus(input.error, 'is-warning', true);
      return;
    }

    var density = densityOfWater(input.waterTemperature);
    var viscosity = viscosityOfWater(input.waterTemperature);
    pipeDefinitions.custom.diameter = input.customDiameter;
    var results = {};
    Object.keys(pipeDefinitions).forEach(function (key) {
      results[key] = calculatePipe(input.flowHour, pipeDefinitions[key].diameter, input.length, input.extraLoss, density, viscosity);
      updatePipeCard(key, results[key], input.lossLimit);
    });

    var customLabel = root.querySelector('[data-rk-diameter-custom-label]');
    if (customLabel) customLabel.textContent = 'Ø wew. ' + formatFlexible(input.customDiameter, 1) + ' mm';
    byId('rk-diameter-result-flow-hour').textContent = formatFlexible(input.flowHour, 0) + ' l/h';
    byId('rk-diameter-result-flow-minute').textContent = formatNumber(input.flowMinute, 2) + ' l/min';
    byId('rk-diameter-result-density').textContent = formatNumber(density, 1) + ' kg/m³';
    byId('rk-diameter-result-viscosity').textContent = formatNumber(viscosity * 1000, 3) + ' mPa·s';
    byId('rk-diameter-live-equation').textContent = input.equation;

    var over = 0;
    Object.keys(results).forEach(function (key) {
      if (results[key].totalLoss > input.lossLimit) over += 1;
    });
    var message = 'Porównano wszystkie rury dla identycznego przepływu. ';
    if (over === 0) message += 'Każdy wariant mieści się we wpisanym limicie całej drogi.';
    if (over > 0) message += over + ' z 4 wariantów przekracza wpisany limit całej drogi.';
    message += ' To kryterium użytkownika, a nie automatyczny limit normowy.';
    setStatus(message, over > 0 ? 'is-warning' : 'is-good', false);

    lastModel = {
      input: input,
      density: density,
      viscosity: viscosity,
      results: results
    };
    updateSelectedButtons();
    drawChart();
  }

  function svgNode(name, attributes, value) {
    var node = document.createElementNS(ns, name);
    Object.keys(attributes || {}).forEach(function (key) {
      node.setAttribute(key, String(attributes[key]));
    });
    if (typeof value === 'string') node.textContent = value;
    return node;
  }

  function niceCeiling(value) {
    if (value <= 0) return 100;
    var exponent = Math.pow(10, Math.floor(Math.log10(value)));
    var scaled = value / exponent;
    var nice = 1;
    if (scaled > 1) nice = 2;
    if (scaled > 2) nice = 5;
    if (scaled > 5) nice = 10;
    return nice * exponent;
  }

  function drawChart() {
    if (!lastModel) return;
    var svg = byId('rk-diameter-pressure-chart');
    var wrap = byId('rk-diameter-chart-wrap');
    if (!svg || !wrap) return;

    while (svg.firstChild) svg.removeChild(svg.firstChild);
    svg.appendChild(svgNode('title', { id: 'rk-diameter-chart-title-svg' }, 'Porównanie oporu rur w funkcji przepływu'));
    var selected = pipeDefinitions[selectedPipe];
    var selectedResult = lastModel.results[selectedPipe];
    var description = 'Krzywe pokazują modelowy opór jednostkowy widocznych rur. Dla ' + selected.name + ' przy ' + formatNumber(lastModel.input.flowMinute, 2) + ' l/min wynik wynosi około ' + formatFlexible(selectedResult.gradient, 0) + ' Pa/m.';
    svg.appendChild(svgNode('desc', { id: 'rk-diameter-chart-desc' }, description));

    var measuredWidth = wrap.clientWidth || 760;
    var width = Math.max(300, Math.min(920, measuredWidth));
    var compact = width < 540;
    var height = compact ? 350 : 420;
    var margin = compact ? { top: 26, right: 14, bottom: 58, left: 58 } : { top: 30, right: 28, bottom: 62, left: 72 };
    var plotWidth = width - margin.left - margin.right;
    var plotHeight = height - margin.top - margin.bottom;
    svg.setAttribute('viewBox', '0 0 ' + width + ' ' + height);

    var currentFlow = lastModel.input.flowMinute;
    var xMax = Math.max(4, Math.ceil(currentFlow * 1.5 * 2) / 2);
    xMax = Math.min(20, xMax);
    if (xMax < currentFlow) xMax = Math.ceil(currentFlow * 2) / 2;
    var activeKeys = Object.keys(pipeDefinitions).filter(function (key) { return visibleSeries[key]; });
    if (activeKeys.length === 0) activeKeys = [selectedPipe];

    var series = {};
    var yObserved = 0;
    activeKeys.forEach(function (key) {
      series[key] = [];
      for (var point = 0; point <= 48; point += 1) {
        var flow = 0.05 + (xMax - 0.05) * point / 48;
        var result = calculatePipe(flow * 60, pipeDefinitions[key].diameter, 1, 0, lastModel.density, lastModel.viscosity);
        series[key].push({ x: flow, y: result.gradient });
        if (result.gradient > yObserved) yObserved = result.gradient;
      }
    });
    var criterionGradient = (lastModel.input.lossLimit - lastModel.input.extraLoss) * 1000 / lastModel.input.length;
    if (criterionGradient > yObserved) yObserved = criterionGradient;
    var yMax = niceCeiling(yObserved * 1.08);

    function xScale(value) {
      return margin.left + value / xMax * plotWidth;
    }
    function yScale(value) {
      return margin.top + plotHeight - value / yMax * plotHeight;
    }

    var gridGroup = svgNode('g', { class: 'rk-diameter-chart-grid' });
    var yTicks = 5;
    for (var yIndex = 0; yIndex <= yTicks; yIndex += 1) {
      var yValue = yMax * yIndex / yTicks;
      var y = yScale(yValue);
      gridGroup.appendChild(svgNode('line', { x1: margin.left, y1: y, x2: width - margin.right, y2: y }));
      gridGroup.appendChild(svgNode('text', { x: margin.left - 9, y: y + 4, 'text-anchor': 'end' }, formatFlexible(yValue, 0)));
    }
    var xTicks = compact ? 4 : 6;
    for (var xIndex = 0; xIndex <= xTicks; xIndex += 1) {
      var xValue = xMax * xIndex / xTicks;
      var x = xScale(xValue);
      gridGroup.appendChild(svgNode('line', { x1: x, y1: margin.top, x2: x, y2: margin.top + plotHeight }));
      gridGroup.appendChild(svgNode('text', { x: x, y: margin.top + plotHeight + 23, 'text-anchor': 'middle' }, formatFlexible(xValue, 1)));
    }
    svg.appendChild(gridGroup);
    svg.appendChild(svgNode('rect', { class: 'rk-diameter-chart-frame', x: margin.left, y: margin.top, width: plotWidth, height: plotHeight }));

    if (criterionGradient > 0) {
      var criterionY = yScale(criterionGradient);
      svg.appendChild(svgNode('line', { class: 'rk-diameter-chart-criterion', x1: margin.left, y1: criterionY, x2: width - margin.right, y2: criterionY }));
      if (!compact) svg.appendChild(svgNode('text', { class: 'rk-diameter-chart-criterion-label', x: width - margin.right - 4, y: criterionY - 7, 'text-anchor': 'end' }, 'limit po odjęciu strat dodatkowych'));
    }

    activeKeys.forEach(function (key) {
      var path = '';
      series[key].forEach(function (point, index) {
        path += (index === 0 ? 'M' : 'L') + xScale(point.x).toFixed(2) + ',' + yScale(point.y).toFixed(2);
      });
      var className = 'rk-diameter-chart-curve ' + pipeDefinitions[key].className;
      if (key === selectedPipe) className += ' is-selected';
      svg.appendChild(svgNode('path', { class: className, d: path, fill: 'none' }));
    });

    var guideX = xScale(currentFlow);
    svg.appendChild(svgNode('line', { class: 'rk-diameter-chart-guide', x1: guideX, y1: margin.top, x2: guideX, y2: margin.top + plotHeight }));
    activeKeys.forEach(function (key) {
      var result = lastModel.results[key];
      var circleClass = 'rk-diameter-chart-point ' + pipeDefinitions[key].className;
      if (key === selectedPipe) circleClass += ' is-selected';
      var point = svgNode('circle', {
        class: circleClass,
        cx: guideX,
        cy: yScale(result.gradient),
        r: key === selectedPipe ? 6 : 4
      });
      point.appendChild(svgNode('title', {}, pipeDefinitions[key].name + ': ' + formatFlexible(result.gradient, 0) + ' Pa/m przy ' + formatNumber(currentFlow, 2) + ' l/min'));
      svg.appendChild(point);
    });

    svg.appendChild(svgNode('text', { class: 'rk-diameter-chart-axis-title', x: margin.left + plotWidth / 2, y: height - 12, 'text-anchor': 'middle' }, 'Przepływ pętli [l/min]'));
    svg.appendChild(svgNode('text', { class: 'rk-diameter-chart-axis-title', x: 16, y: margin.top + plotHeight / 2, transform: 'rotate(-90 16 ' + (margin.top + plotHeight / 2) + ')', 'text-anchor': 'middle' }, 'Opór jednostkowy [Pa/m]'));

    var reading = byId('rk-diameter-chart-reading');
    if (reading) {
      reading.innerHTML = '<strong>Wybrana rura ' + selected.name + ':</strong> przy ' + formatNumber(currentFlow, 2) + ' l/min model wskazuje około ' + formatFlexible(selectedResult.gradient, 0) + ' Pa/m oraz ' + formatNumber(selectedResult.totalLoss, 1) + ' kPa dla całej wpisanej drogi.';
    }
  }

  function setMode(nextMode) {
    mode = nextMode;
    each(root.querySelectorAll('[data-rk-diameter-mode]'), function (button) {
      var active = button.getAttribute('data-rk-diameter-mode') === mode;
      button.setAttribute('aria-selected', active ? 'true' : 'false');
    });
    var powerPanel = byId('rk-diameter-panel-power');
    var flowPanel = byId('rk-diameter-panel-flow');
    if (powerPanel) powerPanel.hidden = mode !== 'power';
    if (flowPanel) flowPanel.hidden = mode !== 'flow';
    calculate();
  }

  each(root.querySelectorAll('[data-rk-diameter-mode]'), function (button) {
    button.addEventListener('click', function () {
      setMode(button.getAttribute('data-rk-diameter-mode'));
    });
  });

  each(root.querySelectorAll('#rk-diameter-calculator-tool input'), function (input) {
    input.addEventListener('input', calculate);
    input.addEventListener('change', calculate);
  });

  each(root.querySelectorAll('[data-rk-diameter-select-pipe]'), function (button) {
    button.addEventListener('click', function () {
      selectedPipe = button.getAttribute('data-rk-diameter-select-pipe');
      if (!visibleSeries[selectedPipe]) visibleSeries[selectedPipe] = true;
      each(root.querySelectorAll('[data-rk-diameter-series]'), function (seriesButton) {
        var key = seriesButton.getAttribute('data-rk-diameter-series');
        seriesButton.setAttribute('aria-pressed', visibleSeries[key] ? 'true' : 'false');
      });
      calculate();
    });
  });

  each(root.querySelectorAll('[data-rk-diameter-series]'), function (button) {
    button.addEventListener('click', function () {
      var key = button.getAttribute('data-rk-diameter-series');
      var visibleCount = Object.keys(visibleSeries).filter(function (pipeKey) { return visibleSeries[pipeKey]; }).length;
      if (visibleSeries[key]) {
        if (visibleCount === 1) {
          setStatus('Na wykresie musi pozostać co najmniej jedna widoczna seria.', 'is-warning', false);
          return;
        }
      }
      visibleSeries[key] = !visibleSeries[key];
      button.setAttribute('aria-pressed', visibleSeries[key] ? 'true' : 'false');
      if (!visibleSeries[key]) {
        if (selectedPipe === key) {
          selectedPipe = Object.keys(visibleSeries).filter(function (pipeKey) { return visibleSeries[pipeKey]; })[0];
        }
      }
      calculate();
    });
  });

  var scenarioData = {
    diameter: {
      headline: 'Mniejsza średnica nie zmniejsza wymaganego przepływu.',
      copy: 'Podnosi prędkość oraz opór dla tego samego strumienia. Jeżeli wynik staje się nieakceptowalny, można zwiększyć średnicę, skrócić pętlę lub inaczej podzielić powierzchnię.',
      parts: {
        load: ['Nie zmienia się', 'Zmiana średnicy rury nie zmienia strat ciepła pomieszczenia.', false],
        flow: ['Pozostaje taki sam', 'Przy tej samej mocy i ΔT bilans energii wymaga tego samego strumienia.', false],
        section: ['Maleje', 'Mniejsza średnica wewnętrzna daje mniejsze pole dostępne dla przepływu.', true],
        velocity: ['Rośnie', 'Ten sam strumień musi przepłynąć przez mniejszy przekrój.', true],
        pressure: ['Rośnie silnie', 'Zależność od przepływu i średnicy jest nieliniowa, dlatego mała zmiana wnętrza może być odczuwalna.', true],
        system: ['Potrzebuje większego H', 'Droga krytyczna wymaga większej dostępnej różnicy ciśnień i może ograniczyć regulację.', true]
      }
    },
    delta: {
      headline: 'Mniejsze ΔT oznacza większy przepływ dla tej samej mocy.',
      copy: 'Większy strumień podnosi prędkość i opór każdej pętli. Zmianę ΔT trzeba więc sprawdzić nie tylko cieplnie, lecz także hydraulicznie w całym układzie.',
      parts: {
        load: ['Nie zmienia się', 'Zapotrzebowanie pomieszczenia pozostaje takie samo.', false],
        flow: ['Rośnie', 'Dla stałej mocy zmniejszenie ΔT wymaga większego przepływu wody.', true],
        section: ['Nie zmienia się', 'Geometria wybranej rury pozostaje bez zmian.', false],
        velocity: ['Rośnie', 'Większy strumień przepływa przez ten sam przekrój.', true],
        pressure: ['Rośnie nieliniowo', 'Większa prędkość zwiększa jednostkową stratę ciśnienia.', true],
        system: ['Większe Q i H', 'Pompa pracuje przy większym przepływie całkowitym i zwykle większej wymaganej różnicy ciśnień.', true]
      }
    },
    length: {
      headline: 'Dłuższa pętla zwiększa stratę całkowitą bez zmiany wymaganego przepływu.',
      copy: 'Prędkość i Pa/m pozostają podobne, jeżeli moc, ΔT i średnica się nie zmieniają. Rośnie jednak liczba metrów, na których ten opór działa.',
      parts: {
        load: ['Nie zmienia się', 'W tym uproszczeniu przypisana moc pętli pozostaje taka sama.', false],
        flow: ['Nie zmienia się', 'Moc i projektowe ΔT nadal wyznaczają ten sam strumień.', false],
        section: ['Nie zmienia się', 'Średnica wewnętrzna rury pozostaje taka sama.', false],
        velocity: ['Nie zmienia się', 'Przy tym samym przepływie i przekroju prędkość jest taka sama.', false],
        pressure: ['Suma rośnie', 'Jednostkowy Pa/m działa na większej długości rury.', true],
        system: ['Potrzebuje większego H', 'Dłuższa droga może stać się gałęzią krytyczną dla pompy i regulacji.', true]
      }
    },
    split: {
      headline: 'Więcej krótszych pętli może zmniejszyć opór każdej gałęzi.',
      copy: 'Całkowity przepływ potrzebny do przeniesienia mocy pozostaje zbliżony, ale dzieli się na większą liczbę równoległych dróg. Trzeba zapewnić odpowiedni rozdzielacz i regulację.',
      parts: {
        load: ['Łącznie bez zmian', 'Zapotrzebowanie całej dzielonej powierzchni pozostaje takie samo.', false],
        flow: ['Na pętlę maleje', 'Sumaryczny strumień rozdziela się pomiędzy większą liczbę gałęzi.', true],
        section: ['Może zostać', 'Mniejszy przepływ pętli może pozwolić zachować tę samą średnicę.', false],
        velocity: ['Na pętlę maleje', 'Każda gałąź przenosi mniejszą część całkowitego strumienia.', true],
        pressure: ['Na pętlę maleje', 'Krótsza długość i mniejszy strumień obniżają opór pojedynczej drogi.', true],
        system: ['Więcej gałęzi', 'Pompa nadal obsługuje sumę przepływów, a rozdzielacz wymaga większej liczby obwodów.', true]
      }
    }
  };

  function setScenario(key) {
    var scenario = scenarioData[key];
    if (!scenario) return;
    each(root.querySelectorAll('[data-rk-diameter-scenario]'), function (button) {
      button.setAttribute('aria-pressed', button.getAttribute('data-rk-diameter-scenario') === key ? 'true' : 'false');
    });
    Object.keys(scenario.parts).forEach(function (componentKey) {
      var card = root.querySelector('[data-rk-diameter-component="' + componentKey + '"]');
      if (!card) return;
      var part = scenario.parts[componentKey];
      var value = card.querySelector('[data-rk-diameter-component-value]');
      var copy = card.querySelector('[data-rk-diameter-component-copy]');
      if (value) value.textContent = part[0];
      if (copy) copy.textContent = part[1];
      card.classList.toggle('is-active', part[2]);
      card.classList.toggle('is-muted', !part[2]);
    });
    var result = byId('rk-diameter-scenario-result');
    if (result) result.innerHTML = '<strong>' + scenario.headline + '</strong><p>' + scenario.copy + '</p>';
  }

  each(root.querySelectorAll('[data-rk-diameter-scenario]'), function (button) {
    button.addEventListener('click', function () {
      setScenario(button.getAttribute('data-rk-diameter-scenario'));
    });
  });

  function scheduleChart() {
    if (resizeTimer) window.clearTimeout(resizeTimer);
    resizeTimer = window.setTimeout(drawChart, 100);
  }

  var chartWrap = byId('rk-diameter-chart-wrap');
  if (chartWrap) {
    if (typeof ResizeObserver !== 'undefined') {
      var observer = new ResizeObserver(scheduleChart);
      observer.observe(chartWrap);
    } else {
      window.addEventListener('resize', scheduleChart);
    }
  }

  setScenario('diameter');
  calculate();
})();
</script>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "description": "Profesjonalne projektowanie ogrzewania podłogowego i poradniki techniczne HVAC.",
      "inLanguage": "pl-PL",
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "potentialAction": {
        "@type": "SearchAction",
        "target": {
          "@type": "EntryPoint",
          "urlTemplate": "https://projekt-ogrzewania.pl/?s={search_term_string}"
        },
        "query-input": "required name=search_term_string"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {
        "@id": "https://projekt-ogrzewania.pl/#logo"
      },
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      }
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/#logo",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/Projekt-ogrzewania-logo-1.jpg",
      "width": 1024,
      "height": 1024,
      "caption": "Projekt Ogrzewania"
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "worksFor": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "affiliation": [
        {
          "@id": "https://remont.biz.pl/#organization"
        },
        {
          "@id": "https://sobir.pl/#organization"
        }
      ],
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "dobór średnic rur",
        "projektowanie hydrauliczne",
        "spadki ciśnienia",
        "pompy obiegowe",
        "równoważenie instalacji"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "ImageObject",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#primaryimage",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/02/Srednice-rur-w-ogrzewaniu-podlogowym.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/02/Srednice-rur-w-ogrzewaniu-podlogowym.webp",
      "width": 945,
      "height": 945,
      "caption": "Średnice rur w ogrzewaniu podłogowym – zależność przepływu i oporu hydraulicznego",
      "representativeOfPage": true,
      "inLanguage": "pl-PL",
      "description": "Wykładowca wyjaśnia oznaczenie rury 16×2 mm oraz zależność pomiędzy średnicą wewnętrzną, przepływem i oporem hydraulicznym."
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#breadcrumb",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Projekt Ogrzewania",
          "item": "https://projekt-ogrzewania.pl/"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Poradniki",
          "item": "https://projekt-ogrzewania.pl/blog/"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Średnice rur w ogrzewaniu podłogowym",
          "item": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#webpage",
      "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/",
      "name": "Średnice rur w ogrzewaniu podłogowym – 16, 17 czy 20 mm i jak dobrać przekrój?",
      "description": "Średnice rur w ogrzewaniu podłogowym: porównaj 16×2, 17×2 i 20×2. Policz przepływ, prędkość oraz spadek ciśnienia pętli w kalkulatorze online.",
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/#website"
      },
      "breadcrumb": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#breadcrumb"
      },
      "primaryImageOfPage": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#primaryimage"
      },
      "datePublished": "2026-02-24T10:52:01+00:00",
      "dateModified": "2026-09-11T00:00:00+00:00",
      "inLanguage": "pl-PL",
      "speakable": {
        "@type": "SpeakableSpecification",
        "cssSelector": [
          "#rk-diameter-answer .rk-diameter-answer",
          "#rk-diameter-flow .rk-diameter-equation-box",
          "#rk-diameter-conclusions .rk-diameter-answer"
        ]
      }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#article",
      "mainEntityOfPage": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#webpage"
      },
      "headline": "Średnice rur w ogrzewaniu podłogowym – 16, 17 czy 20 mm i jak dobrać przekrój?",
      "description": "Średnice rur w ogrzewaniu podłogowym: porównaj 16×2, 17×2 i 20×2. Policz przepływ, prędkość oraz spadek ciśnienia pętli w kalkulatorze online.",
      "image": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#primaryimage"
      },
      "author": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "publisher": {
        "@id": "https://projekt-ogrzewania.pl/#organization"
      },
      "datePublished": "2026-02-24T10:52:01+00:00",
      "dateModified": "2026-09-11T00:00:00+00:00",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "wordCount": 4843,
      "timeRequired": "PT38M",
      "articleSection": [
        "Oznaczenia i średnica wewnętrzna rury",
        "Przepływ, prędkość i spadek ciśnienia",
        "Porównanie rur 16×2, 17×2 i 20×2 mm",
        "Długość pętli, pompa obiegowa i równoważenie",
        "Wykonanie oraz lista kontrolna"
      ],
      "keywords": [
        "średnice rur w ogrzewaniu podłogowym",
        "jaka średnica rury do ogrzewania podłogowego",
        "rura 16×2 czy 17×2 do podłogówki",
        "rura 16 mm czy 20 mm do podłogówki",
        "średnica rury do podłogówki z pompą ciepła",
        "średnica wewnętrzna rury PEX",
        "opór hydrauliczny rury 16×2",
        "jak obliczyć przepływ pętli podłogówki",
        "maksymalna długość pętli rura 16×2"
      ],
      "citation": [
        "https://www.iso.org/standard/74683.html",
        "https://www.iso.org/standard/74684.html",
        "https://www.iso.org/standard/74685.html"
      ],
      "about": [
        {
          "@type": "Thing",
          "name": "Wodne ogrzewanie podłogowe"
        },
        {
          "@type": "Thing",
          "name": "Średnica wewnętrzna rury"
        },
        {
          "@type": "Thing",
          "name": "Spadek ciśnienia"
        },
        {
          "@type": "Thing",
          "name": "Przepływ w pętli grzewczej"
        },
        {
          "@type": "Thing",
          "name": "Równoważenie hydrauliczne"
        }
      ],
      "hasPart": [
        {
          "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#calculator-app"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#dependency-app"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#howto"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#checklist-schema"
        },
        {
          "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#faq-schema"
        }
      ],
      "alternativeHeadline": "Jaka średnica rury do podłogówki: 16×2, 17×2 czy 20×2 mm",
      "educationalLevel": "Poziom średniozaawansowany",
      "learningResourceType": [
        "poradnik techniczny",
        "kalkulator hydrauliczny",
        "interaktywna grafika edukacyjna"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#calculator-app",
      "name": "Kalkulator średnicy rury ogrzewania podłogowego",
      "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-calculator",
      "description": "Kalkulator porównuje prędkość, opór jednostkowy, stratę ciśnienia, wysokość podnoszenia i pojemność rur 16×2, 17×2, 20×2 oraz własnej średnicy wewnętrznej dla tego samego przepływu pętli.",
      "applicationCategory": "EducationalApplication",
      "applicationSubCategory": "Kalkulator hydrauliczny ogrzewania podłogowego",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      },
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#article"
      },
      "featureList": [
        "przepływ z mocy i projektowego delta T",
        "tryb bezpośredniego przepływu w litrach na minutę",
        "porównanie czterech średnic wewnętrznych",
        "prędkość, liczba Reynoldsa i równanie Darcy’ego–Weisbacha",
        "interaktywny wykres oporu jednostkowego"
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#dependency-app",
      "name": "Interaktywna grafika zależności średnicy, przepływu i oporu",
      "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-graphic",
      "description": "Modułowa grafika pokazuje, jak mniejsza średnica, mniejsze delta T, dłuższa pętla lub podział na więcej pętli zmieniają przepływ, prędkość, spadek ciśnienia i wymagania pompy.",
      "applicationCategory": "EducationalApplication",
      "applicationSubCategory": "Interaktywna grafika edukacyjna",
      "operatingSystem": "Dowolny system z przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "offers": {
        "@type": "Offer",
        "price": "0",
        "priceCurrency": "PLN"
      },
      "creator": {
        "@id": "https://projekt-ogrzewania.pl/#robert-kucharski"
      },
      "isPartOf": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#article"
      },
      "featureList": [
        "cztery scenariusze hydrauliczne",
        "sześć modułów zależności od obciążenia do pompy",
        "widok responsywny dla desktopu i urządzeń mobilnych"
      ]
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#howto",
      "name": "Jak dobrać średnicę rury do ogrzewania podłogowego",
      "description": "Osiem etapów doboru średnicy od obciążenia cieplnego i podziału powierzchni do kontroli pompy, wykonania oraz nastaw.",
      "image": {
        "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#primaryimage"
      },
      "inLanguage": "pl-PL",
      "supply": [
        {
          "@type": "HowToSupply",
          "name": "Projektowe obciążenie cieplne pomieszczeń"
        },
        {
          "@type": "HowToSupply",
          "name": "Rzut z powierzchniami czynnymi i trasami pętli"
        },
        {
          "@type": "HowToSupply",
          "name": "Dane średnicy wewnętrznej i oporów wybranej rury"
        },
        {
          "@type": "HowToSupply",
          "name": "Charakterystyka pompy, rozdzielacza i armatury"
        }
      ],
      "step": [
        {
          "@type": "HowToStep",
          "position": 1,
          "name": "Policz obciążenie pomieszczenia",
          "text": "Wyznacz projektową moc, którą musi przekazać ogrzewana powierzchnia.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-data"
        },
        {
          "@type": "HowToStep",
          "position": 2,
          "name": "Ustal powierzchnię i podział pętli",
          "text": "Wyznacz pola czynne, rozstaw oraz rzeczywiste trasy razem z podejściami.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-data"
        },
        {
          "@type": "HowToStep",
          "position": 3,
          "name": "Przypisz moc i projektowe delta T",
          "text": "Określ moc każdej pętli i różnicę temperatur przyjętą dla całego układu.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-flow"
        },
        {
          "@type": "HowToStep",
          "position": 4,
          "name": "Sprawdź rzeczywistą średnicę wewnętrzną",
          "text": "Odczytaj wymiary i tolerancje z dokumentacji konkretnej rury.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-notation"
        },
        {
          "@type": "HowToStep",
          "position": 5,
          "name": "Oblicz wymagany przepływ",
          "text": "Dla wody powiąż moc pętli z projektowym delta T i wyznacz strumień.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-calculator"
        },
        {
          "@type": "HowToStep",
          "position": 6,
          "name": "Porównaj prędkość i straty ciśnienia",
          "text": "Oblicz opór rury oraz armatury dla każdego rozważanego przekroju.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-results"
        },
        {
          "@type": "HowToStep",
          "position": 7,
          "name": "Sprawdź całą drogę i punkt pracy pompy",
          "text": "Połącz pętlę z przewodami wspólnymi, rozdzielaczem oraz charakterystyką pompy.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-pump"
        },
        {
          "@type": "HowToStep",
          "position": 8,
          "name": "Zweryfikuj wykonanie i zapisz nastawy",
          "text": "Sprawdź promienie gięcia, złączki, próbę szczelności oraz dokumentację przepływów.",
          "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-installation"
        }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#checklist-schema",
      "name": "Lista kontrolna doboru średnicy rury ogrzewania podłogowego",
      "description": "Czternaście punktów do sprawdzenia przed zakupem rury, zatwierdzeniem średnic i przekazaniem nastaw wykonawcy.",
      "numberOfItems": 14,
      "itemListOrder": "https://schema.org/ItemListOrderAscending",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "OZC pomieszczenia",
          "description": "Czy znana jest projektowa moc, którą ma przekazać podłoga?"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Powierzchnia czynna",
          "description": "Czy wyłączono trwałą zabudowę i sprawdzono wymaganą moc na m²?"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Podział na pętle",
          "description": "Czy każda gałąź ma przypisaną powierzchnię oraz moc?"
        },
        {
          "@type": "ListItem",
          "position": 4,
          "name": "Projektowe ΔT",
          "description": "Czy wartość wynika z koncepcji całego układu, a nie tylko typu źródła?"
        },
        {
          "@type": "ListItem",
          "position": 5,
          "name": "Przepływ pętli",
          "description": "Czy został obliczony z jej mocy i właściwości czynnika?"
        },
        {
          "@type": "ListItem",
          "position": 6,
          "name": "Rzeczywista trasa",
          "description": "Czy długość obejmuje pole grzewcze, oba podejścia i korekty geometrii?"
        },
        {
          "@type": "ListItem",
          "position": 7,
          "name": "Średnica wewnętrzna",
          "description": "Czy pochodzi z karty wybranego produktu?"
        },
        {
          "@type": "ListItem",
          "position": 8,
          "name": "Opór jednostkowy",
          "description": "Czy zweryfikowano go dla przepływu i temperatury obliczeniowej?"
        },
        {
          "@type": "ListItem",
          "position": 9,
          "name": "Armatura",
          "description": "Czy uwzględniono zawory, rozdzielacz i pozostałe elementy drogi?"
        },
        {
          "@type": "ListItem",
          "position": 10,
          "name": "Prędkość",
          "description": "Czy sprawdzono ją jako parametr roboczy, a nie cel do maksymalizacji?"
        },
        {
          "@type": "ListItem",
          "position": 11,
          "name": "Droga krytyczna",
          "description": "Czy ustalono ją z obliczeń, a nie wyłącznie z długości?"
        },
        {
          "@type": "ListItem",
          "position": 12,
          "name": "Punkt pracy pompy",
          "description": "Czy przepływ Q oraz wymagane H porównano z charakterystyką urządzenia?"
        },
        {
          "@type": "ListItem",
          "position": 13,
          "name": "Wykonalność",
          "description": "Czy promień gięcia, mocowania i przyłącza odpowiadają średnicy?"
        },
        {
          "@type": "ListItem",
          "position": 14,
          "name": "Dokumentacja",
          "description": "Czy końcowe średnice, długości, przepływy i nastawy zapisano dla wykonawcy?"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#faq-schema",
      "url": "https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/#rk-diameter-faq",
      "inLanguage": "pl-PL",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Jaka średnica rury jest najlepsza do ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie ma jednej najlepszej średnicy. W domowych pętlach często stosuje się 16×2 mm, ale wybór 17×2 lub 20×2 może wynikać z większego przepływu, długości i oporu. Trzeba porównać również podział powierzchni, wykonanie oraz punkt pracy pompy."
          }
        },
        {
          "@type": "Question",
          "name": "Czy rura 16×2 mm wystarczy do podłogówki z pompą ciepła?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Może wystarczyć. Minimalny przepływ pompy ciepła dotyczy całego urządzenia, a nie jednej pętli. Dla każdej gałęzi oblicza się jej moc, przepływ, długość i opór. Jeżeli wynik jest zbyt wysoki, można zmienić podział pętli lub średnicę."
          }
        },
        {
          "@type": "Question",
          "name": "Czym różni się rura 16×2 od 17×2 mm?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Przy nominalnej ściance 2 mm ich średnice wewnętrzne wynoszą około 12 i 13 mm. Wnętrze 13 mm ma około 17% większe pole przekroju, dlatego przy tym samym przepływie daje mniejszą prędkość i zwykle niższy opór."
          }
        },
        {
          "@type": "Question",
          "name": "Czy rura 20 mm jest zawsze lepsza od 16 mm?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Większy przekrój ogranicza opór, ale zwiększa objętość, koszt, promień gięcia i wymagania wykonawcze. Jeżeli pętla 16×2 spełnia przyjęte warunki, zastosowanie 20×2 może nie wnieść istotnej korzyści."
          }
        },
        {
          "@type": "Question",
          "name": "Jaka jest maksymalna długość pętli dla rury 16×2?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie ma jednej uniwersalnej długości wynikającej wyłącznie ze średnicy. W praktyce autora przyjmuje się zwykle do 100 m razem z podejściami, lecz każdą pętlę należy sprawdzić dla jej przepływu, medium, armatury i dostępnej różnicy ciśnień."
          }
        },
        {
          "@type": "Question",
          "name": "Jak obliczyć przepływ w rurze ogrzewania podłogowego?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Dla wody można użyć przybliżenia: przepływ w l/h wynosi około 0,86 razy moc pętli w watach podzielona przez projektowe ΔT w kelwinach. Dopiero dla tego przepływu oblicza się prędkość oraz spadek ciśnienia wybranej rury."
          }
        },
        {
          "@type": "Question",
          "name": "Czy 20 kPa jest normową granicą oporu pętli?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie należy przedstawiać tej wartości jako uniwersalnej granicy normowej. Może być przyjętym celem projektowym ułatwiającym regulację i dobór pompy, ale dopuszczalność punktu pracy zależy od pełnej instalacji, zaworów i charakterystyki urządzenia."
          }
        },
        {
          "@type": "Question",
          "name": "Czy w jednym rozdzielaczu można stosować różne średnice pętli?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Technicznie może to być możliwe, jeżeli rozdzielacz, złączki i system są kompatybilne, a każda gałąź ma obliczony przepływ oraz opór. Nie powinno się jednak mieszać średnic bez udokumentowanego powodu i kompletu nastaw."
          }
        },
        {
          "@type": "Question",
          "name": "Co jest ważniejsze: średnica zewnętrzna czy wewnętrzna?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Dla prędkości, pojemności i oporu hydraulicznego najważniejsza jest rzeczywista średnica wewnętrzna. Średnica zewnętrzna pozostaje ważna dla emisji systemu, mocowania, promieni gięcia, przyłączy i konstrukcji podłogi."
          }
        },
        {
          "@type": "Question",
          "name": "Czy średnicę zasilania rozdzielacza dobiera się tak samo jak pętle?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Nie. Pojedyncza pętla przenosi swój przepływ, natomiast przewód zasilający rozdzielacz transportuje sumę strumieni wielu pętli. Magistralę oblicza się osobno pod względem przepływu, prędkości, straty ciśnienia i drogi krytycznej."
          }
        }
      ]
    }
  ]
}
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/">Średnice rur do podłogówki – 16, 17 czy 20 mm?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projektowe Obciążenie Cieplne (OZC).</title>
		<link>https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 12:02:50 +0000</pubDate>
				<category><![CDATA[Efektywność cieplna]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[OZC]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[efektywność pompy ciepła]]></category>
		<category><![CDATA[instalacja co projekt]]></category>
		<category><![CDATA[normy pn en 12831]]></category>
		<category><![CDATA[obliczenia ozc]]></category>
		<category><![CDATA[ogrzewanie podłogowe parametry]]></category>
		<category><![CDATA[ogrzewanie podłogowe projekt]]></category>
		<category><![CDATA[ozc]]></category>
		<category><![CDATA[pompa ciepła projekt]]></category>
		<category><![CDATA[projekt instalacji grzewczej]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[projektowe obciążenie cieplne]]></category>
		<category><![CDATA[rozstaw rur podłogówki]]></category>
		<category><![CDATA[straty ciepła]]></category>
		<category><![CDATA[strumień ciepła podłogówka]]></category>
		<category><![CDATA[zapotrzebowanie na ciepło]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3460</guid>

					<description><![CDATA[<p>Wiele instalacji grzewczych powstaje na podstawie przybliżeń, a nie rzeczywistych danych, co prowadzi do wysokich rachunków i problemów z komfortem cieplnym. Tymczasem Projektowe Obciążenie Cieplne (OZC) to kluczowy element, który pozwala precyzyjnie określić, ile energii potrzebuje Twój dom, aby utrzymać komfort nawet podczas największych mrozów. Od tej wartości zależy dobór rozstawu rur, temperatura zasilania oraz efektywność pompy ciepła. W tym artykule pokazujemy krok po kroku, jak OZC wpływa na projekt ogrzewania podłogowego i dlaczego jego prawidłowe obliczenie decyduje o trwałości, oszczędności i niezawodności całego systemu.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">Projektowe Obciążenie Cieplne (OZC).</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #0f172a;
    --rk-intro-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-green: #059669;
    --rk-intro-green-bg: #ecfdf5;
    --rk-intro-red: #dc2626;
    --rk-intro-red-bg: #fef2f2;
    --rk-intro-gold: #d97706;
    --rk-intro-gold-bg: #fffbeb;
    --rk-intro-gray: #64748b;
    --rk-intro-border: #cbd5e1;
    --rk-intro-bg: #ffffff;
}

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

/* Sekcja Nagłówkowa */
.rk-intro-header {
    background: linear-gradient(135deg, var(--rk-intro-dark) 0%, #1e293b 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-intro-blue);
    position: relative;
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-intro-title {
    font-size: 32px;
    font-weight: 900;
    line-height: 1.25;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-intro-title span { color: #38bdf8; }

/* Typografia Wstępu */
.rk-intro-lead {
    font-size: 17px;
    line-height: 1.8;
    color: #e2e8f0;
    margin: 0;
    font-weight: 400;
}

.rk-intro-lead strong {
    color: #ffffff;
    font-weight: 800;
    background: rgba(2, 132, 199, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

.rk-intro-link {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-intro-link:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Symulator Interaktywny */
.rk-intro-interactive {
    padding: 45px 50px;
    background: #f8fafc;
}

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

/* Przełącznik */
.rk-switcher-box {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-app-toggle {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 550px;
}

.rk-toggle-btn {
    flex: 1;
    position: relative;
    z-index: 2;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    border: none;
    background: transparent;
    color: #64748b;
    cursor: pointer;
    border-radius: 99px;
    transition: color 0.3s ease;
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-toggle-btn.active {
    color: #ffffff;
}

.rk-toggle-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-intro-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-toggle[data-mode="pro"] .rk-toggle-glider {
    transform: translateX(100%);
    background: var(--rk-intro-green);
}

/* Dashboard Wyników */
.rk-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 2px solid var(--rk-intro-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 40px;
    align-items: center;
    transition: all 0.4s ease;
}

.rk-dashboard.mode-amateur {
    border-color: var(--rk-intro-red-bg);
    box-shadow: 0 15px 35px -10px rgba(220, 38, 38, 0.12);
}

.rk-dashboard.mode-pro {
    border-color: var(--rk-intro-green-bg);
    box-shadow: 0 15px 35px -10px rgba(5, 150, 105, 0.12);
}

/* SVG Animacje */
.rk-svg-stage {
    width: 100%;
    max-width: 180px;
    margin: 0 auto;
    background: var(--rk-intro-dark);
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-svg-stage svg {
    width: 100%;
    height: auto;
    display: block;
}

/* Animacje wspólne i specyficzne */
.anim-house { transition: fill 0.5s; }
.anim-thermometer-fill { transform-origin: bottom; transition: transform 1s cubic-bezier(0.4, 0, 0.2, 1), fill 0.5s; }
.anim-coin { opacity: 0; transition: opacity 0.3s, transform 0.5s; }

.mode-amateur .anim-house { fill: #334155; }
.mode-amateur .anim-thermometer-fill { transform: scaleY(0.3); fill: var(--rk-intro-blue); }
.mode-amateur .anim-coin { animation: coinDrop 1.5s infinite linear; }
.mode-amateur .anim-coin:nth-child(2) { animation-delay: 0.5s; }
.mode-amateur .anim-coin:nth-child(3) { animation-delay: 1s; }

.mode-pro .anim-house { fill: #1e293b; stroke: var(--rk-intro-green); stroke-width: 2; animation: shieldPulse 2s infinite alternate; }
.mode-pro .anim-thermometer-fill { transform: scaleY(0.85); fill: var(--rk-intro-green); }
.mode-pro .anim-coin { opacity: 1; transform: translateY(0); fill: var(--rk-intro-gold); }

@keyframes coinDrop {
    0% { opacity: 0; transform: translateY(-20px); fill: #ef4444; }
    20% { opacity: 1; }
    80% { opacity: 1; }
    100% { opacity: 0; transform: translateY(30px); fill: #ef4444; }
}

@keyframes shieldPulse {
    0% { filter: drop-shadow(0 0 0 rgba(5, 150, 105, 0)); }
    100% { filter: drop-shadow(0 0 10px rgba(5, 150, 105, 0.4)); }
}

/* Kafelki z danymi */
.rk-data-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-tile {
    background: #f1f5f9;
    padding: 20px;
    border-radius: 16px;
    border-left: 4px solid transparent;
    transition: all 0.3s ease;
}

.mode-amateur .rk-tile { border-left-color: var(--rk-intro-red); background: var(--rk-intro-red-bg); }
.mode-pro .rk-tile { border-left-color: var(--rk-intro-green); background: var(--rk-intro-green-bg); }

.rk-tile-label {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 6px;
}

.rk-tile-value {
    display: block;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-intro-dark);
}

.rk-tile-sub {
    display: block;
    font-size: 13px;
    color: #94a3b8;
    margin-top: 4px;
    font-weight: 500;
}

@media (max-width: 768px) {
    .rk-intro-header, .rk-intro-interactive { padding: 35px 25px; }
    .rk-intro-title { font-size: 26px; }
    .rk-dashboard { grid-template-columns: 1fr; text-align: center; padding: 25px; gap: 25px; }
    .rk-svg-stage { max-width: 140px; margin-bottom: 10px; }
    .rk-data-grid { grid-template-columns: 1fr; gap: 12px; }
    .rk-toggle-btn { padding: 12px 10px; font-size: 13px; flex-direction: column; gap: 4px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Projektowe Obciążenie Cieplne (OZC) – Fundament Inwestycji",
    "description": "Czym jest Projektowe Obciążenie Cieplne (OZC) wg normy PN-EN 12831? Zobacz, dlaczego ten parametr decyduje o kosztach pompy ciepła i bezawaryjności podłogówki.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-wstep",
    "name": "Porównanie metod doboru mocy grzewczej budynku",
    "description": "Zestawienie ryzyk i kosztów związanych z doborem instalacji grzewczej szacunkowo ('na oko') w kontraście do rzetelnych inżynierskich obliczeń normatywnych OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne ozc",
      "norma PN-EN 12831",
      "moc pompy ciepła",
      "rozstaw rur podłogówki",
      "koszty eksploatacji budynku"
    ],
    "measurementTechnique": "Analiza wpływu precyzyjnych obliczeń strat ciepła na redukcję przewymiarowania źródła ciepła oraz optymalizację kosztów operacyjnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dobór na oko (szacunkowy): Zwiększa koszty inwestycyjne przez zakup zbyt dużej pompy ciepła oraz podnosi rachunki za prąd z powodu taktowania.",
        "Obliczenia OZC (PN-EN 12831): Optymalizują moc urządzenia, gwarantując najniższe koszty i komfort nawet podczas skrajnych mrozów."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-wstep",
    "name": "Symulator Wpływu OZC na Inwestycję",
    "description": "Interaktywny widżet demonstracyjny obrazujący konsekwencje finansowe i techniczne pominięcia obliczeń Projektowego Obciążenia Cieplnego (OZC) podczas budowy.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-container" id="rk-ozc-intro-app">
    <!-- Wstęp Merytoryczny -->
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
            Fundament Instalacji
        </div>
        <h2 class="rk-intro-title">Projektowe Obciążenie Cieplne <span>(OZC)</span></h2>
        <p class="rk-intro-lead">
            To kluczowy parametr inżynieryjny definiowany przez <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/" class="rk-intro-link">normę PN-EN 12831</a>, określający maksymalną ilość energii cieplnej, jaką należy dostarczyć do budynku w ciągu sekundy (wyrażaną w watach lub kilowatach), aby utrzymać zadaną temperaturę wewnętrzną podczas skrajnie niskich temperatur zewnętrznych.
            <br><br>
            Prawidłowo obliczone <strong>OZC stanowi absolutny fundament projektowania</strong> systemów grzewczych. To ono decyduje o mocy <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-intro-link">pompy ciepła</a>, dokładnym <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" class="rk-intro-link">rozstawie rur ogrzewania podłogowego</a> oraz rzeczywistych kosztach eksploatacji budynku przez dziesięciolecia.
        </p>
    </div>

    <!-- Symulator Interaktywny -->
    <div class="rk-intro-interactive">
        <h3 class="rk-intro-section-title">Dlaczego ignorowanie OZC to najdroższy błąd inwestora?</h3>
        
        <div class="rk-switcher-box">
            <div class="rk-app-toggle" id="introSwitchContainer" data-mode="amateur">
                <div class="rk-toggle-glider" id="introGlider"></div>
                <button class="rk-toggle-btn active" data-target="amateur">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    Dobór &#8222;Na oko&#8221;
                </button>
                <button class="rk-toggle-btn" data-target="pro">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    Projekt OZC (PN-EN)
                </button>
            </div>
        </div>

        <div class="rk-dashboard mode-amateur" id="introDashboard">
            <div class="rk-svg-stage">
                <!-- SVG: Dom + Termometr + Pieniądze -->
                <svg viewBox="0 0 100 100">
                    <!-- Dom -->
                    <path class="anim-house" d="M 10 50 L 50 15 L 90 50 L 90 90 L 10 90 Z" fill="#334155" />
                    <rect x="40" y="60" width="20" height="30" fill="#0f172a" />
                    <!-- Termometr -->
                    <rect x="20" y="30" width="8" height="40" rx="4" fill="#1e293b" />
                    <circle cx="24" cy="70" r="8" fill="#1e293b" />
                    <rect class="anim-thermometer-fill" x="22" y="32" width="4" height="38" rx="2" />
                    <circle cx="24" cy="70" r="5" class="anim-thermometer-fill" />
                    <!-- Pieniądze / Utrata -->
                    <circle class="anim-coin" cx="75" cy="40" r="4" />
                    <circle class="anim-coin" cx="80" cy="55" r="4" />
                    <circle class="anim-coin" cx="70" cy="70" r="4" />
                </svg>
            </div>
            
            <div class="rk-data-grid">
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl1">Koszty inwestycyjne</span>
                    <span class="rk-tile-value" id="dynVal1">Drastycznie zawyżone</span>
                    <span class="rk-tile-sub" id="dynSub1">Przewymiarowana pompa ciepła</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl2">Ryzyko w czasie mrozów</span>
                    <span class="rk-tile-value" id="dynVal2">Niedogrzanie budynku</span>
                    <span class="rk-tile-sub" id="dynSub2">Zbyt rzadki rozstaw rur</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl3">Zużycie prądu</span>
                    <span class="rk-tile-value" id="dynVal3">Wysokie (Taktowanie)</span>
                    <span class="rk-tile-sub" id="dynSub3">Sprężarka pracuje skokowo</span>
                </div>
                <div class="rk-tile">
                    <span class="rk-tile-label" id="dynLbl4">Bezpieczeństwo</span>
                    <span class="rk-tile-value" id="dynVal4">Loteria wykonawcza</span>
                    <span class="rk-tile-sub" id="dynSub4">Brak twardych danych</span>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w strukturze błędu)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-ozc-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener edukacyjny oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Przełącznik)
    const switchContainer = document.getElementById('introSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('introDashboard');
    
    // Elementy DOM do podmiany tekstu
    const v1 = document.getElementById('dynVal1'); const s1 = document.getElementById('dynSub1');
    const v2 = document.getElementById('dynVal2'); const s2 = document.getElementById('dynSub2');
    const v3 = document.getElementById('dynVal3'); const s3 = document.getElementById('dynSub3');
    const v4 = document.getElementById('dynVal4'); const s4 = document.getElementById('dynSub4');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Animacja przełącznika
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const targetMode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', targetMode);

            // Aktualizacja treści i klas kontenera SVG/Dashboardu
            if (targetMode === 'pro') {
                dashboard.className = 'rk-dashboard mode-pro';
                
                v1.textContent = "Zoptymalizowane"; v1.style.color = "var(--rk-intro-green)";
                s1.textContent = "Idealnie dobrana moc PC";
                
                v2.textContent = "Pełny komfort cieplny"; v2.style.color = "var(--rk-intro-green)";
                s2.textContent = "Rozstaw obliczony matematycznie";
                
                v3.textContent = "Minimalne (Wysokie COP)"; v3.style.color = "var(--rk-intro-green)";
                s3.textContent = "Stabilna praca inwertera";
                
                v4.textContent = "100% Gwarancji"; v4.style.color = "var(--rk-intro-green)";
                s4.textContent = "Instalacja oparta na fizyce";

            } else {
                dashboard.className = 'rk-dashboard mode-amateur';
                
                v1.textContent = "Drastycznie zawyżone"; v1.style.color = "var(--rk-intro-dark)";
                s1.textContent = "Przewymiarowana pompa ciepła";
                
                v2.textContent = "Niedogrzanie budynku"; v2.style.color = "var(--rk-intro-dark)";
                s2.textContent = "Zbyt rzadki rozstaw rur";
                
                v3.textContent = "Wysokie (Taktowanie)"; v3.style.color = "var(--rk-intro-dark)";
                s3.textContent = "Sprężarka pracuje skokowo";
                
                v4.textContent = "Loteria wykonawcza"; v4.style.color = "var(--rk-intro-dark)";
                s4.textContent = "Brak twardych danych";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-tsim-dark: #0f172a;
    --rk-tsim-panel: #1e293b;
    --rk-tsim-blue: #0284c7;
    --rk-tsim-blue-light: #38bdf8;
    --rk-tsim-frost: #bae6fd;
    --rk-tsim-red: #ef4444;
    --rk-tsim-orange: #f97316;
    --rk-tsim-green: #10b981;
    --rk-tsim-bg: #ffffff;
    --rk-tsim-border: #e2e8f0;
}

.rk-tsim-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-tsim-bg);
    border-radius: 24px;
    box-shadow: 0 20px 50px -10px rgba(15, 23, 42, 0.15);
    border: 1px solid var(--rk-tsim-border);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-tsim-header {
    background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
    padding: 45px 50px 35px;
    color: #f8fafc;
    position: relative;
    border-bottom: 4px solid var(--rk-tsim-blue);
}

.rk-tsim-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.15);
    color: var(--rk-tsim-blue-light);
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.3);
}

.rk-tsim-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-tsim-header h2 span { color: var(--rk-tsim-red); }

.rk-tsim-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-tsim-lead strong {
    color: #ffffff;
    background: rgba(2, 132, 199, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

/* Interaktywny Obszar z Suwakiem */
.rk-tsim-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

/* Wybór systemu (Radio Tabs) */
.rk-tsim-tabs {
    display: flex;
    background: #e2e8f0;
    border-radius: 12px;
    padding: 6px;
    margin-bottom: 30px;
    position: relative;
}

.rk-tsim-tab {
    flex: 1;
    text-align: center;
    padding: 14px 10px;
    font-size: 14px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s;
    z-index: 2;
}

.rk-tsim-tab.active {
    color: #ffffff;
}

.rk-tsim-tab-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    width: calc(50% - 6px);
    background: var(--rk-tsim-red);
    border-radius: 8px;
    transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1), background 0.4s;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.1);
    z-index: 1;
}

.rk-tsim-tabs[data-active="pro"] .rk-tsim-tab-glider {
    transform: translateX(100%);
    background: var(--rk-tsim-green);
}

/* Panel Kontrolny - Suwak Mrozu */
.rk-tsim-control-box {
    background: #ffffff;
    border: 1px solid var(--rk-tsim-border);
    border-radius: 20px;
    padding: 30px;
    margin-bottom: 30px;
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.03);
    text-align: center;
}

.rk-tsim-temp-display {
    font-size: 42px;
    font-weight: 900;
    color: var(--rk-tsim-dark);
    font-variant-numeric: tabular-nums;
    margin-bottom: 15px;
    transition: color 0.3s;
}

.rk-tsim-slider-wrapper {
    position: relative;
    padding: 20px 0;
}

input[type=range].rk-tsim-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
    cursor: pointer;
}

input[type=range].rk-tsim-slider:focus { outline: none; }

/* Track */
input[type=range].rk-tsim-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 12px;
    background: linear-gradient(to right, #0284c7 0%, #38bdf8 30%, #e2e8f0 50%, #f97316 100%);
    border-radius: 99px;
    border: 1px solid #cbd5e1;
}

/* Thumb */
input[type=range].rk-tsim-slider::-webkit-slider-thumb {
    height: 32px;
    width: 32px;
    border-radius: 50%;
    background: #ffffff;
    border: 3px solid var(--rk-tsim-dark);
    -webkit-appearance: none;
    margin-top: -11px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}
input[type=range].rk-tsim-slider::-webkit-slider-thumb:active { transform: scale(1.1); }

/* Dashboard z wynikami */
.rk-tsim-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    align-items: stretch;
}

.rk-tsim-svg-panel {
    background: var(--rk-tsim-panel);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.rk-tsim-svg { width: 100%; max-width: 150px; height: auto; }

/* Animacje SVG zależne od suwaka i trybu */
.anim-floor { transition: fill 0.5s; }
.anim-snow { opacity: 0; transition: opacity 0.5s; }
.anim-pump { transition: transform 0.3s, fill 0.3s; }
.anim-error { opacity: 0; transform: scale(0); transition: all 0.3s; }

/* Dynamika nadawana przez JS klasami */
.env-cold .anim-snow { opacity: 1; animation: fallSnow 2s linear infinite; }
@keyframes fallSnow { 0% { transform: translateY(-10px); } 100% { transform: translateY(20px); opacity: 0; } }

.sys-fail .anim-floor { fill: #64748b !important; }
.sys-fail .anim-pump { fill: var(--rk-tsim-red); animation: shakePump 0.15s infinite; }
.sys-fail .anim-error { opacity: 1; transform: scale(1); }

.sys-ok .anim-floor { fill: var(--rk-tsim-orange); }
.sys-ok .anim-pump { fill: var(--rk-tsim-green); animation: pulsePump 2s infinite alternate; }

@keyframes shakePump { 0% { transform: translateX(-2px); } 100% { transform: translateX(2px); } }
@keyframes pulsePump { 0% { filter: drop-shadow(0 0 2px #10b981); } 100% { filter: drop-shadow(0 0 10px #10b981); } }

/* Parametry textowe */
.rk-tsim-stats {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tsim-stat-box {
    background: #ffffff;
    border: 1px solid var(--rk-tsim-border);
    padding: 20px;
    border-radius: 14px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    transition: all 0.3s;
}

.rk-stat-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 8px;
}

.rk-stat-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-tsim-dark);
}

.val-danger { color: var(--rk-tsim-red) !important; }
.val-success { color: var(--rk-tsim-green) !important; }
.val-cold { color: var(--rk-tsim-blue) !important; }

@media (max-width: 768px) {
    .rk-tsim-header, .rk-tsim-interactive { padding: 30px 20px; }
    .rk-tsim-title { font-size: 24px; }
    .rk-tsim-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-tsim-stats { grid-template-columns: 1fr; }
    .rk-tsim-svg-panel { padding: 40px 20px; }
    .rk-tsim-temp-display { font-size: 36px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Koszty metody \"na oko\" w nowoczesnym budownictwie",
    "description": "Budowa domu jednorodzinnego lub modernizacja starego obiektu to proces pełen kosztownych pułapek. Zobacz, jak brak OZC niszczy pompę ciepła i domowy budżet.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-mrozy",
    "name": "Parametry Pracy Pomp Ciepła podczas Ekstremalnych Mrozów",
    "description": "Zestawienie spadku temperatury wewnętrznej i ryzyka taktowania sprężarki w funkcji temperatury zewnętrznej dla układów przewymiarowanych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "taktowanie pompy ciepła awaria",
      "przewymiarowana pompa ciepła mrozy",
      "niedogrzane pomieszczenia ogrzewanie podłogowe",
      "ucieczka watów straty ciepła",
      "przelicznik 50 W/m2 błędy"
    ],
    "measurementTechnique": "Symulacja wydajności instalacji przy spadku temperatury zewnętrznej od +10°C do -22°C.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Metoda 'na oko': Przy -15°C i poniżej ujawniają się mostki termiczne, podłoga nie przekazuje ciepła, temperatura wewnątrz spada do 16°C.",
        "Projekt OZC: Precyzyjny dobór pętli kompensuje miejscowe straty ciepła, utrzymując stałe 20°C bez nadwyrężania kompresora."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-mrozy",
    "name": "Symulator Ekstremalnych Mrozów",
    "description": "Narzędzie interaktywne pozwalające użytkownikowi symulować spadek temperatury zewnętrznej i obserwować zjawisko taktowania pompy ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tsim-container" id="rk-tsim-app">
    
    <div class="rk-tsim-header">
        <div class="rk-tsim-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Krytyczny Błąd Inwestycyjny
        </div>
        <h2>Koszty metody &#8222;na oko&#8221; <span>a zima stulecia</span></h2>
        <p class="rk-tsim-lead">
            Budowa domu jednorodzinnego lub modernizacja starego obiektu to proces pełen kosztownych pułapek, w którym intuicja i potoczne metody „na oko” (np. przelicznik <strong>50 W/m²</strong>) nieuchronnie prowadzą do katastrofy finansowej i technologicznej.
            <br><br>
            Inwestorzy masowo zmagają się z problemem niedogrzanych pomieszczeń w okresie strefowych mrozów sięgających <strong>-22°C</strong>, bądź stają przed faktem drastycznego przewymiarowania pomp ciepła. Urządzenia te, wchodząc w tzw. taktowanie (zbyt częste cykle pracy sprężarki), ulegają awarii po zaledwie 3–4 latach eksploatacji, generując przy tym gigantyczne rachunki za energię elektryczną. Brak precyzyjnej wiedzy o tym, ile watów energii ucieka przez konkretną ścianę, strop, okno czy system wentylacji, paraliżuje jakikolwiek proces decyzyjny i skazuje instalację płaszczyznową na losową i nieefektywną pracę.
        </p>
    </div>

    <div class="rk-tsim-interactive">
        
        <div class="rk-tsim-tabs" id="tsimTabs" data-active="amateur">
            <div class="rk-tsim-tab-glider" id="tsimGlider"></div>
            <div class="rk-tsim-tab active" data-type="amateur">Przelicznik &#8222;Na oko&#8221;</div>
            <div class="rk-tsim-tab" data-type="pro">Precyzyjne OZC</div>
        </div>

        <div class="rk-tsim-control-box">
            <h3 style="margin:0 0 10px 0; font-size:14px; color:#64748b; text-transform:uppercase; letter-spacing:1px;">Temperatura Zewnętrzna</h3>
            <div class="rk-tsim-temp-display" id="tsimTempDisplay">0°C</div>
            <div class="rk-tsim-slider-wrapper">
                <input type="range" min="-22" max="10" value="0" class="rk-tsim-slider" id="tsimSlider">
            </div>
            <p style="margin:10px 0 0 0; font-size:13px; color:#94a3b8;">Przesuń suwak w lewo, aby symulować mróz.</p>
        </div>

        <div class="rk-tsim-dashboard">
            
            <div class="rk-tsim-svg-panel" id="tsimSvgPanel">
                <svg class="rk-tsim-svg" viewBox="0 0 100 100">
                    <circle class="anim-snow" cx="20" cy="10" r="1.5" fill="#ffffff" />
                    <circle class="anim-snow" cx="50" cy="5" r="2" fill="#ffffff" style="animation-delay: 0.5s;" />
                    <circle class="anim-snow" cx="80" cy="15" r="1.5" fill="#ffffff" style="animation-delay: 1s;" />
                    
                    <path d="M 10 50 L 50 15 L 90 50 L 90 90 L 10 90 Z" fill="#334155" stroke="#475569" stroke-width="2"/>
                    <path class="anim-floor" d="M 15 80 L 85 80 L 85 85 L 15 85 Z" fill="#f97316" />
                    
                    <rect class="anim-pump" x="65" y="65" width="25" height="25" rx="3" fill="#10b981" />
                    <circle cx="77.5" cy="77.5" r="7" fill="#1e293b" opacity="0.5"/>
                    
                    <path class="anim-error" d="M 65 55 L 75 40 L 85 55 Z" fill="#ef4444" />
                    <text class="anim-error" x="73" y="52" fill="#ffffff" font-size="10" font-weight="bold">!</text>
                </svg>
            </div>

            <div class="rk-tsim-stats">
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Temperatura wewnątrz</span>
                    <span class="rk-stat-value" id="valInsideTemp">20°C (Komfort)</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Stan Sprężarki (Pompa)</span>
                    <span class="rk-stat-value" id="valCompressor">Stabilna praca</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Koszty energii</span>
                    <span class="rk-stat-value" id="valEnergy">W normie</span>
                </div>
                <div class="rk-tsim-stat-box">
                    <span class="rk-stat-label">Wydajność ogrzewania</span>
                    <span class="rk-stat-value" id="valStatus">Poprawna</span>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w strukturze błędu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-tsim-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy DOM
    const slider = document.getElementById('tsimSlider');
    const tempDisplay = document.getElementById('tsimTempDisplay');
    const tabs = document.querySelectorAll('.rk-tsim-tab');
    const tabsContainer = document.getElementById('tsimTabs');
    const svgPanel = document.getElementById('tsimSvgPanel');
    
    // Pola tekstowe
    const valInsideTemp = document.getElementById('valInsideTemp');
    const valCompressor = document.getElementById('valCompressor');
    const valEnergy = document.getElementById('valEnergy');
    const valStatus = document.getElementById('valStatus');

    let currentMode = 'amateur';

    // 3. Obsługa zakładek (Tryb Systemu)
    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            tabs.forEach(t => t.classList.remove('active'));
            tab.classList.add('active');
            currentMode = tab.getAttribute('data-type');
            tabsContainer.setAttribute('data-active', currentMode);
            updateSimulation();
        });
    });

    // 4. Obsługa Suwaka
    slider.addEventListener('input', updateSimulation);

    // 5. Silnik Symulacji
    function updateSimulation() {
        const outTemp = parseInt(slider.value);
        
        // Zmiana sposobu budowania stringów, aby uniknąć błędów parsera z backtickami w niektórych edytorach
        tempDisplay.textContent = outTemp > 0 ? "+" + outTemp + "°C" : outTemp + "°C";
        
        if (outTemp <= -10) {
            tempDisplay.style.color = 'var(--rk-tsim-blue)';
            svgPanel.classList.add('env-cold');
        } else {
            tempDisplay.style.color = 'var(--rk-tsim-dark)';
            svgPanel.classList.remove('env-cold');
        }

        // Reset klas SVG
        svgPanel.classList.remove('sys-ok', 'sys-fail');

        if (currentMode === 'pro') {
            // TRYB: Projekt OZC
            svgPanel.classList.add('sys-ok');
            
            valInsideTemp.textContent = '20°C (Stała)';
            valInsideTemp.className = 'rk-stat-value val-success';
            
            valCompressor.textContent = 'Ciągła, inwerterowa';
            valCompressor.className = 'rk-stat-value val-success';
            
            valEnergy.textContent = 'Zoptymalizowane';
            valEnergy.className = 'rk-stat-value';

            if (outTemp <= -15) {
                valStatus.textContent = 'Kompensacja strat idealna';
            } else {
                valStatus.textContent = 'Wysokie COP pompy';
            }
            valStatus.className = 'rk-stat-value val-success';

        } else {
            // TRYB: Amator "Na Oko"
            if (outTemp > 0) {
                // Ciepło - urządzenie przewymiarowane taktuje, ale grzeje
                svgPanel.classList.add('sys-fail');
                valInsideTemp.textContent = '22°C (Przegrzewanie)';
                valInsideTemp.className = 'rk-stat-value val-danger';
                
                valCompressor.textContent = 'Częste taktowanie!';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = '+30% (Rozruchy)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Bezwładność układu';
                valStatus.className = 'rk-stat-value';
                
            } else if (outTemp > -10) {
                // Lekki mróz - zaczynają się problemy
                svgPanel.classList.add('sys-fail');
                valInsideTemp.textContent = '19°C (Niestabilna)';
                valInsideTemp.className = 'rk-stat-value';
                
                valCompressor.textContent = 'Agresywne taktowanie';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = '+40% (Wysoki prąd)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Zaburzone przepływy';
                valStatus.className = 'rk-stat-value val-danger';

            } else {
                // Silny mróz - katastrofa, podłoga nie daje rady, pompa wchodzi w tryb awaryjny lub grzałki
                svgPanel.classList.add('sys-fail');
                const dropTemp = 19 + Math.floor(outTemp / 5); // Spadek temp
                
                // Zwykła konkatenacja unikająca backticków
                valInsideTemp.textContent = dropTemp + "°C (Niedogrzanie)";
                valInsideTemp.className = 'rk-stat-value val-cold';
                
                valCompressor.textContent = 'Ryzyko uszkodzenia!';
                valCompressor.className = 'rk-stat-value val-danger';
                
                valEnergy.textContent = 'Ogromne (Praca grzałek)';
                valEnergy.className = 'rk-stat-value val-danger';
                
                valStatus.textContent = 'Brak mocy przekazu';
                valStatus.className = 'rk-stat-value val-danger';
            }
        }
    }

    // Inicjalizacja startowa
    updateSimulation();
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-core-dark: #0f172a;
    --rk-core-brand: #0284c7;
    --rk-core-accent: #0ea5e9;
    --rk-core-bg: #ffffff;
    --rk-core-panel: #f8fafc;
    --rk-core-border: #cbd5e1;
    --rk-core-text: #334155;
    --rk-core-green: #059669;
    --rk-core-green-bg: #ecfdf5;
    --rk-core-amber: #d97706;
    --rk-core-amber-bg: #fffbeb;
}

.rk-core-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-core-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.12);
    border: 1px solid var(--rk-core-brand);
    overflow: hidden;
}

/* Nagłówek Sekcji */
.rk-core-header {
    background: linear-gradient(135deg, var(--rk-core-dark) 0%, #1e293b 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-core-brand);
}

.rk-core-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.2);
}

.rk-core-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-core-header h2 span { color: #38bdf8; }

.rk-core-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-core-lead strong {
    color: #ffffff;
    font-weight: 800;
}

.rk-core-lead a {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: color 0.3s;
}

.rk-core-lead a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Inżynierski Panel Kontrolny (Dashboard) */
.rk-core-dashboard {
    padding: 40px 50px;
    background: var(--rk-core-panel);
}

/* Nawigacja po komponentach OZC (3 twarde filary) */
.rk-core-nav {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
    margin-bottom: 35px;
}

.rk-core-nav-btn {
    background: #ffffff;
    border: 2px solid var(--rk-core-border);
    padding: 16px 20px;
    border-radius: 14px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.03);
}

.rk-core-nav-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
    transform: translateY(-2px);
}

.rk-core-nav-btn.active {
    border-color: var(--rk-core-brand);
    background: var(--rk-core-brand);
}

.rk-nav-icon {
    width: 24px;
    height: 24px;
    color: var(--rk-core-brand);
    transition: color 0.3s;
}

.rk-core-nav-btn.active .rk-nav-icon {
    color: #ffffff;
}

.rk-nav-title {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-core-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: color 0.3s;
}

.rk-core-nav-btn.active .rk-nav-title {
    color: #ffffff;
}

/* Główna Karta Prezentacji Danych */
.rk-core-display-card {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-core-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 40px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
}

/* Kontener Wizualizacji Sztywnych Układów SVG */
.rk-core-svg-stage {
    background: var(--rk-core-dark);
    border-radius: 16px;
    padding: 25px;
    height: 220px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
    position: relative;
    overflow: hidden;
}

.rk-dashboard-svg {
    width: 100%;
    height: 100%;
    display: block;
}

/* Ukrywanie/Pokazywanie warstw SVG za pomocą CSS */
.svg-layer { opacity: 0; transition: opacity 0.4s ease-in-out; }
.rk-core-container[data-view="fabric"] .layer-fabric { opacity: 1; }
.rk-core-container[data-view="ventilation"] .layer-ventilation { opacity: 1; }
.rk-core-container[data-view="bivalent"] .layer-bivalent { opacity: 1; }

/* Animacje wektorowe kontrolowane stanem rodzica */
.anim-flow-lines { stroke-dasharray: 8 16; stroke-dashoffset: 0; }
.rk-core-container[data-view="ventilation"] .anim-flow-lines { animation: airFlow 2s linear infinite; }

.anim-balance-beam { transform-origin: 50px 55px; transition: transform 0.6s ease-in-out; }
.rk-core-container[data-view="bivalent"] .anim-balance-beam { transform: rotate(-8deg); }

@keyframes airFlow { to { stroke-dashoffset: -24; } }

/* Treść merytoryczna wewnątrz karty */
.rk-core-info-block h3 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-core-dark);
}

.rk-core-info-block p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.65;
    color: #475569;
}

/* Siatka parametrów pod tekstem */
.rk-core-metrics-panel {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-core-metric-box {
    background: #f1f5f9;
    padding: 15px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-core-brand);
}

.rk-metric-label {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 4px;
}

.rk-metric-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-core-dark);
}

@media (max-width: 768px) {
    .rk-core-header, .rk-core-dashboard { padding: 35px 25px; }
    .rk-core-header h2 { font-size: 24px; }
    .rk-core-nav { grid-template-columns: 1fr; gap: 10px; }
    .rk-core-display-card { grid-template-columns: 1fr; gap: 25px; padding: 25px; }
    .rk-core-svg-stage { height: 180px; max-width: 240px; margin: 0 auto; width: 100%; }
    .rk-core-metrics-panel { grid-template-columns: 1fr; gap: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-definicja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Czym dokładnie jest Projektowe Obciążenie Cieplne (OZC) budynku?",
    "description": "Zrozumienie wartości OZC (kW) wg normy PN-EN 12831-1. Dowiedz się, jak bilans przegród, wentylacji oraz wyznaczenie punktu biwalentnego eliminuje zgadywanie.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-definicja",
    "name": "Struktura składowych bilansu energetycznego budynku szczytowego",
    "description": "Zestawienie twardych danych inżynierskich określających udziały strat przez przenikanie oraz wentylację w warunkach normatywnych WT 2021.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne budynku",
      "norma PN-EN 12831-1",
      "punkt biwalentny pompy ciepła",
      "standard energetyczny WT 2021",
      "koszt obliczeń OZC"
    ],
    "measurementTechnique": "Kalkulacja strat szczytowych na podstawie fizyki budowli i oporów cieplnych przegród budowlanych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przenikanie ciepła: Straty energii przez ściany, okna i strop przy skrajnej temperaturze projektowej.",
        "Wentylacja: Zapotrzebowanie na dogrzanie powietrza zewnętrznego z uwzględnieniem sprawności rekuperatora.",
        "Punkt biwalentny: Temperatura graniczna, przy której źródło ciepła wymaga aktywacji wspomagania elektrycznego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-definicja",
    "name": "Interaktywny Analizator Składowych OZC",
    "description": "Inżynierski interfejs do wizualizacji struktury strat ciepła przez przegrody budowlane, procesy wentylacyjne oraz do wyznaczania punktu biwalentnego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG capable browser",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-core-container" id="rk-ozc-def-app" data-view="fabric">
    
    <div class="rk-core-header">
        <div class="rk-core-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"></path><line x1="4" y1="22" x2="4" y2="15"></line></svg>
            Analiza Inżynierska
        </div>
        <h2>Czym dokładnie jest Projektowe Obciążenie Cieplne (OZC) budynku?</h2>
        <p class="rk-core-lead">
            <strong>Projektowe Obciążenie Cieplne (OZC)</strong> to obliczeniowa wartość strat energii wyrażona w kilowatach [kW], wyznaczana dla skrajnych warunków zimowych danej strefy klimatycznej zgodnie z normą <a href="https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/">PN-EN 12831-1</a>. Wartość ta określa zapotrzebowanie na moc szczytową źródła ciepła i jest sumą strat przez przegrody oraz wentylację. Stanowi ona podstawę do doboru urządzeń grzewczych, eliminując błędy szacunkowe, które generują niepotrzebne koszty inwestycyjne.
        </p>
    </div>

    <div class="rk-core-dashboard">
        
        <div class="rk-core-nav">
            <button class="rk-core-nav-btn active" data-target="fabric">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" fill="none"/><line x1="9" y1="3" x2="9" y2="21"/><line x1="15" y1="3" x2="15" y2="21"/></svg>
                <span class="rk-nav-title">1. Przenikanie</span>
            </button>
            <button class="rk-core-nav-btn" data-target="ventilation">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m12.41 11.41A2 2 0 1 1 13 16h9m-1.59-7.41A2 2 0 1 0 19 12h3"/></svg>
                <span class="rk-nav-title">2. Wentylacja</span>
            </button>
            <button class="rk-core-nav-btn" data-target="bivalent">
                <svg class="rk-nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="19" y1="5" x2="5" y2="19"/><circle cx="6.5" cy="6.5" r="2.5"/><circle cx="17.5" cy="17.5" r="2.5"/></svg>
                <span class="rk-nav-title">3. Punkt Biwalentny</span>
            </button>
        </div>

        <div class="rk-core-display-card">
            
            <div class="rk-core-svg-stage">
                <svg class="rk-dashboard-svg" viewBox="0 0 100 100">
                    
                    <g class="svg-layer layer-fabric">
                        <rect x="15" y="20" width="20" height="60" fill="#475569" />
                        <rect x="35" y="20" width="15" height="60" fill="#0284c7" opacity="0.6" />
                        <rect x="50" y="20" width="5" height="60" fill="#cbd5e1" />
                        <path d="M 10 50 L 65 50" fill="none" stroke="#ef4444" stroke-width="3" stroke-dasharray="4 4" />
                        <polyline points="60 45 65 50 60 55" fill="none" stroke="#ef4444" stroke-width="3" />
                        <text x="60" y="35" fill="#ffffff" font-size="8" font-family="sans-serif">WT 2021</text>
                    </g>
                    
                    <g class="svg-layer layer-ventilation">
                        <rect x="30" y="30" width="40" height="40" rx="6" fill="#1e293b" stroke="#64748b" stroke-width="2"/>
                        <path class="anim-flow-lines" d="M 10 40 L 90 40" fill="none" stroke="#38bdf8" stroke-width="3" />
                        <path class="anim-flow-lines" d="M 90 60 L 10 60" fill="none" stroke="#f97316" stroke-width="3" />
                    </g>
                    
                    <g class="svg-layer layer-bivalent">
                        <path d="M 20 85 L 80 85 M 50 85 L 50 55" fill="none" stroke="#64748b" stroke-width="3" />
                        <g class="anim-balance-beam">
                            <line x1="20" y1="55" x2="80" y2="55" stroke="#ffffff" stroke-width="4" stroke-linecap="round" />
                            <rect x="22" y="35" width="16" height="18" fill="#10b981" rx="2" />
                            <rect x="62" y="38" width="16" height="15" fill="#ef4444" rx="2" />
                        </g>
                    </g>
                    
                </svg>
            </div>

            <div class="rk-core-info-block">
                <h3 id="coreDisplayTitle">Straty ciepła przez przegrody</h3>
                <p id="coreDisplayDesc">
                    W praktyce inżynierskiej dokument OZC eliminuje zgadywanie. Budynki wznoszone w standardzie WT 2021 charakteryzują się wysoką szczelnością oraz niskimi współczynnikami przenikania ciepła przegród, co sprawia, że ich realne zapotrzebowanie na energię drastycznie różni się od obiektów budowanych jeszcze dekadę temu.
                </p>
                
                <div class="rk-core-metrics-panel">
                    <div class="rk-core-metric-box">
                        <span class="rk-metric-label" id="coreLabel1">Koszt opracowania OZC</span>
                        <span class="rk-metric-value" id="coreValue1">450 &ndash; 900 PLN</span>
                    </div>
                    <div class="rk-core-metric-box">
                        <span class="rk-metric-label" id="coreLabel2">Oszczędność inwestycyjna</span>
                        <span class="rk-metric-value" id="coreValue2">Do kilkunastu tysięcy PLN</span>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez użycia tagów H2/H3 w strukturze alertu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-ozc-def-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:18px; text-transform:uppercase; margin-bottom:10px;">Błąd Licencji</div><div style="font-size:14px; color:#cbd5e1;">Opracowanie struktury oraz mechanika JSON-LD są własnością serwisu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy sterujące i baza danych
    const container = document.getElementById('rk-ozc-def-app');
    const navBtns = container.querySelectorAll('.rk-core-nav-btn');
    
    const titleDOM = document.getElementById('coreDisplayTitle');
    const descDOM = document.getElementById('coreDisplayDesc');
    const lbl1DOM = document.getElementById('coreLabel1');
    const val1DOM = document.getElementById('coreValue1');
    const lbl2DOM = document.getElementById('coreLabel2');
    const val2DOM = document.getElementById('coreValue2');

    // Czyste bazy tekstowe (bez backticków dla uniknięcia błędów parsowania w WP)
    const contentData = {
        fabric: {
            title: "Przenikanie przez przegrody (WT 2021)",
            desc: "W praktyce inżynierskiej dokument OZC eliminuje zgadywanie. Budynki wznoszone w standardzie WT 2021 charakteryzują się wysoką szczelnością oraz niskimi współczynnikami przenikania ciepła przegród strukturalnych, co sprawia, że ich realne zapotrzebowanie na energię drastycznie różni się od starych obiektów.",
            lbl1: "Koszt opracowania OZC",
            val1: "450 - 900 PLN",
            lbl2: "Oszczędność inwestycyjna",
            val2: "Zabezpieczenie przed przewymiarowaniem"
        },
        ventilation: {
            title: "Projektowe straty wentylacyjne",
            desc: "OZC precyzyjnie sumuje straty energii potrzebnej do ogrzania powietrza zewnętrznego. Uwzględnienie w obliczeniach inżynierskich systemu z odzyskiem ciepła pozwala na obniżenie strat wentylacyjnych o ponad 80%, drastycznie wpływając na ostateczny wynik zapotrzebowania budynku.",
            lbl1: "Wymóg normatywny",
            val1: "PN-EN 12831-1",
            lbl2: "Wpływ na rekuperację",
            val2: "Redukcja szczytowych strat wentylacji"
        },
        bivalent: {
            title: "Wyznaczenie punktu biwalentnego",
            desc: "Projektowe Obciążenie Cieplne pozwala precyzyjnie określić tzw. punkt biwalentny dla pompy ciepła – czyli temperaturę zewnętrzną (np. -7°C), przy której sprężarka wymaga wsparcia przez grzałki elektryczne. Chroni to inwestora przed zakupem drogiego źródła o zawyżonej mocy nominalnej.",
            lbl1: "Przykładowy punkt",
            val1: "-7°C (Granica grzałek)",
            lbl2: "Efekt hydrauliczny",
            val2: "Stabilna praca bez taktowania"
        }
    };

    // 3. Obsługa zdarzeń kliknięcia
    navBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            navBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const view = this.getAttribute('data-target');
            container.setAttribute('data-view', view);

            // Podmiana danych merytorycznych
            titleDOM.textContent = contentData[view].title;
            descDOM.textContent = contentData[view].desc;
            lbl1DOM.textContent = contentData[view].lbl1;
            val1DOM.textContent = contentData[view].val1;
            lbl2DOM.textContent = contentData[view].lbl2;
            val2DOM.textContent = contentData[view].val2;
        });
    });
});
</script>



<style>
:root {
    --rk-norm-dark: #0f172a;
    --rk-norm-brand: #4338ca; /* Eleganckie indygo dla prawa i norm */
    --rk-norm-brand-light: #e0e7ff;
    --rk-norm-accent: #0ea5e9;
    --rk-norm-green: #10b981;
    --rk-norm-green-light: #ecfdf5;
    --rk-norm-red: #ef4444;
    --rk-norm-bg: #ffffff;
    --rk-norm-panel: #f8fafc;
    --rk-norm-border: #cbd5e1;
    --rk-norm-text: #334155;
    --rk-norm-muted: #64748b;
}

.rk-norm-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-norm-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(67, 56, 202, 0.15);
    border: 1px solid rgba(67, 56, 202, 0.2);
    overflow: hidden;
}

/* Nagłówek */
.rk-norm-header {
    background: linear-gradient(135deg, var(--rk-norm-dark) 0%, #1e1b4b 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-norm-brand);
    position: relative;
}

.rk-norm-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(67, 56, 202, 0.4);
    color: #a5b4fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(165, 180, 252, 0.2);
}

.rk-norm-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-norm-title span { color: #818cf8; }

.rk-norm-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-norm-lead strong {
    color: #ffffff;
    background: rgba(67, 56, 202, 0.4);
    padding: 2px 6px;
    border-radius: 4px;
}

.rk-link-norm {
    color: #a5b4fc;
    text-decoration: none;
    border-bottom: 1px dashed #a5b4fc;
    transition: all 0.3s;
}

.rk-link-norm:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Przestrzeń interaktywna */
.rk-norm-interactive {
    padding: 45px 50px;
    background: var(--rk-norm-panel);
}

/* System Zakładek (Pill Menu) */
.rk-norm-tabs {
    display: flex;
    background: #e2e8f0;
    border-radius: 16px;
    padding: 6px;
    margin-bottom: 35px;
    position: relative;
    box-shadow: inset 0 2px 5px rgba(0,0,0,0.05);
}

.rk-norm-tab {
    flex: 1;
    text-align: center;
    padding: 14px 10px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-norm-muted);
    cursor: pointer;
    border-radius: 12px;
    transition: all 0.3s ease;
    z-index: 2;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-norm-tab.active { color: #ffffff; }

.rk-norm-tab-glider {
    position: absolute;
    top: 6px;
    bottom: 6px;
    width: calc(33.333% - 4px);
    background: var(--rk-norm-brand);
    border-radius: 12px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
    box-shadow: 0 4px 10px -2px rgba(67, 56, 202, 0.3);
    z-index: 1;
}

.rk-norm-tabs[data-active="zones"] .rk-norm-tab-glider { transform: translateX(0%); background: var(--rk-norm-accent); }
.rk-norm-tabs[data-active="temps"] .rk-norm-tab-glider { transform: translateX(100%); background: #f59e0b; }
.rk-norm-tabs[data-active="law"] .rk-norm-tab-glider { transform: translateX(200%); background: var(--rk-norm-brand); }

/* Główny Dashboard Prezentacji */
.rk-norm-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-norm-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 35px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
    transition: border-color 0.4s;
}

.rk-norm-dashboard[data-state="zones"] { border-color: rgba(14, 165, 233, 0.3); }
.rk-norm-dashboard[data-state="temps"] { border-color: rgba(245, 158, 11, 0.3); }
.rk-norm-dashboard[data-state="law"] { border-color: rgba(67, 56, 202, 0.3); }

/* Kontener SVG */
.rk-norm-svg-box {
    background: var(--rk-norm-dark);
    border-radius: 16px;
    padding: 20px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    position: relative;
    overflow: hidden;
}

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s, transform 0.4s; transform: scale(0.95); width: 100%; height: 100%; }
.rk-norm-dashboard[data-state="zones"] .layer-zones { opacity: 1; transform: scale(1); }
.rk-norm-dashboard[data-state="temps"] .layer-temps { opacity: 1; transform: scale(1); }
.rk-norm-dashboard[data-state="law"] .layer-law { opacity: 1; transform: scale(1); }

/* Animacje specyficzne dla warstw */
.anim-thermo-drop { transform-origin: bottom; animation: dropTemp 2.5s infinite alternate ease-in-out; }
.anim-snowflake { animation: spinSnow 4s infinite linear; transform-origin: 50px 30px; }
.anim-heat-wave { stroke-dasharray: 8 8; animation: riseHeat 1.5s infinite linear; }
.anim-shield-pulse { animation: pulseShieldNorm 2s infinite alternate; }

@keyframes dropTemp { 0% { transform: scaleY(1); fill: #38bdf8; } 100% { transform: scaleY(0.4); fill: #1e3a8a; } }
@keyframes spinSnow { to { transform: rotate(360deg); } }
@keyframes riseHeat { to { stroke-dashoffset: -16; } }
@keyframes pulseShieldNorm { 0% { filter: drop-shadow(0 0 0 rgba(99, 102, 241, 0)); } 100% { filter: drop-shadow(0 0 12px rgba(99, 102, 241, 0.6)); } }

/* Treść Panelu */
.rk-norm-content h3 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-norm-dark);
}

.rk-norm-content p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

/* Kafelki z danymi */
.rk-norm-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-norm-tile {
    background: var(--rk-norm-panel);
    padding: 15px;
    border-radius: 12px;
    border-left: 4px solid transparent;
    transition: all 0.3s;
}

.rk-norm-dashboard[data-state="zones"] .rk-norm-tile { border-left-color: var(--rk-norm-accent); }
.rk-norm-dashboard[data-state="temps"] .rk-norm-tile { border-left-color: #f59e0b; }
.rk-norm-dashboard[data-state="law"] .rk-norm-tile { border-left-color: var(--rk-norm-brand); }

.rk-tile-lbl { display: block; font-size: 11px; text-transform: uppercase; font-weight: 800; color: var(--rk-norm-muted); margin-bottom: 4px; }
.rk-tile-val { display: block; font-size: 16px; font-weight: 900; color: var(--rk-norm-dark); }

@media (max-width: 768px) {
    .rk-norm-header, .rk-norm-interactive { padding: 35px 20px; }
    .rk-norm-title { font-size: 24px; }
    .rk-norm-tabs { flex-direction: column; }
    .rk-norm-tab-glider { width: 100%; height: calc(33.333% - 4px); top: 6px; left: 6px; }
    .rk-norm-tabs[data-active="zones"] .rk-norm-tab-glider { transform: translateY(0%); }
    .rk-norm-tabs[data-active="temps"] .rk-norm-tab-glider { transform: translateY(100%); }
    .rk-norm-tabs[data-active="law"] .rk-norm-tab-glider { transform: translateY(200%); }
    
    .rk-norm-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 25px; text-align: center; }
    .rk-norm-svg-box { max-width: 200px; margin: 0 auto; height: 160px; }
    .rk-norm-tiles { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#article-prawo",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/"
    },
    "headline": "Jakie normy i przepisy prawne regulują obliczenia OZC w Polsce?",
    "description": "Zrozum regulacje prawne OZC: norma PN-EN 12831-1:2017-08, 5 stref klimatycznych Polski, temperatury wewnętrzne oraz wymogi dotacji Czyste Powietrze.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#dataset-prawo",
    "name": "Zestawienie parametrów normatywnych wg PN-EN 12831-1:2017-08",
    "description": "Wykaz obligatoryjnych temperatur wewnętrznych oraz zewnętrznych stref klimatycznych wymaganych do sporządzenia legalnego bilansu cieplnego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "norma PN-EN 12831-1:2017-08",
      "obliczenia zapotrzebowania na moc cieplną",
      "5 stref klimatycznych Polska temperatura",
      "charakterystyka energetyczna budynku",
      "dotacje czyste powietrze wymogi OZC"
    ],
    "measurementTechnique": "Kalkulacja zgodności projektu instalacji z § 134 ust. 1 Rozporządzenia MI oraz wytycznymi programów proekologicznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Temperatury Zewnętrzne: Podział Polski na 5 stref od -16°C (I) do -24°C (V).",
        "Temperatury Wewnętrzne: Wymagane projektowe 20°C dla pokojów i 24°C dla łazienek.",
        "Zgodność prawna: Warunek konieczny odbioru budynku i uzyskania dotacji (Moje Ciepło)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/#webapp-prawo",
    "name": "Eksplorator Norm i Stref Klimatycznych OZC",
    "description": "Aplikacja interaktywna pozwalająca inwestorom zrozumieć wymogi prawne, strefy klimatyczne i ich wpływ na odbiór instalacji oraz dotacje.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-norm-container" id="rk-norm-app">
    
    <div class="rk-norm-header">
        <div class="rk-norm-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Prawo i Wymogi Budowlane
        </div>
        <h2 class="rk-norm-title">Jakie normy i przepisy prawne regulują obliczenia <span>OZC w Polsce</span>?</h2>
        <p class="rk-norm-lead">
            Obowiązek wykonywania <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/" class="rk-link-norm">obliczeń zapotrzebowania na moc cieplną</a> reguluje <strong>§ 134 ust. 1 Rozporządzenia Ministra Infrastruktury</strong> w sprawie warunków technicznych, jakim powinny odpowiadać budynki. Każdy legalnie budowany lub modernizowany obiekt musi posiadać rzetelną <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-link-norm">charakterystykę energetyczną</a> opartą na tych ściśle określonych wyliczeniach.
        </p>
    </div>

    <div class="rk-norm-interactive">
        
        <div class="rk-norm-tabs" id="normTabs" data-active="zones">
            <div class="rk-norm-tab-glider" id="normGlider"></div>
            <div class="rk-norm-tab active" data-target="zones">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                Strefy Klimatyczne
            </div>
            <div class="rk-norm-tab" data-target="temps">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg>
                Temp. Wewnętrzne
            </div>
            <div class="rk-norm-tab" data-target="law">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                Prawo &#038; Dotacje
            </div>
        </div>

        <div class="rk-norm-dashboard" id="normDashboard" data-state="zones">
            
            <div class="rk-norm-svg-box">
                <svg class="rk-svg-layer layer-zones" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="60" rx="10" fill="#1e293b" stroke="#38bdf8" stroke-width="2"/>
                    <circle cx="50" cy="80" r="15" fill="#1e293b" stroke="#38bdf8" stroke-width="2"/>
                    <rect class="anim-thermo-drop" x="44" y="15" width="12" height="60" rx="6" fill="#38bdf8"/>
                    <circle cx="50" cy="80" r="10" fill="#38bdf8"/>
                    <g class="anim-snowflake" stroke="#ffffff" stroke-width="2" stroke-linecap="round">
                        <line x1="50" y1="20" x2="50" y2="40"/> <line x1="40" y1="30" x2="60" y2="30"/>
                        <line x1="43" y1="23" x2="57" y2="37"/> <line x1="43" y1="37" x2="57" y2="23"/>
                    </g>
                </svg>

                <svg class="rk-svg-layer layer-temps" viewBox="0 0 100 100">
                    <path d="M 15 50 L 50 20 L 85 50 L 85 85 L 15 85 Z" fill="#1e293b" stroke="#f59e0b" stroke-width="2"/>
                    <rect x="25" y="55" width="20" height="30" fill="#334155"/>
                    <text x="35" y="75" fill="#f59e0b" font-size="12" font-weight="bold" text-anchor="middle">20°C</text>
                    <rect x="55" y="55" width="20" height="30" fill="#334155"/>
                    <text x="65" y="75" fill="#ef4444" font-size="12" font-weight="bold" text-anchor="middle">24°C</text>
                    <path class="anim-heat-wave" d="M 60 45 Q 65 35 60 25" fill="none" stroke="#ef4444" stroke-width="2"/>
                </svg>

                <svg class="rk-svg-layer layer-law" viewBox="0 0 100 100">
                    <path class="anim-shield-pulse" d="M 50 15 L 20 25 L 20 55 C 20 75 45 90 50 95 C 55 90 80 75 80 55 L 80 25 Z" fill="#1e293b" stroke="#4338ca" stroke-width="3"/>
                    <polyline points="35 55 45 65 65 40" fill="none" stroke="#10b981" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
                </svg>
            </div>

            <div class="rk-norm-content">
                <h3 id="dynNormTitle">Temperatury Obliczeniowe</h3>
                <p id="dynNormDesc">
                    Norma precyzuje podział Polski na 5 stref klimatycznych, dla których przypisane są obliczeniowe temperatury zewnętrzne. Od <strong>-16°C</strong> w łagodniejszej strefie I (nadmorskiej) aż do <strong>-24°C</strong> w skrajnej strefie V (górskiej).
                </p>
                <div class="rk-norm-tiles">
                    <div class="rk-norm-tile">
                        <span class="rk-tile-lbl" id="dynNormLbl1">Strefa I (Nadmorska)</span>
                        <span class="rk-tile-val" id="dynNormVal1">-16°C</span>
                    </div>
                    <div class="rk-norm-tile">
                        <span class="rk-tile-lbl" id="dynNormLbl2">Strefa V (Górska)</span>
                        <span class="rk-tile-val" id="dynNormVal2">-24°C</span>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Brak H2/H3 w strukturze błędu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-norm-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy DOM
    const tabsContainer = document.getElementById('normTabs');
    const tabs = document.querySelectorAll('.rk-norm-tab');
    const dashboard = document.getElementById('normDashboard');
    
    // Pola tekstowe do podmiany
    const dynTitle = document.getElementById('dynNormTitle');
    const dynDesc = document.getElementById('dynNormDesc');
    const lbl1 = document.getElementById('dynNormLbl1');
    const val1 = document.getElementById('dynNormVal1');
    const lbl2 = document.getElementById('dynNormLbl2');
    const val2 = document.getElementById('dynNormVal2');

    // Baza danych treści (bezpieczna od backticków)
    const dataContent = {
        zones: {
            title: "5 Stref Klimatycznych",
            desc: "Norma precyzuje podział Polski na 5 stref klimatycznych, dla których przypisane są rygorystyczne obliczeniowe temperatury zewnętrzne. Od -16°C w strefie I (nadmorskiej) do -24°C w strefie V (górskiej).",
            lbl1: "Strefa I (Najcieplejsza)",
            val1: "-16°C",
            lbl2: "Strefa V (Najzimniejsza)",
            val2: "-24°C"
        },
        temps: {
            title: "Temperatury Wewnętrzne",
            desc: "Przepisy ściśle określają wymagane temperatury wewnętrzne dla konkretnych typów pomieszczeń. Wymusza to na projektancie zastosowanie gęstszego rozstawu rur w łazienkach, aby sprostać wyższym wymogom cieplnym.",
            lbl1: "Pokoje, Salon, Kuchnia",
            val1: "20°C",
            lbl2: "Łazienki",
            val2: "24°C"
        },
        law: {
            title: "Odbiór i Dotacje",
            desc: "Oficjalną podstawą prawną jest norma PN-EN 12831-1:2017-08, która narzuca rygorystyczną metodologię. Projektowanie systemów grzewczych bez jej uwzględnienia uniemożliwia uzyskanie odbioru budowlanego oraz pozyskanie dotacji.",
            lbl1: "Obowiązująca Norma",
            val1: "PN-EN 12831-1",
            lbl2: "Programy wsparcia",
            val2: "Czyste Powietrze / Moje Ciepło"
        }
    };

    // 3. Obsługa kliknięć
    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            tabs.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const target = this.getAttribute('data-target');
            
            // Animacja pigułki
            tabsContainer.setAttribute('data-active', target);
            // Zmiana stanu dashboardu (kolory + SVG)
            dashboard.setAttribute('data-state', target);

            // Podmiana tekstów
            dynTitle.textContent = dataContent[target].title;
            // Dodanie linków w opisie jeśli to zakładka dotacji (dla SEO)
            if(target === 'law') {
                dynDesc.innerHTML = 'Oficjalną podstawą prawną jest <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/" style="color:var(--rk-norm-brand); font-weight:700;">norma PN-EN 12831-1:2017-08</a>, która narzuca rygorystyczną metodologię. Projektowanie bez jej uwzględnienia uniemożliwia uzyskanie odbioru oraz pozyskanie środków z programów takich jak <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-a-dotacje-czyste-powietrze-i-moje-cieplo-2026/" style="color:var(--rk-norm-brand); font-weight:700;">Czyste Powietrze czy Moje Ciepło</a>.';
            } else {
                dynDesc.textContent = dataContent[target].desc;
            }
            
            lbl1.textContent = dataContent[target].lbl1;
            val1.textContent = dataContent[target].val1;
            lbl2.textContent = dataContent[target].lbl2;
            val2.textContent = dataContent[target].val2;
        });
    });
});
</script>



<style>
:root {
    --rk-tr-dark: #0f172a;
    --rk-tr-brand: #c2410c; /* Ciepły pomarańcz/cegła nawiązujący do przenikania ciepła */
    --rk-tr-brand-light: #ffedd5;
    --rk-tr-accent: #f97316;
    --rk-tr-blue: #0284c7;
    --rk-tr-blue-light: #e0f2fe;
    --rk-tr-bg: #ffffff;
    --rk-tr-panel: #f8fafc;
    --rk-tr-border: #e2e8f0;
    --rk-tr-text: #334155;
    --rk-tr-muted: #64748b;
}

.rk-tr-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-tr-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(194, 65, 12, 0.15);
    border: 1px solid rgba(194, 65, 12, 0.3);
    overflow: hidden;
}

/* Nagłówek i Wstęp Teorii */
.rk-tr-header {
    background: linear-gradient(135deg, var(--rk-tr-dark) 0%, #2a1508 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-tr-brand);
    display: block; /* Wymuszenie bloku, naprawia błędy z globalnym flexem */
}

.rk-tr-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(249, 115, 22, 0.2);
    color: #fdba74;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(249, 115, 22, 0.3);
}

.rk-tr-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-tr-title span { color: var(--rk-tr-accent); }

.rk-tr-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

/* Blok ze Wzorem - Naprawiony układ, zapobiega zgniataniu w pionie */
.rk-tr-equation-box {
    background: rgba(0, 0, 0, 0.4);
    border: 1px solid rgba(249, 115, 22, 0.4);
    border-radius: 16px;
    padding: 25px;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.5);
    width: 100%;
    box-sizing: border-box;
    overflow-x: auto; /* Pozwala na przewijanie na bardzo wąskich ekranach */
}

.rk-tr-equation {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 22px;
    color: #fdba74;
    letter-spacing: 1px;
    margin: 0 0 20px 0;
    text-align: center;
    line-height: 1.6;
    word-break: keep-all; /* Blokuje łamanie słów w dziwnych miejscach */
}

.rk-tr-equation-chunk {
    display: inline-block;
    white-space: nowrap;
}

.rk-tr-equation-legend {
    font-size: 13px;
    color: #94a3b8;
    line-height: 1.6;
    text-align: left;
    margin: 0;
    display: grid;
    /* Automatycznie dopasowuje kolumny, nie zgniata do pionu */
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 12px;
}

.rk-tr-equation-legend div {
    background: rgba(255, 255, 255, 0.05);
    padding: 8px 12px;
    border-radius: 8px;
    border-left: 3px solid rgba(249, 115, 22, 0.5);
}

.rk-tr-equation-legend strong { color: #e2e8f0; font-family: 'Cambria Math', 'Times New Roman', serif; font-size: 14px; }

/* Sekcja Interaktywna - Kalkulator */
.rk-tr-interactive {
    padding: 45px 50px;
    background: var(--rk-tr-panel);
}

.rk-tr-section-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-tr-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Kontrolki - Wybór Standardu */
.rk-tr-controls {
    display: flex;
    gap: 15px;
    margin-bottom: 35px;
}

.rk-tr-btn {
    flex: 1;
    background: #ffffff;
    border: 2px solid var(--rk-tr-border);
    border-radius: 14px;
    padding: 16px;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 6px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-tr-btn:hover {
    border-color: #cbd5e1;
    transform: translateY(-2px);
}

.rk-tr-btn.active {
    border-color: var(--rk-tr-brand);
    background: var(--rk-tr-brand-light);
    box-shadow: 0 10px 20px -5px rgba(194, 65, 12, 0.15);
}

.rk-tr-btn-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-tr-text);
}

.rk-tr-btn.active .rk-tr-btn-title { color: var(--rk-tr-brand); }
.rk-tr-btn-sub { font-size: 12px; color: var(--rk-tr-muted); font-weight: 600; }

/* Wyświetlacz Wyników Grid */
.rk-tr-dashboard {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-tr-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
}

/* SVG Wizualizacja Przegrody */
.rk-tr-svg-box {
    background: var(--rk-tr-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.6);
}

.rk-tr-svg { width: 100%; height: auto; max-width: 180px; }

/* Animacje SVG zależne od stanu */
.anim-arrow { stroke-dasharray: 15; stroke-dashoffset: 0; transition: stroke 0.4s; }
.anim-wall-fill { transition: fill 0.4s; }

.state-old .anim-arrow { stroke: #ef4444; stroke-width: 4; animation: heatEscape 0.6s linear infinite; }
.state-old .anim-wall-fill { fill: #64748b; }

.state-wt2021 .anim-arrow { stroke: #f97316; stroke-width: 2.5; animation: heatEscape 1.5s linear infinite; }
.state-wt2021 .anim-wall-fill { fill: #0284c7; }

.state-passive .anim-arrow { stroke: #fbbf24; stroke-width: 1.5; animation: heatEscape 3s linear infinite; }
.state-passive .anim-wall-fill { fill: #10b981; }

@keyframes heatEscape { to { stroke-dashoffset: -30; } }

/* Panele Wynikowe */
.rk-tr-results-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-tr-res-tile {
    background: #f8fafc;
    border: 1px solid var(--rk-tr-border);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
}

.rk-tr-res-tile.tile-total {
    grid-column: 1 / -1;
    background: var(--rk-tr-dark);
    border-color: var(--rk-tr-dark);
}

.rk-tr-res-label { font-size: 12px; text-transform: uppercase; font-weight: 800; color: var(--rk-tr-muted); margin-bottom: 4px; }
.rk-tr-res-tile.tile-total .rk-tr-res-label { color: #94a3b8; }

.rk-tr-res-value { font-size: 20px; font-weight: 900; color: var(--rk-tr-dark); font-variant-numeric: tabular-nums; }
.rk-tr-res-tile.tile-total .rk-tr-res-value { color: var(--rk-tr-accent); font-size: 28px; }

.rk-tr-res-formula { font-size: 11px; color: #94a3b8; margin-top: 6px; font-family: monospace; }
.rk-tr-res-tile.tile-total .rk-tr-res-formula { color: #cbd5e1; }

.rk-tr-insight-box {
    margin-top: 25px;
    padding: 18px 20px;
    background: var(--rk-tr-blue-light);
    border-left: 4px solid var(--rk-tr-blue);
    border-radius: 8px;
    font-size: 14px;
    line-height: 1.6;
    color: #0c4a6e;
    font-weight: 500;
}

@media (max-width: 768px) {
    .rk-tr-header, .rk-tr-interactive { padding: 35px 20px; }
    .rk-tr-title { font-size: 24px; }
    .rk-tr-controls { flex-direction: column; gap: 10px; }
    .rk-tr-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 20px; }
    .rk-tr-svg-box { height: 160px; max-width: 220px; margin: 0 auto; width: 100%; }
    .rk-tr-results-grid { grid-template-columns: 1fr; }
    .rk-tr-equation { font-size: 18px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-przenikanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak krok po kroku oblicza się straty ciepła przez przenikanie?",
    "description": "Zobacz inżynierski wzór na straty przez przenikanie (ΦT) wg normy PN-EN 12831. Obliczamy OZC dla ściany, okna i mostków cieplnych krok po kroku.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-przenikanie",
    "name": "Analiza strat ciepła przez przegrody budowlane (Przenikanie)",
    "description": "Interaktywne zestawienie wpływu współczynnika przenikania ciepła U przegród (ściana, okno, mostki termiczne) na całkowite straty ciepła pomieszczenia.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczanie strat ciepła przez przenikanie",
      "współczynnik przenikania ciepła U",
      "mostki termiczne OZC",
      "kalkulator strat ciepła budynek",
      "norma PN-EN 12831 wzór"
    ],
    "measurementTechnique": "Analiza porównawcza strumieni strat ciepła przez komponenty ściany zewn. wg normy PN-EN 12831 w 3 standardach budowlanych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wzór uwzględnia sumę iloczynów pola powierzchni netto, współczynnika U oraz różnicy temperatur projektowych.",
        "Dla standardu WT 2021 okno i liniowy mostek termiczny wokół ramy generują aż 60,6% strat ciepła przegrody."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-przenikanie",
    "name": "Kalkulator Przenikania Ciepła Przegrody",
    "description": "Narzędzie inżynierskie pozwalające prześledzić krok po kroku obliczenia OZC dla ściany zewnętrznej z oknem, zależnie od standardu izolacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tr-container" id="rk-tr-calc-app">
    
    <div class="rk-tr-header">
        <div class="rk-tr-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Metodologia Normy PN-EN 12831
        </div>
        <h2 class="rk-tr-title">Jak krok po kroku oblicza się <span>straty przez przenikanie?</span></h2>
        <p class="rk-tr-lead">
            Straty ciepła przez przenikanie (&Phi;<sub>T,i</sub>) oblicza się poprzez przemnożenie pola powierzchni przegrody <strong>A [m²]</strong> przez jej współczynnik przenikania ciepła <strong>U [W/(m²·K)]</strong> oraz projektową różnicę temperatur <strong>&Delta;T [K]</strong>. Formuła ta musi bezwzględnie uwzględniać liniowe mostki termiczne <strong>&Psi;</strong> wyrażone w W/(m·K). Ostateczny wynik podaje się z dokładnością do 1 W.
        </p>
        
        <div class="rk-tr-equation-box">
            <div class="rk-tr-equation">
                <span class="rk-tr-equation-chunk">&Phi;<sub>T,i</sub> = &Sigma; (A<sub>k</sub> &times; U<sub>k</sub> &times; f<sub>x,k</sub>)</span> &times; <span class="rk-tr-equation-chunk">(&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)</span> &nbsp;+&nbsp; <span class="rk-tr-equation-chunk">&Sigma; (&Psi;<sub>l</sub> &times; L<sub>l</sub> &times; f<sub>x,l</sub>)</span> &times; <span class="rk-tr-equation-chunk">(&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)</span>
            </div>
            <div class="rk-tr-equation-legend">
                <div><strong>f<sub>x</sub></strong> &#8211; współcz. redukcji temp. (przestrz. nieogrzewane)</div>
                <div><strong>&theta;<sub>int,i</sub></strong> &#8211; temperatura wewnętrzna projektowa</div>
                <div><strong>L</strong> &#8211; długość liniowego mostka termicznego [m]</div>
                <div><strong>&theta;<sub>e</sub></strong> &#8211; temperatura zewnętrzna obliczeniowa</div>
            </div>
        </div>
    </div>

    <div class="rk-tr-interactive">
        <h3 class="rk-tr-section-title">Symulator: Wpływ izolacji na straty ściany z oknem (III strefa, &Delta;T = 40K)</h3>
        
        <div class="rk-tr-controls">
            <button class="rk-tr-btn" data-standard="old">
                <span class="rk-tr-btn-title">Stary Dom</span>
                <span class="rk-tr-btn-sub">Brak izolacji</span>
            </button>
            <button class="rk-tr-btn active" data-standard="wt2021">
                <span class="rk-tr-btn-title">WT 2021</span>
                <span class="rk-tr-btn-sub">Przykład normatywny</span>
            </button>
            <button class="rk-tr-btn" data-standard="passive">
                <span class="rk-tr-btn-title">Dom Pasywny</span>
                <span class="rk-tr-btn-sub">Certyfikowane detale</span>
            </button>
        </div>

        <div class="rk-tr-dashboard">
            <div class="rk-tr-svg-box state-wt2021" id="trSvgBox">
                <svg class="rk-tr-svg" viewBox="0 0 100 100">
                    <rect class="anim-wall-fill" x="20" y="10" width="30" height="80" rx="2" />
                    <rect x="15" y="35" width="40" height="30" fill="#bae6fd" stroke="#0f172a" stroke-width="4" rx="2" />
                    <line x1="15" y1="50" x2="55" y2="50" stroke="#0f172a" stroke-width="2" />
                    
                    <text x="75" y="20" fill="#94a3b8" font-size="10" font-weight="bold">WEWN. (20°C)</text>
                    <text x="5" y="95" fill="#94a3b8" font-size="10" font-weight="bold" transform="rotate(-90 5 95)">ZEWN. (-20°C)</text>
                    
                    <path class="anim-arrow" d="M 70 25 L 10 25" fill="none" stroke-linecap="round" />
                    <path class="anim-arrow" d="M 70 50 L 10 50" fill="none" stroke-linecap="round" />
                    <path class="anim-arrow" d="M 70 75 L 10 75" fill="none" stroke-linecap="round" />
                </svg>
            </div>

            <div>
                <div class="rk-tr-results-grid">
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">1. Ściana netto (13,20 m²)</span>
                        <span class="rk-tr-res-value" id="valWall">79,2 W</span>
                        <span class="rk-tr-res-formula" id="formWall">13,2 &times; 0,15 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">2. Okno 3-szybowe (3,00 m²)</span>
                        <span class="rk-tr-res-value" id="valWin">108,0 W</span>
                        <span class="rk-tr-res-formula" id="formWin">3,00 &times; 0,90 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile">
                        <span class="rk-tr-res-label">3. Mostek Liniowy (7,0 m)</span>
                        <span class="rk-tr-res-value" id="valBridge">14,0 W</span>
                        <span class="rk-tr-res-formula" id="formBridge">7,00 &times; 0,05 &times; 40K</span>
                    </div>
                    <div class="rk-tr-res-tile tile-total">
                        <span class="rk-tr-res-label">Suma strat dla przegrody (&Phi;<sub>T</sub>)</span>
                        <span class="rk-tr-res-value" id="valTotal">201,2 W</span>
                        <span class="rk-tr-res-formula" id="formTotal">79,2 + 108,0 + 14,0 W</span>
                    </div>
                </div>

                <div class="rk-tr-insight-box" id="trInsightText">
                    Wynik pokazuje, że dla ściany o pow. 16,2 m² projektant musi zabezpieczyć <strong>201,2 W</strong> mocy grzewczej. Aż <strong>60,6%</strong> ciepła ucieka przez stolarkę okienną i jej montaż, mimo że okno zajmuje tylko 18,5% powierzchni.
                </div>
            </div>
        </div>
        
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-tr-calc-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji skryptu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja należy do Projekt-Ogrzewania.pl</div></div>';
        return;
    }

    // Elementy DOM
    const btns = document.querySelectorAll('.rk-tr-btn');
    const svgBox = document.getElementById('trSvgBox');
    
    const valWall = document.getElementById('valWall'); const formWall = document.getElementById('formWall');
    const valWin = document.getElementById('valWin'); const formWin = document.getElementById('formWin');
    const valBridge = document.getElementById('valBridge'); const formBridge = document.getElementById('formBridge');
    const valTotal = document.getElementById('valTotal'); const formTotal = document.getElementById('formTotal');
    const insightText = document.getElementById('trInsightText');

    // Baza danych dla 3 wariantów standardu izolacji
    const simData = {
        old: {
            uWall: "1,20", wWall: "633,6 W",
            uWin: "2,80", wWin: "336,0 W",
            uBridge: "0,15", wBridge: "42,0 W",
            total: "1011,6 W",
            formT: "633,6 + 336,0 + 42,0 W",
            insight: "W starym budownictwie przez taką samą ścianę ucieka ponad <strong>1 kW</strong> energii (pięciokrotnie więcej!). Sama pusta ściana bez izolacji odpowiada tu za potężne 62% strat. Wymaga to wysokotemperaturowych grzejników."
        },
        wt2021: {
            uWall: "0,15", wWall: "79,2 W",
            uWin: "0,90", wWin: "108,0 W",
            uBridge: "0,05", wBridge: "14,0 W",
            total: "201,2 W",
            formT: "79,2 + 108,0 + 14,0 W",
            insight: "Wynik pokazuje, że dla ściany o pow. 16,2 m² projektant musi zabezpieczyć <strong>201,2 W</strong> mocy grzewczej. Aż <strong>60,6%</strong> ciepła ucieka przez okno i jego montaż, mimo że zajmuje ono tylko 18,5% powierzchni."
        },
        passive: {
            uWall: "0,10", wWall: "52,8 W",
            uWin: "0,70", wWin: "84,0 W",
            uBridge: "0,01", wBridge: "2,8 W",
            total: "139,6 W",
            formT: "52,8 + 84,0 + 2,8 W",
            insight: "Dzięki ekstremalnej izolacji i tzw. ciepłemu montażowi okna w warstwie ocieplenia (&Psi; bliskie zeru), straty spadają do minimum (<strong>139,6 W</strong>). Ogrzewanie podłogowe może tu pracować na zasilaniu rzędu zaledwie 26°C."
        }
    };

    // Logika przycisków i aktualizacja interfejsu
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const std = this.getAttribute('data-standard');
            const data = simData[std];

            // Zmiana klasy dla animacji SVG (w CSS zmiana koloru ściany i strzałek ciepła)
            svgBox.className = "rk-tr-svg-box state-" + std;

            // Podmiana zawartości paneli liczbowych
            valWall.textContent = data.wWall; formWall.innerHTML = "13,2 &times; " + data.uWall + " &times; 40K";
            valWin.textContent = data.wWin; formWin.innerHTML = "3,00 &times; " + data.uWin + " &times; 40K";
            valBridge.textContent = data.wBridge; formBridge.innerHTML = "7,00 &times; " + data.uBridge + " &times; 40K";
            
            valTotal.textContent = data.total; formTotal.textContent = data.formT;
            insightText.innerHTML = data.insight;
        });
    });
});
</script>



<style>
:root {
    --rk-vent-dark: #0f172a;
    --rk-vent-brand: #0284c7;
    --rk-vent-brand-light: #e0f2fe;
    --rk-vent-accent: #0ea5e9;
    --rk-vent-red: #ef4444;
    --rk-vent-red-bg: #fef2f2;
    --rk-vent-green: #10b981;
    --rk-vent-green-bg: #ecfdf5;
    --rk-vent-bg: #ffffff;
    --rk-vent-panel: #f8fafc;
    --rk-vent-border: #cbd5e1;
    --rk-vent-text: #334155;
    --rk-vent-muted: #64748b;
}

.rk-vent-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-vent-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid rgba(2, 132, 199, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-vent-header {
    background: linear-gradient(135deg, var(--rk-vent-dark) 0%, #164e63 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-vent-brand);
}

.rk-vent-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(14, 165, 233, 0.3);
}

.rk-vent-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-vent-title span { color: #38bdf8; }

.rk-vent-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

.rk-link-vent {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-link-vent:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Box ze wzorem */
.rk-eq-box {
    background: rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(56, 189, 248, 0.3);
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
}

.rk-eq {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 22px;
    color: #bae6fd;
    letter-spacing: 1px;
    margin: 0 0 10px 0;
}

.rk-eq-desc {
    font-size: 13px;
    color: #94a3b8;
    margin: 0;
}

.rk-eq-desc strong { color: #e2e8f0; }

/* Interaktywny Panel */
.rk-vent-interactive {
    padding: 40px 50px;
    background: var(--rk-vent-panel);
}

.rk-vent-section-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-vent-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Przełącznik Systemów */
.rk-vent-switcher {
    display: flex;
    justify-content: center;
    margin-bottom: 35px;
}

.rk-app-toggle {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 600px;
}

.rk-toggle-btn {
    flex: 1;
    position: relative;
    z-index: 2;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    border: none;
    background: transparent;
    color: #64748b;
    cursor: pointer;
    border-radius: 99px;
    transition: color 0.3s ease;
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-toggle-btn.active { color: #ffffff; }

.rk-toggle-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-vent-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-toggle[data-mode="rek"] .rk-toggle-glider {
    transform: translateX(100%);
    background: var(--rk-vent-green);
}

/* Dashboard Wyników */
.rk-vent-dashboard {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-vent-border);
    box-shadow: 0 10px 30px -10px rgba(0,0,0,0.05);
    transition: all 0.4s ease;
}

.rk-vent-dashboard.mode-grav { border-color: rgba(239, 68, 68, 0.3); }
.rk-vent-dashboard.mode-rek { border-color: rgba(16, 185, 129, 0.3); }

/* Kontener SVG */
.rk-vent-svg-stage {
    background: var(--rk-vent-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.6);
    position: relative;
    overflow: hidden;
}

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s; width: 100%; height: 100%; }
.rk-vent-dashboard.mode-grav .layer-grav { opacity: 1; position: relative; }
.rk-vent-dashboard.mode-rek .layer-rek { opacity: 1; position: relative; }

/* Animacje SVG */
.anim-air-in { stroke-dasharray: 6 6; animation: flowIn 1s linear infinite; }
.anim-air-out { stroke-dasharray: 6 6; animation: flowOut 0.8s linear infinite; }
.anim-air-rek { stroke-dasharray: 6 6; animation: flowIn 2s linear infinite; }
.anim-heat-exch { animation: pulseCore 2s infinite alternate; }

@keyframes flowIn { from { stroke-dashoffset: 24; } to { stroke-dashoffset: 0; } }
@keyframes flowOut { from { stroke-dashoffset: 0; } to { stroke-dashoffset: 24; } }
@keyframes pulseCore { 0% { fill: #3b82f6; } 100% { fill: #ef4444; } }

/* Siatka Wyników */
.rk-vent-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-vent-tile {
    background: #f1f5f9;
    padding: 18px 20px;
    border-radius: 14px;
    border-left: 4px solid transparent;
    transition: all 0.3s;
    display: flex;
    flex-direction: column;
}

.rk-vent-dashboard.mode-grav .rk-vent-tile { border-left-color: var(--rk-vent-red); background: var(--rk-vent-red-bg); }
.rk-vent-dashboard.mode-rek .rk-vent-tile { border-left-color: var(--rk-vent-green); background: var(--rk-vent-green-bg); }

.rk-vent-tile.tile-full {
    grid-column: 1 / -1;
    background: var(--rk-vent-dark);
    border-color: var(--rk-vent-dark);
}

.rk-tile-lbl { font-size: 11px; text-transform: uppercase; font-weight: 800; color: var(--rk-vent-muted); margin-bottom: 4px; }
.rk-vent-tile.tile-full .rk-tile-lbl { color: #94a3b8; }

.rk-tile-val { font-size: 18px; font-weight: 900; color: var(--rk-vent-dark); transition: color 0.3s; }
.rk-vent-tile.tile-full .rk-tile-val { font-size: 26px; color: var(--rk-vent-accent); }

.rk-tile-sub { font-size: 12px; color: #94a3b8; margin-top: 6px; font-family: monospace; }

@media (max-width: 768px) {
    .rk-vent-header, .rk-vent-interactive { padding: 35px 20px; }
    .rk-vent-title { font-size: 24px; }
    .rk-app-toggle { flex-direction: column; background: transparent; box-shadow: none; gap: 10px; }
    .rk-toggle-glider { display: none; }
    .rk-toggle-btn { background: #e2e8f0; color: #64748b; }
    .rk-toggle-btn.active[data-target="grav"] { background: var(--rk-vent-red); color: #fff; }
    .rk-toggle-btn.active[data-target="rek"] { background: var(--rk-vent-green); color: #fff; }
    .rk-vent-dashboard { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-vent-svg-stage { max-width: 200px; margin: 0 auto; height: 160px; }
    .rk-vent-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-wentylacja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak rodzaj wentylacji wpływa na projektowe straty wentylacyjne?",
    "description": "Zestawienie strat ciepła dla wentylacji grawitacyjnej i rekuperacji. Obliczanie OZC na przykładzie domu 400m3 wg normy PN-EN 12831.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-wentylacja",
    "name": "Porównanie strat wentylacyjnych: Grawitacja vs Rekuperacja",
    "description": "Obliczenia inżynierskie różnicy w zapotrzebowaniu na moc grzewczą w zależności od wybranego systemu wymiany powietrza dla budynku o kubaturze 400 m³.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "straty wentylacyjne wzór",
      "rekuperacja a pompa ciepła",
      "obliczenia OZC wentylacja",
      "wentylacja grawitacyjna straty ciepła",
      "norma PN-B-03430"
    ],
    "measurementTechnique": "Aplikacja wzoru fizycznego ΦV = V * 0,34 * ΔT w zestawieniu ze sprawnością temperaturową wymiennika rekuperatora (η = 85%).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wentylacja Grawitacyjna: Krotność n=0,5 h-1 przy -18°C generuje potężną stratę 2584 W.",
        "Rekuperacja: Odzysk ciepła z η=85% i kontrolowany strumień redukuje stratę do zaledwie 491 W, oszczędzając 2 kW mocy źródła ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-wentylacja",
    "name": "Kalkulator Strat Wentylacyjnych OZC",
    "description": "Interaktywny symulator pozwalający porównać obciążenie cieplne budynku z wentylacją naturalną i mechaniczną z odzyskiem ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-vent-container" id="rk-ozc-vent-app">
    
    <div class="rk-vent-header">
        <div class="rk-vent-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m12.41 11.41A2 2 0 1 1 13 16h9m-1.59-7.41A2 2 0 1 0 19 12h3"></path></svg>
            Dynamika Powietrza
        </div>
        <h2 class="rk-vent-title">Jak rodzaj wentylacji wpływa na <span>projektowe straty wentylacyjne?</span></h2>
        <p class="rk-vent-lead">
            Rodzaj wentylacji decyduje o wielkości strumienia powietrza i stratach wentylacyjnych (Φ<sub>V,i</sub>). System grawitacyjny generuje ucieczkę ciepła na poziomie nawet 40–50% całkowitego bilansu budynku. Zastosowanie <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link-vent">rekuperacji</a> o udokumentowanej sprawności temperaturowej 85% zmniejsza te straty o ponad 80%.
        </p>
        
        <div class="rk-eq-box">
            <div class="rk-eq">
                Φ<sub>V,i</sub> = V<sub>i</sub> &times; 0,34 &times; (&theta;<sub>int,i</sub> &minus; &theta;<sub>e</sub>)
            </div>
            <p class="rk-eq-desc">
                Gdzie <strong>V<sub>i</sub></strong> to projektowy strumień objętości powietrza [m³/h], a <strong>0,34 Wh/(m³·K)</strong> to stała cieplna powietrza.
            </p>
        </div>
    </div>

    <div class="rk-vent-interactive">
        <h3 class="rk-vent-section-title">Studium przypadku: Dom 400 m³ (II Strefa klimatyczna, &Delta;T = 38 K)</h3>

        <div class="rk-vent-switcher">
            <div class="rk-app-toggle" id="ventSwitchContainer" data-mode="grav">
                <div class="rk-toggle-glider" id="ventGlider"></div>
                <button class="rk-toggle-btn active" data-target="grav">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    Wariant A: Grawitacja
                </button>
                <button class="rk-toggle-btn" data-target="rek">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
                    Wariant B: Rekuperacja
                </button>
            </div>
        </div>

        <div class="rk-vent-dashboard mode-grav" id="ventDashboard">
            
            <div class="rk-vent-svg-stage">
                <svg class="rk-svg-layer layer-grav" viewBox="0 0 100 100">
                    <path d="M 10 50 L 50 20 L 90 50 L 90 90 L 10 90 Z" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                    <rect x="65" y="10" width="10" height="25" fill="#334155" />
                    <path class="anim-air-in" d="M 0 60 L 25 60" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-air-in" d="M 100 70 L 75 70" fill="none" stroke="#38bdf8" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-air-out" d="M 70 30 L 70 -5" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                </svg>
                <svg class="rk-svg-layer layer-rek" viewBox="0 0 100 100">
                    <path d="M 10 50 L 50 20 L 90 50 L 90 90 L 10 90 Z" fill="#1e293b" stroke="#334155" stroke-width="2"/>
                    <rect class="anim-heat-exch" x="40" y="35" width="20" height="15" rx="2" />
                    <path class="anim-air-rek" d="M 10 40 L 40 40" fill="none" stroke="#38bdf8" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 50 65 L 50 50" fill="none" stroke="#ef4444" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 60 40 L 90 40" fill="none" stroke="#f97316" stroke-width="2"/>
                    <path class="anim-air-rek" d="M 50 35 L 50 10" fill="none" stroke="#64748b" stroke-width="2"/>
                </svg>
            </div>

            <div class="rk-vent-grid">
                <div class="rk-vent-tile">
                    <span class="rk-tile-lbl">Strumień Powietrza (V)</span>
                    <span class="rk-tile-val" id="ventValFlow">200 m³/h</span>
                    <span class="rk-tile-sub" id="ventSubFlow">n = 0,5 h<sup>-1</sup> (Infiltracja)</span>
                </div>
                <div class="rk-vent-tile">
                    <span class="rk-tile-lbl">Temp. Nawiewu po wymianie</span>
                    <span class="rk-tile-val" id="ventValTemp">-18°C</span>
                    <span class="rk-tile-sub" id="ventSubTemp">Brak odzysku ciepła</span>
                </div>
                <div class="rk-vent-tile tile-full">
                    <span class="rk-tile-lbl">Projektowa Strata Wentylacyjna (ΦV)</span>
                    <span class="rk-tile-val" id="ventValTotal">2584 W</span>
                    <span class="rk-tile-sub" id="ventSubTotal">200 × 0,34 × 38K</span>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-ozc-vent-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // Elementy DOM
    const switchContainer = document.getElementById('ventSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('ventDashboard');
    
    // Pola tekstowe - Użyto unikalnych prefiksów "vent" w ID
    const valFlow = document.getElementById('ventValFlow'); 
    const subFlow = document.getElementById('ventSubFlow');
    const valTemp = document.getElementById('ventValTemp'); 
    const subTemp = document.getElementById('ventSubTemp');
    const valTotal = document.getElementById('ventValTotal'); 
    const subTotal = document.getElementById('ventSubTotal');

    const ventData = {
        grav: {
            flow: "200 m³/h", sFlow: "n = 0,5 h-1 (Infiltracja mrozu)",
            temp: "-18°C", sTemp: "Mroźne powietrze wpada do domu",
            total: "2584 W", sTotal: "200 × 0,34 × 38K"
        },
        rek: {
            flow: "120 m³/h", sFlow: "Kontrolowany wymóg higieniczny",
            temp: "+14,3°C", sTemp: "Powietrze dogrzane w wymienniku (η = 85%)",
            total: "490,96 W", sTotal: "Zysk: 2093 W (Zawiera nieszczelności)"
        }
    };

    // Logika przycisków
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const mode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', mode);
            dashboard.className = "rk-vent-dashboard mode-" + mode;

            // Podmiana danych bez błędów krzyżowych
            const d = ventData[mode];
            valFlow.innerHTML = d.flow; subFlow.innerHTML = d.sFlow;
            valTemp.innerHTML = d.temp; subTemp.innerHTML = d.sTemp;
            valTotal.innerHTML = d.total; subTotal.innerHTML = d.sTotal;
        });
    });
});
</script>



<style>
:root {
    --rk-res-dark: #0f172a;
    --rk-res-brand: #ea580c; /* Ciepły pomarańcz dla fizyki przewodzenia ciepła */
    --rk-res-brand-light: #ffedd5;
    --rk-res-accent: #f97316;
    --rk-res-green: #10b981;
    --rk-res-green-bg: #ecfdf5;
    --rk-res-red: #ef4444;
    --rk-res-red-bg: #fef2f2;
    --rk-res-bg: #ffffff;
    --rk-res-panel: #f8fafc;
    --rk-res-border: #cbd5e1;
    --rk-res-text: #334155;
    --rk-res-muted: #64748b;
}

.rk-res-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-res-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(234, 88, 12, 0.12);
    border: 1px solid var(--rk-res-brand);
    overflow: hidden;
}

/* Nagłówek i Wstęp */
.rk-res-header {
    background: linear-gradient(135deg, var(--rk-res-dark) 0%, #2e1407 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-res-brand);
}

.rk-res-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(234, 88, 12, 0.25);
    color: #ffedd5;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(234, 88, 12, 0.4);
}

.rk-res-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-res-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-res-lead strong {
    color: #ffffff;
    font-weight: 800;
}

.rk-res-lead a {
    color: #ffedd5;
    text-decoration: none;
    border-bottom: 1px dashed #ffedd5;
    transition: color 0.3s;
}

.rk-res-lead a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Interaktywny Panel Wyboru */
.rk-res-interactive {
    padding: 40px 50px;
    background: var(--rk-res-panel);
}

/* Selektor kafelków (Materiały wykończeniowe) */
.rk-res-selector-grid {
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    gap: 10px;
    margin-bottom: 35px;
}

.rk-res-select-btn {
    background: #ffffff;
    border: 2px solid var(--rk-res-border);
    padding: 15px 10px;
    border-radius: 14px;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 6px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-res-select-btn:hover {
    background: #f1f5f9;
    border-color: #94a3b8;
    transform: translateY(-2px);
}

.rk-res-select-btn.active {
    border-color: var(--rk-res-brand);
    background: var(--rk-res-brand-light);
}

.rk-btn-txt {
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-res-text);
}

.rk-res-select-btn.active .rk-btn-txt {
    color: var(--rk-res-brand);
}

/* Główny Dashboard Prezentacji */
.rk-res-dashboard {
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-res-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 40px;
    align-items: center;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
}

/* Kontener Wizualizacji SVG */
.rk-res-svg-stage {
    background: var(--rk-res-dark);
    border-radius: 16px;
    padding: 20px;
    height: 220px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
    position: relative;
}

.rk-res-svg {
    width: 100%;
    height: auto;
    display: block;
}

/* Dynamiczne modyfikacje SVG przez klasy narzucane z JS */
.anim-cop-needle { transform-origin: 50px 80px; transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-barrier-layer { transition: height 0.4s ease, fill 0.4s ease; transform-origin: bottom; }

/* Tarcza wydajności COP */
.rk-res-svg-stage[data-material="gres"] .anim-cop-needle { transform: rotate(50deg); }
.rk-res-svg-stage[data-material="pvc"] .anim-cop-needle { transform: rotate(35deg); }
.rk-res-svg-stage[data-material="panele"] .anim-cop-needle { transform: rotate(0deg); }
.rk-res-svg-stage[data-material="deska"] .anim-cop-needle { transform: rotate(-30deg); }
.rk-res-svg-stage[data-material="dywan"] .anim-cop-needle { transform: rotate(-55deg); }

/* Wysokość warstwy oporu cieplnego */
.rk-res-svg-stage[data-material="gres"] .anim-barrier-layer { height: 2px; fill: var(--rk-res-green); }
.rk-res-svg-stage[data-material="pvc"] .anim-barrier-layer { height: 6px; fill: #6ee7b7; }
.rk-res-svg-stage[data-material="panele"] .anim-barrier-layer { height: 14px; fill: #fcd34d; }
.rk-res-svg-stage[data-material="deska"] .anim-barrier-layer { height: 22px; fill: var(--rk-res-accent); }
.rk-res-svg-stage[data-material="dywan"] .anim-barrier-layer { height: 32px; fill: var(--rk-res-red); }

/* Siatka parametrów technicznych */
.rk-res-tiles-panel {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-res-tile {
    background: #f1f5f9;
    padding: 15px 20px;
    border-radius: 12px;
    border-left: 4px solid var(--rk-res-brand);
    transition: all 0.3s;
}

.rk-res-tile.tile-full {
    grid-column: 1 / -1;
    background: var(--rk-res-dark);
    border-left-color: var(--rk-res-accent);
}

.rk-res-tile.norm-alert {
    border-left-color: var(--rk-res-red);
    background: var(--rk-res-red-bg);
}

.rk-tile-lbl {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--rk-res-muted);
    margin-bottom: 4px;
}

.rk-res-tile.tile-full .rk-tile-lbl { color: #94a3b8; }

.rk-tile-val {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-res-dark);
}

.rk-res-tile.tile-full .rk-tile-val { color: #ffffff; font-size: 18px; }
.rk-res-tile.norm-alert .rk-tile-val { color: var(--rk-res-red); }

.rk-tile-sub {
    display: block;
    font-size: 12px;
    color: #64748b;
    margin-top: 4px;
    font-weight: 500;
}
.rk-res-tile.tile-full .rk-tile-sub { color: #cbd5e1; }

@media (max-width: 768px) {
    .rk-res-header, .rk-res-interactive { padding: 35px 25px; }
    .rk-res-header h2 { font-size: 24px; }
    .rk-res-selector-grid { grid-template-columns: 1fr; gap: 10px; }
    .rk-res-dashboard { grid-template-columns: 1fr; gap: 25px; padding: 25px; }
    .rk-res-svg-stage { height: 180px; max-width: 240px; margin: 0 auto; width: 100%; }
    .rk-res-tiles-panel { grid-template-columns: 1fr; gap: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#article-okladziny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/"
    },
    "headline": "Jak opór cieplny materiałów wykończeniowych zmienia parametry instalacji?",
    "description": "Analiza wpływu oporu cieplnego okładziny wierzchniej (R) na gęstość strumienia ogrzewania podłogowego i współczynnik COP pompy ciepła wg normy PN-EN 1264.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#dataset-okladziny",
    "name": "Zestawienie oporów cieplnych i wydajności typowych materiałów podłogowych",
    "description": "Twarde dane inżynierskie porównujące opory termiczne, gęstość strumienia cieplnego q oraz niezbędną temperaturę zasilania dla 5 rodzajów wykończenia podłogi.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny okładziny podłogowej",
      "norma PN-EN 1264 ogrzewanie",
      "temperatura zasilania podłogówki pompy ciepła",
      "deska warstwowa na ogrzewaniu podłogowym",
      "spadek efektywności COP pompy"
    ],
    "measurementTechnique": "Kalkulacja hydrauliczna i termiczna przenikania energii przez warstwy jastrychu i wykończenia wierzchniego dla stałej straty pomieszczenia 50 W/m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Gres/płytki: Grubość 10mm, opór R=0,015 m2K/W, idealne parametry zasilania 32°C.",
        "Deska warstwowa klejona: Grubość 14mm, wysoki opór R=0,120 m2K/W, podnosi zasilanie do 43°C.",
        "Gruby dywan z podkładem: Przekracza normatywny limit 0,150 m2K/W, generując spadek sprawności źródła grzewczego."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/#webapp-okladziny",
    "name": "Interaktywny Analizator Opóru Termicznego Podłogi",
    "description": "Narzędzie symulacyjne demonstrujące w czasie rzeczywistym przełożenie fizycznego oporu okładziny wierzchniej na temperaturę zasilania i sprawność pompy ciepła (COP).",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and modern web browser with SVG rendering capability",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-res-container" id="rk-floor-res-app">
    
    <div class="rk-res-header">
        <div class="rk-res-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Fizyka Przewodzenia Ciepła
        </div>
        <h2>Jak opór cieplny materiałów wykończeniowych zmienia parametry instalacji?</h2>
        <p class="rk-res-lead">
            Opór cieplny okładziny podłogowej (<strong>R<sub>&lambda;,B</sub></strong>) ogranicza strumień energii, a norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a> kategorycznie zabrania przekraczania wartości <strong>0,15 m²·K/W</strong> dla warstw wierzchnich. Wyższy opór cieplny materiału działa niczym izolator, wymuszając podniesienie temperatury zasilania instalacji o <strong>5–12°C</strong>. To bezpośrednio obniża sprawność <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pomp ciepła</a> (spadek COP o ok. 2,5% na każdy stopień w górę). Każdy rodzaj wykończenia musi być precyzyjnie dobrany już na etapie <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">obliczeń projektowych ogrzewania podłogowego</a>.
        </p>
    </div>

    <div class="rk-res-interactive">
        <h3 class="rk-res-section-title">Aplikacja Inżynierska: Porównanie parametrów wykończenia dla straty 50 W/m²</h3>
        
        <div class="rk-res-selector-grid">
            <button class="rk-res-select-btn active" data-mat="gres">
                <span class="rk-btn-txt">Płytki / Gres</span>
            </button>
            <button class="rk-res-select-btn" data-mat="pvc">
                <span class="rk-btn-txt">PVC / LVT</span>
            </button>
            <button class="rk-res-select-btn" data-mat="panele">
                <span class="rk-btn-txt">Panele</span>
            </button>
            <button class="rk-res-select-btn" data-mat="deska">
                <span class="rk-btn-txt">Deska Dąb</span>
            </button>
            <button class="rk-res-select-btn" data-mat="dywan">
                <span class="rk-btn-txt">Gruby Dywan</span>
            </button>
        </div>

        <div class="rk-res-dashboard">
            
            <div class="rk-res-svg-stage" id="resSvgStage" data-material="gres">
                <svg class="rk-res-svg" viewBox="0 0 100 110">
                    <path d="M 15 45 A 35 35 0 0 1 85 45" fill="none" stroke="#334155" stroke-width="6" stroke-linecap="round"/>
                    <path d="M 15 45 A 35 35 0 0 1 50 10" fill="none" stroke="#ef4444" stroke-width="6" stroke-linecap="round"/>
                    <path d="M 50 10 A 35 35 0 0 1 85 45" fill="none" stroke="#10b981" stroke-width="6" stroke-linecap="round"/>
                    <text x="50" y="28" fill="#94a3b8" font-size="7" font-weight="bold" text-anchor="middle">COP POMPY</text>
                    
                    <g class="anim-cop-needle">
                        <line x1="50" y1="45" x2="50" y2="15" stroke="#ffffff" stroke-width="2.5" stroke-linecap="round"/>
                        <circle cx="50" cy="45" r="4" fill="#cbd5e1"/>
                    </g>
                    
                    <rect x="10" y="90" width="80" height="15" fill="#475569" rx="2" />
                    <circle cx="30" cy="97" r="4" fill="#ef4444"/>
                    <circle cx="50" cy="97" r="4" fill="#ef4444"/>
                    <circle cx="70" cy="97" r="4" fill="#ef4444"/>
                    
                    <rect class="anim-barrier-layer" x="10" y="88" width="80" height="2" rx="1"/>
                    <text x="50" y="78" fill="#ffffff" font-size="6" text-anchor="middle" letter-spacing="0.5">BARIERA TERMICZNA</text>
                </svg>
            </div>

            <div class="rk-res-tiles-panel" id="resTilesPanel">
                <div class="rk-res-tile">
                    <span class="rk-tile-lbl">Grubość Materiału</span>
                    <span class="rk-tile-val" id="resValThickness">10 mm</span>
                </div>
                <div class="rk-res-tile" id="resTileLimit">
                    <span class="rk-tile-lbl">Opór cieplny R<sub>&lambda;,B</sub></span>
                    <span class="rk-tile-val" id="resValR">0,015 m²·K/W</span>
                </div>
                <div class="rk-res-tile">
                    <span class="rk-tile-lbl">Max Gęstość Strumienia (q)</span>
                    <span class="rk-tile-val" id="resValQ">95 W/m² (przy t<sub>zas</sub>=35°C)</span>
                </div>
                <div class="rk-res-tile tile-full">
                    <span class="rk-tile-lbl">Wymagana Temp. Zasilania (dla straty 50 W/m²)</span>
                    <span class="rk-tile-val" id="resValZas">32°C (Idealna sprawność układu)</span>
                    <span class="rk-tile-sub" id="resValSub">Zużycie energii elektrycznej w normie projektowej.</span>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak tagów H2/H3 w strukturze blokady)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-floor-res-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd ochrony autorskiej</div><div style="font-size:13px; color:#cbd5e1;">Zestawienia Dataset oraz aplikacja symulatora okładzin wierzchnich stanowią integralną własność Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy sterujące i dashboard
    const btns = document.querySelectorAll('.rk-res-select-btn');
    const svgStage = document.getElementById('resSvgStage');
    const tileLimit = document.getElementById('resTileLimit');
    
    // Pola tekstowe kafelków
    const resThickness = document.getElementById('resValThickness');
    const resR = document.getElementById('resValR');
    const resQ = document.getElementById('resValQ');
    const resZas = document.getElementById('resValZas');
    const resSub = document.getElementById('resValSub');

    // Baza danych parametrów technicznych (czyste sznury znaków bez backticków)
    const materialDb = {
        gres: {
            mode: "gres", thickness: "10 mm", rVal: "0,015 m²·K/W",
            qVal: "95 W/m² (Dedykowana podłogówce)",
            zas: "32°C (Idealna sprawność układu)",
            sub: "Doskonała przewodność cieplna ceramiki. Pompa ciepła pracuje z najwyższym możliwym COP.",
            isOver: false
        },
        pvc: {
            mode: "pvc", thickness: "2,5 mm", rVal: "0,030 m²·K/W",
            qVal: "82 W/m² (Wysoka wydajność)",
            zas: "34°C (Stabilne parametry operacyjne)",
            sub: "Niski opór własny cienkich okładzin LVT klejonych do jastrychu. Bardzo dobry materiał.",
            isOver: false
        },
        panele: {
            mode: "panele", thickness: "8 mm", rVal: "0,070 m²·K/W",
            qVal: "60 W/m² (Średni opór materiałowy)",
            zas: "38°C (Wymaga korekty krzywej grzewczej)",
            sub: "Konieczność zastosowania dedykowanego, cienkiego podkładu kwarcowego maty perforowanej.",
            isOver: false
        },
        deska: {
            mode: "deska", thickness: "14 mm", rVal: "0,120 m²·K/W",
            qVal: "42 L/m² (Niska zdolność emisyjna)",
            zas: "43°C (Wzrost zużycia prądu o ok. 27.5%)",
            sub: "Drewno działa jak barierowy izolator. Wymusza podniesienie temperatury wody o 11 K w stosunku do gresu.",
            isOver: false
        },
        dywan: {
            mode: "dywan", thickness: "12 mm", rVal: "0,160 m²·K/W",
            qVal: "28 W/m² (Układ skrajnie dławiony)",
            zas: "47°C (Przekroczenie progu ekonomicznego)",
            sub: "PRZEKROCZONA NORMA PN-EN 1264 (>0,15 m²·K/W). Pompa ciepła traci efektywność i drastycznie rosną rachunki.",
            isOver: true
        }
    };

    // 3. Logika obsługi kliknięć kafelków selektora
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const matKey = this.getAttribute('data-mat');
            const data = materialDb[matKey];

            // Aktualizacja stanu SVG
            svgStage.setAttribute('data-material', data.mode);

            // Podmiana danych liczbowych i opisów
            resThickness.textContent = data.thickness;
            resR.textContent = data.rVal;
            resQ.textContent = data.qVal;
            resZas.textContent = data.zas;
            resSub.textContent = data.sub;

            // Obsługa alertu przekroczenia normy PN-EN 1264
            if (data.isOver) {
                tileLimit.className = "rk-res-tile norm-alert";
                resR.style.color = "var(--rk-res-red)";
            } else {
                tileLimit.className = "rk-res-tile";
                resR.style.color = "var(--rk-res-dark)";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-algo-dark: #0f172a;
    --rk-algo-brand: #8b5cf6; /* Inżynieryjny fiolet/indygo */
    --rk-algo-brand-light: #ede9fe;
    --rk-algo-accent: #f59e0b; /* Bursztyn dla akcentów ciepła */
    --rk-algo-blue: #0ea5e9;
    --rk-algo-bg: #ffffff;
    --rk-algo-panel: #f8fafc;
    --rk-algo-border: #e2e8f0;
    --rk-algo-text: #334155;
    --rk-algo-muted: #64748b;
    --rk-algo-green: #10b981;
}

.rk-algo-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-algo-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(139, 92, 246, 0.15);
    border: 1px solid rgba(139, 92, 246, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-algo-header {
    background: linear-gradient(135deg, var(--rk-algo-dark) 0%, #2e1065 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-algo-brand);
    position: relative;
}

.rk-algo-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.25);
    color: #ddd6fe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(139, 92, 246, 0.4);
}

.rk-algo-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-algo-title span { color: #c4b5fd; }

.rk-algo-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-algo-lead strong {
    color: #ffffff;
    font-weight: 800;
}

/* Sekcja Interaktywna - Blueprint */
.rk-algo-interactive {
    padding: 40px 50px;
    background: var(--rk-algo-panel);
}

/* Nawigacja Krokowa (Step-by-step) */
.rk-algo-steps-nav {
    display: flex;
    justify-content: space-between;
    margin-bottom: 35px;
    position: relative;
}

.rk-algo-steps-nav::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 0;
    right: 0;
    height: 2px;
    background: var(--rk-algo-border);
    z-index: 1;
    transform: translateY(-50%);
}

.rk-step-btn {
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: #ffffff;
    border: 2px solid var(--rk-algo-border);
    color: var(--rk-algo-muted);
    font-weight: 900;
    font-size: 16px;
    display: flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    position: relative;
    z-index: 2;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

.rk-step-btn:hover {
    border-color: var(--rk-algo-brand);
    color: var(--rk-algo-brand);
    transform: scale(1.1);
}

.rk-step-btn.active {
    background: var(--rk-algo-brand);
    border-color: var(--rk-algo-brand);
    color: #ffffff;
    box-shadow: 0 0 15px rgba(139, 92, 246, 0.4);
    transform: scale(1.15);
}

/* Dashboard Zawartości */
.rk-algo-dashboard {
    display: grid;
    grid-template-columns: 280px 1fr;
    gap: 35px;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-algo-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.03);
}

/* Obszar SVG (Styl Blueprint / Schemat) */
.rk-algo-svg-stage {
    background: #1e293b;
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    border: 2px solid #334155;
    background-image: 
        linear-gradient(rgba(255,255,255,0.05) 1px, transparent 1px),
        linear-gradient(90deg, rgba(255,255,255,0.05) 1px, transparent 1px);
    background-size: 20px 20px;
}

.rk-algo-svg { width: 100%; height: auto; max-width: 220px; }

.rk-svg-layer { opacity: 0; position: absolute; transition: opacity 0.4s ease, transform 0.4s ease; transform: scale(0.95); width: 100%; height: 100%; }
.rk-svg-layer.active { opacity: 1; transform: scale(1); position: relative; }

/* Animacje SVG dla poszczególnych kroków */
/* Krok 1: Geometria */
.anim-measure { stroke-dasharray: 100; stroke-dashoffset: 100; animation: drawLine 1.5s forwards ease-out; }
/* Krok 2: U-value */
.anim-u-layer { opacity: 0; animation: fadeInDown 0.5s forwards; }
/* Krok 3: Straty bazowe */
.anim-heat-base { stroke-dasharray: 8 8; animation: heatFlowBase 1.5s linear infinite; }
/* Krok 4: Mostki */
.anim-bridge { animation: pulseBridge 1.5s infinite alternate; }
/* Krok 5: Wentylacja */
.anim-fan-spin { transform-origin: 50px 50px; animation: spinFan 2s linear infinite; }
.anim-air-flow { stroke-dasharray: 5 10; animation: heatFlowBase 1s linear infinite; }
/* Krok 6: Suma */
.anim-sum-glow { animation: pulseSum 2s infinite alternate; }

@keyframes drawLine { to { stroke-dashoffset: 0; } }
@keyframes fadeInDown { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: translateY(0); } }
@keyframes heatFlowBase { to { stroke-dashoffset: -16; } }
@keyframes pulseBridge { 0% { fill: #ef4444; filter: drop-shadow(0 0 2px #ef4444); } 100% { fill: #fca5a5; filter: drop-shadow(0 0 10px #ef4444); } }
@keyframes spinFan { to { transform: rotate(360deg); } }
@keyframes pulseSum { 0% { fill: #c4b5fd; filter: drop-shadow(0 0 5px #8b5cf6); } 100% { fill: #ffffff; filter: drop-shadow(0 0 20px #8b5cf6); } }

/* Treść Panelu */
.rk-algo-content {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-algo-step-badge {
    font-size: 11px;
    font-weight: 800;
    color: var(--rk-algo-brand);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
}

.rk-algo-content h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-algo-dark);
}

.rk-algo-content p {
    margin: 0 0 20px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

/* Sekcja Wzoru (HTML Math zamiast LaTeX) */
.rk-algo-formula-box {
    background: var(--rk-algo-dark);
    border-radius: 12px;
    padding: 15px 20px;
    margin-top: auto;
    border-left: 4px solid var(--rk-algo-brand);
}

.rk-formula-math {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 20px;
    color: #ddd6fe;
    letter-spacing: 1px;
    margin: 0 0 8px 0;
    text-align: center;
}

.rk-formula-desc {
    font-size: 12px;
    color: #94a3b8;
    text-align: center;
    margin: 0;
}
.rk-formula-desc strong { color: #cbd5e1; }

@media (max-width: 768px) {
    .rk-algo-header, .rk-algo-interactive { padding: 35px 20px; }
    .rk-algo-title { font-size: 24px; }
    .rk-algo-dashboard { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-algo-svg-stage { height: 200px; max-width: 100%; margin-bottom: 10px; }
    .rk-step-btn { width: 36px; height: 36px; font-size: 14px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak wygląda uproszczony algorytm kalkulatora OZC?",
    "description": "Poznaj 6 kroków sekwencyjnego obliczania oporów przegród, strat bazowych, mostków termicznych i wentylacji wg normy PN-EN 12831.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-algorytm",
    "name": "Algorytm obliczeniowy OZC - Zestawienie Wzorów",
    "description": "Zbiór uproszczonych formuł fizycznych używanych do wyznaczania projektowego obciążenia cieplnego budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator OZC algorytm",
      "straty bazowe przez przenikanie wzór",
      "poprawka na mostki termiczne",
      "obliczenie strat wentylacyjnych wzór",
      "współczynnik przenikania ciepła U"
    ],
    "measurementTechnique": "Sekwencyjna metoda obliczeniowa zgodna z normą PN-EN 12831 integrująca straty przenikania i wentylacji (ΦHL = ΦT,corr + ΦV,total).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1-2: Geometria (A, ΔT) i opór cieplny (U).",
        "Krok 3-4: Straty bazowe (ΦT,base) i korekta na mostki cieplne (+15%).",
        "Krok 5-6: Straty wentylacyjne (ΦV,total) uwzględniające rekuperację oraz suma końcowa mocy grzewczej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-algorytm",
    "name": "Interaktywny Algorytm OZC",
    "description": "Narzędzie demonstracyjne przeprowadzające użytkownika przez 6 kluczowych kroków inżynieryjnych obliczeń strat ciepła budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-algo-container" id="rk-algo-app">
    
    <div class="rk-algo-header">
        <div class="rk-algo-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Inżynieria w pigułce
        </div>
        <h2 class="rk-algo-title">Jak wygląda <span>uproszczony algorytm</span> kalkulatora OZC?</h2>
        <p class="rk-algo-lead">
            Uproszczony algorytm obliczeniowy OZC opiera się na sekwencyjnym wyznaczaniu oporów przegród, strat bazowych oraz dodawaniu poprawek na mostki termiczne i wentylację zgodnie z rygorystyczną metodologią <strong>PN-EN 12831</strong>. Poniżej przedstawiamy 6 kluczowych kroków prowadzących do wyznaczenia ostatecznej mocy źródła ciepła.
        </p>
    </div>

    <div class="rk-algo-interactive">
        
        <div class="rk-algo-steps-nav" id="algoSteps">
            <div class="rk-step-btn active" data-step="1">1</div>
            <div class="rk-step-btn" data-step="2">2</div>
            <div class="rk-step-btn" data-step="3">3</div>
            <div class="rk-step-btn" data-step="4">4</div>
            <div class="rk-step-btn" data-step="5">5</div>
            <div class="rk-step-btn" data-step="6">6</div>
        </div>

        <div class="rk-algo-dashboard">
            
            <div class="rk-algo-svg-stage">
                
                <svg class="rk-svg-layer active" id="svg-step-1" viewBox="0 0 100 100">
                    <rect x="20" y="30" width="60" height="50" fill="none" stroke="#64748b" stroke-width="2"/>
                    <polygon points="20,30 50,10 80,30" fill="none" stroke="#64748b" stroke-width="2"/>
                    <line class="anim-measure" x1="10" y1="30" x2="10" y2="80" stroke="#38bdf8" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <line class="anim-measure" x1="20" y1="90" x2="80" y2="90" stroke="#38bdf8" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <text x="50" y="55" fill="#38bdf8" font-size="12" font-weight="bold" text-anchor="middle">ΔT</text>
                    <defs>
                        <marker id="arrow" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="4" markerHeight="4" orient="auto-start-reverse">
                            <path d="M 0 0 L 10 5 L 0 10 z" fill="#38bdf8" />
                        </marker>
                    </defs>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-2" viewBox="0 0 100 100">
                    <rect class="anim-u-layer" x="30" y="10" width="10" height="80" fill="#334155" />
                    <rect class="anim-u-layer" x="40" y="10" width="20" height="80" fill="#475569" style="animation-delay: 0.2s" />
                    <rect class="anim-u-layer" x="60" y="10" width="10" height="80" fill="#64748b" style="animation-delay: 0.4s" />
                    <text x="50" y="55" fill="#f59e0b" font-size="14" font-weight="bold" text-anchor="middle" style="animation-delay: 0.6s">U</text>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-3" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="80" fill="#334155" />
                    <path class="anim-heat-base" d="M 80 30 L 20 30" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                    <path class="anim-heat-base" d="M 80 50 L 20 50" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round" style="animation-delay: 0.3s"/>
                    <path class="anim-heat-base" d="M 80 70 L 20 70" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round" style="animation-delay: 0.6s"/>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-4" viewBox="0 0 100 100">
                    <rect x="20" y="20" width="60" height="60" fill="none" stroke="#475569" stroke-width="6"/>
                    <rect x="35" y="35" width="30" height="30" fill="none" stroke="#64748b" stroke-width="4"/>
                    <circle class="anim-bridge" cx="35" cy="35" r="5" />
                    <circle class="anim-bridge" cx="65" cy="35" r="5" style="animation-delay: 0.2s" />
                    <circle class="anim-bridge" cx="35" cy="65" r="5" style="animation-delay: 0.4s" />
                    <circle class="anim-bridge" cx="65" cy="65" r="5" style="animation-delay: 0.6s" />
                </svg>

                <svg class="rk-svg-layer" id="svg-step-5" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="30" fill="none" stroke="#475569" stroke-width="4"/>
                    <g class="anim-fan-spin">
                        <path d="M 50 50 L 50 25 A 25 25 0 0 1 75 50 Z" fill="#0ea5e9" opacity="0.8"/>
                        <path d="M 50 50 L 50 75 A 25 25 0 0 1 25 50 Z" fill="#0ea5e9" opacity="0.8"/>
                    </g>
                    <path class="anim-air-flow" d="M 10 50 L 30 50" fill="none" stroke="#38bdf8" stroke-width="3"/>
                    <path class="anim-air-flow" d="M 90 50 L 70 50" fill="none" stroke="#ef4444" stroke-width="3"/>
                </svg>

                <svg class="rk-svg-layer" id="svg-step-6" viewBox="0 0 100 100">
                    <circle cx="50" cy="50" r="40" fill="none" stroke="#475569" stroke-width="2" stroke-dasharray="4 4"/>
                    <text class="anim-sum-glow" x="50" y="58" font-family="serif" font-size="28" font-weight="bold" text-anchor="middle">&Phi;</text>
                </svg>
            </div>

            <div class="rk-algo-content">
                <span class="rk-algo-step-badge" id="algoStepBadge">KROK 1 Z 6</span>
                <h3 id="algoTitle">Zdefiniowanie geometrii</h3>
                <p id="algoDesc">
                    Oblicz pola powierzchni wszystkich przegród zewnętrznych (A) z podziałem na kierunki świata oraz ustal projektową różnicę temperatur (ΔT) na podstawie strefy klimatycznej.
                </p>
                
                <div class="rk-algo-formula-box">
                    <div class="rk-formula-math" id="algoFormulaMath">&Delta;T = (&theta;<sub>int</sub> &minus; &theta;<sub>e</sub>)</div>
                    <p class="rk-formula-desc" id="algoFormulaDesc"><strong>&Delta;T</strong> &#8211; różnica temperatur zewn. i wewn.</p>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-algo-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // Elementy DOM
    const stepBtns = document.querySelectorAll('.rk-step-btn');
    const badge = document.getElementById('algoStepBadge');
    const title = document.getElementById('algoTitle');
    const desc = document.getElementById('algoDesc');
    const fMath = document.getElementById('algoFormulaMath');
    const fDesc = document.getElementById('algoFormulaDesc');

    // Baza danych algorytmu (Używamy zwykłego HTML dla matematyki)
    const algoData = {
        "1": {
            title: "Zdefiniowanie geometrii",
            desc: "Oblicz pola powierzchni wszystkich przegród zewnętrznych (A) z podziałem na kierunki świata oraz ustal projektową różnicę temperatur na podstawie lokalnej strefy klimatycznej.",
            math: "&Delta;T = (&theta;<sub>int</sub> &minus; &theta;<sub>e</sub>)",
            fdesc: "<strong>&Delta;T</strong> - różnica temperatur"
        },
        "2": {
            title: "Wyznaczenie współczynników U",
            desc: "Dla każdej przegrody oblicz opór cieplny warstw materiałowych R (dzieląc grubość przez przewodność), a następnie wyznacz ostateczny współczynnik przenikania ciepła U.",
            math: "U = 1 / (&Sigma;R + R<sub>si</sub> + R<sub>se</sub>)",
            fdesc: "<strong>U</strong> - współczynnik przenikania ciepła [W/(m&sup2;&middot;K)]"
        },
        "3": {
            title: "Kalkulacja strat bazowych",
            desc: "Pomnóż pole powierzchni danej przegrody przez jej współczynnik U oraz wyznaczoną wcześniej różnicę temperatur. Daje to czystą stratę przenikania bez błędów montażowych.",
            math: "&Phi;<sub>T,base</sub> = A &times; U &times; &Delta;T",
            fdesc: "<strong>&Phi;<sub>T,base</sub></strong> - bazowa strata przez przenikanie"
        },
        "4": {
            title: "Poprawka na mostki termiczne",
            desc: "Skoryguj straty bazowe o dodatek na mostki liniowe (miejsca słabszej izolacji m.in. przy oknach i nadprożach). Standardowo przyjmuje się dodatek +15% dla budownictwa tradycyjnego.",
            math: "&Phi;<sub>T,corr</sub> = &Phi;<sub>T,base</sub> &times; 1,15",
            fdesc: "<strong>1,15</strong> - uproszczony globalny dodatek na mostki"
        },
        "5": {
            title: "Obliczenie strat wentylacyjnych",
            desc: "Wyznacz strumień powietrza V [m³/h] zależnie od systemu. Oblicz stratę uwzględniając ciepło właściwe powietrza oraz sprawność odzysku ciepła (rekuperacji).",
            math: "&Phi;<sub>V,total</sub> = V &times; 0,34 &times; &Delta;T &times; (1 &minus; &eta;)",
            fdesc: "<strong>&eta;</strong> - sprawność odzysku ciepła (rekuperacji)"
        },
        "6": {
            title: "Sumowanie końcowe",
            desc: "Dodaj skorygowane straty przez przenikanie do obliczonych strat wentylacyjnych. Otrzymany wynik to całkowita szczytowa moc projektowa budynku, determinująca dobór pompy ciepła.",
            math: "&Phi;<sub>HL</sub> = &Phi;<sub>T,corr</sub> + &Phi;<sub>V,total</sub>",
            fdesc: "<strong>&Phi;<sub>HL</sub></strong> - Projektowe Obciążenie Cieplne (OZC)"
        }
    };

    // Logika kroków
    stepBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const step = this.getAttribute('data-step');
            
            // Przyciski
            stepBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // SVG Warstwy
            document.querySelectorAll('.rk-svg-layer').forEach(layer => layer.classList.remove('active'));
            document.getElementById('svg-step-' + step).classList.add('active');

            // Teksty
            const data = algoData[step];
            badge.textContent = "KROK " + step + " Z 6";
            title.textContent = data.title;
            desc.textContent = data.desc;
            fMath.innerHTML = data.math;
            fDesc.innerHTML = data.fdesc;
        });
    });
});
</script>



<style>
:root {
    --rk-sim-dark: #0f172a;
    --rk-sim-brand: #8b5cf6; /* Inżynieryjny fiolet */
    --rk-sim-brand-light: #ede9fe;
    --rk-sim-accent: #f59e0b; /* Bursztyn/Ciepło */
    --rk-sim-blue: #0ea5e9;
    --rk-sim-bg: #ffffff;
    --rk-sim-panel: #f8fafc;
    --rk-sim-border: #e2e8f0;
    --rk-sim-text: #334155;
    --rk-sim-muted: #64748b;
    --rk-sim-green: #10b981;
    --rk-sim-red: #ef4444;
}

.rk-sim-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-sim-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(139, 92, 246, 0.15);
    border: 1px solid rgba(139, 92, 246, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-sim-header {
    background: linear-gradient(135deg, var(--rk-sim-dark) 0%, #2e1065 100%);
    padding: 40px 50px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-sim-brand);
    text-align: center;
}

.rk-sim-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(139, 92, 246, 0.25);
    color: #ddd6fe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(139, 92, 246, 0.4);
}

.rk-sim-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-sim-title span { color: #c4b5fd; }

.rk-sim-lead {
    font-size: 16px;
    line-height: 1.6;
    color: #cbd5e1;
    margin: 0 auto;
    max-width: 800px;
}

/* Główny układ interfejsu */
.rk-sim-interactive {
    padding: 40px 50px;
    background: var(--rk-sim-panel);
}

/* Postęp w symulatorze */
.rk-sim-progress-bar {
    display: flex;
    justify-content: space-between;
    margin-bottom: 30px;
    position: relative;
    padding: 0 10px;
}

.rk-sim-progress-bar::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 20px;
    right: 20px;
    height: 4px;
    background: var(--rk-sim-border);
    z-index: 1;
    transform: translateY(-50%);
    border-radius: 2px;
}

.rk-sim-progress-fill {
    position: absolute;
    top: 50%;
    left: 20px;
    height: 4px;
    background: var(--rk-sim-brand);
    z-index: 1;
    transform: translateY(-50%);
    border-radius: 2px;
    transition: width 0.4s ease;
    width: 0%;
}

.rk-step-node {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-sim-border);
    color: transparent;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    z-index: 2;
    transition: all 0.4s ease;
}

.rk-step-node.completed { background: var(--rk-sim-brand); }
.rk-step-node.active { background: var(--rk-sim-brand); box-shadow: 0 0 0 6px var(--rk-sim-brand-light); }

/* Dashboard Symulatora */
.rk-sim-dashboard {
    display: grid;
    grid-template-columns: 1fr 300px;
    gap: 30px;
}

/* Sekcja formularzy (Lewa) */
.rk-sim-controls {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-sim-border);
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.02);
}

.rk-step-view { display: none; animation: fadeIn 0.4s ease; }
.rk-step-view.active { display: block; }

@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }

.rk-step-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-sim-dark);
    margin: 0 0 10px 0;
}

.rk-step-desc {
    font-size: 14px;
    color: var(--rk-sim-muted);
    line-height: 1.6;
    margin: 0 0 25px 0;
}

/* Elementy formularza */
.rk-form-group { margin-bottom: 25px; }

.rk-form-label {
    display: block;
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-sim-text);
    margin-bottom: 8px;
    text-transform: uppercase;
}

.rk-range-wrap {
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-range-input {
    flex: 1;
    -webkit-appearance: none;
    height: 8px;
    background: #e2e8f0;
    border-radius: 4px;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-sim-brand);
    cursor: pointer;
    border: 3px solid #ffffff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}

.rk-val-display {
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-sim-brand);
    min-width: 60px;
    text-align: right;
    font-variant-numeric: tabular-nums;
}

/* Radio Buttons dla standardów (Wymuszono układ pionowy) */
.rk-radio-group { 
    display: flex; 
    flex-direction: column; 
    gap: 10px; 
}

.rk-radio-btn {
    width: 100%;
    padding: 15px 20px;
    text-align: left;
    background: var(--rk-sim-panel);
    border: 2px solid var(--rk-sim-border);
    border-radius: 10px;
    cursor: pointer;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-sim-muted);
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.rk-radio-btn span {
    font-size: 12px;
    font-weight: 400;
}

.rk-radio-btn.selected {
    background: var(--rk-sim-brand-light);
    border-color: var(--rk-sim-brand);
    color: var(--rk-sim-brand);
}

/* Przyciski Nawigacji Wewnętrznej */
.rk-nav-actions {
    display: flex;
    flex-direction: row; /* Zawsze poziomo */
    justify-content: space-between;
    align-items: center;
    gap: 15px; /* Odstęp między przyciskami */
    margin-top: 30px;
    padding-top: 20px;
    border-top: 1px solid var(--rk-sim-border);
}

.rk-action-btn {
    padding: 14px 24px; /* Grubsze buttony */
    border-radius: 10px;
    font-size: 15px;
    font-weight: 800;
    cursor: pointer;
    transition: all 0.2s;
    border: none;
    flex: 1; /* Równy podział szerokości na mobile */
    text-align: center;
}

.rk-btn-prev { background: #e2e8f0; color: #64748b; flex: 0.5; /* Mniejszy guzik "Wróć" */ }
.rk-btn-prev:hover { background: #cbd5e1; }
.rk-btn-prev:disabled { opacity: 0; pointer-events: none; }

.rk-btn-next { background: var(--rk-sim-brand); color: #ffffff; box-shadow: 0 4px 10px rgba(139, 92, 246, 0.3); }
.rk-btn-next:hover { transform: translateY(-2px); box-shadow: 0 6px 15px rgba(139, 92, 246, 0.4); }

/* Sekcja Wyników (Prawa) */
.rk-sim-results-panel {
    background: var(--rk-sim-dark);
    border-radius: 20px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
}

.rk-res-header-txt {
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #94a3b8;
    margin-bottom: 20px;
    letter-spacing: 1px;
}

/* Wiersze podsumowania */
.rk-calc-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 0;
    border-bottom: 1px dashed rgba(255,255,255,0.1);
    font-size: 14px;
}

.rk-calc-row:last-of-type { border-bottom: none; }

.rk-row-lbl { color: #cbd5e1; }
.rk-row-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }
.rk-val-hl { color: var(--rk-sim-accent); }

/* Końcowy Wynik OZC */
.rk-final-result-box {
    margin-top: auto;
    background: rgba(139, 92, 246, 0.2);
    border: 1px solid rgba(139, 92, 246, 0.4);
    border-radius: 14px;
    padding: 20px;
    text-align: center;
}

.rk-final-lbl { font-size: 11px; font-weight: 800; color: #ddd6fe; text-transform: uppercase; margin-bottom: 5px; display: block; }
.rk-final-val { font-size: 32px; font-weight: 900; color: #ffffff; line-height: 1; margin-bottom: 5px; transition: color 0.3s;}
.rk-final-formula { font-size: 11px; color: #a78bfa; font-family: monospace; }

/* SVG Dynamiczny Wykres */
.rk-live-chart {
    height: 100px;
    margin-bottom: 20px;
    width: 100%;
}
.chart-bar { transition: height 0.4s ease, y 0.4s ease; }

@media (max-width: 768px) {
    .rk-sim-header, .rk-sim-interactive { padding: 30px 20px; }
    .rk-sim-title { font-size: 24px; }
    .rk-sim-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-radio-group { flex-direction: column; }
    .rk-step-view { min-height: auto; }
    .rk-action-btn { font-size: 13px; padding: 12px 16px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak wygląda uproszczony algorytm kalkulatora OZC?",
    "description": "Poznaj 4 kroki sekwencyjnego obliczania oporów przegród, strat bazowych, mostków termicznych i wentylacji wg normy PN-EN 12831.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-algorytm",
    "name": "Algorytm obliczeniowy OZC - Zestawienie Wzorów",
    "description": "Zbiór uproszczonych formuł fizycznych używanych do wyznaczania projektowego obciążenia cieplnego budynku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "kalkulator OZC algorytm",
      "straty bazowe przez przenikanie wzór",
      "poprawka na mostki termiczne",
      "obliczenie strat wentylacyjnych wzór",
      "współczynnik przenikania ciepła U"
    ],
    "measurementTechnique": "Sekwencyjna metoda obliczeniowa zgodna z normą PN-EN 12831 integrująca straty przenikania i wentylacji (ΦHL = ΦT,corr + ΦV,total).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Geometria ściany (A) i różnica temperatur (ΔT).",
        "Krok 2: Ustalenie oporu cieplnego (U) przegrody.",
        "Krok 3: Obliczenie bazowej straty przenikania z uwzględnieniem mostków termicznych.",
        "Krok 4: Dodanie strat wentylacyjnych (ΦV,total) uwzględniających rekuperację oraz suma końcowa mocy grzewczej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-algorytm",
    "name": "Kalkulator Edukacyjny OZC",
    "description": "Interaktywny symulator pozwalający na żywo przeliczać straty ciepła przykładowej ściany w zależności od parametrów izolacji i wentylacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-sim-container" id="rk-sim-app">
    
    <div class="rk-sim-header">
        <div class="rk-sim-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Inżynieria na żywo
        </div>
        <h2 class="rk-sim-title">Zrozum fizykę: <span>Uproszczony Kalkulator OZC</span></h2>
        <p class="rk-sim-lead">
            Algorytm obliczeniowy normy <strong>PN-EN 12831</strong> polega na żmudnym, sekwencyjnym wyznaczaniu oporów przegród, strat bazowych, mostków i wentylacji. Abyś zrozumiał skalę ucieczki ciepła ze swojego domu, stworzyliśmy uproszczony symulator. Sprawdź, jak jedna zmiana izolacji wpływa na wynik końcowy dla przykładowego pomieszczenia.
        </p>
    </div>

    <div class="rk-sim-interactive">
        
        <div class="rk-sim-progress-bar">
            <div class="rk-sim-progress-fill" id="simProgressLine"></div>
            <div class="rk-step-node active" id="node-1">1</div>
            <div class="rk-step-node" id="node-2">2</div>
            <div class="rk-step-node" id="node-3">3</div>
            <div class="rk-step-node" id="node-4">4</div>
        </div>

        <div class="rk-sim-dashboard">
            
            <div class="rk-sim-controls">
                
                <div class="rk-step-view active" id="view-1">
                    <h3 class="rk-step-title">Krok 1: Geometria i Klimat</h3>
                    <p class="rk-step-desc">Ustal pole powierzchni analizowanej ściany zewnętrznej oraz projektową różnicę temperatur na zewnątrz (Zima).</p>
                    
                    <div class="rk-form-group">
                        <label class="rk-form-label">Powierzchnia ściany (A)</label>
                        <div class="rk-range-wrap">
                            <input type="range" id="inpArea" class="rk-range-input" min="10" max="40" value="16" step="1">
                            <div class="rk-val-display"><span id="valAreaOut">16</span> m²</div>
                        </div>
                    </div>
                    
                    <div class="rk-form-group">
                        <label class="rk-form-label">Temperatura Zewnętrzna (θe)</label>
                        <div class="rk-range-wrap">
                            <input type="range" id="inpTemp" class="rk-range-input" min="-24" max="-16" value="-20" step="2">
                            <div class="rk-val-display"><span id="valTempOut">-20</span> °C</div>
                        </div>
                        <div style="font-size:11px; color:#94a3b8; margin-top:5px;">Wewn. stała: +20°C (ΔT = <span id="valDeltaOut">40</span>K)</div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-2">
                    <h3 class="rk-step-title">Krok 2: Izolacja (Współczynnik U)</h3>
                    <p class="rk-step-desc">Określ standard izolacji ściany. Zgodnie z prawem, mniejsze U oznacza lepsze zatrzymywanie ciepła.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn" data-u="1.20">
                            <strong>Stary dom</strong>
                            <span>Brak izolacji</span>
                        </div>
                        <div class="rk-radio-btn selected" data-u="0.15">
                            <strong>WT 2021</strong>
                            <span>Standard prawny</span>
                        </div>
                        <div class="rk-radio-btn" data-u="0.10">
                            <strong>Pasywny</strong>
                            <span>Izolacja premium</span>
                        </div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-3">
                    <h3 class="rk-step-title">Krok 3: Mostki termiczne</h3>
                    <p class="rk-step-desc">Pusta ściana to fikcja. Dodaj procentową poprawkę na okna, nadproża i błędy montażowe.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn selected" data-bridge="1.0">
                            <strong>0%</strong>
                            <span>Warunki laboratoryjne</span>
                        </div>
                        <div class="rk-radio-btn" data-bridge="1.15">
                            <strong>+15%</strong>
                            <span>Standard budowlany</span>
                        </div>
                        <div class="rk-radio-btn" data-bridge="1.30">
                            <strong>+30%</strong>
                            <span>Duże przeszklenia</span>
                        </div>
                    </div>
                </div>

                <div class="rk-step-view" id="view-4">
                    <h3 class="rk-step-title">Krok 4: System Wentylacji</h3>
                    <p class="rk-step-desc">Zimne powietrze z zewnątrz wpadające do pokoju trzeba dogrzać. Wybierz rodzaj wentylacji.</p>
                    
                    <div class="rk-radio-group">
                        <div class="rk-radio-btn selected" data-vent="gravity">
                            <strong>Grawitacyjna (Naturalna)</strong>
                            <span>Zimne powietrze zasysane w 100% z zewnątrz.</span>
                        </div>
                        <div class="rk-radio-btn" data-vent="reku">
                            <strong>Rekuperacja (Odzysk 85%)</strong>
                            <span>Powietrze dogrzane w wymienniku ciepła.</span>
                        </div>
                    </div>
                </div>

                <div class="rk-nav-actions">
                    <button class="rk-action-btn rk-btn-prev" id="btnPrev" disabled>Wróć</button>
                    <button class="rk-action-btn rk-btn-next" id="btnNext">Przejdź dalej</button>
                </div>
            </div>

            <div class="rk-sim-results-panel">
                <div class="rk-res-header-txt">Bieżący Bilans Pomieszczenia</div>
                
                <svg class="rk-live-chart" viewBox="0 0 100 100" preserveAspectRatio="none">
                    <rect x="10" y="80" width="30" height="20" fill="#f59e0b" class="chart-bar" id="barTrans"/>
                    <rect x="60" y="80" width="30" height="20" fill="#0ea5e9" class="chart-bar" id="barVent"/>
                </svg>

                <div class="rk-calc-row">
                    <span class="rk-row-lbl">1. Przenikanie ściany:</span>
                    <span class="rk-row-val"><span id="outWall">96</span> W</span>
                </div>
                <div class="rk-calc-row">
                    <span class="rk-row-lbl">2. Poprawka (Mostki):</span>
                    <span class="rk-row-val" style="color:#ef4444;">+<span id="outBridge">0</span> W</span>
                </div>
                <div class="rk-calc-row">
                    <span class="rk-row-lbl">3. Strata wentylacyjna:</span>
                    <span class="rk-row-val" style="color:#38bdf8;">+<span id="outVent">408</span> W</span>
                </div>

                <div class="rk-final-result-box">
                    <span class="rk-final-lbl">Szacunkowe OZC (Moc grzewcza)</span>
                    <div class="rk-final-val"><span id="outTotal">504</span> W</div>
                    <div class="rk-final-formula">ΦHL = ΦT,corr + ΦV,total</div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-sim-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Elementy Nawigacji
    let currentStep = 1;
    const totalSteps = 4;
    const btnNext = document.getElementById('btnNext');
    const btnPrev = document.getElementById('btnPrev');
    const progLine = document.getElementById('simProgressLine');

    // 3. Stan Kalkulatora
    let state = {
        area: 16,
        tempOut: -20,
        tempIn: 20,
        uValue: 0.15,
        bridgeFactor: 1.0,
        ventType: 'gravity'
    };

    // 4. Elementy Formularza
    const inpArea = document.getElementById('inpArea');
    const valAreaOut = document.getElementById('valAreaOut');
    const inpTemp = document.getElementById('inpTemp');
    const valTempOut = document.getElementById('valTempOut');
    const valDeltaOut = document.getElementById('valDeltaOut');

    const radUValues = document.querySelectorAll('#view-2 .rk-radio-btn');
    const radBridges = document.querySelectorAll('#view-3 .rk-radio-btn');
    const radVents = document.querySelectorAll('#view-4 .rk-radio-btn');

    // 5. Elementy Wyjściowe (Wyniki)
    const outWall = document.getElementById('outWall');
    const outBridge = document.getElementById('outBridge');
    const outVent = document.getElementById('outVent');
    const outTotal = document.getElementById('outTotal');
    const barTrans = document.getElementById('barTrans');
    const barVent = document.getElementById('barVent');

    // --- FUNKCJE OBLICZENIOWE ---
    function calculateOZC() {
        const deltaT = state.tempIn - state.tempOut;
        
        // 1. Przenikanie bazy (A * U * dT)
        const phiBase = state.area * state.uValue * deltaT;
        
        // 2. Przenikanie z mostkami
        const phiCorr = phiBase * state.bridgeFactor;
        const bridgeDiff = phiCorr - phiBase;

        // 3. Wentylacja (Uproszczenie dla pokoju: Kubatura ok 40m3. Strumień V=20m3/h)
        const vol = state.area * 2.5; // Kubatura
        let vAir = vol * 0.5; // Krotność wymiany
        let ventLoss = 0;

        if (state.ventType === 'gravity') {
            ventLoss = vAir * 0.34 * deltaT;
        } else {
            // Rekuperacja 85% sprawności
            ventLoss = vAir * 0.34 * deltaT * 0.15;
        }

        // 4. Suma Całkowita
        const totalLoss = phiCorr + ventLoss;

        // Aktualizacja interfejsu z animacją liczb
        animateValue(outWall, Math.round(phiBase));
        animateValue(outBridge, Math.round(bridgeDiff));
        animateValue(outVent, Math.round(ventLoss));
        animateValue(outTotal, Math.round(totalLoss));

        // Aktualizacja słupków SVG (Wizualizacja proporcji)
        // Zakładamy max wartość ok 2000W dla starych domów, by słupki nie wychodziły poza SVG
        const scale = 100 / 2000; 
        let hTrans = Math.min(Math.round(phiCorr * scale), 100);
        let hVent = Math.min(Math.round(ventLoss * scale), 100);
        
        // Zapewnienie minimalnej widoczności słupka
        hTrans = Math.max(hTrans, 2);
        hVent = Math.max(hVent, 2);

        barTrans.setAttribute('height', hTrans);
        barTrans.setAttribute('y', 100 - hTrans);
        barVent.setAttribute('height', hVent);
        barVent.setAttribute('y', 100 - hVent);
        
        // Kolorowanie finału
        const finalValBox = document.querySelector('.rk-final-val');
        if(totalLoss > 1000) { finalValBox.style.color = '#ef4444'; } 
        else if (totalLoss < 300) { finalValBox.style.color = '#10b981'; }
        else { finalValBox.style.color = '#ffffff'; }
    }

    function animateValue(obj, end) {
        // Prosta podmiana dla płynności na mobile, bez ciężkich setInterval
        obj.textContent = end;
    }

    // --- BINDING EVENTÓW ---

    // Krok 1: Suwaki
    inpArea.addEventListener('input', (e) => {
        state.area = parseInt(e.target.value);
        valAreaOut.textContent = state.area;
        calculateOZC();
    });

    inpTemp.addEventListener('input', (e) => {
        state.tempOut = parseInt(e.target.value);
        valTempOut.textContent = state.tempOut;
        valDeltaOut.textContent = state.tempIn - state.tempOut;
        calculateOZC();
    });

    // Funkcja pomocnicza dla Radio Buttonów
    function setupRadioGroup(nodes, stateKey, attrName) {
        nodes.forEach(btn => {
            btn.addEventListener('click', function() {
                nodes.forEach(b => b.classList.remove('selected'));
                this.classList.add('selected');
                const val = this.getAttribute(attrName);
                // Konwersja na float jeśli to liczba, zostaw string jeśli wentylacja
                state[stateKey] = isNaN(parseFloat(val)) ? val : parseFloat(val);
                calculateOZC();
            });
        });
    }

    // Krok 2, 3, 4: Radia
    setupRadioGroup(radUValues, 'uValue', 'data-u');
    setupRadioGroup(radBridges, 'bridgeFactor', 'data-bridge');
    setupRadioGroup(radVents, 'ventType', 'data-vent');


    // --- NAWIGACJA KROKOWA ---
    function updateNav() {
        // Przyciski 
        btnPrev.disabled = currentStep === 1;
        
        if (currentStep === totalSteps) {
            btnNext.textContent = 'Zakończ';
            if(btnNext.classList.contains('finalized')) return;
            
            // Po zamknięciu domknięcia procesu -> przekierowanie na zakup
            btnNext.onclick = function() { window.location.href = 'https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/'; }
            
            btnNext.classList.add('finalized');
        } else {
            btnNext.textContent = 'Przejdź dalej';
            btnNext.onclick = null; // Czyszczenie
            btnNext.classList.remove('finalized');
        }

        // Pasek postępu
        const progress = ((currentStep - 1) / (totalSteps - 1)) * 100;
        progLine.style.width = progress + '%';

        // Kropeczki
        document.querySelectorAll('.rk-step-node').forEach((node, index) => {
            node.classList.remove('active', 'completed');
            if (index + 1 === currentStep) node.classList.add('active');
            if (index + 1 < currentStep) node.classList.add('completed');
        });

        // Widoki (Panele)
        document.querySelectorAll('.rk-step-view').forEach(view => {
            view.classList.remove('active');
        });
        document.getElementById('view-' + currentStep).classList.add('active');
    }

    btnNext.addEventListener('click', () => {
        if (currentStep < totalSteps) {
            currentStep++;
            updateNav();
        }
    });

    btnPrev.addEventListener('click', () => {
        if (currentStep > 1) {
            currentStep--;
            updateNav();
        }
    });

    // Init
    calculateOZC();
});
</script>



<style>
:root {
    --rk-hyd-dark: #0f172a;
    --rk-hyd-brand: #0284c7; /* Inżynieryjny niebieski hydrauliczny */
    --rk-hyd-brand-light: #e0f2fe;
    --rk-hyd-accent: #f59e0b;
    --rk-hyd-screen: #0b1120;
    --rk-hyd-bg: #ffffff;
    --rk-hyd-panel: #f8fafc;
    --rk-hyd-border: #e2e8f0;
    --rk-hyd-text: #334155;
    --rk-hyd-muted: #64748b;
    --rk-hyd-green: #10b981;
    --rk-hyd-red: #ef4444;
}

.rk-hyd-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-hyd-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid rgba(2, 132, 199, 0.3);
    overflow: hidden;
}

/* Nagłówek */
.rk-hyd-header {
    background: linear-gradient(135deg, var(--rk-hyd-dark) 0%, #0c4a6e 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-hyd-brand);
}

.rk-hyd-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.25);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(2, 132, 199, 0.4);
}

.rk-hyd-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-hyd-title span { color: #38bdf8; }

.rk-hyd-lead {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 25px 0;
}

.rk-hyd-lead strong { color: #ffffff; font-weight: 800; }

.rk-link-hyd {
    color: #38bdf8;
    text-decoration: none;
    border-bottom: 1px dashed #38bdf8;
    transition: all 0.3s;
}
.rk-link-hyd:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Box ze wzorem termodynamicznym */
.rk-hyd-eq-box {
    background: rgba(0, 0, 0, 0.3);
    border: 1px solid rgba(56, 189, 248, 0.3);
    border-radius: 16px;
    padding: 22px;
    text-align: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.4);
}

.rk-hyd-eq {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 24px;
    color: #bae6fd;
    letter-spacing: 1px;
    margin: 0 0 10px 0;
}

.rk-hyd-eq-desc {
    font-size: 13px;
    color: #94a3b8;
    margin: 0;
}
.rk-hyd-eq-desc strong { color: #e2e8f0; }

/* Obszar Interaktywny */
.rk-hyd-interactive {
    padding: 40px 50px;
    background: var(--rk-hyd-panel);
}

/* Główny Dashboard */
.rk-hyd-dashboard {
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 30px;
}

/* Lewy Panel Kontrolek (Wszystko dostępne od razu) */
.rk-hyd-controls {
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid var(--rk-hyd-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-hyd-panel-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-hyd-dark);
    margin: 0 0 25px 0;
    border-bottom: 2px solid var(--rk-hyd-panel);
    padding-bottom: 10px;
}

/* Grupy Formularzy */
.rk-hyd-group { margin-bottom: 30px; }
.rk-hyd-label { display: block; font-size: 12px; font-weight: 800; color: var(--rk-hyd-dark); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }

.rk-hyd-range-box { display: flex; align-items: center; gap: 15px; }
.rk-hyd-slider { flex: 1; -webkit-appearance: none; height: 8px; background: #e2e8f0; border-radius: 4px; outline: none; }
.rk-hyd-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 24px; height: 24px; border-radius: 50%; background: var(--rk-hyd-brand); cursor: pointer; border: 3px solid #ffffff; box-shadow: 0 2px 6px rgba(0,0,0,0.15); }

.rk-hyd-val-display { font-size: 18px; font-weight: 900; color: var(--rk-hyd-brand); min-width: 75px; text-align: right; font-variant-numeric: tabular-nums; }

/* Przyciski Opcji (Radio kafelki pionowe) */
.rk-hyd-radio-stack { display: flex; flex-direction: column; gap: 10px; }
.rk-hyd-radio-tile { width: 100%; padding: 14px 18px; text-align: left; background: var(--rk-hyd-panel); border: 2px solid var(--rk-hyd-border); border-radius: 12px; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; gap: 4px; }
.rk-hyd-radio-tile strong { font-size: 14px; color: var(--rk-hyd-dark); }
.rk-hyd-radio-tile span { font-size: 12px; color: var(--rk-hyd-muted); font-weight: 400; }
.rk-hyd-radio-tile.selected { background: var(--rk-hyd-brand-light); border-color: var(--rk-hyd-brand); }

/* Prawy Panel Diagnostyczny (Rotametr) */
.rk-hyd-results-panel {
    background: var(--rk-hyd-dark);
    border-radius: 20px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    border: 2px solid #1e293b;
}

.rk-hyd-res-title { font-size: 11px; text-transform: uppercase; font-weight: 800; color: #94a3b8; margin-bottom: 20px; letter-spacing: 1px; text-align: center; }

/* Wizualizacja Rotametru SVG */
.rk-rotameter-stage {
    background: var(--rk-hyd-screen);
    border-radius: 14px;
    padding: 15px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.6);
    border: 1px solid #1e293b;
    margin-bottom: 20px;
}

.rk-rotameter-svg { width: 100%; height: 100%; max-width: 120px; }
.anim-float { transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.anim-water { transition: height 0.4s ease, y 0.4s ease; fill: #0ea5e9; fill-opacity: 0.3; }

/* Parametry kafelkowe */
.rk-hyd-rows { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; }
.rk-hyd-row { display: flex; justify-content: space-between; align-items: center; font-size: 13.5px; padding-bottom: 8px; border-bottom: 1px dashed rgba(255,255,255,0.08); }
.rk-hyd-row:last-child { border-bottom: none; }
.rk-hyd-lbl { color: #cbd5e1; }
.rk-hyd-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }

/* Końcowa Skrzynka Wynikowa */
.rk-hyd-final-box {
    background: rgba(2, 132, 199, 0.15);
    border: 1px solid rgba(2, 132, 199, 0.3);
    border-radius: 12px;
    padding: 15px;
    text-align: center;
}
.rk-final-lbl { font-size: 11px; font-weight: 800; color: #38bdf8; text-transform: uppercase; margin-bottom: 4px; display: block; }
.rk-final-val { font-size: 30px; font-weight: 900; color: #ffffff; font-variant-numeric: tabular-nums; line-height: 1.1; }
.rk-final-unit { font-size: 16px; font-weight: 700; color: #38bdf8; }

@media (max-width: 768px) {
    .rk-hyd-header, .rk-hyd-interactive { padding: 30px 20px; }
    .rk-hyd-title { font-size: 22px; }
    .rk-hyd-dashboard { grid-template-columns: 1fr; gap: 25px; }
    .rk-hyd-controls { padding: 20px; }
    .rk-rotameter-stage { height: 150px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-przeplyw",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak obliczyć wymagany przepływ wody w pętli podłogowej na podstawie OZC?",
    "description": "Zobacz termodynamiczny wzór na przepływ masowy wody (Vmin) w pętlach ogrzewania podłogowego zgodnie z normą PN-EN 1264 na bazie OZC.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-przeplyw",
    "name": "Algorytm Równoważenia Hydraulicznego pętli pex/pert 16x2",
    "description": "Zestawienie obliczeniowe wymaganych przepływów czynnika grzewczego na rotametrach rozdzielacza w korelacji z obciążeniem OZC pomieszczeń.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wymagany przepływ wody podłogówka",
      "rotametr wskaznik przepływu nastawy",
      "równoważenie hydrauliczne rozdzielacza",
      "wzór na przepływ pętli podłogowej",
      "norma PN-EN 1264 hydraulika"
    ],
    "measurementTechnique": "Przeliczanie strumienia objętościowego czynnika na litry na minutę (l/min) przy ciepłu właściwym wody 4182 J/(kg K).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Formuła inżynierska redukuje stałe fizyczne do stabilnego dzielnika 69,7 pomnożonego przez spadek temperatury delta T.",
        "Sypialnia (Przykład 3): Obciążenie OZC 750W przy strefowej pracy pompy ciepła z delta T = 5K generuje precyzyjną nastawę 2,15 l/min."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-przeplyw",
    "name": "Symulator Nastaw Rotametrów Rozdzielacza",
    "description": "Interaktywny symulator wizualizujący unoszenie pływaka w rurce rotametru w oparciu o wprowadzane wartości obciążeń OZC pokoju.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Canvas/SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-hyd-container" id="rk-hyd-app">
    
    <div class="rk-hyd-header">
        <div class="rk-hyd-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21.5 12H16c-.55 0-1-.45-1-1V9c0-1.1-.9-2-2-2h-2c-1.1 0-2 .9-2 2v2c0 .55-.45 1-1 1H2.5"></path></svg>
            Balans Hydrauliczny Układu
        </div>
        <h2 class="rk-hyd-title">Jak obliczyć wymagany przepływ wody w pętli podłogowej na podstawie <span>OZC?</span></h2>
        <p class="rk-hyd-lead">
            Wymagany przepływ wody (<strong>V<sub>min</sub></strong>) w pętli podłogowej wylicza się ze stosunku obciążenia cieplnego pokoju do iloczynu ciepła właściwego wody i spadku temperatury &Delta;T, co określa norma <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a>. Prawidłowa wartość przepływu gwarantuje zrównoważenie hydrauliczne układu rozdzielacza, eliminując strefy niedogrzane.
        </p>
        
        <div class="rk-hyd-eq-box">
            <div class="rk-hyd-eq">
                V<sub>min</sub> = &Phi;<sub>HL,i</sub> / (69,7 &times; &Delta;T)
            </div>
            <p class="rk-hyd-eq-desc">
                Gdzie <strong>&Phi;<sub>HL,i</sub></strong> to moc projektowa z OZC [W], a <strong>&Delta;T</strong> to różnica temperatur zasilania i powrotu [K].
            </p>
        </div>
    </div>

    <div class="rk-hyd-interactive">
        <div class="rk-hyd-dashboard">
            
            <div class="rk-hyd-controls">
                <div class="rk-hyd-panel-title">Parametry wejściowe z OZC</div>
                
                <div class="rk-hyd-group">
                    <label class="rk-hyd-label">Obciążenie cieplne pokoju (&Phi;<sub>HL,i</sub>)</label>
                    <div class="rk-hyd-range-box">
                        <input type="range" id="hydInpPower" class="rk-hyd-slider" min="200" max="1500" value="750" step="50">
                        <div class="rk-hyd-val-display"><span id="hydValPowerOut">750</span> W</div>
                    </div>
                </div>

                <div class="rk-hyd-group">
                    <label class="rk-hyd-label">Projektowa różnica temperatur (&Delta;T)</label>
                    <div class="rk-hyd-radio-stack">
                        <div class="rk-hyd-radio-tile" data-dt="3">
                            <strong>&Delta;T = 3 K (Wysoki przepływ)</strong>
                            <span>Dedykowane do łazienek w celu utrzymania wysokiej temperatury podłogi.</span>
                        </div>
                        <div class="rk-hyd-radio-tile selected" data-dt="5">
                            <strong>&Delta;T = 5 K (Standard Pompy Ciepła)</strong>
                            <span>Układ nisko-parametrowy 35/30°C gwarantujący najwyższy współczynnik COP.</span>
                        </div>
                        <div class="rk-hyd-radio-tile" data-dt="8">
                            <strong>&Delta;T = 8 K (Standard Kotłów)</strong>
                            <span>Rzadszy przepływ masowy czynnika, typowy dla układów z kotłami gazowymi.</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-hyd-results-panel">
                <div class="rk-hyd-res-title">Nastawa Rotametru Rozdzielacza</div>
                
                <div class="rk-rotameter-stage">
                    <svg class="rk-rotameter-svg" viewBox="0 0 100 100">
                        <rect x="42" y="10" width="16" height="80" fill="none" stroke="#64748b" stroke-width="2" rx="2"/>
                        <rect class="anim-water" x="43" y="50" width="14" height="40" />
                        
                        <line x1="38" y1="20" x2="44" y2="20" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="22" fill="#64748b" font-size="6" font-weight="bold">5</text>
                        <line x1="38" y1="35" x2="44" y2="35" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="37" fill="#64748b" font-size="6" font-weight="bold">4</text>
                        <line x1="38" y1="50" x2="44" y2="50" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="52" fill="#64748b" font-size="6" font-weight="bold">3</text>
                        <line x1="38" y1="65" x2="44" y2="65" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="67" fill="#64748b" font-size="6" font-weight="bold">2</text>
                        <line x1="38" y1="80" x2="44" y2="80" stroke="#94a3b8" stroke-width="1.5"/><text x="34" y="82" fill="#64748b" font-size="6" font-weight="bold">1</text>
                        
                        <g class="anim-float" id="hydRotameterFloat" transform="translate(0, 40)">
                            <polygon points="44,20 56,20 53,25 47,25" fill="#ef4444"/>
                            <rect x="47" y="25" width="6" height="3" fill="#ef4444"/>
                        </g>
                        <line x1="50" y1="10" x2="50" y2="90" stroke="#fbbf24" stroke-width="1" opacity="0.4"/>
                    </svg>
                </div>

                <div class="rk-hyd-rows">
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Moc obiegu (&Phi;):</span>
                        <span class="rk-hyd-val"><span id="lblHydPower">750</span> W</span>
                    </div>
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Projektowe &Delta;T:</span>
                        <span class="rk-hyd-val"><span id="lblHydDT">5</span> K</span>
                    </div>
                    <div class="rk-hyd-row">
                        <span class="rk-hyd-lbl">Stała inżynierska:</span>
                        <span class="rk-hyd-val">69,7</span>
                    </div>
                </div>

                <div class="rk-hyd-final-box">
                    <span class="rk-final-lbl">Wymagany przepływ (Vmin)</span>
                    <div class="rk-final-val"><span id="lblHydTotal">2.15</span> <span class="rk-final-unit">l/min</span></div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków w kodzie błędu)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-hyd-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji skryptu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja rotametryczna oraz struktury danych Dataset są własnością intelektualną Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Stan wejściowy kalkulatora
    let state = {
        power: 750,
        dT: 5
    };

    // 3. Elementy DOM
    const inpPower = document.getElementById('hydInpPower');
    const valPowerOut = document.getElementById('hydValPowerOut');
    const radTiles = document.querySelectorAll('.rk-hyd-radio-tile');

    // Pola wyjściowe wyników (Unikalne prefiksy hyd)
    const lblHydPower = document.getElementById('lblHydPower');
    const lblHydDT = document.getElementById('lblHydDT');
    const lblHydTotal = document.getElementById('lblHydTotal');
    const hydRotameterFloat = document.getElementById('hydRotameterFloat');

    // 4. Silnik obliczeń termodynamicznych przepływu masowego
    function updateFlowKalk() {
        const vMin = state.power / (69.7 * state.dT);
        
        lblHydPower.textContent = state.power;
        lblHydDT.textContent = state.dT;
        lblHydTotal.textContent = vMin.toFixed(2);

        // Skalowanie pozycji czerwonego pływaka rotometru (zakres 0 - 5 l/min)
        let pixelY = 65 - ((vMin - 1) * 15);
        if (pixelY < 0) pixelY = 0;
        if (pixelY > 65) pixelY = 65;

        hydRotameterFloat.setAttribute('transform', 'translate(0, ' + pixelY + ')');
    }

    // 5. Obsługa zdarzeń
    inpPower.addEventListener('input', function(e) {
        state.power = parseInt(e.target.value);
        valPowerOut.textContent = state.power;
        updateFlowKalk();
    });

    radTiles.forEach(tile => {
        tile.addEventListener('click', function() {
            radTiles.forEach(t => t.classList.remove('selected'));
            this.classList.add('selected');
            state.dT = parseInt(this.getAttribute('data-dt'));
            updateFlowKalk();
        });
    });

    // Uruchomienie obliczeń startowych
    updateFlowKalk();
});
</script>



<style>
:root {
    --rk-sum-dark: #0f172a;
    --rk-sum-panel: #1e293b;
    --rk-sum-primary: #10b981; /* Emerald/Green for success/summary */
    --rk-sum-primary-light: #d1fae5;
    --rk-sum-accent: #3b82f6; /* Blue for water */
    --rk-sum-warning: #f59e0b;
    --rk-sum-bg: #f8fafc;
    --rk-sum-border: #cbd5e1;
    --rk-sum-text: #334155;
    --rk-sum-text-dim: #64748b;
}

.rk-summary-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(16, 185, 129, 0.15);
    border: 1px solid rgba(16, 185, 129, 0.3);
    overflow: hidden;
}

/* Header z ekspertem */
.rk-summary-header {
    background: linear-gradient(135deg, var(--rk-sum-dark) 0%, #1e293b 100%);
    padding: 40px 50px;
    display: flex;
    align-items: center;
    gap: 30px;
    border-bottom: 4px solid var(--rk-sum-primary);
    position: relative;
    overflow: hidden;
}

.rk-summary-header::after {
    content: ''; position: absolute; right: 0; top: 0; width: 300px; height: 100%;
    background: radial-gradient(circle at right, rgba(16, 185, 129, 0.15) 0%, transparent 70%);
}

.rk-expert-avatar {
    width: 90px;
    height: 90px;
    border-radius: 50%;
    border: 3px solid var(--rk-sum-primary);
    box-shadow: 0 0 20px rgba(16, 185, 129, 0.4);
    object-fit: cover;
    position: relative;
    z-index: 2;
}

.rk-header-content {
    position: relative;
    z-index: 2;
}

.rk-header-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 10px;
    border: 1px solid rgba(110, 231, 183, 0.3);
}

.rk-header-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 8px 0;
    line-height: 1.2;
}

.rk-header-content p {
    color: #94a3b8;
    font-size: 14px;
    margin: 0;
    font-weight: 500;
}

/* Sekcja z zakładkami i wiedzą */
.rk-summary-body {
    display: grid;
    grid-template-columns: 1fr 1fr;
    background: #ffffff;
}

.rk-rules-list {
    padding: 30px;
    border-right: 1px solid var(--rk-sum-border);
    display: flex;
    flex-direction: column;
    gap: 10px;
    background: #f8fafc;
}

.rk-rule-btn {
    background: #ffffff;
    border: 1px solid var(--rk-sum-border);
    padding: 18px 20px;
    border-radius: 12px;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: flex-start;
    gap: 15px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-rule-btn:hover {
    border-color: var(--rk-sum-primary);
    transform: translateX(4px);
}

.rk-rule-btn.active {
    background: var(--rk-sum-primary-light);
    border-color: var(--rk-sum-primary);
    box-shadow: inset 4px 0 0 var(--rk-sum-primary);
}

.rk-rule-icon {
    width: 32px; height: 32px;
    background: #f1f5f9;
    border-radius: 8px;
    display: flex; align-items: center; justify-content: center;
    color: var(--rk-sum-text-dim);
    flex-shrink: 0;
    transition: 0.3s;
}

.rk-rule-btn.active .rk-rule-icon {
    background: var(--rk-sum-primary);
    color: #ffffff;
}

.rk-rule-text h3 {
    margin: 0 0 5px 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-sum-dark);
}

.rk-rule-text p {
    margin: 0;
    font-size: 13px;
    color: var(--rk-sum-text-dim);
    line-height: 1.5;
}

/* Panel Detali (Prawy) */
.rk-rule-details {
    padding: 40px;
    position: relative;
}

.rk-detail-panel {
    display: none;
    animation: fadeScale 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-detail-panel.active {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

@keyframes fadeScale {
    from { opacity: 0; transform: scale(0.95); }
    to { opacity: 1; transform: scale(1); }
}

.rk-detail-panel h4 {
    margin: 0;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-sum-dark);
}

.rk-detail-panel p {
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-sum-text);
}

.rk-sum-link {
    color: var(--rk-sum-accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dotted var(--rk-sum-accent);
    transition: 0.3s;
}
.rk-sum-link:hover { border-bottom-style: solid; color: #1d4ed8; }

.rk-detail-svg {
    width: 100%;
    height: 160px;
    background: var(--rk-sum-dark);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 20px rgba(0,0,0,0.5);
}

/* Narzędzie Szybkiego Szacowania (Kalkulator) */
.rk-quick-calc {
    background: var(--rk-sum-panel);
    padding: 35px 50px;
    border-top: 1px solid #1e293b;
    color: #ffffff;
}

.rk-calc-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 25px;
}

.rk-calc-header h4 {
    margin: 0; font-size: 18px; font-weight: 900; color: #ffffff;
    display: flex; align-items: center; gap: 10px;
}

.rk-calc-grid {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: 40px;
    align-items: center;
}

.rk-calc-input-area {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-calc-label { font-size: 13px; font-weight: 700; color: #94a3b8; display: flex; justify-content: space-between; }
.rk-calc-label span { color: #ffffff; font-size: 16px; font-weight: 900; }

.rk-sum-range {
    -webkit-appearance: none; width: 100%; height: 6px; border-radius: 3px; background: #334155; outline: none;
}
.rk-sum-range::-webkit-slider-thumb {
    -webkit-appearance: none; appearance: none; width: 22px; height: 22px; border-radius: 50%;
    background: var(--rk-sum-primary); cursor: pointer; border: 3px solid #ffffff; transition: 0.1s;
}
.rk-sum-range::-webkit-slider-thumb:active { transform: scale(1.15); }

.rk-calc-results {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

.rk-result-box {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
}

.rk-result-box.highlight { border-color: var(--rk-sum-primary); background: rgba(16, 185, 129, 0.1); }

.rk-res-val { display: block; font-size: 22px; font-weight: 900; color: #ffffff; margin-bottom: 5px; }
.rk-result-box.highlight .rk-res-val { color: var(--rk-sum-primary); }
.rk-res-lab { display: block; font-size: 11px; color: #94a3b8; text-transform: uppercase; font-weight: 700; line-height: 1.4; }

/* SEKACJA AUTORSKA - PODPIS EKSPERTA */
.rk-summary-author {
    background: #f1f5f9;
    padding: 30px 50px;
    display: flex;
    align-items: flex-start;
    gap: 25px;
    border-top: 1px solid var(--rk-sum-border);
}

.rk-author-photo-small {
    width: 75px;
    height: 75px;
    border-radius: 50%;
    border: 3px solid var(--rk-sum-primary);
    box-shadow: 0 4px 15px rgba(16, 185, 129, 0.2);
    object-fit: cover;
    flex-shrink: 0;
}

.rk-author-info {
    flex-grow: 1;
}

.rk-author-info h4 {
    margin: 0 0 6px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-sum-dark);
}

.rk-author-info p {
    margin: 0;
    font-size: 14px;
    color: var(--rk-sum-text);
    line-height: 1.6;
}

.rk-author-links {
    display: flex;
    gap: 15px;
    margin-top: 12px;
}

.rk-author-links a {
    color: var(--rk-sum-accent);
    font-size: 13px;
    font-weight: 800;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    transition: color 0.2s;
}

.rk-author-links a:hover {
    color: #1d4ed8;
    text-decoration: underline;
}

/* Animacje SVG */
.anim-check-draw { stroke-dasharray: 100; stroke-dashoffset: 100; animation: drawCheck 1.5s forwards ease-out; }
@keyframes drawCheck { to { stroke-dashoffset: 0; } }

.anim-pulse-ring { animation: pulseRing 2s infinite; transform-origin: center; }
@keyframes pulseRing { 0% { transform: scale(0.8); opacity: 1; } 100% { transform: scale(1.5); opacity: 0; } }

.anim-water-wave { animation: waveWater 3s linear infinite; }
@keyframes waveWater { 0% { transform: translateX(0); } 100% { transform: translateX(-20px); } }

@media (max-width: 768px) {
    .rk-summary-header { flex-direction: column; text-align: center; padding: 30px 20px; }
    .rk-expert-avatar { width: 70px; height: 70px; }
    .rk-summary-body { grid-template-columns: 1fr; }
    .rk-rules-list { border-right: none; border-bottom: 1px solid var(--rk-sum-border); padding: 20px; }
    .rk-rule-details { padding: 25px 20px; }
    .rk-calc-grid { grid-template-columns: 1fr; gap: 25px; }
    .rk-quick-calc { padding: 30px 20px; }
    .rk-calc-results { grid-template-columns: 1fr; }
    .rk-summary-author { flex-direction: column; text-align: center; padding: 30px 20px; align-items: center; }
    .rk-author-links { justify-content: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-summary-final",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Inżynierskie podsumowanie: Rola OZC w systemie grzewczym",
    "description": "Kompaktowe zestawienie reguł projektowych łączących wyniki OZC z geometrią pętli i zrównoważeniem hydraulicznym rozdzielacza.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-summary",
    "name": "Wskaźniki OZC dla domów jednorodzinnych (WT 2021)",
    "description": "Szacunkowe dane przeliczeniowe łączące metraż budynku w standardzie WT 2021 z mocą pompy ciepła i ilością obiegów grzewczych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podsumowanie instalacji ozc",
      "szybki estymator ozc",
      "zapotrzebowanie na moc cieplną",
      "dobór pompy ciepła na podstawie ozc",
      "ilość pętli ogrzewania podłogowego"
    ],
    "measurementTechnique": "Szacowanie oparte na średnim wskaźniku 40 W/m2 dla budynków spełniających normę WT 2021 oraz optymalnej wielkości obwodu podłogówki.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Średnie zapotrzebowanie (WT 2021): ~40 W/m2",
        "Szacunkowa moc urządzenia: OZC + bufor na straty i CWU",
        "Średnia powierzchnia na 1 obieg grzewczy: ~15 m2 (przy rozstawie 15 cm)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-summary",
    "name": "Szybki Estymator OZC (WT 2021)",
    "description": "Moduł podsumowujący. Przelicza powierzchnię domu wybudowanego w standardzie WT 2021 na orientacyjne obciążenie cieplne, moc pompy i ilość pętli.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5 Forms",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-summary-container" id="rk-summary-app">
    
    <div class="rk-summary-header">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-expert-avatar" loading="lazy">
        <div class="rk-header-content">
            <div class="rk-header-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                Wnioski Eksperta
            </div>
            <h2>Inżynierskie podsumowanie: OZC to serce instalacji</h2>
            <p>Zebrałem dla Ciebie 3 najważniejsze reguły projektowe łączące OZC z wykonawstwem podłogówki. Brak precyzyjnych obliczeń na etapie projektu to gwarancja problemów i strat finansowych.</p>
        </div>
    </div>

    <div class="rk-summary-body">
        
        <div class="rk-rules-list">
            <button class="rk-rule-btn active" data-panel="det-1">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><polyline points="9 22 9 12 15 12 15 22"></polyline></svg></div>
                <div class="rk-rule-text">
                    <h3>Koniec ze &#8222;zgadywaniem&#8221;</h3>
                    <p>OZC to jedyny matematyczny dowód</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="det-2">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg></div>
                <div class="rk-rule-text">
                    <h3>Ochrona kapitału (Pompa)</h3>
                    <p>Zabezpieczenie przed przewymiarowaniem</p>
                </div>
            </button>

            <button class="rk-rule-btn" data-panel="det-3">
                <div class="rk-rule-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg></div>
                <div class="rk-rule-text">
                    <h3>Parametry układu</h3>
                    <p>Rozstaw rur i równoważenie l/min</p>
                </div>
            </button>
        </div>

        <div class="rk-rule-details">
            
            <div class="rk-detail-panel active" id="det-1">
                <h4>OZC to fundament projektu</h4>
                <p>Każde pomieszczenie gubi ciepło w innym tempie. Zgadywanie mocy cieplnej &#8222;na oko&#8221; (np. mnożąc m² przez losową wartość) prowadzi do katastrofy w rachunkach. Rzetelne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-sum-link">obliczenia OZC</a> to twardy matematyczny fundament, na którym opiera się cały późniejszy dobór urządzeń.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <path d="M 50 80 L 50 40 L 100 15 L 150 40 L 150 80 Z" fill="none" stroke="#334155" stroke-width="3" stroke-linejoin="round"/>
                        <path d="M 100 35 L 120 45 L 120 65 Q 100 85 100 85 Q 80 65 80 45 Z" fill="#10b981" opacity="0.2" stroke="#10b981" stroke-width="2"/>
                        <path class="anim-check-draw" d="M 90 55 L 98 63 L 112 47" fill="none" stroke="#ffffff" stroke-width="4" stroke-linecap="round" stroke-linejoin="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="det-2">
                <h4>Stop przewymiarowaniu pomp</h4>
                <p>Zbyt duża pompa ciepła, dobrana przez instalatora &#8222;dla bezpieczeństwa&#8221; bez OZC, będzie <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/" class="rk-sum-link">taktować</a>. Zjawisko to niszczy sprężarkę i podwaja zużycie prądu. OZC upewnia nas, że pompa zostanie dobrana idealnie do obciążenia budynku w punkcie biwalencyjnym.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="75" y="25" width="50" height="50" fill="#1e293b" stroke="#38bdf8" stroke-width="3" rx="4"/>
                        <circle class="anim-pulse-ring" cx="100" cy="50" r="15" fill="none" stroke="#10b981" stroke-width="2"/>
                        <circle cx="100" cy="50" r="15" fill="none" stroke="#38bdf8" stroke-width="2"/>
                        <path d="M 100 40 L 100 60 M 90 50 L 110 50 M 93 43 L 107 57 M 93 57 L 107 43" stroke="#ffffff" stroke-width="2" stroke-linecap="round"/>
                    </svg>
                </div>
            </div>

            <div class="rk-detail-panel" id="det-3">
                <h4>Hydraulika bez tajemnic</h4>
                <p>Mając OZC poszczególnych pokoi, projektant wie, gdzie zagęścić rozstaw rur do 10 cm, a gdzie pozostawić 15 cm. Ponadto, wynik OZC (Waty) pozwala przeliczyć <a href="https://projekt-ogrzewania.pl/regulacja-ogrzewania-podlogowego-przeplywy-w-petlach/" class="rk-sum-link">przepływ w l/min</a> dla każdego rotametru na rozdzielaczu. To gwarancja zrównoważenia układu.</p>
                <div class="rk-detail-svg">
                    <svg viewBox="0 0 200 100" style="width:100%; height:100%;">
                        <rect x="85" y="20" width="30" height="60" fill="none" stroke="#cbd5e1" stroke-width="3" rx="4"/>
                        <path class="anim-water-wave" d="M 85 40 Q 92 35 100 40 T 115 40 T 130 40 L 130 80 L 85 80 Z" fill="#3b82f6" opacity="0.8"/>
                        <polygon points="90,45 110,45 105,55 95,55" fill="#ef4444"/>
                        <text x="140" y="52" fill="#10b981" font-size="12" font-weight="bold">V = 1.8 l/min</text>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-quick-calc">
        <div class="rk-calc-header">
            <h4>
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="var(--rk-sum-primary)" stroke-width="2.5"><rect x="4" y="2" width="16" height="20" rx="2" ry="2"></rect><line x1="8" y1="6" x2="16" y2="6"></line><line x1="16" y1="14" x2="16.01" y2="14"></line><line x1="12" y1="14" x2="12.01" y2="14"></line><line x1="8" y1="14" x2="8.01" y2="14"></line><line x1="16" y1="18" x2="16.01" y2="18"></line><line x1="12" y1="18" x2="12.01" y2="18"></line><line x1="8" y1="18" x2="8.01" y2="18"></line></svg>
                Szybki Estymator OZC (Dla standardu WT 2021)
            </h4>
            <span style="font-size:12px; color:#64748b;">(Wartości orientacyjne)</span>
        </div>

        <div class="rk-calc-grid">
            
            <div class="rk-calc-input-area">
                <div class="rk-calc-label">
                    Powierzchnia ogrzewana domu:
                    <span id="sumAreaOut">150 m²</span>
                </div>
                <input type="range" class="rk-sum-range" id="sumAreaSlider" min="80" max="300" step="10" value="150">
                <p style="font-size: 11px; color:#64748b; margin:0;">*Zakładane zapotrzebowanie ok. 40 W/m² (nowe budownictwo).</p>
            </div>

            <div class="rk-calc-results">
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resOzc">6.0 <span style="font-size:14px;color:#64748b;">kW</span></span>
                    <span class="rk-res-lab">Szacunkowe OZC</span>
                </div>
                <div class="rk-result-box highlight">
                    <span class="rk-res-val" id="resPump">7.0 <span style="font-size:14px;color:var(--rk-sum-primary);">kW</span></span>
                    <span class="rk-res-lab">Sugerowana Pompa Ciepła</span>
                </div>
                <div class="rk-result-box">
                    <span class="rk-res-val" id="resLoops">10 <span style="font-size:14px;color:#64748b;">szt.</span></span>
                    <span class="rk-res-lab">Szacowana liczba obiegów</span>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-summary-author">
        <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski - CEO i Projektant HVAC" class="rk-author-photo-small" loading="lazy">
        <div class="rk-author-info">
            <h4>Robert Kucharski</h4>
            <p>CEO i twórca portalu Projekt-Ogrzewania.pl. Główny projektant i audytor instalacji HVAC. Wszystkie publikowane tu treści opieram na wieloletnim, praktycznym doświadczeniu zdobytym bezpośrednio na placach budowy. Moją misją jest dostarczanie twardej, inżynierskiej wiedzy, która chroni inwestorów przed błędami i przewymiarowanymi instalacjami.</p>
            <div class="rk-author-links">
                <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener noreferrer">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg>
                    LinkedIn
                </a>
                <a href="https://www.facebook.com/robert.kucharski.budowa.bez.sciemy" target="_blank" rel="noopener noreferrer">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.469h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.469h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"/></svg>
                    Facebook
                </a>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (DOMAIN LOCK)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-summary-app').innerHTML = `
            <div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border:1px solid #ef4444; border-radius:24px; font-weight:800;">
                BŁĄD LICENCJI: Kod podsumowania jest własnością projekt-ogrzewania.pl
            </div>`;
        return;
    }

    // 2. Logika Zakładek (Złote Zasady)
    const btns = document.querySelectorAll('.rk-rule-btn');
    const panels = document.querySelectorAll('.rk-detail-panel');

    btns.forEach(btn => {
        btn.addEventListener('click', () => {
            // Reset
            btns.forEach(b => b.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Set Active
            btn.classList.add('active');
            const target = document.getElementById(btn.getAttribute('data-panel'));
            if(target) {
                // Restart animation
                void target.offsetWidth;
                target.classList.add('active');
            }
        });
    });

    // 3. Logika Szybkiego Estymatora OZC
    const slider = document.getElementById('sumAreaSlider');
    const areaOut = document.getElementById('sumAreaOut');
    const resOzc = document.getElementById('resOzc');
    const resPump = document.getElementById('resPump');
    const resLoops = document.getElementById('resLoops');

    function updateEstimator() {
        const area = parseInt(slider.value);
        areaOut.textContent = area + ' m²';

        // Obliczenia:
        // Zakładamy WT2021 (40 W/m2)
        const ozc_W = area * 40;
        const ozc_kW = ozc_W / 1000;
        
        // Pompa Ciepła: OZC + lekki naddatek na straty (np. 1kW)
        const pump_kW = Math.ceil(ozc_kW + 1);

        // Średnio 1 obieg (pętla) na 15 m2
        const loops = Math.ceil(area / 15);

        resOzc.innerHTML = ozc_kW.toFixed(1) + ' <span style="font-size:14px;color:#64748b;">kW</span>';
        resPump.innerHTML = pump_kW.toFixed(1) + ' <span style="font-size:14px;color:var(--rk-sum-primary);">kW</span>';
        resLoops.innerHTML = loops + ' <span style="font-size:14px;color:#64748b;">szt.</span>';
    }

    if(slider) {
        slider.addEventListener('input', updateEstimator);
        updateEstimator(); // Init
    }
});
</script>



<style>
:root {
    --rk-base-dark: #0f172a;
    --rk-base-panel: #1e293b;
    --rk-base-card: #ffffff;
    --rk-brand-primary: #f59e0b; /* Złoty bursztyn jako główny akcent (ciepło) */
    --rk-brand-light: #fef3c7;
    --rk-brand-hover: #d97706;
    --rk-state-green: #10b981;
    --rk-state-red: #ef4444;
    --rk-text-main: #334155;
    --rk-text-muted: #64748b;
    --rk-border-color: #e2e8f0;
}

.rk-geo-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-base-card);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(245, 158, 11, 0.15);
    border: 1px solid rgba(245, 158, 11, 0.25);
    overflow: hidden;
}

/* Sekcja Nagłówka */
.rk-geo-header {
    background: var(--rk-base-dark);
    padding: 40px 50px 35px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-brand-primary);
    position: relative;
}

.rk-geo-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(245, 158, 11, 0.2);
    color: var(--rk-brand-primary);
    padding: 6px 14px;
    border-radius: 6px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(245, 158, 11, 0.4);
}

.rk-geo-header h2 {
    font-size: 26px;
    font-weight: 900;
    line-height: 1.4;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-geo-header h2 span { color: var(--rk-brand-primary); }

.rk-geo-lead {
    font-size: 15px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0;
}

.rk-geo-lead strong { color: #ffffff; font-weight: 700; }
.rk-link-geo { color: var(--rk-brand-primary); text-decoration: none; border-bottom: 1px dashed var(--rk-brand-primary); transition: all 0.3s; }
.rk-link-geo:hover { color: #ffffff; border-bottom-color: #ffffff; }

/* Pulpit Interaktywny */
.rk-geo-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-geo-dashboard {
    display: grid;
    grid-template-columns: 1fr 340px;
    gap: 30px;
}

/* Panel Kontrolek (Lewy) */
.rk-geo-controls {
    background: #ffffff;
    border-radius: 16px;
    padding: 30px;
    border: 1px solid var(--rk-border-color);
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.03);
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-geo-panel-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--rk-base-dark);
    margin: 0 0 25px 0;
    border-bottom: 2px solid #f1f5f9;
    padding-bottom: 12px;
}

.rk-geo-group { margin-bottom: 30px; }
.rk-geo-label { display: block; font-size: 12px; font-weight: 800; color: var(--rk-text-muted); margin-bottom: 12px; text-transform: uppercase; letter-spacing: 0.5px; }

.rk-geo-range-box { display: flex; align-items: center; gap: 15px; }
.rk-geo-slider { flex: 1; -webkit-appearance: none; height: 6px; background: #e2e8f0; border-radius: 3px; outline: none; }
.rk-geo-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 22px; height: 22px; border-radius: 50%; background: var(--rk-brand-primary); cursor: pointer; border: 3px solid #ffffff; box-shadow: 0 2px 4px rgba(0,0,0,0.2); transition: transform 0.1s; }
.rk-geo-slider::-webkit-slider-thumb:active { transform: scale(1.2); }

.rk-geo-val-display { font-size: 20px; font-weight: 900; color: var(--rk-base-dark); min-width: 85px; text-align: right; font-variant-numeric: tabular-nums; }
.rk-geo-val-display span { color: var(--rk-brand-primary); }

/* Kafelki wyboru rozstawu */
.rk-geo-tile-stack { display: flex; flex-direction: column; gap: 12px; }
.rk-geo-tile-option { width: 100%; padding: 14px 18px; text-align: left; background: #ffffff; border: 2px solid var(--rk-border-color); border-radius: 10px; cursor: pointer; transition: all 0.2s; display: flex; flex-direction: column; gap: 4px; position: relative; overflow: hidden; }
.rk-geo-tile-option strong { font-size: 15px; color: var(--rk-base-dark); }
.rk-geo-tile-option span { font-size: 12px; color: var(--rk-text-muted); font-weight: 500; }

.rk-geo-tile-option::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: transparent; transition: background 0.2s; }
.rk-geo-tile-option.selected { background: var(--rk-brand-light); border-color: var(--rk-brand-primary); }
.rk-geo-tile-option.selected::before { background: var(--rk-brand-primary); }
.rk-geo-tile-option.selected strong { color: var(--rk-brand-hover); }

/* Wyniki i Wizualizacja (Prawa) */
.rk-geo-results-panel {
    background: var(--rk-base-panel);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    border: 1px solid #334155;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.1);
}

.rk-geo-res-title { font-size: 11px; text-transform: uppercase; font-weight: 800; color: #94a3b8; margin-bottom: 15px; letter-spacing: 1px; text-align: center; }

/* Nowy Dwuczęściowy Schemat SVG (Przekrój + Wskaźnik Oporu) */
.rk-geo-svg-stage {
    background: var(--rk-base-dark);
    border-radius: 12px;
    padding: 10px;
    height: 160px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 15px rgba(0,0,0,0.5);
    margin-bottom: 20px;
    position: relative;
    border: 1px solid #334155;
}

.rk-geo-svg { width: 100%; height: 100%; }

/* Klasy kontrolujące widoczność warstw termowizji */
.therm-layer { opacity: 0; transition: opacity 0.5s ease; }
.rk-geo-svg-stage[data-spacing="20"] .therm-20 { opacity: 1; }
.rk-geo-svg-stage[data-spacing="15"] .therm-15 { opacity: 1; }
.rk-geo-svg-stage[data-spacing="10"] .therm-10 { opacity: 1; }

/* Animacje statycznego wskaźnika oporu pompy */
.pump-indicator { transition: stroke-dashoffset 0.6s cubic-bezier(0.4, 0, 0.2, 1), stroke 0.6s; stroke-linecap: round; }
.pump-status-icon { transition: fill 0.6s; }

/* Stany pompy obiegowej */
.rk-geo-svg-stage[data-pump="normal"] .pump-indicator { stroke: var(--rk-state-green); stroke-dashoffset: 130; }
.rk-geo-svg-stage[data-pump="normal"] .pump-status-icon { fill: var(--rk-state-green); }

.rk-geo-svg-stage[data-pump="warning"] .pump-indicator { stroke: var(--rk-brand-primary); stroke-dashoffset: 60; }
.rk-geo-svg-stage[data-pump="warning"] .pump-status-icon { fill: var(--rk-brand-primary); }

.rk-geo-svg-stage[data-pump="critical"] .pump-indicator { stroke: var(--rk-state-red); stroke-dashoffset: 10; animation: pulseCritical 0.5s infinite alternate; }
.rk-geo-svg-stage[data-pump="critical"] .pump-status-icon { fill: var(--rk-state-red); animation: pulseCritical 0.5s infinite alternate; }

@keyframes pulseCritical {
    from { opacity: 0.6; filter: drop-shadow(0 0 2px var(--rk-state-red)); }
    to { opacity: 1; filter: drop-shadow(0 0 8px var(--rk-state-red)); }
}

/* Parametry liczbowe */
.rk-geo-rows { display: flex; flex-direction: column; gap: 10px; margin-bottom: 25px; }
.rk-geo-row { display: flex; justify-content: space-between; align-items: center; font-size: 13px; padding-bottom: 8px; border-bottom: 1px dashed rgba(255,255,255,0.05); }
.rk-geo-row:last-child { border-bottom: none; }
.rk-geo-lbl { color: #cbd5e1; }
.rk-geo-val { color: #ffffff; font-weight: 700; font-variant-numeric: tabular-nums; }

.rk-geo-status-box {
    background: rgba(16, 185, 129, 0.1);
    border: 1px solid rgba(16, 185, 129, 0.2);
    border-radius: 10px;
    padding: 15px;
    text-align: center;
    transition: all 0.3s;
    margin-top: auto;
}
.rk-status-lbl { font-size: 10px; font-weight: 800; color: var(--rk-state-green); text-transform: uppercase; margin-bottom: 6px; display: block; letter-spacing: 0.5px; }
.rk-status-val { font-size: 13px; font-weight: 600; color: #ffffff; line-height: 1.4; }

/* Sekcja Mocnego CTA */
.rk-geo-cta-block {
    background: var(--rk-base-panel);
    padding: 30px 50px;
    border-top: 2px solid var(--rk-brand-primary);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 30px;
}

.rk-geo-cta-text h4 { font-size: 17px; font-weight: 800; color: #ffffff; margin: 0 0 6px 0; }
.rk-geo-cta-text p { font-size: 13px; color: #94a3b8; margin: 0; line-height: 1.5; }
.rk-geo-cta-btn {
    background: var(--rk-brand-primary);
    color: #ffffff;
    padding: 15px 30px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 4px 15px rgba(245, 158, 11, 0.3);
    transition: all 0.2s;
    white-space: nowrap;
    border: none;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}
.rk-geo-cta-btn:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(245, 158, 11, 0.4); background: var(--rk-brand-hover); }

@media (max-width: 768px) {
    .rk-geo-header, .rk-geo-interactive, .rk-geo-cta-block { padding: 30px 20px; }
    .rk-geo-header h2 { font-size: 22px; }
    .rk-geo-dashboard { grid-template-columns: 1fr; gap: 20px; }
    .rk-geo-controls { padding: 20px; }
    .rk-geo-svg-stage { height: 140px; }
    .rk-geo-cta-block { flex-direction: column; text-align: center; gap: 15px; }
    .rk-geo-cta-btn { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-geometria",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Jak OZC wpływa na projekt ogrzewania podłogowego?",
    "description": "Zobacz, jak wyniki projektowego obciążenia cieplnego (OZC) determinują geometrię pętli, rozstaw rur grzewczych oraz zrównoważenie hydrauliczne rozdzielacza.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-geometria",
    "name": "Parametry geometryczno-hydrauliczne pętli podłogówki na bazie OZC",
    "description": "Zależność rozstawu rur grzewczych, oporów ciśnienia oraz długości obiegów grzewczych w funkcji gęstości zapotrzebowania na moc szczytową pomieszczeń.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowanie ogrzewania podłogowego rozstaw",
      "maksymalna długość pętli podłogówki 16mm",
      "strefy brzegowe pod dużymi przeszkleniami",
      "zbalansowanie hydrauliczne rozdzielacza",
      "obciążenie cieplne a opory ciśnienia"
    ],
    "measurementTechnique": "Symulacja gęstości układania rur pex oraz wyznaczanie strat ciśnienia w pętli grzewczej zgodnie z wytycznymi normy PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Zależność geometryczna: Wyższe obciążenie szczytowe wymusza gęstszy rozstaw rur (co 10 cm) w celu uniknięcia przewymiarowania temperatury zasilania.",
        "Ograniczenie hydrauliczne: Maksymalna długość obwodu dla średnicy 16mm wynosi 100-120m, chroniąc układ przed oporami paraliżującymi pompy obiegowe."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-geometria",
    "name": "Symulator Geometrii i Oporów Hydraulicznych Pętli",
    "description": "Interaktywny analizator pozwalający inwestorom sprawdzić, jak zapotrzebowanie na moc i rozstaw rur wpływają na długość obwodu i ciśnienie instalacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires modern browser with SVG and JavaScript enabled",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-geo-container" id="rk-geo-app">
    
    <div class="rk-geo-header">
        <div class="rk-geo-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg>
            Wpływ OZC na wykonawstwo
        </div>
        <h2>Jak to wpływa na projekt ogrzewania podłogowego?</h2>
        <p class="rk-geo-lead">
            Projektowe Obciążenie Cieplne bezpośrednio determinuje geometrię i parametry hydrauliczne instalacji płaszczyznowej. Na podstawie uzyskanych wyników szczytowych dla każdego pokoju, projektant dobiera optymalny rozstaw rur grzewczych, zapobiegając nadmiernym oporom ciśnienia. 
            <br><br>
            OZC pozwala także na dokładne zlokalizowanie stref brzegowych pod dużymi przeszkleniami oraz precyzyjny dobór pomp ciepła. Bez tych danych <a href="https://projekt-ogrzewania.pl/regulacja-ogrzewania-podlogowego-przeplywy-w-petlach/" class="rk-link-geo">zbalansowanie hydrauliczne rozdzielacza</a> jest niewykonalne, co skazuje inwestora na losowe, nieefektywne działanie systemu.
        </p>
    </div>

    <div class="rk-geo-interactive">
        <div class="rk-geo-dashboard">
            
            <div class="rk-geo-controls">
                <div class="rk-geo-panel-title">Analizator Pętli Grzewczej (Pokój 20 m²)</div>
                
                <div class="rk-geo-group">
                    <label class="rk-geo-label">Obciążenie cieplne pokoju (OZC)</label>
                    <div class="rk-geo-range-box">
                        <input type="range" id="geoInpPower" class="rk-geo-slider" min="300" max="1400" value="800" step="50">
                        <div class="rk-geo-val-display"><span id="geoValPowerOut">800</span> W</div>
                    </div>
                </div>

                <div class="rk-geo-group" style="margin-bottom:0;">
                    <label class="rk-geo-label">Planowany rozstaw rur grzewczych</label>
                    <div class="rk-geo-tile-stack">
                        <div class="rk-geo-tile-option" data-spacing="10">
                            <strong>co 10 cm</strong>
                            <span>Gęsty (Łazienki / Strefy brzegowe)</span>
                        </div>
                        <div class="rk-geo-tile-option selected" data-spacing="15">
                            <strong>co 15 cm</strong>
                            <span>Standard budowlany (WT 2021)</span>
                        </div>
                        <div class="rk-geo-tile-option" data-spacing="20">
                            <strong>co 20 cm</strong>
                            <span>Rzadki / Ekonomiczny (WT 2014)</span>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-geo-results-panel">
                <div class="rk-geo-res-title">Opory i Zagęszczenie Rur (Pętla 16mm)</div>
                
                <div class="rk-geo-svg-stage" id="geoSvgStage" data-spacing="15" data-pump="normal">
                    <svg class="rk-geo-svg" viewBox="0 0 250 110">
                        <defs>
                            <filter id="heatGlow" x="-20%" y="-20%" width="140%" height="140%">
                                <feGaussianBlur stdDeviation="3" result="blur" />
                                <feComposite in="SourceGraphic" in2="blur" operator="over" />
                            </filter>
                        </defs>

                        <text x="75" y="15" fill="#64748b" font-size="7" font-weight="bold" text-anchor="middle" letter-spacing="0.5">ROZKŁAD TEMPERATUR (TERMOWIZJA)</text>
                        <rect x="10" y="25" width="130" height="75" fill="#1e3a8a" rx="4" stroke="#334155" stroke-width="2"/>
                        
                        <g class="therm-layer therm-20">
                            <path d="M 15 35 L 135 35 M 15 55 L 135 55 M 15 75 L 135 75 M 15 90 L 135 90" stroke="#f59e0b" stroke-width="10" filter="url(#heatGlow)"/>
                        </g>
                        <g class="therm-layer therm-15">
                            <path d="M 15 32 L 135 32 M 15 45 L 135 45 M 15 58 L 135 58 M 15 71 L 135 71 M 15 84 L 135 84 M 15 95 L 135 95" stroke="#ef4444" stroke-width="11" filter="url(#heatGlow)"/>
                        </g>
                        <g class="therm-layer therm-10">
                            <path d="M 15 30 L 135 30 M 15 38 L 135 38 M 15 46 L 135 46 M 15 54 L 135 54 M 15 62 L 135 62 M 15 70 L 135 70 M 15 78 L 135 78 M 15 86 L 135 86 M 15 94 L 135 94" stroke="#ef4444" stroke-width="12" filter="url(#heatGlow)"/>
                        </g>

                        <text x="200" y="15" fill="#64748b" font-size="7" font-weight="bold" text-anchor="middle" letter-spacing="0.5">OPÓR POMPY OBIEGOWEJ</text>
                        
                        <path d="M 170 65 A 30 30 0 0 1 230 65" fill="none" stroke="#1e293b" stroke-width="8" stroke-linecap="round"/>
                        <path class="pump-indicator" d="M 170 65 A 30 30 0 0 1 230 65" fill="none" stroke-width="8" stroke-dasharray="94"/>
                        
                        <circle cx="200" cy="60" r="8" class="pump-status-icon"/>
                        <path d="M 197 57 L 204 60 L 197 63 Z" fill="#0b1120"/>

                        <text x="200" y="90" fill="#ffffff" font-size="7" font-weight="bold" text-anchor="middle" id="geoPumpText">STABILNIE</text>
                    </svg>
                </div>

                <div class="rk-geo-rows">
                    <div class="rk-geo-row">
                        <span class="rk-geo-lbl">Szacowana długość rury:</span>
                        <span class="rk-geo-val"><span id="geoOutLength">148</span> m</span>
                    </div>
                    <div class="rk-geo-row">
                        <span class="rk-geo-lbl">Rozkład temperatury:</span>
                        <span class="rk-geo-val" id="geoOutEdge">Równomierny</span>
                    </div>
                </div>

                <div class="rk-geo-status-box" id="geoStatusBox">
                    <span class="rk-status-lbl" id="geoStatusLbl">Status układu</span>
                    <div class="rk-status-val" id="geoStatusVal">Pętla zbyt długa! Wykonawca musi podzielić obieg.</div>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-geo-cta-block">
        <div class="rk-geo-cta-text">
            <h4>Nie ryzykuj układania podłogówki „na intuicję” instalatora</h4>
            <p>Zamów profesjonalny, kompletny projekt hydrauliczny oparty o rzetelne obliczenia OZC.</p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-geo-cta-btn">Zamów profesjonalny projekt</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-geo-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd integralności danych</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja symulacji matrycy hydraulicznej stanowi zastrzeżoną część portalu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Stan kalkulatora
    let geoState = {
        power: 800,
        spacing: 15
    };

    // 3. Elementy DOM
    const inpPower = document.getElementById('geoInpPower');
    const valPowerOut = document.getElementById('geoValPowerOut');
    const tileOptions = document.querySelectorAll('.rk-geo-tile-option');
    
    // SVG Elements
    const svgStage = document.getElementById('geoSvgStage');
    const pumpText = document.getElementById('geoPumpText');

    // Elementy wyjściowe
    const outLength = document.getElementById('geoOutLength');
    const outEdge = document.getElementById('geoOutEdge');
    const statusBox = document.getElementById('geoStatusBox');
    const statusLbl = document.getElementById('geoStatusLbl');
    const statusVal = document.getElementById('geoStatusVal');

    // 4. Silnik obliczeń inżynierskich dla pokoju 20m2
    function updateHydraulics() {
        // Obliczenie zapotrzebowania na rurę: Powierzchnia(20) / rozstaw + podejścia(15)
        let calculatedLength = Math.round((20 / (geoState.spacing / 100)) + 15);
        outLength.textContent = calculatedLength;

        // Aktualizacja widoczności warstw termowizji w SVG (data-spacing)
        svgStage.setAttribute('data-spacing', geoState.spacing.toString());

        // Analiza "Zebry termicznej"
        if (geoState.spacing === 20) {
            outEdge.textContent = "Ryzyko niedogrzanych stref";
            outEdge.style.color = "var(--rk-brand-primary)";
        } else if (geoState.spacing === 15) {
            outEdge.textContent = "Normatywny (Dobra dystrybucja)";
            outEdge.style.color = "var(--rk-state-green)";
        } else {
            outEdge.textContent = "Zagęszczony (Idealny rozkład)";
            outEdge.style.color = "var(--rk-state-green)";
        }

        // Klasyfikacja hydrauliczna pompy na podstawie długości (limit 120m)
        if (calculatedLength > 120) {
            svgStage.setAttribute('data-pump', 'critical');
            pumpText.textContent = "KRYTYCZNE (>35 kPa)";
            pumpText.setAttribute("fill", "#ef4444");

            statusBox.style.backgroundColor = "rgba(239, 68, 68, 0.1)";
            statusBox.style.borderColor = "rgba(239, 68, 68, 0.2)";
            statusLbl.style.color = "var(--rk-state-red)";
            statusVal.textContent = "Pętla zbyt długa! Wysokie opory zdławią pompę. Wykonawca musi podzielić obwód.";
        } else if (calculatedLength >= 100 && calculatedLength <= 120) {
            svgStage.setAttribute('data-pump', 'warning');
            pumpText.textContent = "PODWYŻSZONE OPORY";
            pumpText.setAttribute("fill", "#f59e0b");

            statusBox.style.backgroundColor = "rgba(245, 158, 11, 0.1)";
            statusBox.style.borderColor = "rgba(245, 158, 11, 0.2)";
            statusLbl.style.color = "var(--rk-brand-primary)";
            statusVal.textContent = "Granica normy (ok. 100m). Wymaga precyzyjnego równoważenia na rozdzielaczu.";
        } else {
            svgStage.setAttribute('data-pump', 'normal');
            pumpText.textContent = "OPTYMALNE (<15 kPa)";
            pumpText.setAttribute("fill", "#10b981");

            statusBox.style.backgroundColor = "rgba(16, 185, 129, 0.1)";
            statusBox.style.borderColor = "rgba(16, 185, 129, 0.2)";
            statusLbl.style.color = "var(--rk-state-green)";
            statusVal.textContent = "Bezpieczne parametry pętli. Pompa pracuje na maksymalnym współczynniku wydajności.";
        }
    }

    // 5. Zdarzenia wejściowe
    inpPower.addEventListener('input', function(e) {
        geoState.power = parseInt(e.target.value);
        valPowerOut.innerHTML = `<span>${geoState.power}</span> W`;
        updateHydraulics();
    });

    tileOptions.forEach(tile => {
        tile.addEventListener('click', function() {
            tileOptions.forEach(t => t.classList.remove('selected'));
            this.classList.add('selected');
            geoState.spacing = parseInt(this.getAttribute('data-spacing'));
            updateHydraulics();
        });
    });

    // Inicjalizacja formatowania tekstu suwaka
    valPowerOut.innerHTML = `<span>${geoState.power}</span> W`;

    // Uruchomienie kalkulatora
    updateHydraulics();
});
</script>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-brand: #2563eb; /* Inżynieryjny niebieski */
    --rk-cs-brand-light: #eff6ff;
    --rk-cs-accent: #10b981; /* Zielony dla oszczędności / OZC */
    --rk-cs-alert: #ef4444; /* Czerwony dla błędów instalatora */
    --rk-cs-bg: #ffffff;
    --rk-cs-panel: #f8fafc;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #475569;
    --rk-cs-muted: #94a3b8;
}

.rk-cs-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-cs-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(37, 99, 235, 0.15);
    border: 1px solid rgba(37, 99, 235, 0.2);
    overflow: hidden;
}

/* Sekcja Nagłówka */
.rk-cs-header {
    background: linear-gradient(135deg, var(--rk-cs-dark) 0%, #1e3a8a 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    overflow: hidden;
    border-bottom: 4px solid var(--rk-cs-brand);
}

.rk-cs-header::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37, 99, 235, 0.4) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #bfdbfe;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(255, 255, 255, 0.2);
    position: relative;
    z-index: 2;
}

.rk-cs-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 25px 0;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.rk-cs-title span { color: #60a5fa; }

/* Grid Statystyk w Nagłówku */
.rk-cs-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs-stat-box {
    background: rgba(0, 0, 0, 0.25);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

.rk-cs-stat-lbl { display: block; font-size: 11px; color: #94a3b8; text-transform: uppercase; font-weight: 800; margin-bottom: 6px; letter-spacing: 0.5px; }
.rk-cs-stat-val { display: block; font-size: 16px; font-weight: 900; color: #ffffff; }
.rk-cs-stat-val.highlight { color: #10b981; }

/* Główny Panel Interaktywny */
.rk-cs-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-cs-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
    border-radius: 20px;
    border: 1px solid var(--rk-cs-border);
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.02);
    overflow: hidden;
}

/* Lewa Kolumna - Kontrola i Zestawienie */
.rk-cs-comparison {
    padding: 30px;
    display: flex;
    flex-direction: column;
}

.rk-cs-comp-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-cs-dark);
    margin: 0 0 20px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Toggle Switch (Przełącznik) */
.rk-cs-toggle-wrapper {
    display: flex;
    background: var(--rk-cs-panel);
    border: 2px solid var(--rk-cs-border);
    border-radius: 12px;
    padding: 4px;
    margin-bottom: 30px;
    position: relative;
}

.rk-cs-toggle-btn {
    flex: 1;
    text-align: center;
    padding: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-cs-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 2;
}

.rk-cs-toggle-btn.active.mode-bad { color: #ffffff; }
.rk-cs-toggle-btn.active.mode-good { color: #ffffff; }

.rk-cs-toggle-bg {
    position: absolute;
    top: 4px;
    bottom: 4px;
    width: calc(50% - 4px);
    border-radius: 8px;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 1;
}

.rk-cs-dashboard[data-mode="bad"] .rk-cs-toggle-bg { left: 4px; background: var(--rk-cs-alert); box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3); }
.rk-cs-dashboard[data-mode="good"] .rk-cs-toggle-bg { left: calc(50%); background: var(--rk-cs-accent); box-shadow: 0 4px 10px rgba(16, 185, 129, 0.3); }

/* Wiersze Danych */
.rk-cs-data-rows { display: flex; flex-direction: column; gap: 15px; }
.rk-cs-data-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-bottom: 12px;
    border-bottom: 1px dashed var(--rk-cs-border);
}
.rk-cs-data-row:last-child { border-bottom: none; }
.rk-cs-data-lbl { font-size: 13px; color: var(--rk-cs-text); font-weight: 600; }
.rk-cs-data-val { font-size: 15px; font-weight: 900; transition: color 0.3s; font-variant-numeric: tabular-nums; }

.rk-cs-dashboard[data-mode="bad"] .rk-cs-data-val { color: var(--rk-cs-alert); }
.rk-cs-dashboard[data-mode="good"] .rk-cs-data-val { color: var(--rk-cs-accent); }

/* Prawa Kolumna - Wizualizacja SVG */
.rk-cs-visual {
    background: var(--rk-cs-dark);
    padding: 30px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
}

.rk-cs-svg-stage { width: 100%; height: 200px; }

/* SVG Animacje */
.anim-hp-box { transition: all 0.5s cubic-bezier(0.34, 1.56, 0.64, 1); transform-origin: center bottom; }
.anim-fan { transform-origin: 150px 100px; }
.anim-pipe { transition: all 0.5s ease; stroke-dasharray: 4 4; }

.rk-cs-dashboard[data-mode="bad"] .anim-hp-box { transform: scale(1.1); fill: #450a0a; stroke: #ef4444; }
.rk-cs-dashboard[data-mode="bad"] .anim-fan { animation: fanSpin 0.5s linear infinite; fill: #ef4444; }
.rk-cs-dashboard[data-mode="bad"] .anim-pipe { stroke: #ef4444; stroke-width: 4; stroke-dasharray: 20 10; }

.rk-cs-dashboard[data-mode="good"] .anim-hp-box { transform: scale(0.85); fill: #064e3b; stroke: #10b981; }
.rk-cs-dashboard[data-mode="good"] .anim-fan { animation: fanSpin 2s linear infinite; fill: #10b981; }
.rk-cs-dashboard[data-mode="good"] .anim-pipe { stroke: #10b981; stroke-width: 2; stroke-dasharray: none; }

@keyframes fanSpin { 100% { transform: rotate(360deg); } }

/* Odznaka Oszczędności (Wyskakująca) */
.rk-cs-savings-badge {
    position: absolute;
    top: 20px;
    right: 20px;
    background: var(--rk-cs-accent);
    color: #ffffff;
    padding: 10px 15px;
    border-radius: 12px;
    font-weight: 900;
    font-size: 16px;
    box-shadow: 0 10px 20px rgba(16, 185, 129, 0.4);
    opacity: 0;
    transform: translateY(-10px) scale(0.9);
    transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.rk-cs-dashboard[data-mode="good"] .rk-cs-savings-badge { opacity: 1; transform: translateY(0) scale(1); }

/* Autor i Opis */
.rk-cs-author-section {
    padding: 0 50px 30px 50px;
    background: #f8fafc;
}

.rk-cs-author-box {
    background: #ffffff;
    border-left: 4px solid var(--rk-cs-brand);
    padding: 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 20px;
    box-shadow: 0 4px 15px rgba(0,0,0,0.03);
    border: 1px solid var(--rk-cs-border);
    border-left: 4px solid var(--rk-cs-brand);
}

.rk-cs-author-photo {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--rk-cs-brand-light);
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
    flex-shrink: 0;
}

.rk-cs-author-text p { margin: 0; font-size: 14px; color: var(--rk-cs-text); line-height: 1.6; }
.rk-cs-author-text strong { color: var(--rk-cs-dark); font-weight: 800; }

/* Sekcja Mocnego CTA */
.rk-cs-cta-block {
    background: linear-gradient(135deg, #1e1b4b 0%, var(--rk-cs-dark) 100%);
    padding: 35px 50px;
    border-top: 1px solid rgba(37, 99, 235, 0.2);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 30px;
}

.rk-cs-cta-text h4 { font-size: 18px; font-weight: 800; color: #ffffff; margin: 0 0 8px 0; }
.rk-cs-cta-text p { font-size: 14px; color: #94a3b8; margin: 0; line-height: 1.5; }
.rk-cs-cta-btn {
    background: var(--rk-cs-brand);
    color: #ffffff;
    padding: 16px 32px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-decoration: none;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.5);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    white-space: nowrap;
    border: none;
    text-transform: uppercase;
}
.rk-cs-cta-btn:hover { transform: translateY(-3px); box-shadow: 0 15px 25px -5px rgba(37, 99, 235, 0.6); background: #3b82f6; }

@media (max-width: 768px) {
    .rk-cs-header, .rk-cs-interactive, .rk-cs-author-section, .rk-cs-cta-block { padding: 30px 20px; }
    .rk-cs-title { font-size: 24px; }
    .rk-cs-stats-grid { grid-template-columns: 1fr 1fr; }
    .rk-cs-dashboard { grid-template-columns: 1fr; }
    .rk-cs-svg-stage { height: 160px; }
    .rk-cs-author-box { flex-direction: column; text-align: center; }
    .rk-cs-cta-block { flex-direction: column; text-align: center; gap: 20px; }
    .rk-cs-cta-btn { width: 100%; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Case Study: OZC dla domu w Nowym Targu (174 m²)",
    "description": "Zakończyliśmy pełne opracowanie OZC dla domu 174m2 w V strefie klimatycznej (-24 st C). Zmiana pompy ciepła z 10 kW na 5 kW dała 6500 PLN oszczędności.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-04-14",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-casestudy",
    "name": "Wyniki optymalizacji OZC - Nowy Targ",
    "description": "Porównanie doboru pompy ciepła na podstawie intuicji instalatora vs precyzyjne wyliczenia OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "pompa ciepła 5kW vs 10kW",
      "OZC Nowy Targ V strefa klimatyczna",
      "rozstaw rur 15cm i 10cm",
      "przepływ zasilania 1.8 l/min",
      "oszczędność na pompie 6500 PLN"
    ],
    "measurementTechnique": "Analiza cieplna budynku OZC i projektowanie hydrauliczne wg PN-EN 12831.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Lokalizacja: Nowy Targ (V strefa, -24°C), Dom tradycyjny ceramika + 22cm EPS, Wentylacja mechaniczna.",
        "Obciążenie całkowite: 4,85 kW, pozwalające na redukcję pompy z 10 kW na 5 kW.",
        "Zysk: 6500 PLN, rozstaw salon 15 cm / łazienki 10 cm, przepływy: 1.8 l/min."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-casestudy",
    "name": "Kalkulator Oszczędności OZC",
    "description": "Interaktywny panel prezentujący realne oszczędności (6500 PLN) wynikające z przeliczenia instalatora vs inżyniera w Nowym Targu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires modern browser with SVG and JavaScript enabled",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cs-container" id="rk-cs-app">
    
    <div class="rk-cs-header">
        <div class="rk-cs-badge">Case Study: Kwiecień 2025</div>
        <h2 class="rk-cs-title">Instalator vs Inżynier: <span>Oszczędność 6 500 PLN</span></h2>
        
        <div class="rk-cs-stats-grid">
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Inwestor</span>
                <span class="rk-cs-stat-val">Pan Mariusz</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Lokalizacja</span>
                <span class="rk-cs-stat-val">Nowy Targ (-24°C)</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Powierzchnia</span>
                <span class="rk-cs-stat-val">174 m²</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-stat-lbl">Obciążenie (OZC)</span>
                <span class="rk-cs-stat-val highlight">4,85 kW</span>
            </div>
        </div>
    </div>

    <div class="rk-cs-interactive">
        
        <div class="rk-cs-dashboard" id="csDashboard" data-mode="bad">
            
            <div class="rk-cs-comparison">
                <h3 class="rk-cs-comp-title">Wybierz scenariusz doboru:</h3>
                
                <div class="rk-cs-toggle-wrapper">
                    <div class="rk-cs-toggle-bg"></div>
                    <div class="rk-cs-toggle-btn active mode-bad" id="btnModeBad" data-target="bad">Intuicja Instalatora</div>
                    <div class="rk-cs-toggle-btn mode-good" id="btnModeGood" data-target="good">Twarde OZC (Inżynieria)</div>
                </div>

                <div class="rk-cs-data-rows">
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Moc Pompy Ciepła:</span>
                        <span class="rk-cs-data-val" id="valPump">10 kW (Przewymiarowana)</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Rozstaw rur (Salon):</span>
                        <span class="rk-cs-data-val" id="valSpace">&#8222;Jak wyjdzie&#8221;</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Nastawy rotametrów:</span>
                        <span class="rk-cs-data-val" id="valFlow">Wszystko na 100%</span>
                    </div>
                    <div class="rk-cs-data-row">
                        <span class="rk-cs-data-lbl">Koszt inwestycji:</span>
                        <span class="rk-cs-data-val" id="valCost">Drogo i nieefektywnie</span>
                    </div>
                </div>
            </div>

            <div class="rk-cs-visual">
                <div class="rk-cs-savings-badge">+ 6 500 PLN w kieszeni!</div>
                
                <div class="rk-cs-svg-stage">
                    <svg viewBox="0 0 300 200" width="100%" height="100%">
                        <path class="anim-pipe" d="M 50 180 L 250 180 M 50 170 L 250 170 M 50 160 L 250 160" stroke-linecap="round"/>
                        
                        <path d="M 150 20 L 50 80 L 50 150 L 250 150 L 250 80 Z" fill="none" stroke="#334155" stroke-width="4" stroke-linejoin="round"/>
                        
                        <g class="anim-hp-box" transform="translate(0, 0)">
                            <rect x="110" y="70" width="80" height="80" rx="8" stroke-width="4"/>
                            <g class="anim-fan">
                                <circle cx="150" cy="110" r="25" fill="#0f172a" opacity="0.5"/>
                                <path d="M 150 85 L 165 110 L 135 110 Z"/>
                                <path d="M 150 135 L 135 110 L 165 110 Z"/>
                                <circle cx="150" cy="110" r="5" fill="#ffffff"/>
                            </g>
                        </g>
                    </svg>
                </div>
            </div>

        </div>
    </div>

    <div class="rk-cs-author-section">
        <div class="rk-cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-cs-author-photo" loading="lazy">
            <div class="rk-cs-author-text">
                <p>14 kwietnia 2025 r. zakończyliśmy dokumentację dla budynku w Nowym Targu (ceramika + 22cm EPS, rekuperacja). Projektowe obciążenie wyniosło zaledwie <strong>4,85 kW</strong> przy strefie V (-24°C). Pozwoliło to odrzucić propozycję wykonawcy (10 kW), dobrać pompę 5 kW i wyznaczyć precyzyjny rozstaw rur co 15 cm i 10 cm, z przepływami rzędu 1,8 l/min. <strong>Wynik? Zbalansowany układ i fizyczna oszczędność 6500 zł dla Inwestora.</strong></p>
            </div>
        </div>
    </div>

    <div class="rk-cs-cta-block">
        <div class="rk-cs-cta-text">
            <h4>Przestań przepłacać za przewymiarowane urządzenia</h4>
            <p>Zamów projekt OZC + Ogrzewanie Podłogowe i odzyskaj kontrolę nad budżetem budowy.</p>
        </div>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-cs-cta-btn">Zamów Pakiet Projektowy</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-cs-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;"><div style="font-size:16px; text-transform:uppercase; margin-bottom:8px;">Błąd autoryzacji modułu</div><div style="font-size:13px; color:#cbd5e1;">Aplikacja Case Study należy do portalu Projekt-Ogrzewania.pl.</div></div>';
        return;
    }

    // 2. Elementy DOM
    const dashboard = document.getElementById('csDashboard');
    const btnBad = document.getElementById('btnModeBad');
    const btnGood = document.getElementById('btnModeGood');
    
    // Pola Danych
    const valPump = document.getElementById('valPump');
    const valSpace = document.getElementById('valSpace');
    const valFlow = document.getElementById('valFlow');
    const valCost = document.getElementById('valCost');

    // 3. Baza Danych Scenariuszy
    const dataScenarios = {
        bad: {
            pump: "10 kW (Przewymiarowana)",
            space: "Intuicyjnie / Losowo",
            flow: "Maksymalne na pompie",
            cost: "Ogromne rachunki i zjawisko taktowania"
        },
        good: {
            pump: "5 kW (Idealnie dobrana OZC)",
            space: "15 cm (Salon) / 10 cm (Łazienka)",
            flow: "Precyzyjne 1,8 l/min",
            cost: "Zoptymalizowane + zysk na starcie"
        }
    };

    // 4. Silnik Przełączania
    function setMode(mode) {
        // Zmiana atrybutu głównego (napędza CSS i SVG)
        dashboard.setAttribute('data-mode', mode);
        
        // Klasy przycisków
        if (mode === 'bad') {
            btnBad.classList.add('active');
            btnGood.classList.remove('active');
        } else {
            btnGood.classList.add('active');
            btnBad.classList.remove('active');
        }

        // Aktualizacja tekstów
        const data = dataScenarios[mode];
        valPump.textContent = data.pump;
        valSpace.textContent = data.space;
        valFlow.textContent = data.flow;
        valCost.textContent = data.cost;
    }

    // Zdarzenia kliknięcia
    btnBad.addEventListener('click', () => setMode('bad'));
    btnGood.addEventListener('click', () => setMode('good'));

});
</script>



<style>
:root {
    --rk-ozcfaq-dark: #0f172a;
    --rk-ozcfaq-brand: #0284c7; /* Ekspercki niebieski OZC */
    --rk-ozcfaq-brand-light: #e0f2fe;
    --rk-ozcfaq-accent: #0ea5e9;
    --rk-ozcfaq-bg: #f8fafc;
    --rk-ozcfaq-border: #cbd5e1;
    --rk-ozcfaq-text: #334155;
    --rk-ozcfaq-hover: #f1f5f9;
}

.rk-ozcfaq-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-ozcfaq-brand);
    overflow: hidden;
}

/* Nagłówek */
.rk-ozcfaq-header {
    background: linear-gradient(135deg, var(--rk-ozcfaq-dark) 0%, #1e293b 100%);
    padding: 40px 45px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-ozcfaq-brand);
    text-align: center;
}

.rk-ozcfaq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #7dd3fc;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-ozcfaq-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
    color: #ffffff;
}

.rk-ozcfaq-title span { color: #38bdf8; }

/* Akordeon */
.rk-ozcfaq-interactive {
    padding: 40px 45px;
    background: var(--rk-ozcfaq-bg);
}

.rk-ozcfaq-list {
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.rk-ozcfaq-item {
    background: #ffffff;
    border: 1px solid var(--rk-ozcfaq-border);
    border-radius: 16px;
    overflow: hidden;
    transition: all 0.3s;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-ozcfaq-item.active {
    border-color: var(--rk-ozcfaq-brand);
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.15);
}

/* Przycisk Pytania */
.rk-ozcfaq-question {
    width: 100%;
    text-align: left;
    background: transparent;
    border: none;
    padding: 22px 25px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-ozcfaq-dark);
    transition: background 0.3s, color 0.3s;
}

.rk-ozcfaq-question:hover {
    background: var(--rk-ozcfaq-hover);
}

.rk-ozcfaq-item.active .rk-ozcfaq-question {
    background: var(--rk-ozcfaq-brand);
    color: #ffffff;
}

.rk-ozcfaq-icon {
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-ozcfaq-brand-light);
    color: var(--rk-ozcfaq-brand);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s;
}

.rk-ozcfaq-item.active .rk-ozcfaq-icon {
    background: rgba(255,255,255,0.2);
    color: #ffffff;
    transform: rotate(180deg);
}

/* Odpowiedź z Gridem i Animacją SVG */
.rk-ozcfaq-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-ozcfaq-item.active .rk-ozcfaq-answer-wrapper {
    grid-template-rows: 1fr;
}

.rk-ozcfaq-answer-inner {
    overflow: hidden;
}

.rk-ozcfaq-content {
    padding: 25px;
    border-top: 1px solid var(--rk-ozcfaq-border);
    display: grid;
    grid-template-columns: 1fr 180px;
    gap: 30px;
    align-items: center;
}

.rk-ozcfaq-text {
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-ozcfaq-text);
}

.rk-ozcfaq-text strong {
    font-weight: 800;
    color: var(--rk-ozcfaq-dark);
}

.rk-link {
    color: var(--rk-ozcfaq-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(2, 132, 199, 0.2);
    transition: all 0.3s;
}

.rk-link:hover {
    border-bottom-color: var(--rk-ozcfaq-brand);
}

/* Wizualizacje SVG */
.rk-ozcfaq-visual {
    background: var(--rk-ozcfaq-dark);
    border-radius: 12px;
    padding: 15px;
    height: 130px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: inset 0 4px 10px rgba(0,0,0,0.3);
    position: relative;
    overflow: hidden;
}

.rk-svg-box {
    width: 100%;
    height: 100%;
}

/* Animacje specyficzne dla każdego SVG zależne od .active w rodzicu */

/* FAQ 1: Pokoje OZC */
.anim-room-1, .anim-room-2, .anim-room-3 { opacity: 0.3; transition: opacity 0.5s; }
.rk-ozcfaq-item.active .anim-room-1 { animation: pulseRed 2s infinite; }
.rk-ozcfaq-item.active .anim-room-2 { animation: pulseOrange 2s 0.6s infinite; }
.rk-ozcfaq-item.active .anim-room-3 { animation: pulseYellow 2s 1.2s infinite; }
@keyframes pulseRed { 50% { fill: #ef4444; opacity: 0.9; } }
@keyframes pulseOrange { 50% { fill: #f97316; opacity: 0.9; } }
@keyframes pulseYellow { 50% { fill: #eab308; opacity: 0.9; } }

/* FAQ 2: Rekuperacja/Aktualizacja */
.anim-fan { transform-origin: center; transition: transform 0.5s; }
.rk-ozcfaq-item.active .anim-fan { animation: spinFan 2s linear infinite; }
@keyframes spinFan { to { transform: rotate(360deg); } }
.anim-insulation { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 1s 0.3s; }
.rk-ozcfaq-item.active .anim-insulation { stroke-dashoffset: 0; }

/* FAQ 3: EUco vs OZC */
.anim-bar-euco { transform: scaleX(0); transform-origin: left; transition: transform 1s 0.2s cubic-bezier(0.2, 0.8, 0.2, 1); }
.rk-ozcfaq-item.active .anim-bar-euco { transform: scaleX(1); }
.anim-bar-ozc { transform: scaleX(0); transform-origin: left; transition: transform 1s 0.5s cubic-bezier(0.2, 0.8, 0.2, 1); }
.rk-ozcfaq-item.active .anim-bar-ozc { transform: scaleX(1); }

/* FAQ 4: Zyski (Noc) */
.anim-sun { transition: transform 1s, opacity 1s; }
.anim-moon { opacity: 0; transform: translateY(-20px); transition: transform 1s, opacity 1s; }
.rk-ozcfaq-item.active .anim-sun { transform: translateY(30px); opacity: 0; }
.rk-ozcfaq-item.active .anim-moon { opacity: 1; transform: translateY(0); }
.anim-snow { opacity: 0; }
.rk-ozcfaq-item.active .anim-snow { animation: fallSnow 2s infinite linear; }
@keyframes fallSnow { 0% { opacity: 0; transform: translateY(-10px); } 50% { opacity: 1; } 100% { opacity: 0; transform: translateY(20px); } }

/* FAQ 5: Stary Dom */
.anim-scan { transform: translateY(-10px); opacity: 0; }
.rk-ozcfaq-item.active .anim-scan { animation: scanWall 2.5s infinite; }
@keyframes scanWall { 0% { transform: translateY(-10px); opacity: 0; } 10% { opacity: 1; } 90% { opacity: 1; } 100% { transform: translateY(60px); opacity: 0; } }

@media (max-width: 768px) {
    .rk-ozcfaq-header, .rk-ozcfaq-interactive { padding: 30px 20px; }
    .rk-ozcfaq-title { font-size: 24px; }
    .rk-ozcfaq-content { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-ozcfaq-visual { height: 110px; max-width: 200px; margin: 0 auto; width: 100%; }
    .rk-ozcfaq-question { font-size: 14px; padding: 18px 20px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "FAQ – Najczęściej zadawane pytania o OZC",
    "description": "Eksperckie odpowiedzi na pytania dotyczące Projektowego Obciążenia Cieplnego (OZC), różnic z EUco, modernizacji starych domów i aktualizacji projektu.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy obliczenia OZC wykonuje się dla całego budynku, czy dla każdego pomieszczenia osobno?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Obliczenia OZC muszą być bezwzględnie wykonane dla każdego pomieszczenia z osobna, ponieważ każde wnętrze posiada inną strukturę przegród zewnętrznych oraz odmienne straty wentylacyjne. Zbiorczy wynik dla całego budynku jest jedynie sumą składowych służącą do doboru mocy źródła ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Jak często należy aktualizować obliczenia OZC w trakcie trwania budowy domu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Aktualizację obliczeń OZC należy przeprowadzić zawsze wtedy, gdy w trakcie realizacji inwestycji dojdzie do istotnych zmian w materiałach izolacyjnych lub stolarki otworowej w stosunku do pierwotnego projektu. Zmiana grubości styropianu czy rezygnacja z rekuperacji całkowicie zmienia bilans cieplny budynku."
        }
      },
      {
        "@type": "Question",
        "name": "Czy wskaźnik EUco z charakterystyki energetycznej projektu to samo co Projektowe Obciążenie Cieplne?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, wskaźnik EUco określa sezonowe zapotrzebowanie na energię użytkową w ciągu całego roku wyrażane w kWh/(m2 rok), natomiast OZC to chwilowa, maksymalna moc cieplna wyrażana w kilowatach [kW], potrzebna do pokrycia strat w warunkach skrajnego mrozu. OZC decyduje o fizycznej wielkości urządzeń, a EUco o rocznych kosztach paliwa."
        }
      },
      {
        "@type": "Question",
        "name": "Jaki wpływ na wartość OZC mają zyski ciepła od nasłonecznienia oraz urządzeń wewnętrznych?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zgodnie z procedurą normy PN-EN 12831, przy obliczaniu Projektowego Obciążenia Cieplnego mającego na celu dobór mocy urządzeń grzewczych, zyski ciepła od nasłonecznienia oraz zyski wewnętrzne są całkowicie pomijane. Założenie to wynika z faktu, że maksymalne, krytyczne obciążenie cieplne może wystąpić w środku nocy, kiedy zyski te nie występują."
        }
      },
      {
        "@type": "Question",
        "name": "Czy stary dom z lat 80. bez dokumentacji projektowej można poprawnie przeliczyć pod kątem OZC?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak, dla starych budynków wykonuje się inwentaryzację termomodernizacyjną, odtwarzając strukturę przegród na podstawie odkrywek oraz oceniając stan techniczny stolarki okiennej. Wprowadzając te dane do programu, inżynier jest w stanie z wysoką dokładnością wyznaczyć realne OZC obiektu przed doborem pompy ciepła."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-faq",
    "name": "Baza Wiedzy Inwestorskiej: Parametry Normy PN-EN 12831",
    "description": "Zbiór danych i definicji rozróżniających wartości OZC od charakterystyki energetycznej (EUco) oraz uwzględniających zyski pasywne.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": { "@type": "Person", "name": "Robert Kucharski" },
    "keywords": [
      "obliczenia OZC dla pomieszczeń",
      "aktualizacja bilansu cieplnego",
      "EUco a obciążenie cieplne",
      "pasywne zyski ciepła OZC",
      "termomodernizacja starego domu"
    ],
    "measurementTechnique": "Interpretacja wymagań normy PN-EN 12831 w kontekście fizyki budowli i warunków zimowych bez zysków solarnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC określa szczytowe zapotrzebowanie (kW) w mroźną noc bez słońca.",
        "EUco to roczne zużycie energii wyrażane w kWh/(m2 rok)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-faq",
    "name": "Interaktywny Przewodnik: Mechanika Obliczeń OZC",
    "description": "Interaktywny moduł edukacyjny typu akordeon, wykorzystujący animacje SVG do demonstracji procesów wymiany ciepła, inwentaryzacji oraz bilansu cieplnego budynku.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": { "@type": "Person", "name": "Robert Kucharski" }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-ozcfaq-container" id="rk-ozc-faq-app">
    <div class="rk-ozcfaq-header">
        <div class="rk-ozcfaq-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Baza Wiedzy Inwestora
        </div>
        <h2 class="rk-ozcfaq-title">FAQ – <span>Najczęściej zadawane pytania o OZC</span></h2>
    </div>

    <div class="rk-ozcfaq-interactive">
        <div class="rk-ozcfaq-list">
            
            <!-- Pytanie 1 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>1. Czy obliczenia OZC wykonuje się dla całego budynku, czy dla każdego pomieszczenia osobno?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Obliczenia OZC muszą być <strong>bezwzględnie wykonane dla każdego pomieszczenia z osobna</strong>. Każde wnętrze posiada inną strukturę przegród zewnętrznych oraz odmienne <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-link">straty wentylacyjne</a>. Zbiorczy wynik dla całego budynku jest jedynie sumą matematyczną tych składowych, która służy wyłącznie do określenia całkowitej mocy źródła ciepła (np. pompy ciepła).
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <path d="M 10 35 L 50 5 L 90 35" fill="none" stroke="#64748b" stroke-width="3" stroke-linejoin="round"/>
                                    <rect x="20" y="35" width="60" height="30" fill="none" stroke="#64748b" stroke-width="2"/>
                                    <line x1="50" y1="35" x2="50" y2="65" stroke="#64748b" stroke-width="2"/>
                                    <line x1="20" y1="50" x2="80" y2="50" stroke="#64748b" stroke-width="2"/>
                                    <rect class="anim-room-1" x="22" y="37" width="26" height="11" fill="#475569"/>
                                    <rect class="anim-room-2" x="52" y="37" width="26" height="11" fill="#475569"/>
                                    <rect class="anim-room-3" x="22" y="52" width="56" height="11" fill="#475569"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 2 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>2. Jak często należy aktualizować obliczenia OZC w trakcie trwania budowy domu?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Aktualizację obliczeń OZC należy przeprowadzić <strong>zawsze wtedy, gdy dochodzi do istotnych zmian</strong> w strukturze przegród względem pierwotnego projektu architektonicznego. Zmiana grubości styropianu na elewacji, wstawienie gorszych parametrów stolarki okiennej czy rezygnacja z <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-link">wentylacji mechanicznej (rekuperacji)</a> na rzecz grawitacyjnej całkowicie zmienia bilans cieplny budynku.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <rect x="20" y="20" width="60" height="30" fill="none" stroke="#64748b" stroke-width="3" rx="4"/>
                                    <line class="anim-insulation" x1="20" y1="15" x2="80" y2="15" stroke="#0ea5e9" stroke-width="4" stroke-linecap="round"/>
                                    <g transform="translate(50, 35)">
                                        <circle cx="0" cy="0" r="10" fill="none" stroke="#94a3b8" stroke-width="2"/>
                                        <path class="anim-fan" d="M 0 -8 L 2 -2 L 8 0 L 2 2 L 0 8 L -2 2 L -8 0 L -2 -2 Z" fill="#cbd5e1"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 3 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>3. Czy wskaźnik EUco z charakterystyki energetycznej to samo co OZC?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                <strong>Nie, to dwa zupełnie różne parametry.</strong> Wskaźnik EUco określa sezonowe zapotrzebowanie na energię użytkową w ciągu całego roku (wyrażane w kWh/m2 na rok), czyli informuje o rocznych kosztach paliwa. Natomiast OZC to chwilowa, maksymalna moc cieplna wyrażana w kilowatach [kW], potrzebna do pokrycia strat w warunkach skrajnego mrozu. OZC decyduje o <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/" class="rk-link">fizycznej wielkości i mocy urządzeń</a>.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <text x="10" y="30" fill="#94a3b8" font-size="10" font-family="sans-serif">EUco</text>
                                    <rect x="35" y="22" width="55" height="8" fill="#1e293b" rx="2"/>
                                    <rect class="anim-bar-euco" x="35" y="22" width="45" height="8" fill="#0ea5e9" rx="2"/>
                                    
                                    <text x="10" y="55" fill="#94a3b8" font-size="10" font-family="sans-serif">OZC</text>
                                    <rect x="35" y="47" width="55" height="8" fill="#1e293b" rx="2"/>
                                    <rect class="anim-bar-ozc" x="35" y="47" width="25" height="8" fill="#ef4444" rx="2"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 4 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>4. Jaki wpływ na wartość OZC mają zyski ciepła od słońca i urządzeń?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Zgodnie z procedurą normy PN-EN 12831, przy obliczaniu Projektowego Obciążenia Cieplnego mającego na celu dobór mocy urządzeń grzewczych, <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-a-pasywne-zyski-ciepla/" class="rk-link">pasywne zyski ciepła</a> od nasłonecznienia oraz wewnętrzne zyski bytowe są <strong>całkowicie pomijane</strong>. Założenie to jest logiczne – maksymalne, krytyczne obciążenie cieplne budynku zawsze występuje w środku mroźnej nocy, kiedy tych zysków po prostu nie ma.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <g class="anim-sun">
                                        <circle cx="50" cy="35" r="12" fill="#eab308"/>
                                        <path d="M 50 15 L 50 18 M 50 52 L 50 55 M 30 35 L 33 35 M 67 35 L 70 35" stroke="#eab308" stroke-width="2" stroke-linecap="round"/>
                                    </g>
                                    <g class="anim-moon">
                                        <path d="M 50 20 A 12 12 0 1 0 60 40 A 15 15 0 0 1 50 20 Z" fill="#e2e8f0"/>
                                        <circle class="anim-snow" cx="35" cy="25" r="1.5" fill="#ffffff"/>
                                        <circle class="anim-snow" cx="65" cy="45" r="1.5" fill="#ffffff" style="animation-delay: 0.5s"/>
                                        <circle class="anim-snow" cx="45" cy="50" r="1.5" fill="#ffffff" style="animation-delay: 1s"/>
                                    </g>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 5 -->
            <div class="rk-ozcfaq-item">
                <button class="rk-ozcfaq-question">
                    <span>5. Czy stary dom z lat 80. bez projektu można policzyć pod kątem OZC?</span>
                    <div class="rk-ozcfaq-icon"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-ozcfaq-answer-wrapper">
                    <div class="rk-ozcfaq-answer-inner">
                        <div class="rk-ozcfaq-content">
                            <div class="rk-ozcfaq-text">
                                Tak, dla starych budynków wykonuje się <strong>inwentaryzację termomodernizacyjną</strong>. Inżynier odtwarza strukturę przegród na podstawie odkrywek fizycznych oraz oceny stanu technicznego stolarki okiennej i stropów. Wprowadzając zebrane dane do oprogramowania inżynierskiego, jest w stanie z wysoką dokładnością wyznaczyć realne OZC, co jest warunkiem koniecznym do weryfikacji, <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/" class="rk-link">czy w starym budynku sprawdzi się instalacja płaszczyznowa</a> z pompą ciepła.
                            </div>
                            <div class="rk-ozcfaq-visual">
                                <svg class="rk-svg-box" viewBox="0 0 100 70">
                                    <g stroke="#64748b" stroke-width="2" fill="none">
                                        <rect x="25" y="15" width="15" height="8"/>
                                        <rect x="42" y="15" width="15" height="8"/>
                                        <rect x="59" y="15" width="15" height="8"/>
                                        <rect x="18" y="25" width="15" height="8"/>
                                        <rect x="35" y="25" width="15" height="8"/>
                                        <rect x="52" y="25" width="15" height="8"/>
                                        <rect x="69" y="25" width="15" height="8"/>
                                        <rect x="25" y="35" width="15" height="8"/>
                                        <rect x="42" y="35" width="15" height="8"/>
                                        <rect x="59" y="35" width="15" height="8"/>
                                    </g>
                                    <line class="anim-scan" x1="15" y1="20" x2="85" y2="20" stroke="#0ea5e9" stroke-width="2" stroke-dasharray="4 4"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez wyskakujących H2/H3 z błędami)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowed.includes(domain)) {
        document.getElementById('rk-ozc-faq-app').innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900; font-family:sans-serif;">BŁĄD LICENCJI: KOD NALEŻY DO PROJEKT-OGRZEWANIA.PL</div>';
        return;
    }

    // 2. Logika Akordeonu
    const faqItems = document.querySelectorAll('.rk-ozcfaq-item');

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-ozcfaq-question');
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zamknij wszystkie
            faqItems.forEach(i => i.classList.remove('active'));
            
            // Otwórz kliknięty jeśli był zamknięty
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
    
    // Otwórz pierwszy element na start
    if(faqItems.length > 0) {
        faqItems[0].classList.add('active');
    }
});
</script>



<style>
:root {
    --rk-ozc-dark: #0f172a;
    --rk-ozc-blue: #0284c7;
    --rk-ozc-light-blue: #f0f9ff;
    --rk-ozc-green: #059669;
    --rk-ozc-green-light: #ecfdf5;
    --rk-ozc-red: #dc2626;
    --rk-ozc-red-light: #fef2f2;
    --rk-ozc-gold: #fbbf24;
    --rk-ozc-gray: #64748b;
    --rk-ozc-border: #e2e8f0;
    --rk-ozc-bg: #ffffff;
}

.rk-ozc-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-ozc-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(2, 132, 199, 0.12);
    border: 1px solid var(--rk-ozc-blue);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-ozc-header {
    padding: 45px 50px 35px;
    background: linear-gradient(135deg, var(--rk-ozc-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: center;
    position: relative;
    border-bottom: 4px solid var(--rk-ozc-blue);
}

.rk-ozc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.2);
}

.rk-ozc-header h2 {
    font-size: 32px;
    font-weight: 900;
    margin: 0 0 20px 0;
    color: #ffffff;
    line-height: 1.2;
}

.rk-ozc-intro-text {
    font-size: 17px;
    line-height: 1.7;
    color: #cbd5e1;
    max-width: 800px;
    margin: 0 auto;
    font-weight: 400;
}

.rk-ozc-intro-text a {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: color 0.3s;
}

.rk-ozc-intro-text a:hover {
    color: #ffffff;
    border-bottom-color: #ffffff;
}

/* Interaktywny Symulator (Mobile App Switch) */
.rk-ozc-interactive {
    padding: 45px 50px;
    background: #f8fafc;
}

.rk-switcher-wrapper {
    display: flex;
    justify-content: center;
    margin-bottom: 40px;
}

.rk-app-switch {
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    display: inline-flex;
    position: relative;
    box-shadow: inset 0 2px 5px rgba(0,0,0,0.06);
    width: 100%;
    max-width: 500px;
}

.rk-switch-btn {
    flex: 1;
    position: relative;
    z-index: 2;
    padding: 14px 20px;
    font-size: 15px;
    font-weight: 800;
    border: none;
    background: transparent;
    color: #64748b;
    cursor: pointer;
    border-radius: 99px;
    transition: color 0.3s ease;
    text-align: center;
}

.rk-switch-btn.active {
    color: #ffffff;
}

.rk-switch-glider {
    position: absolute;
    top: 6px;
    left: 6px;
    height: calc(100% - 12px);
    width: calc(50% - 6px);
    background: var(--rk-ozc-red);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.34, 1.56, 0.64, 1), background-color 0.4s ease;
    box-shadow: 0 4px 10px -2px rgba(0,0,0,0.15);
    z-index: 1;
}

.rk-app-switch[data-mode="pro"] .rk-switch-glider {
    transform: translateX(100%);
    background: var(--rk-ozc-green);
}

/* Wynik symulacji */
.rk-ozc-result-box {
    background: #ffffff;
    border-radius: 20px;
    border: 2px solid var(--rk-ozc-border);
    padding: 35px;
    display: grid;
    grid-template-columns: 160px 1fr;
    gap: 40px;
    align-items: center;
    transition: all 0.4s ease;
}

.rk-ozc-result-box.mode-amateur {
    border-color: var(--rk-ozc-red-light);
    box-shadow: 0 15px 35px -10px rgba(220, 38, 38, 0.12);
}

.rk-ozc-result-box.mode-pro {
    border-color: var(--rk-ozc-green-light);
    box-shadow: 0 15px 35px -10px rgba(5, 150, 105, 0.12);
}

.rk-svg-stage {
    width: 100%;
    max-width: 160px;
    margin: 0 auto;
}

/* Animacje SVG */
.anim-pump-body { transition: fill 0.5s ease; }
.anim-waves { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 0.5s ease; }

.mode-amateur .anim-pump-body { fill: var(--rk-ozc-red); animation: taktowaniePompy 0.3s infinite; }
.mode-amateur .anim-waves { stroke: var(--rk-ozc-red); animation: brokenWaves 1.5s infinite; }

.mode-pro .anim-pump-body { fill: var(--rk-ozc-green); animation: stabilnaPraca 3s infinite; }
.mode-pro .anim-waves { stroke: var(--rk-ozc-green); animation: smoothWaves 2s infinite linear; }

@keyframes taktowaniePompy {
    0% { transform: translate(1px, 1px); }
    25% { transform: translate(-2px, -1px); }
    50% { transform: translate(2px, 2px); }
    75% { transform: translate(-1px, -2px); }
    100% { transform: translate(1px, 1px); }
}

@keyframes stabilnaPraca {
    0% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0)); transform: scale(1); }
    50% { filter: drop-shadow(0 0 15px rgba(16, 185, 129, 0.6)); transform: scale(1.02); }
    100% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0)); transform: scale(1); }
}

@keyframes brokenWaves {
    0% { stroke-dashoffset: 100; opacity: 1; }
    50% { stroke-dashoffset: 50; opacity: 0.2; }
    100% { stroke-dashoffset: 0; opacity: 1; }
}

@keyframes smoothWaves {
    0% { stroke-dashoffset: 100; opacity: 0.8; }
    100% { stroke-dashoffset: -100; opacity: 0.8; }
}

.rk-ozc-content h3 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 800;
}

.mode-amateur .rk-ozc-content h3 { color: var(--rk-ozc-red); }
.mode-pro .rk-ozc-content h3 { color: var(--rk-ozc-green); }

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

.rk-ozc-content a {
    color: var(--rk-ozc-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(2, 132, 199, 0.3);
    transition: border-color 0.3s;
}

.rk-ozc-content a:hover { border-color: var(--rk-ozc-blue); }

/* Tabela Kafelkowa (Koszty i Efekty) */
.rk-data-tiles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-top: 25px;
}

.rk-tile {
    background: #f1f5f9;
    padding: 18px;
    border-radius: 14px;
    border-left: 4px solid transparent;
    transition: all 0.3s ease;
}

.mode-amateur .rk-tile { border-left-color: var(--rk-ozc-red); background: #fef2f2; }
.mode-pro .rk-tile { border-left-color: var(--rk-ozc-green); background: #ecfdf5; }

.rk-tile-label {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 800;
    color: #64748b;
    margin-bottom: 5px;
}

.rk-tile-value {
    display: block;
    font-size: 17px;
    font-weight: 900;
    color: var(--rk-ozc-dark);
}

/* Mocne CTA */
.rk-ozc-cta-box {
    padding: 45px 50px;
    background: #ffffff;
    text-align: center;
    border-top: 1px solid var(--rk-ozc-border);
}

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-ozc-blue);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 40px;
    border-radius: 16px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(2, 132, 199, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    border: 2px solid transparent;
}

.rk-btn-massive:hover {
    transform: translateY(-5px);
    background: #0369a1;
    box-shadow: 0 20px 35px -5px rgba(2, 132, 199, 0.5);
    border-color: #7dd3fc;
}

.rk-btn-massive svg { transition: transform 0.3s; }
.rk-btn-massive:hover svg { transform: translateX(6px); }

@media (max-width: 768px) {
    .rk-ozc-header, .rk-ozc-interactive, .rk-ozc-cta-box { padding: 35px 25px; }
    .rk-ozc-result-box { grid-template-columns: 1fr; text-align: center; padding: 25px; gap: 20px; }
    .rk-svg-stage { max-width: 120px; margin-bottom: 10px; }
    .rk-switch-btn { padding: 12px 10px; font-size: 13px; }
    .rk-data-tiles { grid-template-columns: 1fr; gap: 12px; }
    .rk-btn-massive { width: 100%; padding: 18px 20px; font-size: 16px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Podsumowanie techniczne: OZC a przyszłość instalacji",
    "description": "Projektowe Obciążenie Cieplne (OZC) wyznaczone według normy PN-EN 12831 to inżynierski fundament. Chroni przed taktowaniem pompy ciepła i błędami w układaniu podłogówki.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-podsumowanie",
    "name": "Wpływ obliczeń OZC na żywotność i koszty instalacji grzewczej",
    "description": "Analiza porównawcza parametrów pracy pompy ciepła i hydrauliki ogrzewania podłogowego w przypadku zastosowania normy PN-EN 12831 oraz doboru szacunkowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne",
      "taktowanie pompy ciepła",
      "zbalansowanie hydrauliczne rotametry",
      "bezwładność termiczna jastrychu",
      "norma PN-EN 12831"
    ],
    "measurementTechnique": "Symulacja skutków doboru mocy źródła ciepła oraz nastaw rozdzielacza w oparciu o wyliczenia strat ciepła vs. przeliczniki W/m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wariant Szacunkowy: Przewymiarowana pompa ciepła, ciągłe taktowanie, brak możliwości zbalansowania pętli po wylaniu betonu.",
        "Wariant z OZC: Precyzyjnie dobrana moc, stabilna praca sprężarki, zbilansowane przepływy gwarantujące bezawaryjność."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-podsumowanie",
    "name": "Symulator Efektywności: OZC vs Zgadywanie",
    "description": "Interaktywny panel demonstrujący mechaniczne i finansowe skutki braku precyzyjnego Projektowego Obciążenia Cieplnego w systemach ogrzewania płaszczyznowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-ozc-container" id="ozc-sum-app">
    <!-- Nagłówek -->
    <div class="rk-ozc-header">
        <div class="rk-ozc-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Podsumowanie Techniczne
        </div>
        <h2>OZC a przyszłość Twojej instalacji</h2>
        <p class="rk-ozc-intro-text">
            Projektowe Obciążenie Cieplne (OZC) wyznaczone zgodnie z normą <strong>PN-EN 12831</strong> to kluczowa decyzja inżynierska na etapie budowy lub modernizacji domu. Wodne ogrzewanie podłogowe jako system niskotemperaturowy o ogromnej <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności termicznej</a> nie wybacza błędów – rury zalane betonem jastrychowym stają się elementem konstrukcyjnym budynku.
        </p>
    </div>

    <!-- Symulator Standardu -->
    <div class="rk-ozc-interactive">
        <div class="rk-switcher-wrapper">
            <div class="rk-app-switch" id="ozcSwitchContainer" data-mode="amateur">
                <div class="rk-switch-glider" id="ozcGlider"></div>
                <button class="rk-switch-btn active" data-target="amateur">Przelicznik &#8222;Na oko&#8221;</button>
                <button class="rk-switch-btn" data-target="pro">Projekt OZC (PN-EN 12831)</button>
            </div>
        </div>

        <div class="rk-ozc-result-box mode-amateur" id="ozcResultContent">
            <div class="rk-svg-stage">
                <!-- SVG animowane z kodu -->
                <svg viewBox="0 0 100 100" width="100%" height="100%">
                    <!-- Pompa Ciepła -->
                    <rect x="25" y="30" width="50" height="60" rx="6" class="anim-pump-body" />
                    <circle cx="50" cy="50" r="14" fill="#ffffff" opacity="0.9" />
                    <path d="M 45 45 L 55 50 L 45 55 Z" fill="#1e293b" />
                    <!-- Fale Ciepła (podłogówka) -->
                    <path d="M 10 95 Q 30 80 50 95 T 90 95" fill="none" stroke-width="4" stroke-linecap="round" class="anim-waves" />
                    <path d="M 10 105 Q 30 90 50 105 T 90 105" fill="none" stroke-width="4" stroke-linecap="round" class="anim-waves" style="animation-delay: 0.3s" />
                </svg>
            </div>
            
            <div class="rk-ozc-content">
                <h3 id="dynTitle">Taktowanie i nieodwracalne błędy</h3>
                <p id="dynDesc">
                    Rezygnacja z precyzyjnych obliczeń komputerowych na rzecz archaicznych przeliczników powierzchniowych to prosta droga do zakupu przewymiarowanej, stale taktującej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>, generującej wysokie koszty eksploatacji i skazanej na szybką awarię. Wadliwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> czy błędne zbalansowanie hydrauliczne na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach</a> są niemal niemożliwe do skorygowania po fakcie.
                </p>
                
                <div class="rk-data-tiles">
                    <div class="rk-tile">
                        <span class="rk-tile-label" id="dynLabel1">Ryzyko dla sprężarki</span>
                        <span class="rk-tile-value" id="dynVal1">Krytyczne (Taktowanie)</span>
                    </div>
                    <div class="rk-tile">
                        <span class="rk-tile-label" id="dynLabel2">Regulacja hydrauliczna</span>
                        <span class="rk-tile-value" id="dynVal2">Niemożliwa do kalibracji</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Mocne CTA -->
    <div class="rk-ozc-cta-box">
        <h3 style="font-size: 24px; font-weight: 900; color: var(--rk-ozc-dark); margin: 0 0 15px 0;">Zbuduj instalację, która przetrwa dekady</h3>
        <p class="rk-ozc-intro-text" style="color: #64748b; margin-bottom: 30px;">
            Nie pozwól, by błędy na etapie planowania uderzyły Cię po portfelu. Wykorzystaj inżynierską wiedzę, sprawdzone normy i narzędzia, które gwarantują spokój.
        </p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-massive">
            PRZEJDŹ DO BAZY WIEDZY I PORADNIKÓW
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('ozc-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener podsumowujący oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora (Mobile App Switch)
    const switchContainer = document.getElementById('ozcSwitchContainer');
    const btns = switchContainer.querySelectorAll('.rk-switch-btn');
    const resultBox = document.getElementById('ozcResultContent');
    
    // Elementy tekstowe do podmiany
    const dynTitle = document.getElementById('dynTitle');
    const dynDesc = document.getElementById('dynDesc');
    const dynLabel1 = document.getElementById('dynLabel1');
    const dynVal1 = document.getElementById('dynVal1');
    const dynLabel2 = document.getElementById('dynLabel2');
    const dynVal2 = document.getElementById('dynVal2');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Animacja przełącznika
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const targetMode = this.getAttribute('data-target');
            switchContainer.setAttribute('data-mode', targetMode);

            // Aktualizacja treści i klas kontenera SVG
            if (targetMode === 'pro') {
                resultBox.className = 'rk-ozc-result-box mode-pro';
                
                dynTitle.textContent = "Cicha, energooszczędna praca na dekady";
                dynDesc.innerHTML = `Jedynie precyzyjne powiązanie strat ciepła każdego pomieszczenia z geometrią <a href="https://projekt-ogrzewania.pl/petla-grzewcza/">pętli grzewczych</a> gwarantuje bezawaryjną, cichą i maksymalnie energooszczędną pracę całego systemu przez dekady. Wykluczasz awarie jeszcze na papierze.`;
                
                dynLabel1.textContent = "Żywotność układu";
                dynVal1.textContent = "Maksymalna wydajność (COP)";
                dynVal1.style.color = "var(--rk-ozc-green)";
                
                dynLabel2.textContent = "Przepływy w pętlach";
                dynVal2.textContent = "Idealnie zbalansowane";
                dynVal2.style.color = "var(--rk-ozc-green)";

            } else {
                resultBox.className = 'rk-ozc-result-box mode-amateur';
                
                dynTitle.textContent = "Taktowanie i nieodwracalne błędy";
                dynDesc.innerHTML = `Rezygnacja z precyzyjnych obliczeń komputerowych na rzecz archaicznych przeliczników powierzchniowych to prosta droga do zakupu przewymiarowanej, stale taktującej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>, generującej wysokie koszty eksploatacji i skazanej na szybką awarię. Wadliwy <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstaw rur</a> czy błędne zbalansowanie hydrauliczne na <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametrach</a> są niemal niemożliwe do skorygowania po fakcie.`;
                
                dynLabel1.textContent = "Ryzyko dla sprężarki";
                dynVal1.textContent = "Krytyczne (Taktowanie)";
                dynVal1.style.color = "var(--rk-ozc-dark)";
                
                dynLabel2.textContent = "Regulacja hydrauliczna";
                dynVal2.textContent = "Niemożliwa do kalibracji";
                dynVal2.style.color = "var(--rk-ozc-dark)";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-ozcdl-dark: #0f172a;
    --rk-ozcdl-brand: #ea580c; /* Ognisty pomarańcz nawiązujący do ciepła */
    --rk-ozcdl-brand-dark: #c2410c;
    --rk-ozcdl-bg: #f8fafc;
    --rk-ozcdl-border: #e2e8f0;
    --rk-ozcdl-text: #334155;
    --rk-ozcdl-white: #ffffff;
    --rk-ozcdl-accent: #38bdf8;
}

.rk-ozcdl-container {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-ozcdl-white);
    border-radius: 24px;
    border: 1px solid var(--rk-ozcdl-border);
    box-shadow: 0 25px 50px -12px rgba(234, 88, 12, 0.15);
    overflow: hidden;
}

/* NAGŁÓWEK SEKCI */
.rk-ozcdl-header {
    background: linear-gradient(135deg, var(--rk-ozcdl-dark) 0%, #311505 100%);
    padding: 45px 50px;
    color: var(--rk-ozcdl-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

.rk-ozcdl-header::after {
    content: '';
    position: absolute;
    bottom: -50px;
    right: -20px;
    width: 200px;
    height: 200px;
    background: radial-gradient(circle, rgba(234, 88, 12, 0.4) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

.rk-ozcdl-header-content { position: relative; z-index: 2; max-width: 65%; }

.rk-ozcdl-badge {
    display: inline-block;
    background: rgba(234, 88, 12, 0.2);
    border: 1px solid rgba(234, 88, 12, 0.3);
    color: #ffedd5;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

.rk-ozcdl-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    line-height: 1.3;
    letter-spacing: -0.5px;
}

.rk-ozcdl-header h2 span { color: #f97316; }

.rk-ozcdl-header p {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.6;
}

/* WIZUALIZACJA IKONY Z ANIMACJĄ CIEPŁA */
.rk-ozcdl-visual {
    position: relative;
    z-index: 2;
}

.rk-ozcdl-icon-svg {
    width: 90px;
    height: auto;
    filter: drop-shadow(0 15px 20px rgba(0,0,0,0.4));
    animation: ozcFloat 3.5s infinite ease-in-out alternate;
}

@keyframes ozcFloat {
    from { transform: translateY(0) rotate(0deg); }
    to { transform: translateY(-12px) rotate(3deg); }
}

/* GŁÓWNY WORKSPACE */
.rk-ozcdl-workspace {
    display: flex;
    padding: 40px 50px;
    gap: 40px;
    background: var(--rk-ozcdl-white);
}

.rk-ozcdl-preview-box {
    flex: 1;
    background: var(--rk-ozcdl-bg);
    border: 2px dashed #cbd5e1;
    border-radius: 16px;
    padding: 10px;
    position: relative;
    cursor: zoom-in;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-ozcdl-preview-box:hover {
    transform: scale(1.03);
    border-color: var(--rk-ozcdl-brand);
    border-style: solid;
    box-shadow: 0 20px 30px -10px rgba(234, 88, 12, 0.2);
}

.rk-ozcdl-preview-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    box-shadow: 0 4px 15px rgba(0,0,0,0.1);
}

.rk-ozcdl-zoom-badge {
    position: absolute;
    bottom: 20px;
    right: 20px;
    background: rgba(15, 23, 42, 0.85);
    color: white;
    padding: 8px 16px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    backdrop-filter: blur(4px);
    transition: background 0.3s;
}

.rk-ozcdl-preview-box:hover .rk-ozcdl-zoom-badge {
    background: var(--rk-ozcdl-brand);
}

/* INTERAKTYWNY PANEL (PRAWA STRONA) */
.rk-ozcdl-info-side {
    flex: 1.2;
    display: flex;
    flex-direction: column;
}

/* Zakładki (Tabs) */
.rk-ozcdl-tabs {
    display: flex;
    background: #f1f5f9;
    border-radius: 12px;
    padding: 6px;
    margin-bottom: 25px;
}

.rk-ozcdl-tab {
    flex: 1;
    text-align: center;
    padding: 12px;
    font-size: 13.5px;
    font-weight: 800;
    color: var(--rk-ozcdl-muted);
    cursor: pointer;
    border-radius: 8px;
    transition: all 0.2s ease;
}

.rk-ozcdl-tab.active {
    background: var(--rk-ozcdl-white);
    color: var(--rk-ozcdl-brand);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.rk-ozcdl-panel {
    display: none;
    animation: fadeInTab 0.3s ease;
}

.rk-ozcdl-panel.active {
    display: block;
}

@keyframes fadeInTab {
    from { opacity: 0; transform: translateY(5px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-ozcdl-feature-list {
    list-style: none;
    padding: 0;
    margin: 0 0 30px 0;
}

.rk-ozcdl-feature-item {
    display: flex;
    align-items: flex-start;
    gap: 15px;
    margin-bottom: 18px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--rk-ozcdl-text);
    line-height: 1.5;
}

.rk-ozcdl-feature-item svg {
    width: 22px;
    height: 22px;
    color: var(--rk-ozcdl-brand);
    flex-shrink: 0;
    margin-top: 2px;
}

/* PRZYCISK POBIERANIA */
.rk-ozcdl-main-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-ozcdl-brand);
    color: var(--rk-ozcdl-white);
    text-decoration: none !important;
    padding: 18px 30px;
    border-radius: 14px;
    font-weight: 900;
    font-size: 16px;
    transition: all 0.3s;
    box-shadow: 0 10px 25px -5px rgba(234, 88, 12, 0.4);
    margin-top: auto;
    border: 2px solid transparent;
}

.rk-ozcdl-main-btn:hover {
    background: var(--rk-ozcdl-brand-dark);
    transform: translateY(-3px);
    box-shadow: 0 15px 35px -5px rgba(234, 88, 12, 0.5);
    border-color: #fdba74;
}

.rk-ozcdl-main-btn svg { width: 24px; height: 24px; animation: bounceDl 2s infinite; }

@keyframes bounceDl {
    0%, 20%, 50%, 80%, 100% { transform: translateY(0); }
    40% { transform: translateY(-4px); }
    60% { transform: translateY(-2px); }
}

/* STOPKA MODUŁU */
.rk-ozcdl-footer {
    padding: 20px 50px;
    background: var(--rk-ozcdl-bg);
    border-top: 1px solid var(--rk-ozcdl-border);
    font-size: 13px;
    color: var(--rk-ozcdl-text);
    text-align: center;
}

.rk-ozcdl-footer a {
    color: var(--rk-ozcdl-brand);
    font-weight: 800;
    text-decoration: none;
    transition: color 0.2s;
}

.rk-ozcdl-footer a:hover { text-decoration: underline; }

@media (max-width: 800px) {
    .rk-ozcdl-header { flex-direction: column; text-align: center; padding: 35px 25px; }
    .rk-ozcdl-header-content { max-width: 100%; margin-bottom: 30px; }
    .rk-ozcdl-workspace { flex-direction: column; padding: 30px 25px; }
    .rk-ozcdl-preview-box { margin-bottom: 10px; }
    .rk-ozcdl-footer { padding: 20px 25px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/"
    },
    "headline": "Infografika: Projektowe Obciążenie Cieplne (OZC)",
    "description": "Pobierz kompleksową infografikę PDF omawiającą kluczowe parametry OZC, typowe wartości dla budynków i najczęstsze błędy instalatorów.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-16",
    "dateModified": "2026-05-16"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#dataset-infografika",
    "name": "Wskaźniki zapotrzebowania cieplnego budynków (W/m²)",
    "description": "Zestawienie średniego zapotrzebowania na moc (OZC) w zależności od standardu izolacji budynku oraz rozkład strat ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika OZC pdf",
      "pobierz OZC",
      "wskaźniki W/m2 dom",
      "straty ciepła schemat",
      "obliczanie zapotrzebowania na ciepło"
    ],
    "measurementTechnique": "Analiza normatywna zapotrzebowania mocy szczytowej w zależności od standardu termicznego budynku.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Typowe wartości OZC: Dom stary (90-150 W/m²), Modernizowany (50-80 W/m²), Energooszczędny (30-50 W/m²).",
        "Rozkład strat ciepła: Okna (35%), Ściany (26%), Dach (25%), Wentylacja (20%).",
        "Efekty poprawnie wykonanego OZC: Redukcja kosztów ogrzewania o 30% i odpowiedni dobór mocy pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/#webapp-infografika",
    "name": "Centrum Pobierania Wiedzy: Infografika OZC",
    "description": "Interaktywny moduł edukacyjny udostępniający graficzne kompendium wiedzy o Projektowym Obciążeniu Cieplnym w formacie PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-ozcdl-container" id="app-ozc-dl">
    
    <div class="rk-ozcdl-header">
        <div class="rk-ozcdl-header-content">
            <div class="rk-ozcdl-badge">Darmowe Materiały Edukacyjne</div>
            <h2>Pobierz Kompletny <span>Poradnik OZC</span></h2>
            <p>Zabierz inżynierską wiedzę ze sobą. Kompendium parametrów cieplnych, wskaźniki W/m² oraz schemat ucieczki ciepła z budynku w jednym, czytelnym pliku PDF.</p>
        </div>
        <div class="rk-ozcdl-visual">
            <svg class="rk-ozcdl-icon-svg" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M75 15 L25 15 C19.5 15 15 19.5 15 25 L15 75 C15 80.5 19.5 85 25 85 L75 85 C80.5 85 85 80.5 85 75 L85 25 C85 19.5 80.5 15 75 15 Z" fill="#ea580c"/>
                <path d="M55 15 L85 45 L85 25 C85 19.5 80.5 15 75 15 Z" fill="#c2410c"/>
                <text x="50" y="65" fill="#ffffff" font-size="24" font-weight="900" font-family="sans-serif" text-anchor="middle">PDF</text>
                <path d="M50 25 C45 35 35 40 45 50 C55 60 65 35 50 25 Z" fill="#fbd38d" opacity="0.8"/>
            </svg>
        </div>
    </div>

    <div class="rk-ozcdl-workspace">
        
        <div class="rk-ozcdl-preview-box" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.webp" alt="Infografika Projektowe Obciążenie Cieplne OZC" class="rk-ozcdl-preview-img" loading="lazy">
            <div class="rk-ozcdl-zoom-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="vertical-align: middle; margin-right: 5px;"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                Powiększ podgląd
            </div>
        </div>

        <div class="rk-ozcdl-info-side">
            
            <div class="rk-ozcdl-tabs">
                <div class="rk-ozcdl-tab active" data-tab="tab-content">Co znajdziesz w środku?</div>
                <div class="rk-ozcdl-tab" data-tab="tab-why">Dlaczego warto?</div>
            </div>

            <div class="rk-ozcdl-panel active" id="tab-content">
                <ul class="rk-ozcdl-feature-list">
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Tabela wskaźników: Porównanie OZC (W/m²) dla starego i nowego budownictwa.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Schemat ucieczki ciepła: % podział strat przez dach, ściany, okna i wentylację.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Checklista inżyniera: 3 krytyczne błędy instalatorów, których musisz unikać.
                    </li>
                </ul>
            </div>

            <div class="rk-ozcdl-panel" id="tab-why">
                <ul class="rk-ozcdl-feature-list">
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6"/></svg>
                        Oszczędność do 30% na kosztach ogrzewania dzięki poprawnemu doborowi pompy.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Zabezpieczenie przed kosztownym przewymiarowaniem urządzeń grzewczych.
                    </li>
                    <li class="rk-ozcdl-feature-item">
                        <svg fill="none" viewBox="0 0 24 24" stroke="currentColor" style="color: #10b981;"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
                        Gwarancja optymalnego zrównoważenia hydraulicznego instalacji podłogowej.
                    </li>
                </ul>
            </div>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Projektowe-Obciazenie-Cieplne-OZC.pdf" class="rk-ozcdl-main-btn" target="_blank">
                <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                POBIERZ INFOGRAFIKĘ (PDF)
            </a>
            
        </div>

    </div>

    <div class="rk-ozcdl-footer">
        © 2026 Projekt-Ogrzewania.pl | Autor merytoryczny: <strong>Robert Kucharski</strong>.<br>
        Udostępnianie pliku jest dozwolone wyłącznie z zachowaniem <a href="https://projekt-ogrzewania.pl/">linku do źródła</a>.
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. OCHRONA DOMENOWA (DOMAIN LOCK)
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowed.includes(domain)) {
        const container = document.getElementById('app-ozc-dl');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fff7ed; border: 2px solid #ea580c; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 900; color: #9a3412;">Zasoby Chronione</div>
                    <p style="color: #c2410c; font-size: 14px;">Ta infografika i dokumentacja OZC są własnością serwisu Projekt-Ogrzewania.pl.</p>
                </div>
            `;
        }
        return;
    }

    // 2. LOGIKA ZAKŁADEK (INTERAKTYWNOŚĆ)
    const tabs = document.querySelectorAll('.rk-ozcdl-tab');
    const panels = document.querySelectorAll('.rk-ozcdl-panel');

    tabs.forEach(tab => {
        tab.addEventListener('click', () => {
            // Usuń aktywną klasę ze wszystkich zakładek i paneli
            tabs.forEach(t => t.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Dodaj aktywną klasę do klikniętej zakładki
            tab.classList.add('active');
            
            // Pokaż odpowiedni panel
            const targetId = tab.getAttribute('data-tab');
            const targetPanel = document.getElementById(targetId);
            if(targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">Projektowe Obciążenie Cieplne (OZC).</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
