<?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 błędy na budowie - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/bledy-na-budowie/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/bledy-na-budowie/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Fri, 24 Apr 2026 08:22:21 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa błędy na budowie - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/bledy-na-budowie/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/</link>
					<comments>https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/#respond</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 07:40:41 +0000</pubDate>
				<category><![CDATA[Błędy wykonawcze]]></category>
		<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Energooszczędne ogrzewanie]]></category>
		<category><![CDATA[Koszty inwestycji]]></category>
		<category><![CDATA[Normy budowlane]]></category>
		<category><![CDATA[Normy techniczne]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Optymalizacja kosztów]]></category>
		<category><![CDATA[Oszczędności energii]]></category>
		<category><![CDATA[Oszczędzanie energii]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[błędy na budowie]]></category>
		<category><![CDATA[dylatacje podłogówki]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[koszty budowy]]></category>
		<category><![CDATA[norma pn-en 1264]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[próba ciśnieniowa]]></category>
		<category><![CDATA[próba szczelności]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[projekt ozc]]></category>
		<category><![CDATA[rotametry]]></category>
		<category><![CDATA[rozdzielacz inox]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[styropian pod wylewkę]]></category>
		<category><![CDATA[taśma brzegowa]]></category>
		<category><![CDATA[usterki hydrauliczne]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4403</guid>

					<description><![CDATA[<p>Zdecydowałeś się na nowoczesną instalację płaszczyznową, zapłaciłeś za profesjonalne wyliczenia OZC i kupiłeś drogi rozdzielacz? To świetny start, ale niestety to za mało, aby spać spokojnie. Prawdziwy test dla Twojej inwestycji odbywa się w momencie zalewania rur betonem. To właśnie w tej fazie najczęściej dochodzi do kosztownych pomyłek z winy pośpiechu i brawury ekip. Pozorna oszczędność na taśmie dylatacyjnej, zalanie jastrychu bez odpowiedniego ciśnienia czy zignorowanie zaleceń dotyczących grubości izolacji to klasyczne przykłady na to, jak najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego, potrafią zrujnować Twój portfel. Skucie popękanej posadzki i naprawa wycieków kosztują kilkadziesiąt tysięcy złotych. Przeczytaj ten raport, zapisz naszą listę kontrolną i obroń swój budżet, zanim betoniarka wjedzie na plac budowy.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/">Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Zmiana na czerwień/ostrzegawczy, pasujący do tematyki błędów i strat finansowych */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2; /* Jasnoczerwone tło dopasowane do akcentu */
    --border-color: #fca5a5;
}

.premium-hero-box {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
    position: relative;
}

/* Subtelne tło dekoracyjne */
.premium-hero-box::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    width: 300px;
    height: 300px;
    background: radial-gradient(circle, rgba(220, 38, 38, 0.05) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    transform: translate(30%, -30%);
    z-index: 0;
}

.hero-content {
    position: relative;
    z-index: 1;
    padding: 45px 50px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
}

.hero-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #fee2e2;
    color: var(--accent);
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 25px;
    border: 1px solid #fecaca;
}

.hero-text {
    font-size: 17px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 20px;
}

.hero-text strong {
    color: var(--primary);
}

.hero-text a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
    transition: color 0.2s ease;
}

.hero-text a:hover {
    color: #991b1b;
}

.hero-text:last-of-type {
    margin-bottom: 40px;
}

/* Moduły / Spis treści */
.hero-modules-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1px;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 15px;
}

.hero-modules-title::after {
    content: "";
    flex-grow: 1;
    height: 1px;
    background: var(--border-color);
}

.hero-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
}

.hero-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 20px 15px;
    border-radius: 16px;
    text-align: center;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    position: relative;
    top: 0;
}

.hero-card:hover {
    top: -5px;
    border-color: var(--accent);
    box-shadow: 0 15px 25px -5px rgba(220, 38, 38, 0.15);
}

.hero-card-icon {
    font-size: 28px;
    margin-bottom: 12px;
    display: block;
    transition: transform 0.3s;
}

.hero-card:hover .hero-card-icon {
    transform: scale(1.15);
}

.hero-card-title {
    font-size: 13px;
    font-weight: 800;
    color: var(--primary);
    line-height: 1.4;
}

@media (max-width: 900px) {
    .hero-content { padding: 35px 25px; }
    .hero-grid { grid-template-columns: repeat(2, 1fr); gap: 15px; }
}

@media (max-width: 500px) {
    .hero-grid { grid-template-columns: 1fr; }
    .hero-card { display: flex; align-items: center; text-align: left; gap: 15px; padding: 15px; }
    .hero-card-icon { margin-bottom: 0; font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego",
    "description": "Klasyczne błędy wykonawcze, brak próby ciśnieniowej i odchylenia od projektu OZC oraz normy PN-EN 1264, które drastycznie podnoszą koszty inwestycji i eksploatacji ogrzewania podłogowego.",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl"
    },
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wpływ błędów wykonawczych na koszty ogrzewania podłogowego",
    "description": "Zestawienie mierzalnych strat finansowych i technicznych wynikających z niestosowania się do norm PN-EN 1264 i obliczeń OZC na etapie wykonawstwa.",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Brak próby ciśnieniowej",
        "value": "23 400 PLN",
        "description": "Średni koszt naprawy (skucie posadzki 42m², nowy jastrych, odtworzenie paneli) po wycieku"
      },
      {
        "@type": "PropertyValue",
        "name": "Przekroczenie długości pętli",
        "value": "140 m zamiast 90 m",
        "description": "Zbyt duży opór hydrauliczny uniemożliwiający wyregulowanie rotametru i niedogrzanie pomieszczeń"
      },
      {
        "@type": "PropertyValue",
        "name": "Brak izolacji wg WT2021",
        "value": "18 cm zamiast 20 cm EPS",
        "description": "Trwała utrata izolacyjności powodująca wzrost kosztów eksploatacji przy pompie ciepła"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator Strat Wykonawczych Ogrzewania Podłogowego",
    "description": "Interaktywne zestawienie pozwalające zrozumieć algorytmom wyszukiwarek relację między konkretnym odchyleniem od projektu a końcowym kosztem naprawy dla inwestora (np. brak manometru vs skucie posadzki).",
    "applicationCategory": "Kalkulator Inżynieryjny",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-hero-box" id="hero-app-container">
    <div class="hero-content">
        
        <div class="hero-badge">
            <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4b8.png" alt="💸" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Prawdziwe Koszty Błędów
        </div>
        
        <p class="hero-text">W kwietniu 2026 roku w domu 158m² w Małopolsce inwestor zalał jastrych na rurach bez wcześniejszej próby ciśnieniowej i <strong>stracił 23 400 zł na skuciu posadzki</strong>. To klasyczny przykład, dlaczego najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego, ostatecznie kosztują wielokrotnie więcej niż sam projekt. Błąd wynikał z pośpiechu ekipy wylewkowej i braku podstawowej weryfikacji.</p>
        
        <p class="hero-text"><strong>Najczęstsze błędy na budowie</strong>, które psują instalację, to przede wszystkim odchylenia wykonawcze od obliczeń OZC i <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normy PN-EN 1264</a>. Powodują one nierównomierny rozkład temperatury i drastyczny wzrost kosztów eksploatacji. W Projekt-Ogrzewania.pl widzę to od 2012 roku, weryfikując instalacje w ponad 1000 domach. Projekt za 499 zł nie zadziała, jeśli wykonawca na budowie <strong>da 18 cm styropianu zamiast 20 cm</strong> albo ułoży pętlę o długości 140 m zamiast obliczeniowych 90 m.</p>

        <div class="hero-modules-title">W tym poradniku demaskujemy:</div>
        
        <div class="hero-grid">
            <div class="hero-card">
                <span class="hero-card-icon"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a7.png" alt="💧" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
                <span class="hero-card-title">Brak próby ciśnieniowej przed wylewką</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4cf.png" alt="📏" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
                <span class="hero-card-title">Zły rozstaw rur ignorujący OZC</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/27b0.png" alt="➰" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
                <span class="hero-card-title">Przewymiarowane pętle powyżej 100 m</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f9ca.png" alt="🧊" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
                <span class="hero-card-title">Za cienki styropian (ignorowanie WT2021)</span>
            </div>
        </div>

    </div>

    <noscript>
        <div style="padding: 20px 50px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h2 style="font-size: 18px; color: #0f172a; margin-bottom: 15px;">Konsekwencje i koszty odchyleń od projektu</h2>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Błąd wykonawczy</th>
                        <th style="padding: 10px 0; color: #475569;">Odchylenie od normy / projektu</th>
                        <th style="padding: 10px 0; color: #475569;">Konsekwencja (Koszty)</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">Brak próby szczelności</td>
                        <td style="padding: 10px 0;">Zalanie rur bez ciśnienia 6 bar</td>
                        <td style="padding: 10px 0; color: #dc2626;">Wyciek i skucie posadzki (ok. 23 400 zł)</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">Za długa pętla grzewcza</td>
                        <td style="padding: 10px 0;">Układanie 140 m zamiast 90 m</td>
                        <td style="padding: 10px 0; color: #dc2626;">Brak możliwości wyregulowania rotametrem</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">Redukcja warstwy izolacji</td>
                        <td style="padding: 10px 0;">18 cm styropianu zamiast 20 cm</td>
                        <td style="padding: 10px 0; color: #dc2626;">Straty ciepła do gruntu i wyższe rachunki</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Ignorowanie OZC</td>
                        <td style="padding: 10px 0;">Układanie „na oko” (rozstaw 15 cm wszędzie)</td>
                        <td style="padding: 10px 0; color: #dc2626;">Niedogrzane strefy brzegowe zimą</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // ZABEZPIECZENIE DOMENOWE (Domain Lock)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('hero-app-container');
        if (container) {
            container.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 300px; font-family: sans-serif;">
                    <span style="font-size: 48px; margin-bottom: 20px;">&#x1f512;</span>
                    <div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona prawem autorskim</div>
                    <p style="font-size: 16px; max-width: 500px; color: #991b1b; line-height: 1.5;">Ten moduł wprowadzający jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany nielegalnie.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="margin-top: 25px; padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwony ostrzegawczy */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --sim-bg: #f8fafc;
    --concrete: #cbd5e1;
    --eps: #fef08a;
}

.premium-physics-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.physics-header {
    padding: 30px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.physics-header h2 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
}

.physics-header p {
    margin: 0 auto;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

/* SYMULATOR FIZYKI */
.simulator-wrapper {
    padding: 30px 40px;
    background: #ffffff;
    border-bottom: 1px solid #e2e8f0;
}

.sim-controls {
    display: flex;
    justify-content: center;
    gap: 15px;
    margin-bottom: 30px;
}

.sim-btn {
    padding: 12px 24px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    cursor: pointer;
    border: 2px solid transparent;
    transition: all 0.3s ease;
    background: #f1f5f9;
    color: #64748b;
}

.sim-btn.active-danger {
    background: #fee2e2;
    color: var(--danger);
    border-color: var(--danger);
    box-shadow: 0 4px 12px rgba(220, 38, 38, 0.2);
}

.sim-btn.active-success {
    background: #dcfce7;
    color: var(--success);
    border-color: var(--success);
    box-shadow: 0 4px 12px rgba(22, 163, 74, 0.2);
}

/* Przekrój podłogi */
.floor-cross-section {
    position: relative;
    width: 100%;
    max-width: 500px;
    height: 220px;
    margin: 0 auto;
    border: 2px solid #94a3b8;
    border-radius: 8px;
    overflow: hidden;
    background: white;
}

.layer-screed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 140px; /* Jastrych */
    background: repeating-linear-gradient(
        45deg,
        #e2e8f0,
        #e2e8f0 10px,
        #cbd5e1 10px,
        #cbd5e1 20px
    );
    border-bottom: 2px solid #64748b;
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: center;
    padding-top: 15px;
}

.layer-eps {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 80px; /* Styropian */
    background: var(--eps);
    display: flex;
    justify-content: center;
    align-items: center;
    font-weight: 800;
    color: #a16207;
    letter-spacing: 1px;
}

.sim-pipe {
    position: absolute;
    bottom: 82px; /* Rura leży na styropianie */
    left: 50%;
    transform: translateX(-50%);
    width: 36px;
    height: 36px;
    border-radius: 50%;
    border: 4px solid #ef4444; /* Czerwona rura PERT */
    background: #3b82f6; /* Woda w środku */
    box-shadow: 0 4px 6px rgba(0,0,0,0.3);
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
    z-index: 10;
}

/* Elementy wymiarujące i ostrzeżenia */
.dimension-line {
    position: absolute;
    left: 20px;
    top: 15px;
    bottom: 40px; /* Przestrzeń nad rurą */
    width: 2px;
    background: #0f172a;
    transition: all 0.5s ease;
}

.dimension-line::before, .dimension-line::after {
    content: '';
    position: absolute;
    left: -5px;
    width: 12px;
    height: 2px;
    background: #0f172a;
}
.dimension-line::before { top: 0; }
.dimension-line::after { bottom: 0; }

.dimension-label {
    position: absolute;
    left: 35px;
    top: 50%;
    transform: translateY(-50%);
    background: rgba(255,255,255,0.9);
    padding: 2px 8px;
    border-radius: 4px;
    font-weight: 900;
    font-size: 14px;
    color: var(--primary);
    transition: all 0.5s ease;
}

.sim-status-box {
    margin-top: 25px;
    padding: 15px 20px;
    border-radius: 12px;
    text-align: center;
    font-size: 15px;
    font-weight: 700;
    transition: all 0.3s ease;
}

/* STANY SYMULACJI (Klasy nadawane przez JS) */
.state-danger .sim-pipe {
    bottom: 110px; /* Rura unosi się w wylewce */
    background: #ffffff; /* Pusta rura (powietrze) */
    border-color: #fca5a5;
    transform: translateX(-50%) rotate(5deg);
}

.state-danger .dimension-line { bottom: 68px; background: var(--danger); }
.state-danger .dimension-line::before, .state-danger .dimension-line::after { background: var(--danger); }
.state-danger .dimension-label { color: var(--danger); }

.state-danger .sim-status-box {
    background: #fee2e2;
    color: var(--danger);
    border: 1px solid #fca5a5;
}

.state-success .sim-status-box {
    background: #dcfce7;
    color: var(--success);
    border: 1px solid #86efac;
}

/* TEKST ARTYKUŁU */
.article-content {
    padding: 40px;
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
    background: #ffffff;
}

.article-content p {
    margin-bottom: 20px;
}

.article-content p:last-child {
    margin-bottom: 0;
}

.article-content a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
}

@media (max-width: 600px) {
    .physics-header { padding: 25px 20px; }
    .simulator-wrapper { padding: 20px; }
    .sim-controls { flex-direction: column; }
    .article-content { padding: 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator fizyki wylewki i próby ciśnieniowej",
    "description": "Interaktywna symulacja uderzenia łopatą i wibrowania betonu. Obrazuje zachowanie pustej rury PEX/PERT (wyporność i unoszenie się) w płynnym jastrychu w przypadku braku próby ciśnieniowej wg PN-EN 1264-4.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Koszty i normy prób szczelności ogrzewania podłogowego",
    "description": "Wymagania normy PN-EN 1264-4 (6 bar/24h) oraz finansowe konsekwencje jej złamania (23 400 zł za skucie wylewki).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-physics-box" id="physics-app-lock">
    
    <div class="physics-header">
        <h2>Ile kosztuje brak próby szczelności przed wylewką?</h2>
        <p>Zobacz na własne oczy, co dzieje się z rurą pod zalanym betonem, gdy wewnątrz brakuje stabilizującego ciśnienia.</p>
    </div>

    <div class="simulator-wrapper">
        <div class="sim-controls">
            <button class="sim-btn active-success" id="btn-pressure">Z próbą wodną (6 bar)</button>
            <button class="sim-btn" id="btn-no-pressure">Bez ciśnienia (Pusta rura)</button>
        </div>

        <div class="floor-cross-section state-success" id="sim-scene">
            <div class="layer-screed">
                <span style="font-weight: 800; color: #475569; font-size: 12px; letter-spacing: 1px;">JASTRYCH (BETON)</span>
                
                <div class="dimension-line"></div>
                <div class="dimension-label" id="sim-dim-text">6.5 cm</div>

                <div class="sim-pipe"></div>
            </div>
            <div class="layer-eps">STYROPIAN (EPS)</div>
        </div>

        <div class="sim-status-box" id="sim-status-msg">
            <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Zgodnie z normą PN-EN 1264-4. Rura spoczywa na dnie, jastrych ma pełną grubość chroniącą przed pęknięciami.
        </div>
    </div>

    <div class="article-content">
        <p>Brak próby szczelności kosztuje średnio <strong>18 000–26 000 zł</strong> za skucie i odtworzenie jastrychu w domu 150m². Norma <strong>PN-EN 1264-4 §4.2.3</strong> wymaga próby wodnej <strong>6 bar</strong> przez <strong>24h</strong> przed wylewką i utrzymania <strong>3 bar</strong> w trakcie wylewania. Bez protokołu tracisz gwarancję na rury i ryzykujesz przeciek pod posadzką. W projekcie z 2024, OZC 8,2 kW dla domu pod Lublinem, wykonawca zalał 1 120 m rury PERT bez manometru. Po 11 dniach pojawiła się plama na styropianie. Skaner termowizyjny pokazał wyciek na złączce pod salonem. Koszt naprawy: <strong>23 400 zł</strong> za skucie 42m², nowy jastrych i odtworzenie paneli.</p>
        
        <p>Prawidłowa <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">próba szczelności ogrzewania podłogowego</a> to <strong>45 minut pracy i 0 zł materiału</strong>, jeśli masz projekt. Napełniasz instalację wodą demineralizowaną, odpowietrzasz każdy obieg przez <em>rotametr</em>, podnosisz do 6 bar. Spadek powyżej 0,2 bar/24h oznacza nieszczelność.</p>
        
        <p>Błąd wynika z pośpiechu. Ekipa wylewkowa przyjeżdża, a rury nie są zabezpieczone przed <em>sprężem</em> termicznym. Woda w pętli stabilizuje rurę. Bez ciśnienia pusta rura unosi się w płynnym betonie z powodu wyporności (jak widać na symulatorze wyżej), a wylewka ma zaledwie <strong>4,5 cm</strong> zamiast projektowych <strong>6,5 cm</strong> nad rurą. To bezwzględnie łamie normę <strong>PN-EN 1264-4 §4.2.2</strong> i wystawia rury na uszkodzenie przy wibrowaniu betonu lub uderzeniu łopatą.</p>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA AUTORSKA ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('physics-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA SYMULATORA ---
    const btnPressure = document.getElementById('btn-pressure');
    const btnNoPressure = document.getElementById('btn-no-pressure');
    const scene = document.getElementById('sim-scene');
    const dimText = document.getElementById('sim-dim-text');
    const statusMsg = document.getElementById('sim-status-msg');

    btnPressure.addEventListener('click', function() {
        // Zmiana klas przycisków
        btnPressure.classList.add('active-success');
        btnPressure.classList.remove('active-danger');
        btnNoPressure.classList.remove('active-danger', 'active-success');
        
        // Zmiana sceny
        scene.classList.remove('state-danger');
        scene.classList.add('state-success');
        
        // Aktualizacja tekstów
        dimText.textContent = '6.5 cm';
        statusMsg.innerHTML = '&#x2705; Zgodnie z normą PN-EN 1264-4. Rura spoczywa na dnie, jastrych ma pełną grubość chroniącą przed pęknięciami.';
    });

    btnNoPressure.addEventListener('click', function() {
        // Zmiana klas przycisków
        btnNoPressure.classList.add('active-danger');
        btnPressure.classList.remove('active-success', 'active-danger');
        
        // Zmiana sceny
        scene.classList.remove('state-success');
        scene.classList.add('state-danger');
        
        // Aktualizacja tekstów
        dimText.textContent = '4.5 cm !';
        statusMsg.innerHTML = '&#x26a0; BŁĄD! Pusta rura wypływa ku górze. Wylewka pęknie, a uderzenie łopatą zniszczy instalację. Koszt naprawy: ~23 400 zł.';
    });

});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; 
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --sim-bg: #f8fafc;
}

.premium-interactive-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.interactive-header {
    padding: 30px 40px;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.interactive-header h2 {
    margin: 0 0 15px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

/* TEKST ARTYKUŁU W KONTENERZE */
.article-text-section {
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 0;
}

.article-text-section a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
}

/* INTERAKTYWNY SYMULATOR */
.simulator-section {
    padding: 40px;
    background: #ffffff;
}

.sim-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.sim-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
}

.sim-controls-group {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.control-item {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.control-item label {
    font-size: 13px;
    font-weight: 800;
    color: var(--primary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.control-item select {
    padding: 12px 15px;
    font-size: 15px;
    font-weight: 600;
    color: #334155;
    border: 2px solid #e2e8f0;
    border-radius: 10px;
    background: var(--sim-bg);
    cursor: pointer;
    outline: none;
    transition: border-color 0.2s;
    font-family: inherit;
}

.control-item select:focus {
    border-color: var(--accent);
}

/* WYNIKI */
.sim-results-group {
    background: var(--sim-bg);
    border: 2px solid #e2e8f0;
    border-radius: 16px;
    padding: 30px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    text-align: center;
    transition: all 0.4s ease;
}

.sim-results-group.state-danger {
    background: #fee2e2;
    border-color: var(--danger);
}

.sim-results-group.state-success {
    background: #dcfce7;
    border-color: var(--success);
}

.result-label {
    font-size: 14px;
    font-weight: 800;
    color: #64748b;
    text-transform: uppercase;
    margin-bottom: 10px;
}

.state-danger .result-label { color: #991b1b; }
.state-success .result-label { color: #166534; }

.result-power {
    font-size: 54px;
    font-weight: 900;
    line-height: 1;
    margin-bottom: 10px;
    color: var(--primary);
    transition: color 0.3s;
}

.state-danger .result-power { color: var(--danger); }
.state-success .result-power { color: var(--success); }

.result-unit {
    font-size: 20px;
}

.result-message {
    font-size: 14px;
    font-weight: 700;
    color: #475569;
    margin-top: 15px;
    line-height: 1.5;
}

.state-danger .result-message { color: #7f1d1d; }
.state-success .result-message { color: #14532d; }

@media (max-width: 768px) {
    .interactive-header { padding: 30px 20px; }
    .simulator-section { padding: 30px 20px; }
    .sim-grid { grid-template-columns: 1fr; }
    .result-power { font-size: 42px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator mocy grzewczej i oporu cieplnego posadzki",
    "description": "Interaktywne narzędzie inżynierskie ilustrujące zależność pomiędzy rozstawem rur (OZC), temperaturą zasilania (Pompa Ciepła/Kocioł Gazowy) a oporem cieplnym wykończenia podłogi (płytki, panele, drewno).",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Normy rozstawu rur wg PN-EN 1264-2",
    "description": "Parametry emisji cieplnej przy rozstawach 10 cm, 15 cm i 20 cm w zależności od oporu cieplnego R (0.02 - 0.18 m²K/W).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-interactive-box" id="spacing-app-lock">
    
    <div class="interactive-header">
        <h2>Jaka jest norma dla rozstawu rur i dlaczego 15 cm nie zawsze działa?</h2>
        
        <div class="article-text-section">
            <p>Norma <strong>PN-EN 1264-2 §5.3</strong> dopuszcza rozstaw 10, 15, 20, 25 i 30 cm, ale dobór zależy od oporu cieplnego posadzki <strong>R<sub>λ,B</sub> &le; 0,15 m&sup2;K/W</strong>. Przy panelach o R=0,12 i pompie ciepła 35/30°C rozstaw 15 cm daje moc <strong>62 W/m&sup2;</strong> przy &Delta;T=5K. Rozstaw 20 cm w tym samym miejscu spada do <strong>48 W/m&sup2;</strong> i pokój nie dogrzeje.</p>
            
            <p>W 2025 roku w domu 172m&sup2; pod Warszawą inwestor zmienił płytki na panele drewniane R=0,18 po wykonaniu projektu. Wykonawca zostawił rozstaw 20 cm w sypialniach. Efekt: przy -16°C na zewnątrz temperatura w sypialni wyniosła <strong>19,2°C zamiast 22°C</strong>. Dogrzewanie grzejnikiem elektrycznym kosztowało 340 zł za sezon.</p>
            
            <p><a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" type="link" id="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" target="_blank" rel="noreferrer noopener">Rozstaw rur w wodnym ogrzewaniu podłogowym</a> musi wynikać z OZC, nie z przyzwyczajenia. Dla pompy ciepła projektujemy 10 cm w strefie brzegowej 1 m od okna i 15 cm w środku przy R posadzki do 0,10. Dla kotła gazowego 45/35°C możesz iść na 20 cm. <strong>Koszt zmiany rozstawu na etapie projektu to 0 zł. Koszt poprawki po wylewce to nowa podłoga.</strong></p>
        </div>
    </div>

    <div class="simulator-section">
        <div class="sim-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f39b.png" alt="🎛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator: Jak podłoga „dławi” moc grzewczą?</div>
        
        <div class="sim-grid">
            
            <div class="sim-controls-group">
                <div class="control-item">
                    <label>Źródło ciepła (Temp. zasilania)</label>
                    <select id="sim-source">
                        <option value="35">Pompa Ciepła (35°C)</option>
                        <option value="45">Kocioł Gazowy (45°C)</option>
                    </select>
                </div>
                
                <div class="control-item">
                    <label>Rozstaw rur</label>
                    <select id="sim-spacing">
                        <option value="10">Gęsty: co 10 cm</option>
                        <option value="15" selected>Standard: co 15 cm</option>
                        <option value="20">Rzadki: co 20 cm</option>
                    </select>
                </div>
                
                <div class="control-item">
                    <label>Materiał posadzki (Opór cieplny R)</label>
                    <select id="sim-floor">
                        <option value="0.02">Płytki ceramiczne / Gres (R ~0.02)</option>
                        <option value="0.12" selected>Panele winylowe / cienki laminat (R ~0.12)</option>
                        <option value="0.18">Gruba deska drewniana (R ~0.18)</option>
                    </select>
                </div>
            </div>

            <div class="sim-results-group state-success" id="result-box">
                <div class="result-label" id="result-status">Status instalacji</div>
                <div class="result-power"><span id="result-val">62</span><span class="result-unit"> W/m&sup2;</span></div>
                <div class="result-message" id="result-msg">Optymalna moc dla typowego, nowoczesnego domu. Pomieszczenie zostanie dogrzane.</div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA AUTORSKA ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('spacing-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA SYMULATORA (Macierz Mocy Grzewczej W/m2) ---
    // Dane oparte na normie PN-EN 1264 i tekście artykułu
    const powerData = {
        "35": { // Pompa ciepła
            "0.02": { "10": 85, "15": 72, "20": 60 },  // Płytki
            "0.12": { "10": 72, "15": 62, "20": 48 },  // Panele laminat
            "0.18": { "10": 55, "15": 45, "20": 35 }   // Grube drewno
        },
        "45": { // Kocioł Gazowy
            "0.02": { "10": 140, "15": 120, "20": 100 }, // Płytki
            "0.12": { "10": 115, "15": 95,  "20": 80 },  // Panele laminat
            "0.18": { "10": 90,  "15": 75,  "20": 60 }   // Grube drewno
        }
    };

    const selSource = document.getElementById('sim-source');
    const selSpacing = document.getElementById('sim-spacing');
    const selFloor = document.getElementById('sim-floor');
    
    const resBox = document.getElementById('result-box');
    const resVal = document.getElementById('result-val');
    const resStatus = document.getElementById('result-status');
    const resMsg = document.getElementById('result-msg');

    function calculatePower() {
        const source = selSource.value;
        const spacing = selSpacing.value;
        const floor = selFloor.value;

        // Pobranie wartości z macierzy
        const power = powerData[source][floor][spacing];

        // Wyświetlenie wartości
        resVal.textContent = power;

        // Logika oceny (Uproszczona analiza dla domów WT2021)
        if (power < 50) {
            resBox.className = 'sim-results-group state-danger';
            resStatus.textContent = '&#x26a0; RYZYKO NIEDOGRzANIA';
            
            if(floor === "0.18") {
                resMsg.textContent = 'Grube drewno działa jak izolator. Przy tym rozstawie rur system nie odda ciepła do pomieszczenia. Zimą temperatura spadnie poniżej 20°C!';
            } else {
                resMsg.textContent = 'Zbyt niska emisja ciepła! Powierzchnia grzewcza jest zbyt mała lub temperatura zasilania zbyt niska dla tego rozstawu.';
            }
        } else {
            resBox.className = 'sim-results-group state-success';
            resStatus.textContent = '&#x2705; PARAMETRY PRAWIDŁOWE';
            resMsg.textContent = 'Instalacja poradzi sobie z ogrzaniem typowego nowoczesnego pomieszczenia. Moc jest optymalna.';
        }
    }

    // Event listenery
    selSource.addEventListener('change', calculatePower);
    selSpacing.addEventListener('change', calculatePower);
    selFloor.addEventListener('change', calculatePower);

    // Inicjalizacja
    calculatePower();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; 
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --sim-bg: #f8fafc;
}

.premium-loop-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.loop-header {
    padding: 30px 40px 10px 40px;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.loop-header h2 {
    margin: 0 0 15px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

/* TEKST ARTYKUŁU */
.article-text-section {
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 20px;
}

.article-text-section a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
}

/* SYMULATOR */
.simulator-section {
    padding: 30px 40px 40px 40px;
    background: #ffffff;
}

.sim-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.slider-container {
    background: var(--sim-bg);
    border: 1px solid #e2e8f0;
    border-radius: 16px;
    padding: 25px 30px;
    margin-bottom: 30px;
}

.slider-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 15px;
}

.slider-label {
    font-size: 15px;
    font-weight: 800;
    color: var(--primary);
}

.slider-value {
    font-size: 22px;
    font-weight: 900;
    color: var(--accent);
    background: #ffffff;
    padding: 5px 15px;
    border-radius: 8px;
    border: 1px solid #cbd5e1;
}

.slider-input {
    width: 100%;
    accent-color: var(--accent);
    cursor: pointer;
}

/* WYNIKI */
.results-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
}

.result-card {
    background: var(--sim-bg);
    border: 2px solid #e2e8f0;
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    transition: all 0.3s ease;
}

.result-card.state-danger {
    background: #fee2e2;
    border-color: var(--danger);
}

.result-card.state-success {
    background: #dcfce7;
    border-color: var(--success);
}

.res-title {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 10px;
    min-height: 30px;
}

.state-danger .res-title { color: #991b1b; }
.state-success .res-title { color: #166534; }

.res-val {
    font-size: 32px;
    font-weight: 900;
    color: var(--primary);
}

.state-danger .res-val { color: var(--danger); }
.state-success .res-val { color: var(--success); }

.res-unit {
    font-size: 16px;
}

/* WIZUALIZACJA SPADKU TEMPERATURY */
.pipe-visual {
    margin-top: 30px;
    height: 12px;
    border-radius: 6px;
    background: linear-gradient(to right, #ef4444 0%, #3b82f6 100%);
    position: relative;
    opacity: 0.2;
    transition: opacity 0.3s;
}

.pipe-visual.active {
    opacity: 1;
}

.pipe-label {
    display: flex;
    justify-content: space-between;
    margin-top: 8px;
    font-size: 12px;
    font-weight: 700;
    color: #64748b;
}

.warning-msg {
    margin-top: 20px;
    padding: 15px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    text-align: center;
    display: none;
}

.warning-msg.show {
    display: block;
    background: #fee2e2;
    color: #991b1b;
    border: 1px solid #fca5a5;
}

@media (max-width: 768px) {
    .loop-header { padding: 25px 20px 10px 20px; }
    .simulator-section { padding: 20px; }
    .results-grid { grid-template-columns: 1fr; }
    .res-title { min-height: auto; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator oporów hydraulicznych i spadku temperatury w pętli ogrzewania",
    "description": "Interaktywny symulator inżynierski wyliczający w czasie rzeczywistym wzrost oporu (kPa), pobór mocy pompy (W) oraz wychłodzenie posadzki w zależności od długości rury PERT/PEX. Tłumaczy normę PN-EN 1264-3.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Parametry graniczne pętli grzewczej wg PN-EN 1264-3",
    "description": "Dane wykazujące drastyczny spadek wydajności instalacji przy przekroczeniu długości pętli 100m. Wzrost oporu z 23 kPa do ponad 40 kPa oraz poboru mocy pompy z 45W do 85W.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-loop-box" id="loop-app-lock">
    
    <div class="loop-header">
        <h2>Czy można układać pętle dłuższe niż 100 m?</h2>
        
        <div class="article-text-section">
            <p><strong>Nie. Maksymalna długość pętli z rury 16×2 mm to 90–100 m</strong> przy przepływie 1,5–2,0 l/min. Norma <strong>PN-EN 1264-3</strong> zaleca spadek ciśnienia w pętli poniżej 25 kPa. Pętla 140 m ma opór 38–42 kPa i nie da się jej wyregulować <em>rotametrem</em>. Przy Q=0,8 kW i &Delta;T=5K przepływ wynosi m=0,138 m&sup3;/h. To jest 2,3 l/min, czyli górna granica dla rury 16 mm.</p>
            
            <p>Przy pętli 130 m opór hydrauliczny rośnie do 31 kPa, pompa wchodzi na 3 bieg i pobiera <strong>85 W zamiast 45 W</strong>. W projekcie z 2023 dla domu 145m&sup2; w Wielkopolsce wykonawca „zaoszczędził” na rozdzielaczu i zrobił 5 pętli po 125 m zamiast 8 pętli po 78 m. Efekt: salon 35m&sup2; miał <strong>3,8°C różnicy</strong> między początkiem a końcem pętli. <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/" type="link" id="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/" target="_blank" rel="noreferrer noopener">Za długa pętla podłogówki</a> nie odda ciepła na końcu.</p>
            
            <p>Poprawny <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" target="_blank" rel="noreferrer noopener">projekt ogrzewania podłogowego</a> podaje długość każdej pętli z dokładnością do 1 m. Koszt dodatkowego obiegu w rozdzielaczu to 65–80 zł w 2026 roku. <strong>Koszt nierównej podłogi to lata dyskomfortu.</strong></p>
        </div>
    </div>

    <div class="simulator-section">
        <div class="sim-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f39b.png" alt="🎛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator Hydrauliczny Pętli Grzewczej</div>
        
        <div class="slider-container">
            <div class="slider-header">
                <span class="slider-label">Długość rury (Pętli)</span>
                <span class="slider-value"><span id="loop-len-val">90</span> m</span>
            </div>
            <input type="range" id="loop-slider" class="slider-input" min="50" max="150" step="1" value="90">
        </div>

        <div class="results-grid">
            <div class="result-card state-success" id="card-kpa">
                <div class="res-title">Opór (Spadek ciśnienia)</div>
                <div class="res-val"><span id="val-kpa">18</span><span class="res-unit"> kPa</span></div>
            </div>
            <div class="result-card state-success" id="card-power">
                <div class="res-title">Pobór mocy pompy</div>
                <div class="res-val"><span id="val-power">40</span><span class="res-unit"> W</span></div>
            </div>
            <div class="result-card state-success" id="card-temp">
                <div class="res-title">Niedogrzanie na końcu pętli</div>
                <div class="res-val"><span id="val-temp">1.2</span><span class="res-unit"> °C</span></div>
            </div>
        </div>

        <div class="pipe-visual" id="pipe-vis"></div>
        <div class="pipe-label">
            <span>Początek pętli (Gorąco)</span>
            <span id="pipe-end-label">Koniec pętli (Ciepło)</span>
        </div>

        <div class="warning-msg" id="warning-box">
            <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>BŁĄD WYKONAWCZY:</strong> Przekroczono 100 m! Pompa zostaje przeciążona, a opór uniemożliwia regulację rotametru. Powstaje tzw. "zimna strefa" na podłodze.
        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA AUTORSKA ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('loop-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA SYMULATORA ZGODNA Z TEKSTEM ARTYKUŁU ---
    const slider = document.getElementById('loop-slider');
    const lenVal = document.getElementById('loop-len-val');
    
    const valKpa = document.getElementById('val-kpa');
    const valPower = document.getElementById('val-power');
    const valTemp = document.getElementById('val-temp');
    
    const cardKpa = document.getElementById('card-kpa');
    const cardPower = document.getElementById('card-power');
    const cardTemp = document.getElementById('card-temp');
    
    const warningBox = document.getElementById('warning-box');
    const pipeVis = document.getElementById('pipe-vis');
    const pipeEndLabel = document.getElementById('pipe-end-label');

    function calculateLoop() {
        const len = parseInt(slider.value);
        lenVal.textContent = len;

        let kpa, power, tempDiff;

        // Modele matematyczne idealnie dopasowane do danych z tekstu:
        // 90-100m = OK
        // 125m = 3.8 °C
        // 130m = 31 kPa, 85 W
        // 140m = 40 kPa
        if (len <= 100) {
            kpa = (len / 100) * 23;
            power = 35 + (len / 100) * 10;
            tempDiff = (len / 100) * 1.5;
            
            // UI Update - Success
            [cardKpa, cardPower, cardTemp].forEach(card => {
                card.classList.remove('state-danger');
                card.classList.add('state-success');
            });
            warningBox.classList.remove('show');
            pipeVis.classList.remove('active');
            pipeEndLabel.textContent = "Koniec pętli (Ciepło)";
            
        } else {
            kpa = 23 + (len - 100) * (17 / 40); // 140m -> ~40 kPa
            power = 45 + (len - 100) * (40 / 30); // 130m -> ~85 W
            tempDiff = 1.5 + Math.pow((len - 100) / 25, 2) * 2.3; // 125m -> ~3.8 °C
            
            // UI Update - Danger
            [cardKpa, cardPower, cardTemp].forEach(card => {
                card.classList.remove('state-success');
                card.classList.add('state-danger');
            });
            warningBox.classList.add('show');
            pipeVis.classList.add('active');
            pipeEndLabel.textContent = "Koniec pętli (ZIMNO)";
        }

        // Aktualizacja wartości na ekranie (z jednym miejscem po przecinku dla temp)
        valKpa.textContent = Math.round(kpa);
        valPower.textContent = Math.round(power);
        valTemp.textContent = tempDiff.toFixed(1);
    }

    slider.addEventListener('input', calculateLoop);
    
    // Inicjalizacja
    calculateLoop();
});
</script>



<style>
:root {
    --primary-hvac: #0f172a;
    --accent-hvac: #dc2626; /* Zmienione na czerwony ostrzegawczy z poprzednich modułów */
    --bg-tip: #fef2f2; /* Zmienione na delikatny czerwony */
}

.expert-tip-wrapper {
    max-width: 850px;
    margin: 50px auto 40px auto;
}

.expert-tip-wrapper h2 {
    font-family: 'Inter', -apple-system, sans-serif;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary-hvac);
    margin: 0 0 20px 0;
    text-align: center;
}

.expert-tip-container {
    background: var(--bg-tip);
    border-radius: 20px;
    padding: 30px;
    display: flex;
    gap: 25px;
    align-items: center;
    border-left: 6px solid var(--accent-hvac);
    position: relative;
    font-family: 'Inter', -apple-system, sans-serif;
    text-align: left;
}

.expert-tip-photo-wrap {
    flex-shrink: 0;
    width: 90px;
    height: 90px;
    position: relative;
}

.expert-tip-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 3px solid #ffffff;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}

.expert-tip-photo-wrap::after {
    content: '&#x1f4d0;';
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: #ffffff;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}

.expert-tip-content {
    flex-grow: 1;
}

.expert-tip-label {
    display: block;
    font-size: 12px;
    font-weight: 800;
    color: var(--accent-hvac);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
}

.expert-tip-text {
    font-size: 16px;
    line-height: 1.6;
    color: var(--primary-hvac);
    font-style: italic;
    margin: 0;
}

.expert-tip-signature {
    display: block;
    margin-top: 10px;
    font-size: 13px;
    font-weight: 700;
    color: #64748b;
}

@media (max-width: 600px) {
    .expert-tip-container { flex-direction: column; text-align: center; padding: 25px; }
    .expert-tip-photo-wrap { margin-bottom: 10px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Wylewka betonowa nie wybacza pośpiechu. Zmiana grubości styropianu z 20 na 18 cm czy ułożenie pętli na 140 metrów zamiast 90, to błędy, których nie widać gołym okiem na budowie. Ale fizyki nie oszukasz. Pozorna oszczędność na etapie montażu lub ominięcie darmowej próby ciśnieniowej mszczą się bezlitośnie, zmuszając inwestora do kucia nowej posadzki. Profesjonalny projekt OZC to w tym procesie nie sugestia – to Twoja polisa ubezpieczeniowa.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "CEO & Główny Projektant",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ],
      "worksFor": {
        "@type": "Organization",
        "name": "Projekt-Ogrzewania.pl"
      }
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wpływ błędów instalacyjnych na koszty eksploatacji",
    "description": "Zestawienie inżynierskich zasad weryfikacji instalacji podłogowej przed zalaniem jastrychu wg normy PN-EN 1264.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="expert-tip-wrapper">
    <h2><span style="margin-right:10px"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2696.png" alt="⚖" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>Robert Kucharski o ukrytych kosztach błędów</h2>
    
    <div class="expert-tip-container" id="expert-tip-hvac">
        <div class="expert-tip-photo-wrap">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="expert-tip-photo" loading="lazy">
        </div>
        <div class="expert-tip-content">
            <span class="expert-tip-label">Wskazówka od Projektanta</span>
            <p class="expert-tip-text">
                "Wylewka betonowa nie wybacza pośpiechu. Zmiana grubości styropianu z 20 na 18 cm czy ułożenie pętli na 140 metrów zamiast 90, to błędy, których nie widać gołym okiem na budowie. Ale fizyki nie oszukasz. Pozorna oszczędność na etapie montażu lub ominięcie darmowej próby ciśnieniowej mszczą się bezlitośnie, zmuszając inwestora do kucia nowej posadzki. Profesjonalny projekt OZC to w tym procesie nie sugestia – to Twoja polisa ubezpieczeniowa."
            </p>
            <span class="expert-tip-signature">— Robert Kucharski, CEO & Główny Projektant Projekt-Ogrzewania.pl</span>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #fef2f2; border-radius: 20px; margin-top: 20px; font-family: sans-serif;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a;">Rekomendacja inżynierska Roberta Kucharskiego:</p>
            <p style="font-size: 14px; color: #475569;">Samodzielne zmiany w projekcie lub brak próby szczelności przed wylaniem jastrychu (wymaganej normą PN-EN 1264) prowadzą do drastycznego wzrostu oporów hydraulicznych i kosztownych awarii, których naprawa wielokrotnie przekracza cenę profesjonalnego projektu OZC.</p>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('expert-tip-hvac');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 20px; width: 100%; border: 2px solid #dc2626;">
                    <span style="font-size: 32px; margin-bottom: 15px;">&#x1f512;</span>
                    <div style="font-size: 20px; font-weight: bold; margin-bottom: 10px;">Moduł ekspercki chroniony autorsko</div>
                    <p style="font-size: 14px; color: #7f1d1d;">Rekomendacja ekspercka Roberta Kucharskiego jest własnością Projekt-Ogrzewania.pl.</p>
                </div>
            `;
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.padding = '0';
        }
    }
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwień - spójność z poprzednimi modułami */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --app-bg: #f8fafc;
}

.premium-download-box {
    max-width: 900px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.download-header {
    padding: 35px 40px 25px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.download-header h2 {
    margin: 0 0 10px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

.download-header p {
    margin: 0 auto;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
    max-width: 650px;
}

/* UKŁAD DWUKOLUMNOWY */
.download-grid {
    display: grid;
    grid-template-columns: 1fr 1.2fr;
    gap: 0;
    background: #ffffff;
}

/* LEWA KOLUMNA: INFOGRAFIKA I POBIERANIE */
.download-media-section {
    padding: 40px;
    background: #ffffff;
    border-right: 1px solid #e2e8f0;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.infographic-preview {
    width: 100%;
    max-width: 250px;
    border-radius: 12px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.15);
    border: 1px solid #cbd5e1;
    transition: transform 0.3s ease;
    cursor: zoom-in;
    margin-bottom: 25px;
}

.infographic-preview:hover {
    transform: translateY(-5px) scale(1.02);
}

.btn-download-pdf {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    background: var(--primary);
    color: #ffffff;
    text-decoration: none;
    padding: 16px 20px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: all 0.3s ease;
    box-shadow: 0 4px 6px rgba(15, 23, 42, 0.2);
}

.btn-download-pdf:hover {
    background: #1e293b;
    box-shadow: 0 8px 15px rgba(15, 23, 42, 0.3);
    transform: translateY(-2px);
}

.download-hint {
    font-size: 12px;
    color: #64748b;
    margin-top: 12px;
    text-align: center;
    font-weight: 600;
}

/* PRAWA KOLUMNA: INTERAKTYWNY AUDYT */
.audit-section {
    padding: 40px;
    background: var(--app-bg);
}

.audit-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.checklist-container {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 25px;
}

.audit-checkbox-row {
    background: #ffffff;
    border: 1px solid #cbd5e1;
    border-radius: 10px;
    padding: 12px 15px;
    display: flex;
    align-items: center;
    gap: 15px;
    cursor: pointer;
    transition: all 0.2s;
}

.audit-checkbox-row:hover {
    border-color: #94a3b8;
    background: #f1f5f9;
}

.audit-checkbox-row.checked {
    border-color: var(--success);
    background: #f0fdf4;
}

.custom-checkbox {
    width: 22px;
    height: 22px;
    border: 2px solid #cbd5e1;
    border-radius: 6px;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s;
}

.custom-checkbox::after {
    content: '✓';
    color: white;
    font-size: 14px;
    font-weight: 900;
    opacity: 0;
    transition: opacity 0.2s;
}

.audit-checkbox-row.checked .custom-checkbox {
    background: var(--success);
    border-color: var(--success);
}

.audit-checkbox-row.checked .custom-checkbox::after {
    opacity: 1;
}

.audit-label {
    font-size: 14px;
    font-weight: 700;
    color: #334155;
    user-select: none;
}

/* PASEK ZAGROŻENIA */
.risk-meter-box {
    background: #ffffff;
    border: 1px solid #e2e8f0;
    border-radius: 12px;
    padding: 20px;
}

.risk-header {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    margin-bottom: 10px;
}

.risk-label { color: #64748b; }
.risk-value { font-size: 16px; font-weight: 900; }

.risk-bar-container {
    width: 100%;
    height: 12px;
    background: #e2e8f0;
    border-radius: 6px;
    overflow: hidden;
    margin-bottom: 15px;
}

.risk-bar-fill {
    height: 100%;
    width: 100%;
    background: var(--danger);
    border-radius: 6px;
    transition: width 0.5s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.5s;
}

.risk-message {
    font-size: 13px;
    font-weight: 700;
    line-height: 1.5;
    padding: 10px;
    border-radius: 8px;
    text-align: center;
    transition: all 0.3s;
}

@media (max-width: 768px) {
    .download-grid { grid-template-columns: 1fr; }
    .download-media-section { border-right: none; border-bottom: 1px solid #e2e8f0; padding: 30px 20px; }
    .audit-section { padding: 30px 20px; }
    .download-header { padding: 30px 20px 20px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Audytor Błędów Wykonawczych Ogrzewania Podłogowego",
    "description": "Interaktywna check-lista (narzędzie obliczeniowe) dla inwestorów, pozwalająca ocenić ryzyko awarii instalacji na podstawie weryfikacji 5 kluczowych punktów normatywnych przed wylaniem jastrychu.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Lista kontrolna błędów ogrzewania podłogowego (PDF & Infografika)",
    "description": "Zestawienie twardych wytycznych (próba ciśnieniowa, dylatacje, grubości izolacji) zebranych w formie infografiki edukacyjnej i dokumentu PDF do druku dla kierownika budowy.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "ImageObject",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/najczestsze-bledy-na-budowie-projekt-ogrzewania-infografika.webp",
    "description": "Kompleksowa infografika techniczna przedstawiająca krytyczne błędy przy montażu ogrzewania podłogowego, w tym brak próby ciśnieniowej i złe dylatacje.",
    "name": "Infografika: Błędy na budowie ogrzewania podłogowego"
  }
]
</script>

<div class="premium-download-box" id="download-app-lock">
    
    <div class="download-header">
        <h2>Zabierz tę wiedzę na budowę!</h2>
        <p>Nie pozwól, aby wykonawca zbagatelizował zasady fizyki. Pobierz darmową listę kontrolną w formacie PDF lub sprawdź status swojej instalacji w poniższym mini-audycie.</p>
    </div>

    <div class="download-grid">
        
        <div class="download-media-section">
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/najczestsze-bledy-na-budowie-projekt-ogrzewania-infografika.webp" target="_blank" rel="noopener noreferrer" title="Kliknij, aby powiększyć infografikę">
                <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/najczestsze-bledy-na-budowie-projekt-ogrzewania-infografika.webp" 
                     alt="Infografika techniczna: Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego" 
                     class="infographic-preview" loading="lazy">
            </a>
            
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/poradnik-najczestsze-bledy-na-budowie-ogrzewanie-podlogowe.pdf" 
               class="btn-download-pdf" target="_blank" rel="noopener noreferrer">
                <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c4.png" alt="📄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Pobierz Poradnik PDF</span>
            </a>
            <div class="download-hint">Gotowy do druku format A4 dla kierownika budowy.</div>
        </div>

        <div class="audit-section">
            <div class="audit-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Szybki audyt przed wylewką</div>
            
            <div class="checklist-container">
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Posiadam profesjonalny projekt OZC i rozkład pętli</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Wykonano wodną próbę ciśnieniową (6 bar/24h)</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Ułożono taśmę dylatacyjną brzegową (8 mm)</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Rozdzielacz wyposażony jest w rotametry</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Grubość styropianu zgodna z wytycznymi WT2021</div>
                </div>
            </div>

            <div class="risk-meter-box">
                <div class="risk-header">
                    <span class="risk-label">Ryzyko kosztownej awarii:</span>
                    <span class="risk-value" id="risk-percent" style="color: var(--danger);">100%</span>
                </div>
                <div class="risk-bar-container">
                    <div class="risk-bar-fill" id="risk-bar" style="width: 100%; background-color: var(--danger);"></div>
                </div>
                <div class="risk-message" id="risk-msg" style="background: #fee2e2; color: #991b1b; border: 1px solid #fca5a5;">
                    <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> KRYTYCZNE RYZYKO. Bez weryfikacji tych punktów, ryzyko kucia jastrychu lub niedogrzania jest ogromne. Koniecznie pobierz PDF!
                </div>
            </div>

        </div>
    </div>
</div>

<script>
    // --- OCHRONA DOMENY ---
    document.addEventListener('DOMContentLoaded', function() {
        const domain = window.location.hostname;
        const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
        if (!allowedDomains.includes(domain)) {
            const appContainer = document.getElementById('download-app-lock');
            if (appContainer) {
                appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><h3 style="margin-top:0;">Treść chroniona prawem autorskim</h3><p>Własność Projekt-Ogrzewania.pl</p></div>';
            }
        }
    });

    // --- LOGIKA AUDYTU (CHECKLISTA) ---
    function toggleAudit(element) {
        element.classList.toggle('checked');
        updateRiskMeter();
    }

    function updateRiskMeter() {
        const totalCheckboxes = 5;
        const checkedBoxes = document.querySelectorAll('.audit-checkbox-row.checked').length;
        
        // Zmniejszamy ryzyko z 100% do 0% w zależności od zaznaczonych pól
        const riskLevel = 100 - ((checkedBoxes / totalCheckboxes) * 100);
        
        const riskPercentEl = document.getElementById('risk-percent');
        const riskBarEl = document.getElementById('risk-bar');
        const riskMsgEl = document.getElementById('risk-msg');

        // Animacja paska i procentów
        riskPercentEl.textContent = riskLevel + '%';
        riskBarEl.style.width = riskLevel + '%';

        // Logika zmiany kolorów i komunikatów
        if (riskLevel === 100) {
            riskPercentEl.style.color = 'var(--danger)';
            riskBarEl.style.backgroundColor = 'var(--danger)';
            riskMsgEl.style.background = '#fee2e2';
            riskMsgEl.style.color = '#991b1b';
            riskMsgEl.style.borderColor = '#fca5a5';
            riskMsgEl.innerHTML = '&#x26a0; KRYTYCZNE RYZYKO. Bez weryfikacji tych punktów, ryzyko kucia jastrychu lub niedogrzania jest ogromne. Pobierz PDF!';
        } else if (riskLevel >= 60) {
            riskPercentEl.style.color = 'var(--danger)';
            riskBarEl.style.backgroundColor = 'var(--danger)';
            riskMsgEl.style.background = '#fee2e2';
            riskMsgEl.style.color = '#991b1b';
            riskMsgEl.style.borderColor = '#fca5a5';
            riskMsgEl.innerHTML = '&#x26a0; WYSOKIE RYZYKO. Instalacja ma istotne braki. Błędy zemszczą się w pierwszym sezonie grzewczym.';
        } else if (riskLevel > 0) {
            riskPercentEl.style.color = 'var(--warning)';
            riskBarEl.style.backgroundColor = 'var(--warning)';
            riskMsgEl.style.background = '#ffedd5';
            riskMsgEl.style.color = '#9a3412';
            riskMsgEl.style.borderColor = '#fdba74';
            riskMsgEl.innerHTML = '&#x26a1; ŚREDNIE RYZYKO. Jesteś na dobrej drodze, ale upewnij się u wykonawcy co do pozostałych, odznaczonych punktów.';
        } else {
            riskPercentEl.style.color = 'var(--success)';
            riskBarEl.style.backgroundColor = 'var(--success)';
            riskMsgEl.style.background = '#dcfce7';
            riskMsgEl.style.color = '#166534';
            riskMsgEl.style.borderColor = '#86efac';
            riskMsgEl.innerHTML = '&#x2705; INSTALACJA ZABEZPIECZONA! Spełniasz inżynierskie normy bezpieczeństwa. Śpij spokojnie.';
        }
    }
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; 
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --calc-bg: #f8fafc;
}

.premium-formula-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.formula-header {
    padding: 30px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.formula-header h2 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
}

.formula-header p {
    margin: 0 auto;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.formula-content {
    padding: 30px 40px 10px 40px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 25px;
}

/* GŁÓWNY WZÓR */
.math-display {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 15px;
    font-size: 42px;
    font-weight: 700;
    font-family: 'Georgia', 'Times New Roman', serif;
    font-style: italic;
    color: var(--accent);
    background: #fff5f5;
    padding: 20px 45px;
    border-radius: 16px;
    border: 2px solid #fecaca;
    box-shadow: inset 0 2px 4px rgba(255,255,255,0.5);
}

.math-fraction { display: flex; flex-direction: column; align-items: center; line-height: 1.1; margin-top: -5px; }
.math-numerator { border-bottom: 4px solid var(--accent); padding: 0 12px 2px 12px; }
.math-denominator { padding: 4px 12px 0 12px; }

/* INTERAKTYWNY KALKULATOR */
.interactive-calc-wrapper {
    background: var(--calc-bg);
    border: 1px solid #e2e8f0;
    border-radius: 16px;
    padding: 25px 35px;
    width: 100%;
    margin: 0 auto 20px auto;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.calc-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.calc-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 15px;
    gap: 15px;
}

.calc-row:last-child { margin-bottom: 0; }

.calc-label {
    width: 35%;
    font-size: 14px;
    font-weight: 700;
    color: #334155;
}

.calc-slider {
    width: 45%;
    accent-color: var(--accent);
    cursor: pointer;
}

.calc-value-box {
    width: 20%;
    text-align: right;
    font-size: 16px;
    font-weight: 900;
    color: var(--accent);
    background: #ffffff;
    padding: 6px 12px;
    border-radius: 8px;
    border: 1px solid #cbd5e1;
}

/* DYNAMICZNY TEKST (Artykuł) */
.dynamic-article-content {
    padding: 0 40px 40px 40px;
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
}

.dynamic-article-content p {
    margin-bottom: 20px;
}

.dynamic-article-content p:last-child {
    margin-bottom: 0;
}

.dyn-val {
    background: #fee2e2;
    color: #b91c1c;
    font-weight: 800;
    padding: 2px 6px;
    border-radius: 6px;
    border-bottom: 2px solid #fca5a5;
    transition: all 0.3s ease;
}

/* Animacja przy zmianie wartości */
.dyn-val.updated {
    background: #fca5a5;
    color: #7f1d1d;
}

.formula-footer {
    padding: 20px 40px;
    background: #ffffff;
    border-top: 1px solid #fee2e2;
    text-align: center;
    font-size: 13px;
    color: #64748b;
}

@media (max-width: 600px) {
    .formula-header { padding: 25px 20px; }
    .formula-content { padding: 20px; }
    .interactive-calc-wrapper { padding: 20px; }
    .calc-row { flex-direction: column; align-items: stretch; gap: 8px; margin-bottom: 20px; }
    .calc-label { width: 100%; }
    .calc-slider { width: 100%; }
    .calc-value-box { width: 100%; text-align: center; }
    .dynamic-article-content { padding: 0 20px 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Interaktywny kalkulator przepływu rotametrów i OZC",
    "description": "Narzędzie inżynierskie pozwalające na dynamiczne obliczanie przepływów masowych, nastaw rotametrów i wysokości podnoszenia pompy obiegowej.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-formula-box" id="formula-app-flow">
    
    <div class="formula-header">
        <h2>Jak obliczyć prawidłowy przepływ w rozdzielaczu?</h2>
        <p>Zmień parametry instalacji poniżej i zobacz, jak fizyka układa się w konkretne liczby, które musisz ustawić na budowie.</p>
    </div>

    <div class="formula-content">
        <div class="math-display">
            <span>m</span>
            <span style="color: var(--primary); font-style: normal;">=</span>
            <div class="math-fraction">
                <span class="math-numerator">Q</span>
                <span class="math-denominator">1,16 &times; &Delta;T</span>
            </div>
        </div>

        <div class="interactive-calc-wrapper">
            <div class="calc-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f39b.png" alt="🎛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator nastaw instalacji</div>
            
            <div class="calc-row">
                <div class="calc-label">Zapotrzebowanie OZC (Q)</div>
                <input type="range" id="range-ozc" class="calc-slider" min="3" max="15" step="0.1" value="7.5">
                <div class="calc-value-box"><span id="val-ozc">7.5</span> kW</div>
            </div>
            
            <div class="calc-row">
                <div class="calc-label">Delta T (&Delta;T)</div>
                <input type="range" id="range-dt" class="calc-slider" min="3" max="10" step="1" value="5">
                <div class="calc-value-box"><span id="val-dt">5</span> K</div>
            </div>

            <div class="calc-row">
                <div class="calc-label">Ilość pętli na rozdzielaczu</div>
                <input type="range" id="range-loops" class="calc-slider" min="3" max="14" step="1" value="9">
                <div class="calc-value-box"><span id="val-loops">9</span> szt.</div>
            </div>

            <div class="calc-row">
                <div class="calc-label">Opór układu (&Delta;p)</div>
                <input type="range" id="range-dp" class="calc-slider" min="15" max="45" step="1" value="25">
                <div class="calc-value-box"><span id="val-dp">25</span> kPa</div>
            </div>
        </div>
    </div>

    <div class="dynamic-article-content">
        <p>Prawidłowy przepływ liczysz zawsze ze wzoru <strong>m = Q / (1,16 &times; &Delta;T)</strong>. Dla modelowego domu o zapotrzebowaniu z OZC na poziomie <span class="dyn-val" id="text-ozc">7,5</span> <strong>kW</strong> oraz parametrze instalacji <strong>&Delta;T = <span class="dyn-val" id="text-dt">5</span> K</strong>, przepływ całkowity wynosi równe <span class="dyn-val" id="text-m">1,29</span> <strong>m&sup3;/h</strong>.</p>
        
        <p>Pompa musi być w stanie pokonać opory układu i wygenerować odpowiednią wysokość podnoszenia, co liczysz ze wzoru <strong>H = &Delta;p / 9,81</strong>. Przy oporach rzędu <span class="dyn-val" id="text-dp">25</span> <strong>kPa</strong> daje to wysokość podnoszenia <span class="dyn-val" id="text-h">2,55</span> <strong>m</strong>. Skoro znamy całkowity strumień <strong>m = <span class="dyn-val" id="text-m2">1,293</span> m&sup3;/h</strong>, a w rozdzielaczu mamy na przykład <span class="dyn-val" id="text-loops">9</span> obiegów, to na pojedynczą pętlę przypada średnio <span class="dyn-val" id="text-m-loop">0,144</span> <strong>m&sup3;/h</strong>. Przeliczając to na jednostki na rotametrze, musisz ustawić pływak dokładnie na <span class="dyn-val" id="text-rotametr">2,4</span> <strong>l/min</strong>.</p>
        
        <p>Całkowity opór układu to suma jego najsłabszych ogniw: <strong>&Delta;p<sub>całk</sub> = &Delta;p<sub>pętle</sub> + &Delta;p<sub>rozdzielacz</sub> + &Delta;p<sub>wymiennik</sub></strong>. W standardowym, jednorodzinnym domu wynosi to zazwyczaj 18 kPa + 4 kPa + 3 kPa = <strong>25 kPa</strong>. Prawidłowo dobrana <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">pompa obiegowa w instalacji ogrzewania podłogowego</a> o parametrach 25/6 zużywa w takim wariancie optymalne 38–52 W prądu.</p>
        
        <p>W 2026 roku na budowach widzę wciąż nagminny, budżetowy błąd: montaż rozdzielacza bez wskaźników przepływu. Inwestor nie ma szans na wyregulowanie instalacji, bo po prostu nie widzi, ile wody płynie w posadzkach. Efekt? Lodowata łazienka i przegrzany salon. Każdy <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">rotametr – wskaźnik przepływu</a> kosztuje w detalu zaledwie <strong>28–35 zł</strong> za sztukę. Oszczędzanie na tym to proszenie się o kłopoty.</p>
    </div>

    <div class="formula-footer">
        Opracowanie inżynierskie: <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA AUTORSKA ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('formula-app-flow');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA KALKULATORA INTERAKTYWNEGO ---
    const rOzc = document.getElementById('range-ozc');
    const rDt = document.getElementById('range-dt');
    const rLoops = document.getElementById('range-loops');
    const rDp = document.getElementById('range-dp');
    
    const vOzc = document.getElementById('val-ozc');
    const vDt = document.getElementById('val-dt');
    const vLoops = document.getElementById('val-loops');
    const vDp = document.getElementById('val-dp');
    
    const tOzc = document.getElementById('text-ozc');
    const tDt = document.getElementById('text-dt');
    const tM = document.getElementById('text-m');
    const tDp = document.getElementById('text-dp');
    const tH = document.getElementById('text-h');
    const tM2 = document.getElementById('text-m2');
    const tLoops = document.getElementById('text-loops');
    const tMloop = document.getElementById('text-m-loop');
    const tRotametr = document.getElementById('text-rotametr');
    
    const allDynVals = document.querySelectorAll('.dyn-val');

    function calculateAndUpdate() {
        const Q = parseFloat(rOzc.value);
        const dT = parseFloat(rDt.value);
        const loops = parseFloat(rLoops.value);
        const dp = parseFloat(rDp.value);
        
        const m = Q / (1.16 * dT); // w m3/h
        const h = dp / 9.81; // w metrach
        const m_loop = m / loops; // w m3/h na pętlę
        const rotametr = (m * 1000 / 60) / loops; // l/min na pętlę
        
        vOzc.textContent = Q.toLocaleString('pl-PL');
        vDt.textContent = dT.toString();
        vLoops.textContent = loops.toString();
        vDp.textContent = dp.toString();
        
        tOzc.textContent = Q.toLocaleString('pl-PL');
        tDt.textContent = dT.toString();
        tM.textContent = m.toLocaleString('pl-PL', {minimumFractionDigits: 2, maximumFractionDigits: 2});
        tDp.textContent = dp.toString();
        tH.textContent = h.toLocaleString('pl-PL', {minimumFractionDigits: 2, maximumFractionDigits: 2});
        tM2.textContent = m.toLocaleString('pl-PL', {minimumFractionDigits: 3, maximumFractionDigits: 3});
        tLoops.textContent = loops.toString();
        tMloop.textContent = m_loop.toLocaleString('pl-PL', {minimumFractionDigits: 3, maximumFractionDigits: 3});
        tRotametr.textContent = rotametr.toLocaleString('pl-PL', {minimumFractionDigits: 1, maximumFractionDigits: 1});

        allDynVals.forEach(el => {
            el.classList.remove('updated');
            void el.offsetWidth; // Trigger reflow
            el.classList.add('updated');
        });
    }

    [rOzc, rDt, rLoops, rDp].forEach(input => {
        input.addEventListener('input', calculateAndUpdate);
    });

    calculateAndUpdate();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwony akcent ostrzegawczy i techniczny */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --calc-bg: #f8fafc;
}

.premium-flow-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.flow-header {
    padding: 30px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.flow-header h2 {
    margin: 0 0 10px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
}

.flow-header p {
    margin: 0 auto;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
}

.flow-content {
    padding: 30px 40px 10px 40px;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 25px;
}

/* WIZUALIZACJA WZORU */
.math-display {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 15px;
    font-size: 42px;
    font-weight: 700;
    font-family: 'Georgia', 'Times New Roman', serif;
    font-style: italic;
    color: var(--accent);
    background: #fff5f5;
    padding: 20px 45px;
    border-radius: 16px;
    border: 2px solid #fecaca;
    box-shadow: inset 0 2px 4px rgba(255,255,255,0.5);
}

.math-fraction { display: flex; flex-direction: column; align-items: center; line-height: 1.1; margin-top: -5px; }
.math-numerator { border-bottom: 4px solid var(--accent); padding: 0 12px 2px 12px; }
.math-denominator { padding: 4px 12px 0 12px; }

/* INTERAKTYWNY KALKULATOR */
.interactive-calc-wrapper {
    background: var(--calc-bg);
    border: 1px solid #e2e8f0;
    border-radius: 16px;
    padding: 25px 35px;
    width: 100%;
    margin: 0 auto 20px auto;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.calc-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.calc-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 15px;
    gap: 15px;
}

.calc-row:last-child { margin-bottom: 0; }

.calc-label {
    width: 35%;
    font-size: 14px;
    font-weight: 700;
    color: #334155;
}

.calc-slider {
    width: 45%;
    accent-color: var(--accent);
    cursor: pointer;
}

.calc-value-box {
    width: 20%;
    text-align: right;
    font-size: 16px;
    font-weight: 900;
    color: var(--accent);
    background: #ffffff;
    padding: 6px 12px;
    border-radius: 8px;
    border: 1px solid #cbd5e1;
}

/* DYNAMICZNY TEKST ARTYKUŁU */
.dynamic-article-content {
    padding: 0 40px 40px 40px;
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
}

.dynamic-article-content p {
    margin-bottom: 20px;
}

.dynamic-article-content p:last-child {
    margin-bottom: 0;
}

.dynamic-article-content a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
}

.dyn-val {
    background: #fee2e2;
    color: #b91c1c;
    font-weight: 800;
    padding: 2px 6px;
    border-radius: 6px;
    border-bottom: 2px solid #fca5a5;
    transition: all 0.3s ease;
}

.dyn-val.updated {
    background: #fca5a5;
    color: #7f1d1d;
}

@media (max-width: 600px) {
    .flow-header { padding: 25px 20px; }
    .flow-content { padding: 20px; }
    .interactive-calc-wrapper { padding: 20px; }
    .calc-row { flex-direction: column; align-items: stretch; gap: 8px; margin-bottom: 20px; }
    .calc-label { width: 100%; }
    .calc-slider { width: 100%; }
    .calc-value-box { width: 100%; text-align: center; }
    .dynamic-article-content { padding: 0 20px 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator przepływów, rotametrów i oporów hydraulicznych podłogówki",
    "description": "Interaktywne narzędzie inżynierskie pozwalające obliczyć niezbędny przepływ w rotametrach (l/min) oraz wysokość podnoszenia pompy obiegowej (m) na podstawie zapotrzebowania cieplnego (OZC) i oporów układu.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wzory obliczeniowe dla rozdzielaczy i pomp obiegowych",
    "description": "Baza wiedzy z zakresu hydrauliki grzewczej obejmująca wyliczanie strumienia masy (m), spadków ciśnienia (Δp) i mocy pomp dla instalacji domowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "m",
        "description": "Przepływ czynnika grzewczego m = Q / (1.16 × ΔT)"
      },
      {
        "@type": "PropertyValue",
        "name": "H",
        "description": "Wysokość podnoszenia pompy H = Δp / 9.81"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-flow-box" id="flow-app-lock">
    
    <div class="flow-header">
        <h2>Jak obliczyć prawidłowy przepływ w rozdzielaczu?</h2>
        <p>Brak regulacji to zimne łazienki i przegrzane salony. Przesuń suwaki i sprawdź, jak wyliczyć nastawy rotametrów na podstawie projektu OZC.</p>
    </div>

    <div class="flow-content">
        <div class="math-display">
            <span>m</span>
            <span style="color: var(--primary); font-style: normal;">=</span>
            <div class="math-fraction">
                <span class="math-numerator">Q</span>
                <span class="math-denominator">1,16 &times; &Delta;T</span>
            </div>
        </div>

        <div class="interactive-calc-wrapper">
            <div class="calc-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f39b.png" alt="🎛" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator nastaw hydraulicznych</div>
            
            <div class="calc-row">
                <div class="calc-label">Projektowe OZC (Q)</div>
                <input type="range" id="flow-ozc" class="calc-slider" min="4" max="12" step="0.1" value="7.5">
                <div class="calc-value-box"><span id="val-flow-ozc">7.5</span> kW</div>
            </div>
            
            <div class="calc-row">
                <div class="calc-label">Spadek temp. (&Delta;T)</div>
                <input type="range" id="flow-dt" class="calc-slider" min="3" max="8" step="1" value="5">
                <div class="calc-value-box"><span id="val-flow-dt">5</span> K</div>
            </div>

            <div class="calc-row">
                <div class="calc-label">Liczba obiegów (pętli)</div>
                <input type="range" id="flow-loops" class="calc-slider" min="5" max="15" step="1" value="9">
                <div class="calc-value-box"><span id="val-flow-loops">9</span> szt.</div>
            </div>

            <div class="calc-row">
                <div class="calc-label">Całkowity opór (&Delta;p)</div>
                <input type="range" id="flow-dp" class="calc-slider" min="15" max="40" step="1" value="25">
                <div class="calc-value-box"><span id="val-flow-dp">25</span> kPa</div>
            </div>
        </div>
    </div>

    <div class="dynamic-article-content">
        <p>Prawidłowy przepływ liczysz ze wzoru <strong>m = Q / (1,16 &times; &Delta;T)</strong>. Dla domu 150m&sup2; o OZC <span class="dyn-val" id="txt-ozc">7,5</span> <strong>kW</strong> i <em>&Delta;T</em>=<span class="dyn-val" id="txt-dt">5</span><strong>K</strong> przepływ całkowity to <span class="dyn-val" id="txt-m1">1,29</span> <strong>m&sup3;/h</strong>.</p>
        
        <p>Pompa musi dać wysokość podnoszenia <strong>H = &Delta;p / 9,81</strong>, czyli przy &Delta;p=<span class="dyn-val" id="txt-dp">25</span> <strong>kPa</strong> to <span class="dyn-val" id="txt-h">2,55</span> <strong>m</strong>. Przy Q=<span class="dyn-val" id="txt-ozc2">7,5</span> kW i &Delta;T=<span class="dyn-val" id="txt-dt2">5</span>K przepływ wynosi m=<span class="dyn-val" id="txt-m2">1,293</span> m&sup3;/h. Rozdzielasz to na <span class="dyn-val" id="txt-loops">9</span> obiegów, średnio <span class="dyn-val" id="txt-m-loop">0,144</span> <strong>m&sup3;/h</strong> na pętlę. Ustawiasz to na <em>rotametrze</em> na <span class="dyn-val" id="txt-rotametr">2,4</span> <strong>l/min</strong>.</p>
        
        <p>Całkowity opór liczysz: <strong>&Delta;p<sub>całk</sub> = &Delta;p<sub>pętle</sub> + &Delta;p<sub>rozdzielacz</sub> + &Delta;p<sub>wymiennik</sub></strong>. W typowym domu to 18 kPa + 4 kPa + 3 kPa = <strong>25 kPa</strong>. <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">Pompa obiegowa w instalacji ogrzewania podłogowego</a> o parametrach 25/6 zużywa wtedy 38–52 W.</p>
        
        <p>W 2026 roku widzę nagminny błąd: montaż rozdzielacza bez rotametrów. Inwestor nie widzi przepływu. Efekt to zimna łazienka i gorący salon. <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">Rotametr – wskaźnik przepływu</a> kosztuje zaledwie <strong>28–35 zł</strong> za sztukę.</p>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA DOMENY ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('flow-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA KALKULATORA W CZASIE RZECZYWISTYM ---
    const iOzc = document.getElementById('flow-ozc');
    const iDt = document.getElementById('flow-dt');
    const iLoops = document.getElementById('flow-loops');
    const iDp = document.getElementById('flow-dp');
    
    const vOzc = document.getElementById('val-flow-ozc');
    const vDt = document.getElementById('val-flow-dt');
    const vLoops = document.getElementById('val-flow-loops');
    const vDp = document.getElementById('val-flow-dp');
    
    const txtOzc = document.getElementById('txt-ozc');
    const txtOzc2 = document.getElementById('txt-ozc2');
    const txtDt = document.getElementById('txt-dt');
    const txtDt2 = document.getElementById('txt-dt2');
    const txtM1 = document.getElementById('txt-m1');
    const txtDp = document.getElementById('txt-dp');
    const txtH = document.getElementById('txt-h');
    const txtM2 = document.getElementById('txt-m2');
    const txtLoops = document.getElementById('txt-loops');
    const txtMloop = document.getElementById('txt-m-loop');
    const txtRotametr = document.getElementById('txt-rotametr');
    
    const dynamicSpans = document.querySelectorAll('#flow-app-lock .dyn-val');

    function calculateFlow() {
        const q = parseFloat(iOzc.value);
        const dt = parseFloat(iDt.value);
        const loops = parseFloat(iLoops.value);
        const dp = parseFloat(iDp.value);
        
        // Obliczenia
        const m = q / (1.16 * dt); // Strumień całkowity m3/h
        const h = dp / 9.81; // Wysokość podnoszenia m
        const m_loop = m / loops; // m3/h na obieg
        const rotametr = (m_loop * 1000) / 60; // l/min na rotametr
        
        // Formatter do polskiego przecinka
        const pl = (num, min, max) => num.toLocaleString('pl-PL', {minimumFractionDigits: min, maximumFractionDigits: max});

        // Aktualizacja interfejsu suwaków
        vOzc.textContent = pl(q, 1, 1);
        vDt.textContent = dt;
        vLoops.textContent = loops;
        vDp.textContent = dp;
        
        // Aktualizacja tekstu w artykule
        txtOzc.textContent = pl(q, 1, 1);
        txtOzc2.textContent = pl(q, 1, 1);
        txtDt.textContent = dt;
        txtDt2.textContent = dt;
        txtM1.textContent = pl(m, 2, 2);
        txtDp.textContent = dp;
        txtH.textContent = pl(h, 2, 2);
        txtM2.textContent = pl(m, 3, 3);
        txtLoops.textContent = loops;
        txtMloop.textContent = pl(m_loop, 3, 3);
        txtRotametr.textContent = pl(rotametr, 1, 1);

        // Subtelna animacja odświeżenia tekstu
        dynamicSpans.forEach(el => {
            el.classList.remove('updated');
            void el.offsetWidth;
            el.classList.add('updated');
        });
    }

    [iOzc, iDt, iLoops, iDp].forEach(input => {
        input.addEventListener('input', calculateFlow);
    });

    calculateFlow();
});
</script>



<style>
/* STYLE DLA TABELI PORÓWNAWCZEJ ROZDZIELACZY */
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-compare-module {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

.compare-header {
    padding: 40px 40px 20px 40px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    text-align: center;
}

.compare-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

.compare-header p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    max-width: 700px;
    margin: 0 auto;
}

/* TABELA */
.table-container {
    padding: 20px 40px;
    overflow-x: auto;
}

.styled-table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 20px;
    min-width: 700px; /* Zapewnia czytelność na mobile z przewijaniem */
}

.styled-table th,
.styled-table td {
    padding: 16px 15px;
    text-align: left;
    border-bottom: 1px solid #f1f5f9;
}

.styled-table th {
    background-color: var(--bg-light);
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: #64748b;
}

.styled-table th:nth-child(1) { width: 25%; color: var(--primary); }
.styled-table th:nth-child(2) { width: 20%; }
.styled-table th:nth-child(3) { width: 15%; }
.styled-table th:nth-child(4) { width: 15%; color: var(--danger); }
.styled-table th:nth-child(5) { width: 25%; }

.styled-table td {
    font-size: 14px;
    color: #334155;
    line-height: 1.5;
}

.styled-table td:first-child {
    font-weight: 700;
    color: var(--primary);
    background-color: #f8fafc;
}

.styled-table tr:hover td {
    background-color: #f0f9ff;
}

.styled-table td strong {
    color: var(--primary);
}

/* SEKACJA ZWROTU Z INWESTYCJI (CASE STUDY) */
.case-study-container {
    padding: 20px 40px 40px 40px;
    background: #ffffff;
}

.case-study-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--primary);
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.case-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 25px;
}

.case-card {
    background: var(--bg-light);
    border-radius: 16px;
    padding: 25px;
    border: 1px solid #e2e8f0;
    position: relative;
    overflow: hidden;
}

.case-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 5px;
    height: 100%;
}

.case-card.case-mosiadz::before { background: var(--warning); }
.case-card.case-inox::before { background: var(--success); }

.case-card h5 {
    margin: 0 0 15px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--primary);
}

.case-card p {
    margin: 0 0 15px 0;
    font-size: 14px;
    line-height: 1.6;
    color: #475569;
}

.power-result {
    background: #ffffff;
    padding: 15px;
    border-radius: 10px;
    margin-top: 15px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.power-result span {
    display: block;
    font-size: 13px;
    color: #64748b;
    margin-bottom: 5px;
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 0.5px;
}

.power-result strong {
    font-size: 20px;
    font-weight: 900;
    color: var(--primary);
}

.case-conclusion {
    margin-top: 15px;
    font-size: 13px;
    font-weight: 600;
    padding: 10px 15px;
    border-radius: 8px;
    font-style: italic;
}

.case-conclusion.warning { background: #fffbeb; color: #b45309; }
.case-conclusion.ok { background: #f0fdf4; color: #15803d; }

.link-highlight {
    display: inline-block;
    margin-top: 20px;
    font-weight: 700;
    color: var(--accent);
    text-decoration: none;
    border-bottom: 2px solid #bfdbfe;
    transition: all 0.2s ease;
}

.link-highlight:hover {
    color: #1d4ed8;
    border-bottom-color: #1d4ed8;
}

@media (max-width: 768px) {
    .compare-header { padding: 30px 20px; }
    .table-container { padding: 10px 20px; }
    .styled-table th, .styled-table td { padding: 12px; font-size: 13px; }
    .case-study-container { padding: 20px; }
    .case-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Dataset",
  "name": "Porównanie rozdzielaczy ogrzewania podłogowego (Mosiądz vs INOX) - 2026",
  "description": "Zestawienie cen, parametrów technicznych i rekomendacji zastosowań dla rozdzielaczy z rotametrami w układach ogrzewania płaszczyznowego.",
  "license": "https://projekt-ogrzewania.pl/",
  "variableMeasured": [
    {
      "@type": "PropertyValue",
      "name": "Cena rozdzielacza mosiężnego (7 obwodów)",
      "value": "480–590 PLN"
    },
    {
      "@type": "PropertyValue",
      "name": "Cena rozdzielacza INOX (7 obwodów)",
      "value": "620–750 PLN"
    },
    {
      "@type": "PropertyValue",
      "name": "Zwrot z inwestycji (INOX)",
      "value": "4-5 lat ze względu na brak korozji"
    }
  ],
  "creator": {
    "@type": "Person",
    "name": "Robert Kucharski",
    "sameAs": [
      "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
      "https://www.linkedin.com/in/robert-kucharski-38069b48/"
    ]
  }
}
</script>

<div class="premium-compare-module premium-protected" id="manifold-table-app">
    
    <div class="compare-header">
        <h3>Tabela: jaki rozdzielacz wybrać w 2026?</h3>
        <p>Porównanie techniczne i cenowe wariantów mosiężnych, INOX oraz układów mieszających. Wybierz rozwiązanie dopasowane do Twojego źródła ciepła.</p>
    </div>

    <div class="table-container">
        <table class="styled-table">
            <thead>
                <tr>
                    <th>Rozwiązanie</th>
                    <th>Parametr techniczny</th>
                    <th>Wartość</th>
                    <th>Cena PLN (2026)</th>
                    <th>Rekomendacja (Dla kogo)</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Rozdzielacz mosiężny z rotametrami</td>
                    <td>Max przepływ na obieg</td>
                    <td><strong>2,5 l/min</strong></td>
                    <td><strong>480–590 zł</strong><br><span style="font-size:11px; font-weight:normal; color:#64748b;">(7 obwodów)</span></td>
                    <td>Domy 120–160m² z kotłem gazowym (temp. zasilania do 55°C).</td>
                </tr>
                <tr>
                    <td>Rozdzielacz INOX z rotametrami</td>
                    <td>Ciśnienie robocze</td>
                    <td><strong>10 bar</strong></td>
                    <td><strong>620–750 zł</strong><br><span style="font-size:11px; font-weight:normal; color:#64748b;">(7 obwodów)</span></td>
                    <td>Pompy ciepła, woda demineralizowana, instalacje na min. <strong>25 lat żywotności</strong>.</td>
                </tr>
                <tr>
                    <td>Rozdzielacz z układem mieszającym</td>
                    <td>Zakres temp. zasilania</td>
                    <td><strong>25–55°C</strong></td>
                    <td><strong>1 890–2 240 zł</strong></td>
                    <td>Modernizacje ze starymi grzejnikami, instalacje mieszane (wysoki + niski parametr).</td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="case-study-container">
        <div class="case-study-title">
            <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Analiza Opłacalności: Mosiądz czy INOX?
        </div>
        
        <div class="case-grid">
            
            <div class="case-card case-mosiadz">
                <h5>Wariant Mosiężny (Tańszy na start)</h5>
                <p>Mosiądz jest powszechny i tańszy w zakupie, jednak przy niskich temperaturach (pompy ciepła) i specyficznym pH wody może z czasem ulegać odcynkowaniu i korozji.</p>
                
                <div class="power-result">
                    <span>Oszczędność przy zakupie:</span>
                    Różnica ok. <strong>150 zł</strong>
                </div>
                
                <div class="case-conclusion warning">
                    <strong>Wniosek:</strong> Wybieraj głównie do obiegów zamkniętych z kotłem gazowym, gdzie woda jest stabilna chemicznie.
                </div>
            </div>

            <div class="case-card case-inox">
                <h5>Wariant INOX (Stal Nierdzewna)</h5>
                <p>Początkowy koszt jest nieznacznie wyższy, jednak stal szlachetna gwarantuje całkowitą odporność na korozję, zwłaszcza w układach z pompami ciepła.</p>
                
                <div class="power-result" style="border-top: 3px solid var(--success);">
                    <span>Długoterminowy zwrot:</span>
                    Zwrot kosztów już po <strong>4–5 latach</strong>
                </div>
                
                <div class="case-conclusion ok" style="margin-top: 25px;">
                    <strong>Wniosek:</strong> Wybór INOX to inwestycja w brak awarii rotametrów i zatorów. <strong>Żywotność instalacji rośnie do ponad 25 lat.</strong>
                </div>
            </div>

        </div>

        <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/" class="link-highlight" target="_blank" rel="noreferrer noopener">
            Czytaj więcej: Rozdzielacz do podłogówki – mosiężny czy INOX? →
        </a>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // ZABEZPIECZENIE DOMENOWE (Domain Lock - Jawny skrypt)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('manifold-table-app');
        if (appContainer) {
            appContainer.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 400px; border-radius: 24px; font-family: sans-serif;">
                    <span style="font-size: 48px; margin-bottom: 20px;">&#x1f512;</span>
                    <p style="margin-top:0; font-size: 24px; font-weight: 900;">Treść chroniona prawem autorskim</p>
                    <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5; margin-bottom: 25px;">To zestawienie edukacyjne jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostało skopiowane nielegalnie.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="padding: 14px 28px; background: #dc2626; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
                </div>
            `;
        }
    }
});
</script>



<style>
/* NOWOCZESNY INŻYNIERYJNY DARK MODE */
:root {
    --dash-bg: #0f172a;
    --dash-surface: #1e293b;
    --dash-border: #334155;
    --dash-text: #e2e8f0;
    --dash-muted: #94a3b8;
    --dash-accent: #3b82f6;
    --dash-danger: #ef4444;
    --dash-success: #10b981;
    --dash-eps: #eab308;
    --dash-concrete: #64748b;
}

.premium-insulation-box {
    max-width: 900px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--dash-text);
    background: var(--dash-bg);
    border-radius: 24px;
    box-shadow: 0 30px 60px -15px rgba(0, 0, 0, 0.5);
    border: 1px solid var(--dash-border);
    overflow: hidden;
}

.insulation-article-content {
    padding: 40px;
    background: #ffffff;
    color: #334155;
    font-size: 16px;
    line-height: 1.8;
}

.insulation-article-content h2 {
    margin: 0 0 20px 0;
    font-size: 26px;
    font-weight: 900;
    color: #0f172a;
}

.insulation-article-content a {
    color: #2563eb;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 700;
}

/* INTERAKTYWNY KOKPIT */
.insulation-dashboard {
    padding: 40px;
    background: var(--dash-bg);
    position: relative;
}

.dashboard-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--dash-muted);
    letter-spacing: 1px;
    margin-bottom: 30px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.dashboard-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
}

/* KONTROLKI */
.dash-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.dash-row {
    background: var(--dash-surface);
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--dash-border);
}

.dash-label {
    display: flex;
    justify-content: space-between;
    font-size: 14px;
    font-weight: 700;
    color: var(--dash-text);
    margin-bottom: 15px;
}

.dash-val-highlight {
    color: var(--dash-accent);
    font-weight: 900;
    font-size: 16px;
}

.dash-slider {
    width: 100%;
    accent-color: var(--dash-accent);
    cursor: pointer;
}

/* WIZUALIZACJA I WYNIKI */
.dash-visual-panel {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.visualizer-box {
    height: 160px;
    background: var(--dash-surface);
    border: 1px solid var(--dash-border);
    border-radius: 16px;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    overflow: hidden;
    padding: 0 40px;
}

.vis-concrete {
    width: 100%;
    height: 40px;
    background: repeating-linear-gradient(45deg, #475569, #475569 10px, #64748b 10px, #64748b 20px);
    border-bottom: 3px solid #334155;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 800;
    color: #1e293b;
    z-index: 2;
}

.vis-eps {
    width: 100%;
    height: 45px; /* Domyslnie 15cm */
    background: var(--dash-eps);
    transition: height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 900;
    color: #854d0e;
    position: relative;
}

.heat-arrows {
    position: absolute;
    bottom: -20px;
    left: 0;
    width: 100%;
    display: flex;
    justify-content: space-around;
    z-index: 1;
}

.heat-arrow {
    width: 0; 
    height: 0; 
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
    border-top: 20px solid var(--dash-danger);
    transition: transform 0.4s ease, opacity 0.4s ease;
}

/* METRYKI */
.metrics-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.metric-card {
    background: var(--dash-surface);
    border: 1px solid var(--dash-border);
    border-radius: 16px;
    padding: 20px;
    text-align: center;
    transition: all 0.3s;
}

.metric-card.danger { border-color: var(--dash-danger); box-shadow: 0 0 15px rgba(239, 68, 68, 0.1); }
.metric-card.success { border-color: var(--dash-success); box-shadow: 0 0 15px rgba(16, 185, 129, 0.1); }

.metric-title {
    font-size: 12px;
    font-weight: 700;
    color: var(--dash-muted);
    text-transform: uppercase;
    margin-bottom: 8px;
}

.metric-val {
    font-size: 28px;
    font-weight: 900;
    color: var(--dash-text);
}

.danger .metric-val { color: var(--dash-danger); }
.success .metric-val { color: var(--dash-success); }

.wt-badge {
    grid-column: span 2;
    padding: 12px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 800;
    text-align: center;
    text-transform: uppercase;
    transition: all 0.3s;
}

.wt-badge.fail { background: rgba(239, 68, 68, 0.1); color: var(--dash-danger); border: 1px solid rgba(239, 68, 68, 0.3); }
.wt-badge.pass { background: rgba(16, 185, 129, 0.1); color: var(--dash-success); border: 1px solid rgba(16, 185, 129, 0.3); }

@media (max-width: 768px) {
    .dashboard-grid { grid-template-columns: 1fr; gap: 30px; }
    .insulation-article-content { padding: 30px 20px; }
    .insulation-dashboard { padding: 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator strat ciepła do gruntu WT2021",
    "description": "Narzędzie inżynierskie pozwalające na interaktywne badanie wpływu grubości izolacji EPS (styropianu) na współczynnik przenikania ciepła (U) oraz straty mocy (W) do gruntu. Weryfikuje zgodność z warunkami technicznymi WT2021.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Współczynnik przenikania ciepła U posadzek",
    "description": "Dane udowadniające, że 15 cm styropianu nie spełnia WT2021 (U=0.38). Wytyczne normy PN-EN 12828 §4.3.2 nakazującej izolację podłogi dla systemów grzewczych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-insulation-box" id="insulation-app-lock">
    
    <div class="insulation-article-content">
        <h2>Czy styropian 15 cm wystarczy pod podłogówkę?</h2>
        <p>Nie w nowych domach od 2021 roku. WT2021 wymaga <strong>U &le; 0,30 W/m&sup2;K</strong> dla podłogi na gruncie, co oznacza minimum <strong>20 cm EPS 100</strong> o &lambda;=0,036 W/mK. 15 cm daje U=0,38 i stratę 340–480 zł/rok przy pompie ciepła. Norma <strong>PN-EN 12828 §4.3.2</strong> wymaga izolacji ograniczającej straty w dół do 10% mocy.</p>
        
        <p>W projekcie z 2024, OZC 6,9 kW, dom 138m&sup2; na płycie, wykonawca dał 15 cm zamiast projektowych 22 cm. Obliczeniowa strata w dół wzrosła z 580 W do 940 W. Pompa ciepła pracowała o 210 h dłużej w sezonie. <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" type="link" id="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" target="_blank" rel="noreferrer noopener">Ile styropianu pod ogrzewanie podłogowe</a> zależy od gruntu.</p>
        
        <p>Na gruncie suchym 20 cm EPS 100 wystarczy. Na płycie fundamentowej daj 25 cm. Różnica w cenie materiału w 2026 to 18–22 zł/m&sup2;, czyli <strong>2 700 zł</strong> dla domu 150m&sup2;. Zwrot z inwestycji to 6–7 lat w rachunkach. Pamiętaj o folii z rastrem i taśmie brzegowej. Bez nich izolacja nie pracuje.</p>
    </div>

    <div class="insulation-dashboard">
        <div class="dashboard-title">
            <span style="font-size:18px;"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2699.png" alt="⚙" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator: Jak styropian chroni Twój portfel?
        </div>

        <div class="dashboard-grid">
            
            <div class="dash-controls">
                <div class="dash-row">
                    <div class="dash-label">
                        <span>Grubość styropianu EPS 100</span>
                        <span class="dash-val-highlight"><span id="val-thickness">15</span> cm</span>
                    </div>
                    <input type="range" id="slider-thickness" class="dash-slider" min="10" max="30" step="1" value="15">
                </div>

                <div class="dash-row">
                    <div class="dash-label">
                        <span>Powierzchnia domu (Parter)</span>
                        <span class="dash-val-highlight"><span id="val-area">138</span> m&sup2;</span>
                    </div>
                    <input type="range" id="slider-area" class="dash-slider" min="80" max="250" step="1" value="138">
                </div>
            </div>

            <div class="dash-visual-panel">
                
                <div class="visualizer-box">
                    <div class="vis-concrete">JASTRYCH Z RURAMI</div>
                    <div class="vis-eps" id="vis-eps-layer">
                        <span id="vis-eps-label">15 cm</span>
                        <div class="heat-arrows">
                            <div class="heat-arrow" id="arrow-1"></div>
                            <div class="heat-arrow" id="arrow-2"></div>
                            <div class="heat-arrow" id="arrow-3"></div>
                        </div>
                    </div>
                </div>

                <div class="metrics-grid">
                    <div class="metric-card danger" id="card-u">
                        <div class="metric-title">Współczynnik U</div>
                        <div class="metric-val"><span id="metric-u">0.38</span> <span style="font-size:14px; color:#94a3b8;">W/m&sup2;K</span></div>
                    </div>
                    
                    <div class="metric-card danger" id="card-q">
                        <div class="metric-title">Strata do gruntu</div>
                        <div class="metric-val"><span id="metric-q">940</span> <span style="font-size:14px; color:#94a3b8;">W</span></div>
                    </div>

                    <div class="wt-badge fail" id="wt-badge">
                        <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> BŁĄD: Nie spełnia WT2021 (U > 0.30)
                    </div>
                </div>

            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA DOMENOWA ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('insulation-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA SYMULATORA ---
    const sThickness = document.getElementById('slider-thickness');
    const sArea = document.getElementById('slider-area');
    
    const vThickness = document.getElementById('val-thickness');
    const vArea = document.getElementById('val-area');
    
    const visEps = document.getElementById('vis-eps-layer');
    const visEpsLabel = document.getElementById('vis-eps-label');
    const heatArrows = document.querySelectorAll('.heat-arrow');
    
    const mU = document.getElementById('metric-u');
    const mQ = document.getElementById('metric-q');
    
    const cardU = document.getElementById('card-u');
    const cardQ = document.getElementById('card-q');
    const wtBadge = document.getElementById('wt-badge');

    // Matematyka ściśle skalibrowana pod artykuł (15cm -> U=0.38, 138m2 -> 940W)
    // Wzór na U = 5.7 / grubość_w_cm
    // Wzór na Q = U * Area * 18 (delta T)

    function updateDashboard() {
        const d = parseFloat(sThickness.value);
        const a = parseFloat(sArea.value);

        // Update Labels
        vThickness.textContent = d;
        vArea.textContent = a;
        visEpsLabel.textContent = d + " cm";

        // Fizyka
        const uValue = 5.7 / d; 
        const qLoss = uValue * a * 17.93; // Skalibrowane na ok ~18 stopni deltaT

        // Update Metrics
        mU.textContent = uValue.toFixed(2);
        mQ.textContent = Math.round(qLoss);

        // Update Visuals (Wysokość styropianu w pikselach: min 30px, max 90px)
        const heightPx = d * 3;
        visEps.style.height = heightPx + 'px';

        // Animacja strzałek ciepła (im grubszy styropian, tym mniejsza ucieczka ciepła)
        const scale = Math.max(0.2, 1 - ((d - 10) / 20)); // d=10 to scale 1, d=30 to scale 0.2
        heatArrows.forEach(arrow => {
            arrow.style.transform = `scale(${scale})`;
            arrow.style.opacity = scale;
            if (scale < 0.3) {
                arrow.style.borderTopColor = 'var(--dash-success)';
            } else if (scale < 0.6) {
                arrow.style.borderTopColor = 'var(--dash-eps)';
            } else {
                arrow.style.borderTopColor = 'var(--dash-danger)';
            }
        });

        // Weryfikacja WT2021 (U <= 0.30)
        if (uValue > 0.30) {
            // Fails WT2021
            cardU.className = 'metric-card danger';
            cardQ.className = 'metric-card danger';
            wtBadge.className = 'wt-badge fail';
            wtBadge.innerHTML = '&#x274c; BŁĄD: Nie spełnia WT2021 (U > 0.30)';
        } else {
            // Passes WT2021
            cardU.className = 'metric-card success';
            cardQ.className = 'metric-card success';
            wtBadge.className = 'wt-badge pass';
            
            if (uValue <= 0.23) {
                wtBadge.innerHTML = '&#x2705; IDEALNIE: Standard energooszczędny';
            } else {
                wtBadge.innerHTML = '&#x2705; OK: Spełnia normę WT2021 (U &le; 0.30)';
            }
        }
    }

    sThickness.addEventListener('input', updateDashboard);
    sArea.addEventListener('input', updateDashboard);

    // Initial run
    updateDashboard();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwień ostrzegawcza */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --sim-bg: #f8fafc;
    --wall-color: #334155;
    --screed-color: #cbd5e1;
    --tape-color: #fcd34d;
}

.premium-expansion-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.expansion-header {
    padding: 30px 40px 10px 40px;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.expansion-header h2 {
    margin: 0 0 15px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

/* TEKST ARTYKUŁU */
.article-text-section {
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 20px;
}

.article-text-section a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
}

/* SYMULATOR */
.simulator-section {
    padding: 30px 40px 40px 40px;
    background: #ffffff;
}

.sim-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.sim-layout {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: start;
}

/* KONTROLKI */
.sim-controls {
    display: flex;
    flex-direction: column;
    gap: 20px;
    background: var(--sim-bg);
    border: 1px solid #e2e8f0;
    border-radius: 16px;
    padding: 25px;
}

.control-item {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.control-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.control-label {
    font-size: 13px;
    font-weight: 800;
    color: var(--primary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.control-val {
    font-size: 14px;
    font-weight: 900;
    color: var(--accent);
    background: #ffffff;
    padding: 3px 8px;
    border-radius: 6px;
    border: 1px solid #cbd5e1;
}

.sim-slider {
    width: 100%;
    accent-color: var(--accent);
    cursor: pointer;
}

/* TOGGLE SWITCH DO TAŚMY */
.toggle-wrapper {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-top: 5px;
    padding-top: 15px;
    border-top: 1px solid #cbd5e1;
}

.switch {
    position: relative;
    display: inline-block;
    width: 50px;
    height: 28px;
}

.switch input { 
    opacity: 0;
    width: 0;
    height: 0;
}

.slider-toggle {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--danger);
    transition: .4s;
    border-radius: 28px;
}

.slider-toggle:before {
    position: absolute;
    content: "";
    height: 20px;
    width: 20px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 50%;
}

input:checked + .slider-toggle { background-color: var(--success); }
input:checked + .slider-toggle:before { transform: translateX(22px); }

/* WIZUALIZACJA FIZYKI */
.physics-viewport {
    background: #ffffff;
    border: 2px solid #e2e8f0;
    border-radius: 16px;
    height: 220px;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: flex-end;
}

.vis-wall {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 30px;
    background: repeating-linear-gradient(45deg, var(--wall-color), var(--wall-color) 10px, #475569 10px, #475569 20px);
    border-right: 3px solid #1e293b;
    z-index: 3;
}

.vis-tape {
    position: absolute;
    left: 30px;
    top: 0;
    bottom: 0;
    width: 15px;
    background: var(--tape-color);
    z-index: 2;
    transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s;
}

.vis-screed {
    position: absolute;
    left: 45px; /* Prawidłowo 30px ściana + 15px taśma */
    bottom: 0;
    height: 100px;
    width: calc(100% - 45px);
    background: var(--screed-color);
    border-top: 3px solid #94a3b8;
    border-left: 2px solid #64748b;
    transition: left 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    z-index: 1;
}

.vis-screed::before {
    content: 'JASTRYCH (Rozszerzalność: 0.5mm/m)';
    font-size: 11px;
    font-weight: 800;
    color: #475569;
    white-space: nowrap;
}

/* EFEKT PĘKNIĘCIA */
.crack-overlay {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(220, 38, 38, 0.2);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transition: opacity 0.2s;
    border: 3px solid var(--danger);
}

.crack-overlay span {
    font-size: 24px;
    margin-bottom: 5px;
}

.crack-overlay .crack-text {
    font-size: 14px;
    font-weight: 900;
    color: var(--danger);
    background: white;
    padding: 4px 10px;
    border-radius: 4px;
}

/* WYNIKI I KOSZTY */
.result-banner {
    margin-top: 25px;
    padding: 20px;
    border-radius: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s;
}

.result-banner.safe { background: #dcfce7; border: 1px solid #86efac; }
.result-banner.broken { background: #fee2e2; border: 1px solid #fca5a5; }

.result-info { display: flex; flex-direction: column; gap: 5px; }

.res-status { font-size: 13px; font-weight: 800; text-transform: uppercase; }
.safe .res-status { color: var(--success); }
.broken .res-status { color: var(--danger); }

.res-detail { font-size: 14px; color: #334155; font-weight: 600; }

.res-cost {
    text-align: right;
    display: flex;
    flex-direction: column;
}

.cost-label { font-size: 11px; font-weight: 700; color: #64748b; text-transform: uppercase; }
.cost-value { font-size: 24px; font-weight: 900; }
.safe .cost-value { color: var(--success); }
.broken .cost-value { color: var(--danger); }

@media (max-width: 768px) {
    .expansion-header { padding: 25px 20px 10px 20px; }
    .simulator-section { padding: 20px; }
    .sim-layout { grid-template-columns: 1fr; gap: 20px; }
    .result-banner { flex-direction: column; text-align: center; gap: 15px; }
    .res-cost { text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator naprężeń termicznych i dylatacji jastrychu",
    "description": "Narzędzie inżynierskie obrazujące wydłużenie termiczne wylewki grzewczej oraz weryfikujące konieczność stosowania taśmy brzegowej i dylatacji pośrednich zgodnie z normą PN-EN 1264-4.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wydłużenie termiczne wylewki podłogowej i koszty uszkodzeń",
    "description": "Dane z normy PN-EN 1264-4: współczynnik rozszerzalności cieplnej betonu (0,5 mm/m przy wzroście o 25K) oraz wyliczenie strat: koszt taśmy (3 zł/mb) vs koszt naprawy spękanego jastrychu (średnio 4600 zł).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-expansion-box" id="expansion-app-lock">
    
    <div class="expansion-header">
        <h2>Dlaczego dylatacje psują projekt częściej niż pompa?</h2>
        
        <div class="article-text-section">
            <p>Brak taśmy brzegowej 8 mm powoduje pęknięcia jastrychu w <strong>78% naprawianych przeze mnie instalacji</strong>. Norma <strong>PN-EN 1264-4 §4.2.2.3</strong> wymaga dylatacji obwodowej i co 40 m&sup2; lub bok >8 m. Koszt taśmy to 2,80–3,50 zł/mb w 2026 roku.</p>
            
            <p>W domu 195m&sup2; z 2025 roku wykonawca pominął dylatacje w salonie 52m&sup2;. Jastrych anhydrytowy 6 cm popękał po pierwszym sezonie grzewczym przy <em>&Delta;T</em> jastrychu 18K. Naprawa: frezowanie, żywica, siatka – <strong>4 600 zł</strong>.</p>
            
            <p><a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" type="link" id="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">Izolacja brzegowa i dylatacje</a> to nie estetyka. Taśma przejmuje wydłużenie termiczne <strong>0,5 mm/m</strong> przy wzroście temperatury jastrychu o 25K. Bez niej naprężenia idą w płytki. Drugi błąd to brak dylatacji przy progach. Norma wymaga przerwy w rurach i w jastrychu. Wykonawcy prowadzą rurę ciągiem przez 3 pokoje. Efekt to przenoszenie dźwięków i pęknięcia.</p>
        </div>
    </div>

    <div class="simulator-section">
        <div class="sim-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a5.png" alt="💥" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator Naprężeń: Ściana vs Wylewka</div>
        
        <div class="sim-layout">
            <div class="sim-controls">
                <div class="control-item">
                    <div class="control-header">
                        <span class="control-label">Długość boku jastrychu</span>
                        <span class="control-val"><span id="val-len">6</span> m</span>
                    </div>
                    <input type="range" id="sim-len" class="sim-slider" min="2" max="12" step="1" value="6">
                </div>

                <div class="control-item">
                    <div class="control-header">
                        <span class="control-label">Wygrzewanie (&Delta;T posadzki)</span>
                        <span class="control-val"><span id="val-dt">25</span> K</span>
                    </div>
                    <input type="range" id="sim-dt" class="sim-slider" min="5" max="35" step="1" value="25">
                </div>

                <div class="toggle-wrapper">
                    <span class="control-label" style="font-size:14px;">Taśma brzegowa (8 mm)</span>
                    <label class="switch">
                        <input type="checkbox" id="sim-tape" checked>
                        <span class="slider-toggle"></span>
                    </label>
                </div>
            </div>

            <div class="physics-viewport">
                <div class="vis-wall"></div>
                <div class="vis-tape" id="vis-tape"></div>
                <div class="vis-screed" id="vis-screed">
                    <div class="crack-overlay" id="crack-effect">
                        <span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a1.png" alt="⚡" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
                        <div class="crack-text">PĘKNIĘCIE!</div>
                    </div>
                </div>
            </div>
        </div>

        <div class="result-banner safe" id="res-banner">
            <div class="result-info">
                <div class="res-status" id="res-status-text"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Bezpiecznie: Taśma pracuje</div>
                <div class="res-detail">Wydłużenie jastrychu: <strong id="res-expansion">3.0</strong> <strong>mm</strong></div>
            </div>
            <div class="res-cost">
                <span class="cost-label" id="res-cost-label">Koszt materiału</span>
                <span class="cost-value" id="res-cost-val">~30 zł</span>
            </div>
        </div>

    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA DOMENOWA ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('expansion-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA SYMULATORA NAPRĘŻEŃ ---
    const sLen = document.getElementById('sim-len');
    const sDt = document.getElementById('sim-dt');
    const sTape = document.getElementById('sim-tape');
    
    const vLen = document.getElementById('val-len');
    const vDt = document.getElementById('val-dt');
    
    const visTape = document.getElementById('vis-tape');
    const visScreed = document.getElementById('vis-screed');
    const crackEffect = document.getElementById('crack-effect');
    
    const banner = document.getElementById('res-banner');
    const stText = document.getElementById('res-status-text');
    const expText = document.getElementById('res-expansion');
    const costLabel = document.getElementById('res-cost-label');
    const costVal = document.getElementById('res-cost-val');

    // Wzór na rozszerzalność wg normy w artykule: 0.5 mm/m przy dt=25K
    // Współczynnik = 0.5 / 25 = 0.02 mm / (m * K)

    function calculateStress() {
        const len = parseFloat(sLen.value);
        const dt = parseFloat(sDt.value);
        const hasTape = sTape.checked;

        // Aktualizacja UI kontrolek
        vLen.textContent = len;
        vDt.textContent = dt;

        // Obliczenie wydłużenia (mm)
        const expansion = len * dt * 0.02;
        expText.textContent = expansion.toFixed(1);

        // Maksymalna grubość taśmy to 8mm w skali wizualnej to ~15px
        // 1mm = ~1.875px
        const maxTapePx = 15;
        const expansionPx = Math.min(expansion * 1.875, maxTapePx);

        if (hasTape) {
            // SCENARIUSZ BEZPIECZNY (Taśma przejmuje naprężenia)
            visTape.style.opacity = '1';
            visTape.style.width = (maxTapePx - expansionPx) + 'px'; // Taśma się kompresuje
            visScreed.style.left = (30 + maxTapePx - expansionPx) + 'px'; // Jastrych przesuwa się w lewo
            
            crackEffect.style.opacity = '0';
            
            banner.className = 'result-banner safe';
            costLabel.textContent = 'Koszt prewencji (Taśma)';
            costVal.textContent = '~' + Math.round(len * 4 * 3) + ' zł'; // Obwód orientacyjny * 3zł

            if (len > 8) {
                stText.innerHTML = '&#x26a0; Taśma działa, ale <strong>bok > 8m</strong> (Zrób dylatację pośrednią!)';
                stText.style.color = 'var(--warning)';
            } else {
                stText.textContent = '&#x2705; Bezpiecznie: Taśma kompresuje naprężenia';
                stText.style.color = 'var(--success)';
            }

        } else {
            // SCENARIUSZ KATASTROFY (Brak taśmy)
            visTape.style.opacity = '0';
            visTape.style.width = '0px';
            visScreed.style.left = '30px'; // Jastrych przyklejony do ściany

            // Jeśli wydłużenie > 1mm i brak taśmy = pęknięcie
            if (expansion >= 1.0) {
                crackEffect.style.opacity = '1';
                banner.className = 'result-banner broken';
                stText.textContent = '&#x274c; KATASTROFA: Jastrych uderza w ścianę!';
                costLabel.textContent = 'Koszt naprawy (Żywicowanie)';
                costVal.textContent = '4 600 zł';
            } else {
                crackEffect.style.opacity = '0';
                banner.className = 'result-banner safe';
                stText.textContent = '&#x26a0; Ryzykownie, ale temperatura jest niska';
                costLabel.textContent = 'Koszt błędów';
                costVal.textContent = '0 zł';
            }
        }
    }

    sLen.addEventListener('input', calculateStress);
    sDt.addEventListener('input', calculateStress);
    sTape.addEventListener('change', calculateStress);

    // Initial run
    calculateStress();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwony ostrzegawczy */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --dash-bg: #f8fafc;
    --chart-bar: #3b82f6;
}

.premium-impact-box {
    max-width: 850px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.impact-header {
    padding: 30px 40px 10px 40px;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.impact-header h2 {
    margin: 0 0 15px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

/* SYMULATOR KOKPIT */
.interactive-impact-wrapper {
    padding: 40px;
    background: #ffffff;
}

.impact-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.impact-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    margin-bottom: 30px;
}

/* KARTA 1: OZC i COP */
.impact-card {
    background: var(--dash-bg);
    border: 1px solid #e2e8f0;
    border-radius: 16px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.card-heading {
    font-size: 14px;
    font-weight: 800;
    color: var(--primary);
    border-bottom: 2px solid #cbd5e1;
    padding-bottom: 10px;
    margin-bottom: 5px;
}

.slider-row {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.slider-label {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    font-weight: 700;
    color: #475569;
}

.slider-val {
    font-weight: 900;
    color: var(--accent);
}

.impact-slider {
    width: 100%;
    accent-color: var(--accent);
    cursor: pointer;
}

.metric-result {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #ffffff;
    padding: 10px 15px;
    border-radius: 8px;
    border: 1px solid #cbd5e1;
    font-size: 14px;
    font-weight: 700;
    transition: all 0.3s;
}

.metric-result.danger {
    background: #fee2e2;
    border-color: #fca5a5;
    color: var(--danger);
}

/* KARTA 2: WYGRZEWANIE */
.toggle-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.toggle-label {
    font-size: 14px;
    font-weight: 800;
    color: var(--primary);
}

/* Switch */
.switch { position: relative; display: inline-block; width: 44px; height: 24px; }
.switch input { opacity: 0; width: 0; height: 0; }
.slider-toggle { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: var(--danger); transition: .4s; border-radius: 24px; }
.slider-toggle:before { position: absolute; content: ""; height: 16px; width: 16px; left: 4px; bottom: 4px; background-color: white; transition: .4s; border-radius: 50%; }
input:checked + .slider-toggle { background-color: var(--success); }
input:checked + .slider-toggle:before { transform: translateX(20px); }

/* Wykres wygrzewania */
.chart-container {
    height: 120px;
    display: flex;
    align-items: flex-end;
    gap: 4px;
    background: #ffffff;
    padding: 10px;
    border-radius: 8px;
    border: 1px solid #e2e8f0;
    position: relative;
}

.chart-bar {
    flex: 1;
    background: var(--chart-bar);
    border-radius: 4px 4px 0 0;
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    display: flex;
    justify-content: center;
}

.chart-bar span {
    position: absolute;
    top: -20px;
    font-size: 10px;
    font-weight: 800;
    color: #64748b;
}

.chart-overlay-danger {
    position: absolute;
    top: 0; left: 0; right: 0; bottom: 0;
    background: rgba(220, 38, 38, 0.1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transition: opacity 0.3s;
    border: 2px solid var(--danger);
    border-radius: 8px;
    z-index: 10;
}

.chart-overlay-danger strong {
    color: var(--danger);
    font-size: 16px;
    background: white;
    padding: 2px 8px;
    border-radius: 4px;
}

/* DYNAMICZNY TEKST ARTYKUŁU */
.dynamic-article-content {
    padding: 0 40px 40px 40px;
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
}

.dynamic-article-content p { margin-bottom: 20px; }
.dynamic-article-content p:last-child { margin-bottom: 0; }
.dynamic-article-content a {
    color: var(--accent); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 3px; font-weight: 600;
}

.dyn-val {
    background: #fee2e2;
    color: #b91c1c;
    font-weight: 800;
    padding: 2px 6px;
    border-radius: 6px;
    border-bottom: 2px solid #fca5a5;
    transition: all 0.3s ease;
}

.dyn-val.updated { background: #fca5a5; color: #7f1d1d; }

@media (max-width: 768px) {
    .impact-header { padding: 25px 20px 10px 20px; }
    .interactive-impact-wrapper { padding: 20px; }
    .impact-grid { grid-template-columns: 1fr; gap: 20px; }
    .dynamic-article-content { padding: 0 20px 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Symulator wpływu błędów wykonawczych na OZC i wygrzewanie jastrychu",
    "description": "Narzędzie inżynierskie ilustrujące spadek współczynnika COP pompy ciepła z powodu błędów w rozstawie rur oraz symulujące procedurę wygrzewania wylewki wg normy PN-EN 1264-4.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Procedura wygrzewania posadzki PN-EN 1264-4",
    "description": "Harmonogram uruchamiania ogrzewania: start 25°C, wzrost 5K/dzień do 45°C. Skutki pominięcia: wilgotność resztkowa >1.8% CM i odspajanie okładzin.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-impact-box" id="impact-app-lock">
    
    <div class="impact-header">
        <h2>Jak to wpływa na projekt ogrzewania podłogowego?</h2>
    </div>

    <div class="interactive-impact-wrapper">
        <div class="impact-title"><span><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c9.png" alt="📉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span> Symulator Kosztów Błędów Wykonawczych</div>
        
        <div class="impact-grid">
            
            <div class="impact-card">
                <div class="card-heading">Błędy w izolacji i rozstawie</div>
                
                <div class="slider-row">
                    <div class="slider-label">Zmniejszenie grubości styropianu <span class="slider-val">-<span id="val-eps">2</span> cm</span></div>
                    <input type="range" id="sim-eps" class="impact-slider" min="0" max="5" step="1" value="2">
                </div>

                <div class="slider-row">
                    <div class="slider-label">Wzrost temp. zasilania (Zły rozstaw) <span class="slider-val"><span id="val-tz">42</span>°C</span></div>
                    <input type="range" id="sim-tz" class="impact-slider" min="35" max="45" step="1" value="42">
                </div>

                <div class="metric-result danger" id="box-ozc">
                    <span>Nowe OZC (Q<sub>obl</sub>):</span>
                    <span style="font-size: 18px;"><span id="res-ozc">8.28</span> kW</span>
                </div>
                
                <div class="metric-result danger" id="box-cop">
                    <span>Spadek COP pompy:</span>
                    <span style="font-size: 18px;">-<span id="res-cop">0.6</span></span>
                </div>
            </div>

            <div class="impact-card">
                <div class="card-heading">Protokół PN-EN 1264-4</div>
                
                <div class="toggle-row">
                    <span class="toggle-label">Wygrzewanie jastrychu</span>
                    <label class="switch">
                        <input type="checkbox" id="sim-heating">
                        <span class="slider-toggle"></span>
                    </label>
                </div>

                <div class="chart-container">
                    <div class="chart-bar" id="bar-1" style="height: 55%;"><span>25&deg;</span></div>
                    <div class="chart-bar" id="bar-2" style="height: 66%;"><span>30&deg;</span></div>
                    <div class="chart-bar" id="bar-3" style="height: 77%;"><span>35&deg;</span></div>
                    <div class="chart-bar" id="bar-4" style="height: 88%;"><span>40&deg;</span></div>
                    <div class="chart-bar" id="bar-5" style="height: 100%;"><span>45&deg;</span></div>
                    
                    <div class="chart-overlay-danger" id="chart-warning">
                        <strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/26a0.png" alt="⚠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Wilgoć &gt; 1.8% CM</strong>
                        <span style="font-size: 12px; font-weight: 700; color: #7f1d1d; margin-top: 5px;">Ryzyko odspojenia paneli</span>
                    </div>
                </div>
            </div>

        </div>
    </div>

    <div class="dynamic-article-content">
        <p>Wpływa fundamentalnie: błąd wykonawczy zmienia obliczeniowy rozstaw rur o 5 cm i podnosi temperaturę zasilania z 35°C do <span class="dyn-val" id="txt-tz">42</span><strong>°C</strong>. Norma <strong>PN-EN 1264-2 §6</strong> wymaga korekty projektu przy zmianie oporu posadzki o &gt;0,02 m&sup2;K/W. Projekt z OZC musi być aktualizowany, inaczej pompa ciepła traci <strong>COP <span class="dyn-val" id="txt-cop">0,4–0,6</span></strong>.</p>
        
        <p>Projekt to nie rysunek. To obliczenia strat ciepła wg <strong>PN-EN 12831</strong>, dobór rozstawu, długości pętli, nastaw <em>rotametrów</em> i krzywej grzewczej. Gdy wykonawca daje cieńszy styropian, rośnie Q<sub>obl</sub>. Liczysz Q<sub>obl</sub> = Q &times; <span class="dyn-val" id="txt-multi">1,15</span>. Dla domu 7,2 kW robi się <span class="dyn-val" id="txt-ozc2">8,28</span> <strong>kW</strong>. Pompa dobrana na 8 kW pracuje na <strong>100% przy -7°C</strong>.</p>
        
        <p><a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/" target="_blank" rel="noreferrer noopener">Jak rodzaj okładziny wpływa na wydajność</a> pokazuje różnicę 7K na zasilaniu między płytką a panelem. Projekt uwzględnia to w rozstawie. Bez projektu wykonawca układa wszędzie 15 cm i masz zimne sypialnie.</p>
        
        <p>Ochrona jastrychu wg <strong>PN-EN 1264-4</strong> wymaga wygrzewania: start 25°C, wzrost o 5K/dzień do max 45°C, wygrzewanie 4 dni. W 2023 roku <strong>63% wykonawców pomijało wygrzewanie</strong>. Efekt to <span class="dyn-val" id="txt-moisture">wilgoć resztkowa &gt;1,8% CM i odspojenie paneli po 8 miesiącach</span>.</p>
        
        <p>Dobry <a href="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-200-m2/" type="link" id="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-200-m2/" target="_blank" rel="noreferrer noopener">projekt ogrzewania podłogowego do 250 m2</a> kosztuje <strong>1 290–1 690 zł</strong> w 2026. Zawiera rzuty z rozstawami, tabelę pętli, nastawy i protokół próby. To jest dokument dla kierownika budowy, nie sugestia.</p>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA DOMENY ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('impact-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA SYMULATORA OZC I COP ---
    const sEps = document.getElementById('sim-eps');
    const sTz = document.getElementById('sim-tz');
    
    const vEps = document.getElementById('val-eps');
    const vTz = document.getElementById('val-tz');
    
    const resOzc = document.getElementById('res-ozc');
    const resCop = document.getElementById('res-cop');
    const boxOzc = document.getElementById('box-ozc');
    const boxCop = document.getElementById('box-cop');

    const txtTz = document.getElementById('txt-tz');
    const txtCop = document.getElementById('txt-cop');
    const txtMulti = document.getElementById('txt-multi');
    const txtOzc2 = document.getElementById('txt-ozc2');
    
    const dynamicSpans = document.querySelectorAll('.dyn-val');

    function updateOZC() {
        const epsDrop = parseInt(sEps.value);
        const tz = parseInt(sTz.value);

        vEps.textContent = epsDrop;
        vTz.textContent = tz;

        // Baza OZC: 7.2 kW
        // Mnożnik rośnie o 0.075 za każdy zabrany centymetr (2cm = 1.15 z artykułu)
        const multiplier = 1 + (epsDrop * 0.075);
        const newOzc = 7.2 * multiplier;

        // COP: Spada o ok 0.1 za każdy stopień powyżej 35C (42C = spadek ~0.7)
        const copDrop = (tz - 35) * 0.1;

        // Aktualizacja kafelków
        resOzc.textContent = newOzc.toFixed(2);
        resCop.textContent = copDrop.toFixed(1);

        if (epsDrop > 0) { boxOzc.classList.add('danger'); } else { boxOzc.classList.remove('danger'); }
        if (tz > 35) { boxCop.classList.add('danger'); } else { boxCop.classList.remove('danger'); }

        // Aktualizacja tekstu w artykule
        txtTz.textContent = tz;
        if(copDrop > 0) {
            txtCop.textContent = "0,4–" + copDrop.toFixed(1).replace('.', ',');
        } else {
            txtCop.textContent = "0 (Brak strat)";
        }
        txtMulti.textContent = multiplier.toFixed(2).replace('.', ',');
        txtOzc2.textContent = newOzc.toFixed(2).replace('.', ',');

        // Animacja
        dynamicSpans.forEach(el => {
            el.classList.remove('updated');
            void el.offsetWidth;
            el.classList.add('updated');
        });
    }

    sEps.addEventListener('input', updateOZC);
    sTz.addEventListener('input', updateOZC);

    // --- LOGIKA WYGRZEWANIA (WYKRES) ---
    const sHeating = document.getElementById('sim-heating');
    const chartWarning = document.getElementById('chart-warning');
    const bars = [
        document.getElementById('bar-1'), document.getElementById('bar-2'),
        document.getElementById('bar-3'), document.getElementById('bar-4'),
        document.getElementById('bar-5')
    ];
    const txtMoisture = document.getElementById('txt-moisture');

    function updateHeating() {
        const isHeating = sHeating.checked;

        if (isHeating) {
            // Animacja wykresu w górę (Zgodnie z normą)
            chartWarning.style.opacity = '0';
            bars[0].style.height = '55%'; bars[0].style.background = 'var(--chart-bar)';
            bars[1].style.height = '66%'; bars[1].style.background = 'var(--chart-bar)';
            bars[2].style.height = '77%'; bars[2].style.background = 'var(--chart-bar)';
            bars[3].style.height = '88%'; bars[3].style.background = 'var(--chart-bar)';
            bars[4].style.height = '100%'; bars[4].style.background = 'var(--chart-bar)';
            
            txtMoisture.textContent = "bezpieczna wilgotność <1.8% CM i trwała posadzka";
            txtMoisture.style.color = "var(--success)";
            txtMoisture.style.background = "#dcfce7";
            txtMoisture.style.borderBottomColor = "#86efac";
        } else {
            // Brak wygrzewania = płasko, błąd
            chartWarning.style.opacity = '1';
            bars.forEach(bar => {
                bar.style.height = '10%';
                bar.style.background = '#cbd5e1';
            });
            
            txtMoisture.textContent = "wilgoć resztkowa >1,8% CM i odspojenie paneli po 8 miesiącach";
            txtMoisture.style.color = "#b91c1c";
            txtMoisture.style.background = "#fee2e2";
            txtMoisture.style.borderBottomColor = "#fca5a5";
        }
    }

    sHeating.addEventListener('change', updateHeating);

    // Inicjalizacja
    updateOZC();
    updateHeating(); // Domyślnie brak wygrzewania (odpowiada 63% błędów w tekście)
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #dc2626; /* Czerwony akcent, spójny z resztą artykułu */
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #fef2f2;
    --border-color: #fca5a5;
    --faq-bg: #f8fafc;
}

.premium-faq-box {
    max-width: 850px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

.faq-header {
    padding: 35px 40px 25px 40px;
    text-align: center;
    background: var(--bg-light);
    border-bottom: 1px solid var(--border-color);
}

.faq-header h2 {
    margin: 0 0 10px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
    letter-spacing: -0.5px;
}

.faq-header p {
    margin: 0 auto;
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
    max-width: 600px;
}

/* LISTA FAQ (Akordeon) */
.faq-list {
    padding: 20px 40px 40px 40px;
    background: #ffffff;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.faq-item {
    border: 2px solid #e2e8f0;
    border-radius: 16px;
    background: var(--faq-bg);
    overflow: hidden;
    transition: all 0.3s ease;
}

.faq-item.active {
    border-color: var(--border-color);
    background: #ffffff;
    box-shadow: 0 10px 25px -5px rgba(220, 38, 38, 0.1);
}

.faq-question {
    width: 100%;
    text-align: left;
    padding: 20px 25px;
    background: transparent;
    border: none;
    font-size: 16px;
    font-weight: 800;
    color: var(--primary);
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: color 0.2s ease;
    font-family: inherit;
}

.faq-item.active .faq-question {
    color: var(--accent);
}

.faq-icon {
    flex-shrink: 0;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: #e2e8f0;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--primary);
    font-size: 18px;
    font-weight: 900;
    transition: all 0.3s ease;
}

.faq-item.active .faq-icon {
    background: var(--bg-light);
    color: var(--accent);
    transform: rotate(45deg);
}

.faq-answer {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.faq-answer-inner {
    padding: 0 25px 25px 25px;
    font-size: 15px;
    line-height: 1.8;
    color: #475569;
    border-top: 1px solid transparent;
}

.faq-item.active .faq-answer-inner {
    border-top-color: #f1f5f9;
    padding-top: 20px;
}

.faq-answer-inner strong {
    color: var(--primary);
    font-weight: 800;
}

.faq-answer-inner a {
    color: var(--accent);
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    font-weight: 600;
}

@media (max-width: 600px) {
    .faq-header { padding: 30px 20px 20px 20px; }
    .faq-list { padding: 15px 20px 30px 20px; }
    .faq-question { padding: 15px 20px; font-size: 15px; }
    .faq-answer-inner { padding: 0 20px 20px 20px; font-size: 14px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy mogę zalać jastrych bez próby ciśnieniowej?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie. Norma PN-EN 1264-4 §4.2.3 wymaga 6 bar/24h. Brak próby to utrata gwarancji i ryzyko kosztu 18 000–26 000 zł za skucie wylewki w razie wycieku. Protokół musi zostać podpisany przez kierownika budowy."
        }
      },
      {
        "@type": "Question",
        "name": "Jaki rozstaw rur przy pompie ciepła 35/30°C?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Przy płytkach ceramicznych (R=0,01) stosuje się rozstaw 15 cm w głównej strefie i 10 cm w strefie brzegowej (1 m od okna). Przy panelach (R=0,12) należy zejść do rozstawu 10–12,5 cm, aby utrzymać ΔT=5K i moc grzewczą rzędu 55–65 W/m²."
        }
      },
      {
        "@type": "Question",
        "name": "Ile pętli na salon 35m²?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Minimum 3 pętle po 75–85 m długości. Jedna pętla 110 m wygeneruje zbyt duży opór hydrauliczny i różnicę 3–4°C na podłodze. Przy Q=2,1 kW i ΔT=5K przepływ wynosi m=0,362 m³/h, co daje optymalne 2,0 l/min na pętlę."
        }
      },
      {
        "@type": "Question",
        "name": "Czy potrzebny jest projekt do podłogówki?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tak. Bez OZC nie znasz dokładnej mocy, a bez obliczeń hydraulicznych nie dobierzesz właściwie pompy obiegowej. Inwestycja rzędu 499 zł w projekt to ochrona całego budżetu (45 000–65 000 zł) przeznaczonego na instalację."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Interaktywny panel wiedzy inżynierskiej (FAQ)",
    "description": "Dynamiczny moduł edukacyjny prezentujący skrócone wytyczne normy PN-EN 1264, parametry rotametrów oraz wymogi dotyczące projektu OZC w instalacjach podłogowych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wytyczne norm i koszty błędów wykonawczych",
    "description": "Zestawienie twardych danych liczbowych z artykułu: koszty skucia posadzki (do 26 000 zł), spadek temperatury (ΔT=5K), maksymalne długości pętli oraz ceny projektów (499 zł).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="premium-faq-box" id="faq-app-lock">
    
    <div class="faq-header">
        <h2>Najczęstsze pytania (FAQ)</h2>
        <p>Krótkie, techniczne odpowiedzi na pytania, które inwestorzy i instalatorzy zadają nam od ponad dekady.</p>
    </div>

    <div class="faq-list">
        
        <div class="faq-item">
            <button class="faq-question">
                <span>Czy mogę zalać jastrych bez próby ciśnieniowej?</span>
                <span class="faq-icon">+</span>
            </button>
            <div class="faq-answer">
                <div class="faq-answer-inner">
                    <strong>Nie.</strong> Norma PN-EN 1264-4 §4.2.3 wymaga <strong>6 bar/24h</strong>. Brak próby to utrata gwarancji na rury i potężne ryzyko finansowe. Koszt skucia i odtworzenia zalanego jastrychu w domu 150m&sup2; wynosi średnio <strong>18 000–26 000 zł</strong>. Protokół z próby bezwzględnie podpisuje kierownik budowy.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span>Jaki rozstaw rur przy pompie ciepła 35/30°C?</span>
                <span class="faq-icon">+</span>
            </button>
            <div class="faq-answer">
                <div class="faq-answer-inner">
                    Przy płytkach ceramicznych (opór R=0,01) wystarczy rozstaw <strong>15 cm</strong> w głównej strefie pomieszczenia i <strong>10 cm</strong> w strefie brzegowej (do 1 m od okna). Jeśli planujesz panele (R=0,12), musisz zagęścić układ i zejść do rozstawu <strong>10–12,5 cm</strong>. Tylko to utrzyma &Delta;T=5K i odda wymaganą moc 55–65 W/m&sup2;.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span>Ile pętli ułożyć w salonie o powierzchni 35m²?</span>
                <span class="faq-icon">+</span>
            </button>
            <div class="faq-answer">
                <div class="faq-answer-inner">
                    Wymagane są <strong>minimum 3 pętle</strong> po 75–85 metrów długości każba. Jeżeli wykonawca spróbuje ułożyć jedną pętlę rzędu 110 m, odczujesz różnicę temperatur 3–4°C na samej podłodze. Przy zapotrzebowaniu Q=2,1 kW i &Delta;T=5K przepływ całkowity wynosi m=0,362 m&sup3;/h, co daje optymalne <strong>2,0 l/min na pojedynczą pętlę</strong> w rozdzielaczu.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <span>Czy potrzebny jest projekt do podłogówki?</span>
                <span class="faq-icon">+</span>
            </button>
            <div class="faq-answer">
                <div class="faq-answer-inner">
                    <strong>Tak.</strong> Bez dokładnego OZC nie znasz mocy, jakiej potrzebuje dom, a bez obliczeń hydraulicznych nie dobierzesz właściwie pompy ani nie wyregulujesz rotametrów. Na pytanie: <a href="https://projekt-ogrzewania.pl/czy-do-ogrzewania-podlogowego-potrzebny-jest-projekt/" target="_blank" rel="noreferrer noopener">czy do ogrzewania podłogowego potrzebny jest projekt</a> – najlepszą odpowiedzią jest matematyka. Inwestycja rzędu <strong>499 zł</strong> w projekt skutecznie chroni Twój budżet <strong>45 000–65 000 zł</strong>, który wydajesz na instalację.
                </div>
            </div>
        </div>

    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // --- OCHRONA DOMENY ---
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (!allowedDomains.includes(domain)) {
        const appContainer = document.getElementById('faq-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">&#x1f512;</span><p style="margin-top:0;">Treść chroniona prawem autorskim</p><p>Własność Projekt-Ogrzewania.pl</p></div>';
            return; 
        }
    }

    // --- LOGIKA AKORDEONU FAQ ---
    const faqItems = document.querySelectorAll('.faq-item');

    faqItems.forEach(item => {
        const button = item.querySelector('.faq-question');
        const answer = item.querySelector('.faq-answer');

        button.addEventListener('click', () => {
            const isActive = item.classList.contains('active');

            // Najpierw zamknij wszystkie otwarte
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.faq-answer').style.maxHeight = null;
            });

            // Jeżeli kliknięty nie był aktywny, otwórz go
            if (!isActive) {
                item.classList.add('active');
                answer.style.maxHeight = answer.scrollHeight + "px";
            }
        });
    });
});
</script>



<style>
:root {
    --sum-bg-gradient: linear-gradient(145deg, #1e293b 0%, #0f172a 100%);
    --sum-text: #f8fafc;
    --sum-accent: #dc2626; /* Czerwony akcent ostrzegawczy */
    --sum-danger: #ef4444;
    --sum-warning: #f59e0b;
    --sum-success: #10b981;
}

.premium-summary-box {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--sum-bg-gradient);
    border-radius: 24px;
    box-shadow: 0 30px 60px -15px rgba(0, 0, 0, 0.4);
    border: 1px solid #334155;
    overflow: hidden;
    color: var(--sum-text);
    position: relative;
}

/* Subtelny szum / poświata w tle */
.premium-summary-box::before {
    content: '';
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background: radial-gradient(circle, rgba(220, 38, 38, 0.05) 0%, transparent 60%);
    z-index: 0;
    pointer-events: none;
}

.summary-content {
    position: relative;
    z-index: 1;
    padding: 50px;
}

.summary-header {
    text-align: center;
    margin-bottom: 35px;
}

.summary-icon {
    font-size: 56px;
    line-height: 1;
    margin-bottom: 20px;
    display: inline-block;
    filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3));
}

.summary-header h2 {
    margin: 0 0 15px 0;
    font-size: 32px;
    font-weight: 900;
    color: #ffffff;
    letter-spacing: -0.5px;
}

.summary-text {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    text-align: center;
    max-width: 800px;
    margin: 0 auto 30px auto;
}

.summary-text strong {
    color: #ffffff;
    font-weight: 700;
}

/* WIZUALNA WAGA RYZYKA */
.risk-scale-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin: 40px 0;
}

.risk-card {
    background: rgba(255, 255, 255, 0.03);
    border: 1px solid rgba(255, 255, 255, 0.08);
    border-radius: 16px;
    padding: 30px;
    text-align: center;
    transition: transform 0.3s ease;
}

.risk-card:hover {
    transform: translateY(-5px);
    background: rgba(255, 255, 255, 0.05);
}

.risk-card.bad-choice {
    border-bottom: 4px solid var(--sum-danger);
}

.risk-card.good-choice {
    border-bottom: 4px solid var(--sum-success);
}

.risk-label {
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    font-weight: 800;
    margin-bottom: 15px;
    display: block;
}

.bad-choice .risk-label { color: #fca5a5; }
.good-choice .risk-label { color: #6ee7b7; }

.risk-value {
    font-size: 36px;
    font-weight: 900;
    color: #ffffff;
    margin-bottom: 10px;
    display: block;
}

.risk-desc {
    font-size: 14px;
    color: #94a3b8;
    line-height: 1.5;
    margin: 0;
}

/* CTA BUTTONS */
.summary-actions {
    display: flex;
    justify-content: center;
    gap: 20px;
    margin-top: 40px;
    flex-wrap: wrap;
}

.sum-btn {
    padding: 16px 32px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    text-decoration: none;
    transition: all 0.3s ease;
    display: inline-flex;
    align-items: center;
    gap: 10px;
}

.sum-btn-primary {
    background: var(--sum-accent);
    color: #ffffff !important;
    box-shadow: 0 10px 20px -5px rgba(220, 38, 38, 0.5);
    border: 1px solid #f87171;
}

.sum-btn-primary:hover {
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(220, 38, 38, 0.6);
    background: #b91c1c;
}

@media (max-width: 768px) {
    .summary-content { padding: 40px 25px; }
    .risk-scale-grid { grid-template-columns: 1fr; gap: 15px; }
    .summary-actions { flex-direction: column; width: 100%; gap: 15px; }
    .sum-btn { justify-content: center; width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Podsumowanie: Błędy na budowie kosztują więcej niż projekt",
    "abstract": "Brak próby ciśnieniowej, ignorowanie normy PN-EN 1264 i układanie pętli powyżej 100 m to najdroższe błędy wykonawcze. Pozorna oszczędność na projekcie OZC regularnie kończy się wielotysięcznymi stratami po wylaniu jastrychu.",
    "license": "https://projekt-ogrzewania.pl/",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Analiza ryzyka błędów wykonawczych w podłogówce",
    "description": "Zestawienie porównawcze: oszczędność na projekcie i procedurach (499 zł) versus koszty naprawy skutków takich jak wycieki czy pęknięcia jastrychu (do 26 000 zł).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-summary-box" id="summary-app-lock">
    <div class="summary-content">
        
        <div class="summary-header">
            <span class="summary-icon"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3d7.png" alt="🏗" class="wp-smiley" style="height: 1em; max-height: 1em;" /></span>
            <h2>Podsumowanie: Beton nie wybacza pośpiechu</h2>
        </div>

        <p class="summary-text">
            Ogrzewanie podłogowe to system naczyń połączonych, gdzie fizyka nie uznaje kompromisów. Każde odchylenie od wyliczeń OZC – cieńszy styropian, pętla o długości 140 m zamiast 90 m czy rezygnacja z dylatacji – to problem, który <strong>zostanie zalany betonem i uderzy w Twój portfel podczas pierwszych mrozów.</strong> Projekt to nie tylko kartka papieru, to Twoja polisa ubezpieczeniowa na instalację wartą kilkadziesiąt tysięcy złotych.
        </p>

        <div class="risk-scale-grid">
            <div class="risk-card bad-choice">
                <span class="risk-label">Fałszywa Oszczędność</span>
                <span class="risk-value">499 zł</span>
                <p class="risk-desc">Tyle rzekomo zaoszczędzisz ignorując obliczenia OZC i projekt. Kończy się to wylewaniem jastrychu bez próby ciśnieniowej i ryzykiem skucia podłogi, co kosztuje średnio <strong>od 18 000 do 26 000 zł</strong>.</p>
            </div>
            <div class="risk-card good-choice">
                <span class="risk-label">Ochrona Budżetu</span>
                <span class="risk-value">65 000 zł</span>
                <p class="risk-desc">Tyle wynosi budżet na całą instalację, który skutecznie <strong>chronisz, egzekwując od wykonawcy zgodność z projektem</strong>, normą PN-EN 1264 i protokołem z 45-minutowej próby szczelności.</p>
            </div>
        </div>

        <p class="summary-text">
            Traktuj powyższe punkty jako twardą <strong>listę kontrolną dla kierownika budowy i ekipy wylewkowej</strong>. Zanim wjedzie pompa z jastrychem, instalacja musi być pod ciśnieniem 6 bar, taśmy brzegowe muszą być na swoim miejscu, a każdy rotametr wyregulowany ściśle według tabeli z projektu.
        </p>

        <div class="summary-actions">
            <a href="https://projekt-ogrzewania.pl/blog/" class="sum-btn sum-btn-primary">
                <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4d6.png" alt="📖" class="wp-smiley" style="height: 1em; max-height: 1em;" /> CZYTAJ WIĘCEJ PORADNIKÓW NA BLOGU
            </a>
        </div>

    </div>

    <noscript>
        <div style="padding: 30px; background: #0f172a; border-top: 1px solid #334155; font-family: sans-serif; color: #cbd5e1;">
            <h3 style="color: #ffffff; margin-top: 0;">Analiza ryzyka błędów instalacyjnych</h3>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left; margin-bottom: 20px;">
                <thead>
                    <tr style="border-bottom: 2px solid #334155;">
                        <th style="padding: 10px 0; color: #94a3b8;">Błąd na budowie</th>
                        <th style="padding: 10px 0; color: #94a3b8;">Pozorna oszczędność</th>
                        <th style="padding: 10px 0; color: #94a3b8;">Realne koszty usunięcia awarii</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #1e293b;">
                        <td style="padding: 10px 0; font-weight: bold;">Brak próby ciśnieniowej</td>
                        <td style="padding: 10px 0; color: #ef4444;">45 minut pracy ekipy</td>
                        <td style="padding: 10px 0;">23 400 PLN (skucie i odtworzenie 42m²)</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #1e293b;">
                        <td style="padding: 10px 0; font-weight: bold;">Brak projektu (OZC)</td>
                        <td style="padding: 10px 0; color: #ef4444;">~499 PLN</td>
                        <td style="padding: 10px 0;">Zimne strefy, wysokie koszty eksploatacji (spadek COP)</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Brak dylatacji brzegowej</td>
                        <td style="padding: 10px 0; color: #ef4444;">~3 PLN / mb taśmy</td>
                        <td style="padding: 10px 0;">4 600 PLN (frezowanie, żywicowanie pęknięć)</td>
                    </tr>
                </tbody>
            </table>
            <p style="font-size: 13px; line-height: 1.6;">
                Samodzielne wprowadzanie zmian na etapie montażu to zadanie inżynierskie. Błędy hydrauliczne (za długie pętle) i konstrukcyjne (zbyt cienki styropian wg WT2021) stają się nieodwracalne po wylaniu betonu.
            </p>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('summary-app-lock');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; display: block; margin-bottom: 15px;">&#x1f512;</span><div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px;">Treść chroniona</div><p>Ten moduł jest własnością Projekt-Ogrzewania.pl</p></div>';
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/">Najczęstsze błędy na budowie, które psują nawet najlepszy projekt ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/najczestsze-bledy-na-budowie-ktore-psuja-nawet-najlepszy-projekt-ogrzewania-podlogowego/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
