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

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2026/10/Projekt-Ogrzewania-favicon-512-100x100.webp</url>
	<title>Archiwa akumulatory lifepo4 opinie - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/akumulatory-lifepo4-opinie/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Podłoga jako magazyn ciepła – ile energii naprawdę może zgromadzić?</title>
		<link>https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 07:16:00 +0000</pubDate>
				<category><![CDATA[Fotowoltaika]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[OZE]]></category>
		<category><![CDATA[Pompa ciepła]]></category>
		<category><![CDATA[Porady dla inwestorów]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Porady inwestycyjne]]></category>
		<category><![CDATA[Taryfy dynamiczne]]></category>
		<category><![CDATA[akumulatory lifepo4 opinie]]></category>
		<category><![CDATA[bezwładność cieplna budynku]]></category>
		<category><![CDATA[bufor ciepła do pompy ciepła]]></category>
		<category><![CDATA[instalacja hvac optymalizacja]]></category>
		<category><![CDATA[kalkulator strat ciepła budynku]]></category>
		<category><![CDATA[koszt magazynu energii]]></category>
		<category><![CDATA[koszty ogrzewania domu 2026]]></category>
		<category><![CDATA[kryzys 15 roku fotowoltaiki]]></category>
		<category><![CDATA[ogrzewanie podłogowe jako magazyn energii]]></category>
		<category><![CDATA[opłacalność taryf dynamicznych]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego ozc]]></category>
		<category><![CDATA[rynkowa cena energii elektrycznej rce]]></category>
		<category><![CDATA[standardy montażu hvac]]></category>
		<category><![CDATA[wylewka betonowa podłogówka]]></category>
		<category><![CDATA[zarabianie na taryfach dynamicznych]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=5634</guid>

					<description><![CDATA[<p>Agresywny marketing OZE i HVAC wmawia dziś inwestorom, że jedyną drogą do obniżenia rachunków za prąd jest zakup drogich akumulatorów chemicznych. Zanim jednak ulegniesz presji sprzedawców i wydasz kilkadziesiąt tysięcy złotych na technologię, która zimą stoi bezużyteczna, musisz poznać twarde fakty. Prawda jest taka, że największy magazyn energii w Twoim domu już istnieje i prawdopodobnie po nim chodzisz – to bezwładność cieplna betonowej wylewki podłogowej połączona z odpowiednio dobranym buforem wody grzewczej. Na podstawie analizy ponad 1000 projektów instalacyjnych udowadniam, dlaczego wykorzystanie fizyki budynku w erze taryf dynamicznych jest nawet 10-krotnie tańsze i bardziej opłacalne niż ścienne baterie. W dalszej części artykułu znajdziesz interaktywne kalkulatory, wykresy oraz szczegółowe zestawienia kosztów, które pozwolą Ci samodzielnie przeliczyć zyski.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/">Podłoga jako magazyn ciepła – ile energii naprawdę może zgromadzić?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-thermal-store {
    --rk-dark: #102536;
    --rk-navy: #15384d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e8fafd;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff0ea;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #b47600;
    --rk-yellow-soft: #fff8df;
    --rk-red: #c7443a;
    --rk-red-soft: #fff0ee;
    --rk-purple: #6659c7;
    --rk-purple-soft: #f1efff;
    --rk-ink: #1c2d38;
    --rk-text: #465d6c;
    --rk-muted: #687f8d;
    --rk-line: #d6e5eb;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    width: 100%;
    color: var(--rk-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 17px;
    line-height: 1.72;
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<style>
  #rk-thermal-store .rk-ts-module-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 13px;
    margin-top: 28px;
  }
  #rk-thermal-store .rk-ts-module-button {
    min-height: 146px;
    padding: 20px;
    border: 1px solid #cbdfe6;
    border-radius: 18px;
    background: #ffffff;
    color: var(--rk-dark);
    text-align: left;
  }
  #rk-thermal-store .rk-ts-module-button:hover {
    border-color: var(--rk-cyan);
    transform: translateY(-1px);
  }
  #rk-thermal-store .rk-ts-module-button[aria-selected="true"] {
    border-color: var(--rk-cyan);
    background: var(--rk-cyan-soft);
    box-shadow: inset 0 0 0 2px rgba(37, 199, 216, .17);
  }
  #rk-thermal-store .rk-ts-module-no {
    display: grid;
    place-items: center;
    width: 38px;
    height: 38px;
    margin-bottom: 13px;
    border-radius: 11px;
    background: #dff6f8;
    color: #087896;
    font-size: .82rem;
    font-weight: 950;
  }
  #rk-thermal-store .rk-ts-module-button strong,
  #rk-thermal-store .rk-ts-module-button small { display: block; }
  #rk-thermal-store .rk-ts-module-button strong { margin-bottom: 6px; font-size: 1rem; line-height: 1.3; }
  #rk-thermal-store .rk-ts-module-button small { color: #607988; font-size: .76rem; line-height: 1.45; }
  #rk-thermal-store .rk-ts-module-detail {
    margin-top: 15px;
    padding: 25px;
    border: 1px solid #315c70;
    border-radius: 19px;
    background: linear-gradient(135deg, #102536, #17485b);
    color: #ffffff;
  }
  #rk-thermal-store .rk-ts-module-detail h3 { margin: 0 0 8px; color: #ffffff; }
  #rk-thermal-store .rk-ts-module-detail > p { color: #d5e8ed; }
  #rk-thermal-store .rk-ts-module-facts {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 10px;
    margin-top: 18px;
  }
  #rk-thermal-store .rk-ts-module-fact {
    min-width: 0;
    padding: 14px;
    border: 1px solid rgba(255, 255, 255, .13);
    border-radius: 13px;
    background: rgba(255, 255, 255, .065);
  }
  #rk-thermal-store .rk-ts-module-fact b,
  #rk-thermal-store .rk-ts-module-fact span { display: block; }
  #rk-thermal-store .rk-ts-module-fact b { margin-bottom: 5px; color: #72e4f0; font-size: .68rem; letter-spacing: .06em; text-transform: uppercase; }
  #rk-thermal-store .rk-ts-module-fact span { color: #ffffff; font-size: .78rem; line-height: 1.45; }
  #rk-thermal-store .rk-ts-tool-stage {
    margin-top: 24px;
    padding-top: 24px;
    border-top: 1px solid var(--rk-line);
  }
  #rk-thermal-store .rk-ts-tool-stage:first-of-type { margin-top: 0; padding-top: 0; border-top: 0; }
  #rk-thermal-store .rk-ts-tool-stage-title {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 17px;
  }
  #rk-thermal-store .rk-ts-tool-stage-no {
    display: grid;
    place-items: center;
    flex: 0 0 40px;
    width: 40px;
    height: 40px;
    border-radius: 11px;
    background: var(--rk-cyan);
    color: #0b3343;
    font-weight: 950;
  }
  #rk-thermal-store .rk-ts-tool-stage-title h4 { margin: 0 0 3px; }
  #rk-thermal-store .rk-ts-tool-stage-title p { margin: 0; font-size: .8rem; }
  #rk-thermal-store .rk-ts-result-system.is-floor { border-top: 5px solid var(--rk-cyan); }
  #rk-thermal-store .rk-ts-result-system.is-cost { border-top: 5px solid var(--rk-orange); }
  #rk-thermal-store .rk-ts-status {
    margin-top: 18px;
    padding: 18px 20px;
    border-left: 6px solid var(--rk-yellow);
    border-radius: 7px 15px 15px 7px;
    background: var(--rk-yellow-soft);
  }
  #rk-thermal-store .rk-ts-status.is-good { border-left-color: var(--rk-green); background: var(--rk-green-soft); }
  #rk-thermal-store .rk-ts-status.is-stop { border-left-color: var(--rk-orange); background: var(--rk-orange-soft); }
  #rk-thermal-store .rk-ts-status strong,
  #rk-thermal-store .rk-ts-status span { display: block; }
  #rk-thermal-store .rk-ts-status span { margin-top: 5px; color: #4f6674; font-size: .82rem; }
  #rk-thermal-store .rk-ts-formula-row {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 14px;
  }
  #rk-thermal-store .rk-ts-formula-tag {
    padding: 6px 10px;
    border-radius: 999px;
    background: #e6f6f8;
    color: #136f85;
    font-family: Consolas, Monaco, monospace;
    font-size: .72rem;
    font-weight: 800;
  }
  #rk-thermal-store .rk-ts-chart-dot-floor { fill: var(--rk-orange); }
  #rk-thermal-store .rk-ts-chart-dot-electric { fill: var(--rk-blue); }
  #rk-thermal-store .rk-ts-source-note { margin-top: 8px; color: #647d8b; font-size: .8rem; }
  #rk-thermal-store .rk-ts-inline-metric {
    display: inline-flex;
    align-items: center;
    min-height: 30px;
    padding: 4px 9px;
    border-radius: 999px;
    background: var(--rk-cyan-soft);
    color: #087794;
    font-weight: 850;
    white-space: nowrap;
  }
  @media (max-width: 960px) {
    #rk-thermal-store .rk-ts-module-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-thermal-store .rk-ts-module-facts { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }
  @media (max-width: 620px) {
    #rk-thermal-store .rk-ts-module-grid,
    #rk-thermal-store .rk-ts-module-facts { grid-template-columns: minmax(0, 1fr); }
    #rk-thermal-store .rk-ts-module-button { min-height: 0; }
    #rk-thermal-store .rk-ts-module-detail { padding: 19px; }
    #rk-thermal-store .rk-ts-tool-stage-title { align-items: center; }
  }
</style>

<!--
  PROJEKT-OGRZEWANIA.PL — pełny kod do bloku „Własny HTML”.
  Wklej kod POD natywnym tytułem H1 generowanym przez WordPress.

  USTAWIENIA WORDPRESS / YOAST:
  H1: Podłoga jako magazyn ciepła – ile energii naprawdę może zgromadzić?
  Fraza główna: ogrzewanie podłogowe jako magazyn energii
  SEO title: Podłoga jako magazyn ciepła – kalkulator pojemności
  Meta description: Oblicz pojemność cieplną wylewki i bufora. Sprawdź, ile ciepła oraz energii elektrycznej można przesunąć dzięki pompie ciepła.
  Slug: pozostaw bez zmian.
-->

<div id="rk-thermal-store">
  <article class="rk-ts-shell" aria-label="Poradnik i kalkulator pojemności cieplnej podłogi oraz bufora">
    <header class="rk-ts-hero">
      <span class="rk-ts-kicker">Bezwładność cieplna bez marketingowych skrótów</span>
      <div class="rk-ts-hero-title">Największy magazyn energii w domu? <span>Podłoga magazynuje ciepło, nie prąd</span></div>
      <p class="rk-ts-lead">Masa wylewki może przesunąć część pracy pompy ciepła na korzystniejsze godziny. Jej pojemność nie jest jednak równoważna pojemności akumulatora, a wynik zależy od masy aktywnej, dopuszczalnej zmiany temperatury, strat budynku, COP, mocy źródła i sposobu sterowania.</p>
      <div class="rk-ts-hero-tags" aria-label="Zakres artykułu">
        <span class="rk-ts-hero-tag">kWh cieplne i elektryczne</span>
        <span class="rk-ts-hero-tag">wylewka i bufor</span>
        <span class="rk-ts-hero-tag">pompa ciepła</span>
        <span class="rk-ts-hero-tag">taryfy dynamiczne</span>
        <span class="rk-ts-hero-tag">kalkulator i wykres</span>
      </div>
      <div class="rk-ts-byline">
        <span><strong>Autor:</strong> Robert Kucharski</span>
        <span><strong>Czas czytania:</strong> około 26 minut</span>
        <span><strong>Aktualizacja techniczna:</strong> 16 września 2026 r.</span>
      </div>
      <div class="rk-ts-hero-metrics">
        <div class="rk-ts-hero-metric"><b>Podłoga magazynuje ciepło</b><span>Wynik podajemy w kWh<sub>th</sub>. Nie jest to energia elektryczna dostępna dla oświetlenia, sprzętów ani awaryjnego zasilania.</span></div>
        <div class="rk-ts-hero-metric"><b>Pojemność to nie moc</b><span>Duża liczba kWh nie mówi jeszcze, czy źródło zdąży naładować masę ani jak szybko budynek ją rozładuje.</span></div>
        <div class="rk-ts-hero-metric"><b>Oszczędność jest scenariuszem</b><span>Liczymy wyłącznie energię rzeczywiście przesuniętą oraz ceny wynikające z konkretnej umowy użytkownika.</span></div>
      </div>
    </header>

    <nav class="rk-ts-nav" aria-label="Na skróty — wszystkie sekcje artykułu">
      <span class="rk-ts-nav-label">Na skróty — wszystkie H2</span>
      <div class="rk-ts-nav-track">
        <a href="#rk-ts-answer">Szybka odpowiedź</a>
        <a href="#rk-ts-units">kW i kWh</a>
        <a href="#rk-ts-map">Mapa magazynów</a>
        <a href="#rk-ts-physics">Fizyka wylewki</a>
        <a href="#rk-ts-calculator">Kalkulator</a>
        <a href="#rk-ts-reading">Interpretacja</a>
        <a href="#rk-ts-power">Pojemność a moc</a>
        <a href="#rk-ts-comparison">Uczciwe porównanie</a>
        <a href="#rk-ts-tariffs">Taryfy dynamiczne</a>
        <a href="#rk-ts-heat-pump">Pompa i PV</a>
        <a href="#rk-ts-control">Sterowanie</a>
        <a href="#rk-ts-buffer">Czy potrzebny bufor?</a>
        <a href="#rk-ts-example">Przykład 150 m²</a>
        <a href="#rk-ts-errors">Najczęstsze błędy</a>
        <a href="#rk-ts-data">Dane projektowe</a>
        <a href="#rk-ts-summary">Wnioski</a>
        <a href="#rk-ts-sources">Źródła</a>
        <a href="#rk-ts-faq">FAQ</a>
        <a href="#rk-ts-author">Autor</a>
      </div>
    </nav>

    <section class="rk-ts-section" id="rk-ts-answer">
      <span class="rk-ts-eyebrow">Odpowiedź w 60 sekund</span>
      <h2 class="rk-ts-section-title">Czy ogrzewanie podłogowe może być magazynem energii?</h2>
      <p class="rk-ts-section-lead"><strong>Tak, ale jest magazynem ciepła o ograniczonej sterowalności.</strong> Wylewka i pozostałe masywne warstwy podłogi pochłaniają energię podczas podnoszenia swojej temperatury, a następnie oddają ją do pomieszczenia. Pozwala to czasowo przesunąć produkcję ciepła bez natychmiastowego wyłączenia ogrzewania.</p>
      <div class="rk-ts-answer">
        <span class="rk-ts-answer-label">Najważniejsze rozróżnienie</span>
        <p><strong>Podłoga nie przechowuje prądu i nie zastępuje domowego akumulatora.</strong> Może ograniczyć pobór energii elektrycznej przez pompę ciepła w wybranych godzinach, ale nie zasili lodówki, oświetlenia ani domu podczas zaniku napięcia.</p>
      </div>
      <div class="rk-ts-grid-3">
        <article class="rk-ts-card"><span class="rk-ts-card-label">Może</span><h3>Przesunąć część ogrzewania</h3><p>Jeżeli budynek ma zapotrzebowanie na ciepło, źródło dysponuje zapasem mocy, a temperatura podłogi pozostaje w granicach komfortu.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Nie może</span><h3>Magazynować energii bez kosztu</h3><p>Ciepło trzeba wcześniej wytworzyć. Korzyść może wynikać z czasu poboru, autokonsumpcji PV albo korzystniejszych warunków pracy źródła.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-green">Wymaga</span><h3>Bilansu i sterowania</h3><p>Potrzebne są straty pomieszczeń, parametry podłogi, przepływy, moc pompy, prognoza oraz ograniczenia okładzin i użytkowników.</p></article>
      </div>
      <p>Jeżeli chcesz najpierw uporządkować samo zjawisko, przeczytaj także poradnik o <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładności cieplnej ogrzewania podłogowego</a>. Bezwładność może pomagać w przesuwaniu poboru, ale może też utrudniać szybką korektę temperatury.</p>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-units">
      <span class="rk-ts-eyebrow">Jedna litera zmienia znaczenie wyniku</span>
      <h2 class="rk-ts-section-title">kW, kWh<sub>th</sub> i kWh<sub>el</sub> — czego nie wolno mieszać?</h2>
      <p class="rk-ts-section-lead">Do uczciwego porównania potrzebne są trzy różne wielkości. Dopiero ich rozdzielenie pozwala powiedzieć, ile podłoga może zgromadzić, jak długo odda ciepło oraz ile prądu można przesunąć.</p>
      <div class="rk-ts-table">
        <table>
          <thead><tr><th>Wielkość</th><th>Co opisuje?</th><th>Przykładowe zastosowanie</th><th>Najczęstszy błąd</th></tr></thead>
          <tbody>
            <tr><th data-label="Wielkość">kW — moc</th><td data-label="Co opisuje?">Tempo wytwarzania, oddawania albo utraty energii.</td><td data-label="Zastosowanie">Moc pompy ciepła i projektowe obciążenie cieplne.</td><td data-label="Błąd">Traktowanie 6 kW jak energii zużywanej przez sezon.</td></tr>
            <tr><th data-label="Wielkość">kWh<sub>th</sub> — ciepło</th><td data-label="Co opisuje?">Ilość energii cieplnej zgromadzonej lub dostarczonej do budynku.</td><td data-label="Zastosowanie">Pojemność cieplna wylewki i bufora.</td><td data-label="Błąd">Porównanie 1:1 z pojemnością akumulatora.</td></tr>
            <tr><th data-label="Wielkość">kWh<sub>el</sub> — prąd</th><td data-label="Co opisuje?">Energię elektryczną pobraną z sieci, PV albo baterii.</td><td data-label="Zastosowanie">Koszt pracy pompy ciepła oraz pojemność baterii.</td><td data-label="Błąd">Pominięcie COP podczas przeliczania na ciepło.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-ts-equation">
        <span class="rk-ts-equation-label">Most między prądem a ciepłem</span>
        <div class="rk-ts-equation-main">energia elektryczna pompy ≈ dostarczone ciepło ÷ COP</div>
        <p>Jeżeli pompa dostarcza 18 kWh<sub>th</sub> przy COP równym 3, potrzebuje orientacyjnie 6 kWh<sub>el</sub>. Dlatego 18 kWh ciepła w podłodze nie jest odpowiednikiem baterii 18 kWh.</p>
      </div>
      <p>Odrębne znaczenie mocy i energii wyjaśnia również poradnik o <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowym obciążeniu cieplnym OZC</a>. Moc mówi, jak szybko budynek traci ciepło w danych warunkach, natomiast pojemność określa, przez jaki czas określona ilość energii może te straty pokrywać.</p>
    </section>

    <section class="rk-ts-section" id="rk-ts-map">
      <span class="rk-ts-eyebrow">Moduł edukacyjny 3 × 2</span>
      <h2 class="rk-ts-section-title">Sześć elementów, których nie wolno wrzucać do jednego wyniku</h2>
      <p class="rk-ts-section-lead">Wybierz kafel. Pod modułem zobaczysz, co dany element magazynuje, do czego służy, co ogranicza jego użyteczność i z czym nie powinien być sumowany bez dodatkowego modelu.</p>
      <div class="rk-ts-module-grid" role="tablist" aria-label="Elementy magazynowania i wykorzystania energii">
        <button class="rk-ts-module-button" type="button" role="tab" aria-selected="true" data-rk-store="floor"><span class="rk-ts-module-no">01</span><strong>Wylewka i podłoga</strong><small>Ciepło dla ogrzewanych pomieszczeń, ograniczone komfortem i dynamiką.</small></button>
        <button class="rk-ts-module-button" type="button" role="tab" aria-selected="false" data-rk-store="buffer"><span class="rk-ts-module-no">02</span><strong>Bufor instalacyjny</strong><small>Ciepło w wodzie obiegowej, zależne od pojemności i użytecznego ΔT.</small></button>
        <button class="rk-ts-module-button" type="button" role="tab" aria-selected="false" data-rk-store="dhw"><span class="rk-ts-module-no">03</span><strong>Zasobnik CWU</strong><small>Energia przeznaczona na ciepłą wodę użytkową, nie na autonomię pomieszczeń.</small></button>
        <button class="rk-ts-module-button" type="button" role="tab" aria-selected="false" data-rk-store="battery"><span class="rk-ts-module-no">04</span><strong>Akumulator elektryczny</strong><small>Prąd dla wielu odbiorników; inna funkcja, sprawność, moc i wartość użytkowa.</small></button>
        <button class="rk-ts-module-button" type="button" role="tab" aria-selected="false" data-rk-store="cop"><span class="rk-ts-module-no">05</span><strong>COP pompy ciepła</strong><small>Przelicznik pomiędzy pobraną energią elektryczną a oddanym ciepłem.</small></button>
        <button class="rk-ts-module-button" type="button" role="tab" aria-selected="false" data-rk-store="loss"><span class="rk-ts-module-no">06</span><strong>Straty budynku</strong><small>Moc rozładowania magazynu zależna od pogody, wentylacji i temperatury.</small></button>
      </div>
      <div class="rk-ts-module-detail" role="tabpanel" aria-live="polite">
        <h3 id="rk-ts-store-title">Wylewka i podłoga</h3>
        <p id="rk-ts-store-summary">Masywne warstwy ogrzewanej podłogi przechowują ciepło jawne. Im większa masa i zmiana średniej temperatury, tym większy teoretyczny zapas.</p>
        <div class="rk-ts-module-facts">
          <div class="rk-ts-module-fact"><b>Magazynuje</b><span id="rk-ts-store-energy">ciepło w masie materiału</span></div>
          <div class="rk-ts-module-fact"><b>Zasila</b><span id="rk-ts-store-use">wyłącznie potrzeby cieplne pomieszczeń</span></div>
          <div class="rk-ts-module-fact"><b>Ogranicza</b><span id="rk-ts-store-limit">komfort, okładzina, moc i czas reakcji</span></div>
          <div class="rk-ts-module-fact"><b>Nie oznacza</b><span id="rk-ts-store-warning">takiej samej pojemności baterii elektrycznej</span></div>
        </div>
      </div>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-physics">
      <span class="rk-ts-eyebrow">Od masy materiału do kWh ciepła</span>
      <h2 class="rk-ts-section-title">Jak oblicza się pojemność cieplną wylewki?</h2>
      <p class="rk-ts-section-lead">Uproszczone obliczenie zaczyna się od objętości aktywnej warstwy. Następnie objętość mnoży się przez gęstość, ciepło właściwe i rozpatrywaną zmianę średniej temperatury.</p>
      <div class="rk-ts-equation">
        <span class="rk-ts-equation-label">Pojemność cieplna warstwy</span>
        <div class="rk-ts-equation-main">Q<sub>th</sub> = A × d × ρ × c × ΔT</div>
        <div class="rk-ts-formula-row">
          <span class="rk-ts-formula-tag">A — powierzchnia [m²]</span>
          <span class="rk-ts-formula-tag">d — efektywna grubość [m]</span>
          <span class="rk-ts-formula-tag">ρ — gęstość [kg/m³]</span>
          <span class="rk-ts-formula-tag">c — ciepło właściwe [Wh/(kg·K)]</span>
          <span class="rk-ts-formula-tag">ΔT — zmiana temperatury [K]</span>
        </div>
      </div>
      <div class="rk-ts-grid-3">
        <article class="rk-ts-card"><span class="rk-ts-card-label">Masa</span><h3>Nie zawsze pracuje cała płyta</h3><p>W krótkim oknie cenowym nie każda warstwa osiąga równomiernie tę samą temperaturę. Dlatego kalkulator pyta o efektywną grubość uczestniczącą w analizowanym cyklu.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Temperatura</span><h3>ΔT jest założeniem, nie limitem normowym</h3><p>Zmiana średniej temperatury masy nie jest tym samym co temperatura powierzchni. Trzeba kontrolować komfort, okładzinę i temperaturę w pomieszczeniu.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Czas</span><h3>Wynik statyczny ma granice</h3><p>Równanie podaje pojemność dla zadanego stanu. Nie opisuje szybkości przepływu ciepła przez warstwy ani rzeczywistej odpowiedzi sterowania.</p></article>
      </div>
      <div class="rk-ts-warning"><p><strong>Pojemność teoretyczna nie jest gwarantowaną pojemnością użytkową.</strong> Kalkulator pozwala jawnie określić udział użyteczny w jednym cyklu. To założenie scenariusza, a nie uniwersalna stała materiałowa.</p></div>
      <p>Znaczenie grubości, materiału i położenia rur rozwija poradnik o <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">wylewce na ogrzewanie podłogowe</a>. W przypadku ogrzewania zatopionego w płycie fundamentowej konieczna jest osobna analiza dynamiki całej konstrukcji.</p>
    </section>

    <section class="rk-ts-section rk-ts-section-dark" id="rk-ts-calculator">
      <span class="rk-ts-eyebrow">Narzędzie główne</span>
      <h2 class="rk-ts-section-title">Kalkulator pojemności podłogi, bufora i przesuwania kosztu</h2>
      <p class="rk-ts-section-lead">Najpierw policz ciepło możliwe do zgromadzenia. Potem sprawdź, ile prądu odpowiada tej ilości przy wpisanym COP oraz czy różnica cen może pokryć dodatkowy koszt automatyki lub bufora.</p>
      <div class="rk-ts-tool" id="rk-ts-tool">
        <div class="rk-ts-tool-head">
          <span class="rk-ts-eyebrow">Dwa etapy, jeden wspólny model</span>
          <h3>Ile ciepła można przesunąć i ile może to być warte?</h3>
          <p>Wartości startowe są przykładem edytowalnym. Kalkulator nie pobiera bieżących cen i nie zakłada, że cała masa jest dostępna każdego dnia.</p>
        </div>
        <div class="rk-ts-tool-body">
          <div class="rk-ts-tool-intro">
            <p>Wpisz dane budynku oraz własnej umowy. Wyniki aktualizują się automatycznie.</p>
            <button class="rk-ts-reset" id="rk-ts-reset" type="button">Przywróć przykład</button>
          </div>

          <div class="rk-ts-tool-stage">
            <div class="rk-ts-tool-stage-title"><span class="rk-ts-tool-stage-no">1</span><div><h4>Pojemność cieplna podłogi i opcjonalnego bufora</h4><p>Bufor ma domyślnie 0 litrów, więc nie jest automatycznie dopisywany do podłogi.</p></div></div>
            <div class="rk-ts-field-grid is-4">
              <div class="rk-ts-field"><label for="rk-ts-area">Aktywna powierzchnia [m²]</label><input id="rk-ts-area" type="number" min="1" max="1000" step="1" value="150" inputmode="decimal"><span class="rk-ts-field-help">Powierzchnia faktycznie objęta ogrzewaniem.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-thickness">Efektywna grubość [cm]</label><input id="rk-ts-thickness" type="number" min="0.5" max="40" step="0.1" value="6.5" inputmode="decimal"><span class="rk-ts-field-help">Warstwa uczestnicząca w rozpatrywanym cyklu.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-density">Gęstość [kg/m³]</label><input id="rk-ts-density" type="number" min="500" max="3500" step="10" value="2400" inputmode="decimal"><span class="rk-ts-field-help">Przykład dla ciężkiej wylewki cementowej.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-specific">Ciepło właściwe [Wh/(kg·K)]</label><input id="rk-ts-specific" type="number" min="0.05" max="1" step="0.001" value="0.277" inputmode="decimal"><span class="rk-ts-field-help">Zastąp wartością dla rzeczywistego materiału.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-delta">Zmiana średniej temperatury [K]</label><input id="rk-ts-delta" type="number" min="0.1" max="5" step="0.1" value="1" inputmode="decimal"><span class="rk-ts-field-help">Nie jest równa automatycznie zmianie temperatury powierzchni.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-buffer-liters">Pojemność bufora [l]</label><input id="rk-ts-buffer-liters" type="number" min="0" max="10000" step="10" value="0" inputmode="decimal"><span class="rk-ts-field-help">Wpisz 0, jeżeli instalacja nie ma magazynu wodnego.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-buffer-delta">Użyteczne ΔT bufora [K]</label><input id="rk-ts-buffer-delta" type="number" min="0" max="60" step="0.5" value="5" inputmode="decimal"><span class="rk-ts-field-help">Zakres faktycznie możliwy do użycia przez instalację.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-usable">Użyteczna część pojemności [%]</label><input id="rk-ts-usable" type="number" min="5" max="100" step="1" value="60" inputmode="decimal"><span class="rk-ts-field-help">Jawne założenie scenariusza dla jednego cyklu.</span></div>
            </div>
          </div>

          <div class="rk-ts-tool-stage">
            <div class="rk-ts-tool-stage-title"><span class="rk-ts-tool-stage-no">2</span><div><h4>Moc, COP i koszt przesunięcia</h4><p>Porównujemy wyłącznie energię objętą jednym cyklem, a nie całe roczne zużycie pompy.</p></div></div>
            <div class="rk-ts-field-grid is-4">
              <div class="rk-ts-field"><label for="rk-ts-loss">Aktualne straty budynku [kW]</label><input id="rk-ts-loss" type="number" min="0.1" max="100" step="0.1" value="5" inputmode="decimal"><span class="rk-ts-field-help">Moc potrzebna przy analizowanej pogodzie.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-pump-power">Dostępna moc cieplna pompy [kW]</label><input id="rk-ts-pump-power" type="number" min="0.5" max="100" step="0.1" value="8" inputmode="decimal"><span class="rk-ts-field-help">Moc w warunkach ładowania, nie nazwa modelu.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-window">Tanie okno [h]</label><input id="rk-ts-window" type="number" min="0.25" max="24" step="0.25" value="4" inputmode="decimal"><span class="rk-ts-field-help">Czas przeznaczony na ładowanie ponad bieżące straty.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-cycle-loss">Dodatkowe straty cyklu [%]</label><input id="rk-ts-cycle-loss" type="number" min="0" max="50" step="1" value="5" inputmode="decimal"><span class="rk-ts-field-help">Uproszczony narzut na przesył i przegrzanie.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-cop-reference">COP w unikanych godzinach</label><input id="rk-ts-cop-reference" type="number" min="1" max="8" step="0.1" value="3.2" inputmode="decimal"><span class="rk-ts-field-help">Warunki wariantu bez przesunięcia.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-cop-charge">COP podczas ładowania</label><input id="rk-ts-cop-charge" type="number" min="1" max="8" step="0.1" value="3" inputmode="decimal"><span class="rk-ts-field-help">Może być inny z powodu pogody i temperatury wody.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-price-high">Cena unikana [zł/kWh]</label><input id="rk-ts-price-high" type="number" min="0" max="10" step="0.01" value="1.10" inputmode="decimal"><span class="rk-ts-field-help">Zmienny koszt energii i dystrybucji z własnej umowy.</span></div>
              <div class="rk-ts-field"><label for="rk-ts-price-low">Cena ładowania [zł/kWh]</label><input id="rk-ts-price-low" type="number" min="-5" max="10" step="0.01" value="0.65" inputmode="decimal"><span class="rk-ts-field-help">Uwzględnij formułę, marżę i zmienne opłaty.</span></div>
            </div>
            <details class="rk-ts-advanced">
              <summary>Założenia sezonowe i inwestycyjne</summary>
              <div class="rk-ts-advanced-content">
                <div class="rk-ts-field-grid is-3">
                  <div class="rk-ts-field"><label for="rk-ts-days">Liczba cykli w roku</label><input id="rk-ts-days" type="number" min="0" max="366" step="1" value="180" inputmode="numeric"><span class="rk-ts-field-help">Nie każdy dzień sezonu zapewnia potrzebę i korzystną różnicę cen.</span></div>
                  <div class="rk-ts-field"><label for="rk-ts-investment">Dodatkowy koszt [zł]</label><input id="rk-ts-investment" type="number" min="0" max="1000000" step="100" value="1500" inputmode="decimal"><span class="rk-ts-field-help">Tylko koszt ponoszony dla tej funkcji: sterowanie, bufor lub montaż.</span></div>
                  <div class="rk-ts-field"><label for="rk-ts-years">Horyzont porównania [lat]</label><input id="rk-ts-years" type="number" min="1" max="40" step="1" value="15" inputmode="numeric"><span class="rk-ts-field-help">Bez prognozowania wzrostu cen i wartości pieniądza.</span></div>
                </div>
              </div>
            </details>
          </div>

          <div class="rk-ts-validation" id="rk-ts-validation" role="alert"></div>
          <div class="rk-ts-results" aria-live="polite">
            <section class="rk-ts-result-system is-floor">
              <h4>Pojemność i czas pracy</h4>
              <div class="rk-ts-result-grid">
                <div class="rk-ts-result-item"><span>Podłoga — teoretycznie</span><strong id="rk-ts-floor-result">6,48 kWh_th</strong></div>
                <div class="rk-ts-result-item"><span>Bufor — teoretycznie</span><strong id="rk-ts-buffer-result">0,00 kWh_th</strong></div>
                <div class="rk-ts-result-item"><span>Użyteczne ciepło w cyklu</span><strong id="rk-ts-useful-result">3,89 kWh_th</strong></div>
                <div class="rk-ts-result-item"><span>Pokrycie podanych strat</span><strong id="rk-ts-runtime-result">0,78 h</strong></div>
                <div class="rk-ts-result-item"><span>Wymagana moc ładowania</span><strong id="rk-ts-required-power">6,02 kW_th</strong></div>
                <div class="rk-ts-result-item"><span>Udział mocy pompy</span><strong id="rk-ts-power-share">75%</strong></div>
              </div>
            </section>
            <section class="rk-ts-result-system is-cost">
              <h4>Prąd i wynik finansowy</h4>
              <div class="rk-ts-result-grid">
                <div class="rk-ts-result-item"><span>Prąd bez przesunięcia</span><strong id="rk-ts-electric-reference">1,22 kWh_el</strong></div>
                <div class="rk-ts-result-item"><span>Prąd podczas ładowania</span><strong id="rk-ts-electric-charge">1,36 kWh_el</strong></div>
                <div class="rk-ts-result-item"><span>Oszczędność jednego cyklu</span><strong id="rk-ts-cycle-saving">0,45 zł</strong></div>
                <div class="rk-ts-result-item"><span>Oszczędność roczna</span><strong id="rk-ts-annual-saving">81 zł/rok</strong></div>
                <div class="rk-ts-result-item"><span>Prosty okres zwrotu</span><strong id="rk-ts-payback-result">18,5 roku</strong></div>
                <div class="rk-ts-result-item"><span>Bilans po horyzoncie</span><strong id="rk-ts-horizon-result">−285 zł</strong></div>
              </div>
            </section>
          </div>
          <div class="rk-ts-status" id="rk-ts-status">
            <strong id="rk-ts-status-title">Wynik wymaga interpretacji</strong>
            <span id="rk-ts-status-text">Pojemność istnieje, ale przy podanych cenach dodatkowa automatyka zwraca się dopiero w długim okresie.</span>
          </div>

          <div class="rk-ts-chart-panel">
            <div class="rk-ts-chart-head"><h4>Wpływ zmiany temperatury na pojemność podłogi</h4></div>
            <div class="rk-ts-chart-legend"><span><i class="is-direct"></i>ciepło w podłodze [kWh_th]</span><span><i class="is-pump"></i>odpowiednik prądu przy COP ładowania [kWh_el]</span></div>
            <div class="rk-ts-chart-wrap">
              <svg id="rk-ts-chart" viewBox="0 0 760 330" role="img" aria-labelledby="rk-ts-chart-title rk-ts-chart-desc">
                <title id="rk-ts-chart-title">Pojemność podłogi w zależności od zmiany średniej temperatury</title>
                <desc id="rk-ts-chart-desc">Dwie linie pokazują kWh ciepła w podłodze oraz orientacyjny odpowiednik energii elektrycznej przy zadanym COP.</desc>
                <g id="rk-ts-chart-grid"></g>
                <line class="rk-ts-axis" x1="64" y1="280" x2="728" y2="280"></line>
                <line class="rk-ts-axis" x1="64" y1="28" x2="64" y2="280"></line>
                <path class="rk-ts-path-direct" id="rk-ts-chart-floor-path" d=""></path>
                <path class="rk-ts-path-pump" id="rk-ts-chart-electric-path" d=""></path>
                <g id="rk-ts-chart-dots"></g>
              </svg>
            </div>
            <span class="rk-ts-chart-reading" id="rk-ts-chart-reading">Wykres pokazuje pojemność statyczną. Nie potwierdza, że cała masa zdąży osiągnąć wybraną temperaturę w podanym oknie.</span>
          </div>
          <p class="rk-ts-disclosure">Narzędzie ma charakter edukacyjny. Nie zastępuje dynamicznej symulacji budynku, OZC, projektu instalacji, danych materiałowych, instrukcji źródła ani analizy konkretnej umowy sprzedaży energii.</p>
        </div>
      </div>

      <aside class="rk-ts-cta" aria-label="Indywidualny projekt ogrzewania podłogowego">
        <span class="rk-ts-eyebrow">Od pojemności do działającej instalacji</span>
        <div class="rk-ts-cta-title">Policzyłeś, ile ciepła może przyjąć podłoga. Teraz trzeba sprawdzić, czy instalacja dostarczy je bez przegrzewania i pogorszenia pracy pompy</div>
        <p>Sama liczba kWh nie wyznacza rozstawu rur, długości pętli, przepływów, temperatury zasilania ani mocy potrzebnej do ładowania w tanim oknie. Projekt łączy straty każdego pomieszczenia, opór okładzin, hydraulikę oraz wymagania źródła ciepła.</p>
        <a class="rk-ts-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Sprawdź zakres indywidualnego projektu podłogówki</a>
        <small class="rk-ts-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </aside>
    </section>

    <section class="rk-ts-section" id="rk-ts-reading">
      <span class="rk-ts-eyebrow">Cztery wyniki, cztery pytania</span>
      <h2 class="rk-ts-section-title">Jak interpretować wynik kalkulatora?</h2>
      <p class="rk-ts-section-lead">Największa liczba nie musi być najważniejsza. Pojemność teoretyczna opisuje stan końcowy, a decyzję projektową ograniczają również czas, moc, komfort i możliwość rzeczywistego przesunięcia poboru.</p>
      <div class="rk-ts-grid-4">
        <article class="rk-ts-card"><span class="rk-ts-card-label">1</span><h3>Pojemność podłogi</h3><p>Pokazuje energię związaną z wpisaną masą i zmianą temperatury. Nie uwzględnia nierównomiernego rozkładu temperatury.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">2</span><h3>Użyteczne ciepło</h3><p>To część pojemności przyjęta do konkretnego cyklu. Pole procentowe zastępuje nieznany wynik modelu dynamicznego jawnym założeniem.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">3</span><h3>Czas pokrycia strat</h3><p>Powstaje przez podzielenie użytecznego ciepła przez aktualną moc strat. Przy mrozie będzie krótszy niż w łagodny dzień.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">4</span><h3>Oszczędność</h3><p>Dotyczy wyłącznie wpisanej liczby cykli oraz różnicy kosztu prądu po uwzględnieniu COP i strat.</p></article>
      </div>
      <div class="rk-ts-callout"><p><strong>Wynik „brak zwrotu” jest prawidłowym wynikiem.</strong> Istniejąca masa podłogi może pomagać bez dodatkowego kosztu, lecz zakup dużego bufora wyłącznie dla arbitrażu cenowego nie musi być opłacalny.</p></div>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-power">
      <span class="rk-ts-eyebrow">Energia bez czasu nie opisuje działania</span>
      <h2 class="rk-ts-section-title">Pojemność cieplna a moc ładowania i rozładowania</h2>
      <p class="rk-ts-section-lead">Magazyn o pojemności 10 kWh nie zostanie automatycznie naładowany w dwie godziny. Źródło musi jednocześnie pokryć bieżące straty budynku i dostarczyć nadwyżkę do masy podłogi.</p>
      <div class="rk-ts-system-map">
        <article class="rk-ts-flow-card is-water">
          <div class="rk-ts-flow-title">Ładowanie podłogi</div>
          <div class="rk-ts-flow is-five">
            <div class="rk-ts-flow-node">prąd lub paliwo</div><div class="rk-ts-flow-node">źródło ciepła</div><div class="rk-ts-flow-node">woda grzewcza</div><div class="rk-ts-flow-node">warstwy podłogi</div><div class="rk-ts-flow-node">wzrost temperatury</div>
          </div>
          <div class="rk-ts-flow-formula">Wymagana moc źródła ≈ bieżące straty budynku + energia ładowania ÷ czas taniego okna.</div>
        </article>
        <article class="rk-ts-flow-card is-electric">
          <div class="rk-ts-flow-title">Rozładowanie podłogi</div>
          <div class="rk-ts-flow is-five">
            <div class="rk-ts-flow-node">ciepło w masie</div><div class="rk-ts-flow-node">powierzchnia podłogi</div><div class="rk-ts-flow-node">pomieszczenie</div><div class="rk-ts-flow-node">przegrody i wentylacja</div><div class="rk-ts-flow-node">otoczenie</div>
          </div>
          <div class="rk-ts-flow-formula">Orientacyjny czas pokrycia = użyteczna energia cieplna ÷ aktualne straty cieplne budynku.</div>
        </article>
      </div>
      <p>Jeżeli dom traci chwilowo 5 kW, zapas 10 kWh<sub>th</sub> odpowiada około dwóm godzinom pokrycia tej straty. Przy stracie 2 kW ten sam zapas wystarcza orientacyjnie na pięć godzin. Z tego powodu jeden wynik „na ile godzin wystarczy podłoga” nie istnieje bez określenia warunków zewnętrznych.</p>
      <p>Moc strat powinna wynikać z <a href="https://projekt-ogrzewania.pl/bilans-cieplny-budynku-fundament-efektywnosci-energetycznej-i-komfortu/">bilansu cieplnego budynku</a>, a rozdział mocy pomiędzy pomieszczenia z obliczeń wykonywanych dla każdej strefy.</p>
    </section>

    <section class="rk-ts-section" id="rk-ts-comparison">
      <span class="rk-ts-eyebrow">Porównanie funkcji, nie samych liczb</span>
      <h2 class="rk-ts-section-title">Podłoga, bufor, CWU i bateria — czym naprawdę się różnią?</h2>
      <p class="rk-ts-section-lead">Koszt za jedną znamionową kWh nie jest uczciwą miarą, jeżeli urządzenia dostarczają inne usługi. Podłoga może przesuwać ogrzewanie, a bateria zasila odbiorniki elektryczne i może pełnić funkcję awaryjną, jeżeli system został do tego przystosowany.</p>
      <div class="rk-ts-table">
        <table>
          <thead><tr><th>Element</th><th>Postać energii</th><th>Główne zadanie</th><th>Najważniejsze ograniczenie</th></tr></thead>
          <tbody>
            <tr><th data-label="Element">Podłoga</th><td data-label="Postać energii">Ciepło w masie przegród.</td><td data-label="Główne zadanie">Krótkookresowe przesunięcie ogrzewania i stabilizacja temperatury.</td><td data-label="Ograniczenie">Komfort, dynamika, straty budynku i brak zasilania innych urządzeń.</td></tr>
            <tr><th data-label="Element">Bufor CO</th><td data-label="Postać energii">Ciepło w wodzie instalacyjnej.</td><td data-label="Główne zadanie">Hydraulika, wydłużenie cyklu albo świadome magazynowanie.</td><td data-label="Ograniczenie">Miejsce, koszt, straty postojowe i użyteczny zakres temperatur.</td></tr>
            <tr><th data-label="Element">Zasobnik CWU</th><td data-label="Postać energii">Ciepło w wodzie użytkowej.</td><td data-label="Główne zadanie">Pokrycie rozbiorów ciepłej wody.</td><td data-label="Ograniczenie">Nie zwiększa bezpośrednio czasu ogrzewania pomieszczeń.</td></tr>
            <tr><th data-label="Element">Bateria</th><td data-label="Postać energii">Energia elektryczna.</td><td data-label="Główne zadanie">Zasilanie różnych odbiorników, autokonsumpcja i opcjonalny backup.</td><td data-label="Ograniczenie">Moc, użyteczna pojemność, sprawność systemu, cykle i koszt.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-ts-note"><p><strong>Uczciwa granica porównania:</strong> jeżeli pytanie dotyczy wyłącznie przesunięcia ogrzewania, można porównać koszt dostarczenia tej samej ilości ciepła w tym samym czasie. Nie wolno jednak z tego wyciągać wniosku, że podłoga zastępuje wszystkie funkcje baterii.</p></div>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-tariffs">
      <span class="rk-ts-eyebrow">Cena z rynku to nie cały rachunek</span>
      <h2 class="rk-ts-section-title">Taryfy dynamiczne: kiedy przesunięcie poboru może obniżyć koszt?</h2>
      <p class="rk-ts-section-lead">Korzyść pojawia się wtedy, gdy różnica zmiennego kosztu energii jest większa od skutku gorszego COP, dodatkowych strat oraz kosztu sterowania. Potrzebna jest również realna możliwość ograniczenia pracy w drogim okresie.</p>
      <div class="rk-ts-step-grid">
        <article class="rk-ts-step"><span class="rk-ts-step-no">1</span><div><h3>Sprawdź własną umowę</h3><p>Formuła sprzedawcy może obejmować marżę, opłatę handlową, ograniczenia cen i zasady inne niż proste odwzorowanie notowania giełdowego.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">2</span><div><h3>Policz koszt zmienny</h3><p>Do każdej przesuwanej kWh przypisz energię oraz zmienne składniki dystrybucji. Opłaty stałe nie znikają po zmianie godziny poboru.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">3</span><div><h3>Porównaj COP</h3><p>Tania godzina może wystąpić przy niższej temperaturze zewnętrznej albo wymagać wyższej temperatury wody, co zmienia zużycie prądu.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">4</span><div><h3>Ogranicz liczbę cykli</h3><p>Nie każdy dzień ma wystarczające zapotrzebowanie na ciepło i korzystną różnicę cen. Latem podłoga nie tworzy popytu na ogrzewanie.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">5</span><div><h3>Zachowaj komfort</h3><p>Ładowanie kończy się wcześniej, jeżeli rośnie temperatura pomieszczeń, podłogi lub wrażliwej okładziny.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">6</span><div><h3>Policz koszt dodatkowy</h3><p>Istniejąca masa może nie wymagać zakupu, ale automatyka, integracja albo duży bufor są osobnym nakładem inwestycyjnym.</p></div></article>
      </div>
      <div class="rk-ts-warning"><p><strong>RCE nie jest synonimem ceny zakupu w umowie dynamicznej.</strong> Rynkowa cena energii używana w net-billingu prosumenckim i cena poboru wynikająca z oferty sprzedawcy to odrębne mechanizmy.</p></div>
      <p>W praktyce podłogówka może także współpracować z taryfą wielostrefową. Niezależnie od nazwy oferty należy policzyć faktyczny udział poboru w poszczególnych godzinach, a nie mnożyć całego rocznego zużycia przez najniższą stawkę.</p>
    </section>

    <section class="rk-ts-section" id="rk-ts-heat-pump">
      <span class="rk-ts-eyebrow">Źródło, pogoda i autokonsumpcja</span>
      <h2 class="rk-ts-section-title">Pompa ciepła i fotowoltaika — kiedy podłoga pomaga?</h2>
      <p class="rk-ts-section-lead">Podłoga może przyjąć część ciepła wytworzonego wtedy, gdy energia elektryczna jest tańsza lub pochodzi z bieżącej produkcji PV. Nie oznacza to jednak, że produkcja letnia ogrzeje dom zimą ani że każdy nadmiar PV da się zamienić na użyteczne ciepło.</p>
      <div class="rk-ts-grid-3">
        <article class="rk-ts-card"><span class="rk-ts-card-label is-green">Dobra sytuacja</span><h3>Jest popyt na ciepło</h3><p>Chłodny, słoneczny dzień może łączyć produkcję PV z możliwością niewielkiego podniesienia temperatury masy bez przegrzewania wnętrza.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Warunek</span><h3>Źródło ma zapas mocy</h3><p>Pompa musi pokryć aktualne straty i jednocześnie dostarczyć nadwyżkę. Sam duży magazyn nie zwiększa wydajności sprężarki.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Ryzyko</span><h3>Wyższy parametr obniża COP</h3><p>Jeżeli ładowanie wymaga znaczącego podniesienia temperatury zasilania, koszt dodatkowego prądu może skonsumować część różnicy cen.</p></article>
      </div>
      <p>Projekt <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">ogrzewania podłogowego z pompą ciepła</a> powinien sprawdzić moc powierzchniową, temperaturę wody, przepływy i dostępny zakres regulacji. Samo ustawienie stałego zasilania 35°C nie gwarantuje ani wymaganej mocy, ani dobrej efektywności sezonowej.</p>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-control">
      <span class="rk-ts-eyebrow">Algorytm ma chronić komfort i źródło</span>
      <h2 class="rk-ts-section-title">Jak sterować ładowaniem podłogi?</h2>
      <p class="rk-ts-section-lead">Sterowanie nie powinno polegać na bezwarunkowym podniesieniu temperatury zasilania w najtańszej godzinie. Potrzebne są ograniczenia, prognoza oraz zasady minimalnego czasu pracy i przepływu źródła.</p>
      <div class="rk-ts-grid-4">
        <article class="rk-ts-card"><span class="rk-ts-card-label">Pogoda</span><h3>Prognoza temperatury</h3><p>Decyduje, jak szybko budynek zużyje zapas i czy po tanim oknie nadal wystąpi zapotrzebowanie.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Słońce</span><h3>Prognoza zysków</h3><p>Duże przeszklenia mogą po nocnym ładowaniu otrzymać dodatkowe zyski słoneczne i doprowadzić do przegrzewania.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Źródło</span><h3>Minimalny przepływ</h3><p>Zamykanie wielu pętli nie może naruszać wymagań pompy ciepła ani powodować niestabilnej pracy hydraulicznej.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Komfort</span><h3>Limity stref</h3><p>Sypialnia, łazienka i salon mogą wymagać innych ograniczeń, ale nie każda instalacja dobrze znosi agresywne sterowanie strefowe.</p></article>
      </div>
      <p><a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">Sterowanie pogodowe podłogówką</a> pozostaje podstawą dostosowania temperatury wody do obciążenia. Sygnał ceny może być dodatkowym wejściem, lecz nie powinien omijać krzywej grzewczej, zabezpieczeń i logiki producenta źródła.</p>
      <div class="rk-ts-note"><p><strong>SG Ready albo Modbus nie są jedynymi możliwymi drogami integracji.</strong> Istotna jest udokumentowana kompatybilność konkretnego urządzenia, dopuszczone wejścia, interfejsy, minimalne czasy pracy oraz sposób reakcji na sygnał zewnętrzny.</p></div>
    </section>

    <section class="rk-ts-section" id="rk-ts-buffer">
      <span class="rk-ts-eyebrow">Hydraulika czy magazynowanie?</span>
      <h2 class="rk-ts-section-title">Czy pompa ciepła potrzebuje dużego bufora?</h2>
      <p class="rk-ts-section-lead">Pojemność bufora musi wynikać z jego funkcji. Mały zbiornik może zwiększać zład albo stabilizować przepływ, natomiast magazynowanie ciepła przez kilka godzin wymaga osobnego obliczenia energii, temperatur i miejsca.</p>
      <div class="rk-ts-table">
        <table>
          <thead><tr><th>Cel</th><th>Co trzeba policzyć?</th><th>Dlaczego sama liczba litrów nie wystarcza?</th></tr></thead>
          <tbody>
            <tr><th data-label="Cel">Minimalny zład źródła</th><td data-label="Co policzyć?">Wymagania urządzenia, objętość instalacji i sposób odszraniania.</td><td data-label="Dlaczego?">Potrzebna pojemność zależy od konstrukcji i sterowania konkretnej pompy.</td></tr>
            <tr><th data-label="Cel">Rozdzielenie hydrauliczne</th><td data-label="Co policzyć?">Przepływy źródła i odbiorników, pompy, opory i temperatury.</td><td data-label="Dlaczego?">Zbiornik może zmieniać temperaturę powrotu i efektywność układu.</td></tr>
            <tr><th data-label="Cel">Magazynowanie taryfowe</th><td data-label="Co policzyć?">Potrzebne kWh, użyteczne ΔT, straty, moc ładowania i temperaturę użyteczną dla podłogi.</td><td data-label="Dlaczego?">1000 litrów przy ΔT 5 K przechowuje około 5,8 kWh, a nie 34,8 kWh.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-ts-equation">
        <span class="rk-ts-equation-label">Uproszczona pojemność wody</span>
        <div class="rk-ts-equation-main">Q<sub>th</sub> ≈ objętość [l] × 1,163 Wh/(l·K) × użyteczne ΔT [K]</div>
        <p>Duże ΔT jest użyteczne tylko wtedy, gdy cały jego zakres pozostaje dostępny dla źródła i odbiorników. W niskotemperaturowej podłogówce nie należy automatycznie przyjmować 30 K.</p>
      </div>
      <p>Różnicę między funkcjami zbiornika rozwija poradnik o <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">buforze ciepła w ogrzewaniu podłogowym</a>. Dobór nie powinien zaczynać się od stwierdzenia, że 100, 500 albo 1000 litrów zawsze jest wartością właściwą.</p>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-example">
      <span class="rk-ts-eyebrow">Scenariusz, nie case study</span>
      <h2 class="rk-ts-section-title">Dom 150 m² — co naprawdę wynika z przykładu?</h2>
      <p class="rk-ts-section-lead">Przyjmijmy 150 m² aktywnej podłogi, efektywną warstwę 6,5 cm, gęstość 2400 kg/m³, ciepło właściwe 0,277 Wh/(kg·K) i zmianę średniej temperatury masy o 3 K.</p>
      <div class="rk-ts-table">
        <table>
          <thead><tr><th>Element</th><th>Założenie</th><th>Wynik</th><th>Jak go czytać?</th></tr></thead>
          <tbody>
            <tr><th data-label="Element">Wylewka</th><td data-label="Założenie">150 m² × 6,5 cm × 2400 kg/m³ × 0,277 Wh/(kg·K) × 3 K</td><td data-label="Wynik"><strong>około 19,45 kWh_th</strong></td><td data-label="Interpretacja">Teoretyczna pojemność wpisanej masy, nie gwarantowany zapas użytkowy.</td></tr>
            <tr><th data-label="Element">Bufor 1000 l</th><td data-label="Założenie">Użyteczne ΔT = 5 K</td><td data-label="Wynik"><strong>około 5,82 kWh_th</strong></td><td data-label="Interpretacja">Wynik zależy liniowo od rzeczywiście dostępnej różnicy temperatur.</td></tr>
            <tr><th data-label="Element">Ten sam bufor</th><td data-label="Założenie">ΔT = 30 K</td><td data-label="Wynik"><strong>około 34,89 kWh_th</strong></td><td data-label="Interpretacja">Wartość matematyczna nie potwierdza użyteczności całego zakresu dla podłogówki.</td></tr>
            <tr><th data-label="Element">CWU 300 l</th><td data-label="Założenie">Podgrzanie o 45 K</td><td data-label="Wynik"><strong>około 15,70 kWh_th</strong></td><td data-label="Interpretacja">Energia do ciepłej wody, nie czas ogrzewania pomieszczeń.</td></tr>
          </tbody>
        </table>
      </div>
      <div class="rk-ts-callout"><p><strong>Najważniejsza korekta:</strong> nie sumujemy automatycznie 19,45 + 34,89 + 15,70 kWh i nie nazywamy wyniku pojemnością podłogi. Są to trzy zasoby o różnych temperaturach, funkcjach i ograniczeniach.</p></div>
      <p>Przy COP równym 3 teoretyczne 19,45 kWh<sub>th</sub> w podłodze odpowiada około 6,48 kWh<sub>el</sub> pobranej przez pompę. To nadal nie oznacza pełnej równoważności z baterią 6,48 kWh, ponieważ różnią się moc, sprawność, sterowalność i zakres odbiorników.</p>
    </section>

    <section class="rk-ts-section" id="rk-ts-errors">
      <span class="rk-ts-eyebrow">Błędy, które zmieniają wniosek</span>
      <h2 class="rk-ts-section-title">Najczęstsze błędy przy traktowaniu podłogi jak magazynu</h2>
      <div class="rk-ts-grid-3">
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 1</span><h3>Sumowanie podłogi, bufora i CWU</h3><p>Matematyczna suma nie oznacza jednej dostępnej pojemności dla ogrzewania pomieszczeń.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 2</span><h3>Porównanie kWh bez COP</h3><p>Ciepło w betonie i prąd w baterii wymagają przeliczenia przez źródło oraz uwzględnienia funkcji końcowej.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 3</span><h3>Całe zużycie w taniej godzinie</h3><p>Przesunąć można tylko część poboru ograniczoną pojemnością, mocą, pogodą i komfortem.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 4</span><h3>Stałe COP przez całą dobę</h3><p>Warunki zewnętrzne i wymagany parametr wody mogą sprawić, że ładowanie będzie energetycznie droższe.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 5</span><h3>ΔT bufora bez temperatur</h3><p>Różnica 30 K nic nie daje, jeżeli dolna część zakresu nie ogrzeje podłogi albo górna pogarsza pracę źródła.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 6</span><h3>Brak zapasu mocy</h3><p>Źródło dobrane blisko obciążenia projektowego może nie naładować magazynu w krótkim oknie mrozowym.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 7</span><h3>Ignorowanie zysków słonecznych</h3><p>Nocne ładowanie przed słonecznym dniem może prowadzić do wzrostu temperatury ponad oczekiwanie.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 8</span><h3>Obietnica stałego zwrotu</h3><p>Ceny, liczba korzystnych godzin, pogoda i zachowanie użytkowników są zmienne.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Błąd 9</span><h3>Automatyka bez hydrauliki</h3><p>Zamykanie pętli i zmiana temperatury muszą respektować przepływ minimalny, pompę i równoważenie.</p></article>
      </div>
      <p>Jeżeli przepływy nie odpowiadają projektowi, najpierw trzeba zweryfikować rozdzielacz, nastawy i <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">pracę rotametrów</a>. Algorytm cenowy nie naprawi zapowietrzonych, zbyt długich ani źle zrównoważonych pętli.</p>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-data">
      <span class="rk-ts-eyebrow">Dane przed zakupem automatyki lub zbiornika</span>
      <h2 class="rk-ts-section-title">Co trzeba znać, aby policzyć magazynowanie odpowiedzialnie?</h2>
      <p class="rk-ts-section-lead">Rzetelny model zaczyna się od budynku i instalacji, a nie od ceny bufora albo najniższej godziny na wykresie rynku energii.</p>
      <div class="rk-ts-step-grid">
        <article class="rk-ts-step"><span class="rk-ts-step-no">1</span><div><h3>Straty każdego pomieszczenia</h3><p>Określają potrzebną moc, szybkość rozładowania i ryzyko niedogrzania po zatrzymaniu źródła.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">2</span><div><h3>Warstwy i powierzchnia czynna</h3><p>Potrzebne są grubości, materiały, izolacja, rozmieszczenie rur, strefy wyłączone i okładziny.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">3</span><div><h3>Moc i charakterystyka źródła</h3><p>Sprawdź wydajność dla analizowanej temperatury zewnętrznej i zasilania, modulację oraz wymagany przepływ.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">4</span><div><h3>Przepływy i opory</h3><p>Ładowanie wymaga dostarczenia dodatkowej mocy do konkretnych stref bez przekroczenia możliwości pompy obiegowej.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">5</span><div><h3>Temperatury graniczne</h3><p>Uwzględnij komfort, pomieszczenie, okładzinę, wymagania materiałów i dopuszczony zakres źródła.</p></div></article>
        <article class="rk-ts-step"><span class="rk-ts-step-no">6</span><div><h3>Rzeczywista formuła cenowa</h3><p>Potrzebne są zasady konkretnego sprzedawcy, koszty zmienne, licznik oraz dostępność danych i sterowania.</p></div></article>
      </div>
      <p>Podstawą jest <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">profesjonalny projekt ogrzewania podłogowego</a>, w którym rozstaw, długość pętli, przepływ i temperatura wynikają z obliczeń, a nie z jednego ustawienia dla całego domu.</p>
    </section>

    <section class="rk-ts-section" id="rk-ts-summary">
      <span class="rk-ts-eyebrow">Wniosek bez wojny technologii</span>
      <h2 class="rk-ts-section-title">Podłoga jest wartościową masą akumulacyjną, ale nie darmową baterią</h2>
      <p class="rk-ts-section-lead">Największą korzyścią jest możliwość przesunięcia części pracy ogrzewania bez kupowania osobnego magazynu elektrycznego. Skala tej korzyści musi jednak wynikać z użytecznej pojemności, strat budynku, mocy źródła, COP, komfortu i rzeczywistych cen.</p>
      <div class="rk-ts-grid-3">
        <article class="rk-ts-card"><span class="rk-ts-card-label is-green">Warto wykorzystać</span><h3>Istniejącą bezwładność</h3><p>Łagodne, prognozowane przesunięcie pracy może wspierać taryfę wielostrefową, dynamiczną lub autokonsumpcję PV.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label">Trzeba policzyć</span><h3>Energię, moc i czas</h3><p>Jedna liczba kWh nie odpowiada na pytanie o możliwość ładowania, czas pokrycia strat i temperaturę pomieszczeń.</p></article>
        <article class="rk-ts-card"><span class="rk-ts-card-label is-orange">Nie należy obiecywać</span><h3>Stałych oszczędności</h3><p>Różnice cen, pogoda, COP i liczba użytecznych cykli zmieniają się; dlatego wynik pozostaje scenariuszem.</p></article>
      </div>
      <div class="rk-ts-cta">
        <span class="rk-ts-eyebrow">Końcowy krok projektowy</span>
        <div class="rk-ts-cta-title">Zaprojektuj podłogówkę jako instalację grzewczą — jej zdolność do przesuwania ciepła będzie wtedy dodatkową korzyścią</div>
        <p>Otrzymasz rozstaw i przebieg rur, podział na pętle, długości, przepływy, nastawy oraz parametry potrzebne do współpracy ze źródłem. Najpierw zapewniamy moc i komfort, a później budujemy bezpieczną strategię sterowania.</p>
        <a class="rk-ts-cta-button" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt ogrzewania podłogowego</a>
        <small class="rk-ts-disclosure">Odnośnik prowadzi do płatnej usługi projektowej autora poradnika.</small>
      </div>
    </section>

    <section class="rk-ts-section rk-ts-section-soft" id="rk-ts-sources">
      <span class="rk-ts-eyebrow">Dokumenty oficjalne</span>
      <h2 class="rk-ts-section-title">Źródła techniczne i zakres obliczeń</h2>
      <p class="rk-ts-section-lead">Linki zewnętrzne znajdują się wyłącznie w tej sekcji. Prowadzą do regulatora rynku, operatora systemu oraz oficjalnych kart norm.</p>
      <ul class="rk-ts-sources">
        <li><a href="https://www.ure.gov.pl/pl/urzad/informacje-ogolne/aktualnosci/12134,Rachunki-za-energie-elektryczna-od-24-sierpnia-2024-r-gospodarstwa-domowe-moga-z.html" target="_blank" rel="nofollow noopener noreferrer">Urząd Regulacji Energetyki — umowy z ceną dynamiczną</a><span>Warunki korzystania, licznik zdalnego odczytu, formuła sprzedawcy, ryzyko, opłaty i różnica między zakupem energii a rozliczeniem prosumenta.</span></li>
        <li><a href="https://www.pse.pl/oire/rce-rynkowa-cena-energii-elektrycznej" target="_blank" rel="nofollow noopener noreferrer">Polskie Sieci Elektroenergetyczne — Rynkowa Cena Energii</a><span>Oficjalna publikacja danych RCE. Dane te nie zastępują formuły ceny zakupu zawartej w umowie odbiorcy.</span></li>
        <li><a href="https://www.iso.org/standard/74686.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-4:2021 — dynamiczna moc systemów aktywowanych cieplnie</a><span>Oficjalna karta normy dotyczącej obliczeń w warunkach nieustalonych.</span></li>
        <li><a href="https://www.iso.org/standard/65696.html" target="_blank" rel="nofollow noopener noreferrer">ISO 52016-1:2017 — energia, temperatury wewnętrzne i obciążenia</a><span>Oficjalna karta metod godzinowych i miesięcznych dla potrzeb ogrzewania, chłodzenia i temperatur wewnętrznych.</span></li>
        <li><a href="https://www.iso.org/standard/64999.html" target="_blank" rel="nofollow noopener noreferrer">ISO 11855-6:2018 — sterowanie systemami płaszczyznowymi</a><span>Oficjalna karta części normy poświęconej sterowaniu wbudowanymi systemami ogrzewania i chłodzenia.</span></li>
        <li><a href="https://build-up.ec.europa.eu/en/resources-and-tools/tools/tool-epb-standard-en-iso-52016-12017-calculations" target="_blank" rel="nofollow noopener noreferrer">Komisja Europejska BUILD UP — narzędzie do EN ISO 52016-1</a><span>Materiał instytucjonalny pokazujący zastosowanie obliczeń godzinowych temperatur i obciążeń budynku.</span></li>
      </ul>
      <div class="rk-ts-responsibility"><p><strong>Zakres odpowiedzialności:</strong> kalkulator wykonuje uproszczony bilans pojemności cieplnej i scenariusz kosztowy. Nie modeluje warstw w czasie, zysków słonecznych, temperatury powierzchni, sprzężeń regulacji, odszraniania ani pełnej formuły rachunku. Dane konkretnego budynku i urządzeń mają pierwszeństwo.</p></div>
    </section>

    <section class="rk-ts-section" id="rk-ts-faq">
      <span class="rk-ts-eyebrow">Rozbudowane pytania i odpowiedzi</span>
      <h2 class="rk-ts-section-title">FAQ — ogrzewanie podłogowe jako magazyn energii</h2>
      <div class="rk-ts-faq">
        <details><summary>Czy podłoga jest magazynem energii?</summary><div class="rk-ts-faq-answer"><p>Tak, masywna podłoga może magazynować energię w postaci ciepła jawnego. Nie magazynuje jednak prądu i nie zasila odbiorników elektrycznych. Jej użyteczność ograniczają komfort, temperatura, dynamika warstw, straty budynku oraz możliwość sterowania źródłem.</p></div></details>
        <details><summary>Ile kWh może zgromadzić podłoga o powierzchni 150 m²?</summary><div class="rk-ts-faq-answer"><p>Wynik zależy od efektywnej grubości, gęstości, ciepła właściwego i zmiany średniej temperatury. Dla 150 m², 6,5 cm, 2400 kg/m³, 0,277 Wh/(kg·K) i 1 K jest to około 6,48 kWh ciepła; dla 3 K około 19,45 kWh. Są to wartości teoretyczne dla przyjętej masy.</p></div></details>
        <details><summary>Czy 20 kWh ciepła w podłodze odpowiada baterii 20 kWh?</summary><div class="rk-ts-faq-answer"><p>Nie. Podłoga przechowuje ciepło, a bateria energię elektryczną. Przy COP pompy równym 3 dostarczenie 20 kWh ciepła wymaga orientacyjnie około 6,7 kWh prądu. Bateria może ponadto zasilać wiele innych odbiorników, czego podłoga nie potrafi.</p></div></details>
        <details><summary>Czy energię z zasobnika CWU można dodać do pojemności podłogi?</summary><div class="rk-ts-faq-answer"><p>Można ją policzyć jako osobny zasób ciepła, ale nie należy dodawać jej do autonomii ogrzewania pomieszczeń. Zasobnik CWU realizuje potrzeby ciepłej wody użytkowej i zwykle nie oddaje energii do pętli podłogowych.</p></div></details>
        <details><summary>Czy podniesienie temperatury wylewki o 3 K jest zawsze bezpieczne?</summary><div class="rk-ts-faq-answer"><p>Nie. Zależy to od temperatury wyjściowej, konstrukcji podłogi, okładziny, temperatury powierzchni, pomieszczenia, zysków słonecznych i oczekiwań użytkownika. Kalkulator pozwala wpisać 3 K, ale nie stanowi to potwierdzenia dopuszczalności takiego cyklu.</p></div></details>
        <details><summary>Jak długo podłoga będzie oddawać zgromadzone ciepło?</summary><div class="rk-ts-faq-answer"><p>Orientacyjnie czas można oszacować, dzieląc użyteczne kWh ciepła przez aktualne straty budynku w kW. Rzeczywisty przebieg nie jest liniowy i zależy od temperatur warstw, powietrza, pogody, wentylacji oraz zysków wewnętrznych i słonecznych.</p></div></details>
        <details><summary>Czy duży bufor zawsze zwiększa oszczędności pompy ciepła?</summary><div class="rk-ts-faq-answer"><p>Nie. Może zwiększyć pojemność, ale zajmuje miejsce, kosztuje, ma straty postojowe i może wymagać wyższych temperatur. Jeżeli pogarsza COP albo różnica cen jest mała, zwrot z zakupu wyłącznie dla magazynowania może nie wystąpić.</p></div></details>
        <details><summary>Ile energii przechowuje bufor 1000 litrów?</summary><div class="rk-ts-faq-answer"><p>Przy użytecznej różnicy temperatur 5 K jest to około 5,8 kWh ciepła. Przy 10 K około 11,6 kWh, a przy 30 K około 34,9 kWh. Najważniejsze pytanie brzmi jednak, jaki zakres temperatur jest rzeczywiście użyteczny dla źródła i podłogówki.</p></div></details>
        <details><summary>Czy taryfa dynamiczna zawsze obniża koszt ogrzewania?</summary><div class="rk-ts-faq-answer"><p>Nie. Wymaga aktywnego zarządzania poborem i wiąże się z ryzykiem drogich okresów. Trzeba uwzględnić formułę sprzedawcy, opłaty, licznik, różnicę COP, liczbę cykli, komfort i możliwość realnego ograniczenia pracy w drogich godzinach.</p></div></details>
        <details><summary>Czy RCE jest ceną prądu w taryfie dynamicznej?</summary><div class="rk-ts-faq-answer"><p>Nie automatycznie. RCE jest wykorzystywana m.in. w rozliczeniach energii wprowadzanej przez prosumentów. Cena energii pobieranej w umowie dynamicznej wynika z formuły konkretnego sprzedawcy i może opierać się na innych notowaniach oraz zawierać dodatkowe składniki.</p></div></details>
        <details><summary>Czy lepiej ładować podłogę nocą czy w dzień?</summary><div class="rk-ts-faq-answer"><p>Nie ma jednej odpowiedzi. Noc może mieć niższą cenę, ale także niższą temperaturę zewnętrzną i gorszy COP. W dzień mogą wystąpić produkcja PV, wyższy COP oraz zyski słoneczne zwiększające ryzyko przegrzania. Potrzebna jest prognoza i model konkretnego budynku.</p></div></details>
        <details><summary>Czy potrzebny jest protokół SG Ready lub Modbus?</summary><div class="rk-ts-faq-answer"><p>Nie są to jedyne możliwe sposoby integracji. Najważniejsze jest, aby producent dopuszczał wybrany sygnał i sposób sterowania, a algorytm respektował temperatury, minimalne czasy pracy, przepływy i zabezpieczenia. Kompatybilność trzeba sprawdzić dla konkretnego urządzenia.</p></div></details>
        <details><summary>Czy sterowanie strefowe pomaga w magazynowaniu ciepła?</summary><div class="rk-ts-faq-answer"><p>Może ograniczyć ładowanie wybranych pomieszczeń, ale zamykanie pętli zmienia przepływy i warunki pracy źródła. Nie powinno naruszać minimalnego przepływu ani powodować taktowania. Decyzja zależy od hydrauliki i sposobu regulacji instalacji.</p></div></details>
        <details><summary>Czy kalkulator zastępuje OZC i projekt podłogówki?</summary><div class="rk-ts-faq-answer"><p>Nie. Kalkulator szacuje pojemność oraz koszt dla jawnych założeń. OZC określa obciążenia pomieszczeń, a projekt sprawdza moc powierzchniową, rozstaw, długości pętli, temperatury, przepływy, opory i współpracę ze źródłem ciepła.</p></div></details>
      </div>
    </section>

    <section class="rk-ts-section" id="rk-ts-author" aria-labelledby="rk-ts-author-heading">
      <div class="rk-ts-author">
        <div class="rk-ts-author-head">
          <div>
            <span class="rk-ts-eyebrow">E-E-A-T i odpowiedzialność za treść</span>
            <h2 id="rk-ts-author-heading">Autor i weryfikacja merytoryczna</h2>
            <p>Treść przygotowana z perspektywy bilansu cieplnego, hydrauliki podłogówki, dynamiki budynku i kosztu energii.</p>
          </div>
          <span class="rk-ts-author-mark">Aktualizacja: 16.09.2026</span>
        </div>
        <div class="rk-ts-author-layout">
          <aside class="rk-ts-author-side">
            <div class="rk-ts-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji grzewczych" width="400" height="400" loading="lazy" decoding="async"></div>
            <div class="rk-ts-author-name"><a href="https://projekt-ogrzewania.pl/author/admin3399/">Robert Kucharski</a></div>
            <p class="rk-ts-author-role">Projektant instalacji sanitarnych<br>specjalista HVAC i ogrzewania podłogowego</p>
            <div class="rk-ts-author-social-label">Profile branżowe</div>
            <div class="rk-ts-author-social" aria-label="Profile branżowe Roberta Kucharskiego">
              <a href="https://www.linkedin.com/in/robert-kucharski-b8b906199/" target="_blank" rel="nofollow noopener noreferrer me" aria-label="LinkedIn Roberta Kucharskiego"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6.5 8.2H3.2V21h3.3V8.2ZM4.85 3A1.92 1.92 0 1 0 4.9 6.84 1.92 1.92 0 0 0 4.85 3ZM21 13.66c0-3.86-2.06-5.66-4.81-5.66a4.14 4.14 0 0 0-3.75 2.06V8.2H9.12V21h3.32v-6.34c0-1.67.32-3.29 2.39-3.29 2.04 0 2.07 1.91 2.07 3.4V21H21v-7.34Z"></path></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt Ogrzewania na Facebooku"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M14 8.5V7c0-.74.5-.92.85-.92H17V3.13L14.05 3C11.13 3 10.47 5.16 10.47 6.55V8.5H8v3.36h2.47V21H14v-9.14h2.7l.44-3.36H14Z"></path></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="nofollow noopener noreferrer me" aria-label="Projekt HVAC w serwisie X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 3H22l-6.77 7.74L23.2 21h-6.24l-4.89-6.39L6.49 21H3.38l7.24-8.28L2.98 3h6.4l4.42 5.84L18.9 3Zm-1.09 16.2h1.72L8.44 4.7H6.59l11.22 14.5Z"></path></svg></a>
            </div>
          </aside>
          <div class="rk-ts-author-main">
            <blockquote class="rk-ts-author-quote"><p>Moim zdaniem największym błędem nie jest niedoszacowanie samej masy podłogi, lecz porównywanie kWh ciepła z kWh prądu bez COP, czasu, mocy i celu wykorzystania. Dobrze zaprojektowana podłogówka może przesuwać pobór, ale najpierw musi prawidłowo ogrzewać każde pomieszczenie.</p></blockquote>
            <div class="rk-ts-author-cards">
              <div class="rk-ts-author-card"><b>Praktyka projektowa</b><p>OZC, rozstawy, pętle, temperatury, przepływy, opory oraz współpraca ogrzewania podłogowego z pompą ciepła.</p></div>
              <div class="rk-ts-author-card"><b>Metoda</b><p>Oddzielenie pojemności cieplnej od mocy, prądu, CWU i finansów oraz ujawnienie każdego założenia kalkulatora.</p></div>
              <div class="rk-ts-author-card"><b>Zakres aktualizacji</b><p>Nowy kalkulator, wykres, sześciomodułowa grafika, uczciwa analiza taryf i rozbudowane FAQ.</p></div>
            </div>
            <div class="rk-ts-author-mini-label">Portale autora</div>
            <div class="rk-ts-portals">
              <a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a>
              <a href="https://remont.biz.pl/" target="_blank" rel="nofollow noopener noreferrer">Remont.biz.pl</a>
              <a href="https://sobir.pl/" target="_blank" rel="nofollow noopener noreferrer">Sobir.pl</a>
            </div>
          </div>
        </div>
      </div>
    </section>
  </article>
</div>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "inLanguage": "pl-PL"
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt-Ogrzewania.pl",
      "url": "https://projekt-ogrzewania.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC"
      ]
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" }
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/admin3399/",
      "image": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski-image" },
      "jobTitle": "Projektant instalacji sanitarnych i specjalista HVAC",
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "pompy ciepła",
        "pojemność cieplna budynków",
        "obliczenia OZC",
        "hydraulika instalacji grzewczych",
        "sterowanie ogrzewaniem"
      ],
      "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/#robert-kucharski-image",
      "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "width": 400,
      "height": 400,
      "caption": "Robert Kucharski — projektant instalacji sanitarnych"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#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": "Podłoga jako magazyn ciepła",
          "item": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/"
        }
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#webpage",
      "url": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/",
      "name": "Podłoga jako magazyn ciepła – ile energii naprawdę może zgromadzić?",
      "description": "Kalkulator pojemności cieplnej podłogi i bufora: kWh ciepła, energia elektryczna pompy ciepła, moc ładowania, taryfy i koszt przesuwania poboru.",
      "isPartOf": { "@id": "https://projekt-ogrzewania.pl/#website" },
      "breadcrumb": { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#breadcrumb" },
      "dateModified": "2026-09-16T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "mainEntity": { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#article" }
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#article",
      "mainEntityOfPage": { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#webpage" },
      "headline": "Podłoga jako magazyn ciepła – ile energii naprawdę może zgromadzić?",
      "description": "Techniczny poradnik o pojemności cieplnej wylewki, bufora, pracy pompy ciepła i ekonomice przesuwania poboru energii.",
      "author": { "@id": "https://projekt-ogrzewania.pl/#robert-kucharski" },
      "publisher": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "dateModified": "2026-09-16T12:00:00+02:00",
      "inLanguage": "pl-PL",
      "about": [
        "ogrzewanie podłogowe jako magazyn energii",
        "pojemność cieplna wylewki",
        "bufor ciepła",
        "pompa ciepła",
        "taryfa dynamiczna",
        "bezwładność cieplna"
      ],
      "keywords": "podłoga jako magazyn ciepła, magazyn energii w podłodze, pojemność cieplna wylewki, bufor ciepła, pompa ciepła, kalkulator kWh ciepła",
      "isAccessibleForFree": true,
      "hasPart": [
        { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#calculator" },
        { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#howto" },
        { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#elements" },
        { "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#faq-schema" }
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#calculator",
      "name": "Kalkulator pojemności cieplnej podłogi, bufora i kosztu przesuwania poboru",
      "url": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#rk-ts-calculator",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Dowolny system z nowoczesną przeglądarką internetową",
      "browserRequirements": "JavaScript",
      "isAccessibleForFree": true,
      "inLanguage": "pl-PL",
      "description": "Narzędzie edukacyjne obliczające teoretyczną i użyteczną pojemność cieplną, czas pokrycia strat, wymaganą moc ładowania, zużycie prądu oraz prosty wynik finansowy."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#howto",
      "name": "Jak ocenić możliwość wykorzystania podłogi jako magazynu ciepła",
      "description": "Sześć kroków od danych warstw podłogi do sprawdzenia mocy, komfortu i ekonomiki przesuwania poboru energii.",
      "totalTime": "PT20M",
      "step": [
        { "@type": "HowToStep", "position": 1, "name": "Ustal aktywną masę podłogi", "text": "Określ aktywną powierzchnię, efektywną grubość, gęstość i ciepło właściwe warstwy uczestniczącej w cyklu." },
        { "@type": "HowToStep", "position": 2, "name": "Przyjmij dopuszczalną zmianę temperatury", "text": "Wybierz zmianę średniej temperatury z uwzględnieniem komfortu, okładziny i sterowania." },
        { "@type": "HowToStep", "position": 3, "name": "Oblicz pojemność cieplną", "text": "Pomnóż powierzchnię, grubość, gęstość, ciepło właściwe i zmianę temperatury, zachowując właściwe jednostki." },
        { "@type": "HowToStep", "position": 4, "name": "Oddziel ciepło od energii elektrycznej", "text": "Przelicz wymagane ciepło na pobór prądu z użyciem COP właściwego dla warunków ładowania." },
        { "@type": "HowToStep", "position": 5, "name": "Sprawdź moc i czas", "text": "Porównaj moc potrzebną do bieżącego pokrycia strat i ładowania z dostępną mocą źródła oraz długością okna." },
        { "@type": "HowToStep", "position": 6, "name": "Oceń koszt i ograniczenia", "text": "Użyj cen z własnej umowy, uwzględnij dodatkowe straty, liczbę realnych cykli i koszt rozwiązania." }
      ]
    },
    {
      "@type": "ItemList",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#elements",
      "name": "Elementy, których nie należy łączyć w jeden wynik magazynowania energii",
      "numberOfItems": 6,
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Wylewka i podłoga" },
        { "@type": "ListItem", "position": 2, "name": "Bufor instalacyjny" },
        { "@type": "ListItem", "position": 3, "name": "Zasobnik ciepłej wody użytkowej" },
        { "@type": "ListItem", "position": 4, "name": "Akumulator elektryczny" },
        { "@type": "ListItem", "position": 5, "name": "COP pompy ciepła" },
        { "@type": "ListItem", "position": 6, "name": "Straty cieplne budynku" }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/#faq-schema",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Czy podłoga jest magazynem energii?",
          "acceptedAnswer": { "@type": "Answer", "text": "Tak, masywna podłoga może magazynować energię w postaci ciepła jawnego. Nie magazynuje jednak prądu i nie zasila odbiorników elektrycznych. Jej użyteczność ograniczają komfort, temperatura, dynamika warstw, straty budynku oraz możliwość sterowania źródłem." }
        },
        {
          "@type": "Question",
          "name": "Ile kWh może zgromadzić podłoga o powierzchni 150 m²?",
          "acceptedAnswer": { "@type": "Answer", "text": "Wynik zależy od efektywnej grubości, gęstości, ciepła właściwego i zmiany średniej temperatury. Dla 150 m², 6,5 cm, 2400 kg/m³, 0,277 Wh/(kg·K) i 1 K jest to około 6,48 kWh ciepła; dla 3 K około 19,45 kWh. Są to wartości teoretyczne dla przyjętej masy." }
        },
        {
          "@type": "Question",
          "name": "Czy 20 kWh ciepła w podłodze odpowiada baterii 20 kWh?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Podłoga przechowuje ciepło, a bateria energię elektryczną. Przy COP pompy równym 3 dostarczenie 20 kWh ciepła wymaga orientacyjnie około 6,7 kWh prądu. Bateria może ponadto zasilać wiele innych odbiorników, czego podłoga nie potrafi." }
        },
        {
          "@type": "Question",
          "name": "Czy energię z zasobnika CWU można dodać do pojemności podłogi?",
          "acceptedAnswer": { "@type": "Answer", "text": "Można ją policzyć jako osobny zasób ciepła, ale nie należy dodawać jej do autonomii ogrzewania pomieszczeń. Zasobnik CWU realizuje potrzeby ciepłej wody użytkowej i zwykle nie oddaje energii do pętli podłogowych." }
        },
        {
          "@type": "Question",
          "name": "Czy podniesienie temperatury wylewki o 3 K jest zawsze bezpieczne?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Zależy to od temperatury wyjściowej, konstrukcji podłogi, okładziny, temperatury powierzchni, pomieszczenia, zysków słonecznych i oczekiwań użytkownika. Kalkulator pozwala wpisać 3 K, ale nie stanowi to potwierdzenia dopuszczalności takiego cyklu." }
        },
        {
          "@type": "Question",
          "name": "Jak długo podłoga będzie oddawać zgromadzone ciepło?",
          "acceptedAnswer": { "@type": "Answer", "text": "Orientacyjnie czas można oszacować, dzieląc użyteczne kWh ciepła przez aktualne straty budynku w kW. Rzeczywisty przebieg nie jest liniowy i zależy od temperatur warstw, powietrza, pogody, wentylacji oraz zysków wewnętrznych i słonecznych." }
        },
        {
          "@type": "Question",
          "name": "Czy duży bufor zawsze zwiększa oszczędności pompy ciepła?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Może zwiększyć pojemność, ale zajmuje miejsce, kosztuje, ma straty postojowe i może wymagać wyższych temperatur. Jeżeli pogarsza COP albo różnica cen jest mała, zwrot z zakupu wyłącznie dla magazynowania może nie wystąpić." }
        },
        {
          "@type": "Question",
          "name": "Ile energii przechowuje bufor 1000 litrów?",
          "acceptedAnswer": { "@type": "Answer", "text": "Przy użytecznej różnicy temperatur 5 K jest to około 5,8 kWh ciepła. Przy 10 K około 11,6 kWh, a przy 30 K około 34,9 kWh. Najważniejsze pytanie brzmi jednak, jaki zakres temperatur jest rzeczywiście użyteczny dla źródła i podłogówki." }
        },
        {
          "@type": "Question",
          "name": "Czy taryfa dynamiczna zawsze obniża koszt ogrzewania?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Wymaga aktywnego zarządzania poborem i wiąże się z ryzykiem drogich okresów. Trzeba uwzględnić formułę sprzedawcy, opłaty, licznik, różnicę COP, liczbę cykli, komfort i możliwość realnego ograniczenia pracy w drogich godzinach." }
        },
        {
          "@type": "Question",
          "name": "Czy RCE jest ceną prądu w taryfie dynamicznej?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie automatycznie. RCE jest wykorzystywana m.in. w rozliczeniach energii wprowadzanej przez prosumentów. Cena energii pobieranej w umowie dynamicznej wynika z formuły konkretnego sprzedawcy i może opierać się na innych notowaniach oraz zawierać dodatkowe składniki." }
        },
        {
          "@type": "Question",
          "name": "Czy lepiej ładować podłogę nocą czy w dzień?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie ma jednej odpowiedzi. Noc może mieć niższą cenę, ale także niższą temperaturę zewnętrzną i gorszy COP. W dzień mogą wystąpić produkcja PV, wyższy COP oraz zyski słoneczne zwiększające ryzyko przegrzania. Potrzebna jest prognoza i model konkretnego budynku." }
        },
        {
          "@type": "Question",
          "name": "Czy potrzebny jest protokół SG Ready lub Modbus?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie są to jedyne możliwe sposoby integracji. Najważniejsze jest, aby producent dopuszczał wybrany sygnał i sposób sterowania, a algorytm respektował temperatury, minimalne czasy pracy, przepływy i zabezpieczenia. Kompatybilność trzeba sprawdzić dla konkretnego urządzenia." }
        },
        {
          "@type": "Question",
          "name": "Czy sterowanie strefowe pomaga w magazynowaniu ciepła?",
          "acceptedAnswer": { "@type": "Answer", "text": "Może ograniczyć ładowanie wybranych pomieszczeń, ale zamykanie pętli zmienia przepływy i warunki pracy źródła. Nie powinno naruszać minimalnego przepływu ani powodować taktowania. Decyzja zależy od hydrauliki i sposobu regulacji instalacji." }
        },
        {
          "@type": "Question",
          "name": "Czy kalkulator zastępuje OZC i projekt podłogówki?",
          "acceptedAnswer": { "@type": "Answer", "text": "Nie. Kalkulator szacuje pojemność oraz koszt dla jawnych założeń. OZC określa obciążenia pomieszczeń, a projekt sprawdza moc powierzchniową, rozstaw, długości pętli, temperatury, przepływy, opory i współpracę ze źródłem ciepła." }
        }
      ]
    },
    {
      "@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/",
      "serviceType": "Projekt ogrzewania podłogowego z obliczeniami cieplnymi i hydraulicznymi",
      "provider": { "@id": "https://projekt-ogrzewania.pl/#organization" },
      "areaServed": { "@type": "Country", "name": "Polska" },
      "inLanguage": "pl-PL"
    }
  ]
}
</script>

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

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

  var storeData = {
    floor: {
      title: "Wylewka i podłoga",
      summary: "Masywne warstwy ogrzewanej podłogi przechowują ciepło jawne. Im większa aktywna masa i zmiana jej średniej temperatury, tym większy teoretyczny zapas.",
      energy: "ciepło w masie materiału",
      use: "potrzeby cieplne pomieszczeń",
      limit: "komfort, okładzina, moc i czas reakcji",
      warning: "takiej samej pojemności baterii elektrycznej"
    },
    buffer: {
      title: "Bufor instalacyjny",
      summary: "Woda w buforze przechowuje ciepło zależnie od objętości i użytecznej różnicy temperatur. Duży zakres katalogowy nie zawsze jest dostępny dla niskotemperaturowej podłogówki.",
      energy: "ciepło w wodzie instalacyjnej",
      use: "obieg grzewczy zgodnie ze schematem hydraulicznym",
      limit: "użyteczne ΔT, straty postojowe i temperatury pracy",
      warning: "automatycznej poprawy sprawności pompy ciepła"
    },
    dhw: {
      title: "Zasobnik ciepłej wody użytkowej",
      summary: "Zasobnik CWU może przesuwać czas przygotowania ciepłej wody, ale jego energia realizuje inny cel niż pokrywanie strat cieplnych pomieszczeń.",
      energy: "ciepło przeznaczone na wodę użytkową",
      use: "kąpiele, mycie i pozostałe rozbiory CWU",
      limit: "higiena, komfort, straty postojowe i harmonogram poboru",
      warning: "autonomii ogrzewania budynku"
    },
    battery: {
      title: "Akumulator elektryczny",
      summary: "Bateria przechowuje energię elektryczną i może zasilać wiele odbiorników. Jej pojemność, moc, sprawność i wartość użytkowa są inne niż w magazynie cieplnym.",
      energy: "energię elektryczną",
      use: "pompę ciepła i inne odbiorniki w granicach mocy",
      limit: "pojemność użyteczna, moc, sprawność i degradacja",
      warning: "bezpośrednio porównywalnego magazynu ciepła"
    },
    cop: {
      title: "COP pompy ciepła",
      summary: "COP łączy energię elektryczną pobraną przez pompę z ciepłem oddanym do instalacji. Zmienia się wraz z temperaturą zewnętrzną, zasilaniem i trybem pracy.",
      energy: "nie magazynuje energii — jest współczynnikiem",
      use: "przeliczenie kWh_el na kWh_th w danych warunkach",
      limit: "pogoda, temperatura wody, odszranianie i modulacja",
      warning: "stałej wartości sezonowej dla każdej godziny"
    },
    loss: {
      title: "Straty cieplne budynku",
      summary: "Straty określają tempo rozładowywania magazynu. Ten sam zapas ciepła wystarczy na inny czas przy temperaturze +5°C i inny podczas mrozu.",
      energy: "nie magazynuje — opisuje odpływ ciepła",
      use: "wyznaczenie czasu pokrycia potrzeb budynku",
      limit: "pogoda, wentylacja, szczelność i temperatura wewnętrzna",
      warning: "stałego czasu autonomii przez cały sezon"
    }
  };

  var storeButtons = root.querySelectorAll("[data-rk-store]");

  function setText(id, value) {
    var element = document.getElementById(id);
    if (!element) {
      return;
    }
    element.textContent = value;
  }

  function showStore(key) {
    var data = storeData[key];
    if (!data) {
      return;
    }
    setText("rk-ts-store-title", data.title);
    setText("rk-ts-store-summary", data.summary);
    setText("rk-ts-store-energy", data.energy);
    setText("rk-ts-store-use", data.use);
    setText("rk-ts-store-limit", data.limit);
    setText("rk-ts-store-warning", data.warning);
    storeButtons.forEach(function (button) {
      var selected = button.getAttribute("data-rk-store") === key;
      button.setAttribute("aria-selected", selected ? "true" : "false");
    });
  }

  storeButtons.forEach(function (button) {
    button.addEventListener("click", function () {
      showStore(button.getAttribute("data-rk-store"));
    });
  });

  var defaults = {
    "rk-ts-area": "150",
    "rk-ts-thickness": "6.5",
    "rk-ts-density": "2400",
    "rk-ts-specific": "0.277",
    "rk-ts-delta": "1",
    "rk-ts-buffer-liters": "0",
    "rk-ts-buffer-delta": "5",
    "rk-ts-usable": "60",
    "rk-ts-loss": "5",
    "rk-ts-pump-power": "8",
    "rk-ts-window": "4",
    "rk-ts-cycle-loss": "5",
    "rk-ts-cop-reference": "3.2",
    "rk-ts-cop-charge": "3",
    "rk-ts-price-high": "1.10",
    "rk-ts-price-low": "0.65",
    "rk-ts-days": "180",
    "rk-ts-investment": "1500",
    "rk-ts-years": "15"
  };

  function numberFrom(id, fallback) {
    var input = document.getElementById(id);
    if (!input) {
      return fallback;
    }
    var value = parseFloat(String(input.value).replace(",", "."));
    if (!Number.isFinite(value)) {
      return fallback;
    }
    return value;
  }

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

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

  function formatCurrency(value, digits) {
    if (!Number.isFinite(value)) {
      return "—";
    }
    return new Intl.NumberFormat("pl-PL", {
      style: "currency",
      currency: "PLN",
      minimumFractionDigits: digits,
      maximumFractionDigits: digits
    }).format(value);
  }

  function validateInputs() {
    var issues = [];
    var inputs = root.querySelectorAll("#rk-ts-tool input[type='number']");
    inputs.forEach(function (input) {
      var value = parseFloat(String(input.value).replace(",", "."));
      var minimum = parseFloat(input.getAttribute("min"));
      var maximum = parseFloat(input.getAttribute("max"));
      if (!Number.isFinite(value)) {
        issues.push("Uzupełnij wszystkie pola liczbowe.");
        return;
      }
      if (Number.isFinite(minimum)) {
        if (value < minimum) {
          issues.push("Jedna z wartości jest niższa od zakresu pola.");
        }
      }
      if (Number.isFinite(maximum)) {
        if (value > maximum) {
          issues.push("Jedna z wartości przekracza zakres pola.");
        }
      }
    });
    var validation = document.getElementById("rk-ts-validation");
    if (!validation) {
      return issues;
    }
    if (issues.length > 0) {
      validation.textContent = issues[0] + " Popraw dane, aby wynik był miarodajny.";
      validation.style.display = "block";
    } else {
      validation.textContent = "";
      validation.style.display = "none";
    }
    return issues;
  }

  function drawChart(area, thickness, density, specific, copCharge, selectedDelta) {
    var grid = document.getElementById("rk-ts-chart-grid");
    var dots = document.getElementById("rk-ts-chart-dots");
    var floorPath = document.getElementById("rk-ts-chart-floor-path");
    var electricPath = document.getElementById("rk-ts-chart-electric-path");
    if (!grid) {
      return;
    }
    if (!dots) {
      return;
    }
    if (!floorPath) {
      return;
    }
    if (!electricPath) {
      return;
    }

    var ns = "http://www.w3.org/2000/svg";
    var deltas = [0.5, 1, 1.5, 2, 2.5, 3];
    var floorValues = deltas.map(function (deltaValue) {
      return area * (thickness / 100) * density * specific * deltaValue / 1000;
    });
    var safeCop = Math.max(copCharge, 1);
    var electricValues = floorValues.map(function (heatValue) {
      return heatValue / safeCop;
    });
    var rawMaximum = Math.max.apply(null, floorValues);
    var yMaximum = Math.max(1, Math.ceil(rawMaximum / 5) * 5);
    var xLeft = 64;
    var xRight = 728;
    var yTop = 28;
    var yBottom = 280;
    var chartWidth = xRight - xLeft;
    var chartHeight = yBottom - yTop;

    function pointX(index) {
      return xLeft + (chartWidth * index / (deltas.length - 1));
    }

    function pointY(value) {
      return yBottom - (value / yMaximum * chartHeight);
    }

    function addText(x, y, value, anchor) {
      var label = document.createElementNS(ns, "text");
      label.setAttribute("class", "rk-ts-axis-label");
      label.setAttribute("x", String(x));
      label.setAttribute("y", String(y));
      label.setAttribute("text-anchor", anchor);
      label.textContent = value;
      grid.appendChild(label);
    }

    grid.textContent = "";
    dots.textContent = "";

    var ySteps = 4;
    var stepIndex;
    for (stepIndex = 0; stepIndex <= ySteps; stepIndex += 1) {
      var ratio = stepIndex / ySteps;
      var y = yBottom - ratio * chartHeight;
      var line = document.createElementNS(ns, "line");
      line.setAttribute("class", "rk-ts-grid-line");
      line.setAttribute("x1", String(xLeft));
      line.setAttribute("x2", String(xRight));
      line.setAttribute("y1", String(y));
      line.setAttribute("y2", String(y));
      grid.appendChild(line);
      addText(xLeft - 9, y + 4, formatNumber(yMaximum * ratio, 0), "end");
    }

    deltas.forEach(function (deltaValue, index) {
      addText(pointX(index), yBottom + 25, formatNumber(deltaValue, 1) + " K", "middle");
    });
    addText(19, 156, "kWh", "middle");

    var floorPoints = [];
    var electricPoints = [];
    floorValues.forEach(function (value, index) {
      floorPoints.push((index === 0 ? "M " : "L ") + pointX(index) + " " + pointY(value));
      electricPoints.push((index === 0 ? "M " : "L ") + pointX(index) + " " + pointY(electricValues[index]));

      var floorDot = document.createElementNS(ns, "circle");
      floorDot.setAttribute("class", "rk-ts-chart-dot-floor");
      floorDot.setAttribute("cx", String(pointX(index)));
      floorDot.setAttribute("cy", String(pointY(value)));
      floorDot.setAttribute("r", "5");
      dots.appendChild(floorDot);

      var electricDot = document.createElementNS(ns, "circle");
      electricDot.setAttribute("class", "rk-ts-chart-dot-electric");
      electricDot.setAttribute("cx", String(pointX(index)));
      electricDot.setAttribute("cy", String(pointY(electricValues[index])));
      electricDot.setAttribute("r", "4");
      dots.appendChild(electricDot);
    });
    floorPath.setAttribute("d", floorPoints.join(" "));
    electricPath.setAttribute("d", electricPoints.join(" "));

    var selectedHeat = area * (thickness / 100) * density * specific * selectedDelta / 1000;
    var reading = "Przy ΔT " + formatNumber(selectedDelta, 1) + " K podłoga ma teoretycznie " + formatNumber(selectedHeat, 2) + " kWh_th. Przy COP " + formatNumber(safeCop, 1) + " odpowiada to około " + formatNumber(selectedHeat / safeCop, 2) + " kWh_el, przed stratami cyklu.";
    setText("rk-ts-chart-reading", reading);
  }

  function updateStatus(data) {
    var status = document.getElementById("rk-ts-status");
    if (!status) {
      return;
    }
    status.classList.remove("is-good");
    status.classList.remove("is-stop");

    if (data.invalid) {
      status.classList.add("is-stop");
      setText("rk-ts-status-title", "Najpierw popraw dane wejściowe");
      setText("rk-ts-status-text", "Co najmniej jedna wartość jest poza zakresem. Wyniki poniżej mają wyłącznie charakter roboczy.");
      return;
    }
    if (data.lowPrice >= data.highPrice) {
      status.classList.add("is-stop");
      setText("rk-ts-status-title", "Podane ceny nie tworzą korzyści z przesunięcia");
      setText("rk-ts-status-text", "Cena ładowania jest równa lub wyższa od ceny unikanej. Uwzględnij rzeczywistą formułę umowy, opłaty zmienne i COP w obu okresach.");
      return;
    }
    if (data.requiredPower > data.pumpPower) {
      status.classList.add("is-stop");
      setText("rk-ts-status-title", "Źródło nie ma wystarczającej mocy w podanym oknie");
      setText("rk-ts-status-text", "Pompa musi jednocześnie pokrywać bieżące straty i ładować masę. Wydłuż okno, zmniejsz porcję energii albo zweryfikuj moc w rzeczywistych warunkach pracy.");
      return;
    }
    if (data.delta > 2) {
      setText("rk-ts-status-title", "Duże ΔT wymaga kontroli komfortu i okładziny");
      setText("rk-ts-status-text", "Wysoka teoretyczna pojemność może wymagać temperatur, które pogorszą COP lub spowodują przegrzewanie. Sprawdź rozkład temperatur i warunki użytkowe.");
      return;
    }
    if (data.bufferLiters > 0) {
      if (data.bufferDelta > 15) {
        setText("rk-ts-status-title", "Zakres temperatur bufora może być zbyt szeroki dla podłogówki");
        setText("rk-ts-status-text", "Zweryfikuj, jaka część podanego ΔT pozostaje faktycznie dostępna przy wymaganej temperaturze zasilania i sposobie wpięcia bufora.");
        return;
      }
    }
    if (data.annualSaving <= 0) {
      status.classList.add("is-stop");
      setText("rk-ts-status-title", "Przesunięcie zwiększa koszt w tym scenariuszu");
      setText("rk-ts-status-text", "Różnica cen nie kompensuje zmiany COP i dodatkowych strat cyklu. Funkcja może mieć sens techniczny, lecz nie daje tu oszczędności energii.");
      return;
    }
    if (data.payback > data.years) {
      setText("rk-ts-status-title", "Oszczędność istnieje, ale nie pokrywa kosztu w podanym horyzoncie");
      setText("rk-ts-status-text", "Sprawdź koszt dodatkowego wyposażenia, realną liczbę korzystnych cykli i wrażliwość na ceny. Istniejąca masa podłogi może być używana bez ponoszenia pełnego kosztu nowego magazynu.");
      return;
    }
    status.classList.add("is-good");
    setText("rk-ts-status-title", "Scenariusz jest technicznie możliwy i dodatni finansowo");
    setText("rk-ts-status-text", "Wynik nadal wymaga sprawdzenia komfortu, hydrauliki, sterowania oraz cen z rzeczywistej umowy. Kalkulator nie prognozuje pogody ani zmian cen.");
  }

  function calculate() {
    var issues = validateInputs();
    var area = clamp(numberFrom("rk-ts-area", 150), 1, 1000);
    var thickness = clamp(numberFrom("rk-ts-thickness", 6.5), 0.5, 40);
    var density = clamp(numberFrom("rk-ts-density", 2400), 500, 3500);
    var specific = clamp(numberFrom("rk-ts-specific", 0.277), 0.05, 1);
    var delta = clamp(numberFrom("rk-ts-delta", 1), 0.1, 5);
    var bufferLiters = clamp(numberFrom("rk-ts-buffer-liters", 0), 0, 10000);
    var bufferDelta = clamp(numberFrom("rk-ts-buffer-delta", 5), 0, 60);
    var usablePercent = clamp(numberFrom("rk-ts-usable", 60), 5, 100);
    var heatLoss = clamp(numberFrom("rk-ts-loss", 5), 0.1, 100);
    var pumpPower = clamp(numberFrom("rk-ts-pump-power", 8), 0.5, 100);
    var windowHours = clamp(numberFrom("rk-ts-window", 4), 0.25, 24);
    var cycleLossPercent = clamp(numberFrom("rk-ts-cycle-loss", 5), 0, 50);
    var copReference = clamp(numberFrom("rk-ts-cop-reference", 3.2), 1, 8);
    var copCharge = clamp(numberFrom("rk-ts-cop-charge", 3), 1, 8);
    var highPrice = clamp(numberFrom("rk-ts-price-high", 1.10), 0, 10);
    var lowPrice = clamp(numberFrom("rk-ts-price-low", 0.65), -5, 10);
    var days = clamp(numberFrom("rk-ts-days", 180), 0, 366);
    var investment = clamp(numberFrom("rk-ts-investment", 1500), 0, 1000000);
    var years = clamp(numberFrom("rk-ts-years", 15), 1, 40);

    var mass = area * (thickness / 100) * density;
    var floorHeat = mass * specific * delta / 1000;
    var bufferHeat = bufferLiters * 1.163 * bufferDelta / 1000;
    var totalHeat = floorHeat + bufferHeat;
    var usefulHeat = totalHeat * usablePercent / 100;
    var cycleEfficiency = 1 - cycleLossPercent / 100;
    cycleEfficiency = Math.max(cycleEfficiency, 0.01);
    var heatToCharge = usefulHeat / cycleEfficiency;
    var runtime = usefulHeat / heatLoss;
    var additionalChargePower = heatToCharge / windowHours;
    var requiredPower = heatLoss + additionalChargePower;
    var powerShare = requiredPower / pumpPower * 100;
    var electricReference = usefulHeat / copReference;
    var electricCharge = heatToCharge / copCharge;
    var costReference = electricReference * highPrice;
    var costCharge = electricCharge * lowPrice;
    var cycleSaving = costReference - costCharge;
    var annualSaving = cycleSaving * days;
    var payback = Infinity;
    if (annualSaving > 0) {
      if (investment === 0) {
        payback = 0;
      } else {
        payback = investment / annualSaving;
      }
    }
    var horizonBalance = annualSaving * years - investment;

    setText("rk-ts-floor-result", formatNumber(floorHeat, 2) + " kWh_th");
    setText("rk-ts-buffer-result", formatNumber(bufferHeat, 2) + " kWh_th");
    setText("rk-ts-useful-result", formatNumber(usefulHeat, 2) + " kWh_th");
    setText("rk-ts-runtime-result", formatNumber(runtime, 2) + " h");
    setText("rk-ts-required-power", formatNumber(requiredPower, 2) + " kW_th");
    setText("rk-ts-power-share", formatNumber(powerShare, 0) + "%");
    setText("rk-ts-electric-reference", formatNumber(electricReference, 2) + " kWh_el");
    setText("rk-ts-electric-charge", formatNumber(electricCharge, 2) + " kWh_el");
    setText("rk-ts-cycle-saving", formatCurrency(cycleSaving, 2));
    setText("rk-ts-annual-saving", formatCurrency(annualSaving, 0) + "/rok");
    if (Number.isFinite(payback)) {
      setText("rk-ts-payback-result", formatNumber(payback, 1) + " roku");
    } else {
      setText("rk-ts-payback-result", "brak zwrotu");
    }
    setText("rk-ts-horizon-result", formatCurrency(horizonBalance, 0));

    updateStatus({
      invalid: issues.length > 0,
      lowPrice: lowPrice,
      highPrice: highPrice,
      requiredPower: requiredPower,
      pumpPower: pumpPower,
      delta: delta,
      bufferLiters: bufferLiters,
      bufferDelta: bufferDelta,
      annualSaving: annualSaving,
      payback: payback,
      years: years
    });
    drawChart(area, thickness, density, specific, copCharge, delta);
  }

  var calculatorInputs = root.querySelectorAll("#rk-ts-tool input");
  calculatorInputs.forEach(function (input) {
    input.addEventListener("input", calculate);
    input.addEventListener("change", calculate);
  });

  var resetButton = document.getElementById("rk-ts-reset");
  if (resetButton) {
    resetButton.addEventListener("click", function () {
      Object.keys(defaults).forEach(function (id) {
        var input = document.getElementById(id);
        if (input) {
          input.value = defaults[id];
        }
      });
      calculate();
    });
  }

  showStore("floor");
  calculate();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/najwiekszy-magazyn-energii-w-twoim-domu-juz-istnieje-i-prawdopodobnie-po-nim-chodzisz/">Podłoga jako magazyn ciepła – ile energii naprawdę może zgromadzić?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
