<?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 pellet drzewny - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/pellet-drzewny/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/pellet-drzewny/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Mon, 31 Aug 2026 11:19:50 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa pellet drzewny - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/pellet-drzewny/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką.</title>
		<link>https://projekt-ogrzewania.pl/kociol-na-pellet/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 14 Jan 2026 10:09:49 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Efektywność ogrzewania]]></category>
		<category><![CDATA[Hydraulika budowlana]]></category>
		<category><![CDATA[Instalacje domowe]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Koszty instalacji grzewczych]]></category>
		<category><![CDATA[Koszty ogrzewania]]></category>
		<category><![CDATA[Kotły na pellet]]></category>
		<category><![CDATA[Modernizacja ogrzewania]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[bufor ciepła]]></category>
		<category><![CDATA[ekologia]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[kocioł na pellet]]></category>
		<category><![CDATA[koszty ogrzewania]]></category>
		<category><![CDATA[niskotemperaturowe ogrzewanie]]></category>
		<category><![CDATA[ogrzewanie domu]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[pellet drzewny]]></category>
		<category><![CDATA[projekt ogrzewania]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=3170</guid>

					<description><![CDATA[<p>Planując nowoczesny i ekonomiczny system grzewczy, coraz więcej inwestorów zwraca uwagę na kocioł na pellet jako stabilne, ekologiczne i przewidywalne źródło ciepła. W połączeniu z wodnym ogrzewaniem podłogowym tworzy on układ, który doskonale wykorzystuje niskotemperaturowy charakter instalacji i pozwala osiągnąć bardzo dobre parametry eksploatacyjne. W artykule szczegółowo omawiamy, dlaczego kocioł na pellet idealnie współpracuje z podłogówką, jakie komponenty są kluczowe, jak wygląda projektowanie takiego systemu oraz jakie realne koszty inwestycyjne i eksploatacyjne należy wziąć pod uwagę.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/">Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
  #rk-pellet-guide {
    --rk-dark: #102536;
    --rk-navy: #14384d;
    --rk-blue: #078fbe;
    --rk-cyan: #25c7d8;
    --rk-cyan-soft: #e8fbff;
    --rk-orange: #ff6a3d;
    --rk-orange-soft: #fff1eb;
    --rk-green: #16836b;
    --rk-green-soft: #eaf8f3;
    --rk-yellow: #d89c19;
    --rk-yellow-soft: #fff8df;
    --rk-red: #d94b3d;
    --rk-red-soft: #fff0ee;
    --rk-purple: #695ac9;
    --rk-purple-soft: #f1efff;
    --rk-brown: #8a5d2c;
    --rk-brown-soft: #f8f0e7;
    --rk-ink: #1f2c37;
    --rk-text: #475967;
    --rk-muted: #6b7e8a;
    --rk-line: #d5e4eb;
    --rk-soft: #f4f9fb;
    --rk-white: #ffffff;
    width: 100%;
    max-width: 1180px;
    margin: 34px auto 72px;
    color: var(--rk-ink);
    font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    font-size: 18px;
    line-height: 1.75;
  }

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

  #rk-pellet-guide .rk-pellet-progress {
    position: fixed;
    z-index: 9999;
    top: 0;
    left: 0;
    width: 0;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-cyan), var(--rk-orange));
    box-shadow: 0 0 12px rgba(37, 199, 216, .5);
    pointer-events: none;
  }

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

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

  #rk-pellet-guide .rk-pellet-nav {
    position: relative;
    z-index: 20;
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: start;
    gap: 10px;
    padding: 11px clamp(14px, 3vw, 28px);
    border-bottom: 1px solid var(--rk-line);
    background: rgba(255, 255, 255, .97);
    box-shadow: 0 8px 24px rgba(16, 37, 54, .07);
    backdrop-filter: blur(10px);
  }
  #rk-pellet-guide .rk-pellet-nav-label {
    padding-top: 9px;
    color: var(--rk-dark);
    font-size: .62rem;
    font-weight: 950;
    letter-spacing: .06em;
    text-transform: uppercase;
    white-space: nowrap;
  }
  #rk-pellet-guide .rk-pellet-nav-track {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 7px;
    overflow: visible;
    padding: 2px;
  }
  #rk-pellet-guide .rk-pellet-nav-track a {
    flex: 0 0 auto;
    padding: 7px 11px;
    border-radius: 999px;
    color: var(--rk-navy);
    background: var(--rk-soft);
    font-size: .64rem;
    font-weight: 900;
    line-height: 1.2;
    text-decoration: none;
    white-space: nowrap;
  }
  #rk-pellet-guide .rk-pellet-nav-track a:hover,
  #rk-pellet-guide .rk-pellet-nav-track a:focus-visible { color: var(--rk-white); background: var(--rk-blue); }

  #rk-pellet-guide .rk-pellet-content { padding: clamp(26px, 5.5vw, 64px); }
  #rk-pellet-guide .rk-pellet-section {
    margin-bottom: clamp(48px, 8vw, 86px);
    scroll-margin-top: 88px;
  }
  #rk-pellet-guide .rk-pellet-section:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-section-head { max-width: 910px; margin-bottom: 24px; }
  #rk-pellet-guide .rk-pellet-section-head > p:last-child { margin-bottom: 0; color: var(--rk-text); font-size: 1.02rem; }
  #rk-pellet-guide .rk-pellet-eyebrow {
    display: block;
    margin-bottom: 9px;
    color: var(--rk-blue);
    font-size: .67rem;
    font-weight: 950;
    letter-spacing: .08em;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-grid-2,
  #rk-pellet-guide .rk-pellet-grid-3,
  #rk-pellet-guide .rk-pellet-grid-4 { display: grid; gap: 18px; }
  #rk-pellet-guide .rk-pellet-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #rk-pellet-guide .rk-pellet-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  #rk-pellet-guide .rk-pellet-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  #rk-pellet-guide .rk-pellet-card {
    padding: clamp(21px, 3.5vw, 31px);
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-white);
    box-shadow: 0 10px 28px rgba(16, 37, 54, .065);
  }
  #rk-pellet-guide .rk-pellet-card p:last-child,
  #rk-pellet-guide .rk-pellet-card ul:last-child,
  #rk-pellet-guide .rk-pellet-card ol:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-card-accent { border-top: 5px solid var(--rk-cyan); }
  #rk-pellet-guide .rk-pellet-card-orange { border-top: 5px solid var(--rk-orange); }
  #rk-pellet-guide .rk-pellet-card-green { border-top: 5px solid var(--rk-green); }
  #rk-pellet-guide .rk-pellet-card-purple { border-top: 5px solid var(--rk-purple); }
  #rk-pellet-guide .rk-pellet-card-brown { border-top: 5px solid var(--rk-brown); }
  #rk-pellet-guide .rk-pellet-number {
    display: grid;
    place-items: center;
    width: 42px;
    height: 42px;
    margin-bottom: 15px;
    border-radius: 13px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: .85rem;
    font-weight: 950;
  }
  #rk-pellet-guide .rk-pellet-answer {
    position: relative;
    overflow: hidden;
    padding: clamp(27px, 5vw, 45px);
    border-radius: 22px;
    color: var(--rk-white);
    background: linear-gradient(135deg, var(--rk-dark), #18516a);
  }
  #rk-pellet-guide .rk-pellet-answer::after {
    position: absolute;
    right: -72px;
    bottom: -86px;
    width: 225px;
    height: 225px;
    border: 32px solid rgba(255,255,255,.05);
    border-radius: 50%;
    content: "";
  }
  #rk-pellet-guide .rk-pellet-answer h3 { position: relative; z-index: 1; color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-answer p { position: relative; z-index: 1; color: #d9ebf0; }
  #rk-pellet-guide .rk-pellet-answer p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-answer strong { color: #7af0ff; }
  #rk-pellet-guide .rk-pellet-note,
  #rk-pellet-guide .rk-pellet-warning,
  #rk-pellet-guide .rk-pellet-good {
    padding: 19px 21px;
    border-left: 5px solid;
    border-radius: 0 14px 14px 0;
  }
  #rk-pellet-guide .rk-pellet-note { border-color: var(--rk-blue); background: var(--rk-cyan-soft); }
  #rk-pellet-guide .rk-pellet-warning { border-color: var(--rk-orange); background: var(--rk-orange-soft); }
  #rk-pellet-guide .rk-pellet-good { border-color: var(--rk-green); background: var(--rk-green-soft); }
  #rk-pellet-guide .rk-pellet-note p:last-child,
  #rk-pellet-guide .rk-pellet-warning p:last-child,
  #rk-pellet-guide .rk-pellet-good p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-formula {
    overflow-x: auto;
    margin: 22px 0;
    padding: 19px 22px;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    color: var(--rk-dark);
    background: var(--rk-soft);
    font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
    font-size: clamp(.82rem, 2vw, 1rem);
    font-weight: 800;
    text-align: center;
    white-space: nowrap;
  }
  #rk-pellet-guide .rk-pellet-mini-label {
    display: inline-block;
    margin-bottom: 7px;
    color: var(--rk-blue);
    font-size: .63rem;
    font-weight: 950;
    letter-spacing: .06em;
    text-transform: uppercase;
  }

  #rk-pellet-guide .rk-pellet-table-wrap {
    overflow-x: auto;
    border: 1px solid var(--rk-line);
    border-radius: 18px;
    background: var(--rk-white);
    box-shadow: 0 10px 28px rgba(16,37,54,.055);
  }
  #rk-pellet-guide .rk-pellet-table { width: 100%; border-collapse: collapse; }
  #rk-pellet-guide .rk-pellet-table th,
  #rk-pellet-guide .rk-pellet-table td { padding: 15px 16px; border-bottom: 1px solid var(--rk-line); text-align: left; vertical-align: top; }
  #rk-pellet-guide .rk-pellet-table tr:last-child td { border-bottom: 0; }
  #rk-pellet-guide .rk-pellet-table th {
    color: var(--rk-white);
    background: var(--rk-navy);
    font-size: .69rem;
    font-weight: 900;
    letter-spacing: .025em;
    line-height: 1.35;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-table td { color: var(--rk-text); font-size: .84rem; }
  #rk-pellet-guide .rk-pellet-table tbody tr:nth-child(even) td { background: #f8fbfc; }

  #rk-pellet-guide .rk-pellet-tool {
    overflow: hidden;
    border: 1px solid #345d70;
    border-radius: 24px;
    color: var(--rk-white);
    background: #102b3b;
    box-shadow: 0 22px 58px rgba(16,37,54,.18);
  }
  #rk-pellet-guide .rk-pellet-tool-head {
    padding: clamp(27px, 5vw, 45px);
    background:
      radial-gradient(circle at 94% 8%, rgba(37,199,216,.24), transparent 33%),
      radial-gradient(circle at 6% 110%, rgba(255,106,61,.18), transparent 30%),
      linear-gradient(135deg, #123044, #17566b);
  }
  #rk-pellet-guide .rk-pellet-tool-head h3 { margin-bottom: 10px; color: var(--rk-white); font-size: clamp(1.45rem, 3.5vw, 2.35rem); }
  #rk-pellet-guide .rk-pellet-tool-head p { max-width: 900px; margin-bottom: 0; color: #d3e8ee; }
  #rk-pellet-guide .rk-pellet-tool-body { display: grid; gap: 18px; padding: clamp(18px, 3.5vw, 32px); }
  #rk-pellet-guide .rk-pellet-tool-panel {
    padding: clamp(19px, 3vw, 29px);
    border: 1px solid #3b6375;
    border-radius: 18px;
    background: #173545;
  }
  #rk-pellet-guide .rk-pellet-tool-panel h4 { margin-bottom: 7px; color: var(--rk-white); font-size: 1.13rem; }
  #rk-pellet-guide .rk-pellet-tool-panel > p { color: #bed5de; font-size: .75rem; }
  #rk-pellet-guide .rk-pellet-input-group + .rk-pellet-input-group {
    margin-top: 24px;
    padding-top: 22px;
    border-top: 1px solid #3b6375;
  }
  #rk-pellet-guide .rk-pellet-input-title {
    display: block;
    margin-bottom: 12px;
    color: #6feafa;
    font-size: .64rem;
    font-weight: 950;
    letter-spacing: .07em;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-fields {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px;
  }
  #rk-pellet-guide .rk-pellet-field { min-width: 0; }
  #rk-pellet-guide .rk-pellet-field.is-hidden { display: none; }
  #rk-pellet-guide .rk-pellet-field label {
    display: block;
    margin-bottom: 6px;
    color: #eaf8fb;
    font-size: .7rem;
    font-weight: 850;
    line-height: 1.35;
  }
  #rk-pellet-guide .rk-pellet-field input,
  #rk-pellet-guide .rk-pellet-field select {
    width: 100%;
    min-height: 46px;
    padding: 10px 11px;
    border: 1px solid #88a8b5;
    border-radius: 10px;
    color: var(--rk-dark);
    background: var(--rk-white);
    font-size: .86rem;
    outline: 0;
  }
  #rk-pellet-guide .rk-pellet-field input:focus,
  #rk-pellet-guide .rk-pellet-field select:focus { border-color: var(--rk-cyan); box-shadow: 0 0 0 3px rgba(37,199,216,.18); }
  #rk-pellet-guide .rk-pellet-field small { display: block; margin-top: 5px; color: #9dbac5; font-size: .61rem; line-height: 1.4; }
  #rk-pellet-guide .rk-pellet-tool-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 11px; margin-top: 22px; }
  #rk-pellet-guide .rk-pellet-calc-button,
  #rk-pellet-guide .rk-pellet-reset-button {
    min-height: 47px;
    padding: 11px 18px;
    border-radius: 11px;
    cursor: pointer;
    font-weight: 900;
    line-height: 1.2;
  }
  #rk-pellet-guide .rk-pellet-calc-button { border: 1px solid var(--rk-cyan); color: var(--rk-dark); background: var(--rk-cyan); }
  #rk-pellet-guide .rk-pellet-reset-button { border: 1px solid #7093a2; color: #eaf8fb; background: transparent; }
  #rk-pellet-guide .rk-pellet-calc-button:hover,
  #rk-pellet-guide .rk-pellet-calc-button:focus-visible { background: #75effa; }
  #rk-pellet-guide .rk-pellet-reset-button:hover,
  #rk-pellet-guide .rk-pellet-reset-button:focus-visible { border-color: var(--rk-white); color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-error {
    display: none;
    margin-top: 17px;
    padding: 13px 15px;
    border-left: 4px solid var(--rk-orange);
    border-radius: 0 10px 10px 0;
    color: #ffe8df;
    background: rgba(217,75,61,.19);
    font-size: .74rem;
  }
  #rk-pellet-guide .rk-pellet-error.is-visible { display: block; }
  #rk-pellet-guide .rk-pellet-results { display: grid; gap: 18px; }
  #rk-pellet-guide .rk-pellet-result-lead {
    padding: clamp(23px, 4vw, 35px);
    border: 1px solid #3d6e7e;
    border-radius: 18px;
    background: linear-gradient(135deg, #173c4e, #195a6c);
  }
  #rk-pellet-guide .rk-pellet-result-lead span {
    display: block;
    margin-bottom: 5px;
    color: #8aedfa;
    font-size: .64rem;
    font-weight: 950;
    letter-spacing: .07em;
    text-transform: uppercase;
  }
  #rk-pellet-guide .rk-pellet-result-lead strong {
    display: block;
    color: var(--rk-white);
    font-size: clamp(2rem, 6vw, 4rem);
    font-weight: 950;
    letter-spacing: -.055em;
    line-height: 1;
  }
  #rk-pellet-guide .rk-pellet-result-lead p { margin: 12px 0 0; color: #d6eaf0; font-size: .8rem; }
  #rk-pellet-guide .rk-pellet-metrics {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 12px;
  }
  #rk-pellet-guide .rk-pellet-metric {
    min-width: 0;
    padding: 17px;
    border: 1px solid #3d6272;
    border-radius: 14px;
    background: #122f3f;
  }
  #rk-pellet-guide .rk-pellet-metric span { display: block; margin-bottom: 6px; color: #9dbdc8; font-size: .59rem; font-weight: 850; line-height: 1.35; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-metric strong { display: block; color: var(--rk-white); font-size: 1.22rem; font-weight: 950; line-height: 1.15; overflow-wrap: anywhere; }
  #rk-pellet-guide .rk-pellet-metric small { display: block; margin-top: 5px; color: #89aab6; font-size: .57rem; line-height: 1.35; }
  #rk-pellet-guide .rk-pellet-result-status {
    padding: 17px 19px;
    border-left: 5px solid var(--rk-green);
    border-radius: 0 13px 13px 0;
    color: #d9f5eb;
    background: rgba(22,131,107,.19);
    font-size: .78rem;
  }
  #rk-pellet-guide .rk-pellet-result-status.is-borderline { border-color: var(--rk-yellow); color: #fff2c4; background: rgba(216,156,25,.16); }
  #rk-pellet-guide .rk-pellet-result-status strong { color: inherit; }
  #rk-pellet-guide .rk-pellet-visual-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
    align-items: stretch;
  }
  #rk-pellet-guide .rk-pellet-chart-card,
  #rk-pellet-guide .rk-pellet-cost-card,
  #rk-pellet-guide .rk-pellet-storage-card {
    min-width: 0;
    padding: 20px;
    border: 1px solid #3d6272;
    border-radius: 16px;
    background: #122f3f;
  }
  #rk-pellet-guide .rk-pellet-chart-card h4,
  #rk-pellet-guide .rk-pellet-cost-card h4,
  #rk-pellet-guide .rk-pellet-storage-card h4 { color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-chart-card p,
  #rk-pellet-guide .rk-pellet-cost-card p,
  #rk-pellet-guide .rk-pellet-storage-card p { color: #a9c5cf; font-size: .67rem; }
  #rk-pellet-guide .rk-pellet-canvas-wrap {
    position: relative;
    width: 100%;
    min-height: 280px;
    border-radius: 12px;
    background: #f7fbfc;
  }
  #rk-pellet-guide .rk-pellet-canvas-wrap canvas { display: block; width: 100%; height: 280px; }
  #rk-pellet-guide .rk-pellet-cost-bars { display: grid; gap: 15px; padding: 9px 0 2px; }
  #rk-pellet-guide .rk-pellet-cost-row { display: grid; grid-template-columns: 105px minmax(0, 1fr) 88px; align-items: center; gap: 10px; }
  #rk-pellet-guide .rk-pellet-cost-row span { color: #c7dde4; font-size: .65rem; font-weight: 800; }
  #rk-pellet-guide .rk-pellet-cost-row strong { color: var(--rk-white); font-size: .69rem; text-align: right; }
  #rk-pellet-guide .rk-pellet-bar-track { overflow: hidden; height: 13px; border-radius: 999px; background: #284d5e; }
  #rk-pellet-guide .rk-pellet-bar-fill { width: 0; height: 100%; border-radius: inherit; background: var(--rk-cyan); transition: width .25s ease; }
  #rk-pellet-guide .rk-pellet-bar-fill.is-electric { background: var(--rk-purple); }
  #rk-pellet-guide .rk-pellet-bar-fill.is-service { background: var(--rk-orange); }
  #rk-pellet-guide .rk-pellet-bar-fill.is-delivery { background: var(--rk-yellow); }
  #rk-pellet-guide .rk-pellet-bar-fill.is-chimney { background: var(--rk-green); }
  #rk-pellet-guide .rk-pellet-storage-layout { display: grid; grid-template-columns: 250px minmax(0, 1fr); gap: 24px; align-items: center; }
  #rk-pellet-guide .rk-pellet-storage-svg { display: block; width: 100%; min-height: 250px; border-radius: 12px; background: #f7fbfc; }
  #rk-pellet-guide .rk-pellet-storage-facts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
  #rk-pellet-guide .rk-pellet-storage-fact { padding: 14px; border: 1px solid #3d6272; border-radius: 12px; background: #102b3b; }
  #rk-pellet-guide .rk-pellet-storage-fact span { display: block; color: #93b3bf; font-size: .58rem; font-weight: 850; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-storage-fact strong { display: block; margin-top: 5px; color: var(--rk-white); font-size: 1.12rem; }
  #rk-pellet-guide .rk-pellet-scenario-wrap { overflow-x: auto; border: 1px solid #3d6272; border-radius: 15px; }
  #rk-pellet-guide .rk-pellet-scenario { width: 100%; border-collapse: collapse; min-width: 660px; }
  #rk-pellet-guide .rk-pellet-scenario th,
  #rk-pellet-guide .rk-pellet-scenario td { padding: 13px 14px; border-bottom: 1px solid #3d6272; text-align: left; }
  #rk-pellet-guide .rk-pellet-scenario tr:last-child td { border-bottom: 0; }
  #rk-pellet-guide .rk-pellet-scenario th { color: #a9cad4; background: #102b3b; font-size: .61rem; font-weight: 900; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-scenario td { color: #e6f3f6; font-size: .72rem; }
  #rk-pellet-guide .rk-pellet-scenario tr.is-base td { color: var(--rk-white); background: rgba(37,199,216,.13); font-weight: 850; }
  #rk-pellet-guide .rk-pellet-badge {
    display: inline-flex;
    padding: 5px 8px;
    border-radius: 999px;
    color: var(--rk-white);
    background: var(--rk-blue);
    font-size: .56rem;
    font-weight: 950;
    line-height: 1.2;
  }
  #rk-pellet-guide .rk-pellet-diagnostics { display: grid; gap: 10px; }
  #rk-pellet-guide .rk-pellet-diagnostic {
    padding: 13px 15px;
    border-left: 4px solid var(--rk-cyan);
    border-radius: 0 10px 10px 0;
    color: #d8edf2;
    background: rgba(37,199,216,.08);
    font-size: .7rem;
  }
  #rk-pellet-guide .rk-pellet-diagnostic.is-warn { border-color: var(--rk-orange); background: rgba(255,106,61,.1); }
  #rk-pellet-guide .rk-pellet-tool-foot { padding: 0 clamp(18px, 3.5vw, 32px) 25px; color: #8eacb7; font-size: .61rem; }

  #rk-pellet-guide .rk-pellet-cta {
    position: relative;
    overflow: hidden;
    margin: clamp(50px, 8vw, 84px) 0;
    padding: clamp(28px, 5vw, 48px);
    border-radius: 23px;
    color: var(--rk-white);
    background: linear-gradient(135deg, #123044, #12647d);
    box-shadow: 0 20px 52px rgba(16,37,54,.17);
  }
  #rk-pellet-guide .rk-pellet-cta::after {
    position: absolute;
    right: -75px;
    bottom: -105px;
    width: 255px;
    height: 255px;
    border: 35px solid rgba(255,255,255,.055);
    border-radius: 50%;
    content: "";
  }
  #rk-pellet-guide .rk-pellet-cta-title { position: relative; z-index: 1; max-width: 880px; margin-bottom: 13px; color: var(--rk-white); font-size: clamp(1.4rem, 3.5vw, 2.3rem); font-weight: 950; letter-spacing: -.035em; line-height: 1.15; }
  #rk-pellet-guide .rk-pellet-cta p { position: relative; z-index: 1; max-width: 930px; color: #d7eaf0; }
  #rk-pellet-guide .rk-pellet-cta-button {
    position: relative;
    z-index: 1;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 50px;
    padding: 12px 19px;
    border-radius: 11px;
    color: var(--rk-dark);
    background: var(--rk-cyan);
    box-shadow: 0 9px 23px rgba(0,0,0,.13);
    font-weight: 950;
    line-height: 1.25;
    text-align: center;
    text-decoration: none;
  }
  #rk-pellet-guide .rk-pellet-cta-button:hover,
  #rk-pellet-guide .rk-pellet-cta-button:focus-visible { color: var(--rk-dark); background: #79f1fb; transform: translateY(-1px); }

  #rk-pellet-guide .rk-pellet-flow {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    align-items: stretch;
  }
  #rk-pellet-guide .rk-pellet-flow-item {
    position: relative;
    padding: 22px;
    border: 1px solid var(--rk-line);
    border-radius: 16px;
    background: var(--rk-white);
  }
  #rk-pellet-guide .rk-pellet-flow-item:not(:last-child)::after {
    position: absolute;
    top: 50%;
    right: -18px;
    z-index: 2;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-blue);
    content: "→";
    font-size: .75rem;
    font-weight: 950;
    line-height: 24px;
    text-align: center;
    transform: translateY(-50%);
  }
  #rk-pellet-guide .rk-pellet-flow-item p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-steps { display: grid; gap: 13px; counter-reset: rk-pellet-step; }
  #rk-pellet-guide .rk-pellet-step {
    position: relative;
    padding: 20px 20px 20px 73px;
    border: 1px solid var(--rk-line);
    border-radius: 15px;
    background: var(--rk-white);
  }
  #rk-pellet-guide .rk-pellet-step::before {
    position: absolute;
    top: 19px;
    left: 20px;
    display: grid;
    place-items: center;
    width: 36px;
    height: 36px;
    border-radius: 11px;
    color: var(--rk-white);
    background: var(--rk-blue);
    content: counter(rk-pellet-step);
    counter-increment: rk-pellet-step;
    font-size: .75rem;
    font-weight: 950;
  }
  #rk-pellet-guide .rk-pellet-step h3 { margin-bottom: 5px; font-size: 1.05rem; }
  #rk-pellet-guide .rk-pellet-step p { margin-bottom: 0; color: var(--rk-text); font-size: .88rem; }
  #rk-pellet-guide .rk-pellet-checklist { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; padding: 0; list-style: none; }
  #rk-pellet-guide .rk-pellet-checklist li {
    position: relative;
    margin: 0;
    padding: 16px 17px 16px 47px;
    border: 1px solid var(--rk-line);
    border-radius: 14px;
    background: var(--rk-white);
    color: var(--rk-text);
  }
  #rk-pellet-guide .rk-pellet-checklist li::before {
    position: absolute;
    top: 17px;
    left: 17px;
    display: grid;
    place-items: center;
    width: 20px;
    height: 20px;
    border-radius: 50%;
    color: var(--rk-white);
    background: var(--rk-green);
    content: "✓";
    font-size: .65rem;
    font-weight: 950;
  }

  #rk-pellet-guide .rk-pellet-faq { display: grid; gap: 11px; }
  #rk-pellet-guide .rk-pellet-faq details { overflow: hidden; border: 1px solid var(--rk-line); border-radius: 14px; background: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-faq summary {
    position: relative;
    padding: 18px 54px 18px 20px;
    color: var(--rk-dark);
    cursor: pointer;
    font-weight: 900;
    line-height: 1.4;
    list-style: none;
  }
  #rk-pellet-guide .rk-pellet-faq summary::-webkit-details-marker { display: none; }
  #rk-pellet-guide .rk-pellet-faq summary::after {
    position: absolute;
    top: 50%;
    right: 19px;
    display: grid;
    place-items: center;
    width: 27px;
    height: 27px;
    border-radius: 8px;
    color: var(--rk-blue);
    background: var(--rk-cyan-soft);
    content: "+";
    font-size: 1.1rem;
    transform: translateY(-50%);
  }
  #rk-pellet-guide .rk-pellet-faq details[open] summary::after { content: "−"; }
  #rk-pellet-guide .rk-pellet-faq-answer { padding: 0 20px 19px; color: var(--rk-text); }
  #rk-pellet-guide .rk-pellet-faq-answer p:last-child { margin-bottom: 0; }
  #rk-pellet-guide .rk-pellet-sources { padding: 0; list-style: none; counter-reset: rk-pellet-source; }
  #rk-pellet-guide .rk-pellet-sources li {
    position: relative;
    margin-bottom: 11px;
    padding: 15px 16px 15px 54px;
    border: 1px solid var(--rk-line);
    border-radius: 13px;
    background: var(--rk-soft);
    color: var(--rk-text);
  }
  #rk-pellet-guide .rk-pellet-sources li::before {
    position: absolute;
    top: 15px;
    left: 15px;
    display: grid;
    place-items: center;
    width: 27px;
    height: 27px;
    border-radius: 8px;
    color: var(--rk-white);
    background: var(--rk-blue);
    content: counter(rk-pellet-source);
    counter-increment: rk-pellet-source;
    font-size: .64rem;
    font-weight: 950;
  }

  #rk-pellet-guide .rk-pellet-author {
    overflow: hidden;
    margin-top: clamp(50px, 8vw, 82px);
    border: 1px solid var(--rk-line);
    border-radius: 23px;
    background: var(--rk-white);
    box-shadow: 0 18px 48px rgba(16,37,54,.1);
    scroll-margin-top: 88px;
  }
  #rk-pellet-guide .rk-pellet-author > input { position: absolute; opacity: 0; pointer-events: none; }
  #rk-pellet-guide .rk-pellet-author-head { display: flex; align-items: center; justify-content: space-between; gap: 19px; padding: 27px clamp(22px, 5vw, 46px); color: var(--rk-white); background: var(--rk-dark); }
  #rk-pellet-guide .rk-pellet-author-head h2 { margin-bottom: 7px; color: var(--rk-white); }
  #rk-pellet-guide .rk-pellet-author-head p { margin-bottom: 0; color: #d1e5ec; }
  #rk-pellet-guide .rk-pellet-author-mark { display: inline-flex; flex: 0 0 auto; padding: 9px 13px; border: 1px solid rgba(255,255,255,.18); border-radius: 999px; color: #7af0ff; font-size: .63rem; font-weight: 950; letter-spacing: .06em; white-space: nowrap; }
  #rk-pellet-guide .rk-pellet-author-layout { display: grid; grid-template-columns: 295px minmax(0, 1fr); }
  #rk-pellet-guide .rk-pellet-author-side { padding: 35px 27px; border-right: 1px solid var(--rk-line); background: #f8fbfc; text-align: center; }
  #rk-pellet-guide .rk-pellet-author-photo { overflow: hidden; width: 156px; height: 156px; margin: 0 auto 18px; border: 7px solid var(--rk-white); border-radius: 50%; box-shadow: 0 10px 28px rgba(16,37,54,.14); }
  #rk-pellet-guide .rk-pellet-author-photo img { width: 100%; height: 100%; object-fit: cover; }
  #rk-pellet-guide .rk-pellet-author-name { color: var(--rk-dark); font-size: 1.25rem; font-weight: 950; }
  #rk-pellet-guide .rk-pellet-author-role { margin-top: 7px; color: var(--rk-blue); font-size: .68rem; font-weight: 950; line-height: 1.45; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-author-social-label { margin-top: 26px; color: var(--rk-muted); font-size: .64rem; font-weight: 900; letter-spacing: .05em; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-author-social { display: flex; justify-content: center; gap: 9px; margin-top: 10px; }
  #rk-pellet-guide .rk-pellet-author-social a { display: grid; place-items: center; width: 42px; height: 42px; border: 1px solid var(--rk-line); border-radius: 12px; color: var(--rk-navy); background: var(--rk-white); transition: .2s ease; }
  #rk-pellet-guide .rk-pellet-author-social a:hover,
  #rk-pellet-guide .rk-pellet-author-social a:focus-visible { border-color: var(--rk-cyan); color: var(--rk-blue); transform: translateY(-2px); }
  #rk-pellet-guide .rk-pellet-author-social svg { width: 20px; height: 20px; fill: currentColor; }
  #rk-pellet-guide .rk-pellet-author-main { min-width: 0; padding: 38px clamp(25px, 5vw, 48px); }
  #rk-pellet-guide .rk-pellet-author-quote { position: relative; margin: 0 0 22px; padding: 30px 25px 25px 70px; border-radius: 16px; background: var(--rk-cyan-soft); }
  #rk-pellet-guide .rk-pellet-author-quote::before { position: absolute; top: 3px; left: 24px; color: var(--rk-cyan); content: "“"; font-size: 4.8rem; font-weight: 950; line-height: 1; }
  #rk-pellet-guide .rk-pellet-author-quote p { margin-bottom: 0; color: var(--rk-dark); font-size: .98rem; font-style: italic; font-weight: 800; }
  #rk-pellet-guide .rk-pellet-author-tabs { display: grid; grid-template-columns: repeat(3, 1fr); border: 1px solid var(--rk-line); border-radius: 14px 14px 0 0; background: var(--rk-soft); }
  #rk-pellet-guide .rk-pellet-author-tab { padding: 13px 8px; border-right: 1px solid var(--rk-line); color: var(--rk-muted); cursor: pointer; font-size: .68rem; font-weight: 950; text-align: center; text-transform: uppercase; }
  #rk-pellet-guide .rk-pellet-author-tab:last-child { border-right: 0; }
  #rk-pellet-guide .rk-pellet-author-panel { display: none; padding: 23px; border: 1px solid var(--rk-line); border-top: 0; border-radius: 0 0 14px 14px; color: var(--rk-text); }
  #rk-pellet-guide .rk-pellet-author-panel p:last-child { margin-bottom: 0; }
  #rk-pellet-author-about:checked ~ .rk-pellet-author-layout .rk-pellet-author-panel-about,
  #rk-pellet-author-exp:checked ~ .rk-pellet-author-layout .rk-pellet-author-panel-exp,
  #rk-pellet-author-method:checked ~ .rk-pellet-author-layout .rk-pellet-author-panel-method { display: block; }
  #rk-pellet-author-about:checked ~ .rk-pellet-author-layout label[for="rk-pellet-author-about"],
  #rk-pellet-author-exp:checked ~ .rk-pellet-author-layout label[for="rk-pellet-author-exp"],
  #rk-pellet-author-method:checked ~ .rk-pellet-author-layout label[for="rk-pellet-author-method"] { color: var(--rk-blue); background: var(--rk-white); box-shadow: inset 0 -4px 0 var(--rk-blue); }
  #rk-pellet-guide .rk-pellet-site-links { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 13px; }
  #rk-pellet-guide .rk-pellet-site-links a { padding: 7px 10px; border: 1px solid var(--rk-line); border-radius: 9px; background: var(--rk-white); font-size: .72rem; text-decoration: none; }
  #rk-pellet-guide .rk-pellet-final-cta { margin-bottom: 0; background: linear-gradient(135deg, #0e2433, #174d63); }
  #rk-pellet-guide .rk-pellet-disclaimer { margin-top: 18px; color: var(--rk-muted); font-size: .69rem; }

  @media (max-width: 980px) {
    #rk-pellet-guide .rk-pellet-grid-4,
    #rk-pellet-guide .rk-pellet-fields,
    #rk-pellet-guide .rk-pellet-metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-pellet-guide .rk-pellet-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #rk-pellet-guide .rk-pellet-author-layout { grid-template-columns: 1fr; }
    #rk-pellet-guide .rk-pellet-author-side { border-right: 0; border-bottom: 1px solid var(--rk-line); }
  }

  @media (max-width: 760px) {
    #rk-pellet-guide { margin: 18px auto 44px; font-size: 16px; }
    #rk-pellet-guide .rk-pellet-shell { border-radius: 18px; }
    #rk-pellet-guide .rk-pellet-hero-metrics,
    #rk-pellet-guide .rk-pellet-grid-2,
    #rk-pellet-guide .rk-pellet-grid-3,
    #rk-pellet-guide .rk-pellet-grid-4,
    #rk-pellet-guide .rk-pellet-visual-grid,
    #rk-pellet-guide .rk-pellet-flow,
    #rk-pellet-guide .rk-pellet-checklist,
    #rk-pellet-guide .rk-pellet-storage-layout { grid-template-columns: 1fr; }
    #rk-pellet-guide .rk-pellet-flow-item:not(:last-child)::after { top: auto; right: auto; bottom: -18px; left: 50%; content: "↓"; transform: translateX(-50%); }
    #rk-pellet-guide .rk-pellet-nav { grid-template-columns: 1fr; gap: 5px; }
    #rk-pellet-guide .rk-pellet-nav-label { padding: 0 0 4px 2px; }
    #rk-pellet-guide .rk-pellet-table-wrap { overflow: visible; border: 0; box-shadow: none; background: transparent; }
    #rk-pellet-guide .rk-pellet-table,
    #rk-pellet-guide .rk-pellet-table tbody,
    #rk-pellet-guide .rk-pellet-table tr,
    #rk-pellet-guide .rk-pellet-table td { display: block; width: 100%; }
    #rk-pellet-guide .rk-pellet-table thead { display: none; }
    #rk-pellet-guide .rk-pellet-table tr { overflow: hidden; margin-bottom: 12px; border: 1px solid var(--rk-line); border-radius: 14px; background: var(--rk-white); box-shadow: 0 8px 22px rgba(16,37,54,.055); }
    #rk-pellet-guide .rk-pellet-table td,
    #rk-pellet-guide .rk-pellet-table tbody tr:nth-child(even) td { display: grid; grid-template-columns: minmax(116px, 42%) minmax(0, 1fr); gap: 12px; padding: 12px 14px; background: var(--rk-white); }
    #rk-pellet-guide .rk-pellet-table td::before { color: var(--rk-muted); content: attr(data-label); font-size: .65rem; font-weight: 900; line-height: 1.35; text-transform: uppercase; }
    #rk-pellet-guide .rk-pellet-table tr:last-child td { border-bottom: 1px solid var(--rk-line); }
    #rk-pellet-guide .rk-pellet-table tr td:last-child { border-bottom: 0; }
    #rk-pellet-guide .rk-pellet-scenario-wrap { overflow: visible; border: 0; }
    #rk-pellet-guide .rk-pellet-scenario,
    #rk-pellet-guide .rk-pellet-scenario tbody,
    #rk-pellet-guide .rk-pellet-scenario tr,
    #rk-pellet-guide .rk-pellet-scenario td { display: block; width: 100%; min-width: 0; }
    #rk-pellet-guide .rk-pellet-scenario thead { display: none; }
    #rk-pellet-guide .rk-pellet-scenario tr { overflow: hidden; margin-bottom: 12px; border: 1px solid #3d6272; border-radius: 13px; background: #102b3b; }
    #rk-pellet-guide .rk-pellet-scenario td,
    #rk-pellet-guide .rk-pellet-scenario tr.is-base td { display: grid; grid-template-columns: minmax(118px, 43%) minmax(0, 1fr); gap: 11px; padding: 11px 13px; background: transparent; }
    #rk-pellet-guide .rk-pellet-scenario tr.is-base { background: rgba(37,199,216,.13); }
    #rk-pellet-guide .rk-pellet-scenario td::before { color: #9dbdc8; content: attr(data-label); font-size: .58rem; font-weight: 900; line-height: 1.35; text-transform: uppercase; }
    #rk-pellet-guide .rk-pellet-scenario tr:last-child td { border-bottom: 1px solid #3d6272; }
    #rk-pellet-guide .rk-pellet-scenario tr td:last-child { border-bottom: 0; }
  }

  @media (max-width: 560px) {
    #rk-pellet-guide .rk-pellet-content { padding: 23px 15px; }
    #rk-pellet-guide .rk-pellet-hero { padding: 32px 20px 30px; }
    #rk-pellet-guide .rk-pellet-fields,
    #rk-pellet-guide .rk-pellet-metrics,
    #rk-pellet-guide .rk-pellet-storage-facts { grid-template-columns: 1fr; }
    #rk-pellet-guide .rk-pellet-tool-body { padding: 14px; }
    #rk-pellet-guide .rk-pellet-tool-panel { padding: 18px 14px; }
    #rk-pellet-guide .rk-pellet-tool-actions { display: grid; }
    #rk-pellet-guide .rk-pellet-calc-button,
    #rk-pellet-guide .rk-pellet-reset-button { width: 100%; }
    #rk-pellet-guide .rk-pellet-cost-row { grid-template-columns: 82px minmax(0, 1fr) 75px; }
    #rk-pellet-guide .rk-pellet-author-head { display: block; }
    #rk-pellet-guide .rk-pellet-author-mark { margin-top: 17px; white-space: normal; }
    #rk-pellet-guide .rk-pellet-author-main { padding: 24px 18px; }
    #rk-pellet-guide .rk-pellet-author-quote { padding: 65px 20px 22px; }
    #rk-pellet-guide .rk-pellet-author-quote::before { left: 20px; }
    #rk-pellet-guide .rk-pellet-author-tab { font-size: .56rem; }
    #rk-pellet-guide .rk-pellet-step { padding-left: 64px; }
    #rk-pellet-guide .rk-pellet-step::before { left: 15px; }
  }

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

<article id="rk-pellet-guide" itemscope itemtype="https://schema.org/TechArticle">
  <div class="rk-pellet-progress" aria-hidden="true"></div>
  <div class="rk-pellet-shell">
    <header class="rk-pellet-hero">
      <span class="rk-pellet-kicker">Pellet bez uproszczeń</span>
      <div class="rk-pellet-hero-title">Kocioł na pellet: <span>koszty, dobór mocy i współpraca z podłogówką</span></div>
      <p class="rk-pellet-lead">Sprawdź, ile paliwa może zużyć Twój budynek, z czego powstaje koszt sezonu oraz kiedy pellet jest rozsądnym wyborem. Osobno omawiamy moc minimalną kotła, bufor, ochronę powrotu, hydraulikę podłogówki i aktualne wymagania.</p>
      <div class="rk-pellet-hero-tags" aria-label="Zakres opracowania">
        <span class="rk-pellet-hero-tag">kalkulator kosztów</span>
        <span class="rk-pellet-hero-tag">zużycie i liczba worków</span>
        <span class="rk-pellet-hero-tag">moc nominalna i minimalna</span>
        <span class="rk-pellet-hero-tag">bufor bez stałego l/kW</span>
        <span class="rk-pellet-hero-tag">Ecodesign, ZUM i CEEB</span>
      </div>
      <div class="rk-pellet-byline">
        <span>Autor: <strong>Robert Kucharski</strong></span>
        <span>Aktualizacja techniczna: <strong>31 sierpnia 2026 r.</strong></span>
        <span>Czas czytania: <strong>około 22 minut</strong></span>
      </div>
      <div class="rk-pellet-hero-metrics" aria-label="Najważniejsze zasady">
        <div class="rk-pellet-hero-metric"><b>Koszt z energii</b><span>Nie z samego metrażu domu ani jednej ceny za tonę.</span></div>
        <div class="rk-pellet-hero-metric"><b>Moc z OZC</b><span>Liczy się także najniższa stabilna moc kotła poza mrozem.</span></div>
        <div class="rk-pellet-hero-metric"><b>Bufor z analizy</b><span>Nie ma jednej pojemności w litrach na kW dla każdego układu.</span></div>
      </div>
    </header>

    <nav class="rk-pellet-nav" aria-label="Skróty do wszystkich części artykułu">
      <span class="rk-pellet-nav-label">Na skróty</span>
      <div class="rk-pellet-nav-track">
        <a href="#rk-pellet-szybka">Szybka odpowiedź</a>
        <a href="#rk-pellet-dzialanie">Jak działa</a>
        <a href="#rk-pellet-kalkulator">Kalkulator kosztów</a>
        <a href="#rk-pellet-wynik">Interpretacja wyniku</a>
        <a href="#rk-pellet-przyklady">100–200 m²</a>
        <a href="#rk-pellet-koszty">Składniki kosztu</a>
        <a href="#rk-pellet-moc">Dobór mocy</a>
        <a href="#rk-pellet-podlogowka">Pellet i podłogówka</a>
        <a href="#rk-pellet-temperatury">Temperatury</a>
        <a href="#rk-pellet-bufor">Czy potrzebny bufor</a>
        <a href="#rk-pellet-hydraulika">Hydraulika</a>
        <a href="#rk-pellet-paliwo">Jakość pelletu</a>
        <a href="#rk-pellet-magazyn">Magazyn paliwa</a>
        <a href="#rk-pellet-obsluga">Obsługa i serwis</a>
        <a href="#rk-pellet-wymagania">Klasa 5 i Ecodesign</a>
        <a href="#rk-pellet-dotacje">ZUM, przepisy i CEEB</a>
        <a href="#rk-pellet-plusy">Zalety i wady</a>
        <a href="#rk-pellet-kiedy-nie">Kiedy nie wybierać</a>
        <a href="#rk-pellet-bledy">Błędy</a>
        <a href="#rk-pellet-checklista">Checklista</a>
        <a href="#rk-pellet-faq">FAQ</a>
        <a href="#rk-pellet-zrodla">Źródła</a>
        <a href="#rk-pellet-autor">Autor</a>
      </div>
    </nav>

    <div class="rk-pellet-content">
      <section class="rk-pellet-section" id="rk-pellet-szybka">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Odpowiedź w 30 sekund</span>
          <h2>Czy kocioł na pellet ma sens?</h2>
          <p>Może mieć sens, gdy budynek nie ma wygodnego dostępu do sieci ciepłowniczej, inwestor akceptuje dostawy i magazynowanie paliwa, a instalacja jest przygotowana do regularnej obsługi urządzenia spalającego biomasę.</p>
        </div>
        <div class="rk-pellet-answer">
          <h3>Pellet nie jest ogrzewaniem bezobsługowym</h3>
          <p>Automatyczne podawanie paliwa ogranicza pracę użytkownika, ale nie usuwa konieczności uzupełniania zasobnika, odbioru dostaw, przechowywania pelletu w suchym miejscu, opróżniania popiołu, czyszczenia i serwisu.</p>
          <p>O opłacalności decydują przede wszystkim <strong>roczne zapotrzebowanie na ciepło, sezonowa sprawność całego układu, cena i jakość paliwa oraz koszty dodatkowe</strong>. Sama powierzchnia 150 m² nie wystarcza do obliczenia zużycia.</p>
        </div>
        <div class="rk-pellet-grid-3" style="margin-top:18px">
          <div class="rk-pellet-card rk-pellet-card-green"><span class="rk-pellet-mini-label">Dobry kierunek</span><h3>Jest miejsce i logistyka</h3><p>Kotłownia, komin, dostęp dla dostawy i suchy magazyn paliwa są możliwe do wykonania bez prowizorki.</p></div>
          <div class="rk-pellet-card rk-pellet-card-accent"><span class="rk-pellet-mini-label">Warunek techniczny</span><h3>Moc wynika z obliczeń</h3><p>Kocioł ma pasować nie tylko mocą nominalną, lecz również najniższą stabilną mocą do budynku.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><span class="rk-pellet-mini-label">Sygnał ostrzegawczy</span><h3>Oczekujesz pełnej autonomii</h3><p>Jeśli nie chcesz zamawiać paliwa, czyścić urządzenia ani kontrolować popiołu, pellet może nie odpowiadać Twoim oczekiwaniom.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-dzialanie">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Od granulatu do ciepłej podłogi</span>
          <h2>Jak działa kocioł na pellet?</h2>
          <p>Pellet jest transportowany z zasobnika do palnika, spalany przy kontrolowanym dopływie powietrza, a uzyskane ciepło trafia do wody instalacyjnej. Automatyka steruje podajnikiem, wentylatorem, zapłonem i pompami.</p>
        </div>
        <div class="rk-pellet-flow" aria-label="Droga energii od paliwa do pomieszczeń">
          <div class="rk-pellet-flow-item"><span class="rk-pellet-mini-label">1. Paliwo</span><h3>Zasobnik i podajnik</h3><p>Jakość, wilgotność i ilość drobnej frakcji wpływają na podawanie oraz spalanie.</p></div>
          <div class="rk-pellet-flow-item"><span class="rk-pellet-mini-label">2. Źródło</span><h3>Palnik i wymiennik</h3><p>Kocioł zamienia energię chemiczną paliwa na energię przekazaną wodzie.</p></div>
          <div class="rk-pellet-flow-item"><span class="rk-pellet-mini-label">3. Instalacja</span><h3>Obiegi grzewcze</h3><p>Pompy, zawory i automatyka dostarczają wymaganą moc do podłogówki, grzejników lub zasobnika CWU.</p></div>
        </div>
        <p>Sprawność przy mocy znamionowej nie jest tym samym co sprawność sezonowa. Na wynik roczny wpływają rozpalanie, wygaszanie, praca częściowa, straty postojowe, temperatura instalacji, czystość wymiennika i energia elektryczna osprzętu.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-kalkulator">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Jawne dane zamiast ceny „za metr”</span>
          <h2>Kalkulator kosztów ogrzewania pelletem</h2>
          <p>Najdokładniejszy tryb wykorzystuje roczne zapotrzebowanie na energię użyteczną z audytu, charakterystyki lub wiarygodnych obliczeń. Jeśli go nie znasz, możesz użyć powierzchni i własnego wskaźnika kWh/m²/rok jako wstępnego scenariusza.</p>
        </div>

        <div class="rk-pellet-tool" data-rk-pellet-calculator>
          <div class="rk-pellet-tool-head">
            <span class="rk-pellet-kicker">Model rocznego kosztu</span>
            <h3>Policz tony pelletu, liczbę worków i pełny koszt sezonu</h3>
            <p>Wartości przykładowe nie są aktualnym cennikiem. Wpisz własną cenę paliwa, sprawność sezonową, koszty prądu i serwisu. Narzędzie pokaże również, jak wynik zmieni się przy wzroście lub spadku ceny pelletu.</p>
          </div>

          <div class="rk-pellet-tool-body">
            <div class="rk-pellet-tool-panel">
              <h4>Dane energetyczne, paliwo i koszty dodatkowe</h4>
              <p>Nie mieszaj projektowej mocy w kW z roczną energią w kWh. Moc służy do doboru kotła, a energia do oszacowania zużycia paliwa.</p>

              <div class="rk-pellet-input-group">
                <span class="rk-pellet-input-title">1. Roczna energia użyteczna</span>
                <div class="rk-pellet-fields">
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-energy-mode">Sposób określenia energii CO</label>
                    <select id="rk-pellet-energy-mode">
                      <option value="direct" selected>Znam roczną energię [kWh]</option>
                      <option value="indicator">Powierzchnia × wskaźnik</option>
                    </select>
                    <small>Tryb bezpośredni jest dokładniejszy.</small>
                  </div>
                  <div class="rk-pellet-field" id="rk-pellet-direct-field">
                    <label for="rk-pellet-heat-energy">Ogrzewanie pomieszczeń [kWh/rok]</label>
                    <input id="rk-pellet-heat-energy" type="number" min="100" max="200000" step="100" value="12000" inputmode="numeric">
                    <small>Energia użyteczna, nie energia paliwa.</small>
                  </div>
                  <div class="rk-pellet-field is-hidden" id="rk-pellet-area-field">
                    <label for="rk-pellet-area">Powierzchnia ogrzewana [m²]</label>
                    <input id="rk-pellet-area" type="number" min="10" max="2000" step="1" value="150" inputmode="decimal">
                    <small>Powierzchnia objęta bilansem.</small>
                  </div>
                  <div class="rk-pellet-field is-hidden" id="rk-pellet-indicator-field">
                    <label for="rk-pellet-indicator">Wskaźnik energii [kWh/m²/rok]</label>
                    <input id="rk-pellet-indicator" type="number" min="5" max="500" step="1" value="80" inputmode="decimal">
                    <small>Wpisz wartość z własnej analizy.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-dhw-energy">CWU [kWh/rok]</label>
                    <input id="rk-pellet-dhw-energy" type="number" min="0" max="50000" step="100" value="2500" inputmode="numeric">
                    <small>Wpisz 0, jeśli kocioł nie przygotowuje CWU.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-heating-days">Dni sezonu grzewczego</label>
                    <input id="rk-pellet-heating-days" type="number" min="30" max="365" step="1" value="220" inputmode="numeric">
                    <small>Do średniego zużycia pelletu na dzień CO.</small>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-input-group">
                <span class="rk-pellet-input-title">2. Parametry paliwa i sprawność</span>
                <div class="rk-pellet-fields">
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-efficiency">Sprawność sezonowa układu [%]</label>
                    <input id="rk-pellet-efficiency" type="number" min="30" max="100" step="0.5" value="85" inputmode="decimal">
                    <small>Nie przepisuj bezrefleksyjnie sprawności znamionowej.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-calorific">Wartość opałowa [kWh/kg]</label>
                    <input id="rk-pellet-calorific" type="number" min="2" max="7" step="0.05" value="4.8" inputmode="decimal">
                    <small>Użyj deklaracji dostawcy paliwa.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-price">Cena pelletu [zł/t]</label>
                    <input id="rk-pellet-price" type="number" min="100" max="10000" step="10" value="1500" inputmode="decimal">
                    <small>Wartość przykładowa — wpisz swoją ofertę.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-bag-mass">Masa worka [kg]</label>
                    <input id="rk-pellet-bag-mass" type="number" min="5" max="1000" step="1" value="15" inputmode="decimal">
                    <small>Do obliczenia liczby worków.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-density">Gęstość nasypowa [kg/m³]</label>
                    <input id="rk-pellet-density" type="number" min="300" max="900" step="10" value="650" inputmode="decimal">
                    <small>Do orientacyjnej kubatury samego paliwa.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-storage-margin">Rezerwa magazynu [%]</label>
                    <input id="rk-pellet-storage-margin" type="number" min="0" max="100" step="1" value="15" inputmode="decimal">
                    <small>Wolna przestrzeń i niedoskonałe wykorzystanie kubatury.</small>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-input-group">
                <span class="rk-pellet-input-title">3. Prąd, dostawa i obsługa</span>
                <div class="rk-pellet-fields">
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-electric-use">Energia elektryczna [kWh/rok]</label>
                    <input id="rk-pellet-electric-use" type="number" min="0" max="20000" step="10" value="450" inputmode="decimal">
                    <small>Kocioł, podajniki, pompy i automatyka.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-electric-price">Cena prądu [zł/kWh]</label>
                    <input id="rk-pellet-electric-price" type="number" min="0" max="10" step="0.01" value="1.10" inputmode="decimal">
                    <small>Całkowita cena przyjęta do obliczenia.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-delivery">Transport pelletu [zł/rok]</label>
                    <input id="rk-pellet-delivery" type="number" min="0" max="20000" step="10" value="300" inputmode="decimal">
                    <small>Roczny koszt dostaw i rozładunku.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-service">Serwis i części [zł/rok]</label>
                    <input id="rk-pellet-service" type="number" min="0" max="30000" step="10" value="800" inputmode="decimal">
                    <small>Własny budżet eksploatacyjny.</small>
                  </div>
                  <div class="rk-pellet-field">
                    <label for="rk-pellet-chimney">Komin i przeglądy [zł/rok]</label>
                    <input id="rk-pellet-chimney" type="number" min="0" max="10000" step="10" value="250" inputmode="decimal">
                    <small>Wpisz rzeczywisty koszt dla obiektu.</small>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-tool-actions">
                <button class="rk-pellet-calc-button" type="button" id="rk-pellet-calculate">Przelicz koszt ogrzewania</button>
                <button class="rk-pellet-reset-button" type="button" id="rk-pellet-reset">Przywróć dane przykładowe</button>
              </div>
              <div class="rk-pellet-error" id="rk-pellet-error" role="alert"></div>
            </div>

            <div class="rk-pellet-results" id="rk-pellet-results" aria-live="polite">
              <div class="rk-pellet-result-lead">
                <span>Orientacyjny pełny koszt roczny</span>
                <strong id="rk-pellet-total-cost">—</strong>
                <p id="rk-pellet-result-summary">Wprowadź własne dane lub pozostaw wartości przykładowe.</p>
              </div>

              <div class="rk-pellet-metrics" aria-label="Najważniejsze wyniki kalkulatora">
                <div class="rk-pellet-metric"><span>Energia użyteczna</span><strong id="rk-pellet-useful-energy">—</strong><small>CO i CWU</small></div>
                <div class="rk-pellet-metric"><span>Energia w paliwie</span><strong id="rk-pellet-fuel-energy">—</strong><small>po uwzględnieniu sprawności</small></div>
                <div class="rk-pellet-metric"><span>Zużycie pelletu</span><strong id="rk-pellet-mass">—</strong><small>wartość obliczeniowa</small></div>
                <div class="rk-pellet-metric"><span>Liczba worków</span><strong id="rk-pellet-bags">—</strong><small>zaokrąglona w górę</small></div>
                <div class="rk-pellet-metric"><span>Koszt pelletu</span><strong id="rk-pellet-fuel-cost">—</strong><small>bez kosztów dodatkowych</small></div>
                <div class="rk-pellet-metric"><span>Koszt 1 kWh ciepła</span><strong id="rk-pellet-unit-cost">—</strong><small>pełny koszt / energia użyteczna</small></div>
                <div class="rk-pellet-metric"><span>Średnia miesięczna</span><strong id="rk-pellet-monthly-cost">—</strong><small>średnia księgowa z 12 miesięcy</small></div>
                <div class="rk-pellet-metric"><span>Średnio na dzień CO</span><strong id="rk-pellet-daily-mass">—</strong><small>tylko część ogrzewania pomieszczeń</small></div>
              </div>

              <div class="rk-pellet-result-status" id="rk-pellet-status">Wynik pojawi się po obliczeniu.</div>

              <div class="rk-pellet-visual-grid">
                <div class="rk-pellet-chart-card">
                  <h4>Wrażliwość kosztu na cenę pelletu</h4>
                  <p>Wykres pokazuje roczny koszt całkowity dla ceny paliwa niższej i wyższej od wpisanej wartości. Pozostałe dane nie zmieniają się.</p>
                  <div class="rk-pellet-canvas-wrap"><canvas id="rk-pellet-price-chart" width="600" height="280" role="img" aria-label="Wykres rocznego kosztu ogrzewania dla kilku cen pelletu"></canvas></div>
                </div>
                <div class="rk-pellet-cost-card">
                  <h4>Z czego powstaje koszt roczny?</h4>
                  <p>Paski pokazują udział paliwa, energii elektrycznej, serwisu, transportu i kosztów kominowych.</p>
                  <div class="rk-pellet-cost-bars">
                    <div class="rk-pellet-cost-row"><span>Pellet</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill" id="rk-pellet-bar-fuel"></div></div><strong id="rk-pellet-label-fuel">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Prąd</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-electric" id="rk-pellet-bar-electric"></div></div><strong id="rk-pellet-label-electric">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Serwis</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-service" id="rk-pellet-bar-service"></div></div><strong id="rk-pellet-label-service">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Transport</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-delivery" id="rk-pellet-bar-delivery"></div></div><strong id="rk-pellet-label-delivery">—</strong></div>
                    <div class="rk-pellet-cost-row"><span>Komin</span><div class="rk-pellet-bar-track"><div class="rk-pellet-bar-fill is-chimney" id="rk-pellet-bar-chimney"></div></div><strong id="rk-pellet-label-chimney">—</strong></div>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-storage-card">
                <h4>Orientacyjna przestrzeń na paliwo</h4>
                <p>Objętość wynika z masy, gęstości nasypowej i wpisanej rezerwy. Worek, paleta, ściany zasobnika oraz dostęp obsługowy zajmują dodatkowe miejsce.</p>
                <div class="rk-pellet-storage-layout">
                  <svg class="rk-pellet-storage-svg" id="rk-pellet-storage-svg" viewBox="0 0 250 250" role="img" aria-label="Schemat orientacyjnej objętości magazynu pelletu"></svg>
                  <div class="rk-pellet-storage-facts">
                    <div class="rk-pellet-storage-fact"><span>Objętość samego pelletu</span><strong id="rk-pellet-bulk-volume">—</strong></div>
                    <div class="rk-pellet-storage-fact"><span>Objętość z rezerwą</span><strong id="rk-pellet-storage-volume">—</strong></div>
                    <div class="rk-pellet-storage-fact"><span>Pellet na samo CO</span><strong id="rk-pellet-heating-mass">—</strong></div>
                    <div class="rk-pellet-storage-fact"><span>Pellet na CWU</span><strong id="rk-pellet-dhw-mass">—</strong></div>
                  </div>
                </div>
              </div>

              <div class="rk-pellet-tool-panel">
                <h4>Scenariusze ceny pelletu</h4>
                <p>Tabela używa dokładnie tych samych danych energetycznych i kosztów dodatkowych. Zmienia się wyłącznie cena jednej tony.</p>
                <div class="rk-pellet-scenario-wrap">
                  <table class="rk-pellet-scenario">
                    <thead><tr><th>Scenariusz</th><th>Cena pelletu</th><th>Koszt paliwa</th><th>Koszt całkowity</th><th>Koszt 1 kWh</th></tr></thead>
                    <tbody id="rk-pellet-scenario-body"></tbody>
                  </table>
                </div>
              </div>

              <div class="rk-pellet-tool-panel">
                <h4>Diagnostyka wyniku</h4>
                <p>Komunikaty wskazują założenia, które mają największy wpływ na wynik i wymagają potwierdzenia.</p>
                <div class="rk-pellet-diagnostics" id="rk-pellet-diagnostics"></div>
              </div>
            </div>
          </div>
          <div class="rk-pellet-tool-foot">Kalkulator jest modelem edukacyjnym. Nie prognozuje pogody, jakości każdej partii paliwa, rzeczywistej sprawności konkretnego kotła ani zachowania użytkowników. Nie dobiera mocy źródła, komina, bufora, pomp i armatury bezpieczeństwa.</div>
        </div>
      </section>

      <aside class="rk-pellet-cta" aria-label="Projekt instalacji z kotłem na pellet">
        <div class="rk-pellet-cta-title">Kalkulator policzył paliwo i koszt, ale nie zaprojektował kotłowni</div>
        <p>Kalkulator potrafi przeliczyć roczne zapotrzebowanie na tony pelletu i złotówki, ale nie wie, czy wybrany kocioł ma odpowiednią moc minimalną, jak zachowa się po zamknięciu części pętli ani czy instalacja wymaga bufora. Nie sprawdzi ochrony powrotu, komina, średnic przewodów, przepływów, nastaw rozdzielaczy ani rzeczywistego schematu hydraulicznego. Te elementy wymagają obliczeń cieplnych i projektu instalacji.</p>
        <a class="rk-pellet-cta-button rk-pellet-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów projekt podłogówki do kotła na pellet</a>
      </aside>

      <section class="rk-pellet-section" id="rk-pellet-wynik">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Co oznaczają liczby</span>
          <h2>Jak interpretować koszt i zużycie pelletu?</h2>
          <p>Wynik jest scenariuszem opartym na wpisanych danych. Nie należy go czytać jako gwarancji rachunku ani jako prognozy dla każdego domu o podobnej powierzchni.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card rk-pellet-card-accent"><h3>Energia użyteczna</h3><p>To ciepło potrzebne budynkowi i CWU. Nie jest równe energii zawartej w paliwie, ponieważ część energii tracimy.</p></div>
          <div class="rk-pellet-card rk-pellet-card-green"><h3>Sprawność sezonowa</h3><p>Uwzględnia cały rok pracy. Powinna być niższa lub co najwyżej porównywalna z wynikami uzyskiwanymi w kontrolowanych warunkach badań.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Koszty stałe</h3><p>Serwis, komin i transport nie znikają, gdy budynek zużywa mniej paliwa. Dlatego pełny koszt jednej kWh może rosnąć w małym zapotrzebowaniu.</p></div>
        </div>
        <div class="rk-pellet-warning" style="margin-top:18px"><p><strong>Nie myl dwóch wielkości:</strong> roczne zapotrzebowanie 12 000 kWh mówi o ilości energii w sezonie. Projektowe obciążenie 7 kW mówi o mocy potrzebnej w określonych warunkach obliczeniowych. Pierwsza wartość służy do kosztu, druga do doboru kotła.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-przyklady">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Jednakowe i jawne założenia</span>
          <h2>Ile pelletu na sezon dla domu 100, 120, 150 i 200 m²?</h2>
          <p>Poniższa tabela jest porównaniem matematycznym, nie prognozą dla konkretnego budynku. Zakładamy 80 kWh/m²/rok energii użytecznej na CO, dodatkowo 2500 kWh/rok na CWU, wartość opałową 4,8 kWh/kg oraz sprawność sezonową 85%.</p>
        </div>
        <div class="rk-pellet-table-wrap">
          <table class="rk-pellet-table">
            <thead><tr><th>Powierzchnia</th><th>Energia CO</th><th>CO + CWU</th><th>Pellet na CO</th><th>Pellet łącznie</th><th>Worki 15 kg</th></tr></thead>
            <tbody>
              <tr><td data-label="Powierzchnia">100 m²</td><td data-label="Energia CO">8000 kWh/rok</td><td data-label="CO + CWU">10 500 kWh/rok</td><td data-label="Pellet na CO">około 1,96 t</td><td data-label="Pellet łącznie">około 2,57 t</td><td data-label="Worki 15 kg">około 172</td></tr>
              <tr><td data-label="Powierzchnia">120 m²</td><td data-label="Energia CO">9600 kWh/rok</td><td data-label="CO + CWU">12 100 kWh/rok</td><td data-label="Pellet na CO">około 2,35 t</td><td data-label="Pellet łącznie">około 2,97 t</td><td data-label="Worki 15 kg">około 198</td></tr>
              <tr><td data-label="Powierzchnia">150 m²</td><td data-label="Energia CO">12 000 kWh/rok</td><td data-label="CO + CWU">14 500 kWh/rok</td><td data-label="Pellet na CO">około 2,94 t</td><td data-label="Pellet łącznie">około 3,55 t</td><td data-label="Worki 15 kg">około 237</td></tr>
              <tr><td data-label="Powierzchnia">200 m²</td><td data-label="Energia CO">16 000 kWh/rok</td><td data-label="CO + CWU">18 500 kWh/rok</td><td data-label="Pellet na CO">około 3,92 t</td><td data-label="Pellet łącznie">około 4,53 t</td><td data-label="Worki 15 kg">około 303</td></tr>
            </tbody>
          </table>
        </div>
        <p class="rk-pellet-disclaimer">Dom 150 m² może potrzebować znacznie mniej lub więcej energii niż przyjęte 80 kWh/m²/rok. Wynik zmienią między innymi izolacja, szczelność, wentylacja, temperatura wewnętrzna, klimat, zyski słoneczne i sposób przygotowania CWU.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-koszty">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Cena tony to nie cały rachunek</span>
          <h2>Od czego zależy koszt ogrzewania pelletem?</h2>
          <p>Pełny koszt roczny jest sumą paliwa, prądu i obsługi. Porównywanie samej ceny tony pelletu z ceną kWh energii elektrycznej prowadzi do błędnych wniosków.</p>
        </div>
        <div class="rk-pellet-formula">m<sub>pelletu</sub> = Q<sub>użyteczne</sub> / (H<sub>u</sub> × η<sub>sezonowa</sub>)</div>
        <div class="rk-pellet-formula">K<sub>roczny</sub> = K<sub>paliwa</sub> + K<sub>prądu</sub> + K<sub>serwisu</sub> + K<sub>transportu</sub> + K<sub>komina</sub></div>
        <div class="rk-pellet-grid-4">
          <div class="rk-pellet-card"><h3>Budynek</h3><p>Roczne zapotrzebowanie na ciepło zwykle ma większy wpływ niż niewielka różnica sprawności dwóch urządzeń.</p></div>
          <div class="rk-pellet-card"><h3>Paliwo</h3><p>Wartość opałowa, wilgotność i cena dostawy zmieniają ilość energii uzyskanej z jednej tony.</p></div>
          <div class="rk-pellet-card"><h3>Eksploatacja</h3><p>Podajnik, wentylator, zapalarka, pompy i automatyka pobierają energię elektryczną.</p></div>
          <div class="rk-pellet-card"><h3>Obsługa</h3><p>Serwis, komin, czyszczenie, części i logistyka paliwa są częścią ekonomii systemu.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-moc">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Kilowaty z obliczeń</span>
          <h2>Jak dobrać moc kotła na pellet?</h2>
          <p>Podstawą jest projektowe obciążenie cieplne budynku, a nie powierzchnia pomnożona przez jeden wskaźnik. Osobno analizuje się sposób przygotowania ciepłej wody użytkowej.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-green">
            <h3>Moc nominalna</h3>
            <p>Powinna pokrywać projektowe obciążenie cieplne z uwzględnieniem przyjętej koncepcji CWU i warunków pracy instalacji. Nie dodajemy automatycznie 15 lub 30% „na wszelki wypadek”.</p>
          </div>
          <div class="rk-pellet-card rk-pellet-card-orange">
            <h3>Moc minimalna</h3>
            <p>Decyduje o zachowaniu kotła przez większą część sezonu, gdy budynek potrzebuje znacznie mniej ciepła niż podczas mrozu. Zbyt wysoka moc minimalna zwiększa ryzyko częstego wygaszania.</p>
          </div>
        </div>
        <p>Wartość z OZC opisuje warunki obliczeniowe. Nie oznacza, że przez cały sezon kocioł pracuje z taką mocą. Zobacz opracowanie <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne OZC</a>.</p>
        <div class="rk-pellet-note"><p><strong>Dobór źródła to nie dobór tylko jednego punktu.</strong> Trzeba porównać zapotrzebowanie budynku z zakresem stabilnej pracy urządzenia, sposobem sterowania, zładem i możliwością magazynowania nadwyżki energii.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-podlogowka">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Dwa różne poziomy temperatur</span>
          <h2>Czy kocioł na pellet nadaje się do ogrzewania podłogowego?</h2>
          <p>Tak, pod warunkiem że układ zapewnia warunki wymagane przez kocioł i jednocześnie dostarcza do podłogi wodę o temperaturze wynikającej z projektu powierzchni grzewczej.</p>
        </div>
        <div class="rk-pellet-flow" aria-label="Rozdzielenie funkcji kotła i ogrzewania podłogowego">
          <div class="rk-pellet-flow-item"><h3>Obieg kotłowy</h3><p>Zapewnia przepływ, temperaturę i ochronę powrotu wymaganą przez konkretne źródło.</p></div>
          <div class="rk-pellet-flow-item"><h3>Połączenie hydrauliczne</h3><p>Może wykorzystywać bufor, sprzęgło lub inne rozwiązanie wynikające z projektu i dokumentacji kotła.</p></div>
          <div class="rk-pellet-flow-item"><h3>Obieg podłogówki</h3><p>Pracuje z temperaturą pogodową, obliczonym przepływem i nastawami poszczególnych pętli.</p></div>
        </div>
        <p>Rodzaj źródła nie wyznacza automatycznie rozstawu 10 lub 15 cm. Rozstaw rur wynika z wymaganej mocy, temperatury wody, konstrukcji podłogi i oporu okładziny. Szerzej opisujemy to w artykule <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/">rozstaw rur w ogrzewaniu podłogowym</a>.</p>
        <div class="rk-pellet-warning"><p>Bezpośrednie połączenie wysokotemperaturowego obiegu kotłowego z rozdzielaczem nie jest właściwą zasadą projektową. Sposób obniżenia i regulowania temperatury musi uwzględniać automatykę, hydraulikę i zabezpieczenia całego układu.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-temperatury">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Nie jedna stała dla całej instalacji</span>
          <h2>Temperatura kotła, powrotu i zasilania podłogówki</h2>
          <p>W artykule nie przypisujemy jednej uniwersalnej temperatury powrotu wszystkim kotłom ani jednej maksymalnej temperatury zasilania wszystkim podłogom.</p>
        </div>
        <div class="rk-pellet-table-wrap">
          <table class="rk-pellet-table">
            <thead><tr><th>Parametr</th><th>Od czego zależy?</th><th>Gdzie go sprawdzić?</th><th>Najczęstszy błąd</th></tr></thead>
            <tbody>
              <tr><td data-label="Parametr">Temperatura kotła</td><td data-label="Zależność">Konstrukcja źródła, spalanie i automatyka.</td><td data-label="Weryfikacja">Dokumentacja kotła i projekt kotłowni.</td><td data-label="Błąd">Obniżenie jej bez sprawdzenia warunków pracy urządzenia.</td></tr>
              <tr><td data-label="Parametr">Temperatura powrotu</td><td data-label="Zależność">Wymagania konkretnego wymiennika i sposób ochrony.</td><td data-label="Weryfikacja">Dokumentacja urządzenia i schemat hydrauliczny.</td><td data-label="Błąd">Przyjęcie 55°C jako wartości dla każdego kotła.</td></tr>
              <tr><td data-label="Parametr">Zasilanie podłogówki</td><td data-label="Zależność">Strata ciepła, rozstaw, okładzina i konstrukcja.</td><td data-label="Weryfikacja">Obliczenia wydajności podłogi i krzywa grzewcza.</td><td data-label="Błąd">Ustawienie jednej stałej temperatury na cały sezon.</td></tr>
              <tr><td data-label="Parametr">Powierzchnia podłogi</td><td data-label="Zależność">Moc, temperatura pomieszczenia i opór wykończenia.</td><td data-label="Weryfikacja">Projekt oraz wymagania okładziny.</td><td data-label="Błąd">Mylenie temperatury wody z temperaturą posadzki.</td></tr>
            </tbody>
          </table>
        </div>
        <p>Osobne opracowanie wyjaśnia <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">maksymalną temperaturę zasilania podłogówki</a>, a regulację sezonową opisuje artykuł <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywa grzewcza w ogrzewaniu podłogowym</a>.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-bufor">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Magazyn energii, nie magiczne l/kW</span>
          <h2>Czy kocioł na pellet musi mieć bufor?</h2>
          <p>Nie można odpowiedzieć jednym przelicznikiem. Bufor może być wymagany przez koncepcję, dokumentację urządzenia lub program dotacyjny, a w innych układach jego funkcję i pojemność analizuje się indywidualnie.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-green">
            <h3>Bufor jest szczególnie użyteczny, gdy</h3>
            <ul>
              <li>minimalna moc kotła przewyższa chwilowy odbiór budynku,</li>
              <li>automatyka strefowa zamyka wiele obiegów,</li>
              <li>potrzebne jest rozdzielenie przepływów i temperatur,</li>
              <li>chcemy wydłużyć cykl pracy źródła,</li>
              <li>układ łączy kilka obiegów o różnych parametrach.</li>
            </ul>
          </div>
          <div class="rk-pellet-card rk-pellet-card-orange">
            <h3>Nie dobieraj bufora wyłącznie przez</h3>
            <ul>
              <li>mnożenie mocy nominalnej przez 50 lub 60 l/kW,</li>
              <li>samą powierzchnię domu,</li>
              <li>pojemność rur ogrzewania podłogowego,</li>
              <li>jedną wartość z niesprawdzonego poradnika,</li>
              <li>założenie, że większy zbiornik zawsze jest lepszy.</li>
            </ul>
          </div>
        </div>
        <h3 style="margin-top:26px">Wstępny bilans nadwyżki energii</h3>
        <div class="rk-pellet-formula">V [l] = P<sub>nadmiar</sub> [kW] × t [h] × 1000 / (1,163 × ΔT<sub>bufora</sub> [K])</div>
        <p>Wzór pokazuje ilość wody potrzebną do przejęcia określonej nadwyżki energii przez zadany czas i zakres temperatur. Nie uwzględnia strat zbiornika, warstwowania, króćców, sterowania ani wymagań konkretnego kotła.</p>
        <p>Szczegóły znajdziesz w opracowaniu <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufor ciepła w ogrzewaniu podłogowym</a>.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-hydraulika">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Ta sama moc, różne przepływy</span>
          <h2>Obieg kotłowy i podłogówka — jak liczyć przepływ?</h2>
          <p>Przepływ wynika z przenoszonej mocy i projektowej różnicy temperatur. Dlatego obieg kotłowy oraz instalacyjny mogą mieć różne wartości mimo przekazywania tej samej mocy.</p>
        </div>
        <div class="rk-pellet-formula">V̇ [m³/h] = Q [kW] / (1,163 × ΔT [K])</div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-brown"><h3>Przykład po stronie kotła</h3><p>Dla 10 kW i różnicy temperatur 20 K otrzymujemy około 0,43 m³/h.</p></div>
          <div class="rk-pellet-card rk-pellet-card-accent"><h3>Przykład po stronie podłogówki</h3><p>Dla 10 kW i różnicy temperatur 5 K otrzymujemy około 1,72 m³/h.</p></div>
        </div>
        <p>Nie oznacza to automatycznie, że zawsze potrzebne jest sprzęgło. Sposób połączenia zależy od pomp, oporów, zaworów, bufora, wymaganych przepływów i sterowania. Zobacz <a href="https://projekt-ogrzewania.pl/sprzeglo-hydrauliczne-w-instalacji-ogrzewania-podlogowego/">sprzęgło hydrauliczne w instalacji podłogowej</a> oraz <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">kalkulator doboru pompy obiegowej</a>.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-paliwo">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Parametry zamiast samego logo</span>
          <h2>Jak ocenić jakość pelletu?</h2>
          <p>Paliwo powinno odpowiadać klasie i parametrom dopuszczonym w dokumentacji kotła. Sam znak handlowy na opakowaniu nie zwalnia z oceny deklarowanych właściwości i zachowania konkretnej partii.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card"><h3>Energia</h3><p>Wartość opałowa mówi, ile energii chemicznej przypada na kilogram paliwa. Kalkulator pozwala wpisać wartość z deklaracji.</p></div>
          <div class="rk-pellet-card"><h3>Wilgoć i popiół</h3><p>Wpływają na ilość użytecznego ciepła, częstotliwość obsługi oraz pozostałości po spalaniu.</p></div>
          <div class="rk-pellet-card"><h3>Mechanika paliwa</h3><p>Wymiary granulatu, trwałość i zawartość drobnej frakcji wpływają na transport oraz stabilność podawania.</p></div>
        </div>
        <p>ISO 17225-2 określa klasy jakościowe i specyfikacje klasyfikowanego pelletu drzewnego. Nie przesądza jednak, że każdy pellet danej klasy będzie właściwy dla każdego urządzenia.</p>
        <div class="rk-pellet-warning"><p>Pellet musi być przechowywany w warunkach chroniących go przed wilgocią. Paliwo zawilgocone podczas składowania może nie odpowiadać parametrom podanym przy zakupie.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-magazyn">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Tony trzeba dostarczyć i przechować</span>
          <h2>Ile miejsca potrzeba na pellet?</h2>
          <p>Objętość samego paliwa można oszacować z masy i gęstości nasypowej. Rzeczywista przestrzeń magazynowa musi być większa, ponieważ obejmuje opakowania, palety, przejścia i dostęp do obsługi.</p>
        </div>
        <div class="rk-pellet-formula">V<sub>pelletu</sub> [m³] = m<sub>pelletu</sub> [kg] / ρ<sub>nasypowa</sub> [kg/m³]</div>
        <div class="rk-pellet-grid-4">
          <div class="rk-pellet-card"><h3>Sucho</h3><p>Pomieszczenie musi chronić paliwo przed wilgocią i wodą.</p></div>
          <div class="rk-pellet-card"><h3>Dostęp</h3><p>Trasa od rozładunku do magazynu powinna być możliwa do obsługi.</p></div>
          <div class="rk-pellet-card"><h3>Nośność</h3><p>Kilka ton paliwa stanowi rzeczywiste obciążenie podłoża i konstrukcji.</p></div>
          <div class="rk-pellet-card"><h3>Rezerwa</h3><p>Geometryczna objętość zasobnika nie jest w pełni wykorzystywana przez paliwo.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-obsluga">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Koszt czasu i konserwacji</span>
          <h2>Prąd, czyszczenie i serwis kotła pelletowego</h2>
          <p>Częstotliwość obsługi zależy od konstrukcji urządzenia, automatycznego czyszczenia, jakości paliwa, obciążenia i liczby godzin pracy. Nie ma jednej liczby tygodni lub ton dla wszystkich kotłów.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card rk-pellet-card-purple"><h3>Energia elektryczna</h3><p>Podajnik, wentylator, zapalarka, pompy i sterowanie wymagają prądu. Brak zasilania zatrzymuje automatykę i transport paliwa.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Czyszczenie bieżące</h3><p>Użytkownik kontroluje popiół, palnik, wymiennik i zasobnik zgodnie z instrukcją oraz rzeczywistym stanem urządzenia.</p></div>
          <div class="rk-pellet-card rk-pellet-card-green"><h3>Przeglądy</h3><p>Serwis kotła nie zastępuje wymaganej kontroli przewodów kominowych, wentylacji i pozostałych zabezpieczeń kotłowni.</p></div>
        </div>
        <p>Do porównania kosztów trzeba dodać wartość własnego czasu lub przynajmniej świadomie zaakceptować zakres obsługi. Pellet może być wygodniejszy od kotła zasypowego, ale nie jest odpowiednikiem bezobsługowej dostawy energii z sieci.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-wymagania">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Cztery różne poziomy oceny</span>
          <h2>Klasa 5, Ecodesign, etykieta energetyczna i lista ZUM</h2>
          <p>Tych pojęć nie należy używać zamiennie. Każde odpowiada na inne pytanie dotyczące urządzenia.</p>
        </div>
        <div class="rk-pellet-table-wrap">
          <table class="rk-pellet-table">
            <thead><tr><th>Pojęcie</th><th>Co opisuje?</th><th>Czego nie potwierdza samo w sobie?</th></tr></thead>
            <tbody>
              <tr><td data-label="Pojęcie">EN 303-5 / klasa kotła</td><td data-label="Opis">Wymagania, badania i oznakowanie kotłów na paliwa stałe.</td><td data-label="Nie potwierdza">Zgodności montażu z lokalną uchwałą lub warunkami dotacji.</td></tr>
              <tr><td data-label="Pojęcie">Ecodesign</td><td data-label="Opis">Wymagania produktowe dotyczące efektywności i emisji przy wprowadzaniu urządzenia na rynek.</td><td data-label="Nie potwierdza">Prawidłowego doboru mocy i hydrauliki do budynku.</td></tr>
              <tr><td data-label="Pojęcie">Etykieta energetyczna</td><td data-label="Opis">Informację o klasie efektywności energetycznej urządzenia w objętym zakresie.</td><td data-label="Nie potwierdza">Rocznego kosztu w konkretnym domu.</td></tr>
              <tr><td data-label="Pojęcie">Lista ZUM</td><td data-label="Opis">Kwalifikowanie wskazanych urządzeń i materiałów do programu Czyste Powietrze.</td><td data-label="Nie potwierdza">Możliwości montażu pod każdym adresem ani jakości projektu.</td></tr>
            </tbody>
          </table>
        </div>
        <p>EN 303-5:2021+A1:2022 jest normą zharmonizowaną wskazaną w oficjalnej decyzji Unii Europejskiej dla kotłów na paliwa stałe. Weryfikacja dokumentów urządzenia powinna dotyczyć dokładnie oferowanego modelu i mocy.</p>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-dotacje">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Adres budynku ma znaczenie</span>
          <h2>Kocioł na pellet, lista ZUM, uchwała antysmogowa i CEEB</h2>
          <p>Spełnienie Ecodesign nie oznacza automatycznie, że kocioł można zamontować w dowolnym miejscu ani że otrzyma dofinansowanie.</p>
        </div>
        <div class="rk-pellet-steps">
          <div class="rk-pellet-step"><h3>Sprawdź przepisy lokalne</h3><p>Zweryfikuj aktualną uchwałę antysmogową, program ochrony powietrza i ewentualne ograniczenia obowiązujące pod konkretnym adresem.</p></div>
          <div class="rk-pellet-step"><h3>Sprawdź aktualne warunki programu</h3><p>Przy dofinansowaniu nie wystarczy ogólna nazwa urządzenia. Trzeba spełnić wymagania aktualnej edycji oraz zweryfikować wpis na liście ZUM w wymaganym terminie.</p></div>
          <div class="rk-pellet-step"><h3>Zweryfikuj komin i kotłownię</h3><p>Projekt musi uwzględnić odprowadzenie spalin, dopływ powietrza, wentylację, zabezpieczenia i wymagane odległości.</p></div>
          <div class="rk-pellet-step"><h3>Zaktualizuj CEEB</h3><p>Po uruchomieniu lub zmianie źródła ciepła właściciel albo zarządca powinien dopełnić obowiązku dotyczącego deklaracji CEEB.</p></div>
        </div>
        <div class="rk-pellet-warning" style="margin-top:18px"><p>Warunki dotacji zmieniają się szybciej niż parametry hydrauliczne. Dlatego w kodzie linkujemy do aktualnej strony programu, zamiast wpisywać kwotę dofinansowania jako stałą część artykułu.</p></div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-plusy">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Bilans bez marketingu</span>
          <h2>Zalety i wady kotła na pellet</h2>
          <p>Ocena powinna obejmować nie tylko koszt paliwa, lecz także komfort obsługi, dostępność miejsca, emisję lokalną i odporność systemu na przerwy w dostawie energii elektrycznej.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-green">
            <h3>Zalety</h3>
            <ul>
              <li>automatyczne dawkowanie paliwa,</li>
              <li>możliwość współpracy z instalacją wodną i CWU,</li>
              <li>paliwo możliwe do magazynowania na posesji,</li>
              <li>mniejszy zakres ręcznej obsługi niż w wielu kotłach zasypowych,</li>
              <li>możliwość zasilania grzejników i podłogówki przez odpowiednio zaprojektowane obiegi.</li>
            </ul>
          </div>
          <div class="rk-pellet-card rk-pellet-card-orange">
            <h3>Wady</h3>
            <ul>
              <li>potrzeba miejsca na kotłownię i paliwo,</li>
              <li>regularne dostawy, popiół, czyszczenie i serwis,</li>
              <li>zależność automatyki i podajnika od prądu,</li>
              <li>emisja zanieczyszczeń w miejscu użytkowania,</li>
              <li>ryzyko przewymiarowania w budynku o małym zapotrzebowaniu,</li>
              <li>lokalne ograniczenia prawne mogące zmieniać opłacalność inwestycji.</li>
            </ul>
          </div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-kiedy-nie">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Technologia musi pasować do użytkownika</span>
          <h2>Kiedy nie wybierać kotła na pellet?</h2>
          <p>Nawet dobry kocioł nie będzie dobrym wyborem, jeżeli nie pasuje do warunków budynku i sposobu życia mieszkańców.</p>
        </div>
        <div class="rk-pellet-grid-3">
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak miejsca</h3><p>Nie ma bezpiecznej kotłowni, magazynu ani wygodnej trasy dostaw. Paliwo miałoby stać w wilgoci lub utrudniać komunikację.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak akceptacji obsługi</h3><p>Użytkownik oczekuje źródła, które nie wymaga zamawiania paliwa, usuwania popiołu i kontroli urządzenia.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Bardzo małe obciążenie</h3><p>Dostępne kotły mają moc minimalną wyraźnie większą od zapotrzebowania budynku przez większość sezonu.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Ograniczenia lokalne</h3><p>Uchwała antysmogowa, plan modernizacji źródeł lub warunki budynku ograniczają zastosowanie paliwa stałego.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Nieodpowiedni komin</h3><p>Dostosowanie przewodu spalinowego i kotłowni jest niemożliwe albo nieproporcjonalnie kosztowne.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak stabilnego paliwa</h3><p>Nie ma możliwości zapewnienia suchego magazynu i powtarzalnych dostaw pelletu zgodnego z wymaganiami urządzenia.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-bledy">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Co psuje koszty i komfort</span>
          <h2>Najczęstsze błędy przy kotle na pellet</h2>
          <p>Najdroższe problemy powstają przed montażem: przy wyborze mocy, pominięciu hydrauliki i założeniu, że każdy certyfikat rozwiązuje wszystkie kwestie prawne.</p>
        </div>
        <div class="rk-pellet-grid-2">
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Moc dobrana tylko z m²</h3><p>Nie uwzględnia rzeczywistego obciążenia ani mocy minimalnej urządzenia.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Bufor z jednego przelicznika</h3><p>Pomija nadwyżkę mocy, czas akumulacji, różnicę temperatur i wymagania sterowania.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Pomieszane temperatury</h3><p>Temperatura kotła, powrotu, zasilania podłogi i powierzchni posadzki są traktowane jak jedna wartość.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Koszt tylko z ceny tony</h3><p>Pomija sprawność sezonową, prąd, dostawę, serwis, komin i różną wartość opałową paliwa.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Brak miejsca na paliwo</h3><p>Magazyn i logistyka są analizowane dopiero po montażu kotła.</p></div>
          <div class="rk-pellet-card rk-pellet-card-orange"><h3>Ecodesign zamiast sprawdzenia prawa</h3><p>Wymagania produktu są mylone z lokalną uchwałą, listą ZUM i prawidłowym projektem kotłowni.</p></div>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-checklista">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Przed zamówieniem urządzenia</span>
          <h2>Checklista wyboru kotła na pellet</h2>
          <p>Jeżeli kilku punktów nie możesz potwierdzić, wybór konkretnego modelu jest przedwczesny.</p>
        </div>
        <ul class="rk-pellet-checklist">
          <li>Znam projektowe obciążenie cieplne budynku.</li>
          <li>Znam roczne zapotrzebowanie na energię do analizy kosztów.</li>
          <li>Porównałem moc minimalną kotła z pracą budynku poza mrozem.</li>
          <li>Ustaliłem sposób przygotowania CWU.</li>
          <li>Sprawdziłem wymagania temperatury i ochrony powrotu.</li>
          <li>Analiza bufora wynika z układu, a nie jednej wartości l/kW.</li>
          <li>Mam schemat połączenia obiegu kotłowego i instalacyjnego.</li>
          <li>Znam wymagane przepływy i wysokość podnoszenia pomp.</li>
          <li>Komin, dopływ powietrza i wentylacja zostały zweryfikowane.</li>
          <li>Mam suche miejsce na obliczoną ilość pelletu.</li>
          <li>Sprawdziłem uchwałę antysmogową dla dokładnego adresu.</li>
          <li>Przy dotacji zweryfikowałem aktualne warunki oraz listę ZUM.</li>
          <li>Uwzględniłem prąd, serwis, transport i komin w kosztach.</li>
          <li>Wiem, kto będzie czyścił urządzenie i uzupełniał paliwo.</li>
        </ul>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-faq">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Pytania inwestorów</span>
          <h2>Kocioł na pellet — FAQ</h2>
          <p>Krótkie odpowiedzi na pytania o koszt, zużycie, bufor, podłogówkę i wymagania formalne.</p>
        </div>
        <div class="rk-pellet-faq">
          <details><summary>Ile pelletu zużywa dom 150 m²?</summary><div class="rk-pellet-faq-answer"><p>Nie da się tego ustalić z samej powierzchni. W przykładzie przy 80 kWh/m²/rok na CO, 2500 kWh na CWU, wartości opałowej 4,8 kWh/kg i sprawności 85% wychodzi około 3,55 t rocznie. Inny budynek 150 m² może zużyć wyraźnie mniej lub więcej.</p></div></details>
          <details><summary>Ile kosztuje ogrzewanie domu pelletem?</summary><div class="rk-pellet-faq-answer"><p>Koszt zależy od zapotrzebowania na energię, ceny i wartości opałowej pelletu, sprawności sezonowej, prądu, transportu, serwisu i komina. Kalkulator w artykule pozwala wpisać wszystkie te wartości.</p></div></details>
          <details><summary>Czy kocioł na pellet nadaje się do podłogówki?</summary><div class="rk-pellet-faq-answer"><p>Tak. Trzeba jednak zapewnić warunki wymagane przez kocioł oraz osobno regulować temperaturę i przepływ podłogówki zgodnie z projektem. Sposób połączenia obiegów nie powinien wynikać z jednego uniwersalnego schematu.</p></div></details>
          <details><summary>Czy kocioł na pellet zawsze wymaga bufora?</summary><div class="rk-pellet-faq-answer"><p>Nie należy przyjmować takiego twierdzenia bez analizy. Bufor może być wymagany lub uzasadniony przez dokumentację urządzenia, minimalną moc kotła, zład, sterowanie, wymagany czas pracy i sposób połączenia obiegów.</p></div></details>
          <details><summary>Ile litrów bufora na 1 kW kotła pelletowego?</summary><div class="rk-pellet-faq-answer"><p>Nie ma jednej wartości pasującej do każdego układu. Pojemność można analizować z nadwyżki mocy, czasu jej magazynowania i użytecznej różnicy temperatur, a następnie skonfrontować z dokumentacją kotła oraz koncepcją hydrauliczną.</p></div></details>
          <details><summary>Jaka temperatura powrotu jest potrzebna?</summary><div class="rk-pellet-faq-answer"><p>Minimalna temperatura powrotu i sposób jej ochrony zależą od konstrukcji oraz wymagań konkretnego kotła. Nie powinno się przypisywać wszystkim urządzeniom jednej wartości 55°C.</p></div></details>
          <details><summary>Jak dobrać moc kotła na pellet?</summary><div class="rk-pellet-faq-answer"><p>Moc nominalną dobiera się na podstawie projektowego obciążenia cieplnego i koncepcji CWU. Trzeba również sprawdzić moc minimalną, ponieważ przez większość sezonu budynek potrzebuje mniej ciepła niż podczas temperatury projektowej.</p></div></details>
          <details><summary>Czy cena tony pelletu wystarczy do porównania ogrzewania?</summary><div class="rk-pellet-faq-answer"><p>Nie. Potrzebna jest jeszcze wartość opałowa, sprawność sezonowa, roczne zapotrzebowanie na ciepło oraz koszty prądu, transportu, serwisu i komina.</p></div></details>
          <details><summary>Ile miejsca zajmuje tona pelletu?</summary><div class="rk-pellet-faq-answer"><p>Objętość zależy od gęstości nasypowej. Przy 650 kg/m³ sama tona zajmuje około 1,54 m³, ale rzeczywisty magazyn musi uwzględniać opakowania, palety, rezerwę przestrzeni oraz dostęp obsługowy.</p></div></details>
          <details><summary>Czy kocioł z Ecodesign automatycznie kwalifikuje się do dotacji?</summary><div class="rk-pellet-faq-answer"><p>Nie. Ecodesign jest wymaganiem produktowym. Program dotacyjny może dodatkowo wymagać określonego standardu, wpisu na listę ZUM, dokumentów i zgodności inwestycji z aktualnymi zasadami.</p></div></details>
          <details><summary>Czy po montażu kotła trzeba zaktualizować CEEB?</summary><div class="rk-pellet-faq-answer"><p>Zmiana lub uruchomienie źródła ciepła wymaga dopełnienia obowiązku dotyczącego deklaracji CEEB przez właściciela albo zarządcę budynku zgodnie z aktualną procedurą.</p></div></details>
          <details><summary>Czy kalkulator zastępuje projekt kotłowni?</summary><div class="rk-pellet-faq-answer"><p>Nie. Kalkulator szacuje paliwo i koszty. Nie dobiera mocy minimalnej, bufora, komina, pomp, zaworów, zabezpieczeń, średnic przewodów ani parametrów ogrzewania podłogowego.</p></div></details>
        </div>
      </section>

      <section class="rk-pellet-section" id="rk-pellet-zrodla">
        <div class="rk-pellet-section-head">
          <span class="rk-pellet-eyebrow">Dokumenty publiczne i normalizacyjne</span>
          <h2>Źródła i podstawa techniczna opracowania</h2>
          <p>Linki zewnętrzne prowadzą wyłącznie do instytucji publicznych i organizacji normalizacyjnych. Parametry konkretnego urządzenia należy dodatkowo potwierdzić w jego dokumentacji, bez linkowania z tego artykułu do producentów.</p>
        </div>
        <ol class="rk-pellet-sources">
          <li><a href="https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1189" target="_blank" rel="noopener nofollow">Rozporządzenie Komisji (UE) 2015/1189</a> — wymagania dotyczące ekoprojektu dla kotłów na paliwo stałe.</li>
          <li><a href="https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1187" target="_blank" rel="noopener nofollow">Rozporządzenie delegowane Komisji (UE) 2015/1187</a> — etykietowanie energetyczne kotłów na paliwo stałe w określonym zakresie.</li>
          <li><a href="https://eur-lex.europa.eu/eli/dec_impl/2024/564/oj" target="_blank" rel="noopener nofollow">Decyzja wykonawcza Komisji (UE) 2024/564</a> — publikacja odniesienia do EN 303-5:2021+A1:2022 jako normy zharmonizowanej.</li>
          <li><a href="https://www.iso.org/standard/76088.html" target="_blank" rel="noopener nofollow">ISO 17225-2:2021</a> — klasy jakościowe i specyfikacje klasyfikowanego pelletu drzewnego.</li>
          <li><a href="https://czystepowietrze.gov.pl/wez-dofinansowanie/na-co-i-ile" target="_blank" rel="noopener nofollow">Program Czyste Powietrze — aktualny zakres dofinansowania</a>. Warunki należy sprawdzać dla obowiązującej edycji i daty inwestycji.</li>
          <li><a href="https://czystepowietrze.gov.pl/wazne-komunikaty/dotacja-z-programu-czyste-powietrze-na-kotly-pellet-wylacznie-bez-rusztu-awaryjnego" target="_blank" rel="noopener nofollow">NFOŚiGW — komunikat dotyczący kotłów na pellet i rusztu awaryjnego</a>.</li>
          <li><a href="https://www.gov.pl/web/gov/zloz-deklaracje-do-centralnej-ewidencji-emisyjnosci-budynkow" target="_blank" rel="noopener nofollow">Gov.pl — złożenie deklaracji CEEB</a>.</li>
        </ol>
        <div class="rk-pellet-warning"><p><strong>Zakres opracowania:</strong> artykuł nie zastępuje lokalnej analizy prawnej, projektu komina, instrukcji kotła ani projektu instalacji grzewczej. Wymagania dotacyjne i uchwały antysmogowe należy weryfikować na dzień podejmowania decyzji.</p></div>
      </section>

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

        <header class="rk-pellet-author-head">
          <div>
            <span class="rk-pellet-kicker">Autor i odpowiedzialność merytoryczna</span>
            <h2>Robert Kucharski</h2>
            <p>Projektant instalacji sanitarnych • specjalista HVAC i ogrzewania podłogowego</p>
          </div>
          <span class="rk-pellet-author-mark">ŹRÓDŁA CIEPŁA • HYDRAULIKA • KOSZTY</span>
        </header>

        <div class="rk-pellet-author-layout">
          <aside class="rk-pellet-author-side">
            <div class="rk-pellet-author-photo"><img src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski — projektant instalacji sanitarnych i ogrzewania podłogowego" width="600" height="600" loading="lazy" decoding="async"></div>
            <div class="rk-pellet-author-name">Robert Kucharski</div>
            <div class="rk-pellet-author-role">Projektant instalacji sanitarnych<br>Specjalista HVAC i ogrzewania podłogowego</div>
            <div class="rk-pellet-author-social-label">Profile autora</div>
            <div class="rk-pellet-author-social" aria-label="Profile Roberta Kucharskiego w mediach społecznościowych">
              <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener nofollow me" aria-label="Robert Kucharski na LinkedIn"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M5.3 3.6A2.3 2.3 0 1 1 .7 3.6a2.3 2.3 0 0 1 4.6 0ZM1.1 8h4.3v13H1.1V8Zm6.9 0h4.1v1.8h.1c.6-1.1 2-2.3 4.1-2.3 4.4 0 5.2 2.9 5.2 6.7V21h-4.3v-6c0-1.4 0-3.3-2-3.3s-2.3 1.6-2.3 3.2V21H8V8Z"/></svg></a>
              <a href="https://www.facebook.com/projektogrzewaniapl" target="_blank" rel="noopener nofollow me" aria-label="Projekt Ogrzewania na Facebooku"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M24 12.1C24 5.4 18.6 0 12 0S0 5.4 0 12.1C0 18.1 4.4 23 10.1 24v-8.4H7.1v-3.5h3V9.5c0-3 1.8-4.7 4.5-4.7 1.3 0 2.7.2 2.7.2v3h-1.5c-1.5 0-1.9.9-1.9 1.8v2.2h3.3l-.5 3.5h-2.8V24C19.6 23 24 18.1 24 12.1Z"/></svg></a>
              <a href="https://x.com/Projekt_HVAC" target="_blank" rel="noopener nofollow me" aria-label="Projekt HVAC w serwisie X"><svg viewBox="0 0 24 24" aria-hidden="true"><path d="M18.9 2H22l-6.8 7.8L23.2 22h-6.3L12 15.6 6.4 22H3.3l7.2-8.2L.8 2h6.5l4.4 5.8L18.9 2Zm-1.1 17.9h1.7L6.4 4H4.6l13.2 15.9Z"/></svg></a>
            </div>
          </aside>

          <div class="rk-pellet-author-main">
            <blockquote class="rk-pellet-author-quote"><p>„Przy kotle na pellet cena tony paliwa jest dopiero początkiem obliczeń. Dobry projekt musi połączyć moc minimalną źródła, roczne zapotrzebowanie, przepływy, temperatury, sterowanie i realny zakres obsługi użytkownika.”</p></blockquote>
            <div class="rk-pellet-author-tabs" role="tablist" aria-label="Informacje o autorze">
              <label class="rk-pellet-author-tab" for="rk-pellet-author-about">O autorze</label>
              <label class="rk-pellet-author-tab" for="rk-pellet-author-exp">Praktyka</label>
              <label class="rk-pellet-author-tab" for="rk-pellet-author-method">Metodyka</label>
            </div>
            <div class="rk-pellet-author-panel rk-pellet-author-panel-about">
              <p>Robert Kucharski opracowuje projekty wodnego ogrzewania podłogowego i instalacji grzewczych dla domów nowych oraz modernizowanych. Łączy obliczenia strat ciepła z doborem temperatur, rozstawów rur, długości pętli, przepływów, spadków ciśnienia, źródeł ciepła i nastaw rozdzielaczy.</p>
              <p>W materiałach edukacyjnych oddziela moc projektową w kW od rocznego zużycia energii w kWh. Dzięki temu koszt ogrzewania nie jest wyprowadzany z samego metrażu, a dobór urządzenia nie opiera się wyłącznie na jednej wartości znamionowej.</p>
              <p><a href="https://projekt-ogrzewania.pl/author/robert-kucharski/">Zobacz profil autora i pozostałe opracowania</a>.</p>
            </div>
            <div class="rk-pellet-author-panel rk-pellet-author-panel-exp">
              <p>Przy projektowaniu układu z kotłem na pellet Robert analizuje jednocześnie obieg kotłowy oraz instalacyjny: wymagania temperatury powrotu, moc minimalną palnika, przepływy, sposób przygotowania CWU, zamykanie obiegów grzewczych i zasadność magazynowania nadwyżki energii.</p>
              <p>Dokumentacja wykonawcza powinna pokazywać źródło ciepła w kontekście całej instalacji, a nie jako osobne urządzenie dobrane z tabeli powierzchni. W podłogówce obejmuje to również rzeczywiste trasy pętli, długości, przepływy i nastawy rozdzielacza.</p>
            </div>
            <div class="rk-pellet-author-panel rk-pellet-author-panel-method">
              <p>Kalkulator w tym artykule korzysta z jawnego bilansu energii: zapotrzebowania użytecznego, wartości opałowej, sprawności sezonowej oraz kosztów dodatkowych. Nie wykorzystuje jednej ceny za m² ani sztywnej ilości ton przypisanej do powierzchni domu.</p>
              <p>Robert jest właścicielem i autorem trzech serwisów branżowych, których powiązanie podaje jawnie:</p>
              <div class="rk-pellet-site-links"><a href="https://projekt-ogrzewania.pl/">Projekt-Ogrzewania.pl</a><a href="https://remont.biz.pl/" target="_blank" rel="noopener nofollow">Remont.biz.pl</a><a href="https://sobir.pl/" target="_blank" rel="noopener nofollow">Sobir.pl</a></div>
            </div>
          </div>
        </div>
      </section>

      <aside class="rk-pellet-cta rk-pellet-final-cta" aria-label="Zamówienie projektu ogrzewania podłogowego">
        <div class="rk-pellet-cta-title">Otrzymaj projekt podłogówki dopasowany do kotła na pellet</div>
        <p>Projekt obejmuje obliczenia cieplne i hydrauliczne, rozrysowane pętle, długości rur, przepływy oraz nastawy rozdzielaczy. Parametry ogrzewania podłogowego zostaną skoordynowane z planowanym źródłem ciepła i koncepcją kotłowni.</p>
        <a class="rk-pellet-cta-button rk-pellet-sales-cta" href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Zamów kompletny projekt ogrzewania podłogowego</a>
      </aside>
    </div>
  </div>
</article>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@graph": [
    {
      "@type": "WebSite",
      "@id": "https://projekt-ogrzewania.pl/#website",
      "url": "https://projekt-ogrzewania.pl/",
      "name": "Projekt Ogrzewania",
      "inLanguage": "pl-PL",
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"}
    },
    {
      "@type": "Organization",
      "@id": "https://projekt-ogrzewania.pl/#organization",
      "name": "Projekt Ogrzewania",
      "url": "https://projekt-ogrzewania.pl/",
      "logo": {"@type": "ImageObject", "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp"},
      "founder": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "Organization",
      "@id": "https://remont.biz.pl/#organization",
      "name": "Remont.biz.pl",
      "url": "https://remont.biz.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "Organization",
      "@id": "https://sobir.pl/#organization",
      "name": "Sobir.pl",
      "url": "https://sobir.pl/",
      "founder": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"}
    },
    {
      "@type": "Person",
      "@id": "https://projekt-ogrzewania.pl/#robert-kucharski",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/author/robert-kucharski/",
      "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
      "jobTitle": "Projektant instalacji sanitarnych, specjalista HVAC i ogrzewania podłogowego",
      "worksFor": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "knowsAbout": [
        "ogrzewanie podłogowe",
        "kotły na pellet",
        "obliczenia strat ciepła",
        "hydraulika instalacji grzewczych",
        "koszty ogrzewania"
      ],
      "sameAs": [
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://www.facebook.com/projektogrzewaniapl",
        "https://x.com/Projekt_HVAC",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webpage",
      "url": "https://projekt-ogrzewania.pl/kociol-na-pellet/",
      "name": "Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką",
      "description": "Sprawdź, kiedy kocioł na pellet ma sens. Oblicz zużycie pelletu, koszt sezonu i miejsce na paliwo. Dobór mocy, bufor, podłogówka i przepisy.",
      "isPartOf": {"@id": "https://projekt-ogrzewania.pl/#website"},
      "breadcrumb": {"@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#breadcrumb"},
      "mainEntity": {"@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article"},
      "inLanguage": "pl-PL",
      "dateModified": "2026-08-31"
    },
    {
      "@type": "BreadcrumbList",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#breadcrumb",
      "itemListElement": [
        {"@type": "ListItem", "position": 1, "name": "Strona główna", "item": "https://projekt-ogrzewania.pl/"},
        {"@type": "ListItem", "position": 2, "name": "Blog", "item": "https://projekt-ogrzewania.pl/blog/"},
        {"@type": "ListItem", "position": 3, "name": "Kocioł na pellet", "item": "https://projekt-ogrzewania.pl/kociol-na-pellet/"}
      ]
    },
    {
      "@type": "WebApplication",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#calculator",
      "name": "Kalkulator kosztów ogrzewania pelletem",
      "url": "https://projekt-ogrzewania.pl/kociol-na-pellet/#rk-pellet-kalkulator",
      "applicationCategory": "UtilitiesApplication",
      "operatingSystem": "Any",
      "browserRequirements": "JavaScript",
      "inLanguage": "pl-PL",
      "isAccessibleForFree": true,
      "offers": {"@type": "Offer", "price": "0", "priceCurrency": "PLN"},
      "creator": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"},
      "description": "Narzędzie oblicza roczne zużycie pelletu, liczbę worków, zapotrzebowanie na magazyn oraz pełny koszt ogrzewania na podstawie jawnych danych użytkownika."
    },
    {
      "@type": "HowTo",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#howto",
      "name": "Jak obliczyć koszt ogrzewania pelletem",
      "description": "Kolejność obliczeń uwzględniająca energię użyteczną, wartość opałową, sprawność sezonową i koszty dodatkowe.",
      "totalTime": "PT15M",
      "step": [
        {"@type": "HowToStep", "position": 1, "name": "Ustal roczną energię użyteczną", "text": "Odczytaj zapotrzebowanie na energię do ogrzewania oraz przygotowania ciepłej wody."},
        {"@type": "HowToStep", "position": 2, "name": "Wpisz sprawność sezonową", "text": "Użyj realistycznej sprawności całego sezonu, a nie tylko sprawności przy mocy znamionowej."},
        {"@type": "HowToStep", "position": 3, "name": "Wpisz parametry pelletu", "text": "Podaj wartość opałową, cenę, masę worka i gęstość nasypową."},
        {"@type": "HowToStep", "position": 4, "name": "Dodaj koszty dodatkowe", "text": "Uwzględnij energię elektryczną, transport, serwis oraz koszty kominowe."},
        {"@type": "HowToStep", "position": 5, "name": "Porównaj scenariusze ceny", "text": "Sprawdź, jak koszt roczny zmieni się przy niższej lub wyższej cenie pelletu."},
        {"@type": "HowToStep", "position": 6, "name": "Zweryfikuj ograniczenia", "text": "Oddziel analizę kosztu od doboru mocy kotła, bufora, komina i hydrauliki instalacji."}
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#faq",
      "mainEntity": [
        {"@type": "Question", "name": "Ile pelletu zużywa dom 150 m²?", "acceptedAnswer": {"@type": "Answer", "text": "Nie da się tego ustalić z samej powierzchni. W przykładzie przy 80 kWh/m²/rok na CO, 2500 kWh na CWU, wartości opałowej 4,8 kWh/kg i sprawności 85% wychodzi około 3,55 t rocznie."}},
        {"@type": "Question", "name": "Ile kosztuje ogrzewanie domu pelletem?", "acceptedAnswer": {"@type": "Answer", "text": "Koszt zależy od zapotrzebowania na energię, ceny i wartości opałowej pelletu, sprawności sezonowej, prądu, transportu, serwisu i komina."}},
        {"@type": "Question", "name": "Czy kocioł na pellet nadaje się do podłogówki?", "acceptedAnswer": {"@type": "Answer", "text": "Tak. Trzeba zapewnić warunki wymagane przez kocioł oraz osobno regulować temperaturę i przepływ podłogówki zgodnie z projektem."}},
        {"@type": "Question", "name": "Czy kocioł na pellet zawsze wymaga bufora?", "acceptedAnswer": {"@type": "Answer", "text": "Nie należy przyjmować takiego twierdzenia bez analizy. Bufor może być wymagany lub uzasadniony przez dokumentację urządzenia, minimalną moc kotła, zład, sterowanie i sposób połączenia obiegów."}},
        {"@type": "Question", "name": "Ile litrów bufora na 1 kW kotła pelletowego?", "acceptedAnswer": {"@type": "Answer", "text": "Nie ma jednej wartości pasującej do każdego układu. Pojemność analizuje się z nadwyżki mocy, czasu jej magazynowania i użytecznej różnicy temperatur."}},
        {"@type": "Question", "name": "Jaka temperatura powrotu jest potrzebna?", "acceptedAnswer": {"@type": "Answer", "text": "Minimalna temperatura powrotu i sposób jej ochrony zależą od konstrukcji oraz wymagań konkretnego kotła."}},
        {"@type": "Question", "name": "Jak dobrać moc kotła na pellet?", "acceptedAnswer": {"@type": "Answer", "text": "Moc nominalną dobiera się na podstawie projektowego obciążenia cieplnego i koncepcji CWU. Trzeba również sprawdzić moc minimalną urządzenia."}},
        {"@type": "Question", "name": "Czy cena tony pelletu wystarczy do porównania ogrzewania?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Potrzebna jest wartość opałowa, sprawność sezonowa, roczne zapotrzebowanie na ciepło oraz koszty prądu, transportu, serwisu i komina."}},
        {"@type": "Question", "name": "Ile miejsca zajmuje tona pelletu?", "acceptedAnswer": {"@type": "Answer", "text": "Objętość zależy od gęstości nasypowej. Przy 650 kg/m³ sama tona zajmuje około 1,54 m³, ale rzeczywisty magazyn musi być większy."}},
        {"@type": "Question", "name": "Czy kocioł z Ecodesign automatycznie kwalifikuje się do dotacji?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Program dotacyjny może dodatkowo wymagać określonego standardu, wpisu na listę ZUM, dokumentów i zgodności inwestycji z aktualnymi zasadami."}},
        {"@type": "Question", "name": "Czy po montażu kotła trzeba zaktualizować CEEB?", "acceptedAnswer": {"@type": "Answer", "text": "Zmiana lub uruchomienie źródła ciepła wymaga dopełnienia obowiązku dotyczącego deklaracji CEEB przez właściciela albo zarządcę budynku zgodnie z aktualną procedurą."}},
        {"@type": "Question", "name": "Czy kalkulator zastępuje projekt kotłowni?", "acceptedAnswer": {"@type": "Answer", "text": "Nie. Kalkulator szacuje paliwo i koszty. Nie dobiera mocy minimalnej, bufora, komina, pomp, zaworów, zabezpieczeń ani parametrów podłogówki."}}
      ]
    },
    {
      "@type": "TechArticle",
      "@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#article",
      "headline": "Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką",
      "description": "Sprawdź, kiedy kocioł na pellet ma sens. Oblicz zużycie pelletu, koszt sezonu i miejsce na paliwo. Dobór mocy, bufor, podłogówka i przepisy.",
      "url": "https://projekt-ogrzewania.pl/kociol-na-pellet/",
      "mainEntityOfPage": {"@id": "https://projekt-ogrzewania.pl/kociol-na-pellet/#webpage"},
      "author": {"@id": "https://projekt-ogrzewania.pl/#robert-kucharski"},
      "publisher": {"@id": "https://projekt-ogrzewania.pl/#organization"},
      "dateModified": "2026-08-31",
      "inLanguage": "pl-PL",
      "articleSection": "Źródła ciepła i ogrzewanie podłogowe",
      "keywords": [
        "kocioł na pellet",
        "koszt ogrzewania pelletem",
        "kalkulator zużycia pelletu",
        "kocioł na pellet do podłogówki",
        "bufor do kotła na pellet",
        "lista ZUM kocioł na pellet"
      ],
      "isBasedOn": [
        "https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1189",
        "https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32015R1187",
        "https://eur-lex.europa.eu/eli/dec_impl/2024/564/oj",
        "https://www.iso.org/standard/76088.html",
        "https://czystepowietrze.gov.pl/wez-dofinansowanie/na-co-i-ile"
      ],
      "about": [
        {"@type": "Thing", "name": "Kocioł na pellet"},
        {"@type": "Thing", "name": "Koszty ogrzewania"},
        {"@type": "Thing", "name": "Ogrzewanie podłogowe"}
      ]
    }
  ]
}
</script>

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

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

  var defaults = {
    "rk-pellet-energy-mode": "direct",
    "rk-pellet-heat-energy": 12000,
    "rk-pellet-area": 150,
    "rk-pellet-indicator": 80,
    "rk-pellet-dhw-energy": 2500,
    "rk-pellet-heating-days": 220,
    "rk-pellet-efficiency": 85,
    "rk-pellet-calorific": 4.8,
    "rk-pellet-price": 1500,
    "rk-pellet-bag-mass": 15,
    "rk-pellet-density": 650,
    "rk-pellet-storage-margin": 15,
    "rk-pellet-electric-use": 450,
    "rk-pellet-electric-price": 1.10,
    "rk-pellet-delivery": 300,
    "rk-pellet-service": 800,
    "rk-pellet-chimney": 250
  };

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

  function numberValue(id, fallback) {
    var element = byId(id);
    if (!element) { return fallback; }
    var parsed = Number.parseFloat(String(element.value).replace(",", "."));
    if (!Number.isFinite(parsed)) { return fallback; }
    return parsed;
  }

  function stringValue(id, fallback) {
    var element = byId(id);
    if (!element) { return fallback; }
    return String(element.value || fallback);
  }

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

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

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

  function readData() {
    return {
      mode: stringValue("rk-pellet-energy-mode", defaults["rk-pellet-energy-mode"]),
      heatEnergy: numberValue("rk-pellet-heat-energy", defaults["rk-pellet-heat-energy"]),
      area: numberValue("rk-pellet-area", defaults["rk-pellet-area"]),
      indicator: numberValue("rk-pellet-indicator", defaults["rk-pellet-indicator"]),
      dhwEnergy: numberValue("rk-pellet-dhw-energy", defaults["rk-pellet-dhw-energy"]),
      heatingDays: numberValue("rk-pellet-heating-days", defaults["rk-pellet-heating-days"]),
      efficiency: numberValue("rk-pellet-efficiency", defaults["rk-pellet-efficiency"]),
      calorific: numberValue("rk-pellet-calorific", defaults["rk-pellet-calorific"]),
      pelletPrice: numberValue("rk-pellet-price", defaults["rk-pellet-price"]),
      bagMass: numberValue("rk-pellet-bag-mass", defaults["rk-pellet-bag-mass"]),
      density: numberValue("rk-pellet-density", defaults["rk-pellet-density"]),
      storageMargin: numberValue("rk-pellet-storage-margin", defaults["rk-pellet-storage-margin"]),
      electricUse: numberValue("rk-pellet-electric-use", defaults["rk-pellet-electric-use"]),
      electricPrice: numberValue("rk-pellet-electric-price", defaults["rk-pellet-electric-price"]),
      delivery: numberValue("rk-pellet-delivery", defaults["rk-pellet-delivery"]),
      service: numberValue("rk-pellet-service", defaults["rk-pellet-service"]),
      chimney: numberValue("rk-pellet-chimney", defaults["rk-pellet-chimney"])
    };
  }

  function validateData(data) {
    var errors = [];
    if (data.mode === "direct") {
      if (!(data.heatEnergy > 0)) { errors.push("Roczna energia na ogrzewanie musi być większa od zera."); }
    } else {
      if (!(data.area > 0)) { errors.push("Powierzchnia ogrzewana musi być większa od zera."); }
      if (!(data.indicator > 0)) { errors.push("Wskaźnik energii musi być większy od zera."); }
    }
    if (data.dhwEnergy < 0) { errors.push("Energia na CWU nie może być ujemna."); }
    if (!(data.heatingDays > 0)) { errors.push("Liczba dni sezonu musi być większa od zera."); }
    if (!(data.efficiency > 0)) { errors.push("Sprawność musi być większa od zera."); }
    if (data.efficiency > 100) { errors.push("Sprawność w tym modelu nie może przekraczać 100%."); }
    if (!(data.calorific > 0)) { errors.push("Wartość opałowa musi być większa od zera."); }
    if (!(data.pelletPrice > 0)) { errors.push("Cena pelletu musi być większa od zera."); }
    if (!(data.bagMass > 0)) { errors.push("Masa worka musi być większa od zera."); }
    if (!(data.density > 0)) { errors.push("Gęstość nasypowa musi być większa od zera."); }
    if (data.storageMargin < 0) { errors.push("Rezerwa magazynu nie może być ujemna."); }
    if (data.electricUse < 0) { errors.push("Zużycie prądu nie może być ujemne."); }
    if (data.electricPrice < 0) { errors.push("Cena prądu nie może być ujemna."); }
    if (data.delivery < 0) { errors.push("Koszt transportu nie może być ujemny."); }
    if (data.service < 0) { errors.push("Koszt serwisu nie może być ujemny."); }
    if (data.chimney < 0) { errors.push("Koszt komina nie może być ujemny."); }
    return errors;
  }

  function calculateModel(data) {
    var heatingEnergy = data.mode === "direct" ? data.heatEnergy : data.area * data.indicator;
    var usefulEnergy = heatingEnergy + data.dhwEnergy;
    var efficiencyDecimal = data.efficiency / 100;
    var heatingMass = heatingEnergy / (data.calorific * efficiencyDecimal);
    var dhwMass = data.dhwEnergy / (data.calorific * efficiencyDecimal);
    var totalMass = heatingMass + dhwMass;
    var tonnes = totalMass / 1000;
    var fuelEnergy = usefulEnergy / efficiencyDecimal;
    var bags = Math.ceil(totalMass / data.bagMass);
    var bulkVolume = totalMass / data.density;
    var storageVolume = bulkVolume * (1 + data.storageMargin / 100);
    var fuelCost = tonnes * data.pelletPrice;
    var electricCost = data.electricUse * data.electricPrice;
    var totalCost = fuelCost + electricCost + data.delivery + data.service + data.chimney;
    var unitCost = totalCost / usefulEnergy;
    var monthlyCost = totalCost / 12;
    var dailyMass = heatingMass / data.heatingDays;

    var scenarioChanges = [-30, -15, 0, 15, 30];
    var scenarios = scenarioChanges.map(function (change) {
      var price = data.pelletPrice * (1 + change / 100);
      var scenarioFuelCost = tonnes * price;
      var scenarioTotal = scenarioFuelCost + electricCost + data.delivery + data.service + data.chimney;
      return {
        change: change,
        price: price,
        fuelCost: scenarioFuelCost,
        totalCost: scenarioTotal,
        unitCost: scenarioTotal / usefulEnergy
      };
    });

    return {
      heatingEnergy: heatingEnergy,
      usefulEnergy: usefulEnergy,
      fuelEnergy: fuelEnergy,
      heatingMass: heatingMass,
      dhwMass: dhwMass,
      totalMass: totalMass,
      tonnes: tonnes,
      bags: bags,
      bulkVolume: bulkVolume,
      storageVolume: storageVolume,
      fuelCost: fuelCost,
      electricCost: electricCost,
      totalCost: totalCost,
      unitCost: unitCost,
      monthlyCost: monthlyCost,
      dailyMass: dailyMass,
      scenarios: scenarios
    };
  }

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

  function setBar(id, labelId, cost, totalCost) {
    var bar = byId(id);
    var share = totalCost > 0 ? cost / totalCost * 100 : 0;
    if (bar) { bar.style.width = clamp(share, 0, 100) + "%"; }
    setText(labelId, formatNumber(share, 0) + "%");
  }

  function renderScenarios(model) {
    var body = byId("rk-pellet-scenario-body");
    if (!body) { return; }
    body.innerHTML = model.scenarios.map(function (scenario) {
      var rowClass = scenario.change === 0 ? " class=\"is-base\"" : "";
      var scenarioName = scenario.change === 0 ? "Wpisana cena" : (scenario.change > 0 ? "+" + scenario.change + "%" : scenario.change + "%");
      var badge = scenario.change === 0 ? " <span class=\"rk-pellet-badge\">bazowy</span>" : "";
      return "<tr" + rowClass + ">" +
        "<td data-label=\"Scenariusz\">" + scenarioName + badge + "</td>" +
        "<td data-label=\"Cena pelletu\">" + formatMoney(scenario.price, 0) + "/t</td>" +
        "<td data-label=\"Koszt paliwa\">" + formatMoney(scenario.fuelCost, 0) + "</td>" +
        "<td data-label=\"Koszt całkowity\">" + formatMoney(scenario.totalCost, 0) + "</td>" +
        "<td data-label=\"Koszt 1 kWh\">" + formatMoney(scenario.unitCost, 2) + "/kWh</td>" +
        "</tr>";
    }).join("");
  }

  function renderDiagnostics(data, model) {
    var container = byId("rk-pellet-diagnostics");
    if (!container) { return; }
    var items = [];

    if (data.mode === "indicator") {
      items.push({warn: true, text: "Energia CO została oszacowana jako powierzchnia × wskaźnik: " + formatNumber(data.area, 0) + " m² × " + formatNumber(data.indicator, 0) + " kWh/m²/rok. Zastąp ją wartością z audytu lub wiarygodnych obliczeń, gdy będzie dostępna."});
    } else {
      items.push({warn: false, text: "Kalkulator korzysta z bezpośrednio wpisanej energii na ogrzewanie: " + formatNumber(model.heatingEnergy, 0) + " kWh/rok."});
    }

    if (data.efficiency > 92) {
      items.push({warn: true, text: "Wpisana sprawność sezonowa przekracza 92%. Sprawdź, czy nie przepisano sprawności laboratoryjnej przy jednym punkcie pracy zamiast wyniku sezonowego całego układu."});
    } else {
      items.push({warn: false, text: "Przyjęta sprawność sezonowa wynosi " + formatNumber(data.efficiency, 1) + "%. Zmiana o kilka punktów procentowych wpływa bezpośrednio na ilość paliwa."});
    }

    items.push({warn: false, text: "Każda tona pelletu przy wpisanej wartości opałowej i sprawności dostarcza około " + formatNumber(data.calorific * data.efficiency / 100 * 1000, 0) + " kWh użytecznego ciepła."});

    if (model.storageVolume > 6) {
      items.push({warn: true, text: "Obliczona przestrzeń z rezerwą przekracza " + formatNumber(model.storageVolume, 1) + " m³. Zweryfikuj nośność, wilgotność, dostęp do rozładunku oraz rzeczywistą geometrię magazynu."});
    } else {
      items.push({warn: false, text: "Orientacyjna przestrzeń z rezerwą wynosi " + formatNumber(model.storageVolume, 1) + " m³. Opakowania, palety i przejścia mogą zwiększyć wymagane miejsce."});
    }

    var fixedCosts = model.electricCost + data.delivery + data.service + data.chimney;
    var fixedShare = model.totalCost > 0 ? fixedCosts / model.totalCost * 100 : 0;
    if (fixedShare > 35) {
      items.push({warn: true, text: "Prąd i koszty stałe stanowią około " + formatNumber(fixedShare, 0) + "% wyniku. Porównywanie wyłącznie ceny pelletu z innym nośnikiem byłoby szczególnie mylące."});
    } else {
      items.push({warn: false, text: "Prąd, transport, serwis i komin stanowią około " + formatNumber(fixedShare, 0) + "% pełnego kosztu rocznego."});
    }

    items.push({warn: true, text: "Wynik kosztowy nie dobiera mocy kotła, bufora ani komina. Moc źródła musi wynikać z projektowego obciążenia cieplnego, a nie z rocznej liczby kWh."});

    container.innerHTML = items.map(function (item) {
      var className = item.warn ? "rk-pellet-diagnostic is-warn" : "rk-pellet-diagnostic";
      return "<div class=\"" + className + "\">" + item.text + "</div>";
    }).join("");
  }

  function drawPriceChart(model) {
    var canvas = byId("rk-pellet-price-chart");
    if (!canvas) { return; }
    var context = canvas.getContext("2d");
    if (!context) { return; }
    var wrapperWidth = canvas.parentElement ? canvas.parentElement.clientWidth : 600;
    var width = Math.max(300, wrapperWidth);
    var height = 280;
    var pixelRatio = window.devicePixelRatio || 1;
    canvas.width = Math.round(width * pixelRatio);
    canvas.height = Math.round(height * pixelRatio);
    canvas.style.width = width + "px";
    canvas.style.height = height + "px";
    context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
    context.clearRect(0, 0, width, height);

    var padding = {left: 62, right: 22, top: 28, bottom: 48};
    var plotWidth = width - padding.left - padding.right;
    var plotHeight = height - padding.top - padding.bottom;
    var values = model.scenarios.map(function (item) { return item.totalCost; });
    var minimum = Math.min.apply(Math, values) * 0.92;
    var maximum = Math.max.apply(Math, values) * 1.08;
    if (maximum <= minimum) { maximum = minimum + 1; }

    context.font = "11px system-ui, sans-serif";
    context.lineWidth = 1;
    for (var grid = 0; grid <= 4; grid += 1) {
      var y = padding.top + plotHeight * grid / 4;
      context.strokeStyle = "#d8e6eb";
      context.beginPath();
      context.moveTo(padding.left, y);
      context.lineTo(width - padding.right, y);
      context.stroke();
      var value = maximum - (maximum - minimum) * grid / 4;
      context.fillStyle = "#617784";
      context.textAlign = "right";
      context.fillText(formatNumber(value, 0), padding.left - 8, y + 4);
    }

    var step = plotWidth / (model.scenarios.length - 1);
    var points = model.scenarios.map(function (scenario, index) {
      var x = padding.left + step * index;
      var ratio = (scenario.totalCost - minimum) / (maximum - minimum);
      var y = padding.top + plotHeight * (1 - ratio);
      return {x: x, y: y, scenario: scenario};
    });

    context.strokeStyle = "#078fbe";
    context.lineWidth = 3;
    context.beginPath();
    points.forEach(function (point, index) {
      if (index === 0) { context.moveTo(point.x, point.y); }
      else { context.lineTo(point.x, point.y); }
    });
    context.stroke();

    points.forEach(function (point) {
      var isBase = point.scenario.change === 0;
      context.fillStyle = isBase ? "#ff6a3d" : "#078fbe";
      context.beginPath();
      context.arc(point.x, point.y, isBase ? 6 : 5, 0, Math.PI * 2);
      context.fill();
      context.fillStyle = "#203744";
      context.textAlign = "center";
      var changeLabel = point.scenario.change === 0 ? "bazowa" : (point.scenario.change > 0 ? "+" + point.scenario.change + "%" : point.scenario.change + "%");
      context.fillText(changeLabel, point.x, height - 25);
      context.fillText(formatNumber(point.scenario.totalCost, 0) + " zł", point.x, point.y - 11);
    });

    context.save();
    context.translate(15, padding.top + plotHeight / 2);
    context.rotate(-Math.PI / 2);
    context.fillStyle = "#47606d";
    context.textAlign = "center";
    context.fillText("koszt roczny [zł]", 0, 0);
    context.restore();
  }

  function svgElement(name, attributes) {
    var element = document.createElementNS("http://www.w3.org/2000/svg", name);
    Object.keys(attributes).forEach(function (key) { element.setAttribute(key, String(attributes[key])); });
    return element;
  }

  function drawStorage(model) {
    var svg = byId("rk-pellet-storage-svg");
    if (!svg) { return; }
    while (svg.firstChild) { svg.removeChild(svg.firstChild); }
    var maximumDisplay = Math.max(8, Math.ceil(model.storageVolume));
    var fillRatio = clamp(model.storageVolume / maximumDisplay, 0.04, 1);
    var tankX = 62;
    var tankY = 28;
    var tankWidth = 126;
    var tankHeight = 175;
    var fillHeight = tankHeight * fillRatio;
    var fillY = tankY + tankHeight - fillHeight;

    svg.appendChild(svgElement("rect", {x: tankX, y: tankY, width: tankWidth, height: tankHeight, rx: 18, fill: "#edf4f6", stroke: "#14384d", "stroke-width": 3}));
    svg.appendChild(svgElement("rect", {x: tankX + 5, y: fillY, width: tankWidth - 10, height: fillHeight - 5, rx: 13, fill: "#c7904d"}));

    for (var dot = 0; dot < 28; dot += 1) {
      var column = dot % 7;
      var row = Math.floor(dot / 7);
      var cx = tankX + 18 + column * 15;
      var cy = fillY + 14 + row * 17;
      if (cy < tankY + tankHeight - 7) {
        svg.appendChild(svgElement("ellipse", {cx: cx, cy: cy, rx: 5, ry: 2.4, fill: "#8a5d2c", transform: "rotate(-18 " + cx + " " + cy + ")"}));
      }
    }

    var valueText = svgElement("text", {x: 125, y: 224, fill: "#102536", "font-size": 18, "font-weight": 900, "text-anchor": "middle"});
    valueText.textContent = formatNumber(model.storageVolume, 1) + " m³";
    svg.appendChild(valueText);
    var noteText = svgElement("text", {x: 125, y: 242, fill: "#607783", "font-size": 10, "text-anchor": "middle"});
    noteText.textContent = "objętość obliczeniowa z rezerwą";
    svg.appendChild(noteText);
  }

  function renderModel(data, model) {
    setText("rk-pellet-total-cost", formatMoney(model.totalCost, 0));
    setText("rk-pellet-result-summary", "Dla " + formatNumber(model.usefulEnergy, 0) + " kWh energii użytecznej, ceny " + formatMoney(data.pelletPrice, 0) + "/t i sprawności sezonowej " + formatNumber(data.efficiency, 1) + "%.");
    setText("rk-pellet-useful-energy", formatNumber(model.usefulEnergy, 0) + " kWh");
    setText("rk-pellet-fuel-energy", formatNumber(model.fuelEnergy, 0) + " kWh");
    setText("rk-pellet-mass", formatNumber(model.tonnes, 2) + " t");
    setText("rk-pellet-bags", formatNumber(model.bags, 0) + " szt.");
    setText("rk-pellet-fuel-cost", formatMoney(model.fuelCost, 0));
    setText("rk-pellet-unit-cost", formatMoney(model.unitCost, 2) + "/kWh");
    setText("rk-pellet-monthly-cost", formatMoney(model.monthlyCost, 0));
    setText("rk-pellet-daily-mass", formatNumber(model.dailyMass, 1) + " kg/dzień");
    setText("rk-pellet-bulk-volume", formatNumber(model.bulkVolume, 1) + " m³");
    setText("rk-pellet-storage-volume", formatNumber(model.storageVolume, 1) + " m³");
    setText("rk-pellet-heating-mass", formatNumber(model.heatingMass / 1000, 2) + " t");
    setText("rk-pellet-dhw-mass", formatNumber(model.dhwMass / 1000, 2) + " t");

    setBar("rk-pellet-bar-fuel", "rk-pellet-label-fuel", model.fuelCost, model.totalCost);
    setBar("rk-pellet-bar-electric", "rk-pellet-label-electric", model.electricCost, model.totalCost);
    setBar("rk-pellet-bar-service", "rk-pellet-label-service", data.service, model.totalCost);
    setBar("rk-pellet-bar-delivery", "rk-pellet-label-delivery", data.delivery, model.totalCost);
    setBar("rk-pellet-bar-chimney", "rk-pellet-label-chimney", data.chimney, model.totalCost);

    var status = byId("rk-pellet-status");
    if (status) {
      status.className = "rk-pellet-result-status";
      if (data.mode === "indicator") {
        status.className += " is-borderline";
        status.innerHTML = "<strong>Wynik opiera się na wskaźniku powierzchniowym.</strong> Traktuj go jako scenariusz wstępny. Największą poprawę dokładności da zastąpienie powierzchni i wskaźnika roczną energią z audytu lub wiarygodnych obliczeń.";
      } else {
        status.innerHTML = "<strong>Wynik wykorzystuje bezpośrednio wpisaną energię.</strong> Sprawdź jeszcze, czy podana sprawność jest sezonowa, cena obejmuje rzeczywiste paliwo z dostawą, a koszty serwisu odpowiadają lokalnym warunkom.";
      }
    }

    renderScenarios(model);
    renderDiagnostics(data, model);
    drawPriceChart(model);
    drawStorage(model);
  }

  function updateEnergyMode() {
    var mode = stringValue("rk-pellet-energy-mode", "direct");
    var directField = byId("rk-pellet-direct-field");
    var areaField = byId("rk-pellet-area-field");
    var indicatorField = byId("rk-pellet-indicator-field");
    if (mode === "direct") {
      if (directField) { directField.classList.remove("is-hidden"); }
      if (areaField) { areaField.classList.add("is-hidden"); }
      if (indicatorField) { indicatorField.classList.add("is-hidden"); }
    } else {
      if (directField) { directField.classList.add("is-hidden"); }
      if (areaField) { areaField.classList.remove("is-hidden"); }
      if (indicatorField) { indicatorField.classList.remove("is-hidden"); }
    }
  }

  function calculate() {
    updateEnergyMode();
    var data = readData();
    var errors = validateData(data);
    var errorBox = byId("rk-pellet-error");
    if (errors.length > 0) {
      if (errorBox) {
        errorBox.textContent = errors.join(" ");
        errorBox.classList.add("is-visible");
      }
      return;
    }
    if (errorBox) {
      errorBox.textContent = "";
      errorBox.classList.remove("is-visible");
    }
    renderModel(data, calculateModel(data));
  }

  function resetCalculator() {
    Object.keys(defaults).forEach(function (id) {
      var element = byId(id);
      if (element) { element.value = String(defaults[id]); }
    });
    calculate();
  }

  var calculateButton = byId("rk-pellet-calculate");
  var resetButton = byId("rk-pellet-reset");
  if (calculateButton) { calculateButton.addEventListener("click", calculate); }
  if (resetButton) { resetButton.addEventListener("click", resetCalculator); }

  var calculator = root.querySelector("[data-rk-pellet-calculator]");
  if (calculator) {
    calculator.querySelectorAll("input, select").forEach(function (field) {
      field.addEventListener("change", calculate);
      field.addEventListener("input", function () {
        window.clearTimeout(field.rkPelletTimer);
        field.rkPelletTimer = window.setTimeout(calculate, 220);
      });
    });
  }

  var navLinks = root.querySelectorAll(".rk-pellet-nav-track a[href^='#']");
  navLinks.forEach(function (link) {
    link.addEventListener("click", function (event) {
      var target = root.querySelector(link.getAttribute("href"));
      if (!target) { return; }
      event.preventDefault();
      target.scrollIntoView({behavior: "smooth", block: "start"});
    });
  });

  function updateProgress() {
    var progress = root.querySelector(".rk-pellet-progress");
    if (!progress) { return; }
    var documentElement = document.documentElement;
    var scrollTop = window.pageYOffset || documentElement.scrollTop || 0;
    var scrollable = documentElement.scrollHeight - documentElement.clientHeight;
    var percentage = scrollable > 0 ? scrollTop / scrollable * 100 : 0;
    progress.style.width = clamp(percentage, 0, 100) + "%";
  }

  var resizeTimer = 0;
  window.addEventListener("scroll", updateProgress, {passive: true});
  window.addEventListener("resize", function () {
    window.clearTimeout(resizeTimer);
    resizeTimer = window.setTimeout(calculate, 140);
  });

  calculate();
  updateProgress();
}());
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/kociol-na-pellet/">Kocioł na pellet: koszty ogrzewania, dobór mocy i współpraca z podłogówką.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
