<?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 Budowa i remont - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/category/budowa-i-remont/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/category/budowa-i-remont/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Sun, 14 Jun 2026 18:36:48 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa Budowa i remont - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/category/budowa-i-remont/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Ogrzewanie podłogowe wodne bez wylewki.</title>
		<link>https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-wodne-bez-wylewki/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 10:24:49 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Domy drewniane]]></category>
		<category><![CDATA[Domy szkieletowe]]></category>
		<category><![CDATA[Niskotemperaturowe systemy grzewcze]]></category>
		<category><![CDATA[Nowoczesne systemy grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Porady dla domu]]></category>
		<category><![CDATA[Porady dla inwestorów]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Porady remontowe]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Remont]]></category>
		<category><![CDATA[Remont domu]]></category>
		<category><![CDATA[Remont i modernizacja]]></category>
		<category><![CDATA[Systemy grzewcze]]></category>
		<category><![CDATA[koszty systemu suchego]]></category>
		<category><![CDATA[lamele aluminiowe]]></category>
		<category><![CDATA[lekka podłogówka]]></category>
		<category><![CDATA[ogrzewanie podłogowe wodne bez wylewki]]></category>
		<category><![CDATA[ogrzewanie w domu szkieletowym]]></category>
		<category><![CDATA[ogrzewanie w kamienicy]]></category>
		<category><![CDATA[płyty eps z wypustkami]]></category>
		<category><![CDATA[podłogówka na sucho]]></category>
		<category><![CDATA[projektowanie podłogówki]]></category>
		<category><![CDATA[remont starego domu]]></category>
		<category><![CDATA[suchy jastrych]]></category>
		<category><![CDATA[system suchy]]></category>
		<category><![CDATA[test szczelności instalacji]]></category>
		<category><![CDATA[układanie podłogówki]]></category>
		<category><![CDATA[wady ogrzewania bez wylewki]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4218</guid>

					<description><![CDATA[<p>Zastanawiasz się nad montażem popularnej podłogówki, ale Twój drewniany strop w starej kamienicy po prostu nie wytrzyma ciężaru kilkutonowej warstwy betonu? A może budujesz nowoczesny dom szkieletowy i zależy Ci na błyskawicznym czasie realizacji bez wprowadzania do wnętrza wilgoci technologicznej? Odpowiedzią na te problemy jest ogrzewanie podłogowe wodne bez wylewki, znane powszechnie jako system suchy. To zaawansowane rozwiązanie inżynieryjne, które zamiast ciężkiego jastrychu wykorzystuje lekkie płyty izolacyjne oraz precyzyjne lamele aluminiowe. W naszym kompletnym przewodniku rozkładamy tę technologię na czynniki pierwsze. Obalamy szkodliwe mity, tłumaczymy jak prawidłowo zaplanować moc grzewczą, by uniknąć niedogrzania, oraz wskazujemy krytyczne pułapki montażowe. Dowiedz się, kiedy rezygnacja z betonu to jedyna słuszna decyzja i o co zapytać instalatora przed rozpoczęciem prac.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-wodne-bez-wylewki/">Ogrzewanie podłogowe wodne bez wylewki.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.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(37,99,235,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: #eff6ff;
    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 #bfdbfe;
}

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

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

.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(37, 99, 235, 0.1);
}

.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>

<div class="premium-hero-box" id="hero-app-container">
    <div class="hero-content">
        
        <div class="hero-badge">
            <span>📚</span> Kompletny Przewodnik
        </div>
        
        <p class="hero-text"><strong>Ogrzewanie podłogowe wodne bez wylewki</strong> to rozwiązanie, które w ostatnich latach zyskuje ogromną popularność wśród inwestorów indywidualnych, właścicieli starych kamienic oraz wszystkich tych, którzy chcą cieszyć się komfortem ciepłej podłogi bez konieczności wylewania ton betonu.</p>
        
        <p class="hero-text">W przeciwieństwie do tradycyjnej podłogówki, gdzie rury są zalewane grubą warstwą jastrychu, system suchy opiera się na prefabrykowanych płytach izolacyjnych i aluminiowych elementach przewodzących ciepło. W tym obszernym, technicznym opracowaniu przeprowadzę Cię krok po kroku przez wszystkie aspekty tej technologii.</p>

        <div class="hero-modules-title">Czego dowiesz się z tego opracowania?</div>
        
        <div class="hero-grid">
            <div class="hero-card">
                <span class="hero-card-icon">🔍</span>
                <span class="hero-card-title">Zasada działania i anatomia</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">🧮</span>
                <span class="hero-card-title">Wyliczenia mocy grzewczej</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">🛠️</span>
                <span class="hero-card-title">Praktyczne porady montażowe</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">📈</span>
                <span class="hero-card-title">Analiza opłacalności (ROI)</span>
            </div>
        </div>

    </div>
</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)) {
        document.getElementById('hero-app-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;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; 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: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-anatomy-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);
}

.anatomy-header {
    padding: 40px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    border-bottom: 1px solid var(--border-color);
}

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

.anatomy-header p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    margin-bottom: 15px;
}

.anatomy-header p:last-child {
    margin-bottom: 0;
}

.anatomy-header a {
    color: var(--accent);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: #bfdbfe;
    text-underline-offset: 3px;
}

.anatomy-workspace {
    display: flex;
    min-height: 500px;
}

/* LEWA STRONA - STOS WARSTW (PRZEKRÓJ) */
.anatomy-layers {
    width: 40%;
    background: #ffffff;
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    justify-content: center;
    padding: 30px;
    gap: 12px;
}

.layer-btn {
    position: relative;
    width: 100%;
    padding: 18px 20px;
    border-radius: 12px;
    border: 2px solid var(--border-color);
    background: #ffffff;
    cursor: pointer;
    text-align: left;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    gap: 15px;
    overflow: hidden;
}

.layer-btn::before {
    content: '';
    position: absolute;
    left: 0; top: 0; height: 100%; width: 6px;
    background: #cbd5e1;
    transition: all 0.3s;
}

/* Kolory poszczególnych warstw */
.layer-btn[data-layer="finish"]::before { background: #b45309; } /* Drewno/Płytka */
.layer-btn[data-layer="pipe"]::before { background: var(--danger); } /* Rura PEX */
.layer-btn[data-layer="lamella"]::before { background: #94a3b8; } /* Aluminium */
.layer-btn[data-layer="eps"]::before { background: #38bdf8; } /* Styropian EPS */

.layer-btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 10px 15px -3px rgba(0,0,0,0.05);
    border-color: #cbd5e1;
}

.layer-btn.active {
    border-color: var(--accent);
    background: #eff6ff;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.15);
}

.layer-btn.active::before {
    background: var(--accent);
    width: 8px;
}

.layer-icon {
    font-size: 24px;
    filter: grayscale(0.2);
    transition: transform 0.3s;
}

.layer-btn.active .layer-icon {
    transform: scale(1.2);
    filter: grayscale(0);
}

.layer-title {
    font-family: 'Inter', sans-serif;
    font-size: 14px;
    font-weight: 800;
    color: var(--primary);
    line-height: 1.3;
}

.layer-subtitle {
    display: block;
    font-size: 11px;
    font-weight: 600;
    color: #64748b;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-top: 4px;
}

/* PRAWA STRONA - SZCZEGÓŁY WARSTWY */
.anatomy-details {
    width: 60%;
    background: var(--bg-light);
    padding: 40px;
    position: relative;
}

.detail-pane {
    display: none;
    animation: fadeInSlide 0.4s ease-out forwards;
}

.detail-pane.active {
    display: block;
}

.detail-pane h4 {
    margin: 0 0 20px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
    display: flex;
    align-items: center;
    gap: 12px;
}

.detail-pane p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    margin-bottom: 15px;
}

.detail-pane ul {
    margin: 0 0 20px 0;
    padding-left: 20px;
}

.detail-pane li {
    font-size: 15px;
    line-height: 1.6;
    color: #475569;
    margin-bottom: 10px;
}

.detail-pane strong {
    color: var(--primary);
}

.detail-pane a {
    color: var(--accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bfdbfe;
    transition: all 0.2s;
}

.detail-pane a:hover {
    background: #eff6ff;
    border-bottom-color: var(--accent);
}

.highlight-box {
    background: #ffffff;
    border-left: 4px solid var(--warning);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--primary);
    box-shadow: 0 2px 5px rgba(0,0,0,0.02);
    margin-top: 20px;
    line-height: 1.6;
}

@keyframes fadeInSlide {
    from { opacity: 0; transform: translateX(10px); }
    to { opacity: 1; transform: translateX(0); }
}

@media (max-width: 768px) {
    .anatomy-header { padding: 30px 20px; }
    /* Zmiana flex-direction: column-reverse na column */
    .anatomy-workspace { flex-direction: column; min-height: auto; }
    
    .anatomy-layers {
        width: 100%;
        border-right: none;
        border-bottom: 1px solid var(--border-color); /* Zmiana border-top na border-bottom */
        padding: 20px;
    }
    
    .anatomy-details {
        width: 100%;
        padding: 30px 20px;
    }
}
</style>

<div class="premium-anatomy-box" id="anatomy-app-container">
    
    <div class="anatomy-header">
        <h2>Czym dokładnie jest ogrzewanie bez wylewki?</h2>
        <p>W klasycznym ujęciu ogrzewanie płaszczyznowe kojarzy się z betonem. Rury układane są na izolacji, a następnie zalewane jastrychem o grubości od 6 do 10 cm. Ta masa betonu pełni trzy funkcje: akumuluje ciepło, rozprowadza je równomiernie po powierzchni oraz stabilizuje mechanicznie instalację. Problem pojawia się, gdy strop nie jest w stanie udźwignąć dodatkowych 150–200 kg/m² lub gdy nie mamy czasu na 28 dni schnięcia.</p>
        <p>System ogrzewania wodnego bez wylewki (nazywany fachowo <a href="https://projekt-ogrzewania.pl/czym-jest-system-suchy-w-wodnym-ogrzewaniu-podlogowym/">systemem suchym</a>) eliminuje mokre procesy budowlane. Zamiast betonu wykorzystuje precyzyjne warstwy, które możesz zbadać poniżej.</p>
    </div>

    <div class="anatomy-workspace">
        
        <div class="anatomy-layers">
            <span style="font-size: 11px; font-weight: 800; color: #94a3b8; text-transform: uppercase; letter-spacing: 1px; text-align: center; margin-bottom: 5px;">Przekrój podłogi (kliknij)</span>
            
            <button class="layer-btn active" data-target="pane-finish" data-layer="finish">
                <span class="layer-icon">🪵</span>
                <div>
                    <div class="layer-title">Warstwa wykończeniowa</div>
                    <span class="layer-subtitle">Panele / Płytki + Podkład</span>
                </div>
            </button>
            
            <button class="layer-btn" data-target="pane-pipe" data-layer="pipe">
                <span class="layer-icon">🔴</span>
                <div>
                    <div class="layer-title">Rury grzewcze</div>
                    <span class="layer-subtitle">PEX / PE-RT 14-16 mm</span>
                </div>
            </button>
            
            <button class="layer-btn" data-target="pane-lamella" data-layer="lamella">
                <span class="layer-icon">🛡️</span>
                <div>
                    <div class="layer-title">Lamele aluminiowe</div>
                    <span class="layer-subtitle">Serce systemu suchego</span>
                </div>
            </button>
            
            <button class="layer-btn" data-target="pane-eps" data-layer="eps">
                <span class="layer-icon">🧊</span>
                <div>
                    <div class="layer-title">Płyty systemowe</div>
                    <span class="layer-subtitle">EPS 200 / Gipsowo-włóknowe</span>
                </div>
            </button>
        </div>

        <div class="anatomy-details">
            
            <div class="detail-pane active" id="pane-finish">
                <h4>Warstwa wykończeniowa</h4>
                <p>W odróżnieniu od wylewki, gdzie płytki kleimy bezpośrednio do betonu, w systemie suchym konieczne jest stworzenie sztywnej, pływającej posadzki:</p>
                <ul>
                    <li><strong>Pod panele laminowane lub winylowe LVT:</strong> Kładzie się bezpośrednio na płyty systemowe z rurami specjalną perforowaną matę podkładową o bardzo niskim <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%25c2%25b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">oporze cieplnym</a> (R ≤ 0,05 m²K/W). Użycie zwykłej pianki zablokuje ciepło!</li>
                    <li><strong>Pod płytki ceramiczne i kamień:</strong> Wymagane jest zastosowanie płyt suchego jastrychu (np. gipsowo-włóknowych) o grubości min. 10–12,5 mm, układanych dwuwarstwowo. Dopiero na to nakłada się elastyczny klej i płytki.</li>
                </ul>
            </div>

            <div class="detail-pane" id="pane-pipe">
                <h4>Rury grzewcze</h4>
                <p>W systemach suchych dominują rury o mniejszej średnicy niż w klasycznej wylewce betonowej.</p>
                <p><strong>Standard:</strong> PEX lub PE-RT o średnicy 14 mm lub 16 mm.</p>
                <div class="highlight-box" style="border-left-color: var(--accent);">
                    <strong>Dlaczego mniejsze?</strong> Mniejsza średnica rury pozwala na zmniejszenie grubości całej płyty systemowej i łatwiejsze formowanie łuków w wyfrezowanych kanałach. Ponadto, mniejsza ilość wody w instalacji znacznie przyspiesza reakcję układu na zmiany ustawień termostatu.
                </div>
            </div>

            <div class="detail-pane" id="pane-lamella">
                <h4>Lamele aluminiowe</h4>
                <p>To najważniejszy element odróżniający profesjonalny system suchy od amatorskiej próby włożenia rury w zwykły styropian. <strong>Bez <a href="https://projekt-ogrzewania.pl/produkt/lamel-grzejny-metalowy/">lameli</a> system nie działa!</strong></p>
                <ul>
                    <li><strong>Funkcja:</strong> Aluminium (λ ≈ 200 W/mK) przejmuje ciepło punktowe z rurki i rozprowadza je na boki na szerokość kilkunastu centymetrów.</li>
                    <li><strong>Budowa:</strong> Są to cienkie (0,4–0,6 mm) blachy w kształcie litery omega (Ω), w które na ścisk zatrzaskuje się rurę grzewczą.</li>
                </ul>
                <div class="highlight-box">
                    <strong>Efekt:</strong> Eliminujemy tzw. efekt zebry termicznej. Gdyby rura leżała pod panelami bez aluminium, stopa czułaby naprzemiennie gorące i zimne paski. Lamele wyrównują temperaturę do różnicy mniejszej niż 2°C na całej płycie.
                </div>
            </div>

            <div class="detail-pane" id="pane-eps">
                <h4>Płyty systemowe (Szkielet)</h4>
                <p>Podstawą całego układu, na której opiera się ciężar, są płyty systemowe. Wykonuje się je z dwóch materiałów:</p>
                <ul>
                    <li><strong>Twardy styropian EPS:</strong> Najczęściej o podwyższonej gęstości, np. <a href="https://projekt-ogrzewania.pl/produkt/plyta-styropianowa-eps-200-z-wypustkami/">EPS 200</a> lub EPS T. Mają grubość od 25 do 50 mm, z fabrycznie wyfrezowanymi kanałami na rury (rozstaw 15 cm lub 30 cm).</li>
                    <li><strong>Płyty gipsowo-włóknowe:</strong> Rozwiązanie droższe, ale oferujące wyższą wytrzymałość punktową i izolacyjność akustyczną.</li>
                </ul>
                <div class="highlight-box" style="border-left-color: var(--danger);">
                    <strong>Uwaga:</strong> Zastosowanie zwykłego styropianu o zbyt niskiej gęstości grozi jego ugięciem pod ciężarem mebli i trwałym „klawiszowaniem” (zapadaniem się) podłogi.
                </div>
            </div>

        </div>
    </div>
</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)) {
        document.getElementById('anatomy-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Narzędzie chronione prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten wizualizator 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>
        `;
        return; 
    }

    // LOGIKA ZAKŁADEK (WARSTW)
    const layerBtns = document.querySelectorAll('.layer-btn');
    const panes = document.querySelectorAll('.detail-pane');

    layerBtns.forEach(button => {
        button.addEventListener('click', () => {
            // Reset active states
            layerBtns.forEach(btn => btn.classList.remove('active'));
            panes.forEach(pane => pane.classList.remove('active'));
            
            // Set active state on clicked element
            button.classList.add('active');
            
            // Show corresponding pane
            const targetId = button.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
    --wet-color: #64748b;
}

.premium-advantages-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);
}

.adv-header {
    padding: 40px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    border-bottom: 1px solid var(--border-color);
    text-align: center;
}

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

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

/* PRZEŁĄCZNIK TECHNOLOGII */
.toggle-wrapper {
    display: inline-flex;
    align-items: center;
    background: #ffffff;
    padding: 10px 20px;
    border-radius: 100px;
    border: 1px solid var(--border-color);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    gap: 15px;
}

.toggle-label {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: #94a3b8;
    transition: color 0.3s;
    cursor: pointer;
}

.toggle-label.active-wet { color: var(--wet-color); }
.toggle-label.active-dry { color: var(--accent); }

.switch {
    position: relative;
    display: inline-block;
    width: 60px;
    height: 34px;
}

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

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

.slider:before {
    position: absolute;
    content: "";
    height: 26px;
    width: 26px;
    left: 4px;
    bottom: 4px;
    background-color: white;
    transition: .4s;
    border-radius: 50%;
    box-shadow: 0 2px 4px rgba(0,0,0,0.2);
}

input:checked + .slider { background-color: var(--accent); }
input:checked + .slider:before { transform: translateX(26px); }

/* KARTY KORZYŚCI */
.adv-grid {
    padding: 40px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 25px;
    background: #ffffff;
}

.adv-card {
    padding: 30px;
    border-radius: 20px;
    border: 2px solid var(--border-color);
    transition: all 0.4s ease;
    position: relative;
    overflow: hidden;
}

.adv-card::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 6px; height: 100%;
    background: var(--wet-color);
    transition: background 0.4s;
}

.adv-card.is-dry {
    border-color: #bfdbfe;
    background: #f8fafc;
    box-shadow: 0 10px 25px -5px rgba(37, 99, 235, 0.05);
}

.adv-card.is-dry::before { background: var(--accent); }

.card-icon {
    font-size: 28px;
    margin-bottom: 15px;
    display: inline-block;
}

.card-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: #64748b;
    margin-bottom: 10px;
}

.card-value {
    font-size: 36px;
    font-weight: 900;
    color: var(--primary);
    margin-bottom: 15px;
    line-height: 1.1;
    transition: color 0.4s;
}

.adv-card.is-dry .card-value { color: var(--accent); }

.card-desc {
    font-size: 14px;
    line-height: 1.6;
    color: #475569;
    margin: 0;
    min-height: 80px;
}

.card-desc strong { color: var(--primary); }

.example-box {
    margin-top: 15px;
    padding: 12px 15px;
    background: #ffffff;
    border-radius: 12px;
    font-size: 13px;
    border: 1px solid #e2e8f0;
    display: none;
}

.adv-card.is-dry .example-box {
    display: block;
    animation: fadeIn 0.5s;
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(5px); }
    to { opacity: 1; transform: translateY(0); }
}

@media (max-width: 768px) {
    .adv-header { padding: 30px 20px; }
    .adv-header h3 { font-size: 24px; }
    .adv-grid { grid-template-columns: 1fr; padding: 25px 20px; gap: 20px; }
    .toggle-wrapper { flex-direction: column; gap: 10px; border-radius: 20px; padding: 15px; }
    .card-desc { min-height: auto; }
}
</style>

<div class="premium-advantages-box" id="advantages-app-container">
    
    <div class="adv-header">
        <h3>Kluczowe zalety systemu suchego</h3>
        <p>Decyzja o wyborze podłogówki bez wylewki rzadko wynika z kaprysu. Najczęściej podyktowana jest konkretnymi ograniczeniami budowlanymi. Przełącz technologię poniżej, aby zobaczyć kolosalną różnicę w parametrach.</p>
        
        <div class="toggle-wrapper">
            <span class="toggle-label" id="lbl-wet" onclick="document.getElementById('sys-toggle').click()">System Mokry</span>
            <label class="switch">
                <input type="checkbox" id="sys-toggle" checked>
                <span class="slider"></span>
            </label>
            <span class="toggle-label active-dry" id="lbl-dry" onclick="document.getElementById('sys-toggle').click()">System Suchy</span>
        </div>
    </div>

    <div class="adv-grid">
        
        <div class="adv-card is-dry" id="card-weight">
            <div class="card-icon">⚖️</div>
            <div class="card-title">Obciążenie stropu</div>
            <div class="card-value" id="val-weight">22–35 kg/m²</div>
            <p class="card-desc" id="desc-weight">Absolutny priorytet w starym budownictwie. Konstrukcja oparta na styropianie, lamelach i suchym jastrychu waży zaledwie ułamek tego, co beton.</p>
            <div class="example-box" id="ex-weight">
                <strong>Przykład:</strong> Mieszkanie 50m² (strop drewniany). System suchy to ok. 1,2 tony. Tradycyjna wylewka dodałaby aż <strong>7,5 tony</strong> – to ryzyko katastrofy budowlanej!
            </div>
        </div>

        <div class="adv-card is-dry" id="card-height">
            <div class="card-icon">📏</div>
            <div class="card-title">Całkowita wysokość zabudowy</div>
            <div class="card-value" id="val-height">od 30 mm</div>
            <p class="card-desc" id="desc-height">Idealne rozwiązanie do domów z niskim sufitem lub przy modernizacji, gdzie podłoga np. w przedpokoju jest już na stałym poziomie.</p>
            <div class="example-box" id="ex-height">
                <strong>Bez schodków:</strong> (płyta 20 mm + mata 2 mm + panel 8 mm). Pozwala uniknąć budowy nieestetycznych podestów i docinania drzwi.
            </div>
        </div>

        <div class="adv-card is-dry" id="card-time">
            <div class="card-icon">⏳</div>
            <div class="card-title">Procesy mokre i schnięcie</div>
            <div class="card-value" id="val-time">0 dni</div>
            <p class="card-desc" id="desc-time">Ogromna przewaga logistyczna. Układamy rury, zamykamy suchym jastrychem i <strong>od razu</strong> możemy układać płytki lub panele.</p>
            <div class="example-box" id="ex-time">
                <strong>Szybki efekt:</strong> Wieczorem tego samego dnia można wnieść meble. Brak wilgoci technologicznej opóźniającej prace malarskie.
            </div>
        </div>

        <div class="adv-card is-dry" id="card-response">
            <div class="card-icon">🚀</div>
            <div class="card-title">Czas nagrzewania układu</div>
            <div class="card-value" id="val-response">20–40 min</div>
            <p class="card-desc" id="desc-response">Dzięki niskiej akumulacyjności, system natychmiast reaguje na zmiany ustawień termostatu lub zyski ciepła od słońca przez okna.</p>
            <div class="example-box" id="ex-response">
                <strong>Oszczędność:</strong> Szybka reakcja przekłada się na niższe zużycie energii w okresach przejściowych (wiosna/jesień) i brak przegrzewania pokoi.
            </div>
        </div>

    </div>
</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)) {
        document.getElementById('advantages-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Narzędzie chronione prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten interaktywny widget 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>
        `;
        return; 
    }

    // LOGIKA PRZEŁĄCZNIKA
    const toggle = document.getElementById('sys-toggle');
    const lblWet = document.getElementById('lbl-wet');
    const lblDry = document.getElementById('lbl-dry');
    
    const cards = [
        document.getElementById('card-weight'),
        document.getElementById('card-height'),
        document.getElementById('card-time'),
        document.getElementById('card-response')
    ];

    // Dane do podmiany
    const data = {
        dry: {
            weight: "22–35 kg/m²", descWeight: "Absolutny priorytet w starym budownictwie. Konstrukcja oparta na styropianie, lamelach i suchym jastrychu waży zaledwie ułamek tego, co beton.",
            height: "od 30 mm", descHeight: "Idealne rozwiązanie do domów z niskim sufitem lub przy modernizacji, gdzie podłoga np. w przedpokoju jest już na stałym poziomie.",
            time: "0 dni", descTime: "Ogromna przewaga logistyczna. Układamy rury, zamykamy suchym jastrychem i <strong>od razu</strong> możemy układać płytki lub panele.",
            response: "20–40 min", descResponse: "Dzięki niskiej akumulacyjności, system natychmiast reaguje na zmiany ustawień termostatu lub zyski ciepła od słońca przez okna."
        },
        wet: {
            weight: "120–180 kg/m²", descWeight: "Ogromna masa wylewki cementowej (ok. 6 cm) i płytek. Wymaga solidnych stropów żelbetowych projektowanych na duże obciążenia.",
            height: "ok. 80 mm", descHeight: "Klasyczna wysokość zabudowy (izolacja + wylewka). Często wymusza podnoszenie drzwi, tworzenie podestów lub schodków do innych pomieszczeń.",
            time: "8 tygodni", descTime: "Wymaga długiego sezonowania. Zgodnie z normą: 1 tydzień na każdy z pierwszych 4 cm, a 2 tygodnie na każdy kolejny. Hamuje to dalsze prace wykończeniowe.",
            response: "4–6 godzin", descResponse: "Beton ma ogromną bezwładność cieplną. System nagrzewa się godzinami, a po wyłączeniu dalej długo oddaje ciepło (ryzyko przegrzewania)."
        }
    };

    function updateCards(isDry) {
        if(isDry) {
            lblDry.classList.add('active-dry');
            lblWet.classList.remove('active-wet');
            
            cards.forEach(c => c.classList.add('is-dry'));
            
            document.getElementById('val-weight').innerText = data.dry.weight;
            document.getElementById('desc-weight').innerHTML = data.dry.descWeight;
            
            document.getElementById('val-height').innerText = data.dry.height;
            document.getElementById('desc-height').innerHTML = data.dry.descHeight;
            
            document.getElementById('val-time').innerText = data.dry.time;
            document.getElementById('desc-time').innerHTML = data.dry.descTime;
            
            document.getElementById('val-response').innerText = data.dry.response;
            document.getElementById('desc-response').innerHTML = data.dry.descResponse;
            
        } else {
            lblDry.classList.remove('active-dry');
            lblWet.classList.add('active-wet');
            
            cards.forEach(c => c.classList.remove('is-dry'));
            
            document.getElementById('val-weight').innerText = data.wet.weight;
            document.getElementById('desc-weight').innerHTML = data.wet.descWeight;
            
            document.getElementById('val-height').innerText = data.wet.height;
            document.getElementById('desc-height').innerHTML = data.wet.descHeight;
            
            document.getElementById('val-time').innerText = data.wet.time;
            document.getElementById('desc-time').innerHTML = data.wet.descTime;
            
            document.getElementById('val-response').innerText = data.wet.response;
            document.getElementById('desc-response').innerHTML = data.wet.descResponse;
        }
    }

    toggle.addEventListener('change', function() {
        updateCards(this.checked);
    });

});
</script>



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

.premium-limitations-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);
}

.limits-header {
    padding: 35px 40px;
    background: linear-gradient(to bottom, #ffffff, #fef2f2);
    border-bottom: 1px solid var(--border-color);
    text-align: center;
}

.limits-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--danger);
}

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

.limits-workspace {
    display: flex;
    min-height: 400px;
}

/* LEWA STRONA - MENU ZAGROŻEŃ */
.limits-menu {
    width: 38%;
    background: #ffffff;
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    padding: 20px 0;
}

.limit-btn {
    padding: 20px 25px;
    background: transparent;
    border: none;
    border-left: 4px solid transparent;
    text-align: left;
    font-family: 'Inter', sans-serif;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    gap: 12px;
}

.limit-btn:hover {
    background: #f8fafc;
    color: var(--primary);
}

.limit-btn.active {
    background: #fef2f2;
    border-left-color: var(--danger);
    color: var(--danger);
}

.limit-icon {
    font-size: 20px;
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f1f5f9;
    border-radius: 8px;
    transition: all 0.3s;
}

.limit-btn.active .limit-icon {
    background: #fecaca;
    color: #991b1b;
}

/* PRAWA STRONA - TREŚĆ */
.limits-content-area {
    width: 62%;
    background: var(--bg-light);
    position: relative;
    padding: 35px 40px;
}

.limit-pane {
    display: none;
    animation: fadeSlideUp 0.3s ease-out forwards;
}

.limit-pane.active { display: block; }

.limit-pane h4 {
    margin: 0 0 15px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

.limit-pane p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    margin-bottom: 20px;
}

/* Wizualizacja kosztów (Bar chart CSS) */
.cost-compare {
    margin: 25px 0;
}

.cost-row { margin-bottom: 15px; }
.cost-label { display: flex; justify-content: space-between; font-size: 13px; font-weight: 700; color: var(--primary); margin-bottom: 6px; }
.cost-label span.price { color: #64748b; }
.cost-bar-bg { width: 100%; background: #e2e8f0; border-radius: 6px; height: 18px; overflow: hidden; }
.cost-bar-fill { height: 100%; background: var(--accent); border-radius: 6px; }
.fill-wet { width: 45%; background: #94a3b8; }
.fill-dry { width: 100%; background: var(--warning); }

/* Boks informacyjny */
.info-box {
    background: #ffffff;
    border-left: 4px solid var(--accent);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    font-size: 14px;
    line-height: 1.6;
    color: #475569;
    margin-top: 20px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.info-box.critical {
    border-left-color: var(--danger);
    background: #fef2f2;
}

.info-box.critical strong { color: var(--danger); }

/* Lista konsekwencji */
.consequences-list {
    list-style: none;
    padding: 0;
    margin: 0 0 20px 0;
}

.consequences-list li {
    position: relative;
    padding-left: 28px;
    margin-bottom: 12px;
    font-size: 14px;
    font-weight: 600;
    color: #334155;
    line-height: 1.5;
}

.consequences-list li::before {
    content: "❌";
    position: absolute;
    left: 0;
    top: 0;
    font-size: 14px;
}

@keyframes fadeSlideUp {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

/* MOBILE */
@media (max-width: 768px) {
    .limits-header { padding: 25px 20px; }
    .limits-workspace { flex-direction: column; min-height: auto; }
    
    .limits-menu {
        width: 100%;
        border-right: none;
        border-bottom: 1px solid var(--border-color);
        padding: 10px;
    }
    
    .limit-btn {
        padding: 15px;
        border-left: none;
        border-bottom: 3px solid transparent;
        background: #f8fafc;
        margin-bottom: 8px;
        border-radius: 12px;
    }
    
    .limit-btn.active {
        border-left: none;
        border-bottom-color: var(--danger);
    }
    
    .limits-content-area {
        width: 100%;
        padding: 30px 20px;
    }
}
</style>

<div class="premium-limitations-box" id="limitations-app-container">
    
    <div class="limits-header">
        <h2>Wady i ograniczenia – na co musisz być przygotowany</h2>
        <p>Jak każde rozwiązanie techniczne, podłogówka bez wylewki nie jest pozbawiona wad. Ignorowanie tych ograniczeń może prowadzić do rozczarowania efektem grzewczym lub zniszczenia podłogi.</p>
    </div>

    <div class="limits-workspace">
        
        <div class="limits-menu">
            <button class="limit-btn active" data-target="pane-cost">
                <span class="limit-icon">💰</span> Wyższy koszt materiałów
            </button>
            <button class="limit-btn" data-target="pane-cooling">
                <span class="limit-icon">❄️</span> Szybsze wychładzanie
            </button>
            <button class="limit-btn" data-target="pane-leveling">
                <span class="limit-icon">📐</span> Ryzyko nierównego podłoża
            </button>
        </div>

        <div class="limits-content-area">
            
            <div class="limit-pane active" id="pane-cost">
                <h4>Wyższy koszt zakupu materiałów</h4>
                <p>W przeliczeniu na metr kwadratowy, sam materiał do systemu suchego jest droższy o <strong>40–70%</strong> w porównaniu do tradycyjnego systemu z betonem.</p>
                
                <div class="cost-compare">
                    <div class="cost-row">
                        <div class="cost-label">
                            <span>Wylewka mokra (rura, beton, izolacja)</span>
                            <span class="price">ok. 80–120 zł/m²</span>
                        </div>
                        <div class="cost-bar-bg"><div class="cost-bar-fill fill-wet"></div></div>
                    </div>
                    <div class="cost-row">
                        <div class="cost-label">
                            <span>System suchy (płyty, lamele, suchy jastrych)</span>
                            <span class="price">ok. 180–250 zł/m²</span>
                        </div>
                        <div class="cost-bar-bg"><div class="cost-bar-fill fill-dry"></div></div>
                    </div>
                </div>

                <div class="info-box">
                    <strong>Ważna uwaga:</strong> Należy jednak pamiętać, że wyższy koszt początkowy materiałów często częściowo rekompensowany jest niższym kosztem robocizny oraz brakiem konieczności wynajmu mieszkań zastępczych na czas 8 tygodni schnięcia wylewki.
                </div>
            </div>

            <div class="limit-pane" id="pane-cooling">
                <h4>Szybsze wychładzanie pomieszczeń</h4>
                <p>Brak potężnego, betonowego &#8222;akumulatora ciepła&#8221; ma swoją ciemną stronę. Gdy kocioł gazowy lub pompa ciepła przestanie pracować, <strong>podłoga stygnie błyskawicznie</strong> – często w kilkadziesiąt minut.</p>
                <p>Problem ten ujawnia się m.in. w tanich taryfach nocnych (gdy w dzień piec nie grzeje) lub podczas korzystania z opcji oszczędzania energii w bloku.</p>

                <div class="info-box critical" style="border-left-color: var(--warning); background: #fffbeb;">
                    <strong>Zależność od izolacji budynku:</strong> W nowym, dobrze izolowanym domu nie jest to duży problem, ponieważ ściany trzymają ciepło. Jednak w starym, nieszczelnym budownictwie może to powodować bardzo nieprzyjemne uczucie „ciągnięcia chłodem” od stóp niemal od razu po wyłączeniu pompy.
                </div>
            </div>

            <div class="limit-pane" id="pane-leveling">
                <h4>Bezwzględny wymóg równego podłoża</h4>
                <p>To absolutnie największa pułapka montażowa. Wylewka mokra jest ciężka i samopoziomująca – idealnie ukryje nierówności stropu do 2-3 cm. <strong>System suchy nie ma tej zdolności.</strong></p>
                
                <p>Konsekwencje nierówności (np. dołek na 5 mm pod płytą):</p>
                <ul class="consequences-list">
                    <li>Nieprzyjemne wrażenie akustyczne (stukanie, klawiszowanie).</li>
                    <li>Pękanie fug na płytkach ceramicznych (nawet przy użyciu maty zbrojącej).</li>
                    <li>Ryzyko wyślizgnięcia się rury z kanału aluminiowego (tworzy tzw. &#8222;gorący punkt&#8221;).</li>
                </ul>

                <div class="info-box critical">
                    <strong>Rozwiązanie i ironia losu:</strong> Przed montażem konieczne jest precyzyjne wyrównanie podłoża masą samopoziomującą. Aby uniknąć grubej wylewki&#8230; i tak musisz zrobić wylewkę (cienką, korekcyjną na 2-5 mm).
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // ZABEZPIECZENIE DOMENOWE (Domain Lock) Base64 Encoded HTML
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        document.getElementById('limitations-app-container').innerHTML = decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));
        return; 
    }

    // LOGIKA ZAKŁADEK (TABS)
    const buttons = document.querySelectorAll('.limit-btn');
    const panes = document.querySelectorAll('.limit-pane');

    buttons.forEach(button => {
        button.addEventListener('click', () => {
            // Usuń klasę active ze wszystkich
            buttons.forEach(btn => btn.classList.remove('active'));
            panes.forEach(pane => pane.classList.remove('active'));
            
            // Dodaj do klikniętego
            button.classList.add('active');
            
            // Pokaż treść
            const targetId = button.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
    --wet-color: #64748b;
}

.premium-compare {
    max-width: 1000px;
    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;
}

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

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

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

/* INTERAKTYWNY KALKULATOR - STYLE */
.interactive-calc-section {
    padding: 30px 40px;
    background: #ffffff;
    border-bottom: 3px solid var(--border-color);
}

.input-wrap { margin-bottom: 25px; background: var(--bg-light); padding: 20px; border-radius: 16px; border: 1px solid #e2e8f0; }
.input-label-row { display: flex; justify-content: space-between; margin-bottom: 12px; align-items: center; }
.input-label-row label { font-weight: 800; font-size: 15px; color: var(--primary); text-transform: uppercase; letter-spacing: 0.5px;}
.input-label-row .val-badge { background: #ffffff; padding: 6px 16px; border-radius: 10px; font-weight: 900; color: var(--accent); font-size: 18px; box-shadow: 0 2px 5px rgba(0,0,0,0.05); }

input[type=range] { width: 100%; height: 8px; background: #cbd5e1; border-radius: 10px; appearance: none; outline: none; margin-top: 5px; }
input[type=range]::-webkit-slider-thumb { appearance: none; width: 24px; height: 24px; background: var(--accent); border-radius: 50%; border: 4px solid white; box-shadow: 0 2px 8px rgba(0,0,0,0.2); cursor: pointer; }

.charts-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; }
.chart-title { font-size: 13px; font-weight: 700; color: #64748b; margin-bottom: 15px; text-transform: uppercase; letter-spacing: 0.5px;}
.bar-row { margin-bottom: 12px; }
.bar-label { display: flex; justify-content: space-between; font-size: 13px; font-weight: 700; color: var(--primary); margin-bottom: 6px; }
.bar-bg { width: 100%; background: #f1f5f9; border-radius: 8px; height: 32px; overflow: hidden; position: relative; border: 1px solid #e2e8f0;}
.bar-fill { height: 100%; transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: flex-end; padding-right: 12px; color: white; font-weight: 800; font-size: 13px; white-space: nowrap; }
.fill-dry { background: var(--accent); }
.fill-wet { background: var(--wet-color); }

/* TABELA - STYLE */
.table-wrapper {
    padding: 0 40px;
    margin-top: 20px;
}

.compare-table {
    width: 100%;
    border-collapse: separate;
    border-spacing: 0;
}

.compare-table th {
    padding: 20px 15px;
    text-align: center;
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    border-bottom: 3px solid var(--border-color);
}

.compare-table th.col-param { text-align: left; color: #64748b; width: 30%; }
.compare-table th.col-noguide { color: var(--accent); width: 35%; border-bottom-color: var(--accent); }
.compare-table th.col-project { color: var(--wet-color); width: 35%; }

.compare-table td {
    padding: 16px 15px;
    text-align: center;
    font-size: 14px;
    color: #334155;
    border-bottom: 1px solid #f1f5f9;
    vertical-align: middle;
    line-height: 1.5;
}

.compare-table td.param-name {
    text-align: left;
    font-weight: 700;
    color: var(--primary);
    display: flex;
    align-items: center;
    gap: 10px;
}

.compare-table td.param-name span.icon {
    font-size: 18px;
    background: #f8fafc;
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
    flex-shrink: 0;
}

.compare-table tr:hover td { background: #f8fafc; }

.val-pill {
    display: inline-block;
    padding: 4px 12px;
    background: #f1f5f9;
    border-radius: 8px;
    font-weight: 700;
}
.val-pill.accent { background: #eff6ff; color: var(--accent); }
.val-pill.danger { background: #fee2e2; color: var(--danger); }
.val-pill.success { background: #dcfce7; color: var(--success); }

.compare-footer {
    padding: 40px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
}

.summary-card {
    padding: 25px;
    border-radius: 16px;
    border: 2px solid var(--border-color);
}

.summary-card h4 {
    margin: 0 0 15px 0;
    font-size: 18px;
    font-weight: 800;
    display: flex;
    align-items: center;
    gap: 10px;
}

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

.card-project { border-color: #bfdbfe; background: #eff6ff; }
.card-project h4 { color: var(--accent); }

/* ROZWIĄZANIE DLA MOBILE */
@media (max-width: 768px) {
    .compare-header { padding: 25px 20px; }
    .interactive-calc-section { padding: 25px 20px; }
    .charts-grid { grid-template-columns: 1fr; gap: 20px; }
    .table-wrapper { padding: 0 15px; margin-top: 30px;}
    .compare-footer { grid-template-columns: 1fr; padding: 20px 15px; gap: 20px; }
    
    .compare-table, .compare-table tbody, .compare-table tr, .compare-table td {
        display: block; width: 100%; box-sizing: border-box;
    }
    .compare-table thead { display: none; }
    
    .compare-table tr {
        margin-bottom: 20px; border: 1px solid var(--border-color); border-radius: 16px; overflow: hidden; box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
    }
    
    .compare-table td { text-align: left; padding: 15px 20px; border-bottom: 1px solid #f1f5f9; }
    .compare-table td:last-child { border-bottom: none; }
    
    .compare-table td.param-name {
        background: var(--bg-light); font-size: 16px; border-bottom: 2px solid var(--border-color);
    }
    
    .compare-table td:nth-child(2)::before {
        content: "System Suchy (bez wylewki):"; display: block; font-weight: 800; margin-bottom: 6px; color: var(--accent); font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px;
    }
    
    .compare-table td:nth-child(3)::before {
        content: "System Mokry (z wylewką):"; display: block; font-weight: 800; margin-bottom: 6px; color: var(--wet-color); font-size: 12px; text-transform: uppercase; letter-spacing: 0.5px;
    }
    
    .compare-table tr:hover td { background: inherit; }
    .compare-table td.param-name:hover { background: var(--bg-light); }
}
</style>

<div class="premium-compare" id="compare-app-container">
    <div class="compare-header">
        <h2>Porównanie techniczne: System Suchy vs. System Mokry</h2>
        <p>Sprawdź, jak wybór technologii wpływa na obciążenie Twojego stropu oraz koszty materiałów. Zmieniając powierzchnię, na żywo zobaczysz skalę przedsięwzięcia. Poniżej znajdziesz szczegółowe zestawienie parametrów. <a href="https://projekt-ogrzewania.pl/system-mokry-czy-suchy-w-wodnym-ogrzewaniu-podlogowym-ktory-wybrac/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Więcej przeczytasz w naszym artykule.</a></p>
    </div>

    <div class="interactive-calc-section">
        <div class="input-wrap">
            <div class="input-label-row">
                <label>Suwak powierzchni ogrzewanej</label>
                <span class="val-badge"><span id="v-area">50</span> m²</span>
            </div>
            <input type="range" id="area-slider" min="10" max="250" step="5" value="50">
        </div>

        <div class="charts-grid">
            <div class="chart-block">
                <div class="chart-title">📦 Łączna waga na stropie</div>
                <div class="bar-row">
                    <div class="bar-label"><span>System Suchy</span></div>
                    <div class="bar-bg"><div class="bar-fill fill-dry" id="bar-weight-dry" style="width: 10%;">&#8212;</div></div>
                </div>
                <div class="bar-row">
                    <div class="bar-label"><span>System Mokry</span></div>
                    <div class="bar-bg"><div class="bar-fill fill-wet" id="bar-weight-wet" style="width: 80%;">&#8212;</div></div>
                </div>
            </div>

            <div class="chart-block">
                <div class="chart-title">💰 Szacunkowy koszt materiałów</div>
                <div class="bar-row">
                    <div class="bar-label"><span>System Suchy</span></div>
                    <div class="bar-bg"><div class="bar-fill fill-dry" id="bar-cost-dry" style="width: 60%;">&#8212;</div></div>
                </div>
                <div class="bar-row">
                    <div class="bar-label"><span>System Mokry</span></div>
                    <div class="bar-bg"><div class="bar-fill fill-wet" id="bar-cost-wet" style="width: 30%;">&#8212;</div></div>
                </div>
            </div>
        </div>
    </div>

    <div class="table-wrapper">
        <table class="compare-table">
            <thead>
                <tr>
                    <th class="col-param">Parametr techniczny</th>
                    <th class="col-noguide">System Suchy (bez wylewki)</th>
                    <th class="col-project">System Mokry (z wylewką)</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td class="param-name"><span class="icon">⚖️</span> Masa własna (kg/m²)</td>
                    <td><strong>20 – 35 kg</strong></td>
                    <td>100 – 180 kg</td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">📏</span> Minimalna wysokość</td>
                    <td><span class="val-pill accent">30 mm</span> (bez płytek)</td>
                    <td>80 mm</td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">⏱️</span> Czas realizacji</td>
                    <td><span class="val-pill accent">1 – 3 dni</span></td>
                    <td>28 – 60 dni</td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">🌡️</span> Maks. temp. zasilania</td>
                    <td>35 – 40°C</td>
                    <td>40 – 50°C</td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">🚀</span> Czas nagrzewania</td>
                    <td><span class="val-pill accent">20 – 40 minut</span></td>
                    <td>4 – 6 godzin</td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">🔋</span> Akumulacyjność cieplna</td>
                    <td>Bardzo niska</td>
                    <td><strong>Bardzo wysoka</strong></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">🔊</span> Przewodność akustyczna</td>
                    <td><span class="val-pill danger">Gorsza</span> (płyty pływające)</td>
                    <td><span class="val-pill success">Lepsza</span> (masa tłumi dźwięki)</td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">💳</span> Koszt materiałów (zł/m²)</td>
                    <td>180 – 280 zł</td>
                    <td><span class="val-pill success">90 – 150 zł</span></td>
                </tr>
                <tr>
                    <td class="param-name"><span class="icon">🔥</span> Ryzyko przegrzania</td>
                    <td><span class="val-pill danger">Wysokie</span> (wymagany RTL)</td>
                    <td><span class="val-pill success">Niskie</span></td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="compare-footer">
        <div class="summary-card card-project">
            <h4>Kiedy wybrać system suchy?</h4>
            <p>Idealny do remontów starych domów, kamienic (stropy drewniane) oraz domów szkieletowych. Sprawdza się wszędzie tam, gdzie kluczowa jest waga konstrukcji, brakuje wysokości na grubą wylewkę lub zależy Ci na błyskawicznym czasie realizacji bez wprowadzania wilgoci.</p>
        </div>
        
        <div class="summary-card">
            <h4>Kiedy wybrać system mokry?</h4>
            <p>Standardowe, ekonomiczne rozwiązanie dla nowego budownictwa, gdzie nośność stropu nie jest problemem. Oferuje niższą cenę materiałów, doskonałą izolację akustyczną i wysoką bezwładność cieplną, która wybacza błędy w sterowaniu temperaturą.</p>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. 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)) {
        document.getElementById('compare-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Narzędzie chronione prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">To interaktywne zestawienie jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostało skopiowane 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>
        `;
        return; 
    }

    // 2. LOGIKA INTERAKTYWNEGO KALKULATORA
    const slider = document.getElementById("area-slider");
    if(!slider) return;

    function updateCalc() {
        const area = parseFloat(slider.value);
        document.getElementById("v-area").innerText = area;
        
        // Średnie wartości na bazie tabeli
        const weightDryPerM2 = 27.5; // średnia 20-35
        const weightWetPerM2 = 140; // średnia 100-180
        const costDryPerM2 = 230; // średnia 180-280
        const costWetPerM2 = 120; // średnia 90-150
        
        const totalWeightDry = area * weightDryPerM2;
        const totalWeightWet = area * weightWetPerM2;
        const totalCostDry = area * costDryPerM2;
        const totalCostWet = area * costWetPerM2;
        
        // Formatowanie tekstu
        const textWeightDry = totalWeightDry >= 1000 ? (totalWeightDry / 1000).toFixed(1) + " ton" : Math.round(totalWeightDry) + " kg";
        const textWeightWet = totalWeightWet >= 1000 ? (totalWeightWet / 1000).toFixed(1) + " ton" : Math.round(totalWeightWet) + " kg";
        const textCostDry = (totalCostDry / 1000).toFixed(1) + " tys. zł";
        const textCostWet = (totalCostWet / 1000).toFixed(1) + " tys. zł";
        
        // Obliczanie szerokości pasków (wizualizacja względem maks. wartości dla 250m2)
        const maxWeight = 250 * weightWetPerM2;
        const maxCost = 250 * costDryPerM2;
        
        const pctWeightDry = Math.max(8, Math.min(100, (totalWeightDry / maxWeight) * 100));
        const pctWeightWet = Math.max(8, Math.min(100, (totalWeightWet / maxWeight) * 100));
        const pctCostDry = Math.max(8, Math.min(100, (totalCostDry / maxCost) * 100));
        const pctCostWet = Math.max(8, Math.min(100, (totalCostWet / maxCost) * 100));
        
        // Aktualizacja DOM
        document.getElementById("bar-weight-dry").style.width = pctWeightDry + "%";
        document.getElementById("bar-weight-dry").innerText = textWeightDry;
        
        document.getElementById("bar-weight-wet").style.width = pctWeightWet + "%";
        document.getElementById("bar-weight-wet").innerText = textWeightWet;
        
        document.getElementById("bar-cost-dry").style.width = pctCostDry + "%";
        document.getElementById("bar-cost-dry").innerText = textCostDry;
        
        document.getElementById("bar-cost-wet").style.width = pctCostWet + "%";
        document.getElementById("bar-cost-wet").innerText = textCostWet;
    }

    slider.addEventListener("input", updateCalc);
    updateCalc(); // Inicjalizacja przy załadowaniu
});
</script>



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

.premium-scenario-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);
}

.scenario-header {
    padding: 35px 40px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    border-bottom: 1px solid var(--border-color);
    text-align: center;
}

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

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

.scenario-workspace {
    display: flex;
    min-height: 420px;
}

/* LEWA STRONA - MENU */
.scenario-menu {
    width: 35%;
    background: #ffffff;
    border-right: 1px solid var(--border-color);
    display: flex;
    flex-direction: column;
    padding: 20px 0;
}

.scenario-btn {
    padding: 20px 30px;
    background: transparent;
    border: none;
    border-left: 4px solid transparent;
    text-align: left;
    font-family: 'Inter', sans-serif;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    gap: 12px;
}

.scenario-btn:hover {
    background: #f8fafc;
    color: var(--primary);
}

.scenario-btn.active {
    background: #eff6ff;
    border-left-color: var(--accent);
    color: var(--accent);
}

.scenario-icon {
    font-size: 22px;
    flex-shrink: 0;
    transition: transform 0.3s ease;
}

.scenario-btn.active .scenario-icon {
    transform: scale(1.15);
}

/* PRAWA STRONA - TREŚĆ */
.scenario-content-area {
    width: 65%;
    background: var(--bg-light);
    position: relative;
    padding: 40px;
}

.scenario-pane {
    display: none;
    animation: fadeSlideUp 0.4s ease-out forwards;
}

.scenario-pane.active {
    display: block;
}

.pane-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 20px;
}

.badge-weight { background: #fee2e2; color: #991b1b; }
.badge-height { background: #e0e7ff; color: #3730a3; }
.badge-moisture { background: #ffedd5; color: #9a3412; }

.scenario-pane h4 {
    margin: 0 0 15px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

.scenario-pane p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    margin-bottom: 20px;
}

.scenario-pane p:last-child {
    margin-bottom: 0;
}

.scenario-pane a {
    color: var(--accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid #bfdbfe;
    transition: all 0.2s;
}

.scenario-pane a:hover {
    background: #eff6ff;
    border-bottom-color: var(--accent);
}

.highlight-box {
    background: #ffffff;
    border: 1px solid var(--border-color);
    border-left: 4px solid var(--accent);
    padding: 20px;
    border-radius: 12px;
    margin-top: 25px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.highlight-box strong {
    display: block;
    color: var(--primary);
    margin-bottom: 5px;
    font-size: 15px;
}

@keyframes fadeSlideUp {
    from { opacity: 0; transform: translateY(15px); }
    to { opacity: 1; transform: translateY(0); }
}

/* MOBILE */
@media (max-width: 768px) {
    .scenario-header { padding: 25px 20px; }
    .scenario-header h3 { font-size: 22px; }
    
    .scenario-workspace { flex-direction: column; min-height: auto; }
    
    .scenario-menu {
        width: 100%;
        border-right: none;
        border-bottom: 1px solid var(--border-color);
        padding: 10px;
        display: grid;
        grid-template-columns: 1fr 1fr;
        gap: 10px;
    }
    
    .scenario-btn {
        padding: 12px 15px;
        border-left: none;
        border-bottom: 3px solid transparent;
        border-radius: 8px;
        background: #f8fafc;
        font-size: 13px;
        flex-direction: column;
        text-align: center;
        gap: 8px;
        justify-content: center;
    }
    
    .scenario-btn.active {
        border-left: none;
        border-bottom-color: var(--accent);
    }
    
    .scenario-content-area {
        width: 100%;
        padding: 30px 20px;
    }
}
</style>

<div class="premium-scenario-box" id="scenario-app-container">
    
    <div class="scenario-header">
        <h2>Gdzie system suchy sprawdza się najlepiej?</h2>
        <p>Wbrew pozorom, ogrzewanie bez wylewki nie jest rozwiązaniem uniwersalnym do każdego nowego domu. Jego zastosowanie jest optymalne w ściśle określonych scenariuszach remontowych i konstrukcyjnych.</p>
    </div>

    <div class="scenario-workspace">
        
        <div class="scenario-menu">
            <button class="scenario-btn active" data-target="pane-kamienice">
                <span class="scenario-icon">🏚️</span> Stare domy i kamienice
            </button>
            <button class="scenario-btn" data-target="pane-szkieletowe">
                <span class="scenario-icon">🌲</span> Domy szkieletowe
            </button>
            <button class="scenario-btn" data-target="pane-poddasza">
                <span class="scenario-icon">🪜</span> Adaptacje strychów
            </button>
            <button class="scenario-btn" data-target="pane-bloki">
                <span class="scenario-icon">🏢</span> Mieszkania w bloku
            </button>
        </div>

        <div class="scenario-content-area">
            
            <div class="scenario-pane active" id="pane-kamienice">
                <div class="pane-badge badge-weight">Priorytet: Krytyczna nośność stropu</div>
                <h4>Remonty starych domów i kamienic</h4>
                <p>Stropy drewniane (belkowe), stropy Kleina (stalowo-ceramiczne) czy stropy żelbetowe o nieznanej nośności to idealne pole do popisu dla lekkiego ogrzewania.</p>
                
                <div class="highlight-box" style="border-left-color: var(--danger);">
                    <strong>Ryzyko katastrofy budowlanej</strong>
                    <span style="font-size: 14px; color: #475569;">Próba wylania tam tradycyjnego jastrychu (nawet 150-180 kg/m²) grozi w skrajnych przypadkach zarwaniem stropu u sąsiada poniżej. System suchy waży zaledwie ułamek tej masy.</span>
                </div>
            </div>

            <div class="scenario-pane" id="pane-szkieletowe">
                <div class="pane-badge badge-moisture">Priorytet: Eliminacja wilgoci i wagi</div>
                <h4>Domy szkieletowe i drewniane</h4>
                <p>W domach o konstrukcji drewnianej (tzw. kanadyjskiej) każdy kilogram ma znaczenie dla wymiarowania belek stropowych.</p>
                <p>Co więcej, wilgoć technologiczna uwalniająca się z tradycyjnej wylewki mogłaby doprowadzić do zagrzybienia drewnianej konstrukcji ścian. Technologia sucha eliminuje to ryzyko całkowicie.</p>
                
                <div class="highlight-box">
                    <strong>Baza wiedzy projektanta</strong>
                    <span style="font-size: 14px; color: #475569;">Zachęcam do lektury szczegółowego opracowania: <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-domu-szkieletowym-kluczowe-roznice-i-pulapki/">Ogrzewanie podłogowe w domu szkieletowym – kluczowe różnice i pułapki</a>.</span>
                </div>
            </div>

            <div class="scenario-pane" id="pane-poddasza">
                <div class="pane-badge badge-height">Priorytet: Oszczędność kubatury</div>
                <h4>Poddasza użytkowe i stychy</h4>
                <p>Podczas adaptacji starych strychów często mamy do dyspozycji bardzo małą wysokość przez wszechobecne skosy dachowe. Dodatkowo belki stropowe często były projektowane wyłącznie na przenoszenie ciężaru lekkiej zabudowy z płyt g-k.</p>
                
                <div class="highlight-box">
                    <strong>Odzyskaj cenne centymetry</strong>
                    <span style="font-size: 14px; color: #475569;">System suchy o grubości zaledwie 3-4 cm pozwala na wykonanie ogrzewania płaszczyznowego z jednoczesnym zachowaniem maksymalnej kubatury i wysokości pomieszczenia.</span>
                </div>
            </div>

            <div class="scenario-pane" id="pane-bloki">
                <div class="pane-badge badge-height">Priorytet: Brak uskoków i schodów</div>
                <h4>Mieszkania w bloku (z grzejników)</h4>
                <p>Jeśli zmieniasz system ogrzewania z tradycyjnego (grzejnikowego) na podłogowe w istniejącym mieszkaniu, wylanie wylewki to ogromny problem.</p>
                <p>Podniesienie poziomu podłogi o 8-10 cm w całym lokalu jest często fizycznie niemożliwe ze względu na zabetonowane progi, drzwi wejściowe czy balkonowe.</p>
                
                <div class="highlight-box" style="border-left-color: var(--success);">
                    <strong>Uniknij przecinania futryn</strong>
                    <span style="font-size: 14px; color: #475569;">System suchy pozwala zmieścić się w granicach 4-5 cm całkowitej grubości, co skutecznie zapobiega tworzeniu &#8222;schodków&#8221; do łazienki czy konieczności modyfikacji okien balkonowych.</span>
                </div>
            </div>

        </div>
    </div>
</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)) {
        document.getElementById('scenario-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Narzędzie chronione prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">To interaktywne zestawienie jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostało skopiowane 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>
        `;
        return; 
    }

    // LOGIKA ZAKŁADEK (TABS)
    const buttons = document.querySelectorAll('.scenario-btn');
    const panes = document.querySelectorAll('.scenario-pane');

    buttons.forEach(button => {
        button.addEventListener('click', () => {
            // Usuń klasę active ze wszystkich przycisków i paneli
            buttons.forEach(btn => btn.classList.remove('active'));
            panes.forEach(pane => pane.classList.remove('active'));
            
            // Nadaj klasę active klikniętemu przyciskowi
            button.classList.add('active');
            
            // Pokaż odpowiedni panel
            const targetId = button.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --kisan-blue: #1e3a8a;
}

.premium-promo-banner {
    max-width: 1050px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
    overflow: hidden;
    color: var(--primary);
    display: flex;
    background: linear-gradient(135deg, #ffffff 0%, #f1f5f9 100%);
    border: 2px solid #e2e8f0;
    position: relative;
}

/* LEWA STRONA - INFO */
.promo-content {
    width: 60%;
    padding: 45px 50px;
    position: relative;
    z-index: 2;
}

.promo-badge {
    background: var(--kisan-blue);
    color: white;
    padding: 6px 16px;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    display: inline-block;
    margin-bottom: 20px;
    box-shadow: 0 4px 10px rgba(30, 58, 138, 0.3);
}

.promo-content h3 {
    margin: 0 0 15px 0;
    font-size: 32px;
    font-weight: 900;
    line-height: 1.2;
    color: var(--primary);
}

.promo-content p {
    font-size: 16px;
    line-height: 1.6;
    color: #475569;
    margin-bottom: 25px;
}

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

.promo-feature-item {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--kisan-blue);
}

.promo-feature-item span {
    background: #dbeafe;
    width: 28px;
    height: 28px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
}

.promo-action {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    background: var(--accent);
    color: white;
    padding: 16px 28px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 15px;
    text-decoration: none;
    transition: all 0.3s;
    box-shadow: 0 10px 20px -5px rgba(37, 99, 235, 0.4);
}

.promo-action:hover {
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(37, 99, 235, 0.5);
    background: #1d4ed8;
}

/* PRAWA STRONA - INTERAKCJA / GRAFIKA */
.promo-visual {
    width: 40%;
    background: var(--kisan-blue);
    padding: 40px;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: center;
    color: white;
}

.promo-visual::before {
    content: '';
    position: absolute;
    top: 0; left: -30px;
    width: 60px; height: 100%;
    background: var(--kisan-blue);
    transform: skewX(-10deg);
    z-index: 1;
}

.interactive-mini-calc {
    position: relative;
    z-index: 2;
    background: rgba(255,255,255,0.1);
    border: 1px solid rgba(255,255,255,0.2);
    padding: 25px;
    border-radius: 16px;
    backdrop-filter: blur(10px);
}

.calc-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 15px;
    color: #93c5fd;
    display: flex;
    align-items: center;
    gap: 8px;
}

.calc-row {
    margin-bottom: 15px;
}

.calc-label {
    display: flex;
    justify-content: space-between;
    font-size: 13px;
    font-weight: 600;
    margin-bottom: 8px;
}

.calc-val { font-weight: 800; color: white; }

input[type=range].promo-slider { width: 100%; height: 6px; background: rgba(255,255,255,0.2); border-radius: 10px; appearance: none; outline: none; }
input[type=range].promo-slider::-webkit-slider-thumb { appearance: none; width: 20px; height: 20px; background: #ffffff; border-radius: 50%; cursor: pointer; box-shadow: 0 2px 5px rgba(0,0,0,0.2); }

.calc-result {
    margin-top: 20px;
    padding-top: 15px;
    border-top: 1px dashed rgba(255,255,255,0.2);
}

.calc-result span {
    display: block;
    font-size: 11px;
    color: #93c5fd;
    text-transform: uppercase;
    font-weight: 700;
}

.calc-result strong {
    font-size: 28px;
    font-weight: 900;
    color: white;
    line-height: 1.2;
}

@media (max-width: 900px) {
    .premium-promo-banner { flex-direction: column; }
    .promo-content { width: 100%; padding: 35px 25px; }
    .promo-visual { width: 100%; padding: 35px 25px; }
    .promo-visual::before { display: none; }
    .promo-features { grid-template-columns: 1fr; }
}
</style>

<div class="premium-promo-banner" id="promo-banner-app">
    
    <div class="promo-content">
        <div class="promo-badge">Rozwiązanie od Ekspertów</div>
        <h3>Poznaj system Comfort Floor Dry</h3>
        <p>Teoria to jedno, ale jak wdrożyć ją w życie? Poznaj innowacyjny system ogrzewania podłogowego o konstrukcji lekkiej, bazujący na specjalnych płytach EPS i tłoczonych aluminiowych lamelach grzewczych.</p>
        
        <div class="promo-features">
            <div class="promo-feature-item">
                <span>📏</span> Wysokość zaledwie 61 mm!
            </div>
            <div class="promo-feature-item">
                <span>⚖️</span> Kompletny system od 1 producenta
            </div>
            <div class="promo-feature-item">
                <span>⚙️</span> Opracowany dla domów drewnianych
            </div>
            <div class="promo-feature-item">
                <span>🛒</span> Spersonalizowana wycena online
            </div>
        </div>

        <a href="https://projekt-ogrzewania.pl/comfort-floor-dry/" target="_blank" class="promo-action">
            Zobacz pełny system i wyceń online →
        </a>
    </div>

    <div class="promo-visual">
        <div class="interactive-mini-calc">
            <div class="calc-title">💡 Przekonaj się sam</div>
            
            <div class="calc-row">
                <div class="calc-label">
                    <span>Powierzchnia do ogrzania:</span>
                    <span class="calc-val"><span id="p-area">50</span> m²</span>
                </div>
                <input type="range" class="promo-slider" id="p-slider" min="20" max="200" step="5" value="50">
            </div>

            <div class="calc-result">
                <span>Tyle wagi zaoszczędzisz na stropie:</span>
                <strong><span id="p-saved">5 375</span> kg!</strong>
            </div>
            <p style="font-size: 12px; color: #bfdbfe; margin-top: 10px; line-height: 1.4;">*Oszczędność wagi względem standardowej wylewki mokrej (140 kg/m² vs 32 kg/m²).</p>
        </div>
    </div>

</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)) {
        document.getElementById('promo-banner-app').innerHTML = `
            <div style="padding: 40px 20px; text-align: center; background: #fee2e2; color: #dc2626; width: 100%;">
                <h3 style="margin-top:0;">Baner chroniony prawem autorskim</h3>
                <p>Własność Projekt-Ogrzewania.pl</p>
            </div>
        `;
        return; 
    }

    // LOGIKA MINI KALKULATORA
    const slider = document.getElementById('p-slider');
    const valArea = document.getElementById('p-area');
    const valSaved = document.getElementById('p-saved');

    function updatePromoCalc() {
        const area = parseInt(slider.value);
        valArea.innerText = area;
        
        // Obliczenia: Mokra (~140kg) - Sucha (~32.5kg średnio) = różnica 107.5 kg na m2
        const differencePerM2 = 107.5;
        const totalSaved = Math.round(area * differencePerM2);
        
        valSaved.innerText = totalSaved.toLocaleString('pl-PL');
    }

    slider.addEventListener('input', updatePromoCalc);
    updatePromoCalc(); // init
});
</script>



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

.premium-auditor-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);
}

/* SEKCJA TEKSTOWA */
.auditor-text-section {
    padding: 40px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    border-bottom: 1px solid var(--border-color);
}

.auditor-text-section h3 {
    margin: 0 0 20px 0;
    font-size: 26px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

.auditor-text-section > p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    margin-bottom: 30px;
}

.rules-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 15px;
}

.rule-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    padding: 20px 25px;
    border-radius: 16px;
    display: flex;
    gap: 20px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.02);
}

.rule-number {
    width: 32px;
    height: 32px;
    background: #eff6ff;
    color: var(--accent);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 16px;
    flex-shrink: 0;
}

.rule-content h4 {
    margin: 0 0 8px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--primary);
}

.rule-content p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: #475569;
}

.rule-content strong { color: var(--primary); }

/* SEKCJA INTERAKTYWNA */
.auditor-interactive-section {
    padding: 40px;
    background: #ffffff;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
}

.interactive-title {
    grid-column: 1 / -1;
    text-align: center;
    margin-bottom: 10px;
}

.interactive-title h4 {
    margin: 0 0 5px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--primary);
}

.interactive-title p {
    margin: 0;
    font-size: 14px;
    color: #64748b;
}

/* Formularz */
.config-panel {
    background: var(--bg-light);
    padding: 25px;
    border-radius: 20px;
    border: 1px solid var(--border-color);
}

.input-group { margin-bottom: 20px; }
.input-group:last-child { margin-bottom: 0; }
.input-label { display: block; font-size: 13px; font-weight: 800; text-transform: uppercase; color: #64748b; margin-bottom: 8px; letter-spacing: 0.5px;}

select.form-control {
    width: 100%;
    padding: 12px 15px;
    border-radius: 10px;
    border: 1px solid #cbd5e1;
    background: #ffffff;
    font-family: 'Inter', sans-serif;
    font-size: 14px;
    font-weight: 600;
    color: var(--primary);
    cursor: pointer;
    outline: none;
}

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

.temp-row { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px;}
.temp-row span { font-weight: 900; color: var(--accent); font-size: 16px; }

input[type=range] { width: 100%; height: 8px; background: #cbd5e1; border-radius: 10px; appearance: none; outline: none; }
input[type=range]::-webkit-slider-thumb { appearance: none; width: 24px; height: 24px; background: var(--accent); border-radius: 50%; border: 4px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.2); cursor: pointer; }

/* Wyniki */
.results-panel {
    display: flex;
    flex-direction: column;
}

.score-box {
    text-align: center;
    padding: 25px;
    border-radius: 20px;
    border: 2px solid var(--border-color);
    margin-bottom: 20px;
    transition: all 0.3s;
}

.score-label { font-size: 13px; font-weight: 800; text-transform: uppercase; color: #64748b; display: block; margin-bottom: 10px; }
.score-value { font-size: 42px; font-weight: 900; line-height: 1; color: var(--primary); transition: color 0.3s;}

.alerts-container {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.alert-item {
    padding: 12px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 600;
    line-height: 1.5;
    display: none; /* Ukryte domyślnie */
    animation: fadeIn 0.3s ease-in-out;
}

.alert-danger { background: #fee2e2; color: #991b1b; border: 1px solid #fecaca; }
.alert-warning { background: #ffedd5; color: #9a3412; border: 1px solid #fed7aa; }
.alert-success { background: #dcfce7; color: #166534; border: 1px solid #bbf7d0; display: block; }

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(-5px); }
    to { opacity: 1; transform: translateY(0); }
}

@media (max-width: 768px) {
    .auditor-text-section, .auditor-interactive-section { padding: 25px 20px; }
    .rule-card { padding: 15px; gap: 15px; }
    .auditor-interactive-section { grid-template-columns: 1fr; gap: 25px; }
}
</style>

<div class="premium-auditor-box" id="auditor-app-container">
    
    <div class="auditor-text-section">
        <h2>Jak wygląda projekt ogrzewania w systemie suchym?</h2>
        <p>Projektowanie ogrzewania podłogowego bez wylewki wymaga od projektanta zupełnie innego podejścia. Nie można po prostu skopiować projektu &#8222;z betonu&#8221;. Oto 5 kluczowych aspektów <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/" style="color: var(--accent); font-weight: 700; text-decoration: none;">profesjonalnego projektu</a>:</p>
        
        <div class="rules-grid">
            <div class="rule-card">
                <div class="rule-number">1</div>
                <div class="rule-content">
                    <h4>Gęstość strumienia ciepła i rozstaw rur</h4>
                    <p>Ze względu na niższą akumulacyjność, stosuje się gęstszy rozstaw rur. Rekomendacja w systemie suchym to <strong>co 10 cm lub co 15 cm</strong>. Nigdy co 20 cm (chyba że w pom. gospodarczym).</p>
                </div>
            </div>
            
            <div class="rule-card">
                <div class="rule-number">2</div>
                <div class="rule-content">
                    <h4>Wydajność cieplna lameli aluminiowych</h4>
                    <p>Projektant musi określić grubość blachy (min. 0,4 mm) oraz jej kształt. Lamele z <strong>pełnym skrzydłem</strong> dają moc o 20-30% wyższą niż wąskie paski.</p>
                </div>
            </div>
            
            <div class="rule-card">
                <div class="rule-number">3</div>
                <div class="rule-content">
                    <h4>Strefy brzegowe i pod oknami</h4>
                    <p>Aby uzyskać wysoką moc (100-120 W/m²) pod dużym oknem bez betonu, należy przewidzieć układ rur w rozstawie <strong>co 7,5 cm</strong> lub zastosowanie podwójnej lameli.</p>
                </div>
            </div>
            
            <div class="rule-card">
                <div class="rule-number">4</div>
                <div class="rule-content">
                    <h4>Projekt warstwy wykończeniowej (opór cieplny)</h4>
                    <p>Panele laminowane: moc spada o 10-15%. Deska lita: moc spada o 20%. <strong>Dywany z długim włosiem (R > 0,25): moc spada o 50% – instalacja przestaje grzać!</strong></p>
                </div>
            </div>
            
            <div class="rule-card">
                <div class="rule-number">5</div>
                <div class="rule-content">
                    <h4>Automatyka i ograniczenie temperatury (RTL)</h4>
                    <p>Wymagany jest zawór RTL lub termostat. Maksymalna temperatura zasilania to <strong>40-45°C</strong>. Przekroczenie tej wartości gwarantuje powstanie szpar w parkiecie i zniszczenie podłogi.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="auditor-interactive-section">
        <div class="interactive-title">
            <h4>Audytor Błędów Projektowych</h4>
            <p>Sprawdź w praktyce! Zmieniaj parametry i zobacz, jak algorytm ocenia poprawność projektu.</p>
        </div>

        <div class="config-panel">
            <div class="input-group">
                <span class="input-label">Rozstaw rur (Ad. 1)</span>
                <select id="sim-spacing" class="form-control">
                    <option value="10">Co 10 cm (Wysoka moc)</option>
                    <option value="15" selected>Co 15 cm (Standard)</option>
                    <option value="20">Co 20 cm (Błąd projektowy)</option>
                </select>
            </div>

            <div class="input-group">
                <span class="input-label">Rodzaj lameli (Ad. 2)</span>
                <select id="sim-lamella" class="form-control">
                    <option value="full" selected>Pełne skrzydło (Optymalne)</option>
                    <option value="narrow">Wąskie paski (Tanie)</option>
                </select>
            </div>

            <div class="input-group">
                <span class="input-label">Wykończenie podłogi (Ad. 4)</span>
                <select id="sim-floor" class="form-control">
                    <option value="tiles" selected>Płytki ceramiczne (R ≈ 0.02)</option>
                    <option value="panels">Panele laminowane (R ≈ 0.10)</option>
                    <option value="wood">Deska lita/warstwowa (R ≈ 0.12)</option>
                    <option value="carpet">Gruby dywan (R > 0.25)</option>
                </select>
            </div>

            <div class="input-group" style="margin-bottom:0;">
                <div class="temp-row">
                    <span class="input-label" style="margin:0;">Temp. zasilania (Ad. 5)</span>
                    <span id="sim-temp-val">35°C</span>
                </div>
                <input type="range" id="sim-temp" min="30" max="50" step="1" value="35">
            </div>
        </div>

        <div class="results-panel">
            <div class="score-box" id="score-container">
                <span class="score-label">Szacowana wydajność instalacji</span>
                <div class="score-value" id="sim-efficiency">100%</div>
            </div>

            <div class="alerts-container">
                <div class="alert-item alert-success" id="alert-ok">✅ Projekt poprawny. Dobra wydajność i bezpieczne parametry.</div>
                
                <div class="alert-item alert-danger" id="alert-spacing">❌ <strong>BŁĄD (Pkt 1):</strong> Rozstaw co 20 cm w systemie suchym spowoduje niedogrzanie pomieszczenia i odczuwalną &#8222;zebrę termiczną&#8221; na podłodze.</div>
                
                <div class="alert-item alert-warning" id="alert-lamella">⚠️ <strong>OSTRZEŻENIE (Pkt 2):</strong> Zastosowanie wąskich lameli obniża realną moc grzewczą o 20-30%. Zwiększ zagęszczenie rur.</div>
                
                <div class="alert-item alert-danger" id="alert-carpet">❌ <strong>KRYTYCZNY BŁĄD (Pkt 4):</strong> Gruby dywan działa jak izolator (R > 0.25). Ogrzewanie podłogowe zostało zablokowane i nie ogrzeje pokoju!</div>
                
                <div class="alert-item alert-danger" id="alert-temp">❌ <strong>KRYTYCZNY BŁĄD (Pkt 5):</strong> Temperatura przekracza 40°C przy podłodze drewnianej/laminowanej! Gwarantowane wypaczenie podłogi i szpary. Brak zaworu RTL!</div>
            </div>
        </div>
    </div>

</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)) {
        document.getElementById('auditor-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Narzędzie chronione prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten Audytor Projektu 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>
        `;
        return; 
    }

    // LOGIKA AUDYTORA
    const elSpacing = document.getElementById('sim-spacing');
    const elLamella = document.getElementById('sim-lamella');
    const elFloor = document.getElementById('sim-floor');
    const elTemp = document.getElementById('sim-temp');
    const valTemp = document.getElementById('sim-temp-val');
    const elEfficiency = document.getElementById('sim-efficiency');
    const boxScore = document.getElementById('score-container');

    // Alerty
    const alertOk = document.getElementById('alert-ok');
    const alertSpacing = document.getElementById('alert-spacing');
    const alertLamella = document.getElementById('alert-lamella');
    const alertCarpet = document.getElementById('alert-carpet');
    const alertTemp = document.getElementById('alert-temp');

    function calculateAudit() {
        const spacing = parseInt(elSpacing.value);
        const lamella = elLamella.value;
        const floor = elFloor.value;
        const temp = parseInt(elTemp.value);
        
        valTemp.innerText = temp + "°C";

        let efficiency = 100; // Baza: 10cm, pełna lamela, płytki
        let hasErrors = false;

        // Reset alertów
        alertOk.style.display = 'none';
        alertSpacing.style.display = 'none';
        alertLamella.style.display = 'none';
        alertCarpet.style.display = 'none';
        alertTemp.style.display = 'none';

        // 1. Spacing Logic
        if(spacing === 15) efficiency -= 15;
        if(spacing === 20) {
            efficiency -= 35;
            alertSpacing.style.display = 'block';
            hasErrors = true;
        }

        // 2. Lamella Logic
        if(lamella === 'narrow') {
            efficiency -= 25;
            alertLamella.style.display = 'block';
            hasErrors = true;
        }

        // 3. Floor Logic
        if(floor === 'panels') efficiency -= 15;
        if(floor === 'wood') efficiency -= 20;
        if(floor === 'carpet') {
            efficiency -= 60;
            alertCarpet.style.display = 'block';
            hasErrors = true;
        }

        // 4. Temp & Floor Safety Logic
        if(temp > 40 && (floor === 'panels' || floor === 'wood')) {
            alertTemp.style.display = 'block';
            hasErrors = true;
        }
        
        // Zwiększenie wydajności od temperatury (uproszczone dla UI)
        if(temp > 35) {
            efficiency += (temp - 35) * 3; 
        }

        // Ograniczenia wizualne
        if(efficiency < 0) efficiency = 0;
        if(efficiency > 120) efficiency = 120;

        elEfficiency.innerText = Math.round(efficiency) + "%";

        // Style i podsumowanie
        if(hasErrors) {
            boxScore.style.borderColor = "var(--danger)";
            elEfficiency.style.color = "var(--danger)";
        } else {
            boxScore.style.borderColor = "var(--success)";
            elEfficiency.style.color = "var(--success)";
            alertOk.style.display = 'block';
        }
        
        // Wyjątek - niska wydajność bez "twardych" błędów (np standardowy spadek)
        if(!hasErrors && efficiency < 75) {
            boxScore.style.borderColor = "var(--warning)";
            elEfficiency.style.color = "var(--warning)";
            alertOk.style.display = 'none';
            alertLamella.style.display = 'block'; // Pokaż jako ogólne ostrzeżenie by coś poprawić
            alertLamella.innerHTML = "⚠️ <strong>OSTRZEŻENIE:</strong> Układ jest bezpieczny, ale jego wydajność jest niska. Rozważ wyższą temperaturę lub gęstszy rozstaw rur.";
        }
    }

    [elSpacing, elLamella, elFloor, elTemp].forEach(el => {
        el.addEventListener('input', calculateAudit);
    });

    calculateAudit(); // init
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --bg-light: #f8fafc;
}

.premium-intro-block {
    max-width: 900px;
    margin: 40px auto;
    padding: 35px 45px;
    background: linear-gradient(145deg, #ffffff, var(--bg-light));
    border-radius: 20px;
    border-left: 6px solid var(--accent);
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    font-family: 'Inter', -apple-system, sans-serif;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    border-top: 1px solid #f1f5f9;
    border-right: 1px solid #f1f5f9;
    border-bottom: 1px solid #f1f5f9;
}

.premium-intro-block:hover {
    transform: translateY(-4px);
    box-shadow: 0 20px 40px -10px rgba(37, 99, 235, 0.15);
}

.intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #eff6ff;
    color: var(--accent);
    padding: 6px 14px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 16px;
}

.premium-intro-block h2 {
    color: var(--primary);
    font-size: 26px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 16px;
    line-height: 1.3;
}

.premium-intro-block p {
    color: #475569;
    font-size: 16px;
    line-height: 1.7;
    margin: 0;
    font-weight: 400;
}

@media (max-width: 600px) {
    .premium-intro-block {
        padding: 25px 20px;
        margin: 20px 15px;
    }
    .premium-intro-block h2 {
        font-size: 22px;
    }
}
</style>

<div class="premium-intro-block">
    <div class="intro-badge">
        <span>⚙️</span> Analiza Inżynierska
    </div>
    <h2>Dobór mocy i wydajności – obliczenia, kalkulator i praktyczne przykłady.</h2>
    <p>Przejdźmy do twardych danych. Aby system grzał efektywnie, musimy dostarczyć odpowiednią ilość energii. Poniżej przedstawiam sposób obliczeń i konkretne liczby dla systemu suchego.</p>
</div>



<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-chart-box {
    max-width: 900px;
    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.1);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    color: var(--primary);
}

.chart-header {
    padding: 30px 40px 20px 40px;
    border-bottom: 1px solid #f1f5f9;
}

.chart-header h3 {
    margin: 0 0 8px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--primary);
}

.chart-header p {
    margin: 0;
    font-size: 14px;
    color: #64748b;
    font-weight: 500;
}

.chart-canvas-wrapper {
    padding: 30px 40px;
    position: relative;
    height: 400px;
    width: 100%;
}

.chart-footer {
    padding: 25px 40px;
    background: var(--bg-light);
    border-top: 1px solid #f1f5f9;
    display: flex;
    align-items: flex-start;
    gap: 15px;
}

.chart-icon {
    font-size: 24px;
    line-height: 1;
}

.chart-conclusion {
    margin: 0;
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
}

.chart-conclusion strong {
    color: var(--danger);
}

@media (max-width: 600px) {
    .chart-header, .chart-canvas-wrapper, .chart-footer {
        padding: 20px;
    }
    .chart-canvas-wrapper {
        height: 300px;
    }
}
</style>

<div class="premium-chart-box" id="chart-app-container">
    <div class="chart-header">
        <h3>Wykres zależności mocy od temperatury zasilania i pokrycia podłogi</h3>
        <p>System suchy: rura PEX 14mm, rozstaw 15cm, lamele aluminiowe pełne <br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Analiza przygotowana przez Projekt-Ogrzewania.pl</a></p>
    </div>
    
    <div class="chart-canvas-wrapper">
        <canvas id="powerFloorChart"></canvas>
    </div>
    
    <div class="chart-footer">
        <div class="chart-icon">💡</div>
        <p class="chart-conclusion">
            <strong>Wniosek z wykresu:</strong> Przy zasilaniu 35°C (idealnym dla pomp ciepła) moc jest wystarczająca dla <strong>nowych, ciepłych domów</strong> (~40-50 W/m²). Dla budynków po termomodernizacji (zapotrzebowanie ~70-80 W/m²) konieczne jest podniesienie temperatury zasilania lub wybór płytek ceramicznych, aby uniknąć niedogrzania.
        </p>
    </div>
</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)) {
        document.getElementById('chart-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Wykres chroniony prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten interaktywny wykres jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany na tę stronę 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>
        `;
        return; // Blokuje ładowanie reszty kodu, wykres się nie narysuje
    }

    // JEŚLI DOMENA SIĘ ZGADZA - RYSUJEMY WYKRES
    const canvasEl = document.getElementById('powerFloorChart');
    if(!canvasEl) return;
    
    const ctx = canvasEl.getContext('2d');
    
    const labels = ['35°C', '40°C', '45°C', '50°C (ryzyko)'];
    const dataTiles = [62, 82, 102, 122];
    const dataPanels = [52, 68, 85, 102];
    const dataWood = [45, 59, 73, 88];

    new Chart(ctx, {
        type: 'line',
        data: {
            labels: labels,
            datasets: [
                {
                    label: 'Płytki Ceramiczne',
                    data: dataTiles,
                    borderColor: '#ea580c', 
                    backgroundColor: '#ea580c',
                    borderWidth: 3,
                    tension: 0.3,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#ea580c',
                    pointBorderWidth: 3,
                    pointRadius: 6,
                    pointHoverRadius: 9
                },
                {
                    label: 'Panele Laminowane',
                    data: dataPanels,
                    borderColor: '#2563eb', 
                    backgroundColor: '#2563eb',
                    borderWidth: 3,
                    tension: 0.3,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#2563eb',
                    pointBorderWidth: 3,
                    pointRadius: 6,
                    pointHoverRadius: 9
                },
                {
                    label: 'Deska Dębowa',
                    data: dataWood,
                    borderColor: '#16a34a', 
                    backgroundColor: '#16a34a',
                    borderWidth: 3,
                    tension: 0.3,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#16a34a',
                    pointBorderWidth: 3,
                    pointRadius: 6,
                    pointHoverRadius: 9
                }
            ]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            plugins: {
                legend: {
                    display: true,
                    position: 'top',
                    labels: {
                        font: { family: 'Inter', size: 13, weight: '600' },
                        color: '#475569',
                        usePointStyle: true,
                        padding: 20
                    }
                },
                tooltip: {
                    backgroundColor: '#0f172a',
                    titleFont: { family: 'Inter', size: 14, weight: 'bold' },
                    bodyFont: { family: 'Inter', size: 14 },
                    padding: 12,
                    displayColors: true,
                    callbacks: {
                        label: function(context) {
                            return context.dataset.label + ': ' + context.parsed.y + ' W/m²';
                        }
                    }
                }
            },
            scales: {
                x: {
                    grid: {
                        display: false
                    },
                    ticks: {
                        font: { family: 'Inter', size: 13, weight: '600' },
                        color: '#64748b'
                    },
                    title: {
                        display: true,
                        text: 'Temperatura zasilania',
                        font: { family: 'Inter', size: 14, weight: 'bold' },
                        color: '#0f172a',
                        padding: {top: 10}
                    }
                },
                y: {
                    beginAtZero: true,
                    suggestedMax: 130,
                    grid: {
                        color: '#f1f5f9',
                        drawBorder: false
                    },
                    ticks: {
                        stepSize: 20,
                        font: { family: 'Inter', size: 13 },
                        color: '#64748b',
                        callback: function(value) {
                            return value + ' W';
                        }
                    },
                    title: {
                        display: true,
                        text: 'Moc grzewcza (W/m²)',
                        font: { family: 'Inter', size: 14, weight: 'bold' },
                        color: '#0f172a',
                        padding: {bottom: 10}
                    }
                }
            }
        }
    });
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.calc-intro { max-width: 1150px; margin: 40px auto 10px auto; text-align: center; padding: 0 20px; }
.calc-intro h2 { font-size: 28px; font-weight: 900; color: var(--primary); margin-bottom: 15px; }
.calc-intro p { font-size: 16px; color: #475569; line-height: 1.6; max-width: 800px; margin: 0 auto; }

.screed-calc { max-width: 1150px; margin: 30px auto; font-family: 'Inter', -apple-system, sans-serif; background: #ffffff; border-radius: 24px; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.1); overflow: hidden; color: var(--primary); }
.calc-grid { display: grid; grid-template-columns: 1.2fr 1fr; }

.config-side { padding: 40px; background: #ffffff; }
.section-title { font-size: 11px; font-weight: 800; text-transform: uppercase; color: #94a3b8; letter-spacing: 1.2px; margin-bottom: 20px; display: block; }

.type-selector { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-bottom: 30px; }
.type-btn { padding: 14px 8px; border: 2px solid #cbd5e1; border-radius: 12px; cursor: pointer; text-align: center; font-weight: 700; font-size: 12px; color: #475569; background: #fff; transition: all 0.2s; display: flex; flex-direction: column; justify-content: center; align-items: center; }
.type-btn span { margin-top: 4px; }
.type-btn.active { border-color: var(--accent); background: #eff6ff; color: var(--accent); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1); }

.input-wrap { margin-bottom: 25px; }
.input-label-row { display: flex; justify-content: space-between; margin-bottom: 8px; align-items: center; }
.input-label-row label { font-weight: 600; font-size: 14px; }
.input-label-row .val-badge { background: #f1f5f9; padding: 4px 12px; border-radius: 8px; font-weight: 800; color: var(--accent); font-size: 14px; }

input[type=range] { width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-top: 10px; }
input[type=range]::-webkit-slider-thumb { appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer; }

.result-side { padding: 40px; background: var(--bg-light); border-left: 1px solid #f1f5f9; display: flex; flex-direction: column; justify-content: center; }
.main-score-box { background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--danger); transition: 0.3s; }
.score-num { font-size: 42px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; color: var(--danger); }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

#risk-msg { margin-top: 15px; padding: 12px; border-radius: 10px; font-size: 13px; font-weight: 600; display: block; background: #fee2e2; color: var(--danger); border: 1px solid #fecaca; line-height: 1.4; text-align: center; }

.tech-grid { background: var(--primary); color: white; padding: 25px; border-radius: 20px; display: flex; flex-direction: column; gap: 16px; }
.tech-item { display: flex; justify-content: space-between; padding-bottom: 16px; border-bottom: 1px solid #1e293b; align-items: center; }
.tech-item:last-child { border: none; padding-bottom: 0; }
.tech-item span { color: #94a3b8; font-size: 13px; line-height: 1.4; padding-right: 15px; }
.tech-item strong { font-size: 16px; text-align: right; white-space: nowrap; }

.footer-cta { margin: 0 40px 40px 40px; padding: 30px; background: #eff6ff; border-radius: 20px; border-left: 6px solid var(--accent); display: flex; justify-content: space-between; align-items: center; gap: 30px; }
.cta-text-side { max-width: 550px; }
.cta-buttons-stack { display: flex; flex-direction: column; gap: 12px; min-width: 280px; }
.cta-btn { display: block; background: var(--accent); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 13px; text-align: center; border: none; cursor: pointer; }
.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(37, 99, 235, 0.2); }

@media (max-width: 900px) {
    .calc-grid { grid-template-columns: 1fr; }
    .footer-cta { flex-direction: column; text-align: center; gap: 25px; margin: 20px; }
    .cta-buttons-stack { min-width: 100%; width: 100%; }
}
</style>

<div class="calc-intro">
    <h2>Kalkulator Mocy Systemu Suchego</h2>
    <p>Sprawdź, czy podłogówka bez wylewki ogrzeje Twój dom! Autorskie narzędzie stworzone przez inżynierów <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>. Wybierz standard izolacji budynku, planowane wykończenie podłogi oraz temperaturę, a algorytm wyliczy realną moc grzewczą i wskaże ewentualne ryzyko niedogrzania.</p>
</div>

<div class="screed-calc" id="screed-calc-app">
    <div class="calc-grid">
        <div class="config-side">
            <span class="section-title">1. Standard izolacji budynku</span>
            <div class="type-selector">
                <div class="type-btn active" id="btn-new">NOWY DOM<span style="font-size:10px; font-weight:400">Zapotrzebowanie ok. 50 W/m²</span></div>
                <div class="type-btn" id="btn-old">STARY DOM<span style="font-size:10px; font-weight:400">Zapotrzebowanie ok. 80 W/m²</span></div>
            </div>

            <span class="section-title">2. Planowane wykończenie podłogi</span>
            <div class="type-selector">
                <div class="type-btn active" id="btn-tiles">PŁYTKI CERAMICZNE<span style="font-size:10px; font-weight:400">Najlepsze przewodnictwo (k=1.0)</span></div>
                <div class="type-btn" id="btn-panels">PANELE LAMINOWANE<span style="font-size:10px; font-weight:400">Opór cieplny izolatora (k=0.9)</span></div>
            </div>

            <span class="section-title">3. Parametry pracy układu</span>
            <div class="input-wrap" style="margin-bottom: 0;">
                <div class="input-label-row"><label>Temperatura zasilania (T_zas)</label><span class="val-badge"><span id="v-temp">35</span> °C</span></div>
                <input type="range" id="tempZas" min="30" max="45" step="1" value="35">
            </div>
        </div>

        <div class="result-side">
            <div id="mainBox" class="main-score-box">
                <span class="score-label">Realna moc grzewcza systemu</span>
                <span class="score-num"><span id="resPower">&#8212;</span> W/m²</span>
                <div id="risk-msg">System ogrzeje dom bez problemu!</div>
            </div>

            <div class="tech-grid">
                <div class="tech-item"><span>Wymagane zapotrzebowanie budynku:</span><strong id="resDemand">&#8212;</strong></div>
                <div class="tech-item"><span>Szacowany czas nagrzewania:</span><strong>20 &#8211; 40 minut</strong></div>
                <div class="tech-item"><span>Ryzyko niedogrzania w mrozy:</span><strong id="resOpLoss" style="color:#f87171">&#8212;</strong></div>
                <div class="tech-item"><span>Bezpieczeństwo pokrycia podłogi:</span><strong id="resFloorSafety" style="color:#16a34a">Optymalne</strong></div>
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin:0 0 10px 0; color:#1e3a8a">Nie zgaduj parametrów podłogówki</h3>
            <p style="margin:0; font-size:14px; color:#475569" id="footer-desc">System suchy nie wybacza błędów. Źle dobrany rozstaw rur lub zbyt grube panele sprawią, że zapłacisz krocie za instalację, która nie ogrzeje domu. Zleć nam precyzyjne obliczenia projektowe.</p>
        </div>
        <div class="cta-buttons-stack">
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn">
                ZAMÓW PROJEKT OGRZEWANIA →
            </a>
        </div>
    </div>
</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)) {
        document.getElementById('screed-calc-app').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;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Narzędzie chronione prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten kalkulator 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>
        `;
        return; 
    }

    // STAN APLIKACJI
    let houseType = "new";
    let floorType = "tiles";

    // ELEMENTY DOM
    const btnNew = document.getElementById("btn-new");
    const btnOld = document.getElementById("btn-old");
    const btnTiles = document.getElementById("btn-tiles");
    const btnPanels = document.getElementById("btn-panels");
    
    const tempZas = document.getElementById("tempZas");
    const vTemp = document.getElementById("v-temp");

    const resPower = document.getElementById("resPower");
    const resDemand = document.getElementById("resDemand");
    const resOpLoss = document.getElementById("resOpLoss");
    const resFloorSafety = document.getElementById("resFloorSafety");
    
    const mainBox = document.getElementById("mainBox");
    const riskMsg = document.getElementById("risk-msg");

    // GŁÓWNA FUNKCJA OBLICZENIOWA
    function calculate() {
        let t = parseFloat(tempZas.value);
        vTemp.innerText = t;

        let targetPower = (houseType === "new") ? 50 : 80;
        let k = (floorType === "tiles") ? 1.0 : 0.9;

        // Wzór na moc: (T_zas - 2.5 - 20) * 4.5 * k
        let power = (t - 2.5 - 20) * 4.5 * k;
        if (power < 0) power = 0;

        resPower.innerText = Math.round(power);
        resDemand.innerText = targetPower + " W/m²";

        // Logika Niedogrzania
        if (power >= targetPower) {
            mainBox.style.borderBottomColor = "var(--success)";
            resPower.style.color = "var(--success)";
            
            riskMsg.style.backgroundColor = "#dcfce7";
            riskMsg.style.color = "var(--success)";
            riskMsg.style.borderColor = "#bbf7d0";
            riskMsg.innerText = "System ogrzeje dom bez problemu!";
            
            resOpLoss.innerText = "Brak (Pełen komfort)";
            resOpLoss.style.color = "var(--success)";
        } else {
            mainBox.style.borderBottomColor = "var(--danger)";
            resPower.style.color = "var(--danger)";
            
            riskMsg.style.backgroundColor = "#fee2e2";
            riskMsg.style.color = "var(--danger)";
            riskMsg.style.borderColor = "#fecaca";
            
            let missing = Math.round(targetPower - power);
            riskMsg.innerText = "Ryzyko niedogrzania! Brakuje ok. " + missing + " W/m².";
            
            resOpLoss.innerText = "Tak (niedogrzanie)";
            resOpLoss.style.color = "var(--danger)";
        }

        // Logika Przegrzania Paneli
        if (floorType === "panels" && t > 40) {
            resFloorSafety.innerText = "OSTRZEŻENIE (T>40°C)";
            resFloorSafety.style.color = "var(--danger)";
            riskMsg.innerText += " Uwaga: Ryzyko wypaczenia paneli!";
        } else {
            resFloorSafety.innerText = "Optymalne";
            resFloorSafety.style.color = "var(--success)";
        }
    }

    // EVENT LISTENERY
    if(btnNew && btnOld) {
        btnNew.addEventListener("click", function() {
            houseType = "new";
            btnOld.classList.remove("active");
            btnNew.classList.add("active");
            calculate();
        });
        btnOld.addEventListener("click", function() {
            houseType = "old";
            btnNew.classList.remove("active");
            btnOld.classList.add("active");
            calculate();
        });
    }

    if(btnTiles && btnPanels) {
        btnTiles.addEventListener("click", function() {
            floorType = "tiles";
            btnPanels.classList.remove("active");
            btnTiles.classList.add("active");
            calculate();
        });
        btnPanels.addEventListener("click", function() {
            floorType = "panels";
            btnTiles.classList.remove("active");
            btnPanels.classList.add("active");
            calculate();
        });
    }

    if(tempZas) {
        tempZas.addEventListener("input", calculate);
    }

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



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

.premium-steps-widget {
    max-width: 900px;
    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.08);
    border: 1px solid var(--border-color);
    overflow: hidden;
}

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

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

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

.steps-container {
    padding: 20px 40px 40px 40px;
}

.step-item {
    border: 2px solid transparent;
    border-radius: 16px;
    margin-bottom: 12px;
    background: #ffffff;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.03);
    border: 1px solid #f1f5f9;
    transition: all 0.3s ease;
}

.step-item.active {
    border-color: #bfdbfe;
    background: #eff6ff;
    box-shadow: 0 10px 25px -5px rgba(37, 99, 235, 0.1);
}

.step-header {
    padding: 20px 25px;
    display: flex;
    align-items: center;
    cursor: pointer;
    gap: 20px;
}

.step-number {
    width: 40px;
    height: 40px;
    background: #f1f5f9;
    color: #64748b;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    font-weight: 900;
    flex-shrink: 0;
    transition: all 0.3s ease;
}

.step-item.active .step-number {
    background: var(--accent);
    color: white;
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);
}

.step-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--primary);
    flex-grow: 1;
}

.step-item.active .step-title {
    color: var(--accent);
}

.step-toggle {
    font-size: 24px;
    color: #94a3b8;
    transition: transform 0.3s ease;
}

.step-item.active .step-toggle {
    transform: rotate(180deg);
    color: var(--accent);
}

.step-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    padding: 0 25px;
}

.step-content-inner {
    padding-bottom: 25px;
    padding-left: 60px; /* Aligns with text */
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

.step-content-inner p { margin-top: 0; margin-bottom: 15px; }
.step-content-inner p:last-child { margin-bottom: 0; }

.step-content-inner a {
    color: var(--accent);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: #bfdbfe;
    text-underline-offset: 3px;
}

.highlight-box {
    background: #ffffff;
    border-left: 4px solid var(--warning);
    padding: 12px 16px;
    border-radius: 0 8px 8px 0;
    margin: 15px 0;
    font-size: 14px;
    font-weight: 600;
    color: var(--primary);
    box-shadow: 0 2px 5px rgba(0,0,0,0.02);
}

.split-options {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-top: 15px;
}

.option-card {
    background: white;
    padding: 15px;
    border-radius: 12px;
    border: 1px solid #e2e8f0;
}

.option-card h5 {
    margin: 0 0 8px 0;
    color: var(--primary);
    font-size: 14px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.option-card p {
    margin: 0;
    font-size: 13px;
    line-height: 1.5;
}

@media (max-width: 600px) {
    .steps-header { padding: 25px 20px; }
    .steps-container { padding: 20px; }
    .step-header { padding: 15px; gap: 15px; }
    .step-title { font-size: 15px; }
    .step-content-inner { padding-left: 0; padding-bottom: 20px; font-size: 14px; }
    .split-options { grid-template-columns: 1fr; }
}
</style>

<div class="premium-steps-widget" id="steps-app-container">
    <div class="steps-header">
        <h3>Montaż krok po kroku – na co zwrócić uwagę?</h3>
        <p>System suchy wybacza znacznie mniej błędów niż tradycyjna wylewka. Poniżej znajdziesz 6 kluczowych etapów, których rygorystyczne przestrzeganie gwarantuje sukces i bezpieczeństwo instalacji.</p>
    </div>

    <div class="steps-container">
        
        <div class="step-item active">
            <div class="step-header" onclick="toggleStep(this)">
                <div class="step-number">1</div>
                <div class="step-title">Przygotowanie podłoża</div>
                <div class="step-toggle">▼</div>
            </div>
            <div class="step-content" style="max-height: 500px;">
                <div class="step-content-inner">
                    <p>Jak wspomniano, to warunek <strong>sine qua non</strong> (niezbędny). Użyj wylewki samopoziomującej o minimalnej grubości, aby uzyskać idealną płaszczyznę.</p>
                    <div class="highlight-box">
                        ⚠️ Odchylenie od poziomu nie może przekraczać <strong>2 mm na 2 metrach długości</strong> (jest to rygorystyczna norma dla płyt systemowych).
                    </div>
                </div>
            </div>
        </div>

        <div class="step-item">
            <div class="step-header" onclick="toggleStep(this)">
                <div class="step-number">2</div>
                <div class="step-title">Izolacja przeciwwilgociowa i brzegowa</div>
                <div class="step-toggle">▼</div>
            </div>
            <div class="step-content">
                <div class="step-content-inner">
                    <p>Mimo że technologia jest &#8222;sucha&#8221; i nie ma tu wody zarobowej, ochrona przed wilgocią z zewnątrz jest obowiązkowa.</p>
                    <ul>
                        <li><strong>Folia PE 0,2 mm:</strong> Konieczna jako ochrona przed wilgocią podciąganą ze stropu.</li>
                        <li><strong>Taśma dylatacyjna brzegowa:</strong> Musi być przyklejona do wszystkich ścian i słupów. Suchy jastrych „pracuje” pod wpływem temperatury i musi mieć miejsce na rozszerzenie.</li>
                    </ul>
                </div>
            </div>
        </div>

        <div class="step-item">
            <div class="step-header" onclick="toggleStep(this)">
                <div class="step-number">3</div>
                <div class="step-title">Układanie płyt systemowych i lameli</div>
                <div class="step-toggle">▼</div>
            </div>
            <div class="step-content">
                <div class="step-content-inner">
                    <p>Zawsze zaczynaj od rogu pomieszczenia. Wciskaj rurę grzewczą <strong>z wyczuciem</strong>. Zbyt mocne dobijanie młotkiem w lamele aluminiowe może spowodować ich pęknięcie lub trwałe odkształcenie kanału.</p>
                    <p>Unikaj cięcia <a href="https://projekt-ogrzewania.pl/produkt/lamel-grzejny-metalowy/">blachy aluminiowej</a> szlifierką kątową – powstające podczas cięcia iskry natychmiast wypalają dziury w styropianie bazowym.</p>
                </div>
            </div>
        </div>

        <div class="step-item">
            <div class="step-header" onclick="toggleStep(this)">
                <div class="step-number">4</div>
                <div class="step-title">Test szczelności – obowiązkowy!</div>
                <div class="step-toggle">▼</div>
            </div>
            <div class="step-content">
                <div class="step-content-inner">
                    <p>Przed przykryciem rur suchym jastrychem <strong>musisz</strong> przeprowadzić <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próbę ciśnieniową</a> instalacji.</p>
                    <div class="highlight-box" style="border-left-color: var(--danger);">
                        💧 Wykonaj test wodą pod ciśnieniem <strong>4-6 barów</strong> przez minimum <strong>24 godziny</strong>. Manometr musi być dobrze widoczny! Najgorszą rzeczą, jaka może się przydarzyć, jest przeciek pod gotową, kosztowną podłogą dębową.
                    </div>
                </div>
            </div>
        </div>

        <div class="step-item">
            <div class="step-header" onclick="toggleStep(this)">
                <div class="step-number">5</div>
                <div class="step-title">Warstwa rozdzielcza – kluczowy moment</div>
                <div class="step-toggle">▼</div>
            </div>
            <div class="step-content">
                <div class="step-content-inner">
                    <p>Sposób wykonania tej warstwy zależy w pełni od tego, jaki materiał położysz na wierzchu:</p>
                    <div class="split-options">
                        <div class="option-card">
                            <h5>🪵 Jeśli kładziesz panele:</h5>
                            <p>Użyj specjalnej maty pod ogrzewanie podłogowe (np. z włókna poliestrowego o symbolu TC lub certyfikowanej folii perforowanej). <strong>Nigdy</strong> nie używaj standardowej pianki PE!</p>
                        </div>
                        <div class="option-card">
                            <h5>🧱 Jeśli kładziesz płytki:</h5>
                            <p>Ułóż dwie warstwy płyt gipsowo-włóknowych (np. 2x 12,5 mm) na kleju systemowym. Skręć je wkrętami uważając, by nie przebić rur! Wymaga to znajomości planu pętli.</p>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <div class="step-item">
            <div class="step-header" onclick="toggleStep(this)">
                <div class="step-number">6</div>
                <div class="step-title">Wygrzewanie wstępne</div>
                <div class="step-toggle">▼</div>
            </div>
            <div class="step-content">
                <div class="step-content-inner">
                    <p>Przed położeniem ostatecznych płytek lub paneli z drewna, koniecznie należy przeprowadzić protokolarne wygrzanie wstępne wylewki suchej.</p>
                    <div class="highlight-box" style="border-left-color: var(--success);">
                        📈 Proces zaczynamy od zasilania o temperaturze <strong>25°C</strong> i podnosimy ją o <strong>5°C dziennie</strong>, aż do osiągnięcia maksymalnej temperatury projektowej.
                    </div>
                    <p>Stabilizuje to naprężenia w suchym jastrychu i pozwala na bezpieczne wyschnięcie kleju montażowego.</p>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
// 1. ZABEZPIECZENIE DOMENOWE (Domain Lock)
!function(){document.addEventListener("DOMContentLoaded",function(){var e=window.location.hostname,t=["projekt-ogrzewania.pl","www.projekt-ogrzewania.pl","localhost","127.0.0.1",""];if(-1===t.indexOf(e)){var n=document.getElementById("steps-app-container");return n&&(n.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;"><span style="font-size: 48px; margin-bottom: 20px;">🔒</span><h3 style="margin-top:0; font-size: 24px;">Przewodnik chroniony prawem autorskim</h3><p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten interaktywny element 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>`),void 0}})}();

// 2. LOGIKA AKORDEONU
function toggleStep(element) {
    // Znajdź główny kontener klikniętego kroku
    const parent = element.parentElement;
    const content = parent.querySelector('.step-content');
    
    // Jeśli kliknięto w już otwarty - zamknij go
    if (parent.classList.contains('active')) {
        parent.classList.remove('active');
        content.style.maxHeight = null;
    } else {
        // Opcjonalne: Zamknij wszystkie inne (odkomentuj, jeśli chcesz by był otwarty tylko 1 na raz)
        /*
        const allItems = document.querySelectorAll('.step-item');
        allItems.forEach(item => {
            item.classList.remove('active');
            item.querySelector('.step-content').style.maxHeight = null;
        });
        */
        
        // Otwórz kliknięty
        parent.classList.add('active');
        content.style.maxHeight = content.scrollHeight + "px";
    }
}
</script>



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

.premium-concept-box {
    max-width: 900px;
    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);
}

.concept-text-area {
    padding: 35px 40px;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    border-bottom: 1px solid var(--border-color);
}

.concept-text-area h3 {
    margin: 0 0 15px 0;
    font-size: 24px;
    font-weight: 900;
    color: var(--primary);
}

.concept-text-area p {
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
    margin-bottom: 15px;
}

.concept-text-area p:last-child {
    margin-bottom: 0;
}

.highlight-text {
    background: #eff6ff;
    padding: 12px 20px;
    border-left: 4px solid var(--accent);
    border-radius: 0 12px 12px 0;
    font-weight: 600;
    color: var(--primary);
    margin: 20px 0;
}

/* INTERAKTYWNA SYMULACJA */
.simulation-area {
    padding: 35px 40px;
    background: #ffffff;
}

.sim-title {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: #94a3b8;
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: block;
    text-align: center;
}

.time-control {
    background: var(--bg-light);
    padding: 20px 30px;
    border-radius: 16px;
    margin-bottom: 30px;
    border: 1px solid var(--border-color);
}

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

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

.sun-status {
    font-size: 14px;
    font-weight: 700;
    padding: 6px 12px;
    border-radius: 8px;
    background: #fff;
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
    transition: all 0.3s;
}

input[type=range] { width: 100%; height: 8px; background: #cbd5e1; border-radius: 10px; appearance: none; outline: none; }
input[type=range]::-webkit-slider-thumb { appearance: none; width: 26px; height: 26px; background: var(--accent); border-radius: 50%; border: 4px solid white; box-shadow: 0 2px 8px rgba(0,0,0,0.2); cursor: pointer; }

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

.thermo-card {
    border: 2px solid var(--border-color);
    border-radius: 16px;
    padding: 25px 20px;
    text-align: center;
    transition: all 0.3s;
    position: relative;
    overflow: hidden;
}

.thermo-card.dry { border-color: #bfdbfe; background: #f8fafc; }
.thermo-card.wet { border-color: #e2e8f0; }

.thermo-title {
    font-size: 15px;
    font-weight: 800;
    margin-bottom: 15px;
    color: var(--primary);
}

.temp-display {
    font-size: 42px;
    font-weight: 900;
    line-height: 1;
    margin-bottom: 10px;
    transition: color 0.3s;
}

.temp-status {
    font-size: 13px;
    font-weight: 600;
    color: #64748b;
    min-height: 40px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.math-conclusion {
    padding: 25px 40px;
    background: #f8fafc;
    border-top: 1px solid var(--border-color);
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
}

.math-conclusion strong { color: var(--primary); }

@media (max-width: 768px) {
    .concept-text-area, .simulation-area, .math-conclusion { padding: 25px 20px; }
    .thermo-grid { grid-template-columns: 1fr; gap: 15px; }
    .time-control { padding: 20px; }
}
</style>

<div class="premium-concept-box" id="concept-app-container">
    
    <div class="concept-text-area">
        <h3>Opłacalność eksploatacji – czy sucha podłogówka jest droższa w użytkowaniu?</h3>
        <p>Istnieje mit, że system suchy zużywa więcej energii niż beton. <strong>To nieprawda.</strong> Roczne zużycie energii na ogrzewanie zależy od strat ciepła budynku, a nie od rodzaju jastrychu.</p>
        
        <div class="highlight-text">
            <strong>Przewaga systemu suchego:</strong> W okresach przejściowych (kwiecień, październik), gdy słońce dogrzewa dom, tradycyjna wylewka betonowa dalej grzeje (bo jest nagrzana do 26°C). Musimy otwierać okna, marnując ciepło.
        </div>
        
        <p>System suchy wychładza się w 30 minut po wyłączeniu pompy, co pozwala na lepsze wykorzystanie zysków bytowych i słonecznych. Szacuje się, że w domach z dużymi przeszkleniami południowymi system suchy może dać <strong>5-8% oszczędności energii</strong> w skali roku w porównaniu do ciężkiej wylewki.</p>
    </div>

    <div class="simulation-area">
        <span class="sim-title">Wizualizacja: Wiosenny dzień (okna na południe)</span>
        
        <div class="time-control">
            <div class="time-header">
                <div class="time-label">Godzina: <span id="time-val" style="color: var(--accent); font-size: 20px;">08:00</span></div>
                <div class="sun-status" id="sun-badge">☁️ Poranek (Chłodno)</div>
            </div>
            <input type="range" id="time-slider" min="8" max="18" step="1" value="8">
        </div>

        <div class="thermo-grid">
            <div class="thermo-card dry">
                <div class="thermo-title">System Suchy (Lekki)</div>
                <div class="temp-display" id="temp-dry" style="color: var(--success);">21°C</div>
                <div class="temp-status" id="status-dry">Ogrzewanie działa. Idealna temperatura.</div>
            </div>
            
            <div class="thermo-card wet">
                <div class="thermo-title">System Mokry (Beton)</div>
                <div class="temp-display" id="temp-wet" style="color: var(--success);">21°C</div>
                <div class="temp-status" id="status-wet">Ogrzewanie działa. Idealna temperatura.</div>
            </div>
        </div>
    </div>

    <div class="math-conclusion">
        <strong>Przykład wyliczenia:</strong> Dom 150 m², zapotrzebowanie 50 kWh/m²/rok. Koszt ogrzewania pompą ciepła to ok. 2500 zł rocznie. Oszczędność (8%) wynosi <strong>200 zł rocznie</strong>.<br><br>
        <strong>Czy warto?</strong> Różnica w cenie instalacji dla 150 m² wynosi ok. 15 000 zł na starcie. Zwrot z samych oszczędności energetycznych trwałby 75 lat. Oznacza to, że system suchy wybiera się <strong>NIE dla oszczędności na rachunkach</strong>, ale dla rozwiązania problemu konstrukcyjnego (waga, wysokość) lub czasu realizacji.
    </div>

</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)) {
        document.getElementById('concept-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten interaktywny moduł jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany na tę stronę 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>
        `;
        return; 
    }

    // LOGIKA SYMULACJI CZASU I TEMPERATURY
    const slider = document.getElementById("time-slider");
    const timeVal = document.getElementById("time-val");
    const sunBadge = document.getElementById("sun-badge");
    
    const tempDry = document.getElementById("temp-dry");
    const statusDry = document.getElementById("status-dry");
    
    const tempWet = document.getElementById("temp-wet");
    const statusWet = document.getElementById("status-wet");

    function updateSimulation() {
        const hour = parseInt(slider.value);
        timeVal.innerText = (hour < 10 ? "0" + hour : hour) + ":00";
        
        // Logika dla systemu suchego (idealnie trzyma zadaną temp ok 21-22C)
        // Logika dla wylewki (przegrzewa się, gdy wyjdzie słońce)
        
        if (hour >= 8 && hour <= 10) {
            sunBadge.innerHTML = "☁️ Poranek (Chłodno)";
            sunBadge.style.color = "#64748b";
            sunBadge.style.background = "#f1f5f9";
            
            tempDry.innerText = "21°C";
            tempDry.style.color = "var(--success)";
            statusDry.innerText = "Ogrzewanie włączone. Podłoga grzeje.";
            
            tempWet.innerText = "21°C";
            tempWet.style.color = "var(--success)";
            statusWet.innerText = "Ogrzewanie włączone. Wylewka się ładuje.";
        } 
        else if (hour >= 11 && hour <= 15) {
            sunBadge.innerHTML = "☀️ Silne słońce przez okna";
            sunBadge.style.color = "#b45309";
            sunBadge.style.background = "#fef3c7";
            
            tempDry.innerText = "22°C";
            tempDry.style.color = "var(--success)";
            statusDry.innerHTML = "Termostat wyłącza pompę. <strong>Podłoga natychmiast stygnie</strong>. Brak przegrzewania.";
            
            // Wylewka przegrzewa pokój
            let wetT = 21 + (hour - 10) * 1.5; 
            if(wetT > 25) wetT = 25; // max 25C
            
            tempWet.innerText = wetT + "°C";
            tempWet.style.color = "var(--danger)";
            statusWet.innerHTML = "Pompa wyłączona, ale <strong>nagrzany beton wciąż oddaje ciepło</strong>. Otwierasz okna by przewietrzyć!";
        }
        else if (hour > 15) {
            sunBadge.innerHTML = "🌙 Wieczór (Słońce zaszło)";
            sunBadge.style.color = "#4338ca";
            sunBadge.style.background = "#e0e7ff";
            
            tempDry.innerText = "21°C";
            tempDry.style.color = "var(--success)";
            statusDry.innerText = "Szybki start ogrzewania. Komfort zachowany.";
            
            tempWet.innerText = "22°C";
            tempWet.style.color = "var(--warning)";
            statusWet.innerText = "Temperatura powoli spada. Powolny rozruch wylewki.";
        }
    }

    slider.addEventListener("input", updateSimulation);
    updateSimulation(); // init
});
</script>



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

.premium-summary-box {
    max-width: 900px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: linear-gradient(to bottom, #ffffff, var(--bg-light));
    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);
}

.summary-header {
    padding: 40px 40px 20px 40px;
    text-align: center;
}

.summary-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #1e293b;
    color: #ffffff;
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.summary-header h3 {
    margin: 0 0 20px 0;
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    line-height: 1.3;
}

.summary-header p {
    font-size: 16px;
    line-height: 1.7;
    color: #475569;
    max-width: 750px;
    margin: 0 auto;
}

.summary-header p strong {
    color: var(--primary);
}

/* INTERAKTYWNE KARTY - 3 FILARY */
.pillars-container {
    padding: 10px 40px 30px 40px;
}

.pillars-title {
    text-align: center;
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: var(--accent);
    letter-spacing: 1px;
    margin-bottom: 25px;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.pillars-title::before, .pillars-title::after {
    content: "";
    height: 2px;
    width: 40px;
    background: #bfdbfe;
    border-radius: 2px;
}

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

.pillar-card {
    background: #ffffff;
    border: 2px solid var(--border-color);
    border-radius: 16px;
    padding: 30px 20px;
    text-align: center;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    cursor: default;
    z-index: 1;
}

.pillar-card:hover {
    transform: translateY(-10px);
    border-color: var(--accent);
    box-shadow: 0 20px 25px -5px rgba(37, 99, 235, 0.1), 0 10px 10px -5px rgba(37, 99, 235, 0.04);
    z-index: 2;
}

.pillar-icon {
    font-size: 32px;
    margin-bottom: 15px;
    display: inline-block;
    transition: transform 0.4s;
}

.pillar-card:hover .pillar-icon {
    transform: scale(1.15) rotate(5deg);
}

.pillar-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--primary);
    margin-bottom: 10px;
}

.pillar-desc {
    font-size: 13px;
    color: #64748b;
    line-height: 1.5;
    margin: 0;
}

.pillar-card:hover .pillar-title {
    color: var(--accent);
}

.summary-footer {
    background: #ffffff;
    padding: 35px 40px;
    border-top: 1px solid var(--border-color);
    text-align: center;
}

.summary-footer p {
    font-size: 15px;
    line-height: 1.7;
    color: #334155;
    margin: 0;
    font-weight: 500;
}

.summary-footer p strong {
    color: var(--accent);
    font-weight: 800;
}

@media (max-width: 768px) {
    .summary-header { padding: 30px 20px 15px 20px; }
    .summary-header h3 { font-size: 24px; }
    .pillars-container { padding: 10px 20px 30px 20px; }
    .pillars-grid { grid-template-columns: 1fr; gap: 15px; }
    .pillar-card { padding: 25px 20px; }
    .pillar-card:hover { transform: translateY(-5px); }
    .summary-footer { padding: 25px 20px; }
}
</style>

<div class="premium-summary-box" id="summary-app-container">
    
    <div class="summary-header">
        <div class="summary-badge">Podsumowanie</div>
        <h2>Rozwiązanie do zadań specjalnych</h2>
        <p>Ogrzewanie podłogowe wodne bez wylewki to wyrafinowane narzędzie w rękach świadomego inwestora i projektanta. Nie jest to technologia dla każdego nowego domu – tam króluje ekonomiczny beton. Jest to jednak <strong>jedyna słuszna droga, gdy strop woła o litość, a czas goni.</strong></p>
    </div>

    <div class="pillars-container">
        <div class="pillars-title">Trzy Filary Sukcesu</div>
        
        <div class="pillars-grid">
            <div class="pillar-card">
                <div class="pillar-icon">🛡️</div>
                <div class="pillar-title">Aluminium</div>
                <p class="pillar-desc">Metalowe lamele to serce układu. Bez nich nie ma mowy o równomiernym rozprowadzaniu ciepła pod podłogą.</p>
            </div>
            
            <div class="pillar-card">
                <div class="pillar-icon">🌡️</div>
                <div class="pillar-title">Niska temperatura</div>
                <p class="pillar-desc">Zasilanie na poziomie <strong>40°C</strong> to ściana, której bezwzględnie nie wolno przekraczać ze względów bezpieczeństwa.</p>
            </div>
            
            <div class="pillar-card">
                <div class="pillar-icon">📏</div>
                <div class="pillar-title">Równe podłoże</div>
                <p class="pillar-desc">Wylewka musi być idealnie płaska. W technologii suchej tolerancja na nierówności jest <strong>absolutnie zerowa</strong>.</p>
            </div>
        </div>
    </div>

    <div class="summary-footer">
        <p>Jeśli te rygorystyczne warunki zostaną spełnione, otrzymasz komfortową podłogę, która nagrzewa się w kilkanaście minut i waży tyle, co grubszy dywan. To technologia, która w starym budownictwie i nowoczesnym drewnianym szkielecie sprawdza się <strong>bezkonkurencyjnie</strong>.</p>
    </div>

</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)) {
        document.getElementById('summary-app-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;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">To podsumowanie jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostało skopiowane 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: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
    --border-color: #e2e8f0;
}

.premium-myth-box {
    max-width: 1050px;
    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.1);
    border: 1px solid var(--border-color);
    overflow: hidden;
    color: var(--primary);
}

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

.myth-header h3 {
    margin: 0 0 15px 0;
    font-size: 26px;
    font-weight: 900;
}

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

.myth-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
    padding: 40px;
    background: #ffffff;
}

/* FLIP CARD STYLES */
.flip-card {
    background-color: transparent;
    width: 100%;
    min-height: 340px;
    perspective: 1000px;
    cursor: pointer;
}

.flip-card-inner {
    position: relative;
    width: 100%;
    height: 100%;
    text-align: center;
    transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1);
    transform-style: preserve-3d;
}

.flip-card.is-flipped .flip-card-inner {
    transform: rotateY(180deg);
}

.flip-card-front, .flip-card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    border-radius: 20px;
    padding: 30px 20px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    border: 2px solid transparent;
}

.flip-card-front {
    background-color: #fef2f2;
    border-color: #fecaca;
    color: var(--danger);
}

.flip-card-back {
    background-color: #f0fdf4;
    border-color: #bbf7d0;
    color: var(--success);
    transform: rotateY(180deg);
}

.card-icon {
    font-size: 42px;
    margin-bottom: 15px;
    line-height: 1;
}

.card-title {
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 10px;
    opacity: 0.8;
}

.card-text {
    font-size: 16px;
    font-weight: 700;
    line-height: 1.5;
    margin: 0;
}

.flip-card-back .card-title {
    color: var(--success);
}

.flip-card-back .card-text {
    font-size: 14px;
    font-weight: 500;
    color: #166534;
    line-height: 1.6;
}

.flip-hint {
    margin-top: 20px;
    font-size: 12px;
    font-weight: 700;
    background: rgba(255,255,255,0.8);
    padding: 6px 16px;
    border-radius: 20px;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

.myth-summary {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #eff6ff;
    border-radius: 20px;
    border-left: 6px solid var(--accent);
}

.myth-summary h4 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary);
}

.myth-summary p {
    margin: 0;
    font-size: 15px;
    line-height: 1.7;
    color: #334155;
}

@media (max-width: 900px) {
    .myth-grid { grid-template-columns: 1fr; gap: 20px; padding: 25px 20px; }
    .flip-card { min-height: 280px; }
    .myth-summary { margin: 0 20px 25px 20px; padding: 25px 20px; }
    .myth-header { padding: 25px 20px; }
}
</style>

<div class="premium-myth-box" id="dry-system-myths-app">
    <div class="myth-header">
        <h3>Fakty i Mity: Ogrzewanie Bez Wylewki</h3>
        <p>System suchy obrósł wieloma mitami, które powielają nawet instalatorzy starej daty. Zanim zrezygnujesz z tej technologii na rzecz betonu, sprawdź jak jest naprawdę. <strong>Kliknij kartę, aby poznać prawdę.</strong></p>
    </div>

    <div class="myth-grid">
        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">🏗️</div>
                    <div class="card-title">MIT #1</div>
                    <p class="card-text">&#8222;Wylewka betonowa jest dużo lepsza. Przecież można ją wylać nawet na stary, drewniany strop w kamienicy.&#8221;</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">⚖️</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>To ryzyko katastrofy budowlanej.</strong> Mokra wylewka to obciążenie rzędu 150-180 kg/m². W 50-metrowym mieszkaniu daje to 7,5 tony! System suchy waży zaledwie 22-35 kg/m², co czyni go jedynym ratunkiem dla drewnianych stropów.</p>
                </div>
            </div>
        </div>

        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">💸</div>
                    <div class="card-title">MIT #2</div>
                    <p class="card-text">&#8222;System bez betonu natychmiast stygnie, więc piec musi ciągle pracować, co zużywa znacznie więcej energii!&#8221;</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">📉</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>To bzdura.</strong> Zużycie energii zależy od strat ciepła budynku. Co więcej, dzięki błyskawicznej reakcji, system suchy nie przegrzewa pomieszczeń wiosną, gdy słońce dogrzewa przez okna. Daje to nawet 5-8% oszczędności na rachunkach!</p>
                </div>
            </div>
        </div>

        <div class="flip-card" onclick="this.classList.toggle('is-flipped')">
            <div class="flip-card-inner">
                <div class="flip-card-front">
                    <div class="card-icon">📐</div>
                    <div class="card-title">MIT #3</div>
                    <p class="card-text">&#8222;Podłogówkę suchą kładzie się błyskawicznie. Układam styropian z rurkami na starym stropie i gotowe.&#8221;</p>
                    <div class="flip-hint" style="color: var(--danger)"><span>Odwróć kartę</span> ⤵</div>
                </div>
                <div class="flip-card-back">
                    <div class="card-icon">📏</div>
                    <div class="card-title">FAKT</div>
                    <p class="card-text"><strong>Tolerancja wynosi zero!</strong> Podłoże musi być absolutnie równe (max. 2mm na 2m). Jeśli położysz system na krzywym stropie, podłoga będzie &#8222;klawiszować&#8221;, stukać, a rury mogą wypaść z lameli. Cienka wylewka samopoziomująca jest niemal zawsze niezbędna.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="myth-summary">
        <h4>Podsumowując – czy warto rezygnować z betonu?</h4>
        <p>Ogrzewanie bez wylewki to precyzyjna inżynieria. Wymaga starannego przygotowania podłoża oraz bezwzględnego ograniczenia temperatury zasilania (maksymalnie 40-45°C). W zamian odwdzięcza się <strong>błyskawicznym nagrzewaniem (20-40 min)</strong>, brakiem 8-tygodniowych przestojów na schnięcie i, co najważniejsze, gwarantuje bezpieczeństwo starym, drewnianym konstrukcjom.</p>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x1f2a=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x64\x72\x79\x2d\x73\x79\x73\x74\x65\x6d\x2d\x6d\x79\x74\x68\x73\x2d\x61\x70\x70','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x1f2a[12]](_0x1f2a[11],function(){var _0x4b9c=window[_0x1f2a[1]][_0x1f2a[0]];var _0x2c3d=[_0x1f2a[2],_0x1f2a[3],_0x1f2a[4],_0x1f2a[5],_0x1f2a[6]];if(!_0x2c3d[_0x1f2a[7]](_0x4b9c)){document[_0x1f2a[10]](_0x1f2a[8])[_0x1f2a[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



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

.premium-questions {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
}

.qa-header {
    text-align: center;
    margin-bottom: 40px;
}

.qa-header h2 {
    font-size: 32px;
    font-weight: 900;
    color: var(--primary);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.qa-header p {
    font-size: 16px;
    line-height: 1.6;
    color: #475569;
    max-width: 700px;
    margin: 0 auto;
}

.qa-list {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.qa-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    transition: transform 0.2s, box-shadow 0.2s;
}

.qa-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
    border-color: #cbd5e1;
}

.question-title {
    font-size: 20px;
    font-weight: 800;
    color: var(--primary);
    margin: 0 0 20px 0;
    padding-bottom: 15px;
    border-bottom: 2px solid var(--bg-light);
    display: flex;
    gap: 15px;
}

.q-number {
    background: var(--primary);
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    flex-shrink: 0;
}

.answers-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.answer-box {
    padding: 20px;
    border-radius: 12px;
    border-left: 4px solid;
}

.answer-bad {
    background: #fef2f2;
    border-color: var(--danger);
}

.answer-good {
    background: #f0fdf4;
    border-color: var(--success);
}

.answer-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.answer-bad .answer-label { color: var(--danger); }
.answer-good .answer-label { color: var(--success); }

.answer-text {
    font-size: 15px;
    line-height: 1.6;
    color: #334155;
    margin: 0;
    font-style: italic;
}

.red-flags-section {
    margin-top: 50px;
    background: #fff1f2;
    border: 2px dashed #fecaca;
    border-radius: 20px;
    padding: 35px 40px;
}

.red-flags-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 20px;
}

.red-flags-header h3 {
    margin: 0;
    font-size: 24px;
    font-weight: 900;
    color: #9f1239;
}

.flags-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.flags-list li {
    position: relative;
    padding-left: 35px;
    font-size: 16px;
    line-height: 1.5;
    color: #7f1d1d;
    font-weight: 600;
}

.flags-list li::before {
    content: "✖";
    position: absolute;
    left: 0;
    top: 2px;
    color: var(--danger);
    font-size: 18px;
}

@media (max-width: 768px) {
    .answers-grid { grid-template-columns: 1fr; gap: 15px; }
    .qa-card { padding: 20px; }
    .question-title { font-size: 18px; line-height: 1.4; }
    .red-flags-section { padding: 25px 20px; }
    .red-flags-header h3 { font-size: 20px; }
}
</style>

<div class="premium-questions" id="qa-dry-system-installer">
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "Czy lamele aluminiowe są na pewno konieczne?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Absolutnie tak. Bez blachy aluminiowej rura schowana w styropianie nie odda ciepła na boki, co doprowadzi do efektu gorących i zimnych pasków na podłodze."
        }
      }, {
        "@type": "Question",
        "name": "Jak przygotujemy podłoże pod płyty systemowe?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Tolerancja wynosi zero. Przed rozpoczęciem układania musimy zweryfikować poziomy i w razie potrzeby wylać masę samopoziomującą, inaczej podłoga będzie stukać i klawiszować."
        }
      }, {
        "@type": "Question",
        "name": "Jaką temperaturę zasilania ustawimy na piecu lub pompie ciepła?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Z uwagi na brak wylewki, która działa jak bufor, nie możemy przekroczyć 40-45°C. System dodatkowo zabezpieczymy zaworem RTL, by chronić panele przed wypaczeniem."
        }
      }, {
        "@type": "Question",
        "name": "Jaki podkład damy pod panele laminowane?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zastosujemy specjalną, dedykowaną matę o minimalnym oporze cieplnym (np. certyfikowaną perforowaną). Zwykła pianka zablokowałaby przepływ ciepła."
        }
      }, {
        "@type": "Question",
        "name": "Kiedy i jak robimy próbę szczelności?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zanim przykryjemy instalację suchym jastrychem lub warstwą wykończeniową, napełniamy ją wodą (lub sprężonym powietrzem) pod ciśnieniem 4-6 barów i zostawiamy na min. 24h z manometrem."
        }
      }]
    }
    </script>
    
    <div class="qa-header">
        <h2>🏗️ 5 pytań, które „oddzielą ziarno od plew”</h2>
        <p>Montaż podłogówki bez wylewki nie wybacza błędów. Brak betonu oznacza, że pomyłki instalatora odczujesz na własnej skórze natychmiast. Oto lista pytań weryfikacyjnych. <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Opracowane przez inżynierów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="qa-list">
        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">1</span> „Czy lamele aluminiowe są na pewno konieczne?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„To tylko naciąganie na koszty. Rurka ułożona w zwykłym styropianie też grzeje, robiłem tak i nikt nie narzekał”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Absolutnie tak. Bez blachy aluminiowej rura schowana w styropianie (który jest izolatorem) nie odda ciepła na boki, co doprowadzi do efektu gorących i zimnych pasków na podłodze”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">2</span> „Jak przygotujemy podłoże pod płyty systemowe?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Położy się styropian, dociśnie suchym jastrychem, wejdą meble i jakoś się to uleży. Szkoda czasu na równanie”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Tolerancja wynosi zero. Przed rozpoczęciem układania musimy zweryfikować poziomy i w razie potrzeby wylać masę samopoziomującą, inaczej podłoga będzie stukać i klawiszować”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">3</span> „Jaką temperaturę zasilania ustawimy na pompie/piecu?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Ustawimy 50 stopni, żeby szybciej dom się nagrzewał, tak jak w normalnej wylewce”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Maksymalnie 40-45°C. System suchy nie ma betonu, ciepło idzie od razu w górę. Wyższa temperatura zniszczy panele i rozklei fugi. Musimy założyć zawór RTL”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">4</span> „Jaki podkład damy pod panele laminowane?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Zwykłą, tanią piankę poliuretanową albo matę wygłuszającą, żeby nie stukało. Nie ma znaczenia jaka”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Zastosujemy specjalną matę do podłogówki (np. perforowaną) o minimalnym oporze cieplnym. Zwykła pianka zablokowałaby przepływ ciepła i instalacja przestałaby działać”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">5</span> „Kiedy i jak robimy próbę szczelności?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Próba jest do wylewek, jak przykrywamy to suchymi płytami, to nie trzeba. Odpalimy na koniec i zobaczymy”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Zanim przykryjemy instalację suchym jastrychem, napełniamy ją wodą pod ciśnieniem 4-6 barów i zostawiamy na min. 24h z manometrem. Musimy mieć 100% pewności”.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="red-flags-section">
        <div class="red-flags-header">
            <span style="font-size: 32px;">🚩</span>
            <h3>Czerwone flagi (Uciekaj, jeśli to usłyszysz!)</h3>
        </div>
        <ul class="flags-list">
            <li>„Lamele aluminiowe to ściema, ja kładę rurkę w sam styropian i też oddaje ciepło.” (Mit &#8211; instalacja z rurką w styropianie ma ułamek mocy nominalnej).</li>
            <li>„Opór cieplny paneli? Pan się nie przejmuje, podkręcimy temperaturę zasilania na 55°C i przebije się przez gruby dywan.”</li>
            <li>„Projekt ogrzewania suchego nie jest potrzebny, tutaj się rzuca rury wszędzie tak samo co 20 centymetrów.”</li>
        </ul>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x5c8f=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x71\x61\x2d\x64\x72\x79\x2d\x73\x79\x73\x74\x65\x6d\x2d\x69\x6e\x73\x74\x61\x6c\x6c\x65\x72','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x5c8f[12]](_0x5c8f[11],function(){var _0x2b3c=window[_0x5c8f[1]][_0x5c8f[0]];var _0x4d1e=[_0x5c8f[2],_0x5c8f[3],_0x5c8f[4],_0x5c8f[5],_0x5c8f[6]];if(!_0x4d1e[_0x5c8f[7]](_0x2b3c)){document[_0x5c8f[10]](_0x5c8f[8])[_0x5c8f[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-wodne-bez-wylewki/">Ogrzewanie podłogowe wodne bez wylewki.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Frezowanie ogrzewania podłogowego w starym domu.</title>
		<link>https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 09:03:02 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Budowa i remonty]]></category>
		<category><![CDATA[Frezowanie posadzki]]></category>
		<category><![CDATA[Modernizacja instalacji]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Porady budowlane]]></category>
		<category><![CDATA[Porady dla domu]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Porady inwestycyjne]]></category>
		<category><![CDATA[Remont]]></category>
		<category><![CDATA[Remont domu]]></category>
		<category><![CDATA[Remont i modernizacja]]></category>
		<category><![CDATA[Remont starego domu]]></category>
		<category><![CDATA[Technologia budowlana]]></category>
		<category><![CDATA[Technologia w budownictwie]]></category>
		<category><![CDATA[Technologie budowlane]]></category>
		<category><![CDATA[bezpyłowe frezowanie]]></category>
		<category><![CDATA[frezowanie betonu]]></category>
		<category><![CDATA[frezowanie podłogówki]]></category>
		<category><![CDATA[instalacja grzewcza]]></category>
		<category><![CDATA[koszty frezowania]]></category>
		<category><![CDATA[modernizacja ogrzewania]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[podłogówka w starym domu]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[remont]]></category>
		<category><![CDATA[remont starego domu]]></category>
		<category><![CDATA[stara wylewka]]></category>
		<category><![CDATA[system suchy]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4152</guid>

					<description><![CDATA[<p>Remont starego budynku często wiąże się z trudnymi decyzjami, a jedną z najważniejszych jest wybór odpowiedniego systemu grzewczego. Wiele osób marzy o komfortowej, ciepłej podłodze, jednak przeraża je wizja skuwania starych wylewek, wywożenia ton gruzu i drastycznego podnoszenia poziomu posadzki, co niesie za sobą konieczność przerabiania progów czy skracania drzwi. Na szczęście istnieje nowoczesna, znacznie mniej inwazyjna alternatywa. Frezowanie ogrzewania podłogowego w starym domu to innowacyjna metoda, która pozwala ukryć rury grzewcze bezpośrednio w istniejącym już betonie. W tym obszernym poradniku przyjrzymy się z bliska, jak krok po kroku przebiega ten proces. Sprawdzimy, z jakimi realnymi kosztami musisz się liczyć, czy prace faktycznie przebiegają bezpyłowo oraz w jakich sytuacjach ta technologia sprawdzi się najlepiej.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/">Frezowanie ogrzewania podłogowego w starym domu.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #082f49; /* Głęboki granat */
    --rk-intro-brand: #06b6d4; /* Techniczny cyjan */
    --rk-intro-brand-light: #cffafe;
    --rk-intro-accent: #f43f5e; /* Róż/Czerwień do pokazania "starego" */
    --rk-intro-bg: #f8fafc;
    --rk-intro-card: #ffffff;
    --rk-intro-text: #334155;
    --rk-intro-border: #e2e8f0;
}

.rk-intro-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-intro-card);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(8, 47, 73, 0.15);
    border: 1px solid rgba(6, 182, 212, 0.3);
    overflow: hidden;
}

/* Sekcja Wprowadzająca (Header & Text) */
.rk-intro-header {
    background: linear-gradient(145deg, var(--rk-intro-dark) 0%, #0f172a 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
}

.rk-intro-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-intro-brand) 0%, #3b82f6 100%);
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(6, 182, 212, 0.2);
    color: #22d3ee;
    padding: 6px 16px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(34, 211, 238, 0.3);
}

.rk-intro-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-intro-paragraph {
    font-size: 16px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-intro-paragraph strong {
    color: #ffffff;
    font-weight: 700;
}

.rk-intro-link {
    color: var(--rk-intro-brand);
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-intro-brand);
    transition: all 0.3s;
}

.rk-intro-link:hover {
    color: #67e8f9;
    border-bottom-style: solid;
}

/* Moduł Interaktywny */
.rk-intro-interactive {
    padding: 40px 50px;
    background: var(--rk-intro-bg);
}

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

.rk-sim-btn {
    flex: 1;
    max-width: 250px;
    padding: 16px 20px;
    border: 2px solid var(--rk-intro-border);
    background: #ffffff;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-intro-text);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-sim-btn:hover {
    border-color: #cbd5e1;
    background: #f1f5f9;
}

.rk-sim-btn.active[data-mode="old"] {
    border-color: var(--rk-intro-accent);
    background: #fff1f2;
    color: #9f1239;
    box-shadow: 0 10px 20px -5px rgba(244, 63, 94, 0.15);
}

.rk-sim-btn.active[data-mode="new"] {
    border-color: var(--rk-intro-brand);
    background: var(--rk-intro-brand-light);
    color: var(--rk-intro-dark);
    box-shadow: 0 10px 20px -5px rgba(6, 182, 212, 0.2);
}

/* Ekran Symulatora (Grid: Lewo animacja, Prawo parametry) */
.rk-sim-screen {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-intro-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 5px 15px rgba(0,0,0,0.02);
}

/* Część wizualna (SVG) */
.rk-sim-visual {
    background: var(--rk-intro-dark);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    height: 100%;
    min-height: 180px;
}

.rk-svg-layer {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    transition: opacity 0.4s ease, transform 0.4s ease;
}

.rk-svg-layer.hidden {
    opacity: 0;
    pointer-events: none;
    transform: scale(0.95);
}

/* Animacje SVG - Kucie (Old) */
.anim-shake { animation: jackhammer 0.1s infinite; transform-origin: bottom center; }
.anim-debris { animation: flyDebris 1s infinite linear; }
@keyframes jackhammer { 0% { transform: translateY(0); } 50% { transform: translateY(-3px); } 100% { transform: translateY(0); } }
@keyframes flyDebris { 0% { transform: translate(0,0) rotate(0deg); opacity: 1; } 100% { transform: translate(30px, -30px) rotate(180deg); opacity: 0; } }

/* Animacje SVG - Frezowanie (New) - NAPRAWIONY SKACZĄCY EFEKT */
.anim-spin { 
    animation: spinBlade 0.8s linear infinite; 
    /* Sztywny matematyczny środek obrotu dla cx=0 cy=0 */
    transform-origin: 0px 0px; 
    transform-box: fill-box;
}
.anim-cut-line { stroke-dasharray: 100; stroke-dashoffset: 100; transition: stroke-dashoffset 2s ease-out; }
.rk-sim-btn.active[data-mode="new"] ~ .rk-sim-screen .anim-cut-line { stroke-dashoffset: 0; }
@keyframes spinBlade { 
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); } 
}

/* Część z parametrami (Grid) */
.rk-param-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-param-box {
    background: var(--rk-intro-bg);
    padding: 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-intro-border);
    transition: all 0.3s;
}

.rk-param-label {
    font-size: 13px;
    color: #64748b;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 8px;
}

.rk-param-value {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    display: flex;
    align-items: baseline;
    gap: 5px;
}

.rk-param-value.alert { color: var(--rk-intro-accent); }
.rk-param-value.success { color: var(--rk-intro-brand); }

/* Opisy pod kafelkami */
.rk-sim-desc {
    grid-column: 1 / -1;
    font-size: 14px;
    color: var(--rk-intro-text);
    line-height: 1.6;
    margin-top: 10px;
    padding-top: 20px;
    border-top: 1px solid var(--rk-intro-border);
}

@media (max-width: 768px) {
    .rk-intro-header, .rk-intro-interactive { padding: 30px 25px; }
    .rk-sim-controls { flex-direction: column; }
    .rk-sim-btn { max-width: 100%; }
    .rk-sim-screen { grid-template-columns: 1fr; }
    .rk-sim-visual { min-height: 150px; }
    .rk-param-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-intro-title { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Frezowanie ogrzewania podłogowego – Bezpyłowa technologia modernizacji",
    "description": "Przełom w inżynierii instalacyjnej. Technologia wycinania kanałów pod rury grzewcze eliminuje potrzebę skuwania wylewek i radykalnie zmniejsza bezwładność cieplną.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-tech-compare",
    "name": "Analiza porównawcza: Frezowanie vs Kucie starej wylewki",
    "description": "Zestawienie parametrów operacyjnych i czasowych dla procesu modernizacji systemu grzewczego na układ niskotemperaturowy.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "frezowanie ogrzewania podłogowego",
      "podłogówka bez kucia jastrychu",
      "redukcja bezwładności cieplnej",
      "bezpyłowa technologia grzewcza",
      "modernizacja pod pompę ciepła"
    ],
    "measurementTechnique": "Analiza czasowo-kosztowa i termiczna na podstawie realizacji instalatorskich.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Metoda tradycyjna: Wymaga skuwania, generuje gruz, czas nagrzewania ok. 4 godzin.",
        "Metoda bezpyłowa (frezowanie): Brak gruzu, rury w nacięciach, czas nagrzewania poniżej 45 minut."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-simulator",
    "name": "Symulator Modernizacji Podłogi",
    "description": "Narzędzie pozwalające przełączać i porównywać inżynierskie parametry kucia starej wylewki z innowacyjną technologią frezowania diamentowego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-intro-container" id="rk-tech-compare-app">
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 20V10"></path><path d="M18 20V4"></path><path d="M6 20v-4"></path></svg>
            Technologia
        </div>
        <h2 class="rk-intro-title">Frezowanie ogrzewania podłogowego w starym domu</h2>
        <p class="rk-intro-paragraph">
            To <strong>bezpyłowa technologia modernizacji instalacji grzewczej</strong>, polegająca na wycinaniu kanałów montażowych bezpośrednio w istniejącym podłożu betonowym lub anhydrytowym w celu ułożenia rur grzewczych bez podnoszenia poziomu podłogi. 
        </p>
        <p class="rk-intro-paragraph" style="margin-top: 15px;">
            Metoda ta pozwala na <a href="https://projekt-ogrzewania.pl/zalety-ogrzewania-podlogowego-w-porownaniu-do-tradycyjnych-grzejnikow/" class="rk-intro-link">eliminację tradycyjnych grzejników wysokotemperaturowych</a> w budynkach poddawanych termomodernizacji, umożliwiając efektywną współpracę z pompami ciepła. Rozwiązanie to drastycznie skraca czas remontu, <strong>redukuje bezwładność cieplną układu</strong> i eliminuje konieczność kłopotliwego skuwania starych wylewek, co stanowi przełom w inżynierii instalacyjnej dla obiektów poddawanych remontom kapitalnym.
        </p>
    </div>

    <div class="rk-intro-interactive">
        <div class="rk-sim-controls">
            <button class="rk-sim-btn" data-mode="old" onclick="rkSwitchTech('old')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
                Tradycyjne Kucie
            </button>
            <button class="rk-sim-btn active" data-mode="new" onclick="rkSwitchTech('new')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                Frezowanie Bezpyłowe
            </button>
        </div>

        <div class="rk-sim-screen">
            <div class="rk-sim-visual">
                <svg id="rk-svg-old" class="rk-svg-layer hidden" viewBox="0 0 100 100">
                    <rect x="10" y="70" width="80" height="20" fill="#475569" rx="2"/>
                    <path d="M 30 70 L 40 90 M 50 70 L 60 90 M 70 70 L 55 90" stroke="#1e293b" stroke-width="3" stroke-linecap="round"/>
                    <g class="anim-shake">
                        <path d="M 45 30 L 55 30 L 52 70 L 48 70 Z" fill="#94a3b8"/>
                        <rect x="40" y="20" width="20" height="10" fill="#f43f5e" rx="2"/>
                        <rect x="35" y="10" width="30" height="10" fill="#334155" rx="2"/>
                    </g>
                    <circle class="anim-debris" cx="50" cy="70" r="3" fill="#cbd5e1"/>
                    <circle class="anim-debris" cx="55" cy="70" r="2" fill="#cbd5e1" style="animation-delay: 0.2s;"/>
                    <circle class="anim-debris" cx="45" cy="70" r="4" fill="#64748b" style="animation-delay: 0.4s;"/>
                </svg>

                <svg id="rk-svg-new" class="rk-svg-layer" viewBox="0 0 100 100">
                    <rect x="10" y="70" width="80" height="20" fill="#cbd5e1" rx="2"/>
                    <path class="anim-cut-line" d="M 10 70 L 90 70" fill="none" stroke="#f8fafc" stroke-width="8" stroke-linecap="square"/>
                    <path class="anim-cut-line" d="M 10 75 L 90 75" fill="none" stroke="#06b6d4" stroke-width="4" stroke-linecap="square" style="transition-delay: 0.2s;"/>
                    
                    <g transform="translate(50, 60)">
                        <g class="anim-spin">
                            <circle cx="0" cy="0" r="25" fill="none" stroke="#06b6d4" stroke-width="6" stroke-dasharray="15.7 15.7"/>
                            <circle cx="0" cy="0" r="8" fill="#082f49"/>
                            <circle cx="0" cy="0" r="3" fill="#ffffff"/>
                        </g>
                        <path d="M -35 0 C -35 -25 -15 -35 0 -35 L 0 -10 Z" fill="#334155" opacity="0.9"/>
                        <rect x="-35" y="-60" width="12" height="40" fill="#475569" rx="2"/>
                    </g>
                </svg>
            </div>

            <div class="rk-param-data">
                <div class="rk-param-grid" id="rk-data-old" style="display: none;">
                    <div class="rk-param-box">
                        <div class="rk-param-label">Gruz i Pył</div>
                        <div class="rk-param-value alert">~150 kg/m²</div>
                    </div>
                    <div class="rk-param-box">
                        <div class="rk-param-label">Bezwładność po wylaniu</div>
                        <div class="rk-param-value alert">> 4 godziny</div>
                    </div>
                    <div class="rk-param-box">
                        <div class="rk-param-label">Wysokość posadzki</div>
                        <div class="rk-param-value alert">+ 65 mm</div>
                    </div>
                    <div class="rk-param-box">
                        <div class="rk-param-label">Ryzyko inwestycyjne</div>
                        <div class="rk-param-value alert">Wysokie</div>
                    </div>
                    <div class="rk-sim-desc">
                        Decyzja o <a href="https://projekt-ogrzewania.pl/ogrzewanie-podlogowe-w-remontowanym-budynku-czy-warto/" class="rk-intro-link">rozkuwaniu starych wylewek</a> wiąże się z ogromnym nakładem pracy, potężną ilością gruzu i często nieoczekiwanymi kosztami po zerwaniu podłoża (np. uszkodzeniem rur kanalizacyjnych).
                    </div>
                </div>

                <div class="rk-param-grid" id="rk-data-new">
                    <div class="rk-param-box">
                        <div class="rk-param-label">Gruz i Pył</div>
                        <div class="rk-param-value success">Brak (Odciąg)</div>
                    </div>
                    <div class="rk-param-box">
                        <div class="rk-param-label">Czas stabilizacji ciepła</div>
                        <div class="rk-param-value success">< 45 minut</div>
                    </div>
                    <div class="rk-param-box">
                        <div class="rk-param-label">Podniesienie podłogi</div>
                        <div class="rk-param-value success">0 mm</div>
                    </div>
                    <div class="rk-param-box">
                        <div class="rk-param-label">Wydajność dla Pompy Ciepła</div>
                        <div class="rk-param-value success">Maksymalna</div>
                    </div>
                    <div class="rk-sim-desc">
                        Kanały nacinane są tarczą diamentową z odsysaniem urobku. Cienkowarstwowe przykrycie rury (<a href="https://projekt-ogrzewania.pl/ile-czasu-nagrzewa-sie-podlogowka/" class="rk-intro-link">drastyczny spadek bezwładności</a>) sprawia, że podłoga reaguje na sygnał z termostatu błyskawicznie, jak w systemach lekkich suchych.
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie przed kradzieżą (bez H2/H3 w alercie)
document.addEventListener('DOMContentLoaded', function() {
    var loc = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (allowedDomains.indexOf(loc) === -1) {
        var wrap = document.getElementById('rk-tech-compare-app');
        if (wrap) {
            wrap.innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#f43f5e; border-radius:20px; border: 2px solid #f43f5e; font-weight:800; font-family:sans-serif;">Wykryto naruszenie licencji. Kod udostępniony wyłącznie dla domeny projekt-ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulatora
function rkSwitchTech(mode) {
    // Buttons
    var btns = document.querySelectorAll('.rk-sim-btn');
    btns.forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelector('.rk-sim-btn[data-mode="' + mode + '"]').classList.add('active');

    // SVG
    document.getElementById('rk-svg-old').classList.add('hidden');
    document.getElementById('rk-svg-new').classList.add('hidden');
    
    // Data Grids
    document.getElementById('rk-data-old').style.display = 'none';
    document.getElementById('rk-data-new').style.display = 'none';

    // Activate selected
    if (mode === 'old') {
        document.getElementById('rk-svg-old').classList.remove('hidden');
        document.getElementById('rk-data-old').style.display = 'grid';
    } else {
        // Mały delay na reset animacji rysowania rury (stroke-dashoffset)
        var newSvg = document.getElementById('rk-svg-new');
        newSvg.classList.remove('hidden');
        var line = newSvg.querySelector('.anim-cut-line');
        if(line) {
            line.style.transition = 'none';
            line.style.strokeDashoffset = '100';
            setTimeout(function() {
                line.style.transition = 'stroke-dashoffset 2s ease-out';
                line.style.strokeDashoffset = '0';
            }, 50);
        }
        document.getElementById('rk-data-new').style.display = 'grid';
    }
}
</script>



<style>
:root {
    --rk-diag-dark: #111827;
    --rk-diag-card: #ffffff;
    --rk-diag-brand: #3b82f6; /* Inżynierski niebieski */
    --rk-diag-success: #10b981; /* Bezpieczna wylewka */
    --rk-diag-warning: #f59e0b; /* Wylewka na styk */
    --rk-diag-danger: #ef4444; /* Krytycznie cienka */
    --rk-diag-bg: #f3f4f6;
    --rk-diag-text: #374151;
    --rk-diag-border: #e5e7eb;
}

.rk-diag-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-diag-card);
    border-radius: 20px;
    box-shadow: 0 15px 35px -5px rgba(17, 24, 39, 0.1);
    border: 1px solid rgba(59, 130, 246, 0.2);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-diag-header {
    background: var(--rk-diag-dark);
    background-image: radial-gradient(circle at top right, #1f2937 0%, transparent 50%);
    padding: 40px 50px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-diag-brand);
}

.rk-diag-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(59, 130, 246, 0.2);
    color: #93c5fd;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
    border: 1px solid rgba(147, 197, 253, 0.2);
}

.rk-diag-title {
    font-size: 26px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
}

.rk-diag-title span { color: var(--rk-diag-brand); }

.rk-diag-intro {
    font-size: 15px;
    line-height: 1.8;
    color: #9ca3af;
    margin: 0;
}

.rk-diag-intro strong {
    color: #f3f4f6;
    font-weight: 700;
}

.rk-diag-link {
    color: #60a5fa;
    text-decoration: none;
    border-bottom: 1px dashed #60a5fa;
    transition: all 0.3s;
}

.rk-diag-link:hover {
    color: #93c5fd;
    border-bottom-style: solid;
}

/* Moduł Interaktywny (Symulator) */
.rk-diag-interactive {
    padding: 40px 50px;
    background: var(--rk-diag-bg);
}

.rk-diag-sim-wrapper {
    display: grid;
    grid-template-columns: 1fr 300px;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-diag-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

/* SVG Wizualizacja */
.rk-diag-visual {
    background: #f8fafc;
    border-radius: 12px;
    padding: 20px;
    border: 2px dashed #cbd5e1;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 220px;
    overflow: hidden;
}

.rk-diag-svg {
    width: 100%;
    height: 100%;
    max-width: 300px;
}

/* Elementy SVG z CSS Transitions */
.svg-screed-bottom { transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1); }
.svg-crack { opacity: 0; transition: opacity 0.3s; stroke-dasharray: 50; stroke-dashoffset: 50; }
.svg-blade { animation: spinBladeDiag 1s linear infinite; transform-origin: 50px 30px; transform-box: fill-box; }
.svg-measure-text { font-family: monospace; font-weight: bold; font-size: 12px; transition: fill 0.3s; }
.svg-measure-line { transition: stroke 0.3s; }

@keyframes spinBladeDiag { to { transform: rotate(360deg); } }
@keyframes drawCrack { to { stroke-dashoffset: 0; } }

/* Stany Symulatora (Kontrolowane przez klasę rodzica) */
/* 1. Danger (< 30mm) */
#rk-sim-core.state-danger .svg-screed-bottom { transform: translateY(-20px); }
#rk-sim-core.state-danger .svg-crack { opacity: 1; animation: drawCrack 0.5s 0.6s forwards; }
#rk-sim-core.state-danger .svg-measure-text { fill: var(--rk-diag-danger); }
#rk-sim-core.state-danger .svg-measure-line { stroke: var(--rk-diag-danger); }
#rk-sim-core.state-danger .rk-diag-visual { border-color: var(--rk-diag-danger); background: #fef2f2; }

/* 2. Warning (35mm) */
#rk-sim-core.state-warning .svg-screed-bottom { transform: translateY(-10px); }
#rk-sim-core.state-warning .svg-measure-text { fill: var(--rk-diag-warning); }
#rk-sim-core.state-warning .svg-measure-line { stroke: var(--rk-diag-warning); }
#rk-sim-core.state-warning .rk-diag-visual { border-color: var(--rk-diag-warning); background: #fffbeb; }

/* 3. Success (> 50mm) */
#rk-sim-core.state-success .svg-screed-bottom { transform: translateY(10px); }
#rk-sim-core.state-success .svg-measure-text { fill: var(--rk-diag-success); }
#rk-sim-core.state-success .svg-measure-line { stroke: var(--rk-diag-success); }
#rk-sim-core.state-success .rk-diag-visual { border-color: var(--rk-diag-success); background: #ecfdf5; }

/* Panel Kontrolny */
.rk-diag-controls {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-diag-btn {
    width: 100%;
    padding: 16px 20px;
    border: 2px solid var(--rk-diag-border);
    background: #ffffff;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-diag-text);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-diag-btn:hover { background: #f8fafc; border-color: #cbd5e1; }

.rk-diag-btn.active[data-state="danger"] { border-color: var(--rk-diag-danger); background: #fef2f2; color: #991b1b; }
.rk-diag-btn.active[data-state="warning"] { border-color: var(--rk-diag-warning); background: #fffbeb; color: #92400e; }
.rk-diag-btn.active[data-state="success"] { border-color: var(--rk-diag-success); background: #ecfdf5; color: #065f46; }

.rk-sim-feedback {
    margin-top: 15px;
    padding: 15px;
    border-radius: 8px;
    font-size: 13px;
    line-height: 1.6;
    display: none;
}

#rk-sim-core.state-danger .feedback-danger { display: block; background: #fee2e2; color: #991b1b; border-left: 4px solid var(--rk-diag-danger); }
#rk-sim-core.state-warning .feedback-warning { display: block; background: #fef3c7; color: #92400e; border-left: 4px solid var(--rk-diag-warning); }
#rk-sim-core.state-success .feedback-success { display: block; background: #d1fae5; color: #065f46; border-left: 4px solid var(--rk-diag-success); }

/* Kafelki Informacyjne */
.rk-diag-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 0 50px 40px;
}

.rk-diag-box {
    background: #ffffff;
    border: 1px solid var(--rk-diag-border);
    padding: 25px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-diag-box h4 {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-diag-dark);
    margin: 0 0 12px 0;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-diag-box h4 svg { color: var(--rk-diag-brand); }
.rk-diag-box p { font-size: 13px; line-height: 1.6; color: #4b5563; margin: 0; }

@media (max-width: 768px) {
    .rk-diag-header, .rk-diag-interactive { padding: 30px 20px; }
    .rk-diag-sim-wrapper { grid-template-columns: 1fr; padding: 20px; }
    .rk-diag-grid { grid-template-columns: 1fr; padding: 0 20px 30px; gap: 15px; }
    .rk-diag-visual { min-height: 180px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-wylewka-test",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Czy istniejąca wylewka nadaje się pod frezowanie? Wymagania techniczne",
    "description": "Poznaj inżynieryjne wytyczne dotyczące grubości (min. 35 mm) i klasy betonu (C12/15) dla bezpiecznego frezowania podłogówki w starym domu.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-nośność",
    "name": "Wymagania nośności i geometrii jastrychu dla frezowania (PN-EN 13813)",
    "description": "Parametry graniczne określające przydatność istniejącej wylewki betonowej i anhydrytowej pod instalacje płaszczyznowe w technologii bezpyłowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "minimalna grubość wylewki pod frezowanie",
      "klasa betonu c12/15 pn-en 13813",
      "badanie sklerometryczne młotkiem schmidta",
      "nośność jastrychu frezowanego",
      "odkrywki kontrolne wylewki"
    ],
    "measurementTechnique": "Analiza sklerometryczna wytrzymałości betonu (klasa C12/15) oraz punktowe pomiary geometryczne w celu zagwarantowania 15 mm nienaruszonej warstwy monolitycznej pod wyfrezowanym kanałem.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Grubość krytyczna: Poniżej 30 mm bezwzględny zakaz frezowania.",
        "Grubość normatywna: 35 mm całkowitej grubości, zapewniająca 15 mm buforu bezpieczeństwa nad warstwą chudego betonu lub styropianu."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-screed-test",
    "name": "Symulator Przekroju i Nośności Wylewki",
    "description": "Interaktywne narzędzie edukacyjne obrazujące ryzyko uszkodzenia i pękania jastrychu w zależności od wyjściowej grubości podłoża podczas cięcia na głębokość 20 mm.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-diag-container" id="rk-screed-check-app">
    <div class="rk-diag-header">
        <div class="rk-diag-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
            Analiza Podłoża
        </div>
        <h2 class="rk-diag-title">Czy istniejąca wylewka nadaje się pod frezowanie?</h2>
        <p class="rk-diag-intro">
            W starym budownictwie wylewka nadaje się pod frezowanie, pod warunkiem że jej <a href="https://projekt-ogrzewania.pl/grubosc-wylewki-betonowej-na-ogrzewanie-podlogowe/" class="rk-diag-link">całkowita grubość wynosi minimum 35 mm</a>, a wytrzymałość na ściskanie odpowiada klasie co najmniej <strong>C12/15 (norma PN-EN 13813)</strong>. Kanały pod rury nacinane są zazwyczaj na 20–22 mm, więc pod dnem musi zostać <strong>minimum 15 mm nienaruszonej warstwy</strong>, by zapobiec pękaniu.
        </p>
    </div>

    <div class="rk-diag-interactive">
        <div id="rk-sim-core" class="rk-diag-sim-wrapper state-success">
            <div class="rk-diag-visual">
                <svg class="rk-diag-svg" viewBox="0 0 100 100">
                    <rect x="10" y="80" width="80" height="20" fill="#d1d5db"/>
                    <path d="M 10 80 L 90 80" stroke="#9ca3af" stroke-width="2" stroke-dasharray="2 2"/>
                    
                    <g class="svg-screed-bottom">
                        <rect x="10" y="30" width="80" height="50" fill="#e5e7eb"/>
                        <path d="M 10 30 L 90 30" stroke="#cbd5e1" stroke-width="2"/>
                        <path d="M 40 30 L 40 50 L 60 50 L 60 30" fill="#f8fafc" stroke="#cbd5e1" stroke-width="2"/>
                        
                        <path class="svg-crack" d="M 42 50 L 38 65 L 45 80 M 58 50 L 62 60 L 55 80" fill="none" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/>
                        
                        <line class="svg-measure-line" x1="65" y1="50" x2="65" y2="80" stroke="#10b981" stroke-width="2" stroke-dasharray="2 2"/>
                        <text class="svg-measure-text" x="70" y="68" fill="#10b981">BUFOR</text>
                    </g>
                    
                    <rect x="10" y="28" width="80" height="2" fill="#9ca3af"/>
                    
                    <g class="svg-blade">
                        <circle cx="50" cy="30" r="18" fill="none" stroke="#374151" stroke-width="4" stroke-dasharray="10 4"/>
                        <circle cx="50" cy="30" r="4" fill="#374151"/>
                    </g>
                </svg>
            </div>

            <div class="rk-diag-controls">
                <h3 style="margin: 0 0 10px; font-size: 15px; color: var(--rk-diag-dark);">Symulacja cięcia (głębokość 20 mm)</h3>
                
                <button class="rk-diag-btn active" data-state="success" onclick="rkSetThickness('success')">
                    Grubość 50+ mm (Optymalna) <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"></polyline></svg>
                </button>
                <button class="rk-diag-btn" data-state="warning" onclick="rkSetThickness('warning')">
                    Grubość ~35 mm (Minimum) <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                </button>
                <button class="rk-diag-btn" data-state="danger" onclick="rkSetThickness('danger')">
                    Grubość < 30 mm (Krucha) <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
                </button>

                <div class="rk-sim-feedback feedback-success">
                    <strong>Bezpieczny zapas!</strong> Ostrze diamentowe swobodnie nacina beton. Pozostała warstwa (bufor) w pełni chroni ułożoną rurę i zapewnia nośność stropu.
                </div>
                <div class="rk-sim-feedback feedback-warning">
                    <strong>Wymaga ostrożności.</strong> Pozostaje minimalny bufor 15 mm. Należy bezwzględnie sprawdzić, czy pod wylewką nie ma pustek lub luźnego piasku.
                </div>
                <div class="rk-sim-feedback feedback-danger">
                    <strong>Ryzyko zniszczenia!</strong> Frezarka przebija wylewkę na wylot lub uszkadza folię. Brak bufora nośnego powoduje zapadanie się rur i łamanie jastrychu pod ciężarem mebli.
                </div>
            </div>
        </div>
    </div>

    <div class="rk-diag-grid">
        <div class="rk-diag-box">
            <h4><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="2" y="2" width="20" height="20" rx="2" ry="2"></rect><line x1="8" y1="2" x2="8" y2="22"></line><line x1="16" y1="2" x2="16" y2="22"></line></svg> Młotek Schmidta</h4>
            <p>
                Weryfikacja przydatności podłoża powinna być przeprowadzona za pomocą sklerometru. Rozwarstwiony lub kruchy jastrych dyskwalifikuje obiekt z frezowania do czasu iniekcji żywicami.
            </p>
        </div>
        <div class="rk-diag-box">
            <h4><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg> Odkrywki kontrolne</h4>
            <p>
                Starsze budynki mają nierówną grubość posadzek. Odkrywki należy wykonywać w strefach brzegowych i środkowych. Natrafienie maszyny na piasek powoduje wstrzymanie prac.
            </p>
        </div>
        <div class="rk-diag-box">
            <h4><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polygon points="7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2"></polygon><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg> Zbrojenie Teriva</h4>
            <p>
                Nacięcie cienkiej siatki przeciwskurczowej (do 3 mm) nie jest destrukcyjne. Jednak <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/" style="color:var(--rk-diag-brand); font-weight:700;">błędem wykonawczym</a> jest cięcie prętów konstrukcyjnych w stropach gęstożebrowych.
            </p>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie na poziomie domeny (Bez elementów H2/H3 w Alercie)
document.addEventListener('DOMContentLoaded', function() {
    var h = window.location.hostname;
    var a = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (a.indexOf(h) === -1) {
        var box = document.getElementById('rk-screed-check-app');
        if (box) {
            box.innerHTML = '<div style="padding:40px; text-align:center; background:#111827; color:#ef4444; border-radius:20px; border:2px solid #ef4444; font-family:sans-serif;"><strong>Błąd weryfikacji.</strong> Skrypt symulatora przypisany jest wyłącznie do autoryzowanej domeny projekt-ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulatora
function rkSetThickness(stateClass) {
    var core = document.getElementById('rk-sim-core');
    
    // Reset klas głównych
    core.classList.remove('state-success', 'state-warning', 'state-danger');
    
    // Dodaj nową klasę do wrappera (steruje to całym CSSem, SVG i komunikatami)
    core.classList.add('state-' + stateClass);

    // Zmiana aktywnych przycisków
    var btns = document.querySelectorAll('.rk-diag-btn');
    btns.forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelector('.rk-diag-btn[data-state="' + stateClass + '"]').classList.add('active');
}
</script>



<style>
:root {
    --rk-price-dark: #064e3b; /* Głęboka zieleń budżetowa */
    --rk-price-brand: #10b981; /* Szmaragd */
    --rk-price-accent: #b45309; /* Ciepłe złoto / miedź instalacyjna */
    --rk-price-bg: #f8fafc;
    --rk-price-card: #ffffff;
    --rk-price-text: #334155;
    --rk-price-border: #e2e8f0;
}

.rk-price-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-price-card);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(6, 78, 59, 0.15);
    border: 1px solid rgba(16, 185, 129, 0.2);
    overflow: hidden;
}

/* Nagłówek sekcji */
.rk-price-header {
    background: linear-gradient(135deg, var(--rk-price-dark) 0%, #022c22 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
}

.rk-price-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-price-brand) 0%, var(--rk-price-accent) 100%);
}

.rk-price-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #a7f3d0;
    padding: 6px 16px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(167, 243, 208, 0.3);
}

.rk-price-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 20px 0;
}

.rk-price-intro {
    font-size: 16px;
    line-height: 1.8;
    color: #d1fae5;
    margin: 0;
}

.rk-price-intro strong {
    color: #ffffff;
}

.rk-price-link {
    color: #34d399;
    text-decoration: none;
    border-bottom: 1px dashed #34d399;
    transition: all 0.3s;
}

.rk-price-link:hover {
    color: #6ee7b7;
    border-bottom-style: solid;
}

/* Część Interaktywna - Suwak i Kalkulator */
.rk-price-interactive {
    padding: 40px 50px;
    background: var(--rk-price-bg);
}

.rk-calc-box {
    background: #ffffff;
    border: 1px solid var(--rk-price-border);
    border-radius: 16px;
    padding: 30px;
    margin-bottom: 30px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-slider-group {
    margin-bottom: 35px;
}

.rk-slider-label {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-price-dark);
    margin-bottom: 15px;
}

.rk-slider-label span {
    font-size: 24px;
    color: var(--rk-price-accent);
}

/* Custom Range Slider Styling */
.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 5px;
    background: #e2e8f0;
    outline: none;
    margin: 0;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-price-brand);
    cursor: pointer;
    border: 2px solid #ffffff;
    box-shadow: 0 2px 6px rgba(0,0,0,0.2);
    transition: transform 0.1s;
}

.rk-range-input::-webkit-slider-thumb:hover {
    transform: scale(1.1);
}

/* Grid Wyników */
.rk-cost-display-grid {
    display: grid;
    grid-template-columns: 220px 1fr;
    gap: 30px;
    align-items: center;
}

/* SVG Wykres pierścieniowy dynamiczny */
.rk-cost-visual-box {
    position: relative;
    width: 100%;
    height: 220px;
    background: #0f172a;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-chart-svg {
    width: 100%;
    height: 100%;
    max-width: 180px;
}

.rk-chart-circle-bg { fill: none; stroke: #334155; stroke-width: 8; }
.rk-chart-circle-value {
    fill: none;
    stroke: var(--rk-price-brand);
    stroke-width: 8;
    stroke-linecap: round;
    stroke-dasharray: 251.2;
    stroke-dashoffset: 251.2;
    transform: rotate(-90deg);
    transform-origin: center;
    transition: stroke-dashoffset 0.5s ease-out;
}

.rk-chart-center-text {
    position: absolute;
    text-align: center;
    color: #ffffff;
}

.rk-chart-total { font-size: 20px; font-weight: 900; color: #34d399; }
.rk-chart-lbl { font-size: 11px; color: #94a3b8; text-transform: uppercase; }

/* Kafelki składowe kosztów */
.rk-breakdown-list {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-breakdown-item {
    background: var(--rk-price-bg);
    border: 1px solid var(--rk-price-border);
    padding: 15px 20px;
    border-radius: 10px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-item-title { font-size: 13px; color: var(--rk-price-text); font-weight: 600; }
.rk-item-value { font-size: 15px; color: var(--rk-price-dark); font-weight: 800; }

/* Porównanie metod na dole na mobile jedna pod drugą */
.rk-compare-box {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-compare-card {
    background: #ffffff;
    border: 1px solid var(--rk-price-border);
    border-radius: 12px;
    padding: 25px;
    position: relative;
}

.rk-compare-card.pro-method { border-left: 4px solid var(--rk-price-brand); }
.rk-compare-card.old-method { border-left: 4px solid #ef4444; }

.rk-comp-h { font-size: 16px; font-weight: 800; color: var(--rk-price-dark); margin: 0 0 10px 0; }
.rk-comp-p { font-size: 13px; line-height: 1.6; color: #64748b; margin: 0; }

@media (max-width: 768px) {
    .rk-price-header, .rk-price-interactive { padding: 30px 25px; }
    .rk-cost-display-grid { grid-template-columns: 1fr; }
    .rk-breakdown-list { grid-template-columns: 1fr; }
    .rk-compare-box { grid-template-columns: 1fr; gap: 15px; }
    .rk-price-title { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-koszty",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Koszty frezowania ogrzewania podłogowego w starym domu – Cennik 2026",
    "description": "Szczegółowa analiza budżetowa modernizacji instalacji. Sprawdź cennik robocizny, materiałów (PEX 14mm) oraz mas cementowych C2TE dla powierzchni 100 m².",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-koszty",
    "name": "Zestawienie kosztów składowych modernizacji instalacji płaszczyznowej",
    "description": "Dane finansowo-techniczne kosztów robocizny, materiałów instalacyjnych i próby szczelności dla powierzchni bazowej 100 m² netto.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "cena frezowania podłogówki za m²",
      "koszt rury pex pert 14mm",
      "masa polimerowo cementowa c2te cena",
      "próba ciśnieniowa ogrzewania koszt",
      "koszt modernizacji instalacji grzewczej"
    ],
    "measurementTechnique": "Kalkulacja rynkowa nakładów rzeczowo-finansowych na bazie standardów wykonawczych normy PN-EN 1264-4 dla systemów cienkowarstwowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Frezowanie i rury: Szacunkowo od 120 PLN do 180 PLN za m² netto.",
        "Materiały dodatkowe: Wymóg stosowania mas klasy C2TE o wysokiej przewodności cieplnej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-kalkulator",
    "name": "Dynamiczny Kalkulator Budżetu Frezowania",
    "description": "Narzędzie matematyczne automatycznie obliczające wydatki na bazie metrażu z uwzględnieniem podziału na rury, robociznę, rozdzielacze i masę zalewową.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-price-container" id="rk-cost-analysis-app">
    <div class="rk-price-header">
        <div class="rk-price-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Analiza Budżetu
        </div>
        <h2 class="rk-price-title">Ile kosztuje frezowanie ogrzewania podłogowego w starym domu za m²?</h2>
        <p class="rk-price-intro">
            Średni koszt wykonania frezowania ogrzewania podłogowego w starym domu wynosi od <strong>120 PLN do 180 PLN za m² netto</strong> za samą usługę nacinania kanałów wraz z dostawą i montażem rury oraz rozdzielacza. Przyjmując kompleksową modernizację powierzchni wynoszącej dokładnie <strong>100 m²</strong>, całkowity budżet inwestycji, uwzględniający chemię montażową, <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" class="rk-price-link">próby szczelności według normy PN-EN 1264-4</a> oraz podłączenie pętli do szafki rozdzielaczowej, zamyka się w przedziale <strong>16 000 PLN – 22 000 PLN</strong>.
        </p>
    </div>

    <div class="rk-price-interactive">
        <div class="rk-calc-box">
            <div class="rk-slider-group">
                <label class="rk-slider-label">
                    Wybierz powierzchnię modernizacji:
                    <span id="rk-area-val">100 m²</span>
                </label>
                <input type="range" min="30" max="200" value="100" class="rk-range-input" id="rkAreaRange" oninput="rkUpdateCosts(this.value)">
            </div>

            <div class="rk-cost-display-grid">
                <div class="rk-cost-visual-box">
                    <svg class="rk-chart-svg" viewBox="0 0 100 100">
                        <circle class="rk-chart-circle-bg" cx="50" cy="50" r="40"/>
                        <circle class="rk-chart-circle-value" id="rkChartCircle" cx="50" cy="50" r="40"/>
                    </svg>
                    <div class="rk-chart-center-text">
                        <div class="rk-chart-total" id="rk-total-price">19 000 zł</div>
                        <div class="rk-chart-lbl">Suma Netto</div>
                    </div>
                </div>

                <div class="rk-breakdown-list">
                    <div class="rk-breakdown-item">
                        <span class="rk-item-title">Frezowanie linii i łuków</span>
                        <span class="rk-item-value" id="cost-frez">6 000 zł</span>
                    </div>
                    <div class="rk-breakdown-item">
                        <span class="rk-item-title">Rura 5-warstwowa 14x2mm</span>
                        <span class="rk-item-value" id="cost-rura">3 000 zł</span>
                    </div>
                    <div class="rk-breakdown-item">
                        <span class="rk-item-title">Rozdzielacz z rotametrami</span>
                        <span class="rk-item-value" id="cost-rozdz">2 150 zł</span>
                    </div>
                    <div class="rk-breakdown-item">
                        <span class="rk-item-title">Masa naprawcza C2TE</span>
                        <span class="rk-item-value" id="cost-masa">1 850 zł</span>
                    </div>
                    <div class="rk-breakdown-item" style="grid-column: 1 / -1;">
                        <span class="rk-item-title">Montaż i próba wodna (0,6 MPa)</span>
                        <span class="rk-item-value" id="cost-robota">6 000 zł</span>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-compare-box">
            <div class="rk-compare-card pro-method">
                <h4 class="rk-comp-h">Technologia frezowania jastrychu</h4>
                <p class="rk-comp-p">
                    Wylewka o grubości min. 35 mm z betonu klasy C12/15 pozwala zaoszczędzić około <strong>40% nakładów finansowych</strong>. Czas realizacji skraca się do zaledwie 3 dni roboczych, zachowując nienaruszone poziomy progów i drzwi.
                </p>
            </div>
            <div class="rk-compare-card old-method">
                <h4 class="rk-comp-h">Tradycyjna metoda &#8222;Mokra&#8221;</h4>
                <p class="rk-comp-p">
                    Skuwanie betonu, wywóz ton gruzu, nowy <a href="https://projekt-ogrzewania.pl/ile-styropianu-pod-ogrzewanie-podlogowe/" class="rk-price-link">styropian 100 mm</a> oraz wylewanie nowego jastrychu generuje koszty rzędu 220–310 PLN/m² (bez rur i rozdzielacza) oraz wyłącza dom z użytku na 4 tygodnie.
                </p>
            </div>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie przed nieautoryzowanym użyciem (bez znaczników nagłówkowych)
document.addEventListener('DOMContentLoaded', function() {
    var domainName = window.location.hostname;
    var validDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (validDomains.indexOf(domainName) === -1) {
        var el = document.getElementById('rk-cost-analysis-app');
        if (el) {
            el.innerHTML = '<div style="padding:40px; text-align:center; background:#022c22; color:#ef4444; border-radius:20px; border:2px solid #ef4444; font-family:sans-serif;"><strong>Licencja wygasła.</strong> Ten komponent finansowy jest własnością chronioną serwisu Projekt-Ogrzewania.pl.</div>';
        }
    }
    // Inicjalizacja koła na starcie
    rkUpdateCosts(100);
});

// 2. Logika dynamicznego przeliczania kosztów w czasie rzeczywistym
function rkUpdateCosts(area) {
    area = parseInt(area);
    document.getElementById('rk-area-val').innerText = area + ' m²';

    // Przeliczniki bazowe na bazie tekstu inżynierskiego
    var frez = Math.round(area * 60); 
    var rura = Math.round(area * 30);
    var rozdz = Math.round(1800 + (area * 3.5)); // Skalowanie wielkości rozdzielacza
    var masa = Math.round(area * 18.5);
    var robota = Math.round(area * 37.5 + 2250);

    var total = frez + rura + rozdz + masa + robota;

    // Aktualizacja pól tekstowych
    document.getElementById('cost-frez').innerText = frez.toLocaleString('pl-PL') + ' zł';
    document.getElementById('cost-rura').innerText = rura.toLocaleString('pl-PL') + ' zł';
    document.getElementById('cost-rozdz').innerText = rozdz.toLocaleString('pl-PL') + ' zł';
    document.getElementById('cost-masa').innerText = masa.toLocaleString('pl-PL') + ' zł';
    document.getElementById('cost-robota').innerText = robota.toLocaleString('pl-PL') + ' zł';
    document.getElementById('rk-total-price').innerText = total.toLocaleString('pl-PL') + ' zł';

    // Aktualizacja animacji okręgu SVG (Obwód wynosi 251.2)
    var circle = document.getElementById('rkChartCircle');
    var maxTotal = 40000; // Punkt odniesienia dla 100% obwodu
    var percentage = total / maxTotal;
    if(percentage > 1) percentage = 1;
    var offset = 251.2 - (percentage * 251.2);
    circle.style.strokeDashoffset = offset;
}
</script>



<style>
:root {
    --rk-hydro-dark: #1e1b4b; /* Głębokie indygo */
    --rk-hydro-brand: #3b82f6; /* Wodny błękit */
    --rk-hydro-brand-light: #dbeafe;
    --rk-hydro-accent: #f97316; /* Ostrzegawczy pomarańcz */
    --rk-hydro-success: #10b981; /* Szmaragd */
    --rk-hydro-bg: #f8fafc;
    --rk-hydro-card: #ffffff;
    --rk-hydro-text: #334155;
    --rk-hydro-border: #e2e8f0;
}

.rk-hydro-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-hydro-card);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(30, 27, 75, 0.15);
    border: 1px solid rgba(59, 130, 246, 0.2);
    overflow: hidden;
}

/* Nagłówek */
.rk-hydro-header {
    background: linear-gradient(135deg, var(--rk-hydro-dark) 0%, #312e81 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-hydro-brand);
}

.rk-hydro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(59, 130, 246, 0.25);
    color: #93c5fd;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
    border: 1px solid rgba(147, 197, 253, 0.3);
}

.rk-hydro-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 15px 0;
}

.rk-hydro-title span { color: #60a5fa; }

.rk-hydro-intro {
    font-size: 15px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-hydro-link {
    color: #93c5fd;
    text-decoration: none;
    border-bottom: 1px dashed #93c5fd;
    transition: color 0.3s, border-color 0.3s;
}

.rk-hydro-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Moduł Interaktywny */
.rk-hydro-interactive {
    padding: 40px 50px;
    background: var(--rk-hydro-bg);
}

.rk-hydro-sim-layout {
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-hydro-border);
    border-radius: 16px;
    padding: 10px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

/* Przełączniki (Toggle) */
.rk-hydro-controls {
    display: flex;
    gap: 10px;
    background: var(--rk-hydro-bg);
    padding: 10px;
    border-radius: 12px 12px 0 0;
    border-bottom: 1px solid var(--rk-hydro-border);
}

.rk-hydro-btn {
    flex: 1;
    padding: 14px 20px;
    border: 2px solid transparent;
    background: #ffffff;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-hydro-text);
    cursor: pointer;
    transition: all 0.3s;
    text-align: center;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-hydro-btn:hover { background: #f1f5f9; }

.rk-hydro-btn.active[data-pipe="14"] {
    background: var(--rk-hydro-brand-light);
    border-color: var(--rk-hydro-brand);
    color: #1e3a8a;
}

.rk-hydro-btn.active[data-pipe="16"] {
    background: #ffedd5;
    border-color: var(--rk-hydro-accent);
    color: #7c2d12;
}

/* Lewa Strona: Dane i Wzory */
.rk-hydro-data-panel {
    padding: 20px;
}

.rk-math-box {
    background: #f8fafc;
    border-left: 4px solid var(--rk-hydro-brand);
    padding: 15px 20px;
    border-radius: 0 8px 8px 0;
    margin-bottom: 25px;
    font-family: monospace;
    font-size: 14px;
    color: #334155;
    line-height: 1.6;
}

.rk-math-box strong { color: var(--rk-hydro-dark); font-size: 15px; }

.rk-data-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-data-card {
    background: #ffffff;
    border: 1px solid var(--rk-hydro-border);
    padding: 15px;
    border-radius: 10px;
    transition: all 0.3s;
}

.rk-data-lbl { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; margin-bottom: 5px; }
.rk-data-val { font-size: 20px; font-weight: 900; color: var(--rk-hydro-dark); }
.rk-data-val span { font-size: 14px; font-weight: 600; color: #94a3b8; }

/* Dynamiczne kolory w zależności od stanu */
#rk-sim-app.state-16 .rk-math-box { border-color: var(--rk-hydro-accent); }
#rk-sim-app.state-16 .val-alert { color: var(--rk-hydro-accent); }
#rk-sim-app.state-14 .val-success { color: var(--rk-hydro-success); }

/* Prawa Strona: SVG Wizualizacja */
.rk-hydro-visual {
    background: var(--rk-hydro-dark);
    border-radius: 12px;
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 250px;
}

.rk-hydro-svg { width: 100%; height: 100%; max-width: 250px; }

/* Elementy SVG z CSS Transitions */
.svg-pipe { transition: r 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.svg-groove { transition: d 0.4s cubic-bezier(0.4, 0, 0.2, 1); }
.svg-crack { opacity: 0; stroke-dasharray: 40; stroke-dashoffset: 40; transition: opacity 0.3s; }
.svg-water { transform-origin: center; animation: pulseWater 2s infinite alternate; }
.svg-heat-wave { stroke-dasharray: 8 8; animation: heatRise 1.5s linear infinite; opacity: 0; transition: opacity 0.3s; }

@keyframes pulseWater { 0% { fill: #3b82f6; } 100% { fill: #60a5fa; } }
@keyframes heatRise { to { stroke-dashoffset: -16; } }

/* Stan 14mm */
#rk-sim-app.state-14 .svg-pipe { r: 14; }
#rk-sim-app.state-14 .svg-groove { d: path("M 20 40 L 20 65 L 80 65 L 80 40"); }
#rk-sim-app.state-14 .svg-heat-wave { opacity: 1; stroke: #ef4444; }

/* Stan 16mm (Ryzyko) */
#rk-sim-app.state-16 .svg-pipe { r: 18; }
#rk-sim-app.state-16 .svg-groove { d: path("M 15 40 L 15 75 L 85 75 L 85 40"); }
#rk-sim-app.state-16 .svg-crack { opacity: 1; animation: drawCrackHydro 0.5s 0.3s forwards; }
#rk-sim-app.state-16 .svg-heat-wave { opacity: 0.3; stroke: #f97316; animation-duration: 4s; }

@keyframes drawCrackHydro { to { stroke-dashoffset: 0; } }

/* Informacje pod spodem */
.rk-hydro-footer-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 20px;
    padding: 0 50px 40px;
}

.rk-hydro-info-card {
    background: #ffffff;
    border: 1px solid var(--rk-hydro-border);
    padding: 20px;
    border-radius: 16px;
}

.rk-hydro-info-card h4 {
    font-size: 15px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: var(--rk-hydro-dark);
}

.rk-hydro-info-card p {
    font-size: 13px;
    line-height: 1.6;
    color: #475569;
    margin: 0;
}

@media (max-width: 768px) {
    .rk-hydro-header, .rk-hydro-interactive { padding: 30px 20px; }
    .rk-hydro-sim-layout { grid-template-columns: 1fr; }
    .rk-hydro-controls { flex-direction: column; }
    .rk-data-grid { grid-template-columns: 1fr; }
    .rk-hydro-footer-grid { grid-template-columns: 1fr; padding: 0 20px 30px; }
    .rk-hydro-title { font-size: 24px; }
    .rk-hydro-visual { min-height: 200px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-rury",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Dobór rur i parametrów hydraulicznych przy frezowaniu",
    "description": "Standardem inżynierskim dla frezowania jest rura 14x2 mm. Zapewnia mniejszy zład wody, szybki czas reakcji i chroni cienką wylewkę przed spękaniem.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-hydraulika",
    "name": "Analiza parametrów hydraulicznych rur PEX/PERT",
    "description": "Zestawienie pojemności wodnej (zładu instalacji) i wpływu średnicy rury na bezwładność cieplną systemu podłogowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "średnica rury pex frezowanie",
      "rozstaw rur ogrzewanie podłogowe 10 15",
      "bariera antydyfuzyjna evoh din 4726",
      "pojemność wodna zład instalacji",
      "bezwładność cieplna podłogówki"
    ],
    "measurementTechnique": "Obliczenia pojemności na bazie wzoru na objętość walca (V = π · r²) weryfikujące masę czynnika grzewczego dla 100 m².",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Pojemność rury 14x2: 0,078 l/m.b., dająca szybką reakcję w < 45 minut.",
        "Ryzyko rury 16x2: Większy zład i wymóg głębokiej bruzdy (24 mm) grozi pęknięciem wylewki 40 mm."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-pojemnosc",
    "name": "Symulator Zładu i Przekroju Hydraulicznego",
    "description": "Kalkulator interaktywny porównujący wpływ średnicy rury na objętość wody w pętlach i zagrożenia strukturalne dla jastrychu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-hydro-container" id="rk-hydro-sim-lock">
    <div class="rk-hydro-header">
        <div class="rk-hydro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"></path></svg>
            Parametry Hydrauliczne
        </div>
        <h2 class="rk-hydro-title">Jaki rozstaw rur i średnicę PEX/PERT wybrać przy frezowaniu?</h2>
        <p class="rk-hydro-intro">
            W technologii frezowania jastrychu standardem inżynierskim jest stosowanie <strong>rur o średnicy zewnętrznej 14 mm (14 × 2 mm)</strong>. Układa się je w rozstawie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/" class="rk-hydro-link">100 mm w strefach brzegowych</a> oraz 150 mm w strefach stałego przebywania ludzi. Zastosowanie popularnej rury 16 mm jest ryzykowne, ponieważ wymaga wykonania bruzdy o głębokości aż 24 mm, co przy cienkich starych wylewkach <strong>może doprowadzić do pękania jastrychu</strong>.
        </p>
        <p class="rk-hydro-intro" style="margin:0;">
            Niezależnie od średnicy, rury muszą bezwzględnie posiadać <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/" class="rk-hydro-link">barierę antydyfuzyjną EVOH (norma DIN 4726)</a> zapobiegającą przenikaniu niszczącego tlenu do instalacji.
        </p>
    </div>

    <div class="rk-hydro-interactive">
        <div id="rk-sim-app" class="rk-hydro-sim-layout state-14">
            
            <div style="display: flex; flex-direction: column;">
                <div class="rk-hydro-controls">
                    <button class="rk-hydro-btn active" data-pipe="14" onclick="rkSwitchPipe('14')">Rura 14x2 mm (Standard)</button>
                    <button class="rk-hydro-btn" data-pipe="16" onclick="rkSwitchPipe('16')">Rura 16x2 mm (Ryzyko)</button>
                </div>

                <div class="rk-hydro-data-panel">
                    <div class="rk-math-box" id="rk-math-content">
                        <strong>Obliczenie zładu (14 mm):</strong><br>
                        Średnica wew. (d_i) = 10 mm = 0,01 m.<br>
                        V = π · (d_i / 2)²<br>
                        V = 3,14159 · (0,005 m)²<br>
                        V = <strong>0,07854 l/m.b.</strong>
                    </div>

                    <div class="rk-data-grid">
                        <div class="rk-data-card">
                            <div class="rk-data-lbl">Zład wody (100 m²)</div>
                            <div class="rk-data-val" id="rk-val-vol">52,38 <span>litrów</span></div>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-lbl">Reakcja (Bezwładność)</div>
                            <div class="rk-data-val val-success" id="rk-val-time">< 45 <span>minut</span></div>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-lbl">Szerokość bruzdy</div>
                            <div class="rk-data-val" id="rk-val-groove">16 <span>mm</span></div>
                        </div>
                        <div class="rk-data-card">
                            <div class="rk-data-lbl">Głębokość bruzdy</div>
                            <div class="rk-data-val" id="rk-val-depth">20-22 <span>mm</span></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="rk-hydro-visual">
                <svg class="rk-hydro-svg" viewBox="0 0 100 100">
                    <rect x="0" y="40" width="100" height="60" fill="#334155"/>
                    <path d="M 0 40 L 100 40" stroke="#475569" stroke-width="2"/>
                    
                    <path class="svg-groove" fill="#0f172a" stroke="#475569" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
                    
                    <circle class="svg-pipe" cx="50" cy="50" fill="none" stroke="#e2e8f0" stroke-width="4"/>
                    <circle class="svg-pipe svg-water" cx="50" cy="50"/>

                    <path class="svg-heat-wave" d="M 35 25 Q 40 10 35 0 M 50 30 L 50 0 M 65 25 Q 60 10 65 0" fill="none" stroke-width="3" stroke-linecap="round"/>

                    <path class="svg-crack" d="M 45 75 L 40 85 L 50 100" fill="none" stroke="#f97316" stroke-width="2" stroke-linecap="round"/>
                </svg>
            </div>
        </div>
    </div>

    <div class="rk-hydro-footer-grid">
        <div class="rk-hydro-info-card">
            <h4><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="var(--rk-hydro-brand)" stroke-width="3" style="margin-right:5px; vertical-align:middle;"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg> Drastyczna redukcja zładu</h4>
            <p>
                Zastosowanie rury o mniejszej średnicy redukuje ilość wody w układzie o ponad 30%. Oznacza to, że <a href="https://projekt-ogrzewania.pl/ile-wody-potrzeba-do-wypelnienia-instalacji-podlogowki-kalkulator/" style="color:var(--rk-hydro-brand); font-weight:600;">zład instalacji nagrzewa się znacznie szybciej</a>, co pozwala na błyskawiczne wyczucie ciepła pod stopami po uruchomieniu termostatu.
            </p>
        </div>
        <div class="rk-hydro-info-card">
            <h4><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#f97316" stroke-width="3" style="margin-right:5px; vertical-align:middle;"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg> Dlaczego rura 16 mm jest groźna?</h4>
            <p>
                Tradycyjna <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/" style="color:#f97316; font-weight:600;">rura 16 mm</a> wymusza głębsze nacięcia. Przy wylewkach rzędu 40 mm, ostrze może naruszyć izolację lub doprowadzić do przełamania betonu, niszcząc nośność posadzki.
            </p>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie domeny bez H2/H3 w komunikacie o błędzie
document.addEventListener('DOMContentLoaded', function() {
    var checkDomain = window.location.hostname;
    var allowedList = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedList.indexOf(checkDomain) === -1) {
        var app = document.getElementById('rk-hydro-sim-lock');
        if (app) {
            app.innerHTML = '<div style="padding:40px; text-align:center; background:#1e1b4b; color:#ef4444; border-radius:20px; border:2px solid #ef4444; font-family:sans-serif; font-size:16px;"><strong>Odmowa dostępu.</strong> Skrypt symulacyjny jest przypisany wyłącznie do autoryzowanej domeny projekt-ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulatora
function rkSwitchPipe(type) {
    var core = document.getElementById('rk-sim-app');
    
    // Zmiana przycisków
    var btns = document.querySelectorAll('.rk-hydro-btn');
    btns.forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelector('.rk-hydro-btn[data-pipe="' + type + '"]').classList.add('active');

    // Zmiana klas i danych
    if (type === '14') {
        core.className = 'rk-hydro-sim-layout state-14';
        
        document.getElementById('rk-math-content').innerHTML = "<strong>Obliczenie zładu (14 mm):</strong><br>Średnica wew. (d_i) = 10 mm = 0,01 m.<br>V = π · (d_i / 2)²<br>V = 3,14159 · (0,005 m)²<br>V = <strong>0,07854 l/m.b.</strong>";
        document.getElementById('rk-val-vol').innerHTML = "52,38 <span>litrów</span>";
        
        var t = document.getElementById('rk-val-time');
        t.className = 'rk-data-val val-success';
        t.innerHTML = "< 45 <span>minut</span>";
        
        document.getElementById('rk-val-groove').innerHTML = "16 <span>mm</span>";
        document.getElementById('rk-val-depth').innerHTML = "20-22 <span>mm</span>";

    } else {
        core.className = 'rk-hydro-sim-layout state-16';
        
        document.getElementById('rk-math-content').innerHTML = "<strong>Obliczenie zładu (16 mm):</strong><br>Średnica wew. (d_i) = 12 mm = 0,012 m.<br>V = π · (d_i / 2)²<br>V = 3,14159 · (0,006 m)²<br>V = <strong>0,1130 l/m.b.</strong>";
        document.getElementById('rk-val-vol').innerHTML = "75,40 <span>litrów</span>";
        
        var t = document.getElementById('rk-val-time');
        t.className = 'rk-data-val val-alert';
        t.innerHTML = "3-5 <span>godzin</span>";
        
        document.getElementById('rk-val-groove').innerHTML = "18 <span>mm</span>";
        document.getElementById('rk-val-depth').innerHTML = "24-26 <span>mm</span>";
    }
}
</script>



<style>
:root {
    --rk-therm-dark: #1e293b; /* Głęboki bazalt */
    --rk-therm-brand: #ef4444; /* Termiczna czerwień */
    --rk-therm-brand-light: #fee2e2;
    --rk-therm-shield: #06b6d4; /* Błękit aerożelu */
    --rk-therm-shield-light: #cffafe;
    --rk-therm-warning: #f97316; /* Ostrzegawczy pomarańcz */
    --rk-therm-bg: #f8fafc;
    --rk-therm-card: #ffffff;
    --rk-therm-text: #334155;
    --rk-therm-border: #e2e8f0;
}

.rk-therm-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-therm-card);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(30, 41, 59, 0.15);
    border: 1px solid rgba(239, 68, 68, 0.2);
    overflow: hidden;
}

/* Sekcja Wprowadzająca (Header) */
.rk-therm-header {
    background: linear-gradient(145deg, #0f172a 0%, var(--rk-therm-dark) 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-therm-brand);
}

.rk-therm-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(239, 68, 68, 0.2);
    color: #fca5a5;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(252, 165, 165, 0.3);
}

.rk-therm-title {
    font-size: 26px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
    color: #ffffff;
}

.rk-therm-paragraph {
    font-size: 15px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-therm-paragraph strong {
    color: #ffffff;
    font-weight: 700;
}

.rk-therm-link {
    color: #fca5a5;
    text-decoration: none;
    border-bottom: 1px dashed #fca5a5;
    transition: all 0.3s;
}

.rk-therm-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Moduł Interaktywny */
.rk-therm-interactive {
    padding: 40px 50px;
    background: var(--rk-therm-bg);
}

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

.rk-sim-btn {
    flex: 1;
    max-width: 280px;
    padding: 16px 20px;
    border: 2px solid var(--rk-therm-border);
    background: #ffffff;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-therm-text);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-sim-btn:hover { background: #f1f5f9; border-color: #cbd5e1; }

.rk-sim-btn.active[data-mode="loss"] {
    border-color: var(--rk-therm-brand);
    background: var(--rk-therm-brand-light);
    color: #991b1b;
    box-shadow: 0 10px 20px -5px rgba(239, 68, 68, 0.15);
}

.rk-sim-btn.active[data-mode="shield"] {
    border-color: var(--rk-therm-shield);
    background: var(--rk-therm-shield-light);
    color: #083344;
    box-shadow: 0 10px 20px -5px rgba(6, 182, 212, 0.2);
}

/* Ekran Symulatora (Grid: SVG + Parametry) */
.rk-therm-screen {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-therm-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.02);
}

/* Część wizualna (SVG Termowizja) */
.rk-therm-visual {
    background: #0f172a;
    border-radius: 12px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    height: 100%;
    min-height: 220px;
    border: 2px solid #334155;
}

.rk-svg-thermo {
    width: 100%;
    height: 100%;
    max-width: 250px;
}

/* Animacje SVG */
.anim-heat-pipe { animation: pulseCore 2s infinite alternate; }
.anim-heat-arrow { stroke-dasharray: 10; animation: flowDown 1.5s linear infinite; transition: opacity 0.4s; }
.anim-reflect-arrow { stroke-dasharray: 10; animation: flowUp 1.5s linear infinite; opacity: 0; transition: opacity 0.4s; }
.svg-aerogel-layer { stroke-dasharray: 150; stroke-dashoffset: 150; opacity: 0; transition: all 0.8s cubic-bezier(0.4, 0, 0.2, 1); }

@keyframes pulseCore { 0% { fill: #f97316; filter: drop-shadow(0 0 5px #f97316); } 100% { fill: #ef4444; filter: drop-shadow(0 0 15px #ef4444); } }
@keyframes flowDown { to { stroke-dashoffset: -20; } }
@keyframes flowUp { to { stroke-dashoffset: 20; } }

/* Stan 1: Ucieczka w dół (Loss) */
#rk-sim-therm.state-loss .anim-heat-arrow { opacity: 1; stroke: #ef4444; }

/* Stan 2: Aerożel (Shield) */
#rk-sim-therm.state-shield .anim-heat-arrow { opacity: 0.2; stroke: #f59e0b; }
#rk-sim-therm.state-shield .anim-reflect-arrow { opacity: 1; stroke: #06b6d4; }
#rk-sim-therm.state-shield .svg-aerogel-layer { stroke-dashoffset: 0; opacity: 1; filter: drop-shadow(0 0 8px #06b6d4); }

/* Część z parametrami */
.rk-therm-data-grid {
    display: grid;
    grid-template-columns: 1fr;
    gap: 15px;
    align-content: center;
}

.rk-therm-box {
    background: var(--rk-therm-bg);
    padding: 16px 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-therm-border);
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-therm-label { font-size: 13px; color: #64748b; font-weight: 700; text-transform: uppercase; }
.rk-therm-val { font-size: 18px; font-weight: 900; color: var(--rk-therm-dark); transition: color 0.3s; }
.rk-therm-val span { font-size: 13px; font-weight: 600; color: #94a3b8; }

#rk-sim-therm.state-loss .val-dynamic { color: var(--rk-therm-brand); }
#rk-sim-therm.state-shield .val-dynamic { color: var(--rk-therm-shield); }

/* Kafelki Informacyjne (Dół) */
.rk-therm-info-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 0 50px 40px;
}

.rk-therm-info-card {
    background: #ffffff;
    border: 1px solid var(--rk-therm-border);
    padding: 25px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-therm-info-card h4 {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-therm-dark);
    margin: 0 0 12px 0;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-therm-info-card h4 svg { color: var(--rk-therm-warning); }
.rk-therm-info-card p { font-size: 13px; line-height: 1.6; color: #4b5563; margin: 0; }

@media (max-width: 768px) {
    .rk-therm-header, .rk-therm-interactive { padding: 30px 20px; }
    .rk-sim-controls { flex-direction: column; }
    .rk-sim-btn { max-width: 100%; }
    .rk-therm-screen { grid-template-columns: 1fr; }
    .rk-therm-visual { min-height: 180px; }
    .rk-therm-info-grid { grid-template-columns: 1fr; padding: 0 20px 30px; gap: 15px; }
    .rk-therm-title { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-izolacja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Jak rozwiązać problem braku izolacji termicznej podłogi na gruncie przy frezowaniu?",
    "description": "Zastosowanie powłok aerożelowych, mikrosfer szklanych oraz rekuperacji pozwala ograniczyć ucieczkę ciepła w dół do gruntu i ratuje SCOP pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-izolacja",
    "name": "Analiza strat cieplnych i mikroizolacji bruzd frezowanych",
    "description": "Porównanie efektywności energetycznej standardowej wylewki na gruncie z systemem wyposażonym w odbłyśniki aerożelowe.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "mikrosfery szklane podłogówka",
      "powłoka termoizolacyjna aerożel ogrzewanie",
      "straty ciepła do gruntu frezowanie",
      "rekuperacja a podłogówka",
      "spadek scop pompy ciepła"
    ],
    "measurementTechnique": "Obliczenia strat przenikania do gruntu i odbicia podczerwieni wg wytycznych normy PN-EN 1264-4.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Stan pierwotny: Strata rzędu 35%-45% w dół, drastyczny spadek SCOP pompy ciepła o 20%.",
        "Stan zoptymalizowany: Zastosowanie powłoki aerożelowej o współczynniku λ = 0,014 W/(m·K) ratuje bilans energetyczny."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-izolacja",
    "name": "Symulator Strat Ciepła do Gruntu",
    "description": "Narzędzie wizualizujące kierunki przepływu energii cieplnej w systemach bez poziomej izolacji EPS/PIR, obrazujące działanie mikrobarier.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-therm-container" id="rk-therm-guard-lock">
    <div class="rk-therm-header">
        <div class="rk-therm-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Termika i Mostki
        </div>
        <h2 class="rk-therm-title">Jak rozwiązać problem braku izolacji termicznej podłogi na gruncie?</h2>
        <p class="rk-therm-paragraph">
            Brak izolacji termicznej pod jastrychem na gruncie w starym domu powoduje <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/" class="rk-therm-link">ucieczkę strumienia ciepła w dół na poziomie 35% - 45%</a>. Stanowi to bezpośrednie naruszenie zapisów <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/" class="rk-therm-link">normy PN-EN 1264-4</a>, która dla podłóg na gruncie wymaga minimalnego oporu cieplnego izolacji o wartości <strong>R = 2,25 m²·K/W</strong>.
        </p>
        <p class="rk-therm-paragraph" style="margin: 0;">
            Jeżeli nie możemy ułożyć płyt EPS100 lub PIR, jedynym inżynierskim ratunkiem ograniczającym straty jest <strong>obniżenie zasilania do max 32°C</strong>, zastosowanie powłok z aerożelu (<strong>λ = 0,014 W/(m·K)</strong>) oraz integracja z systemem mechanicznej <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" class="rk-therm-link">wentylacji z odzyskiem ciepła (rekuperacją)</a>.
        </p>
    </div>

    <div class="rk-therm-interactive">
        <div class="rk-sim-controls">
            <button class="rk-sim-btn active" data-mode="loss" onclick="rkSwitchTherm('loss')">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg>
                Standard (Ucieczka ciepła w dół)
            </button>
            <button class="rk-sim-btn" data-mode="shield" onclick="rkSwitchTherm('shield')">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                Mikrobariera Aerożelowa + OZE
            </button>
        </div>

        <div id="rk-sim-therm" class="rk-therm-screen state-loss">
            <div class="rk-therm-visual">
                <svg class="rk-svg-thermo" viewBox="0 0 100 100">
                    <rect x="0" y="70" width="100" height="30" fill="#1e293b"/>
                    <path d="M 0 70 L 100 70" stroke="#334155" stroke-width="2" stroke-dasharray="4 4"/>
                    
                    <rect x="0" y="30" width="100" height="40" fill="#334155"/>
                    <path d="M 30 30 L 30 55 L 70 55 L 70 30" fill="#0f172a" stroke="#475569" stroke-width="2"/>
                    
                    <path class="svg-aerogel-layer" d="M 32 30 L 32 53 L 68 53 L 68 30" fill="none" stroke="#06b6d4" stroke-width="4" stroke-linejoin="round"/>

                    <circle cx="50" cy="42" r="10" fill="none" stroke="#f8fafc" stroke-width="2"/>
                    <circle class="anim-heat-pipe" cx="50" cy="42" r="8"/>

                    <path class="anim-heat-arrow" d="M 40 55 L 40 85 M 50 55 L 50 90 M 60 55 L 60 85" fill="none" stroke-width="3" stroke-linecap="round"/>
                    <polygon points="38,82 42,82 40,86" fill="#ef4444" class="anim-heat-arrow" style="stroke:none;"/>
                    <polygon points="48,87 52,87 50,91" fill="#ef4444" class="anim-heat-arrow" style="stroke:none;"/>
                    <polygon points="58,82 62,82 60,86" fill="#ef4444" class="anim-heat-arrow" style="stroke:none;"/>

                    <path class="anim-reflect-arrow" d="M 40 50 Q 30 50 30 20 M 60 50 Q 70 50 70 20 M 50 48 L 50 15" fill="none" stroke-width="3" stroke-linecap="round"/>
                </svg>
            </div>

            <div class="rk-therm-data-grid">
                <div class="rk-therm-box">
                    <span class="rk-therm-label">Straty w dół</span>
                    <span class="rk-therm-val val-dynamic" id="rk-val-loss">45% <span>(Krytyczne)</span></span>
                </div>
                <div class="rk-therm-box">
                    <span class="rk-therm-label">Wpływ na SCOP pompy</span>
                    <span class="rk-therm-val val-dynamic" id="rk-val-scop">- 20% <span>spadku</span></span>
                </div>
                <div class="rk-therm-box">
                    <span class="rk-therm-label">Temp. zasilania</span>
                    <span class="rk-therm-val" id="rk-val-temp">38°C <span>(Wysoka)</span></span>
                </div>
                <div class="rk-therm-box">
                    <span class="rk-therm-label">Lambda izolacji bruzdy</span>
                    <span class="rk-therm-val" id="rk-val-lambda">Brak <span>(Zwykły grunt)</span></span>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-therm-info-grid">
        <div class="rk-therm-info-card">
            <h4><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M12 8v4l3 3"></path></svg> 1. Grunt o wysokiej penetracji</h4>
            <p>
                Przed zastosowaniem barier odbijających, frezowany kanał musi zostać idealnie odkurzony (odkurzacz klasy M) i zagruntowany. Pył betonowy blokuje adhezję powłok izolacyjnych.
            </p>
        </div>
        <div class="rk-therm-info-card">
            <h4><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg> 2. Płynny Aerożel lub Mikrosfery</h4>
            <p>
                Natrysk lub malowanie wnętrza rowka płynną powłoką na bazie mikrosfer szklanych (λ = 0,014 W/(m·K)) tworzy lustro odbijające promieniowanie podczerwone (cieplne) ku górze.
            </p>
        </div>
        <div class="rk-therm-info-card">
            <h4><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg> 3. Rekuperacja (Złota zasada)</h4>
            <p>
                Jeśli tracimy ciepło w podłogę, musimy odzyskać je z powietrza. <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" style="color:var(--rk-therm-warning); font-weight:700;">Wentylacja z odzyskiem</a> drastycznie obniża zapotrzebowanie budynku, rekompensując ucieczkę energii w grunt.
            </p>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie przed nieautoryzowanym użyciem (bez znaczników nagłówkowych)
document.addEventListener('DOMContentLoaded', function() {
    var locHost = window.location.hostname;
    var allowedList = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedList.indexOf(locHost) === -1) {
        var appCont = document.getElementById('rk-therm-guard-lock');
        if (appCont) {
            appCont.innerHTML = '<div style="padding:40px; text-align:center; background:#1e293b; color:#ef4444; border-radius:20px; border:2px solid #ef4444; font-family:sans-serif; font-size:15px;"><strong>Blokada bezpieczeństwa.</strong> Algorytm wizualizacji termicznej przypisany jest tylko do autoryzowanej domeny projekt-ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulatora
function rkSwitchTherm(mode) {
    var screen = document.getElementById('rk-sim-therm');
    
    // Obsługa przycisków
    var btns = document.querySelectorAll('.rk-sim-btn');
    btns.forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelector('.rk-sim-btn[data-mode="' + mode + '"]').classList.add('active');

    // Obsługa logiki widoku i danych
    if (mode === 'loss') {
        screen.className = 'rk-therm-screen state-loss';
        document.getElementById('rk-val-loss').innerHTML = "45% <span>(Krytyczne)</span>";
        document.getElementById('rk-val-scop').innerHTML = "- 20% <span>spadku</span>";
        document.getElementById('rk-val-temp').innerHTML = "38°C <span>(Wysoka)</span>";
        document.getElementById('rk-val-lambda').innerHTML = "Brak <span>(Zwykły grunt)</span>";
    } else {
        screen.className = 'rk-therm-screen state-shield';
        document.getElementById('rk-val-loss').innerHTML = "< 18% <span>(Zredukowane)</span>";
        document.getElementById('rk-val-scop').innerHTML = "Stabilny <span>(<a href='https://projekt-ogrzewania.pl/pompa-ciepla/' style='color:var(--rk-therm-shield); font-weight:700;'>Pompa Ciepła chroniona</a>)</span>";
        document.getElementById('rk-val-temp').innerHTML = "32°C <span>(Zoptymalizowana)</span>";
        document.getElementById('rk-val-lambda').innerHTML = "0,014 W/(m·K) <span>(Aerożel)</span>";
    }
}
</script>



<style>
:root {
    --rk-loop-dark: #0f172a; /* Głęboki grafit */
    --rk-loop-brand: #6366f1; /* Indygo / Fiolet techniczny */
    --rk-loop-brand-light: #e0e7ff;
    --rk-loop-cyan: #06b6d4; /* Cyjan przepływu */
    --rk-loop-danger: #f43f5e; /* Czerwień blokady */
    --rk-loop-success: #10b981; /* Zielony bezpieczny */
    --rk-loop-bg: #f8fafc;
    --rk-loop-card: #ffffff;
    --rk-loop-text: #334155;
    --rk-loop-border: #e2e8f0;
}

.rk-loop-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-loop-card);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(99, 102, 241, 0.15);
    border: 1px solid rgba(99, 102, 241, 0.2);
    overflow: hidden;
}

/* Nagłówek sekcji */
.rk-loop-header {
    background: linear-gradient(135deg, #1e1b4b 0%, var(--rk-loop-dark) 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
}

.rk-loop-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-loop-brand) 0%, var(--rk-loop-cyan) 100%);
}

.rk-loop-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(99, 102, 241, 0.2);
    color: #c7d2fe;
    padding: 6px 16px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(199, 210, 254, 0.3);
}

.rk-loop-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
}

.rk-loop-intro {
    font-size: 15px;
    line-height: 1.75;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-loop-intro strong {
    color: #ffffff;
}

.rk-loop-link {
    color: #a5b4fc;
    text-decoration: none;
    border-bottom: 1px dashed #a5b4fc;
    transition: all 0.3s;
}

.rk-loop-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Część Interaktywna - Suwak i Wykresy */
.rk-loop-interactive {
    padding: 40px 50px;
    background: var(--rk-loop-bg);
}

.rk-loop-calc-box {
    background: #ffffff;
    border: 1px solid var(--rk-loop-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-loop-slider-group {
    margin-bottom: 35px;
}

.rk-loop-slider-label {
    display: flex;
    justify-content: space-between;
    align-items: center;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-loop-dark);
    margin-bottom: 15px;
}

.rk-loop-slider-label span {
    font-size: 24px;
    color: var(--rk-loop-brand);
}

/* Custom Range Input */
.rk-loop-range {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 5px;
    background: #e2e8f0;
    outline: none;
    margin: 0;
}

.rk-loop-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-loop-brand);
    cursor: pointer;
    border: 2px solid #ffffff;
    box-shadow: 0 2px 6px rgba(0,0,0,0.15);
    transition: transform 0.1s;
}

.rk-loop-range::-webkit-slider-thumb:hover {
    transform: scale(1.1);
}

/* Układ Wizualizacja + Kafelki */
.rk-loop-display-grid {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 30px;
    align-items: center;
}

/* NOWE SVG: Pętla i Pompa Obiegowa */
.rk-loop-visual-box {
    background: #0f172a;
    border-radius: 12px;
    padding: 15px;
    height: 240px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 2px solid #334155;
    position: relative;
    overflow: hidden;
}

.rk-hydro-diagram {
    width: 100%;
    height: 100%;
}

/* Animacje i Transformacje dla nowego SVG */
.rk-svg-rotor { transform-origin: 30px 50px; } /* Środek pompy (x:30, y:50) */
.rk-svg-flow-path { stroke-dasharray: 8 8; }
.rk-svg-alert-wave { opacity: 0; transition: opacity 0.3s; transform-origin: 50px 50px; }

@keyframes spinRotorFast { 100% { transform: rotate(360deg); } }
@keyframes spinRotorSlow { 100% { transform: rotate(360deg); } }
@keyframes flowFast { to { stroke-dashoffset: -16; } }
@keyframes flowSlow { to { stroke-dashoffset: -16; } }
@keyframes alertPulse { 0% { opacity: 0.3; transform: scale(0.9); } 100% { opacity: 1; transform: scale(1.1); } }

/* Dynamiczne modyfikowanie CSS przez JS */
.state-safe .rk-svg-rotor { animation: spinRotorFast 1s linear infinite; }
.state-safe .rk-svg-flow-path { animation: flowFast 1s linear infinite; stroke: var(--rk-loop-cyan); }
.state-safe .rk-svg-alert-wave { opacity: 0; animation: none; }

.state-blocked .rk-svg-rotor { animation: spinRotorSlow 3s linear infinite; }
.state-blocked .rk-svg-flow-path { animation: flowSlow 4s linear infinite; stroke: var(--rk-loop-danger); }
.state-blocked .rk-svg-alert-wave { opacity: 1; animation: alertPulse 1.5s infinite alternate; }

/* Kafelki parametrów hydraulicznych */
.rk-loop-param-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-loop-card-stat {
    background: var(--rk-loop-bg);
    border: 1px solid var(--rk-loop-border);
    padding: 15px 20px;
    border-radius: 10px;
}

.rk-stat-lbl { font-size: 11px; color: #64748b; font-weight: 700; text-transform: uppercase; margin-bottom: 5px; }
.rk-stat-val { font-size: 20px; font-weight: 900; color: var(--rk-loop-dark); }
.rk-stat-val span { font-size: 13px; font-weight: 600; color: #94a3b8; }

/* Komunikat Inżynierski */
.rk-loop-feedback {
    grid-column: 1 / -1;
    padding: 15px 20px;
    border-radius: 8px;
    font-size: 13px;
    line-height: 1.6;
    margin-top: 10px;
    font-weight: 500;
}

.rk-loop-feedback.success { background: #d1fae5; color: #065f46; border-left: 4px solid var(--rk-loop-success); }
.rk-loop-feedback.danger { background: #fee2e2; color: #991b1b; border-left: 4px solid var(--rk-loop-danger); }

/* Dolna sekcja obliczeniowa (Kafelki na mobile) */
.rk-loop-footer-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 30px 50px 40px;
}

.rk-formula-card {
    background: #ffffff;
    border: 1px solid var(--rk-loop-border);
    padding: 20px;
    border-radius: 14px;
}

.rk-formula-card h4 { font-size: 14px; font-weight: 800; color: var(--rk-loop-dark); margin: 0 0 8px 0; }
.rk-formula-card p { font-size: 12px; font-family: monospace; color: #475569; margin: 0; background: var(--rk-loop-bg); padding: 8px 12px; border-radius: 6px; }

@media (max-width: 768px) {
    .rk-loop-header, .rk-loop-interactive { padding: 30px 25px; }
    .rk-loop-display-grid { grid-template-columns: 1fr; }
    .rk-loop-param-grid { grid-template-columns: 1fr; }
    .rk-loop-footer-grid { grid-template-columns: 1fr; padding: 0 20px 30px; gap: 15px; }
    .rk-loop-title { font-size: 24px; }
    .rk-loop-visual-box { height: 180px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-dlugosc",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Maksymalna długość pętli ogrzewania podłogowego przy rurach 14 mm",
    "description": "Analiza hydrauliczna dla średnicy 14 mm. Dowiedz się, dlaczego 80 m to nieprzekraczalna granica i jak obliczyć opory liniowe oraz strumień masowy.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-hydraulika-14mm",
    "name": "Zależność oporów hydraulicznych i przepływów od długości pętli 14x2mm",
    "description": "Dane fizyczne i hydrauliczne: strumień masowy, prędkość liniowa i strata ciśnienia obliczone dla zasilania pompy ciepła (delta T = 5K, Q = 900W).",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna długość pętli podłogówki 14mm",
      "opory hydrauliczne rury pex 14x2",
      "strumień masowy wody bilans cieplny",
      "zamknięcie hydrauliczne pętli grzewczej",
      "regulacja rotometrów rozdzielacza"
    ],
    "measurementTechnique": "Modelowanie hydrauliczne oparte na równaniu Darcy-Weisbacha dla przepływów w rurach gładkich polimerowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Granica bezpieczeństwa: Do 80 metrów bieżących, strata ciśnienia poniżej 20 kPa.",
        "Strefa krytyczna: Powyżej 85 metrów, opory przekraczają 22 kPa, ryzyko braku przepływu czynnika."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-kalkulator-pętli",
    "name": "Interaktywny Symulator Oporów Pętli 14mm",
    "description": "Aplikacja inżynierska wyliczająca dynamicznie stratę ciśnienia oraz odwzorowująca zjawisko zamknięcia hydraulicznego przy zmianie długości obwodu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-loop-container" id="rk-loop-length-app">
    <div class="rk-loop-header">
        <div class="rk-loop-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="6" y1="3" x2="6" y2="21"></line><line x1="18" y1="3" x2="18" y2="21"></line><line x1="12" y1="3" x2="12" y2="21"></line></svg>
            Hydraulika Układu
        </div>
        <h2 class="rk-loop-title">Jaka jest maksymalna długość pętli ogrzewania podłogowego przy rurach 14 mm?</h2>
        <p class="rk-loop-intro">
            Maksymalna dopuszczalna długość pojedynczej pętli grzewczej dla rury o średnicy 14 × 2 mm wynosi <strong>80 metrów bieżących</strong> (wliczając odcinki dojściowe do rozdzielacza). Pozwala to na pokrycie maksymalnie 11–12 m² powierzchni pomieszczenia przy <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/" class="rk-loop-link">rozstawie rur co 150 mm</a>. 
        </p>
        <p class="rk-loop-intro" style="margin: 0;">
            Przekroczenie tej granicy skutkuje gwałtownym, nieliniowym wzrostem oporów hydraulicznych <strong>powyżej wartości 22 kPa</strong>. Przekracza to możliwości regulacyjne standardowych rotometrów i prowadzi do zjawiska <strong>"zamknięcia hydraulicznego" pętli</strong> – woda wybiera drogę o mniejszym oporze w krótszych obwodach, a pomieszczenie pozostaje niedogrzane.
        </p>
    </div>

    <div class="rk-loop-interactive">
        <div class="rk-loop-calc-box">
            <div class="rk-loop-slider-group">
                <label class="rk-loop-slider-label">
                    Zmień długość projektowanej pętli 14 mm:
                    <span id="rk-loop-len-text">80 m</span>
                </label>
                <input type="range" min="40" max="120" value="80" step="5" class="rk-loop-range" id="rkLoopRange" oninput="rkCalcHydraulics(this.value)">
            </div>

            <div class="rk-loop-display-grid">
                
                <div class="rk-loop-visual-box" id="rkSvgStateCtrl">
                    <svg class="rk-hydro-diagram" viewBox="0 0 100 100">
                        <path d="M 30 20 L 70 20 C 81 20 90 29 90 40 L 90 60 C 90 71 81 80 70 80 L 30 80" fill="none" stroke="#1e293b" stroke-width="8" stroke-linecap="round"/>
                        <path class="rk-svg-flow-path" d="M 30 20 L 70 20 C 81 20 90 29 90 40 L 90 60 C 90 71 81 80 70 80 L 30 80" fill="none" stroke-width="4" stroke-linecap="round"/>
                        
                        <line x1="30" y1="20" x2="30" y2="40" stroke="#1e293b" stroke-width="8"/>
                        <line x1="30" y1="60" x2="30" y2="80" stroke="#1e293b" stroke-width="8"/>
                        
                        <circle cx="30" cy="50" r="14" fill="#334155" stroke="#1e293b" stroke-width="4"/>
                        <g class="rk-svg-rotor">
                            <line x1="30" y1="40" x2="30" y2="60" stroke="#94a3b8" stroke-width="3" stroke-linecap="round"/>
                            <line x1="20" y1="50" x2="40" y2="50" stroke="#94a3b8" stroke-width="3" stroke-linecap="round"/>
                            <circle cx="30" cy="50" r="3" fill="#cbd5e1"/>
                        </g>

                        <circle class="rk-svg-alert-wave" cx="70" cy="50" r="12" fill="none" stroke="#f43f5e" stroke-width="3"/>
                        <path class="rk-svg-alert-wave" d="M 64 44 L 76 56 M 76 44 L 64 56" stroke="#f43f5e" stroke-width="3" stroke-linecap="round"/>
                    </svg>
                </div>

                <div class="rk-loop-param-grid">
                    <div class="rk-loop-card-stat">
                        <div class="rk-stat-lbl">Opór hydrauliczny pętli</div>
                        <div class="rk-stat-val" id="val-pressure">19,4 <span>kPa</span></div>
                    </div>
                    <div class="rk-loop-card-stat">
                        <div class="rk-stat-lbl">Przepływ (Rotametr)</div>
                        <div class="rk-stat-val" id="val-flow">2,6 <span>l/min</span></div>
                    </div>
                    <div class="rk-loop-card-stat">
                        <div class="rk-stat-lbl">Prędkość liniowa czynnika</div>
                        <div class="rk-stat-val" id="val-velocity">0,55 <span>m/s</span></div>
                    </div>
                    <div class="rk-loop-card-stat">
                        <div class="rk-stat-lbl">Strumień masowy</div>
                        <div class="rk-stat-val">154,8 <span>kg/h</span></div>
                    </div>

                    <div class="rk-loop-feedback success" id="loop-msg">
                        <strong>Standard Inżynierski spełniony.</strong> Przepływ wody wynosi 0,55 m/s – zapewnia to samoodpowietrzanie pętli (zgodnie z PN-EN 1264) bez generowania szumów i przeciążania pompy obiegowej.
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-loop-footer-grid">
        <div class="rk-formula-card">
            <h4>1. Strumień masowy (m)</h4>
            <p>m = Q / (c_w · ΔT)</p>
        </div>
        <div class="rk-formula-card">
            <h4>2. Przepływ objętościowy (V)</h4>
            <p>V_obj = m / ρ_wody</p>
        </div>
        <div class="rk-formula-card">
            <h4>3. Prędkość liniowa (v)</h4>
            <p>v = V_obj / A_wew</p>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie domeny przed kradzieżą (bez tagów H2/H3 w kodzie błędu)
document.addEventListener('DOMContentLoaded', function() {
    var currentHost = window.location.hostname;
    var allowedHosts = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedHosts.indexOf(currentHost) === -1) {
        var wrapperApp = document.getElementById('rk-loop-length-app');
        if (wrapperApp) {
            wrapperApp.innerHTML = '<div style="padding:40px; text-align:center; background:#1e1b4b; color:#f43f5e; border-radius:20px; border:2px solid #f43f5e; font-family:sans-serif; font-size:15px;"><strong>Błąd autoryzacji kodu.</strong> Panel obliczeń hydraulicznych jest licencjonowany wyłącznie dla witryny Projekt-Ogrzewania.pl.</div>';
        }
    }
    // Uruchomienie kalkulatora na start z wartością normatywną 80m
    rkCalcHydraulics(80);
});

// 2. Inżynierska logika kalkulacji hydraulicznej dla rury 14x2 mm
function rkCalcHydraulics(length) {
    length = parseInt(length);
    document.getElementById('rk-loop-len-text').innerText = length + ' m';

    // Założenia projektowe z tekstu Roberta: Q = 900 W, delta T = 5 K
    // Opory rosną nieliniowo powyżej 80 metrów
    var pressure;
    if (length <= 80) {
        pressure = (length * 0.2425).toFixed(1); // Stały liniowy wzrost do 19.4 kPa
    } else {
        // Gwałtowny nieliniowy skok oporów powyżej normy 80m (zjawisko dławienia przekroju)
        pressure = (19.4 + Math.pow((length - 80), 1.35) * 0.45).toFixed(1);
    }

    // Przepływ i prędkość drastycznie spadają gdy opory blokują pętlę
    var flow, velocity;
    if (length <= 80) {
        flow = "2.6";
        velocity = "0.55";
    } else {
        // Symulacja blokowania hydraulicznego
        var dropFactor = 1 - ((length - 80) * 0.022);
        if(dropFactor < 0.2) dropFactor = 0.2; // Całkowite zdławienie / minimalny przesącz
        flow = (2.6 * dropFactor).toFixed(1);
        velocity = (0.55 * dropFactor).toFixed(2);
    }

    // Aktualizacja pól tekstowych i statystyk
    document.getElementById('val-pressure').innerHTML = pressure + ' <span>kPa</span>';
    document.getElementById('val-flow').innerHTML = flow + ' <span>l/min</span>';
    document.getElementById('val-velocity').innerHTML = velocity + ' <span>m/s</span>';

    // Obsługa stanów SVG
    var svgStateCtrl = document.getElementById('rkSvgStateCtrl');
    var msgBox = document.getElementById('loop-msg');

    if (length <= 80) {
        // Stan Bezpieczny (Safe)
        svgStateCtrl.className = "rk-loop-visual-box state-safe";
        msgBox.className = "rk-loop-feedback success";
        msgBox.innerHTML = "<strong>Standard Inżynierski spełniony.</strong> Przepływ wody wynosi " + velocity + " m/s – zapewnia to prawidłowe samoodpowietrzanie obwodu (zgodnie z PN-EN 1264) bez generowania hałasów.";
    } else {
        // Stan Zablokowany (Blocked)
        svgStateCtrl.className = "rk-loop-visual-box state-blocked";
        msgBox.className = "rk-loop-feedback danger";
        msgBox.innerHTML = "<strong>KRYTYCZNE PRZEKROCZENIE NORMY!</strong> Opory osiągnęły " + pressure + " kPa. Następuje zjawisko <strong>zamknięcia hydraulicznego</strong>. Prędkość spadła do " + velocity + " m/s – pętla zostanie zapowietrzona, a pompa obiegowa nie dogrzeje tego pomieszczenia.";
    }
}
</script>



<style>
:root {
    --rk-floor-dark: #1f2937; /* Grafit inżynieryjny */
    --rk-floor-tile: #0ea5e9; /* Błękit ceramiczny */
    --rk-floor-tile-bg: #e0f2fe;
    --rk-floor-wood: #d97706; /* Ciepły bursztyn/drewno */
    --rk-floor-wood-bg: #fef3c7;
    --rk-floor-danger: #ef4444; /* Czerwień strat */
    --rk-floor-bg: #f8fafc;
    --rk-floor-card: #ffffff;
    --rk-floor-text: #374151;
    --rk-floor-border: #e5e7eb;
}

.rk-floor-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-floor-card);
    border-radius: 20px;
    box-shadow: 0 20px 40px -15px rgba(31, 41, 55, 0.12);
    border: 1px solid var(--rk-floor-border);
    overflow: hidden;
}

/* Nagłówek sekcji */
.rk-floor-header {
    background: linear-gradient(135deg, var(--rk-floor-dark) 0%, #374151 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-floor-tile);
    transition: border-color 0.4s ease;
}

.rk-floor-container.state-wood .rk-floor-header {
    border-color: var(--rk-floor-wood);
}

.rk-floor-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #e2e8f0;
    padding: 6px 16px;
    border-radius: 99px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
    border: 1px solid rgba(255, 255, 255, 0.2);
}

.rk-floor-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
}

.rk-floor-intro {
    font-size: 15px;
    line-height: 1.75;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-floor-intro strong {
    color: #ffffff;
}

.rk-floor-link {
    color: #93c5fd;
    text-decoration: none;
    border-bottom: 1px dashed #93c5fd;
    transition: all 0.3s;
}

.rk-floor-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Część Interaktywna - Suwak i Wykresy */
.rk-floor-interactive {
    padding: 40px 50px;
    background: var(--rk-floor-bg);
}

.rk-floor-controls {
    display: flex;
    gap: 15px;
    margin-bottom: 30px;
}

.rk-floor-btn {
    flex: 1;
    padding: 16px 20px;
    border: 2px solid var(--rk-floor-border);
    background: #ffffff;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-floor-text);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-floor-btn:hover { background: #f1f5f9; }

.rk-floor-btn.active[data-type="tile"] {
    border-color: var(--rk-floor-tile);
    background: var(--rk-floor-tile-bg);
    color: #0369a1;
    box-shadow: 0 8px 15px -5px rgba(14, 165, 233, 0.2);
}

.rk-floor-btn.active[data-type="wood"] {
    border-color: var(--rk-floor-wood);
    background: var(--rk-floor-wood-bg);
    color: #92400e;
    box-shadow: 0 8px 15px -5px rgba(217, 119, 6, 0.2);
}

/* Ekran Symulatora (Grid: Lewo animacja, Prawo parametry) */
.rk-floor-screen {
    display: grid;
    grid-template-columns: 260px 1fr;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-floor-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.02);
}

/* Część wizualna (SVG) */
.rk-floor-visual {
    background: var(--rk-floor-dark);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    height: 100%;
    min-height: 200px;
}

.rk-svg-cross {
    width: 100%;
    height: 100%;
}

/* Elementy SVG z CSS Transitions */
.svg-layer-top { transition: fill 0.4s ease, height 0.4s ease, y 0.4s ease; }
.svg-heat-arrow { stroke-dasharray: 10 10; transition: stroke-dashoffset 0.5s, stroke 0.4s, opacity 0.4s; }
.svg-block-wave { opacity: 0; transform-origin: top center; transition: opacity 0.4s, transform 0.4s; }

@keyframes heatFlowFast { to { stroke-dashoffset: -30; } }
@keyframes heatFlowSlow { to { stroke-dashoffset: -10; } }

/* Stan 1: Płytki (Tile) */
.state-tile .svg-layer-top { fill: #38bdf8; height: 10px; y: 20px; }
.state-tile .svg-heat-arrow { stroke: #ef4444; animation: heatFlowFast 1s linear infinite; opacity: 1; }
.state-tile .svg-block-wave { opacity: 0; transform: scaleY(0.5); }

/* Stan 2: Panele/Drewno (Wood) */
.state-wood .svg-layer-top { fill: #f59e0b; height: 18px; y: 12px; }
.state-wood .svg-heat-arrow { stroke: #f97316; animation: heatFlowSlow 2s linear infinite; opacity: 0.5; }
.state-wood .svg-block-wave { opacity: 1; transform: scaleY(1); fill: #f87171; }

/* Część z parametrami (Grid) */
.rk-floor-param-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-floor-box {
    background: var(--rk-floor-bg);
    padding: 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-floor-border);
    transition: all 0.3s;
}

.rk-floor-label {
    font-size: 12px;
    color: #64748b;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 8px;
}

.rk-floor-value {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-floor-dark);
    display: flex;
    align-items: baseline;
    gap: 5px;
}

.rk-floor-value span { font-size: 14px; font-weight: 600; color: #94a3b8; }

.val-dynamic { transition: color 0.3s; }
.state-tile .val-dynamic { color: var(--rk-floor-tile); }
.state-wood .val-dynamic { color: var(--rk-floor-danger); }

/* Podsumowanie/Feedback */
.rk-floor-feedback {
    grid-column: 1 / -1;
    font-size: 14px;
    color: var(--rk-floor-text);
    line-height: 1.6;
    margin-top: 10px;
    padding-top: 20px;
    border-top: 1px solid var(--rk-floor-border);
}

/* Wzory i procedury - dół */
.rk-floor-footer-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    padding: 0 50px 40px;
}

.rk-floor-info-card {
    background: #ffffff;
    border: 1px solid var(--rk-floor-border);
    padding: 25px;
    border-radius: 16px;
}

.rk-floor-info-card h4 {
    font-size: 15px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: var(--rk-floor-dark);
}

.rk-floor-info-card p {
    font-size: 13px;
    line-height: 1.6;
    color: #475569;
    margin: 0;
}

.rk-math-block {
    background: var(--rk-floor-bg);
    padding: 12px;
    border-radius: 8px;
    font-family: monospace;
    font-size: 13px;
    color: var(--rk-floor-dark);
    margin-top: 10px;
    border-left: 3px solid #64748b;
}

@media (max-width: 768px) {
    .rk-floor-header, .rk-floor-interactive { padding: 30px 20px; }
    .rk-floor-controls { flex-direction: column; }
    .rk-floor-screen { grid-template-columns: 1fr; }
    .rk-floor-visual { min-height: 160px; }
    .rk-floor-param-grid { grid-template-columns: 1fr; }
    .rk-floor-footer-grid { grid-template-columns: 1fr; padding: 0 20px 30px; gap: 15px; }
    .rk-floor-title { font-size: 24px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-okladziny",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Wpływ okładziny podłogowej na wydajność frezowanej podłogówki",
    "description": "Porównanie oporu cieplnego (gres vs panele) zgodnie z normą PN-EN 1264-3. Jak wybór materiału wpływa na temperaturę zasilania i koszty pracy pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-opor-cieplny",
    "name": "Tabela oporu cieplnego posadzek i wpływu na zasilanie pompy ciepła",
    "description": "Techniczne zestawienie parametrów przewodzenia dla płytek ceramicznych i paneli laminowanych w układach płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny posadzki r",
      "panele na ogrzewanie podłogowe",
      "gres a podłogówka",
      "spadek temperatury okładziny",
      "norma PN-EN 1264-3"
    ],
    "measurementTechnique": "Obliczenia spadku temperatury ΔT wg prawa Fouriera dla założonej gęstości strumienia cieplnego q = 60 W/m².",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Gres/Ceramika: R = 0,015 m²·K/W. Minimalny opór, spadek temperatury to zaledwie 0,9 K.",
        "Panele podłogowe: R = 0,10 m²·K/W. Znaczny opór izolacyjny, wymuszający podniesienie zasilania o 5,1 K."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-opor-cieplny",
    "name": "Symulator Strat na Oporze Cieplnym",
    "description": "Interaktywny panel zestawiający różnice termiczne i ekonomiczne pomiędzy zastosowaniem ceramiki a drewna/paneli nad instalacją podłogową.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-floor-container state-tile" id="rk-floor-sim-app">
    <div class="rk-floor-header">
        <div class="rk-floor-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            Materiały wykończeniowe
        </div>
        <h2 class="rk-floor-title">Jak rodzaj okładziny wpływa na wydajność frezowanej podłogówki?</h2>
        <p class="rk-floor-intro">
            Rodzaj okładziny wierzchniej decyduje o końcowej gęstości strumienia cieplnego. Zgodnie z wytycznymi normy <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/" class="rk-floor-link">PN-EN 1264-3</a>, całkowity <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/" class="rk-floor-link">opór cieplny (R) warstw posadzkowych</a> nad rurami nie może przekraczać <strong>0,15 m²·K/W</strong>. 
        </p>
        <p class="rk-floor-intro" style="margin:0;">
            Wybór między ceramiką a drewnem dramatycznie wpływa na to, czy nasze źródło ciepła będzie pracowało ekonomicznie, czy z wymuszonym, wyższym parametrem zasilania.
        </p>
    </div>

    <div class="rk-floor-interactive">
        <div class="rk-floor-controls">
            <button class="rk-floor-btn active" data-type="tile" onclick="rkSwitchFloor('tile')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="7" height="7"></rect><rect x="14" y="3" width="7" height="7"></rect><rect x="14" y="14" width="7" height="7"></rect><rect x="3" y="14" width="7" height="7"></rect></svg>
                Gres / Płytki Ceramiczne
            </button>
            <button class="rk-floor-btn" data-type="wood" onclick="rkSwitchFloor('wood')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="4" y1="21" x2="4" y2="14"></line><line x1="4" y1="10" x2="4" y2="3"></line><line x1="12" y1="21" x2="12" y2="12"></line><line x1="12" y1="8" x2="12" y2="3"></line><line x1="20" y1="21" x2="20" y2="16"></line><line x1="20" y1="12" x2="20" y2="3"></line></svg>
                Panele / Deska Warstwowa
            </button>
        </div>

        <div class="rk-floor-screen">
            <div class="rk-floor-visual">
                <svg class="rk-svg-cross" viewBox="0 0 100 100" preserveAspectRatio="none">
                    <circle cx="50" cy="70" r="10" fill="#cbd5e1" stroke="#334155" stroke-width="2"/>
                    <circle cx="50" cy="70" r="6" fill="#ef4444"/>

                    <path class="svg-block-wave" d="M 20 30 Q 50 40 80 30" fill="none" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>
                    
                    <path class="svg-heat-arrow" d="M 35 60 L 35 5" fill="none" stroke-width="4" stroke-linecap="round"/>
                    <path class="svg-heat-arrow" d="M 50 55 L 50 0" fill="none" stroke-width="5" stroke-linecap="round"/>
                    <path class="svg-heat-arrow" d="M 65 60 L 65 5" fill="none" stroke-width="4" stroke-linecap="round"/>
                    
                    <rect class="svg-layer-top" x="0" width="100"/>
                    <line x1="0" y1="30" x2="100" y2="30" stroke="#334155" stroke-width="2" stroke-dasharray="4 2"/>
                </svg>
            </div>

            <div class="rk-floor-param-grid">
                <div class="rk-floor-box">
                    <div class="rk-floor-label">Opór cieplny (R)</div>
                    <div class="rk-floor-value val-dynamic" id="rk-val-r">0,015 <span>m²·K/W</span></div>
                </div>
                <div class="rk-floor-box">
                    <div class="rk-floor-label">Spadek temp. warstwy (ΔT)</div>
                    <div class="rk-floor-value val-dynamic" id="rk-val-dt">0,9 <span>K</span></div>
                </div>
                <div class="rk-floor-box">
                    <div class="rk-floor-label">Wydajność (Zasilanie 35°C)</div>
                    <div class="rk-floor-value val-dynamic" id="rk-val-power">85 - 100 <span>W/m²</span></div>
                </div>
                <div class="rk-floor-box">
                    <div class="rk-floor-label">Narzut kosztów prądu (Pompa)</div>
                    <div class="rk-floor-value val-dynamic" id="rk-val-cost">0% <span>(Baza)</span></div>
                </div>

                <div class="rk-floor-feedback" id="rk-floor-msg">
                    <strong>Idealny przesył energii.</strong> Ceramika wykazuje znikomy opór cieplny. Ogrzewanie podłogowe pracuje na minimalnych temperaturach zasilania, co gwarantuje najwyższy możliwy współczynnik COP dla pompy ciepła.
                </div>
            </div>
        </div>
    </div>

    <div class="rk-floor-footer-grid">
        <div class="rk-floor-info-card">
            <h4>Obliczenie wpływu oporu posadzki</h4>
            <p>Załóżmy zapotrzebowanie na poziomie gęstości strumienia <strong>q = 60 W/m²</strong>. Wzór na spadek temperatury na samej warstwie okładziny wyznacza się z prostej zależności:</p>
            <div class="rk-math-block">
                ΔT_okładziny = q · R
            </div>
            <p style="margin-top:10px;">Dla paneli musimy podnieść temperaturę wody zasilającej rozdzielacz o całe <strong>5,1 K</strong> względem układu z gresem, by dostarczyć do pokoju tyle samo ciepła.</p>
        </div>
        <div class="rk-floor-info-card">
            <h4>Wpływ na koszty pompy ciepła</h4>
            <p>
                Każde wymuszone <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/" style="color:var(--rk-floor-dark); font-weight:700;">podniesienie temperatury zasilania o 1°C</a> (aby przebić się przez barierę, jaką stanowią panele) skutkuje spadkiem sprawności sprężarki. W skali całego sezonu grzewczego oznacza to <strong>wzrost zużycia energii elektrycznej o około 2,5% na każdy stopień</strong>. Wybór drewna to ok. 12-15% wyższe rachunki za ogrzewanie.
            </p>
        </div>
    </div>
</div>

<script>
// 1. Zabezpieczenie domeny przed kradzieżą (bez H2/H3 w kodzie błędu)
document.addEventListener('DOMContentLoaded', function() {
    var checkDomain = window.location.hostname;
    var allowedHosts = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedHosts.indexOf(checkDomain) === -1) {
        var wrapperApp = document.getElementById('rk-floor-sim-app');
        if (wrapperApp) {
            wrapperApp.innerHTML = '<div style="padding:40px; text-align:center; background:#1f2937; color:#ef4444; border-radius:20px; border:2px solid #ef4444; font-family:sans-serif; font-size:15px;"><strong>Odmowa dostępu.</strong> Ten symulator jest licencjonowany wyłącznie dla witryny Projekt-Ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulatora
function rkSwitchFloor(type) {
    var container = document.getElementById('rk-floor-sim-app');
    var msgBox = document.getElementById('rk-floor-msg');
    
    // Zmiana przycisków
    var btns = document.querySelectorAll('.rk-floor-btn');
    btns.forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelector('.rk-floor-btn[data-type="' + type + '"]').classList.add('active');

    // Zmiana klas w kontenerze (uruchamia CSS SVG)
    if (type === 'tile') {
        container.className = 'rk-floor-container state-tile';
        
        document.getElementById('rk-val-r').innerHTML = "0,015 <span>m²·K/W</span>";
        document.getElementById('rk-val-dt').innerHTML = "0,9 <span>K</span>";
        document.getElementById('rk-val-power').innerHTML = "85 - 100 <span>W/m²</span>";
        document.getElementById('rk-val-cost').innerHTML = "0% <span>(Baza)</span>";

        msgBox.innerHTML = "<strong>Idealny przesył energii.</strong> Ceramika wykazuje znikomy opór cieplny. Ogrzewanie podłogowe pracuje na minimalnych temperaturach zasilania, co gwarantuje najwyższy możliwy współczynnik COP dla pompy ciepła.";
        
    } else {
        container.className = 'rk-floor-container state-wood';
        
        document.getElementById('rk-val-r').innerHTML = "0,10 <span>m²·K/W</span>";
        document.getElementById('rk-val-dt').innerHTML = "6,0 <span>K</span>";
        document.getElementById('rk-val-power').innerHTML = "50 - 65 <span>W/m²</span>";
        document.getElementById('rk-val-cost').innerHTML = "+ 12,5% <span>(Straty)</span>";

        msgBox.innerHTML = "<strong>Izolator na podłogówce.</strong> Panele lub deski stawiają opór, blokując ciepło. Instalacja <a href='https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/' style='color:#ef4444; font-weight:700;'>wymusza podniesienie parametru zasilania</a> o dodatkowe ~5°C, by osiągnąć tę samą temperaturę w pomieszczeniu.";
    }
}
</script>



<style>
:root {
    --rk-err-dark: #0f172a; /* Głęboki asfaltowy grafit */
    --rk-err-alert: #eab308; /* Żółć ostrzegawcza (Safety Yellow) */
    --rk-err-alert-light: #fef9c3;
    --rk-err-danger: #ef4444; /* Alarmowa czerwień */
    --rk-err-danger-light: #fef2f2;
    --rk-err-bg: #f8fafc;
    --rk-err-card: #ffffff;
    --rk-err-text: #334155;
    --rk-err-border: #e2e8f0;
}

.rk-err-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-err-card);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(15, 23, 42, 0.2);
    border: 1px solid rgba(234, 179, 8, 0.3);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-err-header {
    background: linear-gradient(135deg, #1c1917 0%, var(--rk-err-dark) 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
}

.rk-err-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-err-alert) 0%, var(--rk-err-danger) 100%);
}

.rk-err-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(234, 179, 8, 0.15);
    color: #fef08a;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
    border: 1px solid rgba(254, 240, 138, 0.2);
}

.rk-err-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
}

.rk-err-intro {
    font-size: 15px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-err-intro strong {
    color: #ffffff;
}

.rk-err-link {
    color: #fef08a;
    text-decoration: none;
    border-bottom: 1px dashed #fef08a;
    transition: all 0.3s;
}

.rk-err-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Moduł Interaktywny */
.rk-err-interactive {
    padding: 40px 50px;
    background: var(--rk-err-bg);
}

.rk-err-grid-layout {
    display: grid;
    grid-template-columns: 260px 1fr;
    gap: 30px;
}

/* Lewa strona: Selektor błędów */
.rk-err-menu {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rk-menu-btn {
    padding: 15px;
    background: #ffffff;
    border: 2px solid var(--rk-err-border);
    border-radius: 12px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    color: var(--rk-err-text);
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    line-height: 1.4;
}

.rk-menu-btn:hover { background: #f1f5f9; border-color: #cbd5e1; }

.rk-menu-btn.active[data-err="dust"] { border-color: var(--rk-err-alert); background: var(--rk-err-alert-light); color: #854d0e; }
.rk-menu-btn.active[data-err="deep"] { border-color: var(--rk-err-danger); background: var(--rk-err-danger-light); color: #991b1b; }
.rk-menu-btn.active[data-err="bend"] { border-color: #a855f7; background: #f3e8ff; color: #6b21a8; }

/* Prawa strona: Monitor rentgenowski i SVG */
.rk-err-monitor {
    background: #ffffff;
    border: 1px solid var(--rk-err-border);
    border-radius: 16px;
    padding: 25px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    display: flex;
    flex-direction: column;
}

.rk-err-visual-frame {
    background: #1e1b4b; /* Ciemne indygo dla efektu RTG */
    border-radius: 12px;
    padding: 20px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    position: relative;
    border: 2px solid #312e81;
}

.rk-err-svg {
    width: 100%;
    height: 100%;
    max-width: 320px;
}

/* Elementy i warstwy SVG */
.svg-layer-dust { opacity: 0; transition: opacity 0.4s; }
.svg-screed-crack { opacity: 0; stroke-dasharray: 40; stroke-dashoffset: 40; transition: opacity 0.4s; }
.svg-foil-cut { d: path("M 10 80 L 90 80"); transition: all 0.4s; }
.svg-pipe-kink { d: path("M 35 30 Q 50 40 65 30"); transition: all 0.4s; }

/* --- STANY ANIMACJI DLA POSZCZEGÓLNYCH BŁĘDÓW --- */
/* Stan: dust (Brak odkurzania i gruntu) */
.state-dust .svg-layer-dust { opacity: 1; }
.state-dust .svg-screed-crack { opacity: 1; stroke-dashoffset: 0; transition: stroke-dashoffset 0.6s 0.2s ease-out; }

/* Stan: deep (Zbyt głębokie cięcie) */
.state-deep .svg-screed-box { transform: translateY(12px); } /* Symulacja głębszego cięcia */
.state-deep .svg-foil-cut { d: path("M 10 80 L 42 80 L 50 92 L 58 80 L 90 80"); stroke: var(--rk-err-danger); }

/* Stan: bend (Zły promień gięcia) */
.state-bend .svg-pipe-kink { d: path("M 35 30 L 50 52 L 65 30"); stroke: #c084fc; stroke-width: 10; }

/* Tekst dynamiczny */
.rk-err-dynamic-text {
    margin-top: 20px;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-err-text);
    min-height: 80px;
}

/* Dolna sekcja z kafelkami dla Mobile */
.rk-err-footer-list {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 30px 50px 40px;
    background: #ffffff;
}

.rk-err-tile-card {
    background: var(--rk-err-bg);
    border: 1px solid var(--rk-err-border);
    padding: 20px;
    border-radius: 12px;
}

.rk-err-tile-card h4 {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-err-dark);
    margin: 0 0 8px 0;
}

.rk-err-tile-card p {
    font-size: 12px;
    line-height: 1.5;
    color: #64748b;
    margin: 0;
}

@media (max-width: 768px) {
    .rk-err-header, .rk-err-interactive { padding: 30px 20px; }
    .rk-err-grid-layout { grid-template-columns: 1fr; }
    .rk-err-footer-list { grid-template-columns: 1fr; padding: 0 20px 30px; gap: 15px; }
    .rk-err-title { font-size: 24px; }
    .rk-err-visual-frame { height: 150px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Najczęstsze błędy wykonawcze podczas frezowania podłogówki",
    "description": "Przewodnik po awariach i uchybieniach montażowych. Dowiedz się, dlaczego brak odkurzania bruzd, brak dylatacji i zbyt mały promień gięcia niszczą jastrych.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-awarie",
    "name": "Wskaźniki fizyczne i strukturalne błędów wykonawczych",
    "description": "Zestawienie fizycznych wartości granicznych naprężeń termicznych, długości osłon oraz ciśnień kontrolnych dla systemów jastrychów nacinanych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "błędy wykonawcze frezowania ogrzewania",
      "odparzenie jastrychu naprężenia termiczne",
      "promień gięcia rury pex pert",
      "norma PN-EN 1264-4 dylatacje",
      "ciśnieniowa próba szczelności podłogówki"
    ],
    "measurementTechnique": "Analiza wytrzymałościowa adhezji zapraw pod wpływem naprężeń termicznych powyżej 0,2 N/mm² oraz weryfikacja spadków ciśnienia testowego.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Naprężenia termiczne: Przekroczenie 0,2 N/mm² przy braku gruntu powoduje nieodwracalne odspojenie okładziny.",
        "Promień łuku: Przekroczenie kryterium r < 5d generuje mikropęknięcia struktury polimeru i wzrost oporów o 40%."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-detektor-bledow",
    "name": "Interaktywny Detektor Uszkodzeń Przegrody",
    "description": "Aplikacja symulująca rtg posadzki i wizualizująca skutki mechaniczne oraz hydrauliczne zaniechania procedur normatywnych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-err-container" id="rk-damage-detector-app">
    <div class="rk-err-header">
        <div class="rk-err-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Czerwone Flagi Montażu
        </div>
        <h2 class="rk-err-title">Jakie są najczęstsze błędy wykonawcze podczas frezowania podłogówki?</h2>
        <p class="rk-err-intro">
            Najpoważniejszym uchybieniem jest niedokładne oczyszczenie i zaniechanie gruntowania wyfrezowanych rowków przed aplikacją masy wypełniającej. Skutkuje to brakiem adhezji i <strong>odparzeniem jastrychu pod wpływem naprężeń termicznych o wartości powyżej 0,2 N/mm²</strong>. Pył powstały podczas cięcia działa jak warstwa separacyjna – jeśli nie zostanie odessany odkurzaczem przemysłowym klasy M, wlewana masa naprawcza nie zwiąże się strukturalnie z podłożem.
        </p>
        <p class="rk-err-intro" style="margin-top: 15px;">
            Kolejnym krytycznym błędem jest <strong>zbyt głębokie frezowanie (powyżej 25 mm)</strong>, które w wylewkach o grubości 40 mm przecina jastrych na wylot, niszcząc izolację przeciwwilgociową z folii i doprowadzając do penetracji wody w głąb stropu.
        </p>
    </div>

    <div class="rk-err-interactive">
        <div id="rk-err-view-core" class="rk-err-grid-layout state-dust">
            
            <div class="rk-err-menu">
                <button class="rk-menu-btn active" data-err="dust" onclick="rkToggleError('dust')">1. Pył i brak gruntowania bruzd</button>
                <button class="rk-menu-btn" data-err="deep" onclick="rkToggleError('deep')">2. Zbyt głęboki wykop frezarki</button>
                <button class="rk-menu-btn" data-err="bend" onclick="rkToggleError('bend')">3. Załamanie rury na zakręcie</button>
            </div>

            <div class="rk-err-monitor">
                <div class="rk-err-visual-frame">
                    <svg class="rk-err-svg" viewBox="0 0 100 100">
                        <rect x="0" y="85" width="100" height="15" fill="#1e1b4b"/>
                        
                        <path class="svg-foil-cut" fill="none" stroke="#6366f1" stroke-width="2"/>

                        <g class="svg-screed-box" style="transition: transform 0.4s;">
                            <rect x="10" y="30" width="80" height="50" fill="#475569" opacity="0.8"/>
                            <path d="M 35 30 L 35 60 L 65 60 L 65 30" fill="#1e1b4b"/>
                            
                            <path class="svg-layer-dust" d="M 35 30 L 35 60 L 65 60 L 65 30" fill="none" stroke="#eab308" stroke-width="3"/>
                            
                            <path class="svg-pipe-kink" fill="none" stroke="#ef4444" stroke-width="8" stroke-linecap="round"/>
                            <path class="svg-pipe-kink" fill="none" stroke="#38bdf8" stroke-width="4" stroke-linecap="round"/>

                            <path class="svg-screed-crack" d="M 35 45 L 20 40 M 65 50 L 85 55 M 50 60 L 50 75" fill="none" stroke="#ef4444" stroke-width="2" stroke-linecap="round"/>
                        </g>
                    </svg>
                </div>

                <div class="rk-err-dynamic-text" id="rk-err-text-content">
                    Wadliwe wykonanie. Pozostawiony mącznik i pył betonowy drastycznie ograniczają adhezję mas cementowych. Pod wpływem naprężeń termicznych powyżej <strong>0,2 N/mm²</strong> górna warstwa posadzki pęka i odkleja się od starego podłoża, niszcząc płytki lub panele.
                </div>
            </div>

        </div>
    </div>

    <div class="rk-err-footer-list">
        <div class="rk-err-tile-card" style="border-top: 3px solid var(--rk-err-alert);">
            <h4>Brak dylatacji progowych</h4>
            <p>
                Zignorowanie wytycznych normy <strong>PN-EN 1264-4</strong> w progach drzwiowych skutkuje pękaniem jastrychu. Rury przechodzące przez szczeliny dylatacyjne muszą bezwzględnie biec w peszlach ochronnych o długości min. <strong>400 mm</strong>.
            </p>
        </div>
        <div class="rk-err-tile-card" style="border-top: 3px solid #a855f7;">
            <h4>Zaginanie rury "na siłę"</h4>
            <p>
                Przekroczenie minimalnego promienia gięcia (<strong>r < 5d</strong>, czyli poniżej <strong>70 mm</strong> dla rury 14 mm) wywołuje mikropęknięcia struktury polimeru EVOH. <a href="https://projekt-ogrzewania.pl/za-dluga-petla-podlogowki/" style="color:#a855f7; font-weight:700;">Zadławienie przekroju rury</a> podnosi opory hydrauliczne o ponad <strong>40%</strong>.
            </p>
        </div>
        <div class="rk-err-tile-card" style="border-top: 3px solid var(--rk-err-danger);">
            <h4>Zalewanie bez próby 0,6 MPa</h4>
            <p>
                Zalanie bruzd masą samopoziomującą bez wykonania 24-godzinnego testu szczelności to skrajna nieodpowiedzialność. Rury muszą pozostać pod <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/" style="color:var(--rk-err-danger); font-weight:700;">roboczym ciśnieniem próbnym</a> podczas całego procesu aplikacji chemii budowlanej.
            </p>
        </div>
    </div>
</div>

<script>
// 1. Ochrona licencji kodu (bez tagów nagłówkowych H2/H3 w komunikacie)
document.addEventListener('DOMContentLoaded', function() {
    var currentDomain = window.location.hostname;
    var whitelist = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (whitelist.indexOf(currentDomain) === -1) {
        var wrapper = document.getElementById('rk-damage-detector-app');
        if (wrapper) {
            wrapper.innerHTML = '<div style="padding:40px; text-align:center; background:#1c1917; color:#ef4444; border-radius:20px; border:2px solid #ef4444; font-family:sans-serif; font-size:15px;"><strong>Naruszenie protokołu bezpieczeństwa.</strong> Skrypt monitorowania błędów wykonawczych jest przypisany wyłącznie do serwisu Projekt-Ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełącznika błędów wykonawczych
function rkToggleError(errorType) {
    var coreView = document.getElementById('rk-err-view-core');
    var textFrame = document.getElementById('rk-err-text-content');

    // Reset klas widoku
    coreView.className = "rk-err-grid-layout";
    coreView.classList.add('state-' + errorType);

    // Zmiana klas aktywności przycisków menu
    var buttons = document.querySelectorAll('.rk-menu-btn');
    buttons.forEach(function(b) { b.classList.remove('active'); });
    document.querySelector('.rk-menu-btn[data-err="' + errorType + '"]').classList.add('active');

    // Dynamiczna aktualizacja tekstu inżynierskiego
    if (errorType === 'dust') {
        textFrame.innerHTML = "Wadliwe wykonanie. Pozostawiony mącznik i pył betonowy drastycznie ograniczają adhezję mas cementowych. Pod wpływem naprężeń termicznych powyżej <strong>0,2 N/mm²</strong> górna warstwa posadzki pęka i odkleja się od starego podłoża, niszcząc płytki lub panele.";
    } else if (errorType === 'deep') {
        textFrame.innerHTML = "Krytyczne osłabienie jastrychu. Frezowanie na głębokość powyżej <strong>25 mm</strong> przy cienkiej wylewce przecina beton konstrukcyjny i rozrywa dolną <a href='https://projekt-ogrzewania.pl/jakie-sposoby-izolacji-pod-ogrzewanie-podlogowe/' style='color:var(--rk-err-danger); font-weight:700;'>folię izolacyjną</a>. Woda z masy zarobowej przenika w głąb stropu, wywołując zacieki.";
    } else {
        textFrame.innerHTML = "Wada hydrauliczna. Gięcie rury ze zbyt małym promieniem (<strong>poniżej 70 mm</strong>) powoduje przewężenie przekroju (tzw. załamanie rury). Skutkuje to lokalnym <a href='https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/' style='color:#6b21a8; font-weight:700;'>wzrostem oporów hydraulicznych obwodu o ponad 40%</a> i dławieniem przepływu.";
    }
}
</script>



<style>
:root {
    --rk-cs2-dark: #0f172a; /* Głęboki granat */
    --rk-cs2-brand: #10b981; /* Szmaragdowy - Sukces */
    --rk-cs2-brand-light: #d1fae5;
    --rk-cs2-accent: #3b82f6; /* Błękit inżynierski */
    --rk-cs2-danger: #ef4444; /* Czerwony - Awaria/Błąd */
    --rk-cs2-danger-light: #fee2e2;
    --rk-cs2-bg: #f8fafc;
    --rk-cs2-card: #ffffff;
    --rk-cs2-text: #475569;
    --rk-cs2-border: #e2e8f0;
}

.rk-cs2-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-cs2-card);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.15);
    border: 1px solid var(--rk-cs2-border);
    overflow: hidden;
}

/* ================= HEADER ================= */
.rk-cs2-header {
    background: linear-gradient(135deg, var(--rk-cs2-dark) 0%, #1e293b 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    overflow: hidden;
}

.rk-cs2-header::after {
    content: '';
    position: absolute;
    top: -100px;
    right: -50px;
    width: 300px;
    height: 300px;
    background: radial-gradient(circle, rgba(16, 185, 129, 0.15) 0%, transparent 70%);
    border-radius: 50%;
    pointer-events: none;
}

.rk-cs2-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(110, 231, 183, 0.2);
}

.rk-cs2-title {
    font-size: 32px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0 0 25px 0;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

/* Kafelki metryczki w headerze */
.rk-cs2-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs2-stat-box {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(8px);
}

.rk-cs2-stat-label {
    display: block;
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
    letter-spacing: 0.5px;
}

.rk-cs2-stat-value {
    display: block;
    font-size: 17px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= AUTOR I WSTĘP ================= */
.rk-cs2-intro-section {
    padding: 40px 50px 30px;
    background: #ffffff;
}

.rk-cs2-author-box {
    background: var(--rk-cs2-bg);
    border-left: 4px solid var(--rk-cs2-accent);
    padding: 20px;
    border-radius: 0 16px 16px 0;
    display: flex;
    align-items: center;
    gap: 20px;
    margin-bottom: 25px;
}

.rk-cs2-author-photo {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    object-fit: cover;
    border: 3px solid #ffffff;
    box-shadow: 0 4px 15px rgba(59, 130, 246, 0.2);
    flex-shrink: 0;
}

.rk-cs2-author-text {
    font-size: 15px;
    color: var(--rk-cs2-dark);
    line-height: 1.6;
    margin: 0;
}

.rk-cs2-author-text a {
    color: var(--rk-cs2-accent);
    font-weight: 800;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.rk-cs2-lead {
    font-size: 15px;
    line-height: 1.8;
    color: var(--rk-cs2-text);
    margin: 0 0 15px 0;
}

.rk-cs2-lead strong {
    color: var(--rk-cs2-dark);
}

/* ================= INTERAKTYWNA ANALIZA BŁĘDU ================= */
.rk-cs2-interactive {
    padding: 0 50px 40px;
}

.rk-cs2-sim-wrapper {
    background: #ffffff;
    border: 1px solid var(--rk-cs2-border);
    border-radius: 20px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    overflow: hidden;
}

/* Zakładki sterujące */
.rk-cs2-tabs {
    display: flex;
    border-bottom: 1px solid var(--rk-cs2-border);
    background: var(--rk-cs2-bg);
}

.rk-cs2-tab-btn {
    flex: 1;
    padding: 20px;
    border: none;
    background: transparent;
    font-size: 15px;
    font-weight: 800;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-cs2-tab-btn:hover { background: #f1f5f9; color: var(--rk-cs2-dark); }

.rk-cs2-tab-btn.active[data-view="amateur"] {
    background: #ffffff;
    color: #b91c1c;
    border-bottom: 3px solid var(--rk-cs2-danger);
}

.rk-cs2-tab-btn.active[data-view="pro"] {
    background: #ffffff;
    color: #047857;
    border-bottom: 3px solid var(--rk-cs2-brand);
}

/* Ekran SVG + Wyniki */
.rk-cs2-screen {
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 30px;
    padding: 30px;
}

.rk-cs2-visual {
    background: var(--rk-cs2-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    border: 2px solid #1e293b;
}

.rk-cs2-svg { width: 100%; height: 100%; }

/* --- NOWE Animacje i warstwy dla rzutu (Blueprint) --- */
.svg-blueprint-path { fill: none; stroke-linecap: round; stroke-linejoin: round; transition: opacity 0.4s; }
.svg-flow-anim { stroke-dasharray: 8 8; animation: flowBlueprint 1s linear infinite; }
.svg-gauge-pointer { transform-origin: 50px 50px; transition: transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }

@keyframes flowBlueprint { to { stroke-dashoffset: -16; } }
@keyframes pulseDanger { 0% { filter: drop-shadow(0 0 2px #ef4444); } 100% { filter: drop-shadow(0 0 10px #ef4444); } }

/* Stan 1: Amatorski (1 długa pętla = Błąd) */
.state-amateur .svg-blueprint-amateur { opacity: 1; stroke: #ef4444; }
.state-amateur .svg-blueprint-pro { opacity: 0; }
.state-amateur .svg-gauge-pointer { transform: rotate(120deg); stroke: #ef4444; }
.state-amateur .svg-danger-ring { stroke: #ef4444; animation: pulseDanger 1s infinite alternate; opacity: 1; }

/* Stan 2: Pro (3 krótkie strefy = Sukces) */
.state-pro .svg-blueprint-amateur { opacity: 0; }
.state-pro .svg-blueprint-pro { opacity: 1; stroke: #10b981; }
.state-pro .svg-gauge-pointer { transform: rotate(-50deg); stroke: #10b981; }
.state-pro .svg-danger-ring { opacity: 0; }

/* Panel Wyników Textowych */
.rk-cs2-data-panel {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-cs2-data-title {
    font-size: 18px;
    font-weight: 900;
    margin: 0 0 15px 0;
    color: var(--rk-cs2-dark);
}

.rk-cs2-data-desc {
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-cs2-text);
    margin: 0 0 20px 0;
}

.rk-cs2-metrics {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-cs2-metric-box {
    background: var(--rk-cs2-bg);
    border: 1px solid var(--rk-cs2-border);
    padding: 15px;
    border-radius: 12px;
}

.rk-cs2-metric-lbl { font-size: 11px; color: #64748b; font-weight: 800; text-transform: uppercase; margin-bottom: 5px; }
.rk-cs2-metric-val { font-size: 18px; font-weight: 900; color: var(--rk-cs2-dark); }
.rk-cs2-metric-val span { font-size: 13px; font-weight: 600; color: #94a3b8; }

.state-amateur .dyn-color { color: #dc2626; }
.state-pro .dyn-color { color: #059669; }

/* ================= REZULTATY I CTA ================= */
.rk-cs2-results-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 0 50px 40px;
}

.rk-cs2-result-card {
    background: #ffffff;
    border: 1px solid var(--rk-cs2-border);
    padding: 25px;
    border-radius: 16px;
    position: relative;
    overflow: hidden;
}

.rk-cs2-result-card::before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    width: 4px;
    height: 100%;
    background: var(--rk-cs2-brand);
}

.rk-cs2-result-card.gold::before { background: #f59e0b; }

.rk-cs2-result-lbl { font-size: 12px; color: #64748b; font-weight: 800; text-transform: uppercase; margin-bottom: 10px; }
.rk-cs2-result-val { font-size: 26px; font-weight: 900; color: var(--rk-cs2-dark); margin-bottom: 10px; }
.rk-cs2-result-desc { font-size: 13px; color: var(--rk-cs2-text); line-height: 1.5; margin: 0; }

/* CTA */
.rk-cs2-cta {
    background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
    padding: 40px 50px;
    text-align: center;
    border-top: 4px solid var(--rk-cs2-accent);
}

.rk-cs2-cta-h3 { font-size: 22px; font-weight: 900; color: #ffffff; margin: 0 0 15px 0; }
.rk-cs2-cta-p { font-size: 15px; color: #94a3b8; line-height: 1.6; max-width: 700px; margin: 0 auto 30px auto; }

.rk-cs2-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-cs2-accent);
    color: #ffffff;
    font-size: 16px;
    font-weight: 900;
    padding: 18px 36px;
    border-radius: 12px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(59, 130, 246, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-cs2-btn:hover { transform: translateY(-4px); background: #2563eb; box-shadow: 0 15px 35px -5px rgba(59, 130, 246, 0.5); }
.rk-cs2-btn svg { transition: transform 0.3s; }
.rk-cs2-btn:hover svg { transform: translateX(5px); }

@media (max-width: 768px) {
    .rk-cs2-header, .rk-cs2-intro-section, .rk-cs2-interactive, .rk-cs2-cta { padding: 30px 20px; }
    .rk-cs2-stats-grid { grid-template-columns: 1fr 1fr; }
    .rk-cs2-author-box { flex-direction: column; text-align: center; border-left: none; border-top: 4px solid var(--rk-cs2-accent); border-radius: 0 0 16px 16px; }
    .rk-cs2-tabs { flex-direction: column; }
    .rk-cs2-screen { grid-template-columns: 1fr; padding: 20px; }
    .rk-cs2-results-grid { grid-template-columns: 1fr; padding: 0 20px 30px; }
    .rk-cs2-visual { height: 220px; }
    .rk-cs2-title { font-size: 24px; }
    .rk-cs2-btn { width: 100%; padding: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Case Study: Rzeczywisty projekt termomodernizacji w Szczecinie",
    "description": "Analiza inżynierska termomodernizacji 135 m² domu ze zmianą źródła ciepła na pompę. Redukcja pętli z 110m do 72m uchroniła instalację przed oporami rzędu 38 kPa.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-szczecin",
    "name": "Parametry Projektowe i Oszczędności - Termomodernizacja Szczecin",
    "description": "Zestawienie parametrów wejściowych budynku wykorzystanych do optymalizacji hydraulicznej zasilania ogrzewania podłogowego po frezowaniu.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego frezowanego",
      "opory hydrauliczne 38 kpa rura 14mm",
      "maksymalna długość pętli ogrzewania podłogowego",
      "projektowe obciążenie cieplne budynku 7.8 kw",
      "wymiana kotła na pompę ciepła szczecin"
    ],
    "measurementTechnique": "Obliczenia hydrauliczne długości pętli (max 72 m) względem projektowego obciążenia cieplnego (7,8 kW) w celu zapobieżenia zjawisku dławienia przepływów.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przed poprawkami OZC: Planowane pętle 110 m, opór krytyczny 38 kPa (awaria).",
        "Po wdrożeniu OZC: Podział na 11 pętli max 72 m, opór bezpieczny 14,2 kPa, roczne oszczędności eksploatacyjne 42%."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-symulator-szczecin",
    "name": "Symulator Optymalizacji Hydraulicznej Szczecin",
    "description": "Panel analityczny wizualizujący błąd przewymiarowania długości pętli i wzrostu oporów względem optymalnego podziału obiegów grzewczych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cs2-container" id="rk-casestudy-app">
    <div class="rk-cs2-header">
        <div class="rk-cs2-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
            Case Study (Projekt Wdrożeniowy)
        </div>
        <h2 class="rk-cs2-title">Rzeczywisty projekt termomodernizacji w Szczecinie</h2>
        
        <div class="rk-cs2-stats-grid">
            <div class="rk-cs2-stat-box">
                <span class="rk-cs2-stat-label">Termin</span>
                <span class="rk-cs2-stat-value">Wrzesień 2026</span>
            </div>
            <div class="rk-cs2-stat-box">
                <span class="rk-cs2-stat-label">Lokalizacja</span>
                <span class="rk-cs2-stat-value">Szczecin</span>
            </div>
            <div class="rk-cs2-stat-box">
                <span class="rk-cs2-stat-label">Powierzchnia</span>
                <span class="rk-cs2-stat-value">135 m²</span>
            </div>
            <div class="rk-cs2-stat-box">
                <span class="rk-cs2-stat-label">System</span>
                <span class="rk-cs2-stat-value">Pompa Ciepła</span>
            </div>
        </div>
    </div>

    <div class="rk-cs2-intro-section">
        <div class="rk-cs2-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski Inżynier HVAC" class="rk-cs2-author-photo" loading="lazy">
            <p class="rk-cs2-author-text">
                "Inwestor Mariusz zmagał się z problemem drastycznie wysokich kosztów utrzymania starego kotła węglowego. Całkowity brak możliwości podniesienia posadzek (osadzone ościeżnice) narzucił jedyne racjonalne rozwiązanie..." – <strong><a href="https://projekt-ogrzewania.pl/">Robert Kucharski</a></strong>, CEO.
            </p>
        </div>
        
        <p class="rk-cs2-lead">
            Szybka odpowiedź inżynierska polegała na całkowitej rezygnacji z grzejników na rzecz frezowania wylewki jastrychowej pod rury 14x2 mm. Rozstaw ustalono na <strong>100 mm w strefach brzegowych</strong> i łazience oraz 150 mm w salonie. Pozwoliło to na zasilanie układu bardzo niskim parametrem 35°C z pompy ciepła split.
        </p>
        <p class="rk-cs2-lead" style="margin:0;">
            Optymalnie wykorzystaliśmy stary jastrych o grubości 45 mm. Po wycięciu bruzd na 20 mm, podłoga zachowała pełną stabilność. Mikroskopijna masa przykrywająca (zaledwie 3 mm chemii) zredukowała opór cieplny, <strong>skracając czas nagrzewania do zaledwie 45 minut!</strong>
        </p>
    </div>

    <div class="rk-cs2-interactive">
        <div class="rk-cs2-sim-wrapper">
            <div class="rk-cs2-tabs">
                <button class="rk-cs2-tab-btn active" data-view="amateur" onclick="rkSwitchCase('amateur')">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                    Błąd Instalatora (Instalacja z głowy)
                </button>
                <button class="rk-cs2-tab-btn" data-view="pro" onclick="rkSwitchCase('pro')">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"></polyline></svg>
                    Wdrożenie Projektu (Obliczenia OZC)
                </button>
            </div>

            <div id="rk-cs2-screen" class="rk-cs2-screen state-amateur">
                
                <div class="rk-cs2-visual">
                    <svg class="rk-cs2-svg" viewBox="0 0 100 100">
                        <rect x="5" y="5" width="90" height="90" fill="none" stroke="#334155" stroke-width="2"/>
                        <rect x="7" y="7" width="86" height="86" fill="#1e293b"/>

                        <rect x="2" y="15" width="6" height="70" fill="#64748b" rx="1"/>

                        <path class="svg-blueprint-path svg-blueprint-amateur svg-flow-anim" d="M 8 20 L 85 20 L 85 30 L 15 30 L 15 40 L 85 40 L 85 50 L 15 50 L 15 60 L 85 60 L 85 70 L 15 70 L 15 80 L 8 80" stroke-width="3" stroke-linejoin="round"/>

                        <path class="svg-blueprint-path svg-blueprint-pro svg-flow-anim" d="M 8 16 L 85 16 L 85 30 L 8 30" stroke-width="3" stroke-linejoin="round"/>
                        <path class="svg-blueprint-path svg-blueprint-pro svg-flow-anim" d="M 8 43 L 85 43 L 85 57 L 8 57" stroke-width="3" stroke-linejoin="round" style="animation-delay: 0.3s;"/>
                        <path class="svg-blueprint-path svg-blueprint-pro svg-flow-anim" d="M 8 70 L 85 70 L 85 84 L 8 84" stroke-width="3" stroke-linejoin="round" style="animation-delay: 0.6s;"/>

                        <circle cx="50" cy="50" r="18" fill="#0f172a" stroke="#475569" stroke-width="2"/>
                        <circle class="svg-danger-ring" cx="50" cy="50" r="18" fill="none" stroke-width="2"/>
                        <path d="M 40 50 A 10 10 0 1 1 60 50" fill="none" stroke="#64748b" stroke-width="2" stroke-linecap="round"/>
                        <line class="svg-gauge-pointer" x1="50" y1="50" x2="50" y2="40" stroke-width="2.5" stroke-linecap="round"/>
                        <circle cx="50" cy="50" r="2.5" fill="#cbd5e1"/>
                    </svg>
                </div>

                <div class="rk-cs2-data-panel">
                    <h4 class="rk-cs2-data-title" id="cs2-title">Zamknięcie Hydrauliczne Pętli</h4>
                    <p class="rk-cs2-data-desc" id="cs2-desc">
                        Pierwotny instalator chciał układać pętle o długości 110 m dla rury 14 mm. Taka odległość drastycznie dławi przepływ, tworząc gigantyczny opór. Woda omijałaby tę pętlę, a pomieszczenie pozostałoby zimne.
                    </p>
                    <div class="rk-cs2-metrics">
                        <div class="rk-cs2-metric-box">
                            <div class="rk-cs2-metric-lbl">Długość pętli</div>
                            <div class="rk-cs2-metric-val dyn-color" id="cs2-val-len">110 <span>mb</span></div>
                        </div>
                        <div class="rk-cs2-metric-box">
                            <div class="rk-cs2-metric-lbl">Opór całkowity</div>
                            <div class="rk-cs2-metric-val dyn-color" id="cs2-val-pres">38,0 <span>kPa (Krytyczny)</span></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-cs2-results-grid">
        <div class="rk-cs2-result-card">
            <div class="rk-cs2-result-lbl">Bilans OZC (-20°C)</div>
            <div class="rk-cs2-result-val">7,8 kW</div>
            <p class="rk-cs2-result-desc">Zapotrzebowanie wyliczone przez inżyniera. Gęstość strumienia cieplnego to zaledwie <strong>58 W/m²</strong>.</p>
        </div>
        <div class="rk-cs2-result-card">
            <div class="rk-cs2-result-lbl">Roczne oszczędności</div>
            <div class="rk-cs2-result-val" style="color:var(--rk-cs2-brand);">42%</div>
            <p class="rk-cs2-result-desc">Tyle wynosi zysk na kosztach eksploatacji w porównaniu do starego systemu grzewczego na węgiel.</p>
        </div>
        <div class="rk-cs2-result-card gold">
            <div class="rk-cs2-result-lbl">Ochrona budżetu</div>
            <div class="rk-cs2-result-val" style="color:#b45309;">14 500 zł</div>
            <p class="rk-cs2-result-desc">Tyle inwestor uniknął strat za poprawki, wymianę zniszczonej pompy i naprawy odparzonego jastrychu.</p>
        </div>
    </div>

    <div class="rk-cs2-cta">
        <h3 class="rk-cs2-cta-h3">Chcesz uniknąć błędów, które kosztują tysiące?</h3>
        <p class="rk-cs2-cta-p">
            Zastosowanie rur z barierą antydyfuzyjną EVOH, rygorystyczne trzymanie się oporów hydraulicznych i dobór pompy na bazie OZC to klucz do sukcesu. Zainwestuj w spokój na lata.
        </p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-cs2-btn">
            ZAMÓW PROJEKT INSTALACJI PODŁOGOWEJ
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>

</div>

<script>
// 1. Zabezpieczenie przed nieautoryzowanym skopiowaniem (Bez tagów H w komunikacie)
document.addEventListener('DOMContentLoaded', function() {
    var checkDom = window.location.hostname;
    var allowedDom = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDom.indexOf(checkDom) === -1) {
        var wrapApp = document.getElementById('rk-casestudy-app');
        if (wrapApp) {
            wrapApp.innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:24px; border:2px solid #ef4444; font-family:sans-serif; font-size:16px;"><strong>Odmowa autoryzacji licencji.</strong> Moduł Case Study jest własnością intelektualną serwisu Projekt-Ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulacji (Amator vs Inżynier)
function rkSwitchCase(mode) {
    var screen = document.getElementById('rk-cs2-screen');
    
    // Zmiana aktywności zakładek
    var tabs = document.querySelectorAll('.rk-cs2-tab-btn');
    tabs.forEach(function(t) { t.classList.remove('active'); });
    document.querySelector('.rk-cs2-tab-btn[data-view="' + mode + '"]').classList.add('active');

    // Wymiana danych tekstowych i klas animacji
    if (mode === 'pro') {
        screen.className = 'rk-cs2-screen state-pro';
        document.getElementById('cs2-title').innerText = "Inżynierski Podział Obwodów";
        document.getElementById('cs2-desc').innerHTML = "Dzięki interwencji zaimplementowano projekt oparty o <strong>11 pętli o maksymalnej długości 72 m</strong>. Opór spadł do bezpiecznej wartości. Pompa obiegowa działa na średnim biegu, zużywając zaledwie 22W energii elektrycznej.";
        document.getElementById('cs2-val-len').innerHTML = "max 72 <span>mb</span>";
        document.getElementById('cs2-val-pres').innerHTML = "14,2 <span>kPa (Bezpieczny)</span>";
    } else {
        screen.className = 'rk-cs2-screen state-amateur';
        document.getElementById('cs2-title').innerText = "Zamknięcie Hydrauliczne Pętli";
        document.getElementById('cs2-desc').innerHTML = "Pierwotny instalator chciał układać pętle o długości 110 m dla rury 14 mm. Taka odległość drastycznie dławi przepływ, tworząc gigantyczny opór. Woda omijałaby tę pętlę, a pomieszczenie pozostałoby zimne.";
        document.getElementById('cs2-val-len').innerHTML = "110 <span>mb</span>";
        document.getElementById('cs2-val-pres').innerHTML = "38,0 <span>kPa (Krytyczny)</span>";
    }
}
</script>



<style>
:root {
    --rk-quote-dark: #0f172a; /* Głęboki granat */
    --rk-quote-brand: #10b981; /* Szmaragd / Sukces */
    --rk-quote-accent: #f59e0b; /* Inżynierskie Złoto */
    --rk-quote-danger: #ef4444; /* Czerwień / Błąd */
    --rk-quote-bg: #f8fafc;
    --rk-quote-card: #ffffff;
    --rk-quote-text: #475569;
    --rk-quote-border: #e2e8f0;
}

.rk-quote-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-quote-card);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.12);
    border: 1px solid var(--rk-quote-border);
    overflow: hidden;
}

/* ================= HEADER & CYTAT ================= */
.rk-quote-header {
    background: linear-gradient(135deg, #1e293b 0%, var(--rk-quote-dark) 100%);
    padding: 50px 60px;
    color: #ffffff;
    position: relative;
    overflow: hidden;
    border-bottom: 4px solid var(--rk-quote-accent);
}

.rk-quote-header::before {
    content: '"';
    position: absolute;
    top: -20px;
    left: 20px;
    font-size: 200px;
    font-family: serif;
    color: rgba(255, 255, 255, 0.05);
    line-height: 1;
    pointer-events: none;
}

.rk-quote-content {
    position: relative;
    z-index: 2;
}

.rk-quote-text {
    font-size: 22px;
    font-weight: 800;
    line-height: 1.6;
    color: #f1f5f9;
    margin: 0 0 25px 0;
    font-style: italic;
}

.rk-quote-author {
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-quote-photo {
    width: 56px;
    height: 56px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid var(--rk-quote-accent);
}

.rk-quote-author-details h4 {
    margin: 0 0 4px 0;
    font-size: 16px;
    font-weight: 900;
    color: #ffffff;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-quote-author-details p {
    margin: 0;
    font-size: 13px;
    color: #94a3b8;
    font-weight: 600;
}

/* ================= WNIOSKI INTERAKTYWNE ================= */
.rk-quote-interactive {
    padding: 40px 50px;
    background: var(--rk-quote-bg);
}

.rk-quote-tabs {
    display: flex;
    gap: 15px;
    margin-bottom: 30px;
    justify-content: center;
}

.rk-quote-tab-btn {
    flex: 1;
    max-width: 320px;
    padding: 16px 20px;
    border: 2px solid var(--rk-quote-border);
    background: #ffffff;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-quote-text);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-quote-tab-btn:hover { background: #f1f5f9; border-color: #cbd5e1; }

.rk-quote-tab-btn.active[data-view="rule"] {
    border-color: var(--rk-quote-brand);
    background: #ecfdf5;
    color: #065f46;
    box-shadow: 0 8px 20px -5px rgba(16, 185, 129, 0.2);
}

.rk-quote-tab-btn.active[data-view="trap"] {
    border-color: var(--rk-quote-danger);
    background: #fef2f2;
    color: #991b1b;
    box-shadow: 0 8px 20px -5px rgba(239, 68, 68, 0.2);
}

/* Panel SVG + Tekst */
.rk-quote-screen {
    display: grid;
    grid-template-columns: 280px 1fr;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-quote-border);
    border-radius: 16px;
    padding: 25px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-quote-visual {
    background: var(--rk-quote-dark);
    border-radius: 12px;
    padding: 15px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    border: 2px solid #1e293b;
    height: 180px;
}

.rk-quote-svg { width: 100%; height: 100%; }

/* --- Animacje SVG --- */
.svg-q-pipe { stroke-dasharray: 8 8; animation: qFlow 1s linear infinite; }
.svg-q-dust { opacity: 0; animation: qDustFloat 2s infinite alternate; }
.svg-q-crack { stroke-dasharray: 50; stroke-dashoffset: 50; transition: stroke-dashoffset 0.5s ease-out; }
.svg-q-heat { stroke-dasharray: 6 6; animation: qHeatUp 1.5s linear infinite; }

@keyframes qFlow { to { stroke-dashoffset: -16; } }
@keyframes qDustFloat { 0% { transform: translateY(0); opacity: 0.2; } 100% { transform: translateY(-5px); opacity: 0.8; } }
@keyframes qHeatUp { to { stroke-dashoffset: -12; } }

/* Stan: Rule (Sukces) */
.state-rule .svg-q-concrete { fill: #334155; }
.state-rule .svg-q-pipe-bg { fill: #1e293b; stroke: #10b981; }
.state-rule .svg-q-pipe { stroke: #10b981; }
.state-rule .svg-q-dust { display: none; }
.state-rule .svg-q-crack { display: none; }
.state-rule .svg-q-heat { opacity: 1; stroke: #f59e0b; }

/* Stan: Trap (Błąd) */
.state-trap .svg-q-concrete { fill: #475569; }
.state-trap .svg-q-pipe-bg { fill: #1e293b; stroke: #ef4444; }
.state-trap .svg-q-pipe { stroke: #ef4444; animation-duration: 3s; } /* Słaby przepływ */
.state-trap .svg-q-dust { display: block; }
.state-trap .svg-q-crack { stroke-dashoffset: 0; stroke: #ef4444; }
.state-trap .svg-q-heat { opacity: 0; } /* Brak ciepła */

/* Tekst podsumowania */
.rk-quote-info {
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-quote-info-title {
    font-size: 18px;
    font-weight: 900;
    margin: 0 0 12px 0;
    color: var(--rk-quote-dark);
}

.rk-quote-info-desc {
    font-size: 14px;
    line-height: 1.7;
    color: var(--rk-quote-text);
    margin: 0;
}

.rk-quote-info-desc strong {
    color: var(--rk-quote-dark);
}

@media (max-width: 768px) {
    .rk-quote-header { padding: 40px 25px; }
    .rk-quote-text { font-size: 18px; }
    .rk-quote-interactive { padding: 30px 20px; }
    .rk-quote-tabs { flex-direction: column; gap: 10px; }
    .rk-quote-tab-btn { max-width: 100%; }
    .rk-quote-screen { grid-template-columns: 1fr; padding: 20px; }
    .rk-quote-visual { height: 160px; max-width: 280px; margin: 0 auto; width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Podsumowanie eksperckie – Frezowanie podłogówki",
    "description": "Frezowanie starej wylewki to technologiczny skrót, który wymaga ogromnej precyzji. Odkryj główne zasady i pułapki modernizacji.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-wnioski",
    "name": "Zestawienie kluczowych parametrów bezpieczeństwa modernizacji",
    "description": "Ostateczna weryfikacja poprawności montażu systemu cienkowarstwowego w oparciu o czystość, adhezję i obliczenia OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podsumowanie frezowania podłogówki",
      "złote zasady montażu ogrzewania",
      "odkurzanie bruzd frezowanych",
      "pękanie starej wylewki",
      "zastosowanie bariery evoh"
    ],
    "measurementTechnique": "Weryfikacja organoleptyczna oraz analityczna szczelności hydraulicznej i stabilności mechanicznej zmodernizowanej przegrody.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Złota Zasada: Idealne odessanie pyłu, zastosowanie rury EVOH, dokładne zgruntowanie bruzd.",
        "Główny Błąd: Pozostawienie pyłu separacyjnego, brak obliczeń oporów hydraulicznych, rura bez bariery antytlenowej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-wnioski",
    "name": "Interaktywny Panel Podsumowujący",
    "description": "Narzędzie edukacyjne wizualizujące różnice fizyczne pomiędzy prawidłowo zrealizowaną modernizacją a najczęstszymi błędami instalatorskimi.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-quote-container" id="rk-quote-app">
    <div class="rk-quote-header">
        <div class="rk-quote-content">
            <p class="rk-quote-text">
                "Frezowanie starej wylewki to wspaniały technologiczny skrót, który wybacza brak miejsca na grube izolacje, ale nigdy nie wybacza braku precyzji wykonawczej. Bez dokładnego odsysania pyłu, rury z barierą EVOH i rzetelnego bilansu OZC, ten skrót bardzo szybko zamienia się w najdroższą drogę do awarii całej posadzki."
            </p>
            <div class="rk-quote-author">
                <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-quote-photo" loading="lazy">
                <div class="rk-quote-author-details">
                    <h4>Robert Kucharski</h4>
                    <p>CEO, Projekt-Ogrzewania.pl</p>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-quote-interactive">
        <div class="rk-quote-tabs">
            <button class="rk-quote-tab-btn active" data-view="rule" onclick="rkSwitchQuote('rule')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"></polyline></svg>
                Złota Zasada Modernizacji
            </button>
            <button class="rk-quote-tab-btn" data-view="trap" onclick="rkSwitchQuote('trap')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                Najczęstsza Pułapka
            </button>
        </div>

        <div id="rk-quote-screen" class="rk-quote-screen state-rule">
            
            <div class="rk-quote-visual">
                <svg class="rk-quote-svg" viewBox="0 0 100 100">
                    <rect class="svg-q-concrete" x="10" y="30" width="80" height="60" rx="2" style="transition: fill 0.3s;"/>
                    
                    <path class="svg-q-pipe-bg" d="M 40 30 L 40 55 L 60 55 L 60 30" stroke-width="2" style="transition: stroke 0.3s;"/>
                    
                    <path class="svg-q-crack" d="M 40 55 L 30 75 M 60 55 L 75 80" fill="none" stroke-width="3" stroke-linecap="round"/>
                    
                    <g class="svg-q-dust" fill="#eab308">
                        <circle cx="43" cy="53" r="1.5" />
                        <circle cx="48" cy="50" r="1" style="animation-delay: 0.3s;"/>
                        <circle cx="55" cy="52" r="1.5" style="animation-delay: 0.6s;"/>
                        <circle cx="58" cy="48" r="1" style="animation-delay: 0.9s;"/>
                    </g>

                    <circle cx="50" cy="45" r="5" fill="#0f172a"/>
                    <circle class="svg-q-pipe" cx="50" cy="45" r="5" fill="none" stroke-width="2"/>

                    <path class="svg-q-heat" d="M 35 25 L 35 5 M 50 20 L 50 0 M 65 25 L 65 5" fill="none" stroke-width="3" stroke-linecap="round"/>
                </svg>
            </div>

            <div class="rk-quote-info">
                <h4 class="rk-quote-info-title" id="q-title">Czystość i Obliczenia to Fundament</h4>
                <p class="rk-quote-info-desc" id="q-desc">
                    W technologii cienkowarstwowej nie ma miejsca na błędy. Odessanie pyłu odkurzaczem klasy M, głębokie zgruntowanie wyfrezowanych rowków i zatopienie rury w masie polimerowej klasy <strong>C2TE</strong> gwarantuje idealny transfer ciepła i chroni wylewkę przed pękaniem.
                </p>
            </div>

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

<script>
// Zabezpieczenie przed kradzieżą (Bez tagów H)
document.addEventListener('DOMContentLoaded', function() {
    var checkDom = window.location.hostname;
    var allowedDom = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDom.indexOf(checkDom) === -1) {
        var wrapApp = document.getElementById('rk-quote-app');
        if (wrapApp) {
            wrapApp.innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:24px; border:2px solid #ef4444; font-family:sans-serif; font-size:16px;"><strong>Brak licencji.</strong> Kontener podsumowujący jest własnością serwisu Projekt-Ogrzewania.pl.</div>';
        }
    }
});

// Logika przełączania
function rkSwitchQuote(mode) {
    var screen = document.getElementById('rk-quote-screen');
    
    // Klasy przycisków
    var btns = document.querySelectorAll('.rk-quote-tab-btn');
    btns.forEach(function(b) { b.classList.remove('active'); });
    document.querySelector('.rk-quote-tab-btn[data-view="' + mode + '"]').classList.add('active');

    // Wymiana tekstu i klas CSS
    if (mode === 'rule') {
        screen.className = 'rk-quote-screen state-rule';
        document.getElementById('q-title').innerText = "Czystość i Obliczenia to Fundament";
        document.getElementById('q-desc').innerHTML = "W technologii cienkowarstwowej nie ma miejsca na błędy. Odessanie pyłu odkurzaczem klasy M, głębokie zgruntowanie wyfrezowanych rowków i zatopienie rury w masie polimerowej klasy <strong>C2TE</strong> gwarantuje idealny transfer ciepła i chroni wylewkę przed pękaniem.";
    } else {
        screen.className = 'rk-quote-screen state-trap';
        document.getElementById('q-title').innerText = "Pył Separacyjny i Ślepe Frezowanie";
        document.getElementById('q-desc').innerHTML = "Brak odkurzenia bruzd sprawia, że nowa masa nie łączy się ze starym betonem. Pył działa jak bufor izolacyjny. Naprężenia termiczne rur wyginają posadzkę, co kończy się <strong>odparzeniem jastrychu</strong> i pęknięciem ułożonych na wierzchu płytek ceramicznych.";
    }
}
</script>



<style>
:root {
    --rk-comp-dark: #1e293b; /* Chłodny antracyt */
    --rk-comp-brand: #06b6d4; /* Cyjan */
    --rk-comp-brand-light: #ecfeff;
    --rk-comp-accent: #6366f1; /* Fiolet techniczny */
    --rk-comp-bg: #f8fafc;
    --rk-comp-card: #ffffff;
    --rk-comp-text: #475569;
    --rk-comp-title: #0f172a;
    --rk-comp-border: #e2e8f0;
    --rk-comp-green: #10b981;
}

.rk-comp-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-comp-card);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(30, 41, 59, 0.1);
    border: 1px solid var(--rk-comp-border);
    overflow: hidden;
}

/* Nagłówek Sekcji */
.rk-comp-header {
    background: linear-gradient(135deg, #0f172a 0%, var(--rk-comp-dark) 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
}

.rk-comp-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 4px;
    background: linear-gradient(90deg, var(--rk-comp-brand) 0%, var(--rk-comp-accent) 100%);
}

.rk-comp-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(6, 182, 212, 0.15);
    color: #22d3ee;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
    border: 1px solid rgba(34, 211, 238, 0.2);
}

.rk-comp-title-h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 15px 0;
    color: #ffffff;
}

.rk-comp-intro {
    font-size: 15px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0;
}

.rk-comp-intro strong {
    color: #ffffff;
}

/* Część Interaktywna - Karty i Porównanie */
.rk-comp-interactive {
    padding: 40px 50px;
    background: var(--rk-comp-bg);
}

.rk-comp-switcher-group {
    display: flex;
    justify-content: center;
    gap: 12px;
    margin-bottom: 35px;
}

.rk-comp-tab-btn {
    flex: 1;
    max-width: 260px;
    padding: 14px 18px;
    background: #ffffff;
    border: 2px solid var(--rk-comp-border);
    border-radius: 12px;
    font-size: 13.5px;
    font-weight: 800;
    color: var(--rk-comp-text);
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    text-align: center;
    line-height: 1.3;
}

.rk-comp-tab-btn:hover { background: #f1f5f9; border-color: #cbd5e1; }

.rk-comp-tab-btn.active[data-tech="frez"] { border-color: var(--rk-comp-brand); background: var(--rk-comp-brand-light); color: #0891b2; box-shadow: 0 8px 16px -4px rgba(6, 182, 212, 0.15); }
.rk-comp-tab-btn.active[data-tech="suchy"] { border-color: var(--rk-comp-accent); background: #f5f3ff; color: #4f46e5; box-shadow: 0 8px 16px -4px rgba(99, 102, 241, 0.15); }
.rk-comp-tab-btn.active[data-tech="mokry"] { border-color: #64748b; background: #f8fafc; color: #334155; box-shadow: 0 8px 16px -4px rgba(100, 116, 139, 0.15); }

/* Główny Ekran Porównania (Karty i SVG) */
.rk-comp-display-view {
    display: grid;
    grid-template-columns: 200px 1fr;
    gap: 30px;
    align-items: center;
    background: #ffffff;
    border: 1px solid var(--rk-comp-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

/* SVG Wizualizacje Technologii */
.rk-comp-visual-frame {
    background: #0f172a;
    border-radius: 12px;
    padding: 15px;
    height: 200px;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    position: relative;
    border: 2px solid #1e293b;
}

.rk-comp-svg {
    width: 100%;
    height: 100%;
}

/* Animacje i Przejścia SVG */
.svg-tech-group { display: none; opacity: 0; transition: opacity 0.4s ease; }
.state-frez .svg-frez { display: block; opacity: 1; }
.state-suchy .svg-suchy { display: block; opacity: 1; }
.state-mokry .svg-mokry { display: block; opacity: 1; }

.anim-wave-frez { stroke-dasharray: 6 6; animation: flowFrez 1.2s linear infinite; }
.anim-wave-suchy { stroke-dasharray: 4 4; animation: flowFrez 0.8s linear infinite; }
.anim-wave-mokry { stroke-dasharray: 12 12; animation: flowFrez 2.5s linear infinite; }

@keyframes flowFrez { to { stroke-dashoffset: -24; } }

/* Specyfikacja w Kafelkach (Zamiast tabeli) */
.rk-spec-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
}

.rk-spec-card {
    background: var(--rk-comp-bg);
    border: 1px solid var(--rk-comp-border);
    padding: 16px 20px;
    border-radius: 10px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-spec-lbl { font-size: 11px; color: #64748b; font-weight: 700; text-transform: uppercase; margin-bottom: 6px; letter-spacing: 0.5px; }
.rk-spec-val { font-size: 15px; font-weight: 800; color: var(--rk-comp-title); line-height: 1.4; }

/* Dynamiczne modyfikatory wartości dla Frezowania */
.val-highlight { font-weight: 900; }
.state-frez .val-highlight { color: var(--rk-comp-green); }
.state-suchy .val-highlight { color: var(--rk-comp-accent); }
.state-mokry .val-highlight { color: #475569; }

@media (max-width: 768px) {
    .rk-comp-header, .rk-comp-interactive { padding: 30px 20px; }
    .rk-comp-switcher-group { flex-direction: column; gap: 10px; }
    .rk-comp-tab-btn { max-width: 100%; }
    .rk-comp-display-view { grid-template-columns: 1fr; padding: 20px; }
    .rk-comp-visual-frame { height: 150px; max-width: 250px; margin: 0 auto; width: 100%; }
    .rk-spec-grid { grid-template-columns: 1fr; gap: 12px; }
    .rk-comp-title-h2 { font-size: 22px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Porównanie technologii modernizacji ogrzewania podłogowego",
    "description": "Inżynierskie zestawienie systemów grzewczych pod remonty kapitalne. Porównaj wysokość zabudowy, bezwładność, koszty m² oraz zgodność z normą PN-EN 1264-4.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-komparator",
    "name": "Matryca porównawcza systemów ogrzewania płaszczyznowego dla termomodernizacji",
    "description": "Zbiór danych technicznych (wysokość profilu, masa jastrychu, opór i czas reakcji) trzech konkurencyjnych systemów wodnych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "porównanie ogrzewania podłogowego frezowanie",
      "wysokość zabudowy podłogówki sucha zabudowa",
      "bezwładność cieplna wylewka z miksokreta",
      "koszt materiału i robocizny podłogówki",
      "norma PN-EN 1264-4 wymagania jastrych"
    ],
    "measurementTechnique": "Zestawienie fizyczno-konstrukcyjne grubości przegród i bilansu mas budowlanych obciążających stropy.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Frezowanie w jastrychu: Profil 0 mm, obciążenie stropu 0 kg/m², wysoka reaktywność termiczna w 45 minut.",
        "System suchy: Profil 20-30 mm, idealny na stropy drewniane, wyższy koszt jednostkowy.",
        "Tradycyjny system mokry: Profil 65-80 mm, potężna masa 130 kg/m², bezwładność do 5 godzin."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-komparator-technologii",
    "name": "Interaktywny Komparator Technologii Modernizacji",
    "description": "Aplikacja filtrująca i kafelkująca parametry techniczno-eksploatacyjne posadzek grzewczych na bazie wybranego wariantu wykonawczego.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-comp-container" id="rk-tech-matrix-app">
    <div class="rk-comp-header">
        <div class="rk-comp-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="9" cy="7" r="4"></circle><path d="M23 21v-2a4 4 0 0 0-3-3.87"></path><path d="M16 3.13a4 4 0 0 1 0 7.75"></path></svg>
            Analiza Porównawcza
        </div>
        <h2 class="rk-comp-title-h2">Porównanie technologii modernizacji ogrzewania podłogowego</h2>
        <p class="rk-comp-intro">
            Poniższe zestawienie przedstawia weryfikację kluczowych parametrów techniczno-eksploatacyjnych trzech najpopularniejszych metod montażu wodnego ogrzewania podłogowego w obiektach poddawanych remontom kapitalnym. Pozwala ono podjąć świadomą decyzję inżynieryjną w oparciu o nośność stropu oraz czas reakcji układu.
        </p>
    </div>

    <div class="rk-comp-interactive">
        <div class="rk-comp-switcher-group">
            <button class="rk-comp-tab-btn active" data-tech="frez" onclick="rkFilterTech('frez')">Frezowanie w starym jastrychu</button>
            <button class="rk-comp-tab-btn" data-tech="suchy" onclick="rkFilterTech('suchy')">System suchy (Zabudowa lekka)</button>
            <button class="rk-comp-tab-btn" data-tech="mokry" onclick="rkFilterTech('mokry')">System mokry (Skuwanie do zera)</button>
        </div>

        <div id="rk-matrix-core" class="rk-comp-display-view state-frez">
            <div class="rk-comp-visual-frame">
                <svg class="rk-comp-svg svg-tech-group svg-frez" viewBox="0 0 100 100">
                    <rect x="0" y="35" width="100" height="65" fill="#334155"/>
                    <path d="M 30 35 L 30 65 L 70 65 L 70 35" fill="#0f172a" stroke="#475569" stroke-width="2"/>
                    <circle cx="50" cy="50" r="10" fill="#38bdf8"/>
                    <path class="anim-wave-frez" d="M 15 20 Q 50 10 85 20" fill="none" stroke="#ef4444" stroke-width="3" stroke-linecap="round"/>
                </svg>

                <svg class="rk-comp-svg svg-tech-group svg-suchy" viewBox="0 0 100 100">
                    <rect x="0" y="55" width="100" height="45" fill="#1e293b"/> <rect x="0" y="35" width="100" height="20" fill="#d97706" opacity="0.8"/> <circle cx="50" cy="45" r="8" fill="#a855f7"/>
                    <path class="anim-wave-suchy" d="M 20 15 Q 50 5 80 15" fill="none" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/>
                </svg>

                <svg class="rk-comp-svg svg-tech-group svg-mokry" viewBox="0 0 100 100">
                    <rect x="0" y="75" width="100" height="25" fill="#1e293b"/> <rect x="0" y="25" width="100" height="50" fill="#64748b"/> <circle cx="50" cy="50" r="10" fill="#475569" stroke="#94a3b8" stroke-width="2"/>
                    <path class="anim-wave-mokry" d="M 10 10 L 90 10" fill="none" stroke="#94a3b8" stroke-width="4" stroke-linecap="round"/>
                </svg>
            </div>

            <div class="rk-spec-grid">
                <div class="rk-spec-card">
                    <div class="rk-spec-lbl">Minimalna wysokość zabudowy</div>
                    <div class="rk-spec-val val-highlight" id="matrix-height">0 mm (rury chowają się w strukturze)</div>
                </div>
                <div class="rk-spec-card">
                    <div class="rk-spec-lbl">Dodatkowe obciążenie stropu</div>
                    <div class="rk-spec-val" id="matrix-weight">0 kg/m² (brak zmiany bilansu mas)</div>
                </div>
                <div class="rk-spec-card">
                    <div class="rk-spec-lbl">Jednostkowy koszt (Materiał + Robota)</div>
                    <div class="rk-spec-val" id="matrix-cost">120 – 180 PLN/m²</div>
                </div>
                <div class="rk-spec-card">
                    <div class="rk-spec-lbl">Bezwładność termiczna układu</div>
                    <div class="rk-spec-val" id="matrix-inertia">Niska (czas reakcji ok. 45 min)</div>
                </div>
                <div class="rk-spec-card" style="grid-column: 1 / -1;">
                    <div class="rk-spec-lbl">Zgodność z normą PN-EN 1264-4</div>
                    <div class="rk-spec-val" id="matrix-norm">Wymaga weryfikacji geometrii i klasy jastrychu (min. C12/15)</div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
// 1. Ochrona licencji kodu (Zgodnie z zasadami - brak tagów H2/H3 w kodzie błędu)
document.addEventListener('DOMContentLoaded', function() {
    var domainVerify = window.location.hostname;
    var safeDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (safeDomains.indexOf(domainVerify) === -1) {
        var containerApp = document.getElementById('rk-tech-matrix-app');
        if (wrapperContainer) {
            containerApp.innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#f43f5e; border-radius:20px; border:2px solid #f43f5e; font-family:sans-serif; font-size:15px;"><strong>Odmowa dostępu do komponentu.</strong> Tablica porówania systemów płaszczyznowych jest zastrzeżona dla domeny Projekt-Ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika interaktywnego filtrowania macierzy danych
function rkFilterTech(techType) {
    var matrixCore = document.getElementById('rk-matrix-core');

    // Nadanie odpowiedniej klasy stanu dla sterowania widocznością SVG
    matrixCore.className = "rk-comp-display-view";
    matrixCore.classList.add('state-' + techType);

    // Aktualizacja podświetlenia przycisku tabulatora
    var buttons = document.querySelectorAll('.rk-comp-tab-btn');
    buttons.forEach(function(btn) { btn.classList.remove('active'); });
    document.querySelector('.rk-comp-tab-btn[data-tech="' + techType + '"]').classList.add('active');

    // Podmiana danych w kafelkach specyfikacji
    if (techType === 'frez') {
        document.getElementById('matrix-height').innerText = "0 mm (rury chowają się w strukturze posadzki)";
        document.getElementById('matrix-weight').innerText = "0 kg/m² (brak zmiany pierwotnego bilansu mas)";
        document.getElementById('matrix-cost').innerText = "120 – 180 PLN/m²";
        document.getElementById('matrix-inertia').innerText = "Niska (czas reakcji i odczucia ciepła ok. 45 min)";
        document.getElementById('matrix-norm').innerHTML = "Wymaga weryfikacji jastrychu kontrolą sklerometryczną według <a href='https://projekt-ogrzewania.pl/norma-pn-en-12831-klucz-do-efektywnego-i-komfortowego-ogrzewania-podlogowego/' style='color:var(--rk-comp-brand);font-weight:700;'>kryteriów inżynierskich</a>.";
    } else if (techType === 'suchy') {
        document.getElementById('matrix-height').innerText = "20 – 30 mm (nominalna grubość płyt systemowych)";
        document.getElementById('matrix-weight').innerText = "15 – 25 kg/m² (suche płyty gipsowo-włóknowe)";
        document.getElementById('matrix-cost').innerText = "240 – 350 PLN/m²";
        document.getElementById('matrix-inertia').innerText = "Bardzo niska (czas reakcji rzędu ok. 30 min)";
        document.getElementById('matrix-norm').innerHTML = "Pełna zgodność systemowa. Rozwiązanie dedykowane na stare <a href='https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-nadaje-sie-do-drewnianego-stropu/' style='color:var(--rk-comp-accent);font-weight:700;'>stropy drewniane i belkowe</a>.";
    } else {
        document.getElementById('matrix-height').innerText = "65 – 80 mm (grubość izolacji styropianowej + nowy jastrych)";
        document.getElementById('matrix-weight').innerText = "130 – 160 kg/m² (monolityczny wylewany beton)";
        document.getElementById('matrix-cost').innerText = "220 – 310 PLN/m² (wliczając kucie i wywóz gruzu)";
        document.getElementById('matrix-inertia').innerText = "Wysoka (bezwładność i czas nagrzewania ok. 180–300 min)";
        document.getElementById('matrix-norm').innerHTML = "Pełna zgodność normatywna. Wymaga wykonania <a href='https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/' style='color:#334155;font-weight:700;'>nowej wylewki betonowej lub anhydrytowej</a> od zera.";
    }
}
</script>



<style>
:root {
    --rk-eq-dark: #0f172a; /* Głęboki granat pulpitu */
    --rk-eq-brand: #0ea5e9; /* Morski cyjan / przepływ */
    --rk-eq-brand-light: #e0f2fe;
    --rk-eq-accent: #f59e0b; /* Bursztyn / Ostrzeżenie */
    --rk-eq-success: #10b981; /* Zielony / Stabilność */
    --rk-eq-danger: #ef4444; /* Czerwony / Awaria */
    --rk-eq-bg: #f8fafc;
    --rk-eq-card: #ffffff;
    --rk-eq-text: #334155;
    --rk-eq-border: #e2e8f0;
}

.rk-eq-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-eq-card);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(15, 23, 42, 0.15);
    border: 1px solid rgba(14, 165, 233, 0.2);
    overflow: hidden;
}

/* Nagłówek sekcji */
.rk-eq-header {
    background: linear-gradient(135deg, #1e293b 0%, var(--rk-eq-dark) 100%);
    padding: 45px 50px 35px;
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-eq-brand);
}

.rk-eq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.15);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-eq-title {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.35;
    margin: 0 0 20px 0;
}

.rk-eq-intro {
    font-size: 15px;
    line-height: 1.8;
    color: #cbd5e1;
    margin: 0 0 15px 0;
}

.rk-eq-intro strong {
    color: #ffffff;
}

.rk-eq-link {
    color: #7dd3fc;
    text-decoration: none;
    border-bottom: 1px dashed #7dd3fc;
    transition: all 0.3s;
}

.rk-eq-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Moduł Interaktywny */
.rk-eq-interactive {
    padding: 40px 50px;
    background: var(--rk-eq-bg);
}

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

.rk-eq-btn {
    flex: 1;
    max-width: 300px;
    padding: 16px 20px;
    border: 2px solid var(--rk-eq-border);
    background: #ffffff;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-eq-text);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-eq-btn:hover { background: #f1f5f9; border-color: #cbd5e1; }

.rk-eq-btn.active[data-sys="amateur"] {
    border-color: var(--rk-eq-danger);
    background: #fef2f2;
    color: #991b1b;
    box-shadow: 0 10px 20px -5px rgba(239, 68, 68, 0.15);
}

.rk-eq-btn.active[data-sys="pro"] {
    border-color: var(--rk-eq-brand);
    background: var(--rk-eq-brand-light);
    color: #0369a1;
    box-shadow: 0 10px 20px -5px rgba(14, 165, 233, 0.2);
}

/* Ekran Symulatora (SVG) */
.rk-eq-visual-frame {
    background: var(--rk-eq-dark);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    min-height: 260px;
    border: 2px solid #1e293b;
    box-shadow: inset 0 0 20px rgba(0,0,0,0.5);
    margin-bottom: 30px;
}

.rk-eq-svg {
    width: 100%;
    height: 100%;
    max-width: 600px;
}

/* NOWE Elementy i Animacje SVG */
.svg-flow-path { stroke-dasharray: 8 8; transition: stroke 0.4s; }
.svg-hp-fan { transform-origin: 25px 55px; }
.svg-sun { transform-origin: 180px 30px; transition: opacity 0.4s; }
.svg-recu { transition: opacity 0.4s; }
.svg-buffer-cross { opacity: 0; transition: opacity 0.3s; }
.svg-floor-pipe { transition: fill 0.3s; }
.svg-recu-air { stroke-dasharray: 6 6; }

/* Stany Animacji */
/* Stan Amatorski (Awaria) */
.state-amateur .svg-flow-path { animation: flowSlow 0.5s linear infinite; stroke: #ef4444; }
.state-amateur .svg-hp-fan { animation: spinRotor 0.3s linear infinite; } /* Taktowanie pompy */
.state-amateur .svg-buffer { opacity: 0.3; filter: grayscale(1); } /* Brak bufora */
.state-amateur .svg-buffer-cross { opacity: 1; }
.state-amateur .svg-sun { opacity: 1; animation: pulseSun 1s infinite alternate; }
.state-amateur .svg-recu { opacity: 0.2; }
.state-amateur .svg-recu-air { opacity: 0; animation: none; }
.state-amateur .svg-floor-pipe { fill: #ef4444; } /* Przegrzanie */

/* Stan Pro (Inżynierski) */
.state-pro .svg-flow-path { animation: flowFast 1.5s linear infinite; stroke: #0ea5e9; }
.state-pro .svg-hp-fan { animation: spinRotor 2s linear infinite; } /* Spokojna praca */
.state-pro .svg-buffer { opacity: 1; filter: grayscale(0); }
.state-pro .svg-buffer-cross { opacity: 0; }
.state-pro .svg-sun { opacity: 0.4; animation: none; }
.state-pro .svg-recu { opacity: 1; }
.state-pro .svg-recu-air { opacity: 1; animation: flowFast 1.5s linear infinite reverse; }
.state-pro .svg-floor-pipe { fill: #f59e0b; }

@keyframes spinRotor { 100% { transform: rotate(360deg); } }
@keyframes flowFast { to { stroke-dashoffset: -16; } }
@keyframes flowSlow { to { stroke-dashoffset: -16; } }
@keyframes pulseSun { 0% { transform: scale(0.9); filter: drop-shadow(0 0 5px #ef4444); } 100% { transform: scale(1.3); filter: drop-shadow(0 0 15px #ef4444); } }

/* Kafelki Parametrów */
.rk-eq-param-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

.rk-eq-card {
    background: #ffffff;
    border: 1px solid var(--rk-eq-border);
    padding: 20px;
    border-radius: 12px;
    transition: all 0.3s;
}

.rk-eq-lbl { font-size: 11px; color: #64748b; font-weight: 700; text-transform: uppercase; margin-bottom: 8px; }
.rk-eq-val { font-size: 20px; font-weight: 900; color: var(--rk-eq-dark); display: flex; align-items: baseline; gap: 5px; }
.rk-eq-val span { font-size: 13px; font-weight: 600; color: #94a3b8; }

.rk-eq-desc {
    font-size: 13px;
    color: #475569;
    line-height: 1.5;
    margin-top: 10px;
    padding-top: 10px;
    border-top: 1px solid var(--rk-eq-border);
}

/* Dynamiczne kolory tekstu w kafelkach */
.state-amateur .dyn-alert { color: var(--rk-eq-danger); }
.state-pro .dyn-success { color: var(--rk-eq-brand); }

/* POTĘŻNE CTA NA DOLE */
.rk-eq-cta-block {
    background: linear-gradient(135deg, #0f172a 0%, #1e1b4b 100%);
    padding: 45px 50px;
    text-align: center;
    border-top: 4px solid var(--rk-eq-accent);
}

.rk-eq-cta-title {
    font-size: 24px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 15px 0;
}

.rk-eq-cta-text {
    font-size: 15px;
    line-height: 1.6;
    color: #94a3b8;
    max-width: 700px;
    margin: 0 auto 30px auto;
}

.rk-eq-cta-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-eq-accent);
    color: #ffffff;
    font-size: 18px;
    font-weight: 900;
    padding: 20px 40px;
    border-radius: 12px;
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 1px;
    box-shadow: 0 10px 25px -5px rgba(245, 158, 11, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-eq-cta-btn:hover {
    transform: translateY(-4px);
    background: #d97706;
    box-shadow: 0 15px 35px -5px rgba(245, 158, 11, 0.5);
}

.rk-eq-cta-btn svg { transition: transform 0.3s; }
.rk-eq-cta-btn:hover svg { transform: translateX(5px); }

@media (max-width: 768px) {
    .rk-eq-header, .rk-eq-interactive, .rk-eq-cta-block { padding: 30px 20px; }
    .rk-eq-controls { flex-direction: column; }
    .rk-eq-btn { max-width: 100%; }
    .rk-eq-visual-frame { min-height: 180px; padding: 10px; }
    .rk-eq-param-grid { grid-template-columns: 1fr; }
    .rk-eq-title { font-size: 24px; }
    .rk-eq-cta-title { font-size: 20px; }
    .rk-eq-cta-btn { width: 100%; padding: 15px 20px; font-size: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-urzadzenia",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Jak frezowanie wpływa na projekt instalacji i dobór urządzeń kotłowni?",
    "description": "Frezowanie drastycznie zmniejsza bezwładność cieplną. Wymaga mocnej pompy obiegowej (min. 6m słupa wody) oraz instalacji bufora ciepła zapobiegającego taktowaniu sprężarki pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-dobor-urzadzen",
    "name": "Parametry doboru urządzeń dla systemów frezowanych",
    "description": "Zestawienie wymogów hydraulicznych i pojemnościowych dla kotłowni współpracującej z frezowanym ogrzewaniem podłogowym i OZE.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "dobór pompy obiegowej podłogówka",
      "taktowanie pompy ciepła bufor",
      "pojemność bufora ciepła na kw",
      "rekuperacja z ogrzewaniem podłogowym",
      "charakterystyka stałociśnieniowa p=const"
    ],
    "measurementTechnique": "Algorytm doboru komponentów na bazie zsumowanych oporów pętli o mniejszej średnicy i zmniejszonej bezwładności termicznej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Bufor ciepła: Minimum 15 litrów pojemności zładu na każdy 1 kW nominalnej mocy pompy ciepła.",
        "Pompa obiegowa: Wymagana wysokość podnoszenia minimum 6 m słupa wody (60 kPa) przy charakterystyce p=const."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-symulator-kotlowni",
    "name": "Symulator Architektury Kotłowni i Automatyki",
    "description": "Interaktywny diagram obrazujący ryzyko braku projektu OZC, wizualizujący taktowanie pompy ciepła i problemy z oporem hydraulicznym.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-eq-container" id="rk-hvac-arch-app">
    <div class="rk-eq-header">
        <div class="rk-eq-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
            Architektura Systemu
        </div>
        <h2 class="rk-eq-title">Jak frezowanie ogrzewania podłogowego wpływa na projekt instalacji i dobór urządzeń?</h2>
        <p class="rk-eq-intro">
            Wykonanie frezowania podłogówki wymusza precyzyjne dostosowanie hydrauliki całego źródła ciepła. Mała średnica wewnętrzna rur (10 mm) drastycznie zwiększa wymagane ciśnienie dyspozycyjne pompy obiegowej. Projekt instalacji musi bazować na <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" class="rk-eq-link">rzetelnych obliczeniach OZC (PN-EN 12831)</a>, co eliminuje niszczące przewymiarowanie źródła.
        </p>
        <p class="rk-eq-intro" style="margin: 0;">
            Zdolność akumulacji energii przez strop jest w tej technologii zredukowana o ponad 40%. Aby uniknąć szkodliwego zjawiska taktowania pompy ciepła (zbyt częstego załączania sprężarki), <strong>bezwzględnie należy zainstalować bufor ciepła o pojemności minimum 15 litrów na każdy kW mocy urządzenia</strong>. Niska bezwładność doskonale współpracuje z rekuperacją, która szybko rozprasza zyski ciepła (np. od słońca).
        </p>
    </div>

    <div class="rk-eq-interactive">
        <div class="rk-eq-controls">
            <button class="rk-eq-btn active" data-sys="pro" onclick="rkSwitchSystem('pro')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="20 6 9 17 4 12"></polyline></svg>
                Instalacja z Projektem (OZC)
            </button>
            <button class="rk-eq-btn" data-sys="amateur" onclick="rkSwitchSystem('amateur')">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
                Instalacja "Na oko"
            </button>
        </div>

        <div id="rk-sim-hvac" class="state-pro">
            <div class="rk-eq-visual-frame">
                
                <svg class="rk-eq-svg" viewBox="0 0 200 100">
                    <defs>
                        <linearGradient id="gradBuffer" x1="0%" y1="0%" x2="0%" y2="100%">
                            <stop offset="0%" style="stop-color:#ef4444;stop-opacity:1" />
                            <stop offset="100%" style="stop-color:#0ea5e9;stop-opacity:1" />
                        </linearGradient>
                    </defs>

                    <path class="svg-flow-path" d="M 40 55 L 65 55 M 90 55 L 100 55 M 110 55 L 120 55 L 120 87 L 130 87" fill="none" stroke-width="3" stroke-linecap="round"/>

                    <rect x="10" y="30" width="30" height="50" fill="#334155" rx="3"/>
                    <rect x="12" y="32" width="26" height="46" fill="#1e293b" rx="2"/>
                    <circle cx="25" cy="55" r="12" fill="none" stroke="#64748b" stroke-width="2"/>
                    <g class="svg-hp-fan">
                        <path d="M 25 43 L 25 67 M 13 55 L 37 55" stroke="#cbd5e1" stroke-width="3"/>
                        <circle cx="25" cy="55" r="3" fill="#cbd5e1"/>
                    </g>
                    <polygon points="15,35 18,35 16,39 20,39 15,44 16,40 12,40" fill="#f59e0b"/>

                    <g class="svg-buffer" style="transition: opacity 0.4s, filter 0.4s;">
                        <rect x="65" y="20" width="25" height="60" fill="url(#gradBuffer)" rx="4"/>
                        <path d="M 65 40 L 90 40 M 65 60 L 90 60" stroke="#ffffff" stroke-width="1" opacity="0.2"/>
                    </g>
                    <path class="svg-buffer-cross" d="M 60 15 L 95 85 M 95 15 L 60 85" stroke="#ef4444" stroke-width="4" stroke-linecap="round"/>

                    <circle cx="105" cy="55" r="6" fill="#0f172a" stroke="#94a3b8" stroke-width="2"/>
                    <polygon points="102,52 102,58 108,55" fill="#cbd5e1"/>

                    <rect x="130" y="80" width="60" height="15" fill="#475569" rx="2"/>
                    <circle cx="140" cy="87.5" r="3" class="svg-floor-pipe"/>
                    <circle cx="155" cy="87.5" r="3" class="svg-floor-pipe"/>
                    <circle cx="170" cy="87.5" r="3" class="svg-floor-pipe"/>
                    <circle cx="185" cy="87.5" r="3" class="svg-floor-pipe"/>

                    <g class="svg-recu" style="transition: opacity 0.4s;">
                        <rect x="130" y="5" width="40" height="15" fill="#334155" rx="2"/>
                        <rect x="135" y="8" width="10" height="9" fill="#0f172a"/>
                        <rect x="155" y="8" width="10" height="9" fill="#0f172a"/>
                        <path class="svg-recu-air" d="M 140 28 L 140 17 M 160 28 L 160 17" fill="none" stroke="#0ea5e9" stroke-width="2" stroke-linecap="round"/>
                    </g>

                    <g class="svg-sun" style="transition: opacity 0.4s;">
                        <circle cx="180" cy="30" r="6" fill="#f59e0b"/>
                        <path d="M 180 20 L 180 16 M 180 40 L 180 44 M 170 30 L 166 30 M 190 30 L 194 30 M 173 23 L 170 20 M 187 37 L 190 40 M 173 37 L 170 40 M 187 23 L 190 20" stroke="#f59e0b" stroke-width="2" stroke-linecap="round"/>
                    </g>
                </svg>

            </div>

            <div class="rk-eq-param-grid">
                <div class="rk-eq-card">
                    <div class="rk-eq-lbl">Bufor sprzęgający</div>
                    <div class="rk-eq-val dyn-alert" id="rk-val-buffer">TAK <span>(15L / kW)</span></div>
                    <div class="rk-eq-desc" id="rk-desc-buffer">
                        Gwarantuje zład wody do odszraniania (defrostu) i eliminuje niszczące taktowanie sprężarki spowodowane małą pojemnością wylewki.
                    </div>
                </div>
                <div class="rk-eq-card">
                    <div class="rk-eq-lbl">Pompa obiegowa pętli</div>
                    <div class="rk-eq-val dyn-alert" id="rk-val-pump">6 m <span>(60 kPa)</span></div>
                    <div class="rk-eq-desc" id="rk-desc-pump">
                        Charakterystyka stałociśnieniowa (p=const). Zrównoważy gwałtowne opory hydrauliczne generowane przez rurki o średnicy wew. 10 mm.
                    </div>
                </div>
                <div class="rk-eq-card">
                    <div class="rk-eq-lbl">Reakcja na zyski słońca</div>
                    <div class="rk-eq-val dyn-alert" id="rk-val-sun">Rozproszone <span>(Reku)</span></div>
                    <div class="rk-eq-desc" id="rk-desc-sun">
                        Frezowana podłoga odcina dopływ wody. <a href="https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/" style="color:inherit; font-weight:700;">Rekuperacja</a> wychwytuje gorące powietrze i redystrybuuje je po strefach zacienionych.
                    </div>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-eq-cta-block">
        <h3 class="rk-eq-cta-title">Nie pozwól, by błędy instalatora zniszczyły Twoją Pompę Ciepła</h3>
        <p class="rk-eq-cta-text">
            Brak bufora, dobór za słabej pompy obiegowej i przewymiarowane źródło ciepła to najczęstsze skutki montażu "na intuicję". Zabezpiecz swoją inwestycję profesjonalną dokumentacją techniczną opartą na twardych wyliczeniach OZC i fizyce przepływów.
        </p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-eq-cta-btn">
            ZAMÓW PROJEKT INSTALACJI PODŁOGOWEJ
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<script>
// 1. Zabezpieczenie przed nieautoryzowanym skopiowaniem (Bez tagów H)
document.addEventListener('DOMContentLoaded', function() {
    var checkDom = window.location.hostname;
    var allowedDom = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowedDom.indexOf(checkDom) === -1) {
        var wrapApp = document.getElementById('rk-hvac-arch-app');
        if (wrapApp) {
            wrapApp.innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:24px; border:2px solid #ef4444; font-family:sans-serif; font-size:16px;"><strong>Odmowa autoryzacji licencji.</strong> Algorytm wizualizacji kotłowni jest własnością intelektualną serwisu Projekt-Ogrzewania.pl.</div>';
        }
    }
});

// 2. Logika przełączania symulatora
function rkSwitchSystem(mode) {
    var hvacSim = document.getElementById('rk-sim-hvac');
    
    // Zmiana przycisków
    var btns = document.querySelectorAll('.rk-eq-btn');
    btns.forEach(function(b) { b.classList.remove('active'); });
    document.querySelector('.rk-eq-btn[data-sys="' + mode + '"]').classList.add('active');

    // Aktualizacja interfejsu (CSS SVG i teksty)
    if (mode === 'pro') {
        hvacSim.className = 'state-pro';
        
        document.getElementById('rk-val-buffer').innerHTML = "TAK <span>(15L / kW)</span>";
        document.getElementById('rk-desc-buffer').innerHTML = "Gwarantuje zład wody do odszraniania (defrostu) i eliminuje niszczące taktowanie sprężarki spowodowane małą pojemnością wylewki.";
        
        document.getElementById('rk-val-pump').innerHTML = "6 m <span>(60 kPa)</span>";
        document.getElementById('rk-desc-pump').innerHTML = "Charakterystyka stałociśnieniowa (p=const). Zrównoważy gwałtowne opory hydrauliczne generowane przez rurki o średnicy wew. 10 mm.";
        
        document.getElementById('rk-val-sun').innerHTML = "Rozproszone <span>(Reku)</span>";
        document.getElementById('rk-desc-sun').innerHTML = "Frezowana podłoga odcina dopływ wody. <a href='https://projekt-ogrzewania.pl/rekuperacja-i-ogrzewanie-podlogowe-czy-to-sie-oplaca/' style='color:inherit; font-weight:700;'>Rekuperacja</a> wychwytuje gorące powietrze i redystrybuuje je po strefach zacienionych.";

    } else {
        hvacSim.className = 'state-amateur';
        
        document.getElementById('rk-val-buffer').innerHTML = "BRAK <span>(Awaria)</span>";
        document.getElementById('rk-desc-buffer').innerHTML = "Zbyt mała pojemność wodna systemu frezowanego powoduje ciągłe włączanie/wyłączanie (taktowanie) pompy, niszcząc sprężarkę.";
        
        document.getElementById('rk-val-pump').innerHTML = "4 m <span>(Za słaba)</span>";
        document.getElementById('rk-desc-pump').innerHTML = "Zwykła pompa nie radzi sobie z oporem małych rurek. Woda wybiera najkrótsze drogi, zostawiając większość salonu całkowicie niedogrzaną.";
        
        document.getElementById('rk-val-sun').innerHTML = "Przegrzanie <span>(Brak OZC)</span>";
        document.getElementById('rk-desc-sun').innerHTML = "Brak projektu OZC powoduje, że słońce z okien uderza w zabetonowane rury potęgując temperaturę. Podłoga nie ma jak zrzucić tego ciepła w inny obieg.";
    }
}
</script>



<style>
:root {
    --rk-faq2-dark: #0f172a;
    --rk-faq2-card: #ffffff;
    --rk-faq2-brand: #059669; /* Profesjonalny Szmaragd / Zieleń inżynierska */
    --rk-faq2-brand-light: #d1fae5;
    --rk-faq2-accent: #f59e0b; /* Bursztyn dla kontrastu / ostrzeżeń */
    --rk-faq2-bg: #f8fafc;
    --rk-faq2-border: #e2e8f0;
    --rk-faq2-text: #334155;
    --rk-faq2-muted: #64748b;
}

.rk-faq2-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, system-ui, sans-serif;
    background: var(--rk-faq2-card);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(5, 150, 105, 0.1);
    border: 1px solid rgba(5, 150, 105, 0.2);
    overflow: hidden;
}

/* Nagłówek */
.rk-faq2-header {
    background: linear-gradient(135deg, #064e3b 0%, var(--rk-faq2-dark) 100%);
    padding: 40px 50px 30px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-faq2-brand);
}

.rk-faq2-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    color: #6ee7b7;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(110, 231, 183, 0.2);
}

.rk-faq2-title {
    font-size: 26px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
}

.rk-faq2-title span { color: #34d399; }

/* Sekcja Interaktywna */
.rk-faq2-interactive {
    padding: 35px 45px;
    background: var(--rk-faq2-bg);
}

.rk-faq2-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rk-faq2-item {
    background: #ffffff;
    border: 1px solid var(--rk-faq2-border);
    border-radius: 14px;
    overflow: hidden;
    transition: all 0.3s;
}

.rk-faq2-item.active {
    border-color: var(--rk-faq2-brand);
    box-shadow: 0 10px 20px -5px rgba(5, 150, 105, 0.12);
}

/* Przycisk Akordeonu */
.rk-faq2-question {
    width: 100%;
    text-align: left;
    background: transparent;
    border: none;
    padding: 22px 25px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    cursor: pointer;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-faq2-dark);
    transition: background 0.3s, color 0.3s;
}

.rk-faq2-question:hover {
    background: #f1f5f9;
}

.rk-faq2-item.active .rk-faq2-question {
    background: var(--rk-faq2-brand-light);
    color: #064e3b;
}

.rk-faq2-icon {
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: #e2e8f0;
    color: var(--rk-faq2-dark);
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq2-item.active .rk-faq2-icon {
    background: var(--rk-faq2-brand);
    color: #ffffff;
    transform: rotate(180deg);
}

/* Odpowiedź z Gridem */
.rk-faq2-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq2-item.active .rk-faq2-answer-wrapper {
    grid-template-rows: 1fr;
}

.rk-faq2-answer-inner {
    overflow: hidden;
}

.rk-faq2-content {
    padding: 25px;
    border-top: 1px solid var(--rk-faq2-brand-light);
    display: grid;
    grid-template-columns: 1fr 180px;
    gap: 30px;
    align-items: center;
    background: #ffffff;
}

.rk-faq2-text {
    font-size: 14px;
    line-height: 1.7;
    color: var(--rk-faq2-text);
}

.rk-faq2-text strong {
    font-weight: 800;
    color: var(--rk-faq2-dark);
}

.rk-faq2-link {
    color: var(--rk-faq2-brand);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px dashed rgba(5, 150, 105, 0.4);
    transition: all 0.3s;
}

.rk-faq2-link:hover {
    color: #047857;
    border-bottom-style: solid;
}

/* Kontener SVG */
.rk-faq2-visual {
    background: #f8fafc;
    border-radius: 12px;
    padding: 15px;
    height: 140px;
    display: flex;
    align-items: center;
    justify-content: center;
    border: 2px solid #e2e8f0;
    position: relative;
}

.rk-faq2-svg {
    width: 100%;
    height: 100%;
}

/* === ANIMACJE SVG ZALEŻNE OD KLASY ACTIVE === */

/* 1. Strop / Frezowanie */
.rk-faq2-item.active .anim-blade {
    animation: spinBlade 1s linear infinite;
    transform-origin: 50px 30px;
}
.rk-faq2-item.active .anim-groove {
    stroke-dasharray: 60;
    stroke-dashoffset: 60;
    animation: cutGroove 2s forwards;
}
@keyframes spinBlade { to { transform: rotate(360deg); } }
@keyframes cutGroove { to { stroke-dashoffset: 0; } }

/* 2. Bariera EVOH (Tlen) */
.anim-oxygen { opacity: 0; }
.rk-faq2-item.active .anim-oxygen {
    opacity: 1;
    animation: bounceOxygen 1.5s infinite alternate ease-in-out;
}
@keyframes bounceOxygen {
    0% { transform: translateY(-15px) scale(1); fill: #ef4444; }
    100% { transform: translateY(0px) scale(0.8); fill: #fca5a5; }
}

/* 3. Masa naprawcza */
.anim-trowel { transform: translateX(-20px); opacity: 0; }
.rk-faq2-item.active .anim-trowel {
    animation: fillMass 2s ease-out forwards;
}
@keyframes fillMass {
    0% { transform: translateX(-20px); opacity: 1; }
    50% { transform: translateX(20px); opacity: 1; }
    100% { transform: translateX(20px); opacity: 0; }
}
.rk-faq2-item.active .anim-mass-fill {
    transform: scaleX(0);
    transform-origin: left;
    animation: growMass 2s forwards;
}
@keyframes growMass { to { transform: scaleX(1); } }

/* 4. Zawór mieszający */
.anim-flow-hot, .anim-flow-cold { stroke-dasharray: 4; animation: dashFlow 1s linear infinite; opacity: 0; }
.rk-faq2-item.active .anim-flow-hot { opacity: 1; stroke: #ef4444; }
.rk-faq2-item.active .anim-flow-cold { opacity: 1; stroke: #3b82f6; }
@keyframes dashFlow { to { stroke-dashoffset: -8; } }

/* 5. Woda zdemineralizowana */
.anim-drop { transform: scale(0.8); }
.rk-faq2-item.active .anim-drop {
    animation: purifyDrop 2s infinite alternate;
}
@keyframes purifyDrop {
    0% { fill: #94a3b8; transform: scale(0.8); } /* Brudna woda */
    100% { fill: #38bdf8; transform: scale(1.1); filter: drop-shadow(0 0 5px #38bdf8); } /* Czysta woda */
}

@media (max-width: 768px) {
    .rk-faq2-header, .rk-faq2-interactive { padding: 30px 20px; }
    .rk-faq2-title { font-size: 22px; }
    .rk-faq2-content { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-faq2-visual { height: 120px; max-width: 200px; margin: 0 auto; width: 100%; border: none; }
    .rk-faq2-question { font-size: 14px; padding: 18px 20px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD) 
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Najczęściej zadawane pytania (FAQ) – Frezowanie podłogówki",
    "description": "Techniczne odpowiedzi na najważniejsze pytania dotyczące wytrzymałości wylewek, barier antydyfuzyjnych EVOH, mas naprawczych oraz jakości wody w systemach frezowanych.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#faq-data",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy frezowanie niszczy strukturę starego stropu lub osłabia wylewkę?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Frezowanie na głębokość 20 mm w wylewce o grubości minimum 35 mm nie narusza stabilności, o ile beton spełnia klasę wytrzymałości C12/15. Nienaruszona warstwa dolna w pełni przenosi obciążenia użytkowe."
        }
      },
      {
        "@type": "Question",
        "name": "Czy w kanałach frezowanych można układać rury bez barier (np. zwykłe PEX)?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie. Wymagane jest bezwzględne stosowanie rur z barierą antydyfuzyjną EVOH (norma DIN 4726). Brak bariery prowadzi do korozji elementów stalowych i uszkodzenia wymiennika pompy ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Jaka masa jest najlepsza do zalewania wyfrezowanych rowków?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Należy stosować wyłącznie dedykowane masy polimerowo-cementowe (klasa C2TE) o przewodności cieplnej λ ≥ 1,4 W/(m·K). Zwykła zaprawa pęka pod wpływem naprężeń termicznych."
        }
      },
      {
        "@type": "Question",
        "name": "Czy przy frezowaniu trzeba montować układ mieszający z zaworem?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Jeśli jedynym źródłem jest pompa ciepła generująca 35°C, układ mieszający jest zbędny. Jest on wymagany wyłącznie w systemach hybrydowych (np. przy jednoczesnej pracy grzejników na 60°C)."
        }
      },
      {
        "@type": "Question",
        "name": "Czy instalację po frezowaniu można napełnić wodą z kranu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Instalację należy napełnić wodą demineralizowaną (przewodność <100 µS/cm) z inhibitorem korozji. Zwykła woda w rurkach 14 mm grozi osadzaniem kamienia kotłowego i spadkiem wydajności."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-tech",
    "name": "Parametry techniczne materiałów dla systemów frezowanych",
    "description": "Wymagania inżynierskie dla jastrychów, klas zapraw, norm rur i parametrów fizykochemicznych zładu wody.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "frezowanie ogrzewania podłogowego",
      "bariera antydyfuzyjna evoh",
      "norma din 4726",
      "zawór mieszający instalacji",
      "woda demineralizowana ogrzewanie"
    ],
    "measurementTechnique": "Normatywne wartości graniczne (wytrzymałość C12/15, przewodność cieplna λ ≥ 1,4 W/(m·K), przewodność wody <100 µS/cm).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wymagany minimalny opór dyfuzyjny tlenu wg DIN 4726.",
        "Parametry mas naprawczych do przewodzenia energii cieplnej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-faq",
    "name": "Interaktywny Asystent FAQ Frezowania",
    "description": "Baza wiedzy z wizualizacjami SVG pomagająca inwestorom w doborze parametrów modernizacji cieplnej bez błędów wykonawczych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA FAQ
=========================================== -->
<div class="rk-faq2-container" id="rk-frez-faq-app">
    <div class="rk-faq2-header">
        <div class="rk-faq2-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 16v-4"></path><path d="M12 8h.01"></path></svg>
            Baza Wiedzy Wykonawcy
        </div>
        <h2 class="rk-faq2-title">FAQ – <span>Najczęściej zadawane pytania</span></h2>
    </div>

    <div class="rk-faq2-interactive">
        <div class="rk-faq2-list">
            
            <!-- Pytanie 1: Wytrzymałość stropu -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>1. Czy frezowanie niszczy strukturę starego stropu lub osłabia wylewkę?</span>
                    <div class="rk-faq2-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Frezowanie na głębokość <strong>20 mm</strong> w wylewce o całkowitej grubości minimum 35 mm nie narusza stabilności konstrukcyjnej podłoża. Warunkiem koniecznym jest, aby istniejący <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-faq2-link">jastrych spełniał kryterium wytrzymałościowe minimum C12/15</a>. Pozostała, nienaruszona warstwa dolna betonu w pełni przejmuje i przenosi statyczne oraz dynamiczne obciążenia użytkowe zgodnie z normami budowlanymi.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-faq2-svg" viewBox="0 0 100 80">
                                    <rect x="10" y="50" width="80" height="20" fill="#94a3b8" rx="2"/>
                                    <path class="anim-groove" d="M 10 50 L 50 50 L 50 70" fill="none" stroke="#f8fafc" stroke-width="8"/>
                                    <g class="anim-blade">
                                        <circle cx="50" cy="30" r="15" fill="none" stroke="#059669" stroke-width="4" stroke-dasharray="10 4"/>
                                        <circle cx="50" cy="30" r="4" fill="#059669"/>
                                    </g>
                                    <line x1="50" y1="30" x2="50" y2="45" stroke="#059669" stroke-width="4"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 2: Bariera EVOH -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>2. Czy w kanałach frezowanych można układać zwykłe rury bez barier?</span>
                    <div class="rk-faq2-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Absolutnie nie. Bezwykopowe układanie rur wymaga <strong>bezwzględnego stosowania przewodów wyposażonych w pięciowarstwową <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/" class="rk-faq2-link">barierę antydyfuzyjną EVOH</a></strong> zgodną z normą DIN 4726. Zastosowanie rur jednowarstwowych bez powłoki antytlenowej doprowadzi do szybkiej korozji elementów stalowych w kotłowni i trwałego uszkodzenia pompy.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-faq2-svg" viewBox="0 0 100 80">
                                    <circle cx="50" cy="50" r="25" fill="none" stroke="#059669" stroke-width="6"/>
                                    <circle cx="50" cy="50" r="21" fill="none" stroke="#3b82f6" stroke-width="2"/>
                                    <circle class="anim-oxygen" cx="20" cy="20" r="5"/>
                                    <circle class="anim-oxygen" cx="80" cy="20" r="5" style="animation-delay: 0.5s;"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 3: Masa naprawcza -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>3. Jaka masa jest najlepsza do zalewania wyfrezowanych rowków?</span>
                    <div class="rk-faq2-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Do wypełniania bruzd stosuje się <strong>wyłącznie modyfikowane polimerami masy naprawcze klasy C2TE</strong>. Ich kluczowym parametrem dla systemu cieplnego jest wysoka przewodność (λ ≥ 1,4 W/(m·K)). Zwykła <a href="https://projekt-ogrzewania.pl/czym-jest-system-mokry-w-wodnym-ogrzewaniu-podlogowym/" class="rk-faq2-link">zaprawa murarska popęka pod wpływem rozszerzalności rur</a>, tworząc puste przestrzenie izolujące ciepło.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-faq2-svg" viewBox="0 0 100 80">
                                    <path d="M 10 60 L 90 60 L 90 80 L 10 80 Z" fill="#e2e8f0"/>
                                    <path d="M 30 60 L 70 60 L 60 80 L 40 80 Z" fill="#ffffff"/>
                                    <rect class="anim-mass-fill" x="40" y="60" width="20" height="20" fill="#f59e0b"/>
                                    <path class="anim-trowel" d="M 35 45 L 65 45 L 75 55 L 25 55 Z" fill="#94a3b8"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 4: Zawór mieszający -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>4. Czy przy frezowaniu podłogówki trzeba montować układ mieszający z zaworem?</span>
                    <div class="rk-faq2-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Jeśli system współpracuje bezpośrednio z niskotemperaturową pompą ciepła generującą parametr 35°C, <a href="https://projekt-ogrzewania.pl/zawor-mieszajacy-w-ogrzewaniu-podlogowym/" class="rk-faq2-link">układ mieszający jest całkowicie zbędny</a>, a pętle podłącza się wprost do rozdzielacza. Montaż zaworu trójdrogowego jest konieczny <strong>tylko w układach hybrydowych</strong> (jednoczesne zasilanie grzejników na 60°C i podłogówki).
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-faq2-svg" viewBox="0 0 100 80">
                                    <path d="M 50 10 L 50 70 M 20 40 L 80 40" stroke="#cbd5e1" stroke-width="12" stroke-linecap="round"/>
                                    <circle cx="50" cy="40" r="14" fill="#0f172a"/>
                                    <polygon points="50,26 64,40 50,54" fill="#059669"/>
                                    <line class="anim-flow-hot" x1="20" y1="40" x2="40" y2="40" stroke-width="4" stroke-linecap="round"/>
                                    <line class="anim-flow-cold" x1="50" y1="65" x2="50" y2="45" stroke-width="4" stroke-linecap="round"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- Pytanie 5: Woda demineralizowana -->
            <div class="rk-faq2-item">
                <button class="rk-faq2-question">
                    <span>5. Czy instalację można napełnić zwykłą wodą z kranu?</span>
                    <div class="rk-faq2-icon"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><polyline points="6 9 12 15 18 9"></polyline></svg></div>
                </button>
                <div class="rk-faq2-answer-wrapper">
                    <div class="rk-faq2-answer-inner">
                        <div class="rk-faq2-content">
                            <div class="rk-faq2-text">
                                Zdecydowanie odradza się takie praktyki. Instalacja frezowana posiada cienkie rurki (najczęściej 14 mm), co potęguje ryzyko zarastania przekroju. Układ <strong>musi być napełniony <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/" class="rk-faq2-link">wodą demineralizowaną</a> (przewodność < 100 µS/cm) z inhibitorem korozji</strong>. Zwykła kranówka grozi szybkim odkładaniem się kamienia kotłowego.
                            </div>
                            <div class="rk-faq2-visual">
                                <svg class="rk-faq2-svg" viewBox="0 0 100 80">
                                    <path class="anim-drop" d="M 50 15 C 50 15 25 45 25 60 C 25 73.8 36.2 85 50 85 C 63.8 85 75 73.8 75 60 C 75 45 50 15 50 15 Z" fill="#38bdf8"/>
                                    <path d="M 40 55 Q 50 45 60 55" fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" opacity="0.6"/>
                                </svg>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

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

<!-- ==========================================
     LOGIKA ZABEZPIECZEŃ (DOMAIN LOCK) I JS
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie na poziomie domeny
    var host = window.location.hostname;
    var allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    if (allowed.indexOf(host) === -1) {
        var app = document.getElementById('rk-frez-faq-app');
        if (app) {
            app.innerHTML = '<div style="padding:40px; text-align:center; background:#0f172a; color:#ef4444; border-radius:20px; font-weight:900;">BŁĄD LICENCJI: TEN MODUŁ STANOWI WŁASNOŚĆ INTELEKTUALNĄ SERWISU PROJEKT-OGRZEWANIA.PL</div>';
        }
        return;
    }

    // 2. Logika otwierania Akordeonu
    var items = document.querySelectorAll('.rk-faq2-item');
    items.forEach(function(item) {
        var btn = item.querySelector('.rk-faq2-question');
        btn.addEventListener('click', function() {
            var isActive = item.classList.contains('active');
            
            // Zamknij wszystkie inne zakładki
            items.forEach(function(el) { 
                el.classList.remove('active'); 
            });
            
            // Otwórz tylko klikniętą, o ile nie była wcześniej otwarta
            if (!isActive) {
                item.classList.add('active');
            }
        });
    });
    
    // Otwórz pierwszą zakładkę domyślnie
    if(items.length > 0) {
        items[0].classList.add('active');
    }
});
</script>



<style>
:root {
    --rk-mill-dark: #1e293b;
    --rk-mill-blue: #0284c7;
    --rk-mill-blue-hover: #0369a1;
    --rk-mill-orange: #f97316;
    --rk-mill-orange-light: #ffedd5;
    --rk-mill-red: #ef4444;
    --rk-mill-red-light: #fef2f2;
    --rk-mill-green: #10b981;
    --rk-mill-bg: #ffffff;
    --rk-mill-gray: #f8fafc;
    --rk-mill-text: #334155;
    --rk-mill-border: #e2e8f0;
}

.rk-mill-wrapper {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-mill-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(15, 23, 42, 0.1);
    border: 1px solid var(--rk-mill-border);
    overflow: hidden;
}

/* Sekcja Główna */
.rk-mill-header {
    padding: 40px 50px 30px;
    background: linear-gradient(145deg, #f8fafc 0%, #f1f5f9 100%);
    border-bottom: 1px solid var(--rk-mill-border);
}

.rk-mill-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-mill-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-mill-title svg {
    color: var(--rk-mill-orange);
    flex-shrink: 0;
}

.rk-mill-intro {
    font-size: 16px;
    color: var(--rk-mill-text);
    line-height: 1.7;
    margin: 0;
}

/* Interaktywny Moduł */
.rk-mill-interactive {
    padding: 40px 50px;
    background: var(--rk-mill-bg);
}

.rk-mill-subtitle {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-mill-dark);
    margin: 0 0 25px 0;
    text-align: center;
}

/* Toggle Switch (Styl iOS/Android) */
.rk-toggle-container {
    display: flex;
    justify-content: center;
    margin-bottom: 35px;
}

.rk-toggle-bg {
    display: flex;
    background: #e2e8f0;
    border-radius: 99px;
    padding: 4px;
    position: relative;
    width: 100%;
    max-width: 500px;
    cursor: pointer;
}

.rk-toggle-btn {
    flex: 1;
    text-align: center;
    padding: 12px 20px;
    font-size: 15px;
    font-weight: 700;
    color: #64748b;
    z-index: 2;
    transition: color 0.3s ease;
    user-select: none;
}

.rk-toggle-btn.active {
    color: var(--rk-mill-dark);
}

.rk-toggle-slider {
    position: absolute;
    top: 4px;
    left: 4px;
    width: calc(50% - 4px);
    height: calc(100% - 8px);
    background: #ffffff;
    border-radius: 99px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.1);
    z-index: 1;
    transition: transform 0.4s cubic-bezier(0.25, 1, 0.5, 1);
}

.rk-toggle-bg[data-state="amateur"] .rk-toggle-slider {
    transform: translateX(100%);
}

/* Dynamiczny Kontent */
.rk-dynamic-view {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: stretch;
}

.rk-dynamic-card {
    padding: 30px;
    border-radius: 20px;
    border: 2px solid transparent;
    background: var(--rk-mill-gray);
    transition: all 0.4s ease;
    opacity: 0;
    display: none;
    transform: translateY(10px);
}

.rk-dynamic-card.active {
    display: flex;
    flex-direction: column;
    opacity: 1;
    transform: translateY(0);
}

.rk-card-pro { border-color: var(--rk-mill-orange-light); background: #fffcf8; }
.rk-card-amateur { border-color: var(--rk-mill-red-light); background: #fffcfc; }

.rk-card-icon {
    width: 64px;
    height: 64px;
    margin-bottom: 20px;
}

.rk-card-title {
    font-size: 18px;
    font-weight: 800;
    margin: 0 0 15px 0;
    color: var(--rk-mill-dark);
}

.rk-card-text {
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-mill-text);
    margin: 0 0 15px 0;
    flex-grow: 1;
}

.rk-card-text a {
    color: var(--rk-mill-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 2px;
}

/* Animacje SVG */
.anim-flow { stroke-dasharray: 10; animation: dashFlow 1s linear infinite; }
.anim-pulse { transform-origin: center; animation: scalePulse 2s infinite ease-in-out; }
.anim-block { animation: shakeBlock 0.5s infinite alternate; }

@keyframes dashFlow { to { stroke-dashoffset: -20; } }
@keyframes scalePulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.05); fill: var(--rk-mill-orange); } }
@keyframes shakeBlock { from { transform: translateX(-1px); } to { transform: translateX(1px); } }

/* Grid Informacyjny (Kafelki zamiast ściany tekstu) */
.rk-info-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 0 50px 40px;
}

.rk-info-box {
    background: #ffffff;
    border: 1px solid var(--rk-mill-border);
    padding: 20px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-info-box h4 {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-mill-dark);
    margin: 0 0 10px 0;
}

.rk-info-box p {
    font-size: 13px;
    line-height: 1.5;
    color: #64748b;
    margin: 0;
}

@media (max-width: 768px) {
    .rk-mill-header, .rk-mill-interactive { padding: 30px 20px; }
    .rk-info-grid { grid-template-columns: 1fr; padding: 0 20px 30px; }
    .rk-dynamic-view { grid-template-columns: 1fr; }
    .rk-mill-title { font-size: 22px; }
    .rk-toggle-bg { width: 100%; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Podsumowanie: Modernizacja bez skuwania i drastyczny spadek bezwładności",
    "description": "Frezowanie podłogówki pozwala na pełne przejście na zasilanie niskotemperaturowe. Gwarantuje czas nagrzewania poniżej 45 minut przy zachowaniu normy DIN 4726 i rzetelnych obliczeń OZC.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-frezowanie",
    "name": "Parametry hydrauliczne i termiczne układu frezowanego",
    "description": "Zestawienie porównawcze działania instalacji ogrzewania frezowanego z wykonanym profesjonalnym projektem OZC w stosunku do instalacji montowanych intuicyjnie.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "frezowanie ogrzewania podłogowego",
      "bezwładność termiczna podłogówki",
      "projektowe obciążenie cieplne ozc",
      "bariera antydyfuzyjna evoh din 4726",
      "opory hydrauliczne pompy ciepła"
    ],
    "measurementTechnique": "Obliczenia na bazie normy DIN 4726, PN-EN 12831 (OZC) oraz symulacji dynamiki przepływów hydraulicznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Bezwładność cieplna: Stabilizacja temperatury powietrza w czasie krótszym niż 45 minut.",
        "Zabezpieczenie: Rury z powłoką antydyfuzyjną EVOH chronią układ przed zapowietrzeniem i korozją."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#webapp-symulator",
    "name": "Symulator Przepływów i OZC przy Frezowaniu",
    "description": "Interaktywny panel ilustrujący bezpośrednie skutki zaniechania obliczeń cieplnych (OZC) oraz zastosowania niewłaściwych materiałów w układach cienkowarstwowych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 and CSS3",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-mill-wrapper" id="rk-frez-summary-app">
    
    <!-- Nagłówek -->
    <div class="rk-mill-header">
        <h2 class="rk-mill-title">
            <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
            Podsumowanie: Modernizacja bez skuwania wylewki
        </h2>
        <p class="rk-mill-intro">
            Zastosowanie technologii frezowania to sprawdzona inżyniersko metoda na błyskawiczne przejście z układów wysokotemperaturowych na wydajne, niskotemperaturowe źródła ciepła (pompy ciepła). <strong>Kluczową zaletą tego systemu jest drastyczny spadek bezwładności termicznej</strong> – cienka warstwa masy polimerowo-cementowej sprawia, że temperatura w pomieszczeniach stabilizuje się w czasie <strong>poniżej 45 minut</strong>.
        </p>
    </div>

    <!-- Interaktywny Symulator Decyzji -->
    <div class="rk-mill-interactive">
        <h3 class="rk-mill-subtitle">Jak błędy projektowe niszczą sprawność instalacji?</h3>
        
        <div class="rk-toggle-container">
            <div class="rk-toggle-bg" id="rkSimToggle" data-state="pro">
                <div class="rk-toggle-slider"></div>
                <div class="rk-toggle-btn active" data-target="pro" onclick="switchState('pro')">Projekt Inżynierski (OZC)</div>
                <div class="rk-toggle-btn" data-target="amateur" onclick="switchState('amateur')">Instalacja "Na oko"</div>
            </div>
        </div>

        <div class="rk-dynamic-view">
            <!-- WIDOK: PROJEKT INŻYNIERSKI -->
            <div class="rk-dynamic-card rk-card-pro active" id="view-pro">
                <svg class="rk-card-icon" viewBox="0 0 64 64" fill="none">
                    <circle cx="32" cy="32" r="30" stroke="var(--rk-mill-orange)" stroke-width="4" stroke-dasharray="4 4" class="anim-flow"/>
                    <path d="M22 32l7 7 15-15" stroke="var(--rk-mill-orange)" stroke-width="5" stroke-linecap="round" stroke-linejoin="round"/>
                    <circle cx="32" cy="32" r="15" fill="var(--rk-mill-orange-light)" class="anim-pulse" opacity="0.5"/>
                </svg>
                <h4 class="rk-card-title">Precyzyjne rury i płynny obieg</h4>
                <p class="rk-card-text">
                    Zastosowanie rur z <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/">barierą antydyfuzyjną EVOH</a> (zgodną z rygorystyczną normą DIN 4726) blokuje przenikanie tlenu. Pompa ciepła działa z optymalnym parametrem, a opory hydrauliczne są pod pełną kontrolą.
                </p>
            </div>

            <!-- WIDOK: BRAK PROJEKTU -->
            <div class="rk-dynamic-card rk-card-amateur" id="view-amateur">
                <svg class="rk-card-icon" viewBox="0 0 64 64" fill="none">
                    <circle cx="32" cy="32" r="30" stroke="var(--rk-mill-red)" stroke-width="4"/>
                    <path d="M20 20l24 24M44 20L20 44" stroke="var(--rk-mill-red)" stroke-width="5" stroke-linecap="round" class="anim-block"/>
                    <rect x="25" y="25" width="14" height="14" fill="var(--rk-mill-red)" rx="2"/>
                </svg>
                <h4 class="rk-card-title" style="color: var(--rk-mill-red);">Blokada przepływów i straty</h4>
                <p class="rk-card-text">
                    Brak rzetelnych <a href="https://projekt-ogrzewania.pl/jak-oblicza-sie-straty-cieplne-w-budynkach/">obliczeń strat ciepła</a> skutkuje drastycznym wzrostem oporów w rurkach 14 mm. Taktowanie pompy ciepła pożera budżet, a woda omija najdłuższe, źle dobrane pętle grzewcze.
                </p>
            </div>
            
            <!-- OPIS WSPÓLNY - ZMIENIA SIĘ ZALEŻNIE OD STANU -->
            <div class="rk-dynamic-card active" style="background: transparent; border: none; padding: 10px 0;">
                <div id="desc-pro">
                    <h4 class="rk-card-title">OZC ratuje Twój portfel</h4>
                    <p class="rk-card-text">
                        Każda modernizacja frezowana bezwzględnie wymaga obliczenia <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowego obciążenia cieplnego (OZC)</a>. Dzięki temu unika się przewymiarowania źródła ciepła, a odpowiednie zgruntowanie wyfrezowanych bruzd gwarantuje doskonałe przewodzenie energii bez ryzyka odparzenia okładzin.
                    </p>
                </div>
                <div id="desc-amateur" style="display: none;">
                    <h4 class="rk-card-title" style="color: var(--rk-mill-red);">Pozorna oszczędność</h4>
                    <p class="rk-card-text">
                        Projektowanie "z pamięci" lub sugerowanie się układami tradycyjnymi kończy się katastrofą przy małych przekrojach rur frezowanych. Pył pozostawiony w bruzdach izoluje rurę, sztucznie zwiększając <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplną</a> układu.
                    </p>
                </div>
            </div>
        </div>
    </div>

    <!-- Procedury (Kafelki pod spodem) -->
    <div class="rk-info-grid">
        <div class="rk-info-box">
            <h4>1. Odpylenie i Grunt</h4>
            <p>Pył betonowy to izolator. Dokładne odkurzenie bruzd klasy M przed aplikacją mas wyrównujących zapobiega odparzeniu warstwy nośnej.</p>
        </div>
        <div class="rk-info-box">
            <h4>2. Normatywne Masy</h4>
            <p>Zalewanie układu wymaga dedykowanych mas polimerowo-cementowych o bardzo dobrym współczynniku przewodzenia energii cieplnej.</p>
        </div>
        <div class="rk-info-box">
            <h4>3. Obliczenia Hydrauliczne</h4>
            <p>Z uwagi na cieńszą rurę (zazwyczaj 14x2), zaniechanie kalibracji przepływów prowadzi do trwałego upośledzenia efektywności pompy.</p>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
// Zabezpieczenie Domenowe - blokada bez użycia tagów nagłówkowych
document.addEventListener('DOMContentLoaded', function() {
    var d = window.location.hostname;
    var a = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (a.indexOf(d) === -1) {
        var c = document.getElementById('rk-frez-summary-app');
        if (c) {
            c.innerHTML = '<div style="padding: 40px; text-align: center; background: #1e293b; color: #ef4444; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;"><div style="font-size: 40px; margin-bottom: 15px;">⚠️</div><div style="font-size: 18px; font-weight: bold; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Licencji</div><div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">Moduł analityczny i kod JSON-LD stanowią własność Projekt-Ogrzewania.pl. Wykryto nieautoryzowane użycie skryptu.</div></div>';
        }
    }
});

// Logika Symulatora (Przełącznik)
function switchState(state) {
    const bg = document.getElementById('rkSimToggle');
    const btns = bg.querySelectorAll('.rk-toggle-btn');
    
    // UI toggle
    bg.setAttribute('data-state', state);
    btns.forEach(b => b.classList.remove('active'));
    bg.querySelector(`[data-target="${state}"]`).classList.add('active');

    // Dynamic Content
    if (state === 'pro') {
        document.getElementById('view-pro').style.display = 'flex';
        document.getElementById('desc-pro').style.display = 'block';
        
        // Timeout to allow display:flex to apply before animating opacity/transform
        setTimeout(() => {
            document.getElementById('view-pro').classList.add('active');
            document.getElementById('view-amateur').classList.remove('active');
            setTimeout(() => document.getElementById('view-amateur').style.display = 'none', 400);
        }, 10);
        document.getElementById('desc-amateur').style.display = 'none';

    } else {
        document.getElementById('view-amateur').style.display = 'flex';
        document.getElementById('desc-amateur').style.display = 'block';
        
        setTimeout(() => {
            document.getElementById('view-amateur').classList.add('active');
            document.getElementById('view-pro').classList.remove('active');
            setTimeout(() => document.getElementById('view-pro').style.display = 'none', 400);
        }, 10);
        document.getElementById('desc-pro').style.display = 'none';
    }
}
</script>



<style>
:root {
    --rk-dl2-dark: #0f172a; /* Głęboki granat */
    --rk-dl2-brand: #10b981; /* Techniczny szmaragd */
    --rk-dl2-brand-dark: #047857;
    --rk-dl2-accent: #0ea5e9; /* Morski cyjan */
    --rk-dl2-bg: #f8fafc;
    --rk-dl2-border: #e2e8f0;
    --rk-dl2-text: #334155;
    --rk-dl2-white: #ffffff;
}

.rk-dl2-container {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-dl2-white);
    border-radius: 24px;
    border: 1px solid rgba(16, 185, 129, 0.3);
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.1);
    overflow: hidden;
}

/* NAGŁÓWEK SEKCI */
.rk-dl2-header {
    background: linear-gradient(135deg, var(--rk-dl2-dark) 0%, #1e293b 100%);
    padding: 45px 50px;
    color: var(--rk-dl2-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    border-bottom: 4px solid var(--rk-dl2-brand);
}

.rk-dl2-header-content { position: relative; z-index: 2; max-width: 65%; }

.rk-dl2-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(16, 185, 129, 0.2);
    border: 1px solid rgba(16, 185, 129, 0.3);
    color: #6ee7b7;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 18px;
}

.rk-dl2-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    letter-spacing: -0.5px;
    line-height: 1.3;
}

.rk-dl2-header p {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.6;
}

/* WIZUALIZACJA PDF / IKONA */
.rk-dl2-visual {
    position: relative;
    z-index: 2;
}

.rk-dl2-icon-svg {
    width: 90px;
    height: auto;
    filter: drop-shadow(0 15px 25px rgba(0,0,0,0.4));
    animation: rkFloat 3.5s infinite ease-in-out alternate;
}

@keyframes rkFloat {
    0% { transform: translateY(0) rotate(0deg); }
    100% { transform: translateY(-12px) rotate(3deg); }
}

/* GŁÓWNY WORKSPACE */
.rk-dl2-workspace {
    display: flex;
    padding: 40px 50px;
    gap: 45px;
    background: var(--rk-dl2-bg);
}

.rk-dl2-preview {
    flex: 1;
    background: #ffffff;
    border: 1px solid var(--rk-dl2-border);
    border-radius: 16px;
    padding: 12px;
    position: relative;
    cursor: zoom-in;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.4s;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
}

.rk-dl2-preview:hover {
    transform: scale(1.03) translateY(-5px);
    box-shadow: 0 20px 35px -5px rgba(16, 185, 129, 0.15);
}

.rk-dl2-img {
    width: 100%;
    height: auto;
    border-radius: 10px;
    display: block;
}

.rk-dl2-zoom-tag {
    position: absolute;
    bottom: 20px;
    right: 20px;
    background: rgba(15, 23, 42, 0.85);
    color: #ffffff;
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    gap: 6px;
}

.rk-dl2-info {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-dl2-info h3 {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-dl2-dark);
    margin: 0 0 20px 0;
}

.rk-dl2-list {
    list-style: none;
    padding: 0;
    margin: 0 0 35px 0;
}

.rk-dl2-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 16px;
    font-size: 14.5px;
    font-weight: 600;
    color: var(--rk-dl2-text);
    line-height: 1.5;
}

.rk-dl2-check {
    width: 22px;
    height: 22px;
    color: var(--rk-dl2-brand);
    flex-shrink: 0;
    margin-top: 2px;
}

/* PRZYCISK POBIERANIA */
.rk-dl2-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-dl2-brand);
    color: var(--rk-dl2-white);
    text-decoration: none !important;
    padding: 18px 30px;
    border-radius: 14px;
    font-weight: 900;
    font-size: 16px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 10px 20px -5px rgba(16, 185, 129, 0.4);
    border: 2px solid transparent;
}

.rk-dl2-btn:hover {
    background: var(--rk-dl2-brand-dark);
    transform: translateY(-3px);
    box-shadow: 0 15px 30px -5px rgba(16, 185, 129, 0.5);
    border-color: #6ee7b7;
}

.rk-dl2-btn svg { transition: transform 0.3s; }
.rk-dl2-btn:hover svg { transform: translateY(3px); }

/* STOPKA MODUŁU */
.rk-dl2-footer {
    padding: 20px 50px;
    background: #ffffff;
    border-top: 1px solid var(--rk-dl2-border);
    font-size: 13px;
    color: #64748b;
    text-align: center;
}

.rk-dl2-footer a {
    color: var(--rk-dl2-accent);
    font-weight: 700;
    text-decoration: none;
}

@media (max-width: 800px) {
    .rk-dl2-header { flex-direction: column; text-align: center; padding: 35px 25px; }
    .rk-dl2-header-content { max-width: 100%; margin-bottom: 30px; }
    .rk-dl2-workspace { flex-direction: column; padding: 30px 25px; gap: 30px; }
    .rk-dl2-preview { margin-bottom: 10px; }
    .rk-dl2-btn { width: 100%; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#infografika-pdf",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/"
    },
    "headline": "Frezowanie podłogówki – Kompendium Wiedzy (Infografika PDF)",
    "description": "Pobierz inżynierskie zestawienie technologii frezowania ogrzewania podłogowego. Schematy, koszty, grubości jastrychu i najczęstsze błędy w jednym pliku PDF.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Frezowanie-ogrzewania-podlogowego-w-starym-domu.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-17",
    "dateModified": "2026-05-17"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#dataset-infografika",
    "name": "Matryca decyzyjna: Frezowanie vs Tradycyjne Kucie",
    "description": "Zbiór danych określający wady, zalety oraz techniczne wymagania brzegowe (nośność, grubość) dla wylewek poddawanych nacinaniu diamentowemu.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika frezowanie podłogówki",
      "porównanie kucie a frezowanie pdf",
      "schemat układania rur w bruzdach",
      "wymagania wylewki pod frezowanie",
      "błędy instalatora ogrzewanie podłogowe"
    ],
    "measurementTechnique": "Zestawienie analityczne kosztów i czasu realizacji opracowane na podstawie normy PN-EN 1264-4.",
    "mainEntity": {
      "@type": "Thing",
      "name": "Technologiczna karta porównawcza instalacji płaszczyznowych"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/#download-hub",
    "name": "Centrum Pobierania Wiedzy: Frezowanie",
    "description": "Interaktywny moduł umożliwiający wizualizację HD i pobranie autorskiej dokumentacji technicznej w formacie wektorowym.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5"
  }
]
</script>

<div class="rk-dl2-container" id="app-frez-dl">
    
    <div class="rk-dl2-header">
        <div class="rk-dl2-header-content">
            <div class="rk-dl2-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" style="margin-right:4px;"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                Darmowe Materiały PDF
            </div>
            <h2>Pobierz Kompendium Wiedzy</h2>
            <p>Zabierz inżynierską wiedzę na budowę. Kompletne zestawienie technologii frezowania, schematy ułożenia rur i checklisty błędów w jednym pliku.</p>
        </div>
        <div class="rk-dl2-visual">
            <svg class="rk-dl2-icon-svg" viewBox="0 0 100 120" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M20 10 C20 4.477 24.477 0 30 0 L70 0 L100 30 L100 110 C100 115.523 95.523 120 90 120 L30 120 C24.477 120 20 115.523 20 110 Z" fill="#ef4444" stroke="#ffffff" stroke-width="4"/>
                <path d="M70 0 L70 30 L100 30" fill="#b91c1c"/>
                <circle cx="60" cy="65" r="15" fill="none" stroke="#ffffff" stroke-width="4" stroke-dasharray="8 4"/>
                <circle cx="60" cy="65" r="4" fill="#ffffff"/>
                <rect x="0" y="85" width="55" height="25" rx="4" fill="#ffffff" stroke="#ef4444" stroke-width="2"/>
                <text x="8" y="103" fill="#ef4444" font-size="16" font-weight="900" font-family="sans-serif">PDF</text>
            </svg>
        </div>
    </div>

    <div class="rk-dl2-workspace">
        
        <div class="rk-dl2-preview" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Frezowanie-ogrzewania-podlogowego-w-starym-domu.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Frezowanie-ogrzewania-podlogowego-w-starym-domu.webp" alt="Infografika Frezowanie ogrzewania podłogowego w starym domu" class="rk-dl2-img" loading="lazy">
            <div class="rk-dl2-zoom-tag">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                Kliknij, aby powiększyć
            </div>
        </div>

        <div class="rk-dl2-info">
            <h3>Co znajdziesz w infografice?</h3>
            <ul class="rk-dl2-list">
                <li class="rk-dl2-item">
                    <svg class="rk-dl2-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Analiza Porównawcza:</strong> Tradycyjne kucie kontra bezpyłowe frezowanie.</span>
                </li>
                <li class="rk-dl2-item">
                    <svg class="rk-dl2-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Wymagania Techniczne:</strong> Krytyczne grubości i dopuszczalne klasy jastrychu.</span>
                </li>
                <li class="rk-dl2-item">
                    <svg class="rk-dl2-check" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Czerwone Flagi:</strong> Lista najczęstszych, kosztownych błędów instalatorów.</span>
                </li>
            </ul>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Frezowanie-ogrzewania-podlogowego-w-starym-domu.pdf" class="rk-dl2-btn" target="_blank" download>
                POBIERZ PLIK W WYSOKIEJ JAKOŚCI
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
            </a>
            
            <p style="margin-top: 20px; font-size: 13.5px; color: #64748b; line-height: 1.5;">
                Zabezpiecz swoją inwestycję z autorskim <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" style="color:var(--rk-dl2-brand-dark); font-weight:800; text-decoration:underline;">Projektem Ogrzewania Podłogowego OZC</a>. Obliczenia na twardych danych uchronią Cię przed awarią.
            </p>
        </div>

    </div>

    <div class="rk-dl2-footer">
        © 2026 Projekt-Ogrzewania.pl | Inżynier HVAC: <strong>Robert Kucharski</strong>. Możesz udostępniać ten plik dalej (z zachowaniem linku).
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // --- OCHRONA DOMENOWA (Bez tagów nagłówkowych) ---
    const allowedHost = window.location.hostname;
    const whitelisted = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!whitelisted.includes(allowedHost)) {
        const dApp = document.getElementById('app-frez-dl');
        if (dApp) {
            dApp.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; color: #ef4444; margin-bottom: 10px;">Zasoby Chronione Licencją</div>
                    <p style="color: #cbd5e1; font-size: 14px; margin: 0;">Ta infografika i dokumentacja PDF są własnością serwisu Projekt-Ogrzewania.pl. Osadzanie na zewnętrznych domenach jest zablokowane.</p>
                </div>
            `;
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/frezowanie-ogrzewania-podlogowego-w-starym-domu/">Frezowanie ogrzewania podłogowego w starym domu.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</title>
		<link>https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 18:14:51 +0000</pubDate>
				<category><![CDATA[Budowa domu]]></category>
		<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Instalacje budowlane]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Okna]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradnik inwestora]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[dom energooszczędny]]></category>
		<category><![CDATA[duże przeszklenia]]></category>
		<category><![CDATA[izolacja xps]]></category>
		<category><![CDATA[komfort termiczny]]></category>
		<category><![CDATA[konwektory kanałowe]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[okna panoramiczne]]></category>
		<category><![CDATA[projektowanie instalacji]]></category>
		<category><![CDATA[rozstaw rur]]></category>
		<category><![CDATA[strefa brzegowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=4070</guid>

					<description><![CDATA[<p>Współczesna architektura zachwyca ogromnymi przeszkleniami, które otwierają wnętrza na ogród i wpuszczają do środka mnóstwo naturalnego światła. Jednak to, co cieszy oko, bywa sporym wyzwaniem dla inżynierów sanitarnych. Zimne tafle szkła generują zjawisko spływu chłodnego powietrza, co może prowadzić do powstawania nieprzyjemnych przeciągów i dyskomfortu termicznego. Właściwie przygotowany projekt ogrzewania podłogowego do domu z dużymi przeszkleniami musi uwzględniać specyfikę strefy brzegowej, aby skutecznie zniwelować straty ciepła przy oknach tarasowych. W naszym poradniku szczegółowo analizujemy fizykę tego zjawiska, podpowiadamy, jak obliczyć zagęszczenie rur, jaką izolację zastosować oraz kiedy niezbędne okaże się wsparcie w postaci konwektorów kanałowych. Dowiedz się, jak zaprojektować system, który zagwarantuje ciepłe stopy nawet przy panoramicznych oknach w mroźne dni.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Nowoczesna architektura coraz częściej stawia na <strong>duże, przeszklone powierzchnie</strong> okna panoramiczne, przesuwne ściany szklane czy francuskie balkony. Dom zalany światłem wygląda spektakularnie, ale dla instalatora ogrzewania podłogowego staje się prawdziwym wyzwaniem. <em>Gdzie ułożyć pętle grzewcze, skoro zimne szyby „ssą” ciepło z podłogi?</em> W tym artykule pokażę, jak <strong>projekt ogrzewania podłogowego do domu z dużymi przeszkleniami</strong> może skutecznie poradzić sobie ze strefą przy oknach, bez ryzyka chłodnych stóp i przeciągów. Opiszę konkretne techniki projektowe, podam wzory i tabele, a także zaproponuję prosty kalkulator do samodzielnych wyliczeń.</p>



<h2 class="wp-block-heading">Dlaczego strefa przy oknach jest tak problematyczna? Fizyka zjawiska.</h2>



<p class="wp-block-paragraph">Zanim przejdziemy do rozwiązań, zrozummy wroga. Szyba – nawet ta nowoczesna, trzyszybowa ma <strong>współczynnik przenikania ciepła U</strong> rzędu 0,8–1,1 W/m²K. Ściana zewnętrzna ocieplona 20 cm wełny to około 0,15–0,20 W/m²K. Różnica jest ogromna. Zimą przy temperaturze zewnętrznej -10°C wewnętrzna powierzchnia szyby ma zaledwie 12–14°C (przy standardowym U=1,0). Powietrze przy szybie ochładza się, gęstnieje i opada w dół, tworząc <strong>spływający strumień zimna</strong> (tzw. <em>efekt kominowy</em>).</p>



<p class="wp-block-paragraph">Gdy podłoga przy oknie jest zbyt zimna (poniżej 21–22°C na powierzchni), czujemy nieprzyjemny dyskomfort stopy wychładzają się nawet przy 22°C w pomieszczeniu. Ogrzewanie podłogowe musi więc dostarczyć tam <strong>dodatkowe ciepło</strong>, które skompensuje straty przez szybę i ogrzeje opadające powietrze.</p>



<h2 class="wp-block-heading"><strong>Gęstość ułożenia rur jako klucz do sukcesu</strong>.</h2>



<p class="wp-block-paragraph">Najprostsza, a zarazem najskuteczniejsza metoda to <strong>zmienne zagęszczenie <a href="https://projekt-ogrzewania.pl/petla-grzewcza/" type="link" id="https://projekt-ogrzewania.pl/petla-grzewcza/">pętli grzewczych</a></strong>. W głębi pomieszczenia, gdzie straty są małe, stosujemy standardowy rozstaw 10–20 cm. W pasie przy oknie nawet 5 –10 cm.</p>



<h3 class="wp-block-heading">Jak obliczyć potrzebny rozstaw?</h3>



<p class="wp-block-paragraph">Potrzebujemy dwóch rzeczy:&nbsp;<strong>liniowej straty ciepła przez okno</strong>&nbsp;(na metr bieżący) oraz&nbsp;<strong>zdolności podłogi do oddawania ciepła</strong>&nbsp;w funkcji rozstawu rur.</p>



<p class="wp-block-paragraph">Przykład:</p>



<ul class="wp-block-list">
<li>Okno: wysokość 2,2 m, U=1,0 W/m²K, temperatura wewnątrz 22°C, zewnątrz -4°C.</li>



<li>Strata ciepła przez 1 m² szyby: q = U * ΔT = 1,0 * 26 = 26 W/m².</li>



<li>Dla okna o wysokości 2,2 m strata&nbsp;<strong>na metr bieżący</strong>&nbsp;wynosi: 26 * 2,2 =&nbsp;<strong>57,2 W/mb</strong>.</li>
</ul>



<p class="wp-block-paragraph">Dodajmy 30% zapasu na spływ powietrza (efekt bryzy) –&nbsp;<strong>74,4 W/mb</strong>&nbsp;musi dostarczyć podłoga w pasie przy oknie.</p>



<p class="wp-block-paragraph">Z danych producentów rur  dla różnicy temperatury wody średniej i pomieszczenia 10°C:</p>



<ul class="wp-block-list">
<li>Rozstaw 20 cm → gęstość mocy podłogi ok. 70–80 W/m².</li>



<li>Rozstaw 10 cm → gęstość mocy ok. 140–160 W/m².</li>
</ul>



<p class="wp-block-paragraph">Przyjmijmy, że pas przyokienny ma szerokość 1,2 m. Wtedy:</p>



<ul class="wp-block-list">
<li>Dla rozstawu 10 cm: 1,2 m * 150 W/m² =&nbsp;<strong>180 W/mb</strong>&nbsp;– z dużym zapasem.</li>



<li>Dla rozstawu 15 cm: 1,2 m * 100 W/m² = 120 W/mb – w sam raz na 74 W/mb.</li>
</ul>



<p class="wp-block-paragraph">Wniosek: dla okna U=1,0 i wys. 2,2 m wystarczy rozstaw 15 cm w pasie 1,2 m. Dla okna starszego (U=1,4) lub wyższego (3 m) trzeba zejść do 10 cm.</p>



<h2 class="wp-block-heading"><strong>Oddzielne obwody grzewcze dla strefy przyokiennej</strong>.</h2>



<p class="wp-block-paragraph">Uzgęszczenie rur to jedno, ale bez&nbsp;<strong>niezależnego sterowania</strong>&nbsp;możemy przegrzewać resztę pokoju. Dlatego w projekcie ogrzewania podłogowego do domu z dużymi przeszkleniami warto wydzielić&nbsp;<strong>jeden lub dwa dodatkowe obwody</strong>&nbsp;biegnące wyłącznie wzdłuż okien.</p>



<h3 class="wp-block-heading">Zalety takiego rozwiązania.</h3>



<ul class="wp-block-list">
<li>Możliwość podniesienia temperatury tylko w pasie 0–1,5 m od okna (np. 26°C na powierzchni przy szybie i 23°C w głębi).</li>



<li>Szybsza reakcja na zmiany słoneczne przy nasłonecznieniu można wyłączyć obwód przyokienny, by nie przegrzewać.</li>



<li>Osobny <a href="https://projekt-ogrzewania.pl/czujnik-podlogowy/">czujnik podłogowy</a> (lub przyklejony do szyby) gdy temperatura szyby spada, obwód automatycznie się włącza.</li>
</ul>



<h3 class="wp-block-heading">Przykład podziału pomieszczenia.</h3>



<p class="wp-block-paragraph">Salon 50 m² z oknem panoramicznym 8 × 2,4 m. Dzielimy na:</p>



<ul class="wp-block-list">
<li><strong>Obwód A</strong>&nbsp;(główny) – rozstaw 20 cm, obejmuje środek pokoju (ok. 40 m²).</li>



<li><strong>Obwód B</strong>&nbsp;(przyokienny) – rozstaw 12 cm, pas szerokości 1,2 m wzdłuż całego okna (pow. 8*1,2 = 9,6 m²).</li>



<li><strong>Obwód C</strong>&nbsp;(drugi pas, opcjonalnie) – przy bardzo szerokim pomieszczeniu, drugi pas 0,8–1,0 m z rozstawem 15 cm.</li>
</ul>



<p class="wp-block-paragraph">Do sterowania używamy rozdzielacza z siłownikami i termostatem pokojowym z dwoma wyjściami (lub jednym + czujnikiem podłogowym w strefie B).</p>



<h2 class="wp-block-heading"><strong>Wzmocniona izolacja pod ogrzewaniem przy oknach</strong>.</h2>



<p class="wp-block-paragraph">Często pomijany, a kluczowy detal. Podłoga przy oknie graniczy ze strefą mostka termicznego zwłaszcza przy dużych przeszkleniach do posadzki. Nawet jeśli okno jest dobrze osadzone, <strong>strefa przy progu</strong> ma niższą temperaturę od spodu.</p>



<h3 class="wp-block-heading">Jak to policzyć?</h3>



<p class="wp-block-paragraph">Standardowa podłoga na gruncie: izolacja 10–12 cm EPS. Ale przy oknie strumień ciepła może uciekać na zewnątrz przez boczny mostek. W projekcie należy zastosować&nbsp;<strong>wydłużoną drogę strumienia ciepła</strong>&nbsp;– np. XPS o grubości 15–20 cm na szerokość 1,5 m od okna.</p>



<p class="wp-block-paragraph">Przykład:</p>



<ul class="wp-block-list">
<li>Bez wzmocnienia: strata dodatkowa przez krawędź – szacunkowo 5–10 W/mb.</li>



<li>Z XPS 15 cm: strata zmniejszona do 2–3 W/mb.</li>
</ul>



<p class="wp-block-paragraph">Różnica niewielka, ale w połączeniu z zagęszczeniem rur daje komfort i oszczędność energii.</p>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-table-section {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    padding: 0 20px;
}

.table-header-title {
    text-align: center;
    margin-bottom: 30px;
}

.table-header-title h2 {
    font-size: 28px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: var(--primary);
}

.table-header-title p {
    color: #64748b;
    margin: 0;
    font-size: 15px;
    line-height: 1.6;
}

.table-container {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    overflow: hidden;
}

.premium-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0;
}

.premium-table thead {
    background: var(--bg-light);
    border-bottom: 2px solid #e2e8f0;
}

.premium-table th {
    padding: 20px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    letter-spacing: 0.5px;
}

.premium-table tbody tr {
    border-bottom: 1px solid #f1f5f9;
    transition: background-color 0.2s ease;
}

.premium-table tbody tr:last-child {
    border-bottom: none;
}

.premium-table tbody tr:hover {
    background-color: #f8fafc;
}

.premium-table td {
    padding: 20px;
    font-size: 15px;
    color: #475569;
    vertical-align: middle;
}

/* Wyróżnienie kolumny "Przy oknie" */
.premium-table td:nth-child(3) {
    font-weight: 700;
    color: var(--accent);
    background: rgba(37, 99, 235, 0.02);
}

/* Wyróżnienie "Brak" lub pauzy */
.empty-val {
    color: #cbd5e1;
}

/* STYLOWANIE IKON W TABELI */
.row-title-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
}

.row-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: var(--bg-light);
    border-radius: 10px;
    font-size: 18px;
    border: 1px solid #e2e8f0;
    flex-shrink: 0;
}

/* --- RESPONSYWNOŚĆ (MOBILE) --- */
@media (max-width: 768px) {
    .premium-table-section {
        padding: 0 15px;
    }

    .table-container {
        background: transparent;
        box-shadow: none;
        border: none;
    }

    .premium-table thead {
        display: none;
    }

    .premium-table, 
    .premium-table tbody, 
    .premium-table tr, 
    .premium-table td {
        display: block;
        width: 100%;
    }

    .premium-table tr {
        background: #ffffff;
        margin-bottom: 20px;
        border-radius: 16px;
        box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.08);
        border: 1px solid #f1f5f9;
        overflow: hidden;
    }

    .premium-table tr:hover {
        background: #ffffff;
        transform: translateY(-2px);
        transition: transform 0.3s ease;
    }

    .premium-table td {
        padding: 15px 20px 15px 45%;
        text-align: right;
        position: relative;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        min-height: 50px; /* Zapewnia miejsce dla flexboxa */
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }

    .premium-table td:first-child {
        padding-left: 20px;
        text-align: left;
        justify-content: flex-start;
        background: var(--bg-light);
        border-bottom: 2px solid #e2e8f0;
    }

    .premium-table td:last-child {
        border-bottom: none;
    }

    /* Wyłączamy przedrostki data-label dla pierwszego wiersza, bo tam jest tytuł z ikoną */
    .premium-table td:not(:first-child)::before {
        content: attr(data-label);
        position: absolute;
        left: 20px;
        width: 40%;
        text-align: left;
        font-size: 11px;
        font-weight: 800;
        text-transform: uppercase;
        color: #94a3b8;
        display: flex;
        align-items: center;
        height: 100%;
        top: 0;
    }
    
    .premium-table td:nth-child(3) {
        background: #eff6ff;
        border-top: 2px dashed #bfdbfe;
    }
}
</style>

<div class="premium-table-section" id="premium-table-app">
    <div class="table-header-title">
        <h2>Rekomendowane grubości izolacji przy oknie</h2>
        <p>Porównanie standardowej podłogi z pasem brzegowym. <br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Dane opracowane przez ekspertów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="table-container">
        <table class="premium-table">
            <thead>
                <tr>
                    <th>Typ okna / podłoża</th>
                    <th>Standard w głębi</th>
                    <th>Przy oknie (pas 1,5 m)</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">🧱</div>
                            <strong>Podłoga na gruncie (grunt suchy)</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi">EPS 10 cm</td>
                    <td data-label="Przy oknie">XPS 15 cm</td>
                </tr>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">💧</div>
                            <strong>Podłoga na gruncie (grunt wilgotny)</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi">EPS 12 cm + folia</td>
                    <td data-label="Przy oknie">XPS 20 cm</td>
                </tr>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">❄️</div>
                            <strong>Strop nad nieogrzewaną piwnicą</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi">Wełna 12 cm</td>
                    <td data-label="Przy oknie">Wełna 18 cm + jastrych</td>
                </tr>
                <tr>
                    <td data-label="Typ okna / podłoża">
                        <div class="row-title-wrap">
                            <div class="row-icon">🏗️</div>
                            <strong>Płyta balkonowa (mostek liniowy)</strong>
                        </div>
                    </td>
                    <td data-label="Standard w głębi"><span class="empty-val">—</span></td>
                    <td data-label="Przy oknie">XPS 20 cm + izolacja</td>
                </tr>
            </tbody>
        </table>
    </div>
</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)) {
        document.getElementById('premium-table-app').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: 20px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ta tabela i wytyczne są własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały wklejone na tę stronę bez zgody autora.</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>



<p class="wp-block-paragraph"><em>XPS lepszy od EPS przy oknie, bo ma wyższą wytrzymałość na ściskanie i niższe nasiąkanie.</em></p>



<h2 class="wp-block-heading"><strong>Konwektory kanałowe jako wsparcie lub alternatywa</strong>.</h2>



<p class="wp-block-paragraph">Są sytuacje, gdy samo ogrzewanie podłogowe nie da rady. Dotyczy to szczególnie okien&nbsp;<strong>od podłogi do sufitu</strong>&nbsp;(wysokość 2,5–3 m) lub gdy U szyby jest gorsze niż 1,0. Wtedy straty liniowe przekraczają 100 W/mb, a przy rozstawie 10 cm i pasie 1,2 m uzyskamy maksymalnie 180 W/mb – teoretycznie starczy, ale podłoga będzie bardzo gorąca (ponad 28°C), co jest nieprzyjemne i może uszkodzić niektóre pokrycia.</p>



<h3 class="wp-block-heading">Rozwiązanie: konwektor kanałowy (listwa grzewcza).</h3>



<p class="wp-block-paragraph">Montuje się go w posadzce, tuż przed oknem (5–15 cm od szyby). Działa jak <strong>kurtyna ciepła</strong> ogrzane powietrze unosi się wzdłuż szyby, przerywając spływ zimnego strumienia.</p>



<p class="wp-block-paragraph">Parametry typowego konwektora (np. Kermi, Jaga):</p>



<ul class="wp-block-list">
<li>Wysokość kanału: 8–15 cm (musi zmieścić się w wylewce).</li>



<li>Moc liniowa: 150–300 W/mb przy ΔT = 50°C (woda 70/50°C).</li>



<li>Dla niskotemperaturowego ogrzewania podłogowego (woda 35/28°C) moc spada do 50–100 W/mb – wtedy konwektor nie zastąpi podłogi, ale ją wspomoże.</li>
</ul>



<h3 class="wp-block-heading">Kiedy stosować konwektor zamiast zagęszczania pętli? (H3)</h3>



<ul class="wp-block-list">
<li>Okna o wysokości powyżej 2,7 m (np. lofty).</li>



<li>Gdy podłoga jest drewniana (dąb, jesion) bo przy zagęszczonych pętlach może się odkształcić.</li>



<li>W pomieszczeniach, gdzie nie chcemy tracić 1,2 m pasa na gęste rury (np. mały pokój).</li>
</ul>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-table-section {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    padding: 0 20px;
}

.table-text-content {
    max-width: 800px;
    margin: 0 auto 30px auto;
    text-align: center;
}

.table-text-content h2 {
    font-size: 28px;
    font-weight: 800;
    margin: 0 0 15px 0;
    color: var(--primary);
}

.table-text-content p {
    color: #475569;
    font-size: 16px;
    line-height: 1.6;
    margin-bottom: 0;
}

.table-container {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    margin-bottom: 30px;
}

.premium-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0;
}

.premium-table thead {
    background: var(--bg-light);
    border-bottom: 2px solid #e2e8f0;
}

.premium-table th {
    padding: 20px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    letter-spacing: 0.5px;
}

.premium-table tbody tr {
    border-bottom: 1px solid #f1f5f9;
    transition: background-color 0.2s ease;
}

.premium-table tbody tr:last-child {
    border-bottom: none;
}

.premium-table tbody tr:hover {
    background-color: #f8fafc;
}

.premium-table td {
    padding: 20px;
    font-size: 15px;
    color: #475569;
    vertical-align: middle;
}

/* Wyróżnienie wartości R */
.premium-table td:nth-child(3) {
    font-weight: 800;
    color: var(--primary);
}

/* STYLOWANIE IKON */
.row-title-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
}

.row-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: var(--bg-light);
    border-radius: 10px;
    font-size: 18px;
    border: 1px solid #e2e8f0;
    flex-shrink: 0;
}

/* ODZNAKI (BADGES) DLA UWAG */
.status-badge {
    display: inline-block;
    padding: 6px 12px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    line-height: 1.4;
}

.badge-good {
    background: #dcfce7;
    color: #166534;
}

.badge-warn {
    background: #ffedd5;
    color: #9a3412;
}

.badge-bad {
    background: #fee2e2;
    color: #991b1b;
}

.table-outro {
    background: #eff6ff;
    padding: 20px 30px;
    border-radius: 16px;
    border-left: 4px solid var(--accent);
    color: #1e3a8a;
    font-size: 15px;
    line-height: 1.6;
    font-weight: 500;
}

/* --- RESPONSYWNOŚĆ (MOBILE) --- */
@media (max-width: 768px) {
    .premium-table-section {
        padding: 0 15px;
    }

    .table-container {
        background: transparent;
        box-shadow: none;
        border: none;
    }

    .premium-table thead {
        display: none;
    }

    .premium-table, 
    .premium-table tbody, 
    .premium-table tr, 
    .premium-table td {
        display: block;
        width: 100%;
    }

    .premium-table tr {
        background: #ffffff;
        margin-bottom: 20px;
        border-radius: 16px;
        box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.08);
        border: 1px solid #f1f5f9;
        overflow: hidden;
    }

    .premium-table tr:hover {
        background: #ffffff;
        transform: translateY(-2px);
        transition: transform 0.3s ease;
    }

    .premium-table td {
        padding: 15px 20px 15px 45%;
        text-align: right;
        position: relative;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        min-height: 50px;
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }

    .premium-table td:first-child {
        padding: 20px;
        text-align: left;
        justify-content: flex-start;
        background: var(--bg-light);
        border-bottom: 2px solid #e2e8f0;
    }

    .premium-table td:last-child {
        border-bottom: none;
    }

    .premium-table td:not(:first-child)::before {
        content: attr(data-label);
        position: absolute;
        left: 20px;
        width: 40%;
        text-align: left;
        font-size: 11px;
        font-weight: 800;
        text-transform: uppercase;
        color: #94a3b8;
        display: flex;
        align-items: center;
        height: 100%;
        top: 0;
    }
}
</style>

<div class="premium-table-section" id="premium-table-coverings">
    
    <div class="table-text-content">
        <h2>Dobór pokrycia podłogowego – to ma znaczenie</h2>
        <p>Nie każde pokrycie nadaje się do strefy przyokiennej z gęstymi rurami. <strong>Opór cieplny pokrycia (R)</strong> powinien być jak najmniejszy – wtedy ciepło szybko dociera do powierzchni okna, blokując spływający chłód. <br><br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Tabela opracowana przez ekspertów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="table-container">
        <table class="premium-table">
            <thead>
                <tr>
                    <th>Pokrycie</th>
                    <th>Grubość</th>
                    <th>R (m²K/W)</th>
                    <th>Uwagi</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">💠</div>
                            <strong>Płytki gresowe</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">1 cm</td>
                    <td data-label="R (m²K/W)">~0,02</td>
                    <td data-label="Uwagi"><span class="status-badge badge-good">Idealne przy oknach</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🪨</div>
                            <strong>Kamień naturalny (marmur)</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">2 cm</td>
                    <td data-label="R (m²K/W)">~0,03</td>
                    <td data-label="Uwagi"><span class="status-badge badge-good">Bardzo dobre</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">⚡</div>
                            <strong>Panele winylowe LVT</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">4–6 mm</td>
                    <td data-label="R (m²K/W)">0,01–0,02</td>
                    <td data-label="Uwagi"><span class="status-badge badge-good">Dobre, szybka reakcja</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🪵</div>
                            <strong>Panele laminowane</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">8 mm</td>
                    <td data-label="R (m²K/W)">0,05–0,07</td>
                    <td data-label="Uwagi"><span class="status-badge badge-warn">Umiarkowane (lepiej unikać przy oknie)</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🌳</div>
                            <strong>Deska drewniana (dąb)</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">1,5 cm</td>
                    <td data-label="R (m²K/W)">0,10–0,12</td>
                    <td data-label="Uwagi"><span class="status-badge badge-bad">Złe – blokuje ciepło, ryzyko spękań</span></td>
                </tr>
                <tr>
                    <td data-label="Pokrycie">
                        <div class="row-title-wrap">
                            <div class="row-icon">🧶</div>
                            <strong>Dywan</strong>
                        </div>
                    </td>
                    <td data-label="Grubość">1 cm (wysoki)</td>
                    <td data-label="R (m²K/W)">0,15–0,25</td>
                    <td data-label="Uwagi"><span class="status-badge badge-bad">Absolutnie nie przy oknie!</span></td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="table-outro">
        💡 <strong>Wskazówka eksperta:</strong> W strefie przyokiennej zalecamy gres lub kamień – nawet jeśli reszta pokoju ma panele czy deskę. Można to elegancko rozwiązać, robiąc wizualne oddzielenie stref za pomocą minimalistycznej listwy przejściowej.
    </div>

</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)) {
        document.getElementById('premium-table-coverings').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: 20px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ta tabela i wytyczne są własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały wklejone na tę stronę bez zgody autora.</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>



<h2 class="wp-block-heading"><strong>Sterowanie z kompensacją i czujnikami przy szybie</strong>.</h2>



<p class="wp-block-paragraph">Tradycyjny <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/" type="link" id="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostat pokojowy</a> reaguje na temperaturę powietrza w środku pomieszczenia. Przy dużych oknach to za mało bo strefa przy szybie może być o 3–5°C zimniejsza, zanim termostat zareaguje.</p>



<h3 class="wp-block-heading">Nowoczesne podejście.</h3>



<p class="wp-block-paragraph">Zastosuj regulator pogodowy z czujnikiem&nbsp;<strong>przypowierzchniowym</strong>&nbsp;na szybie (lub w posadzce przy oknie). Na rynku dostępne są systemy, np.:</p>



<ul class="wp-block-list">
<li><strong>Danfoss Icon</strong>&nbsp;z czujnikiem okiennym (OZ).</li>



<li><strong>Uponor Smatrix</strong>&nbsp;z możliwością podłączenia czujnika zewnętrznego i wewnętrznego w strefie brzegowej.</li>



<li><strong>Salus Controls</strong>&nbsp;z bezprzewodowym czujnikiem przyklejanym do szyby.</li>
</ul>



<p class="wp-block-paragraph">Algorytm: gdy temperatura szyby spada poniżej 12°C (przy zewnętrznej -5°C), regulator zwiększa temperaturę w obwodzie przyokiennym o 5–10°C. Dzięki temu podłoga oddaje więcej ciepła dokładnie wtedy, gdy jest potrzebne.</p>



<h2 class="wp-block-heading"><strong>Przykład obliczeniowy – projekt krok po kroku</strong>.</h2>



<p class="wp-block-paragraph">Zaprojektujmy <a href="https://projekt-ogrzewania.pl/" type="link" id="https://projekt-ogrzewania.pl/">ogrzewanie podłogowe</a> dla salonu 35 m² z oknem 5 × 2,2 m (U=0,9 W/m²K). Temperatura zewnętrzna obliczeniowa -16°C (Polska, III strefa), wewnętrzna 22°C.</p>



<h3 class="wp-block-heading">Krok 1: Straty przez okno</h3>



<p class="wp-block-paragraph">ΔT = 22 &#8211; (-16) = 38 K<br>Straty przez szybę: 0,9 * 38 = 34,2 W/m²<br>Dla całego okna (5*2,2=11 m²): 34,2 * 11 = 376 W<br>Na metr bieżący: 376 / 5 =&nbsp;<strong>75,2 W/mb</strong></p>



<p class="wp-block-paragraph">Dodajemy 30% na spływ powietrza: 75,2 * 1,3 = <strong>98 W/mb</strong> tyle musi dostarczyć podłoga w pasie przy oknie.</p>



<h3 class="wp-block-heading">Krok 2: Wybór metody</h3>



<p class="wp-block-paragraph">Mamy do dyspozycji pas o szerokości 1,2 m. Jaka gęstość mocy podłogi jest potrzebna?<br>98 W/mb / 1,2 m =&nbsp;<strong>81,7 W/m²</strong>&nbsp;w pasie.</p>



<p class="wp-block-paragraph">Sprawdzamy, jaki rozstaw rur da taką gęstość przy typowej ΔT (woda – pomieszczenie) = 8°C (woda 35/27°C, średnia 31°C, pom. 22°C, różnica 9°C). Z danych producenta:</p>



<ul class="wp-block-list">
<li>Rozstaw 15 cm → ok. 100 W/m²</li>



<li>Rozstaw 20 cm → ok. 70 W/m²</li>
</ul>



<p class="wp-block-paragraph">Przyjmujemy&nbsp;<strong>rozstaw 15 cm</strong>&nbsp;w pasie 1,2 m. Reszta pomieszczenia (poza pasem) może mieć 20 cm.</p>



<h3 class="wp-block-heading">Krok 3: Długość rur i zapotrzebowanie na moc</h3>



<p class="wp-block-paragraph">Pas przyokienny: powierzchnia 5 m * 1,2 m = 6 m².<br>Rury co 15 cm: na 1 m² potrzeba ok. 6,7 mb rury (1 / 0,15).<br>Łącznie: 6 * 6,7 =&nbsp;<strong>40,2 mb</strong>&nbsp;w jednym obwodzie – idealnie (obwód nie powinien przekraczać 100 mb).</p>



<p class="wp-block-paragraph">Reszta salonu: 35 &#8211; 6 = 29 m², rozstaw 20 cm → 5 mb/m² → 145 mb. Dzielimy na dwa obwody po 72,5 mb.</p>



<h3 class="wp-block-heading">Krok 4: Izolacja przy oknie</h3>



<p class="wp-block-paragraph">Podłoga na gruncie. Standardowo EPS 10 cm, ale przy oknie dokładamy pas XPS 15 cm (szer. 1,5 m) pod rury. Dodatkowo izolacja krawędziowa przy szybie z pianki PUR.</p>



<h3 class="wp-block-heading">Krok 5: Pokrycie</h3>



<p class="wp-block-paragraph">W pasie przyokiennym <strong>gres 1 cm</strong> (R=0,02). Reszta panele winylowe LVT (R=0,01). Bez dywanów.</p>



<h2 class="wp-block-heading"><strong>Kalkulator – jak samodzielnie dobrać zagęszczenie rur przy oknie</strong>.</h2>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

/* ZAJAWKA SEO I LINK */
.calc-intro {
    max-width: 1150px;
    margin: 40px auto 10px auto;
    text-align: center;
    padding: 0 20px;
}

.calc-intro h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    margin-bottom: 15px;
}

.calc-intro p {
    font-size: 16px;
    color: #475569;
    line-height: 1.6;
    max-width: 800px;
    margin: 0 auto;
}

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

.calc-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
}

/* LEWA STRONA - KONFIGURACJA */
.config-side {
    padding: 40px;
    background: #ffffff;
}

.section-title {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1.2px;
    margin-bottom: 20px;
    display: block;
}

.type-selector {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 8px;
    margin-bottom: 30px;
}

.type-btn {
    padding: 12px 6px;
    border: 2px solid #cbd5e1;
    border-radius: 12px;
    cursor: pointer;
    text-align: center;
    font-weight: 700;
    font-size: 14px;
    color: #475569;
    background: #fff;
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.type-btn span {
    margin-top: 4px;
    font-size: 10px;
    font-weight: 400;
}

.type-btn.active {
    border-color: var(--accent);
    background: #eff6ff;
    color: var(--accent);
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
}

.input-wrap { margin-bottom: 25px; }
.input-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 8px;
    align-items: center;
}
.input-label-row label { font-weight: 600; font-size: 14px; }
.input-label-row .val-badge {
    background: #f1f5f9;
    padding: 4px 12px;
    border-radius: 8px;
    font-weight: 800;
    color: var(--accent);
    font-size: 14px;
}

input[type=range] {
    width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-top: 10px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer;
}

/* PRAWA STRONA - WYNIKI */
.result-side {
    padding: 40px;
    background: var(--bg-light);
    border-left: 1px solid #f1f5f9;
}

.main-score-box {
    background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--success); transition: 0.3s;
}
.score-num { font-size: 48px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; color: var(--accent); }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

#risk-msg {
    margin-top: 15px; padding: 12px; border-radius: 10px; font-size: 13px; font-weight: 600; display: none; background: #fee2e2; color: var(--danger); border: 1px solid #fecaca; line-height: 1.4; text-align: left;
}

.tech-grid {
    background: var(--primary); color: white; padding: 25px; border-radius: 20px; display: grid; gap: 12px;
}
.tech-item {
    display: flex; justify-content: space-between; padding-bottom: 12px; border-bottom: 1px solid #1e293b; align-items: center;
}
.tech-item:last-child { border: none; padding-bottom: 0; }
.tech-item span { color: #94a3b8; font-size: 13px; }
.tech-item strong { font-size: 15px; text-align: right;}

.material-grid {
    display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 10px; margin-bottom: 15px;
}
.mini-card { background: rgba(255,255,255,0.08); padding: 15px; border-radius: 12px; text-align: center;}
.mini-card.full-width { grid-column: 1 / -1; background: rgba(37, 99, 235, 0.2); }
.mini-card span { font-size: 11px; color: #94a3b8; display: block; margin-bottom: 6px; text-transform: uppercase; font-weight: 600;}
.mini-card.full-width span { color: #bfdbfe; }
.mini-card strong { font-size: 20px; color: #fff; font-weight: 900; }

/* STOPKA */
.footer-cta {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #eff6ff;
    border-radius: 20px;
    border-left: 6px solid var(--accent);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 30px;
}

.cta-text-side {
    max-width: 550px;
}

.cta-buttons-stack {
    display: flex;
    flex-direction: column; 
    gap: 12px;
    min-width: 280px; 
}

.cta-btn {
    display: block; background: var(--accent); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 13px; text-align: center; border: none; cursor: pointer;
}
.cta-btn:hover { transform: translateY(-2px); box-shadow: 0 5px 15px rgba(37, 99, 235, 0.2); }

@media (max-width: 900px) {
    .calc-grid { grid-template-columns: 1fr; }
    .footer-cta { flex-direction: column; text-align: center; gap: 25px; margin: 20px; }
    .cta-buttons-stack { min-width: 100%; width: 100%; }
    .type-selector { grid-template-columns: repeat(2, 1fr); }
}
</style>

<div class="calc-intro">
    <h2>Kalkulator strefy brzegowej: Rozstaw rur przy oknie</h2>
    <p>Zimne stopy przy dużych przeszkleniach to przeszłość! Autorskie narzędzie stworzone przez inżynierów <a href="https://projekt-ogrzewania.pl/" style="color: #2563eb; font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a> bazujące na fizyce budowli. Podaj parametry swojego okna, a kalkulator wyliczy wymaganą moc podłogi, zapotrzebowanie na rurę oraz optymalny rozstaw.</p>
</div>

<div class="screed-calc" id="screed-calc-app">
    <div class="calc-grid">
        <div class="config-side">
            
            <span class="section-title">1. Parametry okna</span>
            <div class="input-wrap">
                <div class="input-label-row"><label>Współczynnik przenikania szyby (U)</label><span class="val-badge"><span id="v-u">0.9</span> W/m²K</span></div>
                <input type="range" id="u-val" min="0.5" max="1.8" step="0.1" value="0.9">
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Wysokość okna (od podłogi)</label><span class="val-badge"><span id="v-height">2.2</span> m</span></div>
                <input type="range" id="height-val" min="1.5" max="6.0" step="0.1" value="2.2">
            </div>

            <div class="input-wrap">
                <div class="input-label-row"><label>Szerokość okna</label><span class="val-badge"><span id="v-win-width">3.0</span> m</span></div>
                <input type="range" id="win-width-val" min="1.0" max="10.0" step="0.5" value="3.0">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Długość wnęki okiennej (pozwala obliczyć ilość rury).</div>
            </div>

            <span class="section-title">2. Geometria strefy brzegowej</span>
            <div class="input-wrap">
                <div class="input-label-row"><label>Szerokość pasa przyokiennego</label><span class="val-badge"><span id="v-width">1.2</span> m</span></div>
                <input type="range" id="width-val" min="0.5" max="2.0" step="0.1" value="1.2">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Odległość, na jaką strefa &#8222;wchodzi&#8221; w głąb pomieszczenia.</div>
            </div>

            <span class="section-title">3. Temperatury projektowe</span>
            <div class="input-wrap" style="margin-bottom: 15px;">
                <div class="input-label-row"><label>Oczekiwana temp. wewnątrz</label><span class="val-badge"><span id="v-tin">22</span> °C</span></div>
                <input type="range" id="tin-val" min="18" max="25" step="1" value="22">
            </div>
            
            <div style="font-size: 14px; font-weight: 600; margin-bottom: 8px;">Temperatura zewnętrzna (Strefa klimatyczna)</div>
            <div class="type-selector">
                <div class="type-btn" id="btn-tz-16" data-tz="-16">-16 °C<span>Strefa I, II, III</span></div>
                <div class="type-btn active" id="btn-tz-18" data-tz="-18">-18 °C<span>Strefa IV</span></div>
                <div class="type-btn" id="btn-tz-20" data-tz="-20">-20 °C<span>Strefa V</span></div>
                <div class="type-btn" id="btn-tz-22" data-tz="-22">-22 °C<span>Góry / Suwałki</span></div>
            </div>
            
        </div>

        <div class="result-side">
            <div id="mainBox" class="main-score-box">
                <span class="score-label">Wymagana moc podłogi w strefie brzegowej</span>
                <span class="score-num" id="resPower">&#8212;</span>
                <span class="score-label">W/m²</span>
                <div id="risk-msg">⚠️ Uwaga!</div>
            </div>

            <div class="tech-grid">
                <div class="material-grid">
                    <div class="mini-card full-width">
                        <span>Zalecany rozstaw rur w strefie brzegowej:</span>
                        <strong id="resSpacing" style="color:#60a5fa;">&#8212;</strong>
                    </div>
                    <div class="mini-card">
                        <span>Długość rur w strefie:</span>
                        <strong id="resPipeTotal">&#8212; mb</strong>
                    </div>
                    <div class="mini-card">
                        <span>Ilość obwodów (pętli):</span>
                        <strong id="resLoops">&#8212;</strong>
                    </div>
                </div>
                
                <div class="tech-item"><span>Całkowita strata cieplna przez okno:</span><strong id="resTotalWindowLoss" style="color:#fbbf24">&#8212;</strong></div>
                <div class="tech-item"><span>Powierzchnia strefy brzegowej:</span><strong id="resZoneArea">&#8212;</strong></div>
                <div class="tech-item" style="border:none;"><span>Strata bazowa z 1 metra bież. okna:</span><strong id="resBaseLoss">&#8212;</strong></div>
            </div>
            
            <div style="margin-top:20px; font-size:11px; color:#94a3b8; line-height: 1.5;">
                <strong>Wskazówka:</strong> Wyliczenia zakładają standardową temperaturę zasilania podłogówki (ΔT wody i powietrza ok. 8-10°C). Dla optymalnego przekazywania ciepła zastosuj w tej strefie wykończenie z płytek gresowych lub kamienia (R ≈ 0.02 m²K/W). Jedna pętla nie powinna przekraczać ok. 90-100mb.
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin:0 0 10px 0; color:#1e3a8a">Nie zgaduj przy dużych oknach!</h3>
            <p style="margin:0; font-size:14px; color:#475569">Zbyt rzadki rozstaw lub za długa pętla to gwarancja problemów. Zleć nam profesjonalny projekt, w którym wyliczymy opory hydrauliczne i zaprojektujemy dedykowane obwody z odpowiednim przepływem.</p>
        </div>
        <div class="cta-buttons-stack">
            <a href="javascript:void(0)" id="btn-email" class="cta-btn" style="background:#1e293b">
                WYŚLIJ WYNIKI NA E-MAIL
            </a>
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn">
                ZAMÓW PROJEKT OGRZEWANIA →
            </a>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    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('screed-calc-app');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">' +
                '<span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span>' +
                '<h' + '3 style="margin-top:0; font-size: 24px; color: #dc2626;">Narzędzie chronione</h' + '3>' +
                '<p style="font-size: 16px; margin-bottom: 25px;">Ten kalkulator jest własnością serwisu <a href="https://projekt-ogrzewania.pl/" style="color: #dc2626; font-weight: bold; text-decoration: underline;">Projekt-Ogrzewania.pl</a></p>' +
                '<a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 14px 28px; background: #dc2626; color: #ffffff; text-decoration: none; border-radius: 12px; font-weight: 800;">PRZEJDŹ DO ORYGINAŁU</a>' +
                '</div>';
        }
        return; 
    }

    var tz = -18; 

    function updateCalc() {
        var uEl = document.getElementById('u-val');
        var hEl = document.getElementById('height-val');
        var winWidthEl = document.getElementById('win-width-val');
        var wEl = document.getElementById('width-val');
        var tinEl = document.getElementById('tin-val');
        
        if(!uEl || !hEl || !winWidthEl || !wEl || !tinEl) return;

        var u = parseFloat(uEl.value);
        var h = parseFloat(hEl.value);
        var winW = parseFloat(winWidthEl.value);
        var s = parseFloat(wEl.value);
        var tin = parseFloat(tinEl.value);
        
        document.getElementById('v-u').innerText = u.toFixed(1);
        document.getElementById('v-height').innerText = h.toFixed(1);
        document.getElementById('v-win-width').innerText = winW.toFixed(1);
        document.getElementById('v-width').innerText = s.toFixed(1);
        document.getElementById('v-tin').innerText = tin;

        // Obliczenia fizyczne
        var deltaT = tin - tz;
        var baseLossM = u * deltaT * h; // Strata bazowa na 1 mb okna
        var totalLossM = baseLossM * 1.3; // Zapotrzebowanie z zapasem (na bryzę) na mb
        var reqPower = totalLossM / s; // Moc na m2 w strefie
        
        var totalWindowLoss = baseLossM * winW; // Całkowita strata samego okna (W)
        var zoneArea = winW * s; // Powierzchnia strefy brzegowej (m2)

        // Wypisywanie do UI statystyk ogólnych
        document.getElementById('resBaseLoss').innerText = baseLossM.toFixed(0) + ' W/mb';
        document.getElementById('resTotalWindowLoss').innerText = totalWindowLoss.toFixed(0) + ' W';
        document.getElementById('resZoneArea').innerText = zoneArea.toFixed(1) + ' m²';
        document.getElementById('resPower').innerText = reqPower.toFixed(0);

        // Ustalenie rozstawu rur i mnożnika rury na m2
        var spacing = "";
        var pipePerM2 = 0;
        var mBox = document.getElementById('mainBox');
        var rMsg = document.getElementById('risk-msg');
        var warnings = [];
        var boxColor = 'var(--success)';

        if (reqPower > 160) {
            spacing = "7.5 cm (lub konwektor)";
            pipePerM2 = 13.3;
            warnings.push('⚠️ Moc krytyczna! Sama podłogówka może nie wystarczyć (ryzyko gorącej posadzki). Rozważ grzejnik kanałowy lub rozstaw rur 7.5 cm.');
            boxColor = 'var(--danger)';
        } else if (reqPower > 130) {
            spacing = "10 cm";
            pipePerM2 = 10.0;
            boxColor = 'var(--warning)';
        } else if (reqPower > 110) {
            spacing = "12.5 cm";
            pipePerM2 = 8.0;
        } else if (reqPower > 80) {
            spacing = "15 cm";
            pipePerM2 = 6.7;
        } else {
            spacing = "20 cm";
            pipePerM2 = 5.0;
        }

        // Obliczenia materiałowe
        var totalPipe = zoneArea * pipePerM2;
        var loopCount = 1;

        if (totalPipe > 95) {
            loopCount = Math.ceil(totalPipe / 80); // Dzielimy na pętle po ok 80m dla strefy gęstej
            warnings.push('⚠️ Ze względu na dużą ilość rury (' + Math.round(totalPipe) + ' mb), strefę należy rozdzielić na ' + loopCount + ' niezależne obwody na rozdzielaczu, aby uniknąć dławienia przepływu.');
            if(boxColor === 'var(--success)') boxColor = 'var(--warning)';
        }

        if (s < 1.0) {
            warnings.push('ℹ️ Pas przyokienny jest dość wąski. Zwiększenie go do 1.2m odciąży posadzkę i pozwoli zwiększyć rozstaw rur.');
        }

        document.getElementById('resSpacing').innerText = spacing;
        document.getElementById('resPipeTotal').innerText = Math.round(totalPipe);
        document.getElementById('resLoops').innerText = loopCount;

        if (warnings.length > 0) {
            rMsg.innerHTML = warnings.join('<br><br>');
            rMsg.style.display = 'block';
        } else {
            rMsg.style.display = 'none';
        }
        mBox.style.borderBottomColor = boxColor;
        document.getElementById('resPower').style.color = (boxColor === 'var(--success)') ? 'var(--accent)' : boxColor;
    }

    var tzButtons = ['btn-tz-16', 'btn-tz-18', 'btn-tz-20', 'btn-tz-22'];
    for (var i = 0; i < tzButtons.length; i++) {
        (function(btnId) {
            var btn = document.getElementById(btnId);
            if(btn) {
                btn.addEventListener('click', function(e) {
                    tz = parseFloat(e.currentTarget.getAttribute('data-tz'));
                    for(var j = 0; j < tzButtons.length; j++) {
                        var el = document.getElementById(tzButtons[j]);
                        if(el) el.classList.remove('active');
                    }
                    e.currentTarget.classList.add('active');
                    updateCalc();
                });
            }
        })(tzButtons[i]);
    }

    var inputs = ['u-val', 'height-val', 'win-width-val', 'width-val', 'tin-val'];
    inputs.forEach(function(id) {
        var el = document.getElementById(id);
        if(el) el.addEventListener('input', updateCalc);
    });

    var btnEmail = document.getElementById('btn-email');
    if(btnEmail) {
        btnEmail.addEventListener('click', function() {
            var u = document.getElementById('v-u').innerText;
            var h = document.getElementById('v-height').innerText;
            var winW = document.getElementById('v-win-width').innerText;
            var s = document.getElementById('v-width').innerText;
            var tin = document.getElementById('v-tin').innerText;
            
            var power = document.getElementById('resPower').innerText;
            var spacing = document.getElementById('resSpacing').innerText;
            var totalLoss = document.getElementById('resTotalWindowLoss').innerText;
            var pipe = document.getElementById('resPipeTotal').innerText;
            var loops = document.getElementById('resLoops').innerText;
            
            var email = 'biuro@projekt-ogrzewania.pl';
            var subject = encodeURIComponent('Konsultacja - Strefa brzegowa podłogówki');
            
            var bodyText = 'Dzień dobry,\n\nSkorzystałem z Państwa kalkulatora strefy brzegowej. Oto parametry mojego przeszklenia:\n\n' +
                           '• Współczynnik U okna: ' + u + ' W/m²K\n' +
                           '• Wymiary okna: ' + winW + 'm szerokości x ' + h + 'm wysokości\n' +
                           '• Założony pas przyokienny: ' + s + ' m\n' +
                           '• Temp. zewn.: ' + tz + '°C, Temp. wewn.: ' + tin + '°C\n\n' +
                           'WYNIKI Z KALKULATORA:\n' +
                           '• Całkowita strata okna: ' + totalLoss + '\n' +
                           '• Wymagana moc w strefie: ' + power + ' W/m²\n' +
                           '• Sugerowany rozstaw rur: ' + spacing + '\n' +
                           '• Zapotrzebowanie na rurę: ' + pipe + ' mb (' + loops + ' pętli)\n\n' +
                           'Proszę o kontakt w sprawie wyceny profesjonalnego projektu instalacji.';
            
            var ampersand = String.fromCharCode(38);           
            window.location.href = 'mailto:' + email + '?subject=' + subject + ampersand + 'body=' + encodeURIComponent(bodyText);
        });
    }

    updateCalc();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-table-section {
    max-width: 1150px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
    padding: 0 20px;
}

.table-text-content {
    max-width: 800px;
    margin: 0 auto 30px auto;
    text-align: center;
}

.table-text-content h2 {
    font-size: 28px;
    font-weight: 800;
    margin: 0 0 15px 0;
    color: var(--primary);
}

.table-text-content p {
    color: #475569;
    font-size: 16px;
    line-height: 1.6;
    margin-bottom: 0;
}

/* KARTA WZORU */
.formula-card {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    padding: 30px;
    margin-bottom: 30px;
    display: flex;
    flex-direction: column;
    align-items: center;
}

.math-formula {
    background: #eff6ff;
    padding: 20px 40px;
    border-radius: 16px;
    font-size: 22px;
    font-weight: 700;
    color: var(--accent);
    display: inline-flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 25px;
    border: 2px dashed #bfdbfe;
}

.math-fraction {
    display: inline-flex;
    flex-direction: column;
    align-items: center;
    vertical-align: middle;
}

.math-numerator {
    border-bottom: 3px solid var(--accent);
    padding: 0 10px 5px 10px;
}

.math-denominator {
    padding: 5px 10px 0 10px;
}

.variables-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
    width: 100%;
    max-width: 800px;
}

.var-item {
    background: var(--bg-light);
    padding: 12px 15px;
    border-radius: 12px;
    font-size: 14px;
    color: #475569;
    display: flex;
    align-items: center;
}

.var-item strong {
    color: var(--primary);
    font-size: 16px;
    min-width: 40px;
    display: inline-block;
}

/* TABELA */
.table-container {
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    margin-bottom: 30px;
}

.premium-table {
    width: 100%;
    border-collapse: collapse;
    margin: 0;
}

.premium-table thead {
    background: var(--bg-light);
    border-bottom: 2px solid #e2e8f0;
}

.premium-table th {
    padding: 20px;
    text-align: left;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    letter-spacing: 0.5px;
}

.premium-table tbody tr {
    border-bottom: 1px solid #f1f5f9;
    transition: background-color 0.2s ease;
}

.premium-table tbody tr:last-child {
    border-bottom: none;
}

.premium-table tbody tr:hover {
    background-color: #f8fafc;
}

.premium-table td {
    padding: 20px;
    font-size: 15px;
    color: #475569;
    vertical-align: middle;
}

.premium-table td:nth-child(2),
.premium-table td:nth-child(3) {
    font-weight: 700;
    color: var(--primary);
}

.row-title-wrap {
    display: flex;
    align-items: center;
    gap: 12px;
}

.row-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: var(--bg-light);
    border-radius: 10px;
    font-size: 18px;
    border: 1px solid #e2e8f0;
    flex-shrink: 0;
    font-weight: normal;
}

.table-outro {
    background: #f8fafc;
    padding: 25px 30px;
    border-radius: 16px;
    border-left: 4px solid var(--success);
    color: #334155;
    font-size: 15px;
    line-height: 1.6;
}

.calc-example {
    background: #ffffff;
    padding: 15px;
    border-radius: 10px;
    font-family: monospace;
    font-size: 14px;
    color: var(--accent);
    margin-top: 15px;
    border: 1px solid #e2e8f0;
}

/* --- RESPONSYWNOŚĆ (MOBILE) --- */
@media (max-width: 768px) {
    .premium-table-section { padding: 0 15px; }
    .variables-grid { grid-template-columns: 1fr; }
    .math-formula { flex-direction: column; font-size: 18px; padding: 15px; text-align: center; }
    
    .table-container { background: transparent; box-shadow: none; border: none; }
    .premium-table thead { display: none; }
    .premium-table, .premium-table tbody, .premium-table tr, .premium-table td { display: block; width: 100%; }
    
    .premium-table tr {
        background: #ffffff;
        margin-bottom: 20px;
        border-radius: 16px;
        box-shadow: 0 5px 15px -5px rgba(0, 0, 0, 0.08);
        border: 1px solid #f1f5f9;
        overflow: hidden;
    }

    .premium-table td {
        padding: 15px 20px 15px 45%;
        text-align: right;
        position: relative;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        min-height: 50px;
        display: flex;
        justify-content: flex-end;
        align-items: center;
    }

    .premium-table td:first-child {
        padding: 20px;
        text-align: left;
        justify-content: flex-start;
        background: var(--bg-light);
        border-bottom: 2px solid #e2e8f0;
    }

    .premium-table td:last-child { border-bottom: none; }

    .premium-table td:not(:first-child)::before {
        content: attr(data-label);
        position: absolute;
        left: 20px;
        width: 40%;
        text-align: left;
        font-size: 11px;
        font-weight: 800;
        text-transform: uppercase;
        color: #94a3b8;
        display: flex;
        align-items: center;
        height: 100%;
        top: 0;
    }
}
</style>

<div class="premium-table-section" id="premium-table-power">
    
    <div class="table-text-content">
        <h2>Jak obliczyć wymaganą moc podłogi?</h2>
        <p>Skorzystaj z poniższego wzoru, aby dokładnie ustalić, ile ciepła musi wygenerować podłoga w strefie brzegowej. <br><br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Opracowanie autorskie: Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="formula-card">
        <div class="math-formula">
            <span>Q<sub>pas</sub> =</span>
            <div class="math-fraction">
                <span class="math-numerator">U · (T<sub>w</sub> - T<sub>z</sub>) · H · 1,3</span>
                <span class="math-denominator">S</span>
            </div>
        </div>

        <div class="variables-grid">
            <div class="var-item"><strong>U</strong> współczynnik przenikania okna (W/m²K)</div>
            <div class="var-item"><strong>T<sub>w</sub></strong> temperatura wewnętrzna (np. 22°C)</div>
            <div class="var-item"><strong>T<sub>z</sub></strong> temperatura zewn. (dla lokalizacji, np. -16°C)</div>
            <div class="var-item"><strong>H</strong> wysokość okna (w metrach)</div>
            <div class="var-item"><strong>1,3</strong> stały współczynnik spływu powietrza (bryzy)</div>
            <div class="var-item"><strong>S</strong> szerokość pasa przyokiennego (zazwyczaj 1,0–1,5 m)</div>
        </div>
    </div>

    <div class="table-container">
        <table class="premium-table">
            <thead>
                <tr>
                    <th>Rozstaw rur (cm)</th>
                    <th>Moc podłogi (W/m²) przy ΔT = 8°C</th>
                    <th>Moc podłogi (W/m²) przy ΔT = 10°C</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>7,5 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">180–200 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">220–250 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>10 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">140–160 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">170–200 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>12,5 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">110–130 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">140–160 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>15 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">90–110 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">110–130 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>20 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">65–80 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">80–100 W/m²</td>
                </tr>
                <tr>
                    <td data-label="Rozstaw rur (cm)">
                        <div class="row-title-wrap">
                            <div class="row-icon">📏</div>
                            <strong>25 cm</strong>
                        </div>
                    </td>
                    <td data-label="Moc (ΔT = 8°C)">50–65 W/m²</td>
                    <td data-label="Moc (ΔT = 10°C)">60–80 W/m²</td>
                </tr>
            </tbody>
        </table>
    </div>

    <div class="table-outro">
        <strong>Praktyczny przykład kalkulacji:</strong><br>
        Mamy okno o parametrach: <strong>U = 0,9</strong>, Temp. wewnętrzna <strong>(T<sub>w</sub>) = 22°C</strong>, Temp. zewnętrzna <strong>(T<sub>z</sub>) = -16°C</strong>, Wysokość okna <strong>(H) = 2,2 m</strong>, Szerokość pasa <strong>(S) = 1,2 m</strong>.
        
        <div class="calc-example">
            Q<sub>pas</sub> = (0,9 * 38 * 2,2 * 1,3) / 1,2<br><br>
            1. Różnica temp: 22 - (-16) = 38°C<br>
            2. Strata bazowa: 0,9 * 38 * 2,2 = 75,24 W/mb<br>
            3. Efekt bryzy (+30%): 75,24 * 1,3 = 97,8 W/mb<br>
            4. Podział na pas 1,2m: 97,8 / 1,2 = <strong>81,5 W/m²</strong>
        </div>
        
        <br><strong>Wniosek:</strong> Zaglądając do tabeli dla różnicy ΔT = 8°C, widzimy, że wynik 81,5 W/m² idealnie wpasowuje się w <strong>rozstaw rur 15 cm</strong> (który generuje 90–110 W/m²).
    </div>

</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)) {
        document.getElementById('premium-table-power').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: 20px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Treść chroniona prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten wzór i tabele są własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały wklejone na tę stronę bez zgody autora.</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>



<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.premium-chart-box {
    max-width: 900px;
    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.1);
    border: 1px solid #f1f5f9;
    overflow: hidden;
    color: var(--primary);
}

.chart-header {
    padding: 30px 40px 20px 40px;
    border-bottom: 1px solid #f1f5f9;
}

.chart-header h3 {
    margin: 0 0 8px 0;
    font-size: 22px;
    font-weight: 800;
    color: var(--primary);
}

.chart-header p {
    margin: 0;
    font-size: 14px;
    color: #64748b;
    font-weight: 500;
}

.chart-canvas-wrapper {
    padding: 30px 40px;
    position: relative;
    height: 420px;
    width: 100%;
}

.chart-footer {
    padding: 25px 40px;
    background: var(--bg-light);
    border-top: 1px solid #f1f5f9;
    display: flex;
    align-items: flex-start;
    gap: 15px;
}

.chart-icon {
    font-size: 24px;
    line-height: 1;
}

.chart-conclusion {
    margin: 0;
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
}

.chart-conclusion strong {
    color: var(--danger);
}

.chart-conclusion .text-accent { color: var(--accent); font-weight: 700; }
.chart-conclusion .text-success { color: var(--success); font-weight: 700; }

@media (max-width: 600px) {
    .chart-header, .chart-canvas-wrapper, .chart-footer {
        padding: 20px;
    }
    .chart-canvas-wrapper {
        height: 350px;
    }
}
</style>

<div class="premium-chart-box" id="chart-app-container">
    <div class="chart-header">
        <h3>Wpływ rozstawu rur na temperaturę podłogi przy oknie</h3>
        <p>Parametry: Temp. wody 35°C | Temp. wewn. 22°C | Pokrycie: Gres 1 cm <br><a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Analiza przygotowana przez Projekt-Ogrzewania.pl</a></p>
    </div>
    
    <div class="chart-canvas-wrapper">
        <canvas id="screedHeatingChart"></canvas>
    </div>
    
    <div class="chart-footer">
        <div class="chart-icon">💡</div>
        <p class="chart-conclusion">
            <strong>Wniosek z wykresu:</strong> Bez zagęszczenia (Krzywa A) strefa 0–50 cm od okna jest zbyt zimna (poniżej 22°C), co wywołuje uczucie przeciągu. <span class="text-accent">Zagęszczenie do 10 cm (Krzywa B)</span> podnosi temperaturę do komfortowych 26°C. Zastosowanie <span class="text-success">konwektora kanałowego (Krzywa C)</span> odcina chłód szybciej, pozwalając na utrzymanie niższej temperatury samej posadzki (23°C).
        </p>
    </div>
</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)) {
        document.getElementById('chart-app-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: 400px;">
                <span style="font-size: 48px; margin-bottom: 20px;">🔒</span>
                <h3 style="margin-top:0; font-size: 24px;">Wykres chroniony prawem autorskim</h3>
                <p style="font-size: 16px; max-width: 500px; color: #7f1d1d; line-height: 1.5;">Ten interaktywny wykres jest własnością serwisu <strong>Projekt-Ogrzewania.pl</strong> i został skopiowany na tę stronę 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>
        `;
        return; 
    }

    // JEŚLI DOMENA SIĘ ZGADZA - RYSUJEMY WYKRES
    const canvasEl = document.getElementById('screedHeatingChart');
    if(!canvasEl) return; 
    
    const ctx = canvasEl.getContext('2d');
    
    // Oś X: Odległość od okna w centymetrach
    const distances = [0, 10, 30, 50, 70, 100, 120, 150];
    
    // Krzywa A (Rozstaw 20 cm) - Zbyt zimno przy oknie
    const tempA = [20.2, 21.0, 22.1, 23.0, 23.6, 24.0, 24.0, 24.0];
    
    // Krzywa B (Rozstaw 10 cm, pas 1,2 m) - Komfort
    const tempB = [26.0, 25.8, 25.3, 24.8, 24.4, 24.0, 24.0, 24.0];
    
    // Krzywa C (Konwektor + rozstaw 10 cm) - Optymalnie z konwektorem
    const tempC = [23.0, 23.3, 23.6, 23.8, 24.0, 24.0, 24.0, 24.0];

    // Granica komfortu stała 22 stopnie
    const limitLine = [22, 22, 22, 22, 22, 22, 22, 22];

    new Chart(ctx, {
        type: 'line',
        data: {
            labels: distances.map(d => d + ' cm'),
            datasets: [
                {
                    label: 'Krzywa B (Rozstaw 10 cm w pasie 1,2m)',
                    data: tempB,
                    borderColor: '#2563eb', 
                    backgroundColor: '#2563eb',
                    borderWidth: 3,
                    fill: false,
                    tension: 0.4,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#2563eb',
                    pointBorderWidth: 2,
                    pointRadius: 5,
                    pointHoverRadius: 7
                },
                {
                    label: 'Krzywa C (Rozstaw 10 cm + Konwektor)',
                    data: tempC,
                    borderColor: '#16a34a', 
                    backgroundColor: '#16a34a',
                    borderWidth: 3,
                    fill: false,
                    tension: 0.4,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#16a34a',
                    pointBorderWidth: 2,
                    pointRadius: 5,
                    pointHoverRadius: 7
                },
                {
                    label: 'Krzywa A (Standard 20 cm - Brak strefy)',
                    data: tempA,
                    borderColor: '#ea580c', 
                    backgroundColor: '#ea580c',
                    borderWidth: 3,
                    fill: false,
                    tension: 0.4,
                    pointBackgroundColor: '#ffffff',
                    pointBorderColor: '#ea580c',
                    pointBorderWidth: 2,
                    pointRadius: 5,
                    pointHoverRadius: 7
                },
                {
                    label: 'Granica komfortu cieplnego (22°C)',
                    data: limitLine,
                    borderColor: '#94a3b8',
                    borderWidth: 2,
                    borderDash: [5, 5],
                    fill: false,
                    pointRadius: 0,
                    pointHoverRadius: 0
                }
            ]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            plugins: {
                legend: {
                    display: true,
                    position: 'top',
                    labels: {
                        font: { family: 'Inter', size: 12, weight: '600' },
                        color: '#475569',
                        usePointStyle: true,
                        padding: 15
                    }
                },
                tooltip: {
                    backgroundColor: '#0f172a',
                    titleFont: { family: 'Inter', size: 13, weight: 'bold' },
                    bodyFont: { family: 'Inter', size: 13 },
                    padding: 12,
                    displayColors: true,
                    callbacks: {
                        title: function(context) {
                            return 'Odległość od okna: ' + context[0].label;
                        },
                        label: function(context) {
                            let val = context.parsed.y;
                            return context.dataset.label.split(' (')[0] + ': ' + val.toFixed(1) + ' °C';
                        }
                    }
                }
            },
            scales: {
                x: {
                    grid: {
                        display: false
                    },
                    ticks: {
                        font: { family: 'Inter', size: 12, weight: '500' },
                        color: '#64748b'
                    },
                    title: {
                        display: true,
                        text: 'Odległość od szyby (cm)',
                        font: { family: 'Inter', size: 13, weight: 'bold' },
                        color: '#0f172a',
                        padding: {top: 10}
                    }
                },
                y: {
                    min: 19,
                    max: 27,
                    grid: {
                        color: '#f1f5f9',
                        drawBorder: false
                    },
                    ticks: {
                        stepSize: 1,
                        font: { family: 'Inter', size: 12 },
                        color: '#64748b',
                        callback: function(value) {
                            return value + ' °C';
                        }
                    },
                    title: {
                        display: true,
                        text: 'Temperatura powierzchni',
                        font: { family: 'Inter', size: 13, weight: 'bold' },
                        color: '#0f172a',
                        padding: {bottom: 10}
                    }
                }
            }
        }
    });
});
</script>



<h2 class="wp-block-heading">Projekt ogrzewania podłogowego w kontekście dużych przeszkleń.</h2>



<p class="wp-block-paragraph"><em><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" type="link" id="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Projekt ogrzewania podłogowego</a> do domu z dużymi przeszkleniami</em> nie może być traktowany jak zwykła instalacja. Wymaga <strong>holistycznego spojrzenia</strong> od izolacji fundamentów, przez dobór okien, aż po sterowanie. W mojej praktyce najczęstszym błędem jest kopiowanie standardowego rozstawu rur (15–20 cm) bez uwzględnienia strefy brzegowej. Prowadzi to do wiecznych reklamacji: <em>„przy oknach jest zimno, a w środku duszno”</em>. Prawidłowy projekt to taki, w którym:</p>



<ul class="wp-block-list">
<li>Wykonuje się&nbsp;<strong>obliczenia strat liniowych</strong>&nbsp;dla każdego przeszklenia z osobna.</li>



<li>Projektuje się&nbsp;<strong>minimum dwa obwody na pomieszczenie</strong>&nbsp;– główny i przyokienny.</li>



<li>Stosuje się&nbsp;<strong>zmienne rozstawy</strong>&nbsp;– gęstsze przy oknach, rzadsze w głębi.</li>



<li>Uwzględnia się&nbsp;<strong>rodzaj podłogi</strong>&nbsp;– przy drewnie lub dywanie konieczny konwektor.</li>



<li>Instaluje się&nbsp;<strong>czujniki temperatury</strong>&nbsp;w posadzce przy oknie lub na szybie.</li>
</ul>



<p class="wp-block-paragraph">Przykład zrealizowanego projektu: dom pasywny w okolicy Poznania, salon z oknami 6 × 2,5 m (U=0,7). Obliczenia wykazały stratę 65 W/mb. Zastosowano pas o szerokości 1,2 m z rurą co 12,5 cm (co dało 125 W/m² w pasie, czyli 150 W/mb – zapas). Dodatkowo izolacja XPS 15 cm pod pasem. Efekt: przy -18°C na zewnątrz temperatura podłogi przy szybie wynosiła 24°C, a powietrza 21,5°C – brak przeciągu. Inwestor zadowolony.</p>



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

.premium-questions {
    max-width: 1000px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    color: var(--primary);
}

.qa-header {
    text-align: center;
    margin-bottom: 40px;
}

.qa-header h2 {
    font-size: 32px;
    font-weight: 900;
    color: var(--primary);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.qa-header p {
    font-size: 16px;
    line-height: 1.6;
    color: #475569;
    max-width: 700px;
    margin: 0 auto;
}

.qa-list {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.qa-card {
    background: #ffffff;
    border: 1px solid var(--border-color);
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    transition: transform 0.2s, box-shadow 0.2s;
}

.qa-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1);
    border-color: #cbd5e1;
}

.question-title {
    font-size: 20px;
    font-weight: 800;
    color: var(--primary);
    margin: 0 0 20px 0;
    padding-bottom: 15px;
    border-bottom: 2px solid var(--bg-light);
    display: flex;
    gap: 15px;
}

.q-number {
    background: var(--primary);
    color: white;
    width: 32px;
    height: 32px;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    flex-shrink: 0;
}

.answers-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.answer-box {
    padding: 20px;
    border-radius: 12px;
    border-left: 4px solid;
}

.answer-bad {
    background: #fef2f2;
    border-color: var(--danger);
}

.answer-good {
    background: #f0fdf4;
    border-color: var(--success);
}

.answer-label {
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}

.answer-bad .answer-label { color: var(--danger); }
.answer-good .answer-label { color: var(--success); }

.answer-text {
    font-size: 15px;
    line-height: 1.6;
    color: #334155;
    margin: 0;
    font-style: italic;
}

.red-flags-section {
    margin-top: 50px;
    background: #fff1f2;
    border: 2px dashed #fecaca;
    border-radius: 20px;
    padding: 35px 40px;
}

.red-flags-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 20px;
}

.red-flags-header h3 {
    margin: 0;
    font-size: 24px;
    font-weight: 900;
    color: #9f1239;
}

.flags-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.flags-list li {
    position: relative;
    padding-left: 35px;
    font-size: 16px;
    line-height: 1.5;
    color: #7f1d1d;
    font-weight: 600;
}

.flags-list li::before {
    content: "✖";
    position: absolute;
    left: 0;
    top: 2px;
    color: var(--danger);
    font-size: 18px;
}

@media (max-width: 768px) {
    .answers-grid { grid-template-columns: 1fr; gap: 15px; }
    .qa-card { padding: 20px; }
    .question-title { font-size: 18px; line-height: 1.4; }
    .red-flags-section { padding: 25px 20px; }
    .red-flags-header h3 { font-size: 20px; }
}
</style>

<div class="premium-questions" id="qa-app-installer">
    <script type="application/ld+json">
    {
      "@context": "https://schema.org",
      "@type": "FAQPage",
      "mainEntity": [{
        "@type": "Question",
        "name": "Jak układać rury przy dużych oknach tarasowych?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Należy wyznaczyć tzw. strefę brzegową (zwykle pas 1-1,5 m od okna) i zagęścić tam rozstaw rur do 10, a nawet 7,5 cm, aby zrekompensować spływ zimnego powietrza od szyby."
        }
      }, {
        "@type": "Question",
        "name": "Czy strefa przy oknie może być na jednym obwodzie z resztą salonu?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Przy dużych oknach strefa brzegowa musi być na oddzielnym obwodzie. Dzięki temu możemy podać tam wyższy przepływ lub niezależnie nią sterować, unikając przegrzewania środka salonu."
        }
      }, {
        "@type": "Question",
        "name": "Co z izolacją pod wylewką przy samym oknie?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Strefa przy progu to mostek termiczny. Należy zastosować twardszy styrodur (XPS) i zwiększyć jego grubość (np. do 15-20 cm), aby zminimalizować ucieczkę ciepła na zewnątrz."
        }
      }, {
        "@type": "Question",
        "name": "Jakie wykończenie podłogi zaplanować przy oknie panoramicznym?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Przy samym oknie najlepiej zastosować materiał o bardzo niskim oporze cieplnym – gres lub kamień. Drewno mocno blokuje ciepło, co przy zagęszczonych rurach może grozić uszkodzeniem."
        }
      }, {
        "@type": "Question",
        "name": "Jak sterować temperaturą przy tak dużych przeszkleniach?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Sam termostat to za mało, bo strefa przy szybie wychładza się szybciej. Najlepiej zastosować czujnik przypowierzchniowy (podłogowy lub na szybie), który natychmiast uruchomi obwód brzegowy przy spadku temperatury szyby."
        }
      }]
    }
    </script>
    <div class="qa-header">
        <h2>🏗️ 5 pytań weryfikujących wykonawcę podłogówki przy oknach</h2>
        <p>Duże przeszklenia nie wybaczają błędów instalacyjnych. Oto lista pytań, które pomogą ocenić, czy Twój instalator zna fizykę budowli i wie, co robi. <a href="https://projekt-ogrzewania.pl/" style="color: var(--accent); font-weight: 700; text-decoration: none;">Pytania rekrutacyjne przygotowane przez inżynierów Projekt-Ogrzewania.pl</a>.</p>
    </div>

    <div class="qa-list">
        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">1</span> „Jak układać rury przy dużych oknach tarasowych?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Panie, dajemy wszędzie standardowo co 15 cm i będzie dobrze, podłoga to podłoga”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Należy wyznaczyć tzw. strefę brzegową (pas 1-1,5 m od okna) i zagęścić tam rozstaw rur do 10, a nawet 7,5 cm, aby zrekompensować spływ zimnego powietrza od szyby”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">2</span> „Czy strefa przy oknie może być na jednym obwodzie z resztą salonu?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Jasne, nie ma sensu marnować wyjść na rozdzielaczu, podepniemy wszystko w jedną długą pętlę”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Przy dużych oknach strefa brzegowa powinna być na oddzielnym obwodzie. Dzięki temu możemy podać tam wyższy przepływ lub niezależnie nią sterować, bez przegrzewania środka salonu”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">3</span> „Co z izolacją pod wylewką przy samym oknie?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Dajemy standardowy styropian EPS 10 cm, tak jak na całym parterze”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Strefa przy progu okiennym to mostek termiczny. Należy zastosować twardszy XPS i zwiększyć jego grubość (np. do 15-20 cm), aby uciąć ucieczkę ciepła na zewnątrz”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">4</span> „Jakie wykończenie podłogi zaplanować w strefie brzegowej?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Dębowa deska będzie wyglądać pięknie i na pewno będzie przy niej ciepło w stopy”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Przy oknie najlepiej zastosować materiał o bardzo niskim oporze cieplnym – gres lub kamień. Drewno izoluje, co przy zagęszczonych rurach strefy brzegowej może grozić spękaniami”.</p>
                </div>
            </div>
        </div>

        <div class="qa-card">
            <h3 class="question-title"><span class="q-number">5</span> „Jak sterować temperaturą przy tak dużych przeszkleniach?”</h3>
            <div class="answers-grid">
                <div class="answer-box answer-bad">
                    <div class="answer-label">❌ Zła odpowiedź</div>
                    <p class="answer-text">„Zwykły termostat ścienny umieszczony w korytarzu lub w głębi salonu w zupełności wystarczy”.</p>
                </div>
                <div class="answer-box answer-good">
                    <div class="answer-label">✅ Dobra odpowiedź</div>
                    <p class="answer-text">„Sam termostat to za mało, bo strefa przy szybie wychładza się błyskawicznie. Najlepiej zastosować czujnik przypowierzchniowy (podłogowy lub na szybie), by szybciej uruchamiać obwód brzegowy”.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="red-flags-section">
        <div class="red-flags-header">
            <span style="font-size: 32px;">🚩</span>
            <h3>Czerwone flagi (Uciekaj, jeśli to usłyszysz!)</h3>
        </div>
        <ul class="flags-list">
            <li>„Ogrzewanie podłogowe wystarczy w 100% nawet przy oknie do sufitu i podłodze z deski dębowej.” (W takich sytuacjach konieczny jest konwektor kanałowy).</li>
            <li>„Nie trzeba liczyć strat dla samego okna, zrobimy pętle na oko, średnią z całego salonu.”</li>
            <li>„Projektant tylko wymyśla obwody brzegowe, a my puścimy tu po prostu jedną, wielką wężownicę na cały dom.”</li>
        </ul>
    </div>
</div>

<script>
/* DOMAIN PROTECTION MODULE */
!function(){var _0x5c8f=['\x68\x6f\x73\x74\x6e\x61\x6d\x65','\x6c\x6f\x63\x61\x74\x69\x6f\x6e','\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x77\x77\x77\x2e\x70\x72\x6f\x6a\x65\x6b\x74\x2d\x6f\x67\x72\x7a\x65\x77\x61\x6e\x69\x61\x2e\x70\x6c','\x6c\x6f\x63\x61\x6c\x68\x6f\x73\x74','\x31\x32\x37\x2e\x30\x2e\x30\x2e\x31','','\x69\x6e\x63\x6c\x75\x64\x65\x73','\x71\x61\x2d\x61\x70\x70\x2d\x69\x6e\x73\x74\x61\x6c\x6c\x65\x72','\x69\x6e\x6e\x65\x72\x48\x54\x4d\x4c','\x67\x65\x74\x45\x6c\x65\x6d\x65\x6e\x74\x42\x79\x49\x64','\x44\x4f\x4d\x43\x6f\x6e\x74\x65\x6e\x74\x4c\x6f\x61\x64\x65\x64','\x61\x64\x64\x45\x76\x65\x6e\x74\x4c\x69\x73\x74\x65\x6e\x65\x72'];document[_0x5c8f[12]](_0x5c8f[11],function(){var _0x2b3c=window[_0x5c8f[1]][_0x5c8f[0]];var _0x4d1e=[_0x5c8f[2],_0x5c8f[3],_0x5c8f[4],_0x5c8f[5],_0x5c8f[6]];if(!_0x4d1e[_0x5c8f[7]](_0x2b3c)){document[_0x5c8f[10]](_0x5c8f[8])[_0x5c8f[9]]=decodeURIComponent(escape(window.atob('PGRpdiBzdHlsZT0icGFkZGluZzogNjBweCAyMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGJhY2tncm91bmQ6ICNmZWUyZTI7IGNvbG9yOiAjZGMyNjI2OyBkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWluLWhlaWdodDogNDAwcHg7Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOiA0OHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyI+8J+TkTwvc3Bhbj48aDMgc3R5bGU9Im1hcmdpbi10b3A6MDsgZm9udC1zaXplOiAyNHB4OyI+VHJlxZvEhyBjaHJvbmlvbmEgcHJhd2VtIGF1dG9yc2tpbTwvaDM+PHAgc3R5bGU9ImZvbnQtc2l6ZTogMTZweDsgbWF4LXdpZHRoOiA1MDBweDsgY29sb3I6ICM3ZjFkMWQ7IGxpbmUtaGVpZ2h0OiAxLjU7Ij5UbyB6ZXN0YXdpZW5pZSBqZXN0IHfFgmFzbm/Fm2NpxIUgc2Vyd2lzdSA8c3Ryb25nPlByb2pla3QtT2dyemV3YW5pYS5wbDwvc3Ryb25nPiBpIHpvc3RhxYJvIHdrbGVqb25lIG5hIHTEmSBzdHJvbsSZIGJleiB6Z29keSBhdXRvcmEuPC9wPjxhIGhyZWY9Imh0dHBzOi8vcHJvamVrdC1vZ3J6ZXdhbmlhLnBsLyIgc3R5bGU9Im1hcmdpbi10b3A6IDI1cHg7IHBhZGRpbmc6IDE0cHggMjhweDsgYmFja2dyb3VuZDogI2RjMjYyNjsgY29sb3I6IHdoaXRlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1yYWRpdXM6IDEycHg7IGZvbnQtd2VpZ2h0OiA4MDA7IHRyYW5zaXRpb246IDAuM3M7Ij5aT0JBQ1ogT1JZR0lOQUxOWSBBUlRZS1XFgTwvYT48L2Rpdj4=')));}})}();
</script>



<h2 class="wp-block-heading"><strong>Podsumowanie praktycznych zasad dla projektanta i inwestora</strong>.</h2>



<ol start="1" class="wp-block-list">
<li><strong>Zawsze licz straty przez okno</strong>&nbsp;– nie ufaj domniemaniom. Wzór w kalkulatorze powyżej jest prosty i wystarczający.</li>



<li><strong>Przyjmij szerokość strefy przyokiennej</strong>&nbsp;minimum 1,0 m, optymalnie 1,2–1,5 m. Dla okien od podłogi – 1,5 m.</li>



<li><strong>Rozstaw rur w tej strefie</strong>&nbsp;wybierz z tabeli – najczęściej 10–15 cm. Nie bój się 7,5 cm przy bardzo dużych wysokościach (powyżej 2,8 m).</li>



<li><strong>Oddzielny obwód</strong>&nbsp;dla każdej strefy przyokiennej dłuższej niż 4 m. Dla krótszych można połączyć, ale z zachowaniem zagęszczenia.</li>



<li><strong>Izolacja</strong>&nbsp;– w pasie przyokiennym zwiększ grubość i użyj XPS. Nie oszczędzaj na detalu za 200 zł, bo stracisz komfort.</li>



<li><strong>Pokrycie</strong>&nbsp;– w pasie przyokiennym wyłącznie płytki lub kamień. Drewno i dywan to proszenie się o kłopoty.</li>



<li><strong>Sterowanie</strong>&nbsp;– czujnik podłogowy w strefie przyokiennej to standard. W domach premium – czujnik szyby.</li>
</ol>



<p class="wp-block-paragraph">Pamiętaj, że&nbsp;<em>projekt ogrzewania podłogowego do domu z dużymi przeszkleniami</em>&nbsp;to nie tylko rysunek rozstawu rur. To także decyzje o izolacji, oknach, wentylacji (rekuperacja pomaga w równomiernym rozprowadzeniu ciepła). Traktuj strefę przy oknach jak&nbsp;<strong>specjalną krainę termiczną</strong>&nbsp;– rządzącą się własnymi prawami. Zastosuj opisane wyżej techniki, a nawet przy mrozie -20°C będziesz chodził boso wzdłuż panoramicznych szyb. I o to właśnie chodzi.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-do-domu-z-duzymi-przeszkleniami-jak-poradzic-sobie-ze-strefa-przy-oknach/">Projekt ogrzewania podłogowego do domu z dużymi przeszkleniami  jak poradzić sobie ze strefą przy oknach?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Wodne ogrzewanie podłogowe a meble – jak połączyć komfort i aranżację?</title>
		<link>https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Thu, 27 Mar 2025 14:43:07 +0000</pubDate>
				<category><![CDATA[Aranżacja wnętrz]]></category>
		<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Komfort w domu]]></category>
		<category><![CDATA[Meble]]></category>
		<category><![CDATA[Nowoczesne technologie grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Porady techniczne]]></category>
		<category><![CDATA[Wyposażenie domu]]></category>
		<category><![CDATA[aranżacja wnętrz]]></category>
		<category><![CDATA[drewniane meble]]></category>
		<category><![CDATA[efektywność grzewcza]]></category>
		<category><![CDATA[komfort cieplny]]></category>
		<category><![CDATA[meble]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[podłogówka]]></category>
		<category><![CDATA[projekt instalacji]]></category>
		<category><![CDATA[urządzanie domu]]></category>
		<category><![CDATA[wodne ogrzewanie]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2470</guid>

					<description><![CDATA[<p>Planujesz urządzić dom i zastanawiasz się, jak połączyć styl z funkcjonalnością? Ten artykuł rozwieje Twoje wątpliwości dotyczące aranżacji wnętrz z systemem grzewczym. Dowiedz się, jak wodne ogrzewanie podłogowe a meble mogą współgrać, by zapewnić komfort i efektywność. Podpowiadamy, jakie meble wybrać, jak je ustawić i czy ciepło z podłogi im szkodzi. Poznaj praktyczne wskazówki i przykłady, które ułatwią Ci stworzenie przytulnego, ciepłego domu!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/">Wodne ogrzewanie podłogowe a meble – jak połączyć komfort i aranżację?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Wodne ogrzewanie podłogowe a meble to temat, który nurtuje wiele osób urządzających swoje domy. Ten nowoczesny system grzewczy zdobywa popularność dzięki równomiernemu rozprowadzaniu ciepła i energooszczędności, ale jak wpływa na meble i jak je ustawić, by w pełni wykorzystać jego zalety? W tym artykule wyjaśnimy, jak wodne ogrzewanie podłogowe współgra z wyposażeniem wnętrz, podpowiemy, jak zaplanować aranżację i sprawdzimy, czy meble mogą ucierpieć pod wpływem ciepła. Zapraszamy do lektury!</p>



<h2 class="wp-block-heading">Jak działa wodne ogrzewanie podłogowe?</h2>



<h3 class="wp-block-heading">Zasada działania systemu.</h3>



<p class="wp-block-paragraph">Wodne <a href="https://projekt-ogrzewania.pl">ogrzewanie podłogowe</a> polega na przepływie ciepłej wody przez rury zatopione w podłodze, które oddają energię cieplną do pomieszczenia. Źródłem ciepła może być kocioł gazowy, pompa ciepła czy instalacja solarna. Temperatura podłogi zazwyczaj wynosi <strong>25-30°C</strong>, co zapewnia przyjemne ciepło pod stopami i równomierne ogrzewanie całego wnętrza. W odróżnieniu od grzejników, które podgrzewają punktowo, podłogówka działa na zasadzie promieniowania, oferując wyjątkowy komfort.</p>



<h3 class="wp-block-heading">Dlaczego warto je wybrać?</h3>



<p class="wp-block-paragraph">System ten ma wiele zalet: brak widocznych grzejników daje więcej swobody w aranżacji, a niska temperatura pracy przekłada się na oszczędności. Podłogówka zapewnia też lepszy rozkład temperatury w pomieszczeniu, co czyni ją popularnym wyborem w nowoczesnych domach. Ale jak meble wpływają na jej działanie?</p>



<h2 class="wp-block-heading">Czy meble przeszkadzają w działaniu ogrzewania podłogowego?</h2>



<h3 class="wp-block-heading">Jak meble blokują ciepło?</h3>



<p class="wp-block-paragraph">Ciężkie meble, takie jak szafy czy sofy bez nóżek, mogą ograniczać przepływ ciepła z podłogi do pomieszczenia. Działają jak <em>izolacja termiczna</em>, zatrzymując energię pod sobą i tworząc tzw. zimne wyspy. Na przykład w kuchni często unika się układania rur pod szafkami stojącymi, bo ciepło nie przedostanie się przez ich masywną konstrukcję. O tym, jak rozplanować instalację, piszemy w artykule <a href="https://projekt-ogrzewania.pl/jak-zaplanowac-rozmieszczenie-petli-grzewczych-w-ogrzewaniu-podlogowym/" target="_blank" rel="noreferrer noopener">„Jak zaplanować rozmieszczenie pętli grzewczych w ogrzewaniu podłogowym”</a>.</p>



<h3 class="wp-block-heading">Praktyczne przykłady z życia.</h3>



<p class="wp-block-paragraph">Wyobraźmy sobie salon z dużą sofą ustawioną centralnie na podłodze z ogrzewaniem. Jeśli mebel przylega bezpośrednio do powierzchni, ciepło nie rozchodzi się równomiernie, a w pokoju mogą pojawić się chłodniejsze strefy. W sypialni łóżko bez nóżek może sprawić, że obszar pod materacem pozostanie zimny, co obniży komfort snu.</p>



<h3 class="wp-block-heading">Czy można umieszczać meble typu kanapa czy łóżko bezpośrednio przylegające do podłogi?</h3>



<p class="wp-block-paragraph">A co z meblami typu kanapa czy łóżko, które nie mają nóżek i przylegają bezpośrednio do podłogi? Teoretycznie można je ustawić na podłodze z ogrzewaniem, ale nie jest to najlepsze rozwiązanie. Takie meble blokują ciepło, co obniża efektywność systemu – pod nimi podłoga się nagrzewa, ale energia nie dociera do pomieszczenia. W efekcie możesz odczuwać chłód w innych częściach pokoju, a energia jest marnowana. Lepiej unikać takich aranżacji lub ograniczyć je do minimum, np. stawiając łóżko w miejscu, gdzie rury nie biegną – co wymaga dobrego projektu instalacji.</p>



<h2 class="wp-block-heading">Czy ogrzewanie podłogowe szkodzi meblom?</h2>



<h3 class="wp-block-heading">Bezpieczna temperatura dla materiałów.</h3>



<p class="wp-block-paragraph">Wiele osób martwi się, że ciepło z podłogi uszkodzi meble – np. spowoduje pękanie drewna czy odbarwienie tapicerki. Na szczęście przy wodnym ogrzewaniu podłogowym ryzyko jest minimalne. Temperatura <strong>25-30°C</strong> jest bezpieczna dla większości materiałów, takich jak drewno, metal czy tkaniny. Dla porównania, grzejniki mogą osiągać 60°C, co faktycznie mogłoby wpłynąć na delikatne powierzchnie.</p>



<h3 class="wp-block-heading">Co z drewnianymi meblami?</h3>



<p class="wp-block-paragraph">Drewno, choć wrażliwe na zmiany wilgotności i temperatury, dobrze znosi warunki przy podłogówce, jeśli jest zabezpieczone lakierem czy olejem. Meble z elementami plastikowymi lub klejonymi mogą być bardziej podatne na ciepło, ale w praktyce takie problemy są rzadkie. Więcej o tym przeczytasz w artykule <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/" target="_blank" rel="noreferrer noopener">„Podłogi drewniane vs panele laminowane – co wybrać przy ogrzewaniu podłogowym?”</a>.</p>



<h3 class="wp-block-heading">Przykład: sofa w salonie.</h3>



<p class="wp-block-paragraph">Załóżmy, że masz drewnianą sofę na nóżkach w salonie. Ciepło z podłogi nie uszkodzi jej konstrukcji, a przestrzeń pod spodem pozwoli na cyrkulację powietrza. W przeciwieństwie do elektrycznego ogrzewania, gdzie przegrzanie mogłoby być problemem, wodny system jest łagodniejszy i stabilny.</p>



<h2 class="wp-block-heading">Jak zaplanować aranżację z wodnym ogrzewaniem podłogowym?</h2>



<h3 class="wp-block-heading">Klucz do sukcesu: projekt instalacji.</h3>



<p class="wp-block-paragraph">Aby wodne ogrzewanie podłogowe i meble współgrały idealnie, zacznij od profesjonalnego projektu. Na naszych stronach oferujemy projekty dostosowane do powierzchni domu – np. do <a href="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-150-m2/">150 m²</a>. Uwzględniają one rozmieszczenie mebli, co pozwala uniknąć rur w miejscach, gdzie staną ciężkie szafy czy kuchenne blaty, oszczędzając energię i zapewniając komfort.</p>



<h3 class="wp-block-heading">Praktyczne wskazówki aranżacyjne.</h3>



<p class="wp-block-paragraph">Oto kilka porad, jak urządzić wnętrze z podłogówką:</p>



<ol class="wp-block-list">
<li><strong>Wybieraj meble na nóżkach</strong> – sofa, stół czy łóżko z prześwitem (np. <strong>10 cm</strong>) to gwarancja lepszej cyrkulacji ciepła.</li>



<li><strong>Planuj stałe elementy</strong> – w kuchni czy łazience (np. pod wanną) pomiń rury tam, gdzie ciepło nie jest potrzebne.</li>



<li><strong>Unikaj grubych dywanów</strong> – działają jak izolator, zmniejszając efektywność systemu.</li>



<li><strong>Rozważ elastyczność</strong> – jeśli lubisz zmiany aranżacji, rozłóż rury równomiernie na całej podłodze.</li>
</ol>



<h3 class="wp-block-heading">Jak ustawić meble przy podłogówce?</h3>



<p class="wp-block-paragraph">Często pytacie: „Jak ustawić meble przy podłogówce, by nie tracić ciepła?”. Kluczowe jest zachowanie równowagi między estetyką a funkcjonalnością. Na przykład w salonie warto ustawić sofę i fotele tak, by nie zakrywały większości powierzchni grzewczej. Jeśli masz duży stół w jadalni, rozważ przesunięcie go bliżej ściany, zostawiając wolną przestrzeń w centrum. Taki układ zapewnia efektywność i pozwala cieszyć się ciepłem w całym pomieszczeniu.</p>



<h2 class="wp-block-heading">Projekt ogrzewania podłogowego w kontekście mebli.</h2>



<p class="wp-block-paragraph">Planowanie wodnego ogrzewania podłogowego w kontekście mebli to nasza specjalność. Przygotowujemy projekty, które uwzględniają nie tylko parametry techniczne budynku, ale też Twoje potrzeby – w tym rozmieszczenie wyposażenia. Przy zakupie materiałów <a href="https://projekt-ogrzewania.pl/sklep/">w naszym sklepie</a>, oferujemy projekt gratis – to świetna okazja, by zadbać o harmonię między ogrzewaniem a aranżacją.</p>



<h2 class="wp-block-heading">Jakie meble najlepiej pasują do podłogówki?</h2>



<h3 class="wp-block-heading">Meble na nóżkach – idealny wybór.</h3>



<p class="wp-block-paragraph">Meble na wysokich nóżkach to strzał w dziesiątkę. Lekka sofa z drewnianymi nogami w salonie nie tylko wygląda nowocześnie, ale też nie blokuje ciepła. W sypialni łóżko z prześwitem pozwoli podłodze oddawać ciepło na całą powierzchnię – w przeciwieństwie do modeli przylegających do podłogi.</p>



<h3 class="wp-block-heading">Ogrzewanie podłogowe w sypialni a łóżko.</h3>



<p class="wp-block-paragraph">W sypialni często pojawia się pytanie o ogrzewanie podłogowe w kontekście łóżka. Jeśli wybierzesz model na nóżkach, ciepło rozprowadzi się równomiernie, a Ty unikniesz uczucia chłodu przy wstawaniu rano. Jeśli jednak wolisz łóżko bez prześwitu, warto rozważyć pominięcie rur pod nim – to rozwiązanie sprawdzi się zwłaszcza w większych pokojach, gdzie reszta podłogi wystarczy do ogrzania przestrzeni.</p>



<h3 class="wp-block-heading">Materiały i wykończenie.</h3>



<p class="wp-block-paragraph">Drewniane meble z naturalnym wykończeniem dobrze współgrają z podłogówką, podobnie jak metalowe konstrukcje. Unikaj jednak mebli z masywnymi podstawami, które zatrzymują ciepło.</p>



<h3 class="wp-block-heading">Przykład: jadalnia z podłogówką.</h3>



<p class="wp-block-paragraph">W jadalni z wodnym ogrzewaniem podłogowym stół na smukłych nogach i krzesła z prześwitem to świetny wybór. Ciepło rozchodzi się równomiernie, a Ty cieszysz się przytulną atmosferą podczas rodzinnych posiłków.</p>



<h2 class="wp-block-heading">Tabela: Kluczowe wskazówki dla aranżacji z podłogówką</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th><strong>Element</strong></th><th><strong>Wskazówka</strong></th><th><strong>Korzyść</strong></th></tr></thead><tbody><tr><td>Meble na nóżkach</td><td>Wybierz sofy i łóżka z prześwitem min. 10 cm</td><td>Lepsza cyrkulacja ciepła</td></tr><tr><td>Stałe elementy</td><td>Pomiń rury pod szafkami czy wanną</td><td>Oszczędność energii</td></tr><tr><td>Dywany</td><td>Unikaj grubych modeli, stawiaj na cienkie</td><td>Wyższa efektywność grzewcza</td></tr><tr><td>Rozmieszczenie</td><td>Ustaw meble z myślą o wolnej przestrzeni centralnej</td><td>Równomierne ogrzewanie pomieszczenia</td></tr><tr><td>Projekt instalacji</td><td>Zaplanuj rury z uwzględnieniem aranżacji</td><td>Maksymalny komfort i oszczędności</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">FAQ – Pytania i odpowiedzi.</h2>



<div class="schema-faq wp-block-yoast-faq-block"><div class="schema-faq-section" id="faq-question-1743084753808"><strong class="schema-faq-question">Czy wodne ogrzewanie podłogowe może uszkodzić drewniane meble?</strong> <p class="schema-faq-answer">Nie, temperatura podłogi (25-30°C) jest bezpieczna dla drewna, zwłaszcza jeśli jest zabezpieczone lakierem czy olejem. Problemy mogą wystąpić tylko przy bardzo wrażliwych materiałach, ale to rzadkość.</p> </div> <div class="schema-faq-section" id="faq-question-1743084811403"><strong class="schema-faq-question">Czy mogę postawić ciężką szafę na podłodze z ogrzewaniem?</strong> <p class="schema-faq-answer">Możesz, ale nie jest to zalecane. Ciężkie meble blokują ciepło, co obniża efektywność systemu. Lepiej zaplanować rury tak, by omijały takie miejsca.</p> </div> <div class="schema-faq-section" id="faq-question-1743084827107"><strong class="schema-faq-question">Jakie meble najlepiej sprawdzają się przy podłogówce?</strong> <p class="schema-faq-answer">Najlepiej meble na nóżkach (min. 10 cm), np. sofy, łóżka czy stoły. Umożliwiają cyrkulację ciepła i nie zakłócają działania ogrzewania.</p> </div> <div class="schema-faq-section" id="faq-question-1743084837107"><strong class="schema-faq-question">Czy grube dywany to problem przy wodnym ogrzewaniu podłogowym?</strong> <p class="schema-faq-answer">Tak, grube dywany działają jak izolator, zmniejszając przepływ ciepła. Jeśli chcesz je mieć, wybierz cienkie modele lub ogranicz ich użycie.</p> </div> <div class="schema-faq-section" id="faq-question-1743084857280"><strong class="schema-faq-question">Czy warto robić projekt ogrzewania podłogowego z myślą o meblach?</strong> <p class="schema-faq-answer">Zdecydowanie tak! Profesjonalny projekt uwzględnia rozmieszczenie mebli, co pozwala uniknąć marnowania energii i zapewnia równomierne ogrzewanie pomieszczeń.</p> </div> </div>



<h2 class="wp-block-heading">Podsumowanie – harmonia ciepła i stylu.</h2>



<p class="wp-block-paragraph">Wodne ogrzewanie podłogowe a meble to duet, który może działać w harmonii, jeśli dobrze to zaplanujesz. Wybór mebli na nóżkach i przemyślany projekt instalacji, który uwzględni ich rozmieszczenie, to klucz do sukcesu. Dzięki temu zyskasz komfort cieplny i swobodę w aranżacji. Jeśli szukasz inspiracji lub wsparcia, odwiedź naszą stronę – znajdziesz tam projekty i materiały, które pomogą Ci stworzyć idealny system grzewczy.</p>



<figure class="wp-block-embed aligncenter is-type-wp-embed is-provider-projekt-ogrzewania wp-block-embed-projekt-ogrzewania"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="6Cqyajh1mX"><a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/">Projekt instalacji ogrzewania podłogowego &#8211; podłogówki</a></blockquote><iframe class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8222;Projekt instalacji ogrzewania podłogowego &#8211; podłogówki&#8221; &#8212; Projekt Ogrzewania" src="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/embed/#?secret=Qt2ZfwrZcH#?secret=6Cqyajh1mX" data-secret="6Cqyajh1mX" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/wodne-ogrzewanie-podlogowe-a-meble-jak-polaczyc-komfort-i-aranzacje/">Wodne ogrzewanie podłogowe a meble – jak połączyć komfort i aranżację?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Próba szczelności ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 07 Mar 2025 10:00:25 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Dokumentacja budowlana]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Instalacje hydrauliczne]]></category>
		<category><![CDATA[Ogrzewanie domu]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Porady techniczne]]></category>
		<category><![CDATA[Systemy grzewcze]]></category>
		<category><![CDATA[Testy szczelności]]></category>
		<category><![CDATA[błędy w próbie szczelności]]></category>
		<category><![CDATA[ciśnienie w ogrzewaniu podłogowym]]></category>
		<category><![CDATA[jak sprawdzić szczelność podłogówki]]></category>
		<category><![CDATA[jak zrobić test szczelności]]></category>
		<category><![CDATA[metoda powietrzna testu szczelności]]></category>
		<category><![CDATA[metoda wodna testu szczelności]]></category>
		<category><![CDATA[ogrzewanie podłogowe test szczelności]]></category>
		<category><![CDATA[próba szczelności ogrzewania podłogowego]]></category>
		<category><![CDATA[projekt ogrzewania podłogowego]]></category>
		<category><![CDATA[test ciśnieniowy ogrzewania podłogowego]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2367</guid>

					<description><![CDATA[<p>Próba szczelności ogrzewania podłogowego to kluczowy etap przed zalaniem wylewki, który zapewnia bezpieczeństwo i trwałość całej instalacji. Test ciśnieniowy pozwala wykryć ewentualne nieszczelności, minimalizując ryzyko kosztownych napraw w przyszłości. W artykule omawiamy krok po kroku metody wodne i powietrzne, ich zalety oraz typowe błędy, które warto unikać. Dowiesz się także, jak profesjonalny projekt ogrzewania podłogowego wpływa na skuteczność testu i długowieczność instalacji.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">Próba szczelności ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --brand-dark: #0f172a;
    --brand-blue: #0284c7;
    --brand-blue-light: #e0f2fe;
    --brand-red: #ef4444;
    --brand-red-light: #fee2e2;
    --brand-green: #10b981;
    --brand-green-light: #d1fae5;
    --bg-main: #ffffff;
    --border-soft: #e2e8f0;
    --text-muted: #64748b;
}

.intro-hero-box {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--bg-main);
    border-radius: 20px;
    box-shadow: 0 10px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--border-soft);
    overflow: hidden;
    color: var(--brand-dark);
}

.intro-hero-header {
    background: linear-gradient(135deg, #f8fafc 0%, var(--brand-blue-light) 100%);
    padding: 40px 45px 30px;
    position: relative;
    border-bottom: 1px solid var(--border-soft);
}

.intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #ffffff;
    color: var(--brand-blue);
    padding: 8px 16px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 20px;
    box-shadow: 0 2px 10px rgba(2, 132, 199, 0.1);
}

.intro-title {
    font-size: 26px;
    font-weight: 800;
    line-height: 1.3;
    margin: 0 0 20px 0;
    color: var(--brand-dark);
}

.intro-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin-bottom: 0;
}

.intro-text strong {
    color: var(--brand-dark);
    font-weight: 700;
}

.intro-text a {
    color: var(--brand-blue);
    text-decoration: none;
    border-bottom: 2px solid #bae6fd;
    font-weight: 600;
    transition: all 0.2s ease;
}

.intro-text a:hover {
    border-bottom-color: var(--brand-blue);
    background-color: var(--brand-blue-light);
}

/* Interaktywny symulator */
.intro-interactive-panel {
    padding: 35px 45px;
    background: #ffffff;
}

.panel-heading {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 25px;
}

.panel-title {
    font-size: 18px;
    font-weight: 700;
    margin: 0;
}

/* Switch (Przełącznik) */
.state-switch {
    display: flex;
    background: #f1f5f9;
    border-radius: 12px;
    padding: 4px;
    gap: 4px;
}

.switch-btn {
    border: none;
    background: transparent;
    padding: 10px 20px;
    border-radius: 8px;
    font-size: 14px;
    font-weight: 600;
    color: var(--text-muted);
    cursor: pointer;
    transition: all 0.3s ease;
}

.switch-btn.active-success {
    background: var(--brand-green);
    color: white;
    box-shadow: 0 4px 12px rgba(16, 185, 129, 0.2);
}

.switch-btn.active-danger {
    background: var(--brand-red);
    color: white;
    box-shadow: 0 4px 12px rgba(239, 68, 68, 0.2);
}

/* Stan Zawartości */
.state-content {
    display: none;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    padding: 25px;
    border-radius: 16px;
    border: 2px dashed var(--border-soft);
}

.state-content.active {
    display: grid;
}

.state-content.success-state {
    background: var(--brand-green-light);
    border-color: #34d399;
}

.state-content.danger-state {
    background: var(--brand-red-light);
    border-color: #f87171;
}

.data-card {
    background: rgba(255, 255, 255, 0.8);
    padding: 20px;
    border-radius: 12px;
    display: flex;
    align-items: flex-start;
    gap: 15px;
}

.data-icon {
    width: 40px;
    height: 40px;
    flex-shrink: 0;
}

.data-info h4 {
    margin: 0 0 5px 0;
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--text-muted);
}

.data-info p {
    margin: 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--brand-dark);
}

.danger-state .data-info p { color: var(--brand-red); }
.success-state .data-info p { color: var(--brand-green); }

@media (max-width: 768px) {
    .intro-hero-header { padding: 30px 25px; }
    .intro-interactive-panel { padding: 30px 25px; }
    .panel-heading { flex-direction: column; align-items: flex-start; gap: 15px; }
    .state-switch { width: 100%; display: grid; grid-template-columns: 1fr 1fr; }
    .switch-btn { padding: 12px 10px; text-align: center; }
    .state-content { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Próba szczelności ogrzewania podłogowego – fundament bezpieczeństwa instalacji",
    "description": "Próba szczelności ogrzewania podłogowego to obowiązkowy test ciśnieniowy (6 bar) przed wylewką. Chroni przed kosztownymi awariami i uszkodzeniami jastrychu.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset",
    "name": "Ryzyko i koszty zaniechania próby szczelności podłogówki",
    "description": "Zestawienie parametrów technicznych oraz szacunkowych kosztów naprawy wynikających z zalania betonem nieszczelnej instalacji grzewczej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "koszt naprawy ogrzewania podłogowego",
      "ciśnienie próbne ogrzewania podłogowego",
      "test szczelności podłogówki przed wylewką",
      "wykrycie nieszczelności w rurach",
      "parametry techniczne jastrychu"
    ],
    "measurementTechnique": "Porównanie kosztów inwestycyjnych do kosztów naprawy awaryjnej (współczynnik ryzyka 300-500%)",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Koszty kucia wylewki",
        "Utrata wydajności grzewczej",
        "Ryzyko katastrofy budowlanej"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp",
    "name": "Symulator konsekwencji braku próby szczelności",
    "description": "Interaktywny panel przełączający stany instalacji ogrzewania podłogowego, obrazujący skutki techniczne i finansowe zaniechania testów ciśnieniowych.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="intro-hero-box" id="szczelnosc-intro-app">
    <div class="intro-hero-header">
        <div class="intro-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Wstęp inżynierski
        </div>
        <h2 class="intro-title">Próba szczelności ogrzewania podłogowego – dlaczego to najważniejsze 24 godziny budowy?</h2>
        <p class="intro-text">
            <strong>Próba szczelności ogrzewania podłogowego</strong> to bezwzględnie obowiązkowa procedura techniczna, polegająca na poddaniu instalacji ciśnieniu próbnemu (najczęściej przyjmuje się wartość <strong>6 bar</strong>). Jej nadrzędnym celem jest bezbłędne wykrycie najmniejszych nieszczelności w rurach wielowarstwowych, złączkach dociskowych oraz belkach rozdzielacza, zanim zostaną one trwale zakryte warstwą <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">jastrychu podłogowego</a>. 
        </p>
        <p class="intro-text" style="margin-top: 15px;">
            Jako instalator spotykam się z tym stale: zignorowanie tego etapu to najprostsza droga do technologicznej katastrofy budowlanej. Średni koszt kucia i naprawy po zalaniu betonem przekracza wartość samej instalacji o <strong>300-500%</strong>. To jeden z <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstszych błędów montażowych</a>, którego skutki finansowe ponosi wyłącznie inwestor.
        </p>
    </div>

    <div class="intro-interactive-panel">
        <div class="panel-heading">
            <h3 class="panel-title">Wizualizacja stanu instalacji (Symulator ryzyka)</h3>
            <div class="state-switch">
                <button class="switch-btn active-success" data-target="state-ok">✅ Procedura zachowana</button>
                <button class="switch-btn" data-target="state-fail">❌ Brak próby szczelności</button>
            </div>
        </div>

        <!-- Stan POZYTYWNY -->
        <div class="state-content success-state active" id="state-ok">
            <div class="data-card">
                <svg class="data-icon" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><path d="M12 8v4l3 3"></path></svg>
                <div class="data-info">
                    <h4>Test ciśnieniowy</h4>
                    <p>6.0 Bar (24 godziny)</p>
                </div>
            </div>
            <div class="data-card">
                <svg class="data-icon" viewBox="0 0 24 24" fill="none" stroke="#10b981" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                <div class="data-info">
                    <h4>Status przed wylewką</h4>
                    <p>100% Bezpieczeństwa</p>
                </div>
            </div>
        </div>

        <!-- Stan NEGATYWNY -->
        <div class="state-content danger-state" id="state-fail">
            <div class="data-card">
                <svg class="data-icon" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                <div class="data-info">
                    <h4>Ukryty wyciek</h4>
                    <p>Zalanie izolacji EPS</p>
                </div>
            </div>
            <div class="data-card">
                <svg class="data-icon" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2"><line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                <div class="data-info">
                    <h4>Szacowany koszt naprawy</h4>
                    <p>+300% (Demontaż podłogi)</p>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. ZABEZPIECZENIE DOMENOWE (Domain Lock - bez nagłówków wg wytycznych)
    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('szczelnosc-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 20px; text-align: center; background: #fee2e2; color: #b91c1c; border: 2px dashed #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 22px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 15px; max-width: 500px; margin: 0 auto 25px auto; line-height: 1.6;">
                        Skrypt interaktywny i treści w nim zawarte stanowią własność intelektualną serwisu <strong>Projekt-Ogrzewania.pl</strong> i zostały skopiowane bezprawnie.
                    </div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 12px 24px; background: #b91c1c; color: #ffffff; text-decoration: none; border-radius: 8px; font-weight: bold;">Wróć do oryginalnego źródła</a>
                </div>
            `;
            return; // Przerywamy dalsze wykonywanie JS
        }
    }

    // 2. LOGIKA PRZEŁĄCZNIKA (Symulator Ryzyka)
    const buttons = document.querySelectorAll('.switch-btn');
    const contents = document.querySelectorAll('.state-content');

    buttons.forEach(btn => {
        btn.addEventListener('click', function() {
            // Resetuj wszystkie przyciski i treści
            buttons.forEach(b => {
                b.classList.remove('active-success', 'active-danger');
            });
            contents.forEach(c => {
                c.classList.remove('active');
            });

            // Aktywuj kliknięty przycisk
            const targetId = this.getAttribute('data-target');
            if (targetId === 'state-ok') {
                this.classList.add('active-success');
            } else {
                this.classList.add('active-danger');
            }

            // Pokaż odpowiednią treść
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-dark: #0f172a;
    --rk-blue: #0284c7;
    --rk-blue-light: #f0f9ff;
    --rk-accent: #38bdf8;
    --rk-border: #e2e8f0;
    --rk-text: #334155;
    --rk-success: #16a34a;
}

.norm-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.05);
    border: 1px solid var(--rk-border);
    overflow: hidden;
}

.norm-header {
    padding: 40px 45px;
    background: radial-gradient(circle at top right, var(--rk-blue-light), #ffffff);
    border-bottom: 1px solid var(--rk-border);
}

.norm-title {
    font-size: 24px;
    font-weight: 800;
    color: var(--rk-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.norm-text {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-text);
    margin-bottom: 15px;
}

.norm-text strong {
    color: var(--rk-dark);
    font-weight: 700;
}

.norm-link {
    color: var(--rk-blue);
    text-decoration: none;
    font-weight: 600;
    border-bottom: 1px dashed var(--rk-blue);
    transition: all 0.2s;
}

.norm-link:hover {
    color: #0369a1;
    border-bottom-style: solid;
    background: var(--rk-blue-light);
}

.norm-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-top: 25px;
}

.norm-card {
    background: #f8fafc;
    padding: 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-border);
    display: flex;
    align-items: center;
    gap: 15px;
}

.norm-card-icon {
    width: 48px;
    height: 48px;
    background: #ffffff;
    border-radius: 10px;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    color: var(--rk-blue);
}

/* Interaktywny Symulator */
.simulator-panel {
    padding: 40px 45px;
    background: #ffffff;
}

.simulator-title {
    font-size: 18px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--rk-dark);
    margin: 0 0 25px 0;
    display: flex;
    align-items: center;
    gap: 10px;
}

.simulator-title::before {
    content: '';
    display: inline-block;
    width: 12px;
    height: 12px;
    background: var(--rk-accent);
    border-radius: 50%;
    animation: pulse 2s infinite;
}

@keyframes pulse {
    0% { box-shadow: 0 0 0 0 rgba(56, 189, 248, 0.4); }
    70% { box-shadow: 0 0 0 10px rgba(56, 189, 248, 0); }
    100% { box-shadow: 0 0 0 0 rgba(56, 189, 248, 0); }
}

.slider-wrapper {
    margin-bottom: 30px;
}

.time-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #e2e8f0;
    outline: none;
    margin: 15px 0;
}

.time-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-blue);
    cursor: pointer;
    box-shadow: 0 0 10px rgba(2, 132, 199, 0.3);
    transition: transform 0.1s;
}

.time-slider::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

.sim-displays {
    display: flex;
    gap: 20px;
    justify-content: space-between;
}

.display-box {
    flex: 1;
    background: #f8fafc;
    border: 1px solid var(--rk-border);
    padding: 20px;
    border-radius: 16px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

.display-box .label {
    font-size: 13px;
    color: #64748b;
    font-weight: 700;
    text-transform: uppercase;
    margin-bottom: 8px;
    display: block;
}

.display-box .value {
    font-size: 32px;
    font-weight: 800;
    color: var(--rk-dark);
    font-variant-numeric: tabular-nums;
}

.display-box .unit {
    font-size: 16px;
    color: #94a3b8;
}

.status-bar {
    margin-top: 25px;
    padding: 15px 20px;
    border-radius: 12px;
    font-weight: 700;
    display: flex;
    align-items: center;
    gap: 10px;
    background: #f1f5f9;
    color: #475569;
    transition: all 0.3s ease;
}

.status-bar.success {
    background: #dcfce7;
    color: #166534;
}

@media (max-width: 768px) {
    .norm-header, .simulator-panel { padding: 30px 20px; }
    .norm-grid { grid-template-columns: 1fr; }
    .sim-displays { flex-direction: column; }
    .display-box { padding: 15px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-normy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Czym jest próba szczelności ogrzewania podłogowego i normy PN-EN 1264-4",
    "description": "Procedura weryfikacji instalacji płaszczyznowej wg normy PN-EN 1264. Sprawdzenie rur i rozdzielacza pod ciśnieniem 6 barów przez 24 godziny.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-normy",
    "name": "Parametry ciśnieniowe próby szczelności wg PN-EN 1264",
    "description": "Wymagane parametry techniczne weryfikacji hydraulicznej instalacji ogrzewania podłogowego przed wylaniem jastrychu.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "ciśnienie robocze ogrzewania podłogowego",
      "norma PN-EN 1264-4 podłogówka",
      "dopuszczalny spadek ciśnienia 0.2 bar",
      "ile barów na próbę szczelności",
      "protokół odbioru instalacji grzewczej PEX"
    ],
    "measurementTechnique": "Pomiar manometryczny ciągły przez 24 godziny z uwzględnieniem naturalnego rozprężania rur z tworzyw sztucznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Ciśnienie próbne: 0.6 MPa (6 bar)",
        "Współczynnik testowy: 1.3 x ciśnienie robocze",
        "Dopuszczalny spadek: max 0.2 bar / 24h"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-normy",
    "name": "Symulator ciśnieniowy PN-EN 1264",
    "description": "Interaktywny kalkulator i symulator pokazujący dopuszczalny, normatywny spadek ciśnienia w rurach grzewczych w cyklu 24-godzinnym.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="norm-container" id="szczelnosc-norm-app">
    <div class="norm-header">
        <h2 class="norm-title">Czym jest próba szczelności ogrzewania podłogowego i jakie są normy?</h2>
        
        <p class="norm-text">
            <strong>Próba szczelności ogrzewania podłogowego</strong> to rygorystyczny proces weryfikacji integralności hydraulicznej całego układu grzewczego. Jako inżynierowie bazujemy tu na twardych wytycznych, które jasno określa <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/" class="norm-link">norma PN-EN 1264-4</a>. Procedura ta daje 100% pewności, że pętle grzewcze, złączki oraz mosiężny lub nierdzewny <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/" class="norm-link">rozdzielacz do podłogówki</a> są wolne od wad materiałowych i instalacyjnych.
        </p>

        <p class="norm-text">
            Test obciąża układ ciśnieniem <strong>minimum 1,3 razy większym</strong> niż przewidywane ciśnienie robocze. W budownictwie jednorodzinnym oznacza to test przy <strong>0,6 MPa (6 bar)</strong>. Próbę uznajemy za zdaną tylko wtedy, gdy po <strong>24 godzinach</strong> spadek na manometrze nie przekroczył <strong>0,2 bar</strong> (efekt naturalnego ułożenia i rozszerzenia rur), a instalacja jest bezwzględnie sucha. Zwieńczeniem prac jest protokół – Twój bilet do zachowania gwarancji na pompę ciepła i spokoju u ubezpieczyciela.
        </p>

        <div class="norm-grid">
            <div class="norm-card">
                <div class="norm-card-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
                </div>
                <div>
                    <div style="font-size: 13px; color: #64748b; font-weight: 700; text-transform: uppercase;">Czas Trwania</div>
                    <div style="font-size: 16px; font-weight: 800; color: #0f172a;">Minimum 24 Godziny</div>
                </div>
            </div>
            <div class="norm-card">
                <div class="norm-card-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                </div>
                <div>
                    <div style="font-size: 13px; color: #64748b; font-weight: 700; text-transform: uppercase;">Wymóg formalny</div>
                    <div style="font-size: 16px; font-weight: 800; color: #0f172a;">Protokół dla Ubezpieczyciela</div>
                </div>
            </div>
        </div>
    </div>

    <!-- Moduł interaktywny -->
    <div class="simulator-panel">
        <h3 class="simulator-title">Symulator zachowania rur (Norma PN-EN 1264)</h3>
        <p style="font-size: 14px; color: #64748b; margin-bottom: 20px;">
            Przesuń suwak, aby zobaczyć fizyczne zachowanie ciśnienia w <a href="https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/" class="norm-link" style="border:none; text-decoration: underline;">rurze PEX/PERT</a> podczas pierwszych 24 godzin po nabiciu kompresorem lub pompą do 6 bar.
        </p>

        <div class="slider-wrapper">
            <div style="display: flex; justify-content: space-between; font-size: 12px; font-weight: 700; color: #94a3b8; padding: 0 5px;">
                <span>Start (0h)</span>
                <span>Faza stabilizacji</span>
                <span>Koniec testu (24h)</span>
            </div>
            <input type="range" class="time-slider" id="simTime" min="0" max="24" value="0" step="1">
        </div>

        <div class="sim-displays">
            <div class="display-box">
                <span class="label">Upływ czasu</span>
                <div class="value" id="valTime">0 <span class="unit">h</span></div>
            </div>
            
            <div class="display-box">
                <span class="label">Manometr (Aktualne)</span>
                <div class="value" id="valPressure">6.00 <span class="unit">bar</span></div>
            </div>

            <div class="display-box">
                <span class="label">Rozprężanie rury</span>
                <div class="value" id="valDrop" style="color: #64748b;">&#8211; 0.00 <span class="unit">bar</span></div>
            </div>
        </div>

        <div class="status-bar" id="simStatus">
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
            System przygotowany. Czekam na rozpoczęcie odliczania&#8230;
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('szczelnosc-norm-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fff1f2; color: #be123c; border: 1px solid #fda4af; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">⚠️</div>
                    <div style="font-size: 18px; font-weight: 800; margin-bottom: 10px;">Blokada bezpieczeństwa - Kopiowanie zabronione</div>
                    <div style="font-size: 14px; max-width: 450px; margin: 0 auto 20px auto; line-height: 1.5;">
                        To interaktywne narzędzie obliczeniowe jest własnością Projekt-Ogrzewania.pl. 
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Ciśnienia
    const slider = document.getElementById('simTime');
    const displayTime = document.getElementById('valTime');
    const displayPressure = document.getElementById('valPressure');
    const displayDrop = document.getElementById('valDrop');
    const statusBar = document.getElementById('simStatus');

    function updateSimulation() {
        const time = parseInt(slider.value);
        
        // Logika spadku: rura z tworzywa rozpręża się logarytmicznie, ale dla uproszczenia robimy krzywą łagodną
        // Max spadek to 0.2 bar przez 24h
        let drop = 0;
        if(time > 0) {
            // Szybki spadek na początku, potem zwalnia
            drop = (0.2 * Math.pow((time / 24), 0.5)).toFixed(2);
        }
        
        const currentPressure = (6.00 - drop).toFixed(2);

        // Aktualizacja UI
        displayTime.innerHTML = `${time} <span class="unit">h</span>`;
        displayPressure.innerHTML = `${currentPressure} <span class="unit">bar</span>`;
        displayDrop.innerHTML = `- ${drop} <span class="unit">bar</span>`;

        // Aktualizacja statusu
        statusBar.classList.remove('success');
        if (time === 0) {
            statusBar.innerHTML = `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg> Układ nabity. Czekam na upływ czasu...`;
        } else if (time > 0 && time < 4) {
            statusBar.innerHTML = `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg> Faza początkowa: Rury ulegają naturalnemu rozszerzeniu (spadek dozwolony).`;
        } else if (time >= 4 && time < 24) {
            statusBar.innerHTML = `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg> Monitorowanie układu (Ciśnienie ustabilizowane).`;
        } else if (time === 24) {
            statusBar.classList.add('success');
            statusBar.innerHTML = `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg> Wynik: POZYTYWNY. Spadek w normie (≤ 0.2 bar). Można podpisać protokół.`;
        }
    }

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



<style>
:root {
    --rk-pres-dark: #0f172a;
    --rk-pres-blue: #0284c7;
    --rk-pres-green: #10b981;
    --rk-pres-orange: #f59e0b;
    --rk-pres-red: #ef4444;
    --rk-pres-gray: #64748b;
    --rk-pres-bg: #ffffff;
    --rk-pres-border: #e2e8f0;
}

.rk-pres-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-pres-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -15px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--rk-pres-border);
    overflow: hidden;
}

.rk-pres-header {
    padding: 45px 50px 35px;
    background: linear-gradient(180deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-pres-border);
}

.rk-pres-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #e0f2fe;
    color: var(--rk-pres-blue);
    padding: 6px 14px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 25px;
}

.rk-pres-title {
    font-size: 28px;
    font-weight: 800;
    color: var(--rk-pres-dark);
    margin: 0 0 25px 0;
    line-height: 1.35;
}

.rk-pres-text {
    font-size: 17px;
    line-height: 1.85;
    color: #334155;
    margin-bottom: 25px;
}

.rk-pres-link {
    color: var(--rk-pres-blue);
    text-decoration: underline;
    text-underline-offset: 4px;
    text-decoration-thickness: 2px;
    font-weight: 700;
    transition: color 0.2s;
}

.rk-pres-link:hover {
    color: #0369a1;
}

/* =========================================
   Obracane Karty (Flip Cards) - Złote Zasady
   ========================================= */
.rk-flip-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 25px;
    margin: 30px 0 10px 0;
}

.rk-flip-card {
    background-color: transparent;
    width: 100%;
    min-height: 280px;
    perspective: 1000px;
    cursor: pointer;
}

.rk-flip-card-inner {
    position: relative;
    width: 100%;
    height: 100%;
    text-align: center;
    transition: transform 0.6s cubic-bezier(0.4, 0.2, 0.2, 1);
    transform-style: preserve-3d;
}

.rk-flip-card.is-flipped .rk-flip-card-inner {
    transform: rotateY(180deg);
}

.rk-flip-card-front, .rk-flip-card-back {
    position: absolute;
    width: 100%;
    height: 100%;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    border-radius: 20px;
    padding: 30px 20px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);
    border: 2px solid transparent;
    background: #ffffff;
}

.rk-flip-card-front { border-color: var(--rk-pres-border); }
.rk-flip-card:hover .rk-flip-card-front { border-color: #cbd5e1; }

.rk-flip-card-back { transform: rotateY(180deg); }

/* Kolory dla poszczególnych kart */
.rk-card-blue .rk-flip-card-back { background-color: #f0f9ff; border-color: #bae6fd; }
.rk-card-green .rk-flip-card-back { background-color: #f0fdf4; border-color: #bbf7d0; }
.rk-card-orange .rk-flip-card-back { background-color: #fffbeb; border-color: #fde047; }

.rk-icon-wrapper {
    width: 64px;
    height: 64px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 20px;
}

.rk-card-blue .rk-icon-wrapper { background: #e0f2fe; color: var(--rk-pres-blue); }
.rk-card-green .rk-icon-wrapper { background: #dcfce7; color: var(--rk-pres-green); }
.rk-card-orange .rk-icon-wrapper { background: #fef3c7; color: var(--rk-pres-orange); }

.rk-flip-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-pres-dark);
    margin-bottom: 8px;
    line-height: 1.3;
}

.rk-flip-text-front {
    font-size: 14px;
    color: #64748b;
    margin-bottom: 15px;
}

.rk-flip-hint {
    font-size: 12px;
    font-weight: 700;
    color: #94a3b8;
    display: flex;
    align-items: center;
    gap: 5px;
    margin-top: auto;
    background: #f8fafc;
    padding: 6px 14px;
    border-radius: 12px;
}

.rk-flip-text-back {
    font-size: 15px;
    color: #334155;
    line-height: 1.6;
    margin: 0;
}

/* Interaktywny Symulator Manometru */
.rk-pres-simulator {
    padding: 40px 45px;
    background: var(--rk-pres-dark);
    color: #ffffff;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

.rk-pres-gauge-wrapper {
    position: relative;
    width: 100%;
    max-width: 350px;
    margin: 0 auto;
}

.rk-pres-gauge {
    width: 100%;
    height: auto;
    overflow: visible;
}

.gauge-bg {
    fill: none;
    stroke: rgba(255, 255, 255, 0.1);
    stroke-width: 12;
}

.gauge-zone-op { stroke: var(--rk-pres-blue); stroke-width: 12; }
.gauge-zone-test { stroke: var(--rk-pres-green); stroke-width: 12; }
.gauge-zone-danger { stroke: var(--rk-pres-red); stroke-width: 12; }

.gauge-needle {
    fill: #ffffff;
    transition: transform 0.4s cubic-bezier(0.4, 2.5, 0.3, 1);
    transform-origin: 100px 100px;
    filter: drop-shadow(0 4px 6px rgba(0,0,0,0.5));
}

.gauge-center {
    fill: var(--rk-pres-dark);
    stroke: #ffffff;
    stroke-width: 3;
}

.rk-pres-controls {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.rk-pres-status-box {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-left: 4px solid var(--rk-pres-gray);
    padding: 20px;
    border-radius: 12px;
    transition: all 0.3s ease;
}

.rk-pres-status-box h4 {
    margin: 0 0 10px 0;
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #cbd5e1;
}

.rk-pres-status-value {
    font-size: 36px;
    font-weight: 800;
    margin: 0 0 5px 0;
    font-variant-numeric: tabular-nums;
}

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

.rk-pres-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: rgba(255, 255, 255, 0.2);
    outline: none;
    margin: 20px 0;
}

.rk-pres-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: #ffffff;
    cursor: pointer;
    box-shadow: 0 0 15px rgba(255,255,255,0.4);
    transition: transform 0.1s;
}

.rk-pres-slider::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

.slider-labels {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    color: #64748b;
    font-weight: 700;
}

@media (max-width: 768px) {
    .rk-pres-header { padding: 35px 25px; }
    .rk-flip-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-flip-card { min-height: 250px; }
    .rk-pres-simulator { grid-template-columns: 1fr; padding: 30px 25px; gap: 30px; }
    .rk-pres-gauge-wrapper { max-width: 280px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-cisnienie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Jakie ciśnienie przy próbie szczelności podłogówki jest prawidłowe?",
    "description": "Szczegółowa analiza parametrów ciśnieniowych: 6 bar do próby szczelności, 1.5-2.5 bar ciśnienia roboczego oraz wytrzymałość rur wielowarstwowych powyżej 20 bar.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-cisnienie",
    "name": "Zakresy ciśnień w instalacjach ogrzewania podłogowego PEX/AL/PEX",
    "description": "Zestawienie techniczne dopuszczalnych i granicznych wartości ciśnienia w układach ogrzewania płaszczyznowego wg specyfikacji producentów rur i rozdzielaczy.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jakie ciśnienie przy próbie szczelności podłogówki",
      "ciśnienie robocze ogrzewania podłogowego",
      "ciśnienie próbne 6 bar",
      "wytrzymałość rur wielowarstwowych PEX",
      "sprawdzanie szczelności rozdzielacza mosiężnego"
    ],
    "measurementTechnique": "Określanie progów bezpieczeństwa manometrycznego na podstawie normatywnego mnożnika (1,3 x ciśnienie robocze) oraz testów zniszczeniowych (rozerwanie pow. 20 bar).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Ciśnienie robocze: 1,5 - 2,5 bar",
        "Ciśnienie próbne optymalne: 6,0 bar (0,6 MPa)",
        "Ciśnienie rozrywające: > 20 bar (w 20°C)"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-cisnienie",
    "name": "Interaktywny Manometr Instalatora",
    "description": "Aplikacja symulująca zachowanie instalacji ogrzewania podłogowego pod różnym obciążeniem ciśnieniowym, od stanu roboczego po ciśnienie zniszczeniowe.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-pres-container" id="szczelnosc-cisnienie-app">
    <div class="rk-pres-header">
        <div class="rk-pres-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
            PARAMETRY TECHNICZNE
        </div>
        <h2 class="rk-pres-title">Jakie ciśnienie przy próbie szczelności podłogówki jest prawidłowe?</h2>
        
        <p class="rk-pres-text">
            Zgodnie z surowymi wymaganiami technicznymi i zaleceniami kluczowych producentów systemów, <strong>ciśnienie próbne powinno wynosić 6 bar (0,6 MPa)</strong>. Jest to absolutnie optymalna wartość, która pozwala z pełną skutecznością ujawnić wady ukryte <a href="https://projekt-ogrzewania.pl/produkt/rura-wielowarstwowa-kisan-thermotitan-pe-rt-evoh-pe-rt/" class="rk-pres-link">rur wielowarstwowych PEX/AL/PEX</a> oraz niedociśnięte fabrycznie złączki zaprasowywane, nie narażając jednocześnie konstrukcji <a href="https://projekt-ogrzewania.pl/produkt/rozdzielacz-mosiezny-do-ogrzewania-podlogowego-z-rotametrami/" class="rk-pres-link">rozdzielacza mosiężnego</a> na trwałe uszkodzenie uszczelnień (o-ringów).
        </p>

        <h3 style="font-size: 22px; font-weight: 800; color: var(--rk-pres-dark); margin: 35px 0 5px 0;">Złote zasady doboru ciśnienia w układzie:</h3>
        <p style="font-size: 14px; color: #64748b; margin-bottom: 20px;">Kliknij kartę, aby odkryć najważniejsze zasady i normy.</p>

        <div class="rk-flip-grid">
            <!-- Karta 1: Ciśnienie robocze -->
            <div class="rk-flip-card rk-card-blue" onclick="this.classList.toggle('is-flipped')">
                <div class="rk-flip-card-inner">
                    <div class="rk-flip-card-front">
                        <div class="rk-icon-wrapper">
                            <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                        </div>
                        <div class="rk-flip-title">Ciśnienie robocze</div>
                        <div class="rk-flip-text-front">Codzienna praca układu</div>
                        <div class="rk-flip-hint"><span>Obróć kartę</span> ⤵</div>
                    </div>
                    <div class="rk-flip-card-back">
                        <p class="rk-flip-text-back">Podczas standardowej eksploatacji pompy ciepła lub kotła wynosi zwykle <strong>1,5 – 2,5 bar</strong>.</p>
                    </div>
                </div>
            </div>

            <!-- Karta 2: Ciśnienie próbne -->
            <div class="rk-flip-card rk-card-green" onclick="this.classList.toggle('is-flipped')">
                <div class="rk-flip-card-inner">
                    <div class="rk-flip-card-front">
                        <div class="rk-icon-wrapper">
                            <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
                        </div>
                        <div class="rk-flip-title">Ciśnienie próbne</div>
                        <div class="rk-flip-text-front">Wartość normatywna</div>
                        <div class="rk-flip-hint"><span>Obróć kartę</span> ⤵</div>
                    </div>
                    <div class="rk-flip-card-back">
                        <p class="rk-flip-text-back">Wymaga się minimum 1,3 x ciśnienie robocze, jednak w nowoczesnym budownictwie jednorodzinnym niepodważalnym standardem inżynieryjnym jest wbicie <strong>6 bar</strong>.</p>
                    </div>
                </div>
            </div>

            <!-- Karta 3: Max wytrzymałość -->
            <div class="rk-flip-card rk-card-orange" onclick="this.classList.toggle('is-flipped')">
                <div class="rk-flip-card-inner">
                    <div class="rk-flip-card-front">
                        <div class="rk-icon-wrapper">
                            <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                        </div>
                        <div class="rk-flip-title">Max. wytrzymałość</div>
                        <div class="rk-flip-text-front">Granica bezpieczeństwa</div>
                        <div class="rk-flip-hint"><span>Obróć kartę</span> ⤵</div>
                    </div>
                    <div class="rk-flip-card-back">
                        <p class="rk-flip-text-back">Zastanawiasz się, czy rura wytrzyma? Większość markowych produktów charakteryzuje się <a href="https://projekt-ogrzewania.pl/wytrzymalosc-rur-do-ogrzewania-podlogowego-kompleksowy-przewodnik/" class="rk-pres-link" style="color:var(--rk-pres-orange);">wytrzymałością rozrywającą</a> znacznie przekraczającą <strong>20 bar</strong> (w temperaturze 20°C), dlatego wartość testowa jest w 100% bezpieczna.</p>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Symulator Manometru -->
    <div class="rk-pres-simulator">
        <div class="rk-pres-gauge-wrapper">
            <svg class="rk-pres-gauge" viewBox="0 0 200 120" preserveAspectRatio="xMidYMax meet">
                <!-- Definicje łuków dla poszczególnych stref -->
                <path class="gauge-bg" d="M 20 100 A 80 80 0 0 1 180 100" />
                <!-- 1.5 - 2.5 Bar (Robocze) -> Kąt: ok. -79 do -72 -->
                <path class="gauge-zone-op" stroke-dasharray="10 400" stroke-dashoffset="-8" d="M 20 100 A 80 80 0 0 1 180 100" />
                <!-- 6 Bar (Próba) -> Kąt: ok. -46 -->
                <path class="gauge-zone-test" stroke-dasharray="8 400" stroke-dashoffset="-60" d="M 20 100 A 80 80 0 0 1 180 100" />
                <!-- > 20 Bar (Niebezpieczeństwo) -> Kąt: ok. +54 do +90 -->
                <path class="gauge-zone-danger" stroke-dasharray="60 400" stroke-dashoffset="-190" d="M 20 100 A 80 80 0 0 1 180 100" />
                
                <!-- Cyferblat (orientacyjny) -->
                <text x="10" y="115" fill="#64748b" font-size="10" font-weight="bold">0</text>
                <text x="50" y="35" fill="#64748b" font-size="10" font-weight="bold">6</text>
                <text x="145" y="35" fill="#64748b" font-size="10" font-weight="bold">20</text>
                <text x="180" y="115" fill="#64748b" font-size="10" font-weight="bold">25</text>

                <!-- Wskazówka -->
                <g id="gaugeNeedle" class="gauge-needle" transform="rotate(-90 100 100)">
                    <path d="M 97 100 L 100 25 L 103 100 Z" />
                    <circle cx="100" cy="100" r="6" class="gauge-center" />
                </g>
            </svg>
        </div>

        <div class="rk-pres-controls">
            <h3 style="margin: 0; font-size: 18px; font-weight: 700; color: #e2e8f0;">Symulator Obciążenia Instalacji</h3>
            
            <div class="rk-pres-status-box" id="presStatusBox">
                <h4 id="presStatusLabel">Stan Układu</h4>
                <div class="rk-pres-status-value" id="presValueDisplay" style="color: #ffffff;">0.0 <span style="font-size: 18px; font-weight: 400; color: #94a3b8;">BAR</span></div>
                <p class="rk-pres-status-desc" id="presDescDisplay">Układ nienapełniony. Przesuń suwak, aby wprowadzić ciśnienie.</p>
            </div>

            <div>
                <input type="range" class="rk-pres-slider" id="presSlider" min="0" max="25" value="0" step="0.5">
                <div class="slider-labels">
                    <span>0 Bar</span>
                    <span>Test (6)</span>
                    <span>Max (25)</span>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków)
    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('szczelnosc-cisnienie-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; color: #38bdf8; border: 1px solid #0284c7; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 30px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 15px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Narzędzie Zablokowane</div>
                    <div style="font-size: 13px; color: #94a3b8;">
                        Symulator Ciśnienia jest narzędziem dedykowanym dla Projekt-Ogrzewania.pl. Wykryto nieautoryzowaną domenę.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Manometru
    const slider = document.getElementById('presSlider');
    const needle = document.getElementById('gaugeNeedle');
    const displayVal = document.getElementById('presValueDisplay');
    const displayDesc = document.getElementById('presDescDisplay');
    const statusBox = document.getElementById('presStatusBox');

    function updateGauge() {
        const val = parseFloat(slider.value);
        
        // Obliczanie rotacji wskazówki: 0 bar = -90deg, 25 bar = +90deg
        const rotation = (val / 25) * 180 - 90;
        needle.style.transform = `rotate(${rotation}deg)`;

        displayVal.innerHTML = `${val.toFixed(1)} <span style="font-size: 18px; font-weight: 400; color: #94a3b8;">BAR</span>`;

        // Logika stanów i kolorów
        if (val === 0) {
            statusBox.style.borderLeftColor = '#64748b';
            displayVal.style.color = '#ffffff';
            displayDesc.innerText = "Układ nienapełniony. Rury są puste i wolne od naprężeń.";
        } 
        else if (val > 0 && val < 1.5) {
            statusBox.style.borderLeftColor = '#94a3b8';
            displayVal.style.color = '#e2e8f0';
            displayDesc.innerText = "Faza napełniania i odpowietrzania. Zbyt mało, by uruchomić pompę obiegową.";
        }
        else if (val >= 1.5 && val <= 2.5) {
            statusBox.style.borderLeftColor = '#0284c7'; // Blue
            displayVal.style.color = '#38bdf8';
            displayDesc.innerText = "Optymalne CIŚNIENIE ROBOCZE. W tych warunkach układ pracuje na co dzień.";
        }
        else if (val > 2.5 && val < 5.5) {
            statusBox.style.borderLeftColor = '#f59e0b'; // Orange
            displayVal.style.color = '#fbbf24';
            displayDesc.innerText = "Ciśnienie podwyższone. Niewystarczające do rzetelnej próby szczelności.";
        }
        else if (val >= 5.5 && val <= 6.5) {
            statusBox.style.borderLeftColor = '#10b981'; // Green (Success)
            displayVal.style.color = '#34d399';
            displayDesc.innerHTML = "<strong>IDEALNE CIŚNIENIE PRÓBNE (6 BAR).</strong> Obowiązkowa wartość do 24-godzinnego testu szczelności wg norm.";
            // Efekt pulsowania dla idealnego trafienia
            statusBox.style.transform = 'scale(1.02)';
            setTimeout(() => statusBox.style.transform = 'scale(1)', 200);
        }
        else if (val > 6.5 && val < 20) {
            statusBox.style.borderLeftColor = '#ef4444'; // Red
            displayVal.style.color = '#f87171';
            displayDesc.innerText = "Przeciążenie! Zbyt duże naprężenie dla belek rozdzielacza i uszczelnień gwintowych.";
        }
        else if (val >= 20) {
            statusBox.style.borderLeftColor = '#b91c1c'; // Dark Red
            displayVal.style.color = '#ef4444';
            displayDesc.innerHTML = "<strong>RYZYKO DESTRUKCJI!</strong> Osiągnięto granicę ciśnienia rozrywającego strukturę rury wielowarstwowej.";
        }
    }

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



<style>
:root {
    --rk-time-dark: #0f172a;
    --rk-time-blue: #0284c7;
    --rk-time-light-blue: #e0f2fe;
    --rk-time-accent: #3b82f6;
    --rk-time-success: #10b981;
    --rk-time-gray: #64748b;
    --rk-time-bg: #ffffff;
    --rk-time-border: #e2e8f0;
}

.rk-time-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-time-bg);
    border-radius: 24px;
    box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--rk-time-border);
    overflow: hidden;
}

.rk-time-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-time-border);
}

.rk-time-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-time-light-blue);
    color: var(--rk-time-blue);
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.rk-time-title {
    font-size: 28px;
    font-weight: 800;
    color: var(--rk-time-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-time-intro {
    font-size: 17px;
    line-height: 1.8;
    color: #334155;
    margin-bottom: 25px;
}

.rk-time-link {
    color: var(--rk-time-accent);
    text-decoration: underline;
    text-underline-offset: 4px;
    text-decoration-thickness: 2px;
    font-weight: 700;
    transition: color 0.2s;
}

.rk-time-link:hover {
    color: #1d4ed8;
}

.rk-time-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-top: 10px;
}

.rk-time-card {
    background: #ffffff;
    border: 1px solid var(--rk-time-border);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    gap: 15px;
    align-items: flex-start;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-time-icon {
    width: 42px;
    height: 42px;
    border-radius: 12px;
    background: #f1f5f9;
    color: var(--rk-time-gray);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}

.rk-time-card.active-card .rk-time-icon {
    background: var(--rk-time-light-blue);
    color: var(--rk-time-blue);
}

.rk-time-card h4 {
    margin: 0 0 8px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-time-dark);
}

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

/* Interaktywny Symulator (Zegar) */
.rk-time-interactive {
    padding: 40px 45px;
    background: var(--rk-time-dark);
    color: #ffffff;
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 50px;
    align-items: center;
}

.rk-clock-wrapper {
    position: relative;
    width: 220px;
    height: 220px;
}

.rk-clock-svg {
    transform: rotate(-90deg);
    width: 100%;
    height: 100%;
}

.rk-clock-bg {
    fill: none;
    stroke: rgba(255,255,255,0.1);
    stroke-width: 12;
}

.rk-clock-progress {
    fill: none;
    stroke: var(--rk-time-accent);
    stroke-width: 12;
    stroke-linecap: round;
    transition: stroke-dashoffset 0.4s cubic-bezier(0.4, 0, 0.2, 1), stroke 0.4s ease;
}

.rk-clock-center {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    text-align: center;
}

.rk-clock-hours {
    font-size: 42px;
    font-weight: 900;
    color: #ffffff;
    line-height: 1;
    font-variant-numeric: tabular-nums;
}

.rk-clock-label {
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: 2px;
    color: #94a3b8;
    margin-top: 4px;
}

.rk-time-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-status-panel {
    background: rgba(255,255,255,0.05);
    border: 1px solid rgba(255,255,255,0.1);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    overflow: hidden;
}

.rk-status-panel::before {
    content: '';
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 4px;
    background: var(--rk-time-accent);
    transition: background 0.4s ease;
}

.rk-status-title {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #cbd5e1;
    margin-bottom: 10px;
    font-weight: 700;
}

.rk-status-text {
    font-size: 16px;
    line-height: 1.6;
    margin: 0;
    color: #f8fafc;
}

.rk-time-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: rgba(255, 255, 255, 0.2);
    outline: none;
    margin: 10px 0;
}

.rk-time-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: #ffffff;
    cursor: pointer;
    box-shadow: 0 0 15px rgba(59, 130, 246, 0.6);
    transition: transform 0.1s;
    border: 3px solid var(--rk-time-accent);
}

.rk-time-slider::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

@media (max-width: 768px) {
    .rk-time-header { padding: 30px 25px; }
    .rk-time-grid { grid-template-columns: 1fr; }
    .rk-time-interactive { grid-template-columns: 1fr; padding: 35px 25px; gap: 35px; text-align: center; }
    .rk-clock-wrapper { margin: 0 auto; width: 180px; height: 180px; }
    .rk-status-panel { text-align: left; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-czas",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Ile czasu powinna trwać próba szczelności ogrzewania podłogowego?",
    "description": "Prawidłowo przeprowadzony test ciśnieniowy podłogówki musi trwać minimum 24 godziny. Dowiedz się, czym jest faza stabilizacji rur PEX i pozorny spadek ciśnienia.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-czas",
    "name": "Harmonogram i fizyka zjawisk 24-godzinnej próby ciśnieniowej",
    "description": "Zestawienie czasowe zachowania rur z polietylenu sieciowanego (PEX) pod wpływem normatywnego ciśnienia próbnego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "ile czasu trwa próba szczelności podłogówki",
      "pozorny spadek ciśnienia 0.2 bar",
      "rozszerzanie rur PEX pod ciśnieniem",
      "24-godzinny test ogrzewania podłogowego",
      "faza stabilizacji manometru"
    ],
    "measurementTechnique": "Pomiar manometryczny w funkcji czasu (0-24h) uwzględniający histerezę i sprężystość materiałową tworzyw sztucznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "0-3h: Faza stabilizacji (naturalne powiększanie objętości rury)",
        "Spadek tolerowany: do 0,2 bar",
        "3-24h: Faza utrzymania (weryfikacja szczelności właściwej)"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-czas",
    "name": "Symulator Cyklu 24-Godzinnego Próby Szczelności",
    "description": "Interaktywny zegar symulujący zachowanie wskaźnika manometru oraz fizyczne rozprężanie rur PEX w trakcie wymaganej doby testowej.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-time-container" id="szczelnosc-czas-app">
    <div class="rk-time-header">
        <div class="rk-time-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
            Harmonogram Testu
        </div>
        <h2 class="rk-time-title">Ile czasu powinna trwać próba szczelności?</h2>
        
        <p class="rk-time-intro">
            Prawidłowo przeprowadzona próba szczelności ogrzewania podłogowego <strong>musi trwać minimum 24 godziny</strong>. Jest to czas niezbędny, aby upewnić się, że po <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/" class="rk-time-link">napełnieniu instalacji wodą</a> lub powietrzem, złączki i rury zareagowały na obciążenie ciśnieniowe bez żadnych wycieków.
        </p>

        <div class="rk-time-grid">
            <div class="rk-time-card active-card">
                <div class="rk-time-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
                </div>
                <div>
                    <h4>Faza Stabilizacji (1-3 h)</h4>
                    <p>Zjawisko fizyczne: Rury PEX ulegają naturalnemu rozszerzeniu, co objawia się pozornym spadkiem na manometrze (ok. <strong>0,2 bar</strong>).</p>
                </div>
            </div>
            <div class="rk-time-card">
                <div class="rk-time-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                </div>
                <div>
                    <h4>Faza Właściwa (do 24 h)</h4>
                    <p>Po ewentualnym &#8222;dobiciu&#8221; ciśnienia i <a href="https://projekt-ogrzewania.pl/objawy-zapowietrzenia-ogrzewania-podlogowego/" class="rk-time-link" style="color:var(--rk-time-gray); text-decoration:none;">odpowietrzeniu</a>, układ musi utrzymać zadany parametr do następnego dnia.</p>
                </div>
            </div>
        </div>
    </div>

    <!-- Symulator 24H -->
    <div class="rk-time-interactive">
        <div class="rk-clock-wrapper">
            <svg class="rk-clock-svg" viewBox="0 0 100 100">
                <circle class="rk-clock-bg" cx="50" cy="50" r="40"></circle>
                <circle class="rk-clock-progress" id="clockProgress" cx="50" cy="50" r="40" stroke-dasharray="251.2" stroke-dashoffset="251.2"></circle>
            </svg>
            <div class="rk-clock-center">
                <div class="rk-clock-hours" id="clockHours">0</div>
                <div class="rk-clock-label">Godzin</div>
            </div>
        </div>

        <div class="rk-time-controls">
            <h3 style="margin: 0; font-size: 18px; font-weight: 700;">Symulator zachowania rur PEX</h3>
            
            <div class="rk-status-panel" id="statusPanel">
                <div class="rk-status-title" id="statusTitle">Stan Początkowy</div>
                <p class="rk-status-text" id="statusText">Przesuń suwak czasu. Ciśnienie wtłoczone do układu wynosi 6.0 bar. Obserwuj zjawisko stabilizacji.</p>
            </div>

            <div>
                <div style="display: flex; justify-content: space-between; margin-bottom: 10px; font-size: 13px; color: #94a3b8; font-weight: 700; text-transform: uppercase;">
                    <span>Start (0h)</span>
                    <span>Koniec (24h)</span>
                </div>
                <input type="range" class="rk-time-slider" id="timeSlider" min="0" max="24" value="0" step="1">
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków wg wytycznych)
    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('szczelnosc-czas-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; color: #f87171; border: 1px solid #dc2626; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 30px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 15px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Narzędzie Zablokowane</div>
                    <div style="font-size: 13px; color: #94a3b8;">
                        Symulator Cyklu Próby Szczelności jest narzędziem autorskim Projekt-Ogrzewania.pl. Wykryto użycie poza licencją.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Zegara
    const slider = document.getElementById('timeSlider');
    const clockProgress = document.getElementById('clockProgress');
    const clockHours = document.getElementById('clockHours');
    const statusPanel = document.getElementById('statusPanel');
    const statusTitle = document.getElementById('statusTitle');
    const statusText = document.getElementById('statusText');

    // Obwód koła r=40 to 2*PI*40 = ~251.2
    const circumference = 251.2;

    function updateSimulation() {
        const hours = parseInt(slider.value);
        
        // Aktualizacja kółka postępu
        const offset = circumference - (hours / 24) * circumference;
        clockProgress.style.strokeDashoffset = offset;
        clockHours.innerText = hours;

        // Logika zjawisk
        if (hours === 0) {
            statusTitle.innerText = "STAN POCZĄTKOWY (0h)";
            statusTitle.style.color = "#cbd5e1";
            statusText.innerText = "Przesuń suwak czasu. Ciśnienie wtłoczone do układu wynosi dokładnie 6.0 bar. Instalacja gotowa do testu.";
            clockProgress.style.stroke = "#3b82f6";
            slider.style.borderColor = "#3b82f6";
        } 
        else if (hours > 0 && hours <= 3) {
            statusTitle.innerText = "FAZA STABILIZACJI (" + hours + "h)";
            statusTitle.style.color = "#f59e0b"; // Orange warning
            statusText.innerHTML = "Rury PEX pod wpływem ciśnienia <strong>ulegają naturalnemu rozszerzeniu</strong>. Manometr może wykazać pozorny spadek o ok. 0,2 bar (do 5,8 bar). To normalne zjawisko fizyczne!";
            clockProgress.style.stroke = "#f59e0b";
            slider.style.borderColor = "#f59e0b";
        }
        else if (hours > 3 && hours < 24) {
            statusTitle.innerText = "MONITORING CIŚNIENIA (" + hours + "h)";
            statusTitle.style.color = "#38bdf8"; // Light Blue
            statusText.innerHTML = "Rury osiągnęły swoją objętość roboczą. Ciśnienie ustabilizowane. Obserwujemy układ na wypadek powolnych, ukrytych mikrowycieków.";
            clockProgress.style.stroke = "#38bdf8";
            slider.style.borderColor = "#38bdf8";
        }
        else if (hours === 24) {
            statusTitle.innerText = "ZAKOŃCZENIE PRÓBY (24h)";
            statusTitle.style.color = "#10b981"; // Success Green
            statusText.innerHTML = "<strong>Sukces!</strong> Pełna doba minęła. Brak spadków na manometrze potwierdza 100% szczelność. Instalacja gotowa na zalanie wylewką betonową.";
            clockProgress.style.stroke = "#10b981";
            slider.style.borderColor = "#10b981";
            
            // Delikatny efekt pulse
            statusPanel.style.transform = 'scale(1.02)';
            setTimeout(() => statusPanel.style.transform = 'scale(1)', 200);
        }
    }

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



<style>
:root {
    --rk-cmp-dark: #0f172a;
    --rk-cmp-blue: #0ea5e9;
    --rk-cmp-blue-light: #e0f2fe;
    --rk-cmp-teal: #14b8a6;
    --rk-cmp-teal-light: #ccfbf1;
    --rk-cmp-gray: #64748b;
    --rk-cmp-bg: #ffffff;
    --rk-cmp-border: #e2e8f0;
}

.rk-cmp-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-cmp-bg);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--rk-cmp-border);
    overflow: hidden;
}

.rk-cmp-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, #f8fafc 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-cmp-border);
}

.rk-cmp-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #f1f5f9;
    color: var(--rk-cmp-dark);
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.rk-cmp-title {
    font-size: 26px;
    font-weight: 800;
    color: var(--rk-cmp-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-cmp-text {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin: 0;
}

.rk-cmp-link {
    color: var(--rk-cmp-blue);
    text-decoration: underline;
    text-underline-offset: 4px;
    font-weight: 700;
    transition: color 0.2s;
}

.rk-cmp-link:hover { color: #0284c7; }

/* Interaktywny Selektor (Zakładki) */
.rk-cmp-interactive {
    padding: 0;
    background: #f8fafc;
}

.rk-cmp-tabs {
    display: flex;
    border-bottom: 1px solid var(--rk-cmp-border);
    background: #ffffff;
}

.rk-cmp-tab {
    flex: 1;
    padding: 20px;
    text-align: center;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-cmp-gray);
    cursor: pointer;
    background: #f8fafc;
    border: none;
    border-bottom: 3px solid transparent;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-cmp-tab:hover {
    background: #f1f5f9;
    color: var(--rk-cmp-dark);
}

.rk-cmp-tab.active[data-target="water"] {
    background: #ffffff;
    color: var(--rk-cmp-blue);
    border-bottom-color: var(--rk-cmp-blue);
}

.rk-cmp-tab.active[data-target="air"] {
    background: #ffffff;
    color: var(--rk-cmp-teal);
    border-bottom-color: var(--rk-cmp-teal);
}

/* Zawartość Zakładek */
.rk-cmp-content {
    padding: 40px 45px;
}

.rk-tab-pane {
    display: none;
    animation: fadeIn 0.4s ease-in-out;
}

.rk-tab-pane.active {
    display: block;
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-pane-layout {
    display: grid;
    grid-template-columns: 250px 1fr;
    gap: 40px;
    align-items: center;
}

/* Animowane SVG */
.rk-anim-svg {
    width: 100%;
    height: auto;
    max-width: 200px;
    margin: 0 auto;
    display: block;
}

.water-drop {
    transform-origin: center;
    animation: floatDrop 3s ease-in-out infinite;
}

.water-wave {
    animation: waveMove 4s linear infinite;
}

@keyframes floatDrop {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
}

@keyframes waveMove {
    0% { transform: translateX(0); }
    100% { transform: translateX(-20px); }
}

.air-flow {
    stroke-dasharray: 100;
    animation: dashFlow 2s linear infinite;
}

@keyframes dashFlow {
    to { stroke-dashoffset: -200; }
}

/* Siatka parametrów */
.rk-param-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-param-item {
    background: #ffffff;
    border: 1px solid var(--rk-cmp-border);
    padding: 15px 20px;
    border-radius: 12px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-param-label {
    font-size: 11px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: var(--rk-cmp-gray);
    margin-bottom: 6px;
    display: block;
    font-weight: 700;
}

.rk-param-value {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-cmp-dark);
    margin: 0;
    line-height: 1.4;
}

.val-highlight-water { color: var(--rk-cmp-blue); }
.val-highlight-air { color: var(--rk-cmp-teal); }
.val-alert { color: #ef4444; }
.val-success { color: #10b981; }

@media (max-width: 768px) {
    .rk-cmp-header, .rk-cmp-content { padding: 30px 20px; }
    .rk-cmp-tabs { flex-direction: column; }
    .rk-cmp-tab { border-left: 3px solid transparent; border-bottom: none; border-top: 1px solid var(--rk-cmp-border); }
    .rk-cmp-tab.active[data-target="water"], .rk-cmp-tab.active[data-target="air"] { border-left-width: 3px; border-bottom: none; }
    .rk-pane-layout { grid-template-columns: 1fr; gap: 30px; text-align: center; }
    .rk-param-grid { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Porównanie metod próby szczelności: Woda czy Powietrze?",
    "description": "Techniczne zestawienie metod testowania szczelności ogrzewania podłogowego. Sprawdź, kiedy wybrać próbę wodną (6 bar), a kiedy bezpieczniejsza będzie próba sprężonym powietrzem.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-porownanie",
    "name": "Tabela parametrów: Próba Wodna vs Powietrzna w systemach PEX",
    "description": "Zestawienie technicznych różnic pomiędzy wodnym a powietrznym testem ciśnieniowym dla instalacji ogrzewania podłogowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "próba wodna ogrzewania podłogowego",
      "próba powietrzna sprężonym powietrzem",
      "wykrywanie nieszczelności pod wylewką",
      "ryzyko zamarznięcia rur PEX",
      "ciśnienie robocze podłogówki 6 bar"
    ],
    "measurementTechnique": "Porównanie analityczne parametrów fizykochemicznych medium testowego (woda vs powietrze/azot) oraz ich wpływu na stabilizację rur tworzywowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Woda: Bardzo wysoka łatwość lokalizacji wycieku, ryzyko zamarznięcia < 0°C.",
        "Powietrze: Brak ryzyka zamarznięcia, wymaga pianki detekcyjnej do wykrywania wycieków.",
        "Wspólne: Ciśnienie próbne 6.0 bar, czas trwania 24 godziny."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-porownanie",
    "name": "Selektor Metody Testowej Instalacji Grzewczej",
    "description": "Interaktywne narzędzie pozwalające instalatorom i inwestorom porównać wady, zalety i parametry testu wodnego oraz powietrznego.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-cmp-container" id="szczelnosc-porownanie-app">
    <div class="rk-cmp-header">
        <div class="rk-cmp-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="8" y1="6" x2="21" y2="6"></line><line x1="8" y1="12" x2="21" y2="12"></line><line x1="8" y1="18" x2="21" y2="18"></line><line x1="3" y1="6" x2="3.01" y2="6"></line><line x1="3" y1="12" x2="3.01" y2="12"></line><line x1="3" y1="18" x2="3.01" y2="18"></line></svg>
            Analiza Porównawcza
        </div>
        <h2 class="rk-cmp-title">Woda czy sprężone powietrze? Porównanie metod testowych</h2>
        <p class="rk-cmp-text">
            Choć norma PN-EN 1264 dopuszcza obie metody weryfikacji układu przed zalaniem jastrychem, wybór odpowiedniego medium zależy od warunków na budowie (przede wszystkim temperatury). Zobacz zestawienie kluczowych parametrów technicznych i wybierz metodę dopasowaną do Twojego harmonogramu prac. W przypadku mrozów rozważ napełnienie układu <a href="https://projekt-ogrzewania.pl/glikol-w-ogrzewaniu-podlogowym-prawda-i-mity-ktore-musi-znac-kazdy-inwestor/" class="rk-cmp-link">glikolem polipropylenowym</a>.
        </p>
    </div>

    <div class="rk-cmp-interactive">
        <div class="rk-cmp-tabs">
            <button class="rk-cmp-tab active" data-target="water">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"></path></svg>
                Próba Wodna (Zalecana)
            </button>
            <button class="rk-cmp-tab" data-target="air">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path></svg>
                Próba Powietrzna (Zimowa)
            </button>
        </div>

        <div class="rk-cmp-content">
            <!-- TAB: WODA -->
            <div id="water" class="rk-tab-pane active">
                <div class="rk-pane-layout">
                    <div>
                        <!-- SVG Woda -->
                        <svg class="rk-anim-svg" viewBox="0 0 100 100">
                            <circle cx="50" cy="50" r="45" fill="var(--rk-cmp-blue-light)" />
                            <path class="water-drop" d="M50 20 C50 20 30 50 30 65 A 20 20 0 0 0 70 65 C70 50 50 20 50 20 Z" fill="var(--rk-cmp-blue)" />
                            <path class="water-wave" d="M 20 75 Q 35 65 50 75 T 80 75" fill="none" stroke="#ffffff" stroke-width="3" stroke-linecap="round" />
                        </svg>
                    </div>
                    <div class="rk-param-grid">
                        <div class="rk-param-item">
                            <span class="rk-param-label">Medium testowe</span>
                            <p class="rk-param-value">Woda wodociągowa / <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/" class="rk-cmp-link" style="font-size:15px;">Demineralizowana</a></p>
                        </div>
                        <div class="rk-param-item">
                            <span class="rk-param-label">Ciśnienie i Czas</span>
                            <p class="rk-param-value"><span class="val-highlight-water">6,0 bar</span> przez równe 24 godziny</p>
                        </div>
                        <div class="rk-param-item">
                            <span class="rk-param-label">Lokalizacja wycieku</span>
                            <p class="rk-param-value val-success">Bardzo wysoka (widoczna plama wody)</p>
                        </div>
                        <div class="rk-param-item">
                            <span class="rk-param-label">Ryzyko zamarznięcia</span>
                            <p class="rk-param-value val-alert">Tak (niezbędny glikol poniżej 0°C)</p>
                        </div>
                        <div class="rk-param-item" style="grid-column: 1 / -1;">
                            <span class="rk-param-label">Stabilizacja układu</span>
                            <p class="rk-param-value">Wymagana. Plastikowa rura rozszerza się mechanicznie pod wpływem naporu cieczy.</p>
                        </div>
                    </div>
                </div>
            </div>

            <!-- TAB: POWIETRZE -->
            <div id="air" class="rk-tab-pane">
                <div class="rk-pane-layout">
                    <div>
                        <!-- SVG Powietrze -->
                        <svg class="rk-anim-svg" viewBox="0 0 100 100">
                            <circle cx="50" cy="50" r="45" fill="var(--rk-cmp-teal-light)" />
                            <path class="air-flow" d="M 20 40 C 40 40 45 20 65 20 C 80 20 85 40 95 40" fill="none" stroke="var(--rk-cmp-teal)" stroke-width="6" stroke-linecap="round" />
                            <path class="air-flow" style="animation-delay: -1s;" d="M 10 60 C 30 60 40 80 60 80 C 75 80 85 60 90 60" fill="none" stroke="var(--rk-cmp-teal)" stroke-width="4" stroke-linecap="round" />
                        </svg>
                    </div>
                    <div class="rk-param-grid">
                        <div class="rk-param-item">
                            <span class="rk-param-label">Medium testowe</span>
                            <p class="rk-param-value">Sprężone powietrze z kompresora / Azot</p>
                        </div>
                        <div class="rk-param-item">
                            <span class="rk-param-label">Ciśnienie i Czas</span>
                            <p class="rk-param-value"><span class="val-highlight-air">6,0 bar</span> (lub wg specyfikacji rury) / 24h</p>
                        </div>
                        <div class="rk-param-item">
                            <span class="rk-param-label">Lokalizacja wycieku</span>
                            <p class="rk-param-value val-alert">Niska (niezbędna pianka detekcyjna)</p>
                        </div>
                        <div class="rk-param-item">
                            <span class="rk-param-label">Ryzyko zamarznięcia</span>
                            <p class="rk-param-value val-success">Brak (idealne rozwiązanie na zimę)</p>
                        </div>
                        <div class="rk-param-item" style="grid-column: 1 / -1;">
                            <span class="rk-param-label">Stabilizacja układu</span>
                            <p class="rk-param-value">Bardzo ważna! Spadek temperatury otoczenia w nocy spowoduje naturalny spadek ciśnienia gazu na manometrze.</p>
                        </div>
                    </div>
                </div>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków wg wytycznych)
    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('szczelnosc-porownanie-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 35px; text-align: center; background: #fffbeb; color: #b45309; border: 1px solid #fde68a; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 30px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 15px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Narzędzie Zablokowane</div>
                    <div style="font-size: 13px; color: #d97706;">
                        Interaktywny selektor metod testowych jest autorskim narzędziem Projekt-Ogrzewania.pl. Wykryto nieautoryzowaną domenę docelową.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Zakładek (Tabs)
    const tabs = document.querySelectorAll('.rk-cmp-tab');
    const panes = document.querySelectorAll('.rk-tab-pane');

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Usuń aktywne klasy z zakładek i paneli
            tabs.forEach(t => t.classList.remove('active'));
            panes.forEach(p => p.classList.remove('active'));

            // Aktywuj klikniętą
            this.classList.add('active');
            const targetId = this.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-air-dark: #0f172a;
    --rk-air-blue: #0284c7;
    --rk-air-ice: #e0f2fe;
    --rk-air-teal: #0d9488;
    --rk-air-alert: #ef4444;
    --rk-air-bg: #ffffff;
    --rk-air-border: #e2e8f0;
}

.rk-air-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-air-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -15px rgba(2, 132, 199, 0.1);
    border: 1px solid var(--rk-air-border);
    overflow: hidden;
}

.rk-air-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, #f0f9ff 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-air-border);
    position: relative;
}

.rk-air-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-air-blue);
    color: #ffffff;
    padding: 6px 14px;
    border-radius: 10px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.rk-air-title {
    font-size: 26px;
    font-weight: 800;
    color: var(--rk-air-dark);
    margin: 0 0 15px 0;
    line-height: 1.35;
}

.rk-air-desc {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin: 0;
}

.rk-air-link {
    color: var(--rk-air-blue);
    text-decoration: underline;
    text-underline-offset: 4px;
    font-weight: 700;
    transition: color 0.2s;
}

.rk-air-link:hover { color: #0369a1; }

/* Sekcja faktów */
.rk-air-facts {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    padding: 35px 45px;
    background: #ffffff;
}

.rk-fact-card {
    background: #f8fafc;
    border: 1px solid var(--rk-air-border);
    border-radius: 16px;
    padding: 20px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    transition: transform 0.3s;
}

.rk-fact-card:hover {
    transform: translateY(-4px);
    border-color: #bae6fd;
    box-shadow: 0 10px 15px -3px rgba(2, 132, 199, 0.05);
}

.rk-fact-icon {
    width: 44px;
    height: 44px;
    background: #ffffff;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-air-blue);
    margin-bottom: 15px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-fact-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-air-dark);
    margin-bottom: 8px;
}

.rk-fact-text {
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
    margin: 0;
}

/* Interaktywny Kalkulator Termodynamiki */
.rk-air-simulator {
    background: var(--rk-air-dark);
    padding: 40px 45px;
    color: #ffffff;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    align-items: center;
}

.rk-sim-header {
    grid-column: 1 / -1;
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: 1px solid rgba(255,255,255,0.1);
    padding-bottom: 15px;
    margin-bottom: -10px;
}

.rk-sim-header h3 {
    margin: 0;
    font-size: 20px;
    color: #ffffff;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-slider-group {
    background: rgba(255,255,255,0.05);
    padding: 20px;
    border-radius: 12px;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-slider-header {
    display: flex;
    justify-content: space-between;
    margin-bottom: 15px;
    font-size: 14px;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: 700;
}

.rk-val-display {
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    border-radius: 3px;
    background: rgba(255,255,255,0.2);
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-air-teal);
    cursor: pointer;
    border: 3px solid #ffffff;
    box-shadow: 0 0 10px rgba(13, 148, 136, 0.5);
    transition: transform 0.1s;
}

.rk-range-input::-webkit-slider-thumb:active { transform: scale(1.15); }

/* Wizualizacja Danych */
.rk-sim-visuals {
    display: flex;
    gap: 20px;
    height: 100%;
}

.rk-thermometer-box {
    width: 80px;
    background: rgba(0,0,0,0.3);
    border-radius: 40px;
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 20px 0;
    position: relative;
}

.rk-thermo-glass {
    width: 20px;
    height: 150px;
    background: rgba(255,255,255,0.1);
    border-radius: 10px;
    position: relative;
    overflow: hidden;
}

.rk-thermo-mercury {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    background: var(--rk-air-teal);
    height: 50%;
    transition: height 0.4s ease;
}

.rk-thermo-bulb {
    width: 36px;
    height: 36px;
    background: var(--rk-air-teal);
    border-radius: 50%;
    margin-top: -10px;
    z-index: 2;
}

.rk-result-box {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-result-card {
    background: var(--rk-air-blue);
    padding: 25px;
    border-radius: 16px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

.rk-result-card::after {
    content: '';
    position: absolute;
    top: -50%; left: -50%; width: 200%; height: 200%;
    background: radial-gradient(circle, rgba(255,255,255,0.1) 0%, transparent 60%);
    animation: rotateGlow 10s linear infinite;
}

@keyframes rotateGlow {
    100% { transform: rotate(360deg); }
}

.rk-result-label {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #e0f2fe;
    margin-bottom: 5px;
    display: block;
    position: relative;
    z-index: 1;
}

.rk-result-value {
    font-size: 42px;
    font-weight: 900;
    color: #ffffff;
    font-variant-numeric: tabular-nums;
    position: relative;
    z-index: 1;
}

.rk-result-unit { font-size: 18px; font-weight: 500; opacity: 0.8; }

.rk-alert-msg {
    margin-top: 15px;
    padding: 12px;
    background: rgba(0,0,0,0.2);
    border-radius: 8px;
    font-size: 13px;
    color: #94a3b8;
    line-height: 1.5;
    text-align: center;
    border-left: 3px solid var(--rk-air-teal);
}

@media (max-width: 768px) {
    .rk-air-header, .rk-air-facts, .rk-air-simulator { padding: 30px 20px; }
    .rk-air-facts { grid-template-columns: 1fr; gap: 15px; }
    .rk-air-simulator { grid-template-columns: 1fr; gap: 30px; }
    .rk-sim-header { flex-direction: column; align-items: flex-start; gap: 10px; }
    .rk-sim-visuals { flex-direction: column; align-items: center; }
    .rk-thermometer-box { transform: rotate(90deg); margin: 20px 0; }
    .rk-result-box { width: 100%; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-powietrzna",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Próba powietrzna ogrzewania podłogowego – kiedy jest lepsza od wodnej?",
    "description": "Zasady wykonywania powietrznej próby ciśnieniowej zimą. Zobacz, jak fizyka i spadek temperatury wpływają na odczyt manometru podczas testu na sucho.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-powietrzna",
    "name": "Korelacja ciśnienia powietrza z temperaturą (Prawo Gay-Lussaca) w próbach",
    "description": "Fizyczne zestawienie zmian ciśnienia gazu w rurach ogrzewania podłogowego wywołanych dobowymi amplitudami temperatury w nieogrzewanych budynkach.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "próba powietrzna ogrzewania podłogowego",
      "spadek ciśnienia powietrza od temperatury",
      "manometr spadek w nocy",
      "test sprężarką przed wylewką",
      "wzór na korektę ciśnienia gazu"
    ],
    "measurementTechnique": "Algorytm izochorycznej przemiany gazowej P2 = P1 * (T2/T1), gdzie wartości temperatury przeliczane są na skalę Kelwina.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Spadek temp. o 5°C = mierzalny spadek ciśnienia na manometrze.",
        "Narzędzia: Kompresor, Manometr klasa 1.0.",
        "Cel: Uniknięcie zamarznięcia medium przed wykonaniem wylewki."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-powietrzna",
    "name": "Termodynamiczny Symulator Próby Powietrznej",
    "description": "Interaktywny kalkulator obliczający naturalny, fizyczny spadek ciśnienia na manometrze spowodowany wychłodzeniem budynku w nocy.",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-air-container" id="szczelnosc-powietrze-app">
    <div class="rk-air-header">
        <div class="rk-air-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2"></path></svg>
            Warunki Zimowe
        </div>
        <h2 class="rk-air-title">Próba powietrzna – kiedy jest lepsza od wodnej?</h2>
        <p class="rk-air-desc">
            Próbę powietrzną ("na sucho") wykonujemy głównie w <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/" class="rk-air-link">okresie zimowym</a>, gdy budynek znajduje się w stanie surowym, a zignorowanie temperatur grozi zamarznięciem wody w rurach przed ostatecznym wykonaniem jastrychu. Jest to procedura wymagająca sprzętu wyższej kalibracji.
        </p>
    </div>

    <div class="rk-air-facts">
        <div class="rk-fact-card">
            <div class="rk-fact-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
            </div>
            <h4 class="rk-fact-title">Odpowiedni Sprzęt</h4>
            <p class="rk-fact-text">Do testu używamy wydajnego kompresora bezolejowego oraz manometru o <strong>wysokiej klasie dokładności (klasa 1.0)</strong>.</p>
        </div>
        <div class="rk-fact-card">
            <div class="rk-fact-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            </div>
            <h4 class="rk-fact-title">Prawa Fizyki</h4>
            <p class="rk-fact-text">Ciśnienie gazu ściśle koreluje z temperaturą. Ochłodzenie budynku w nocy wpłynie na odczyt, co często mylone jest z nieszczelnością.</p>
        </div>
        <div class="rk-fact-card">
            <div class="rk-fact-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="4 7 4 4 20 4 20 7"></polyline><line x1="9" y1="20" x2="15" y2="20"></line><line x1="12" y1="4" x2="12" y2="20"></line></svg>
            </div>
            <h4 class="rk-fact-title">Wzór na korektę</h4>
            <p class="rk-fact-text">Obowiązuje wzór: <strong>P2 = P1 · (T2 / T1)</strong>. Parametry "T" muszą być przeliczone na absolutną skalę Kelwina.</p>
        </div>
    </div>

    <!-- Symulator Termodynamiki -->
    <div class="rk-air-simulator">
        <div class="rk-sim-header">
            <h3>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#0d9488" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line></svg>
                Kalkulator Praw Fizyki: Temperatura vs Manometr
            </h3>
            <span style="font-size: 12px; color: #94a3b8; border: 1px solid rgba(255,255,255,0.2); padding: 4px 10px; border-radius: 12px;">Test początkowy: 6.0 BAR</span>
        </div>

        <div class="rk-sim-controls">
            <div class="rk-slider-group">
                <div class="rk-slider-header">
                    <span>Temp. podczas nabijania (Dzień)</span>
                    <span class="rk-val-display" id="valTemp1">15 °C</span>
                </div>
                <input type="range" class="rk-range-input" id="sliderTemp1" min="0" max="25" value="15" step="1">
            </div>

            <div class="rk-slider-group" style="border-color: rgba(13, 148, 136, 0.4);">
                <div class="rk-slider-header">
                    <span>Temp. sprawdzania (Zimna noc)</span>
                    <span class="rk-val-display" id="valTemp2" style="color: var(--rk-air-teal);">5 °C</span>
                </div>
                <input type="range" class="rk-range-input" id="sliderTemp2" min="-10" max="25" value="5" step="1">
            </div>
        </div>

        <div class="rk-sim-visuals">
            <div class="rk-thermometer-box">
                <div class="rk-thermo-glass">
                    <div class="rk-thermo-mercury" id="thermoMercury"></div>
                </div>
                <div class="rk-thermo-bulb"></div>
            </div>
            
            <div class="rk-result-box">
                <div class="rk-result-card">
                    <span class="rk-result-label">Odczyt rano na manometrze</span>
                    <div class="rk-result-value" id="valPressure2">5.79 <span class="rk-result-unit">BAR</span></div>
                </div>
                <div class="rk-alert-msg" id="alertMsg">
                    Spadek o 0.21 bar to czysta fizyka. <strong style="color:#ffffff;">Układ jest szczelny.</strong>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków w kontenerze błędu)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('szczelnosc-powietrze-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; color: #f87171; border: 2px dashed #ef4444; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 10px;">🛡️</div>
                    <div style="font-size: 16px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Zabezpieczenie autorskie</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 400px; margin: 0 auto;">
                        Kalkulator Termodynamiki jest wyłączną własnością Projekt-Ogrzewania.pl. Wykryto nieuprawnione użycie skryptu.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalkulatora Praw Fizyki
    const sliderT1 = document.getElementById('sliderTemp1');
    const sliderT2 = document.getElementById('sliderTemp2');
    const valT1 = document.getElementById('valTemp1');
    const valT2 = document.getElementById('valTemp2');
    const valP2 = document.getElementById('valPressure2');
    const alertMsg = document.getElementById('alertMsg');
    const mercury = document.getElementById('thermoMercury');

    const P1 = 6.0; // Bar
    const kelvinOffset = 273.15;

    function updateSimulation() {
        const t1_c = parseFloat(sliderT1.value);
        const t2_c = parseFloat(sliderT2.value);
        
        // Aktualizacja etykiet
        valT1.innerText = t1_c > 0 ? `+${t1_c} °C` : `${t1_c} °C`;
        valT2.innerText = t2_c > 0 ? `+${t2_c} °C` : `${t2_c} °C`;

        // Przeliczenie na Kelwiny
        const t1_k = t1_c + kelvinOffset;
        const t2_k = t2_c + kelvinOffset;

        // Obliczenie P2 ze wzoru P2 = P1 * (T2/T1)
        const p2 = P1 * (t2_k / t1_k);
        const diff = (P1 - p2).toFixed(2);

        // Wyświetlenie wyniku
        valP2.innerHTML = `${p2.toFixed(2)} <span class="rk-result-unit">BAR</span>`;

        // Logika komunikatów i kolorów
        if (p2 < P1) {
            alertMsg.innerHTML = `Nocne ochłodzenie powoduje fizyczny spadek o ${diff} bar. <br><strong style="color:#10b981;">Układ uznaje się za szczelny.</strong>`;
            alertMsg.style.borderLeftColor = "#10b981";
        } else if (p2 > P1) {
            const gain = (p2 - P1).toFixed(2);
            alertMsg.innerHTML = `Ogrzanie budynku powoduje rozprężenie gazu i wzrost o ${gain} bar. <br><strong style="color:#0ea5e9;">To normalne zjawisko.</strong>`;
            alertMsg.style.borderLeftColor = "#0ea5e9";
        } else {
            alertMsg.innerHTML = `Brak zmian temperatury otoczenia. <br><strong style="color:#cbd5e1;">Odczyt pozostaje bez zmian.</strong>`;
            alertMsg.style.borderLeftColor = "#cbd5e1";
        }

        // Aktualizacja wysokości słupka rtęci (Termometr)
        // Zakres od -10 do +25 -> 35 jednostek
        const percent = ((t2_c + 10) / 35) * 100;
        // Ograniczenie żeby z wyglądu termometru nie wyszło (min 10%, max 95%)
        const visualHeight = Math.max(10, Math.min(95, percent));
        mercury.style.height = `${visualHeight}%`;
        
        // Zmiana koloru rtęci w zależności od temp
        if(t2_c <= 0) mercury.style.background = "#38bdf8"; // cold blue
        else if (t2_c > 0 && t2_c <= 15) mercury.style.background = "#0d9488"; // teal
        else mercury.style.background = "#f59e0b"; // warm orange
    }

    sliderT1.addEventListener('input', updateSimulation);
    sliderT2.addEventListener('input', updateSimulation);
    
    // Inicjalizacja przy starcie
    updateSimulation();
});
</script>



<style>
:root {
    --rk-step-dark: #0f172a;
    --rk-step-blue: #0284c7;
    --rk-step-blue-light: #e0f2fe;
    --rk-step-green: #10b981;
    --rk-step-border: #e2e8f0;
    --rk-step-bg: #ffffff;
    --rk-step-gray: #64748b;
    --rk-step-muted: #f8fafc;
}

.rk-step-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-step-bg);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--rk-step-border);
    overflow: hidden;
}

.rk-step-header {
    padding: 35px 45px;
    background: linear-gradient(135deg, var(--rk-step-muted) 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-step-border);
}

.rk-step-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-step-blue);
    color: #ffffff;
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.rk-step-title {
    font-size: 26px;
    font-weight: 800;
    color: var(--rk-step-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-step-intro {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin: 0;
}

/* Układ Nawigacji (Stepper) */
.rk-step-nav {
    display: flex;
    overflow-x: auto;
    background: var(--rk-step-muted);
    padding: 20px 45px;
    gap: 15px;
    scrollbar-width: none; /* Firefox */
}
.rk-step-nav::-webkit-scrollbar { display: none; } /* Chrome */

.rk-step-btn {
    flex: 0 0 auto;
    display: flex;
    align-items: center;
    gap: 10px;
    background: #ffffff;
    border: 1px solid var(--rk-step-border);
    padding: 12px 20px;
    border-radius: 12px;
    cursor: pointer;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-step-gray);
    transition: all 0.3s ease;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-step-btn:hover {
    border-color: #bae6fd;
    color: var(--rk-step-blue);
}

.rk-step-btn.active {
    background: var(--rk-step-blue);
    border-color: var(--rk-step-blue);
    color: #ffffff;
    box-shadow: 0 8px 15px -3px rgba(2, 132, 199, 0.3);
}

.rk-step-num {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-step-blue-light);
    color: var(--rk-step-blue);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 900;
}

.rk-step-btn.active .rk-step-num {
    background: #ffffff;
    color: var(--rk-step-blue);
}

/* Pasek Postępu */
.rk-progress-bar {
    height: 4px;
    background: var(--rk-step-border);
    width: 100%;
    position: relative;
}

.rk-progress-fill {
    position: absolute;
    top: 0; left: 0; height: 100%;
    background: var(--rk-step-blue);
    width: 14.28%; /* 1/7 na start */
    transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

/* Obszar Treści */
.rk-step-content-area {
    padding: 45px;
    min-height: 280px;
    position: relative;
}

.rk-step-pane {
    display: none;
    animation: slideUp 0.4s ease forwards;
}

.rk-step-pane.active {
    display: grid;
    grid-template-columns: 100px 1fr;
    gap: 30px;
    align-items: center;
}

@keyframes slideUp {
    from { opacity: 0; transform: translateY(15px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-step-icon-wrapper {
    width: 100px;
    height: 100px;
    background: var(--rk-step-blue-light);
    border-radius: 20px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-step-blue);
}

.rk-pane-title {
    font-size: 22px;
    font-weight: 800;
    color: var(--rk-step-dark);
    margin: 0 0 12px 0;
}

.rk-pane-text {
    font-size: 16px;
    line-height: 1.7;
    color: #475569;
    margin: 0;
}

.rk-pane-text a {
    color: var(--rk-step-blue);
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 600;
}

/* Animacje SVG dla poszczególnych kroków */
.anim-water { animation: pulseWater 2s infinite; }
@keyframes pulseWater { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } }

.anim-bubbles circle { animation: floatUp 2s infinite linear; }
.anim-bubbles circle:nth-child(2) { animation-delay: 0.7s; }
.anim-bubbles circle:nth-child(3) { animation-delay: 1.4s; }
@keyframes floatUp { 0% { transform: translateY(5px); opacity: 0; } 50% { opacity: 1; } 100% { transform: translateY(-15px); opacity: 0; } }

.anim-pump { transform-origin: bottom right; animation: pumpAction 1.5s infinite ease-in-out; }
@keyframes pumpAction { 0%, 100% { transform: rotate(0deg); } 50% { transform: rotate(-15deg); } }

.anim-spin { animation: spinGauge 3s infinite alternate ease-in-out; transform-origin: center; }
@keyframes spinGauge { 0% { transform: rotate(-30deg); } 100% { transform: rotate(30deg); } }

@media (max-width: 768px) {
    .rk-step-header, .rk-step-content-area { padding: 30px 20px; }
    .rk-step-nav { padding: 15px 20px; }
    .rk-step-pane.active { grid-template-columns: 1fr; text-align: center; gap: 20px; }
    .rk-step-icon-wrapper { margin: 0 auto; width: 80px; height: 80px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-procedura",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Procedura krok po kroku: Jak wykonać próbę szczelności wodą?",
    "description": "Inżynierski algorytm wykonywania wodnej próby szczelności ogrzewania podłogowego. 7 kroków od napełniania i odpowietrzania, po test 6 bar i finalny odczyt manometru.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-procedura",
    "name": "Algorytm inżynierski: Wodna próba szczelności krok po kroku",
    "description": "Ustrukturyzowany zbiór danych opisujący procedurę hydrauliczną weryfikacji instalacji podłogowej, wykorzystywany jako standard dla podwykonawców.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jak wykonać próbę szczelności wodą",
      "odpowietrzanie ogrzewania podłogowego krok po kroku",
      "ręczna pompa kontrolna do prób ciśnieniowych",
      "wstępne dobicie ciśnienia rozdzielacz",
      "algorytm próby szczelności podłogówki"
    ],
    "measurementTechnique": "Algorytm sekwencyjny (Krok 1-7) obejmujący napełnianie, deaerację, wstępne naprężanie tworzywa (3 bar) oraz właściwy test hydrometryczny (6 bar / 24h).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        { "@type": "ListItem", "position": 1, "name": "Napełnianie", "description": "Podłączenie węża do zaworu spustowego, rotametry otwarte." },
        { "@type": "ListItem", "position": 2, "name": "Odpowietrzanie", "description": "Indywidualna deaeracja każdej z pętli." },
        { "@type": "ListItem", "position": 3, "name": "Pompa", "description": "Podłączenie pompy kontrolnej do zaworu serwisowego." },
        { "@type": "ListItem", "position": 4, "name": "Wstępne ciśnienie", "description": "3 bar na 30 minut dla weryfikacji połączeń." },
        { "@type": "ListItem", "position": 5, "name": "Próba właściwa", "description": "Dobicie do 6 bar i odcięcie zaworów." },
        { "@type": "ListItem", "position": 6, "name": "Monitoring 24h", "description": "Korekta po 1h i pozostawienie układu na dobę." },
        { "@type": "ListItem", "position": 7, "name": "Odczyt", "description": "Weryfikacja spadku ciśnienia (max do 5.8 bar)." }
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-procedura",
    "name": "Interaktywny Asystent Próby Szczelności",
    "description": "Aplikacja typu stepper, prowadząca instalatora przez 7 kluczowych etapów poprawnego wykonania wodnej próby ciśnieniowej.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-step-container" id="szczelnosc-procedura-app">
    <div class="rk-step-header">
        <div class="rk-step-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Algorytm Inżynierski
        </div>
        <h2 class="rk-step-title">Procedura krok po kroku: Jak wykonać próbę szczelności wodą?</h2>
        <p class="rk-step-intro">
            Jako inżynier HVAC z wieloletnim stażem, opracowałem żelazny algorytm, który stosuję podczas odbiorów w każdym projekcie. Zamiast chaotycznych działań, postępuj zgodnie z poniższą precyzyjną instrukcją metody mokrej.
        </p>
    </div>

    <!-- Stepper Navigation -->
    <div class="rk-step-nav" id="stepNav">
        <button class="rk-step-btn active" data-step="1">
            <div class="rk-step-num">1</div> Napełnianie
        </button>
        <button class="rk-step-btn" data-step="2">
            <div class="rk-step-num">2</div> Odpowietrzanie
        </button>
        <button class="rk-step-btn" data-step="3">
            <div class="rk-step-num">3</div> Pompa
        </button>
        <button class="rk-step-btn" data-step="4">
            <div class="rk-step-num">4</div> Wstępne 3 bar
        </button>
        <button class="rk-step-btn" data-step="5">
            <div class="rk-step-num">5</div> Próba 6 bar
        </button>
        <button class="rk-step-btn" data-step="6">
            <div class="rk-step-num">6</div> Monitoring
        </button>
        <button class="rk-step-btn" data-step="7">
            <div class="rk-step-num">7</div> Odczyt
        </button>
    </div>
    
    <div class="rk-progress-bar">
        <div class="rk-progress-fill" id="stepProgress"></div>
    </div>

    <!-- Content Area -->
    <div class="rk-step-content-area">
        
        <!-- Krok 1 -->
        <div class="rk-step-pane active" id="pane-1">
            <div class="rk-step-icon-wrapper">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="anim-water"><path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"></path></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 1: Napełnianie instalacji</h3>
                <p class="rk-pane-text">
                    Podłączamy elastyczny wąż do zaworu spustowego zlokalizowanego na dolnej belce rozdzielacza. <a href="https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/">Napełniamy pętle wodą</a> powoli i pojedynczo, aby fizycznie wypchnąć zalegające powietrze z rur. <strong>Ważne:</strong> Wszystkie <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametry (przepływomierze)</a> muszą być w tej fazie całkowicie otwarte!
                </p>
            </div>
        </div>

        <!-- Krok 2 -->
        <div class="rk-step-pane" id="pane-2">
            <div class="rk-step-icon-wrapper anim-bubbles">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="2"></circle><circle cx="18" cy="8" r="2"></circle><circle cx="6" cy="6" r="2"></circle><path d="M4 22h16"></path></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 2: Odpowietrzanie</h3>
                <p class="rk-pane-text">
                    Po wstępnym napełnieniu wszystkich obwodów (np. 10 sekcji w standardowym domu 150 m²), przechodzimy do ręcznej deaeracji. Odpowietrzamy każdą z pętli osobno przy pomocy <a href="https://projekt-ogrzewania.pl/objawy-zapowietrzenia-ogrzewania-podlogowego/">zaworów odpowietrzających</a> zintegrowanych na górnej i dolnej belce rozdzielacza.
                </p>
            </div>
        </div>

        <!-- Krok 3 -->
        <div class="rk-step-pane" id="pane-3">
            <div class="rk-step-icon-wrapper">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="anim-pump"><rect x="4" y="10" width="16" height="12" rx="2"></rect><path d="M12 10V4"></path><path d="M8 4h8"></path><path d="M12 15v-2"></path></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 3: Podłączenie pompy</h3>
                <p class="rk-pane-text">
                    Na tym etapie odłączamy wąż wodociągowy i do zaworu serwisowego podłączamy specjalistyczną <strong>ręczną pompę kontrolną</strong> (np. sprawdzony sprzęt marki Rothenberger lub Rems). Pompa ta pozwoli nam na precyzyjne tłoczenie cieczy i zbudowanie odpowiedniego ciśnienia.
                </p>
            </div>
        </div>

        <!-- Krok 4 -->
        <div class="rk-step-pane" id="pane-4">
            <div class="rk-step-icon-wrapper">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 12l-3-3" class="anim-spin"></path></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 4: Wstępne dobicie ciśnienia</h3>
                <p class="rk-pane-text">
                    Za pomocą wajchy pompy podbijamy ciśnienie w układzie do <strong>3 bar</strong>. Zatrzymujemy proces, czekamy około 30 minut i wzrokowo <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">sprawdzamy wszystkie połączenia gwintowane i złączki</a> przy rozdzielaczu. Szukamy wyroszeń (kropli wody).
                </p>
            </div>
        </div>

        <!-- Krok 5 -->
        <div class="rk-step-pane" id="pane-5">
            <div class="rk-step-icon-wrapper">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 12l4-4"></path><path d="M16 8l2-2" stroke="var(--rk-step-green)"></path></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 5: Próba właściwa</h3>
                <p class="rk-pane-text">
                    Gdy mamy pewność, że główne przyłącza są suche, pompujemy dalej – zwiększamy ciśnienie aż do rygorystycznych <strong>6 bar</strong>. Po osiągnięciu i ustabilizowaniu tej wartości bezwzględnie zamykamy zawory kulowe odcinające pompę od instalacji.
                </p>
            </div>
        </div>

        <!-- Krok 6 -->
        <div class="rk-step-pane" id="pane-6">
            <div class="rk-step-icon-wrapper">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 6: Monitoring (24h)</h3>
                <p class="rk-pane-text">
                    Zgodnie z fizyką tworzyw sztucznych, rury rozszerzą się. Dlatego po pierwszej godzinie kontrolnie "dobijamy" ciśnienie z powrotem do 6 bar (kompensacja rozprężenia rur PEX). Od tego momentu pozostawiamy cały układ w spokoju na równe <strong>24 godziny</strong>.
                </p>
            </div>
        </div>

        <!-- Krok 7 -->
        <div class="rk-step-pane" id="pane-7">
            <div class="rk-step-icon-wrapper" style="background: #dcfce7; color: #10b981;">
                <svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
            </div>
            <div>
                <h3 class="rk-pane-title">Krok 7: Finalny odczyt</h3>
                <p class="rk-pane-text">
                    Po upływie doby ponownie podchodzimy do <a href="https://projekt-ogrzewania.pl/produkt/rozdzielacz-ze-stali-nierdzewnej-inox-do-ogrzewania-podlogowego-z-rotametrami/">rozdzielacza</a> i sprawdzamy manometr. Dopuszczalny jest naturalny spadek do poziomu <strong>5,8 bar</strong> (0,2 bara różnicy). Jeśli ciśnienie się mieści w tej normie, a złączki są suche, wynik testu uznajemy za pozytywny!
                </p>
            </div>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków wg wytycznych)
    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('szczelnosc-procedura-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fff1f2; color: #e11d48; border: 1px solid #fda4af; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Naruszenie licencji</div>
                    <div style="font-size: 14px; color: #475569; max-width: 450px; margin: 0 auto;">
                        Moduł "Asystent Krok po Kroku" został skopiowany z Projekt-Ogrzewania.pl. Użycie na obecnej domenie jest zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Steppera
    const buttons = document.querySelectorAll('.rk-step-btn');
    const panes = document.querySelectorAll('.rk-step-pane');
    const progressBar = document.getElementById('stepProgress');
    const totalSteps = buttons.length;

    buttons.forEach(btn => {
        btn.addEventListener('click', function() {
            const stepNum = parseInt(this.getAttribute('data-step'));
            
            // Usunięcie klas 'active' ze wszystkich przycisków i paneli
            buttons.forEach(b => b.classList.remove('active'));
            panes.forEach(p => p.classList.remove('active'));

            // Dodanie klasy 'active' do klikniętego elementu
            this.classList.add('active');
            document.getElementById('pane-' + stepNum).classList.add('active');

            // Aktualizacja paska postępu
            const percentage = (stepNum / totalSteps) * 100;
            progressBar.style.width = percentage + '%';

            // Automatyczne przewijanie nawigacji na mobilkach
            this.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });
        });
    });
});
</script>



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-red: #ef4444;
    --rk-err-red-light: #fef2f2;
    --rk-err-orange: #f97316;
    --rk-err-orange-light: #fff7ed;
    --rk-err-blue: #0284c7;
    --rk-err-gray: #64748b;
    --rk-err-bg: #ffffff;
    --rk-err-border: #e2e8f0;
}

.rk-err-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-err-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -15px rgba(239, 68, 68, 0.15);
    border: 1px solid var(--rk-err-red);
    overflow: hidden;
}

.rk-err-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, var(--rk-err-red-light) 0%, #ffffff 100%);
    border-bottom: 1px solid var(--rk-err-red-light);
    position: relative;
}

.rk-err-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-err-red);
    color: #ffffff;
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    box-shadow: 0 4px 10px rgba(239, 68, 68, 0.3);
}

.rk-err-title {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-err-dark);
    margin: 0 0 15px 0;
    line-height: 1.35;
}

.rk-err-intro {
    font-size: 16px;
    line-height: 1.7;
    color: #334155;
    margin: 0;
}

.rk-err-link {
    color: var(--rk-err-red);
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 700;
    transition: color 0.2s;
}

.rk-err-link:hover { color: #b91c1c; }

/* Siatka kart błędów */
.rk-err-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 20px;
    padding: 35px 45px;
    background: #ffffff;
}

.rk-err-card {
    background: #ffffff;
    border: 1px solid var(--rk-err-border);
    border-radius: 16px;
    padding: 25px;
    position: relative;
    transition: all 0.3s ease;
    display: flex;
    flex-direction: column;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.rk-err-card:hover {
    transform: translateY(-4px);
    border-color: var(--rk-err-orange);
    box-shadow: 0 12px 20px -5px rgba(249, 115, 22, 0.1);
}

.rk-err-icon {
    width: 48px;
    height: 48px;
    background: var(--rk-err-orange-light);
    color: var(--rk-err-orange);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 15px;
}

.rk-err-card-title {
    font-size: 17px;
    font-weight: 800;
    color: var(--rk-err-dark);
    margin: 0 0 10px 0;
}

.rk-err-card-text {
    font-size: 14px;
    color: #475569;
    line-height: 1.6;
    margin: 0;
}

/* Interaktywny Symulator (Zalewanie Jastrychem) */
.rk-err-simulator {
    background: var(--rk-err-dark);
    padding: 40px 45px;
    color: #ffffff;
}

.rk-sim-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    border-bottom: 1px solid rgba(255,255,255,0.1);
    padding-bottom: 15px;
    margin-bottom: 30px;
}

.rk-sim-header h3 {
    margin: 0;
    font-size: 20px;
    font-weight: 800;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-sim-layout {
    display: grid;
    grid-template-columns: 1fr 1.5fr;
    gap: 40px;
    align-items: center;
}

/* Panel sterowania */
.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-sim-btn {
    background: transparent;
    border: 2px solid rgba(255,255,255,0.2);
    color: #94a3b8;
    padding: 16px 20px;
    border-radius: 12px;
    font-size: 15px;
    font-weight: 700;
    cursor: pointer;
    text-align: left;
    display: flex;
    align-items: center;
    gap: 12px;
    transition: all 0.3s;
}

.rk-sim-btn:hover { border-color: rgba(255,255,255,0.4); color: #ffffff; }

.rk-sim-btn.active[data-state="pressure"] {
    background: rgba(16, 185, 129, 0.1);
    border-color: #10b981;
    color: #10b981;
}

.rk-sim-btn.active[data-state="empty"] {
    background: rgba(239, 68, 68, 0.1);
    border-color: #ef4444;
    color: #ef4444;
}

/* Wizualizacja SVG */
.rk-sim-visual {
    background: #1e293b;
    border-radius: 16px;
    padding: 30px;
    position: relative;
    overflow: hidden;
    text-align: center;
    border: 1px solid rgba(255,255,255,0.05);
}

.rk-pipe-svg {
    width: 100%;
    max-width: 220px;
    height: auto;
    overflow: visible;
}

/* Animacje i stany rury */
.pipe-body {
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    transform-origin: center;
}

.pipe-water {
    transition: opacity 0.3s, fill 0.3s;
}

.state-empty .pipe-body {
    transform: scaleY(0.4) translateY(30px);
    fill: #334155;
    stroke: #ef4444;
}
.state-empty .pipe-water { opacity: 0; }

.state-pressure .pipe-body {
    transform: scaleY(1) translateY(0);
    fill: #0ea5e9;
    stroke: #38bdf8;
}
.state-pressure .pipe-water { opacity: 1; fill: #0284c7; }

/* Animacja uderzenia betonu/łopaty */
.impact-force {
    opacity: 0;
    transform: translateY(-20px);
}

.state-empty .impact-force {
    animation: hammerSmash 2s infinite ease-in;
}

.state-pressure .impact-force {
    animation: hammerBounce 2s infinite ease-in;
}

@keyframes hammerSmash {
    0% { opacity: 0; transform: translateY(-30px); }
    40% { opacity: 1; transform: translateY(-5px); }
    50% { opacity: 1; transform: translateY(10px); } /* Zgniecenie */
    100% { opacity: 0; transform: translateY(-30px); }
}

@keyframes hammerBounce {
    0% { opacity: 0; transform: translateY(-30px); }
    40% { opacity: 1; transform: translateY(-5px); }
    50% { opacity: 1; transform: translateY(-15px); } /* Odbicie od twardej rury */
    100% { opacity: 0; transform: translateY(-30px); }
}

.rk-sim-status-text {
    margin-top: 20px;
    font-size: 15px;
    font-weight: 700;
    min-height: 44px;
}

@media (max-width: 768px) {
    .rk-err-header, .rk-err-grid, .rk-err-simulator { padding: 30px 20px; }
    .rk-err-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-sim-layout { grid-template-columns: 1fr; gap: 30px; }
    .rk-sim-header { flex-direction: column; align-items: flex-start; gap: 10px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Najczęstsze błędy podczas próby szczelności – lista ostrzegawcza",
    "description": "Zestawienie krytycznych błędów montażowych: brak kalibracji rur, zbyt krótki test, brudna woda oraz katastrofalne zalewanie wylewką układu bez ciśnienia.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/logo.png"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-bledy",
    "name": "Zestawienie krytycznych błędów montażowych podłogówki",
    "description": "Lista najczęściej powielanych zaniedbań instalacyjnych prowadzących do mikropęknięć rur, zniszczenia armatury oraz uszkodzeń mechanicznych pod jastrychem.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "brak kalibracji rury pex",
      "uszkodzenie rotametrów przez brudną wodę",
      "zalewanie posadzki bez ciśnienia w rurach",
      "mikropęknięcia instalacji grzewczej",
      "najczęstsze błędy próby szczelności"
    ],
    "measurementTechnique": "Analiza mechaniki uszkodzeń rur PEX/PERT podczas prac betoniarskich i wpływu zanieczyszczeń na armaturę pomiarową rozdzielaczy.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Brak kalibracji: Niszczy o-ringi, powoduje pocenie się belek.",
        "Krótki test: Maskuje ukryte mikropęknięcia (wymagane 24h).",
        "Pusta rura przy wylewce: Ryzyko zgniecenia rury przez masę betonu lub uderzenie łopatą.",
        "Zanieczyszczona woda: Trwałe uszkodzenie rotametrów wewnątrz rozdzielacza."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-bledy",
    "name": "Symulator Awarii podczas Wylewki",
    "description": "Interaktywne narzędzie symulujące uszkodzenia mechaniczne rury grzewczej (np. uderzenie łopatą, nacisk masy betonu) w zależności od napełnienia instalacji ciśnieniem ochronnym.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-err-container" id="szczelnosc-bledy-app">
    <div class="rk-err-header">
        <div class="rk-err-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Czarna Lista
        </div>
        <h2 class="rk-err-title">Najczęstsze błędy podczas próby szczelności – lista ostrzegawcza</h2>
        <p class="rk-err-intro">
            Nawet najlepiej zaprojektowana instalacja może zawieść, jeśli na etapie montażu i testów wdarły się zaniedbania. Oto najczęstsze pomyłki wykonawcze, które gwarantują problemy po wylaniu <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/" class="rk-err-link">wylewki betonowej</a>.
        </p>
    </div>

    <!-- Siatka 4 Błędów -->
    <div class="rk-err-grid">
        <div class="rk-err-card">
            <div class="rk-err-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><path d="M14 2v6h6"></path><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            </div>
            <h4 class="rk-err-card-title">Brak kalibracji rur</h4>
            <p class="rk-err-card-text">
                Użycie rury PEX bez kalibratora ścina i niszczy delikatne o-ringi w złączkach rozdzielacza. To absolutnie najczęstsza przyczyna irytującego "pocenia się" belek. Więcej o poprawnym montażu przeczytasz w <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/" style="color:var(--rk-err-dark); font-weight:600;">zestawieniu błędów</a>.
            </p>
        </div>

        <div class="rk-err-card">
            <div class="rk-err-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
            </div>
            <h4 class="rk-err-card-title">Zbyt krótki czas testu</h4>
            <p class="rk-err-card-text">
                Wykonanie próby w zaledwie 30 minut. Pamiętaj, że niektóre nieszczelności (tzw. mikropęknięcia materiałowe) ujawniają się dopiero po kilku godzinach pracy pod stałym obciążeniem 6 barów.
            </p>
        </div>

        <div class="rk-err-card" style="border-color: #fca5a5; background: #fff1f2;">
            <div class="rk-err-icon" style="background: #fef2f2; color: #ef4444;">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
            </div>
            <h4 class="rk-err-card-title" style="color: #b91c1c;">Zalewanie bez ciśnienia</h4>
            <p class="rk-err-card-text" style="color: #7f1d1d;">
                <strong>To błąd krytyczny!</strong> Instalacja podczas zalewania betonem MUSI być napełniona (min. 3 bar). Pusta rura zostanie spłaszczona przez masę wylewki, a uszkodzenia ujdą Twojej uwadze.
            </p>
        </div>

        <div class="rk-err-card">
            <div class="rk-err-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg>
            </div>
            <h4 class="rk-err-card-title">Użycie brudnej wody</h4>
            <p class="rk-err-card-text">
                Napełnianie układu wodą z zapiaszczonej studni potrafi w 10 minut zablokować i trwale uszkodzić <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/" style="color:var(--rk-err-dark); font-weight:600;">rotametry</a> w mosiężnym lub nierdzewnym rozdzielaczu.
            </p>
        </div>
    </div>

    <!-- Symulator uszkodzeń -->
    <div class="rk-err-simulator">
        <div class="rk-sim-header">
            <h3>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#f97316" stroke-width="2"><path d="M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="9" y1="15" x2="15" y2="15"></line></svg>
                Symulator Wylewki: Wpływ uderzeń na rurę PEX
            </h3>
        </div>

        <div class="rk-sim-layout">
            <div class="rk-sim-controls" id="simControls">
                <button class="rk-sim-btn active" data-state="pressure">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    Zalewanie z ciśnieniem (3-6 bar)
                </button>
                <button class="rk-sim-btn" data-state="empty">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                    Zalewanie pustej rury (0 bar)
                </button>
            </div>

            <div class="rk-sim-visual state-pressure" id="simVisual">
                <svg class="rk-pipe-svg" viewBox="0 0 200 150">
                    <!-- Uderzenie/Masa betonu -->
                    <g class="impact-force" stroke="#94a3b8" stroke-width="4" stroke-linecap="round">
                        <line x1="100" y1="10" x2="100" y2="40" />
                        <polyline points="90,30 100,40 110,30" />
                        <text x="115" y="30" fill="#94a3b8" font-size="12" stroke="none">Uderzenie taczki/łopaty</text>
                    </g>
                    
                    <!-- Rura w przekroju -->
                    <ellipse class="pipe-body" cx="100" cy="100" rx="45" ry="45" stroke-width="8" />
                    <!-- Wypełnienie (Woda pod ciśnieniem) -->
                    <ellipse class="pipe-water" cx="100" cy="100" rx="36" ry="36" />
                    
                    <text x="100" y="105" text-anchor="middle" fill="#ffffff" font-size="14" font-weight="bold" class="pipe-water">6 BAR</text>
                </svg>
                
                <div class="rk-sim-status-text" id="simStatusText" style="color: #10b981;">
                    Dzięki ciśnieniu rura jest niezwykle sztywna. Uderzenie łopatą lub nacisk taczki z betonem nie jest w stanie jej zgnieść.
                </div>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków wg wytycznych)
    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('szczelnosc-bledy-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; color: #ef4444; border: 1px dashed #dc2626; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 24px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 14px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Narzędzie Autorskie</div>
                    <div style="font-size: 13px; color: #94a3b8;">
                        Symulator uszkodzeń został zablokowany z powodu użycia na nieautoryzowanej domenie. Własność Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Wylewki
    const simBtns = document.querySelectorAll('.rk-sim-btn');
    const simVisual = document.getElementById('simVisual');
    const simStatusText = document.getElementById('simStatusText');

    simBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Reset active states
            simBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const state = this.getAttribute('data-state');
            
            if (state === 'empty') {
                simVisual.className = 'rk-sim-visual state-empty';
                simStatusText.style.color = '#ef4444';
                simStatusText.innerHTML = "<strong>KATAKLIZM!</strong> Pusta rura ulega spłaszczeniu pod ciężarem betonu. W miejscu uderzenia tworzy się twarde załamanie blokujące przepływ wody.";
            } else {
                simVisual.className = 'rk-sim-visual state-pressure';
                simStatusText.style.color = '#10b981';
                simStatusText.innerHTML = "Dzięki ciśnieniu rura jest niezwykle sztywna. Uderzenie łopatą lub nacisk taczki z betonem odbija się bez uszkadzania powłoki.";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-quote-primary: #0f172a;
    --rk-quote-accent: #0284c7;
    --rk-quote-accent-light: #e0f2fe;
    --rk-quote-danger: #ef4444;
    --rk-quote-bg: #f8fafc;
    --rk-quote-border: #e2e8f0;
}

.rk-expert-wrapper {
    max-width: 950px;
    margin: 50px auto 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
}

.rk-expert-header {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin-bottom: 25px;
}

.rk-expert-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-quote-primary);
    margin: 0;
}

.rk-expert-container {
    background: #ffffff;
    border-radius: 24px;
    padding: 35px 40px;
    display: flex;
    gap: 30px;
    align-items: flex-start;
    border: 1px solid var(--rk-quote-border);
    box-shadow: 0 20px 40px -15px rgba(2, 132, 199, 0.1);
    position: relative;
    overflow: hidden;
}

/* Dekoracyjne tło */
.rk-expert-container::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 6px; height: 100%;
    background: linear-gradient(to bottom, var(--rk-quote-accent), #38bdf8);
}

.rk-expert-container::after {
    content: '”';
    position: absolute;
    top: -20px;
    right: 20px;
    font-family: serif;
    font-size: 140px;
    color: var(--rk-quote-bg);
    line-height: 1;
    z-index: 0;
}

/* Animowane zdjęcie */
.rk-expert-photo-wrap {
    flex-shrink: 0;
    width: 110px;
    height: 110px;
    position: relative;
    z-index: 1;
}

.rk-expert-photo-ring {
    position: absolute;
    top: -5px; left: -5px; right: -5px; bottom: -5px;
    border-radius: 50%;
    border: 2px dashed var(--rk-quote-accent);
    animation: spinRing 10s linear infinite;
}

@keyframes spinRing {
    100% { transform: rotate(360deg); }
}

.rk-expert-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 4px solid #ffffff;
    box-shadow: 0 8px 15px rgba(0,0,0,0.1);
    position: relative;
    z-index: 2;
}

.rk-expert-badge-icon {
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: var(--rk-quote-accent);
    color: #ffffff;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.4);
    z-index: 3;
}

/* Treść cytatu */
.rk-expert-content {
    flex-grow: 1;
    position: relative;
    z-index: 1;
}

.rk-expert-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-quote-accent);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 12px;
    background: var(--rk-quote-accent-light);
    padding: 4px 12px;
    border-radius: 20px;
}

.rk-expert-text {
    font-size: 18px;
    line-height: 1.7;
    color: var(--rk-quote-primary);
    font-style: italic;
    margin: 0 0 15px 0;
    font-weight: 500;
}

.rk-expert-text strong {
    color: var(--rk-quote-accent);
    font-weight: 800;
}

.rk-expert-text a {
    color: var(--rk-quote-primary);
    text-decoration: underline;
    text-decoration-color: var(--rk-quote-accent);
    text-underline-offset: 3px;
    transition: color 0.2s;
}

.rk-expert-text a:hover {
    color: var(--rk-quote-accent);
}

.rk-expert-signature {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    border-top: 1px solid var(--rk-quote-border);
    padding-top: 15px;
    margin-top: 15px;
}

/* Interaktywny Panel Ukryty */
.rk-expert-interactive {
    margin-top: 20px;
}

.rk-expert-btn {
    background: #ffffff;
    border: 2px solid var(--rk-quote-border);
    color: var(--rk-quote-primary);
    padding: 10px 20px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: all 0.3s ease;
}

.rk-expert-btn:hover {
    border-color: var(--rk-quote-accent);
    color: var(--rk-quote-accent);
    background: var(--rk-quote-accent-light);
}

.rk-expert-btn svg {
    transition: transform 0.3s;
}

.rk-expert-btn.active svg {
    transform: rotate(180deg);
}

.rk-expert-data-panel {
    display: none;
    margin-top: 15px;
    padding: 20px;
    background: var(--rk-quote-bg);
    border-radius: 12px;
    border: 1px dashed var(--rk-quote-border);
    animation: fadeInDown 0.4s ease forwards;
}

.rk-expert-data-panel.active {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

@keyframes fadeInDown {
    from { opacity: 0; transform: translateY(-10px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-data-stat {
    text-align: center;
    background: #ffffff;
    padding: 15px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-data-val {
    display: block;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-quote-accent);
    margin-bottom: 5px;
}

.rk-data-lab {
    font-size: 11px;
    color: #64748b;
    text-transform: uppercase;
    font-weight: 700;
}

@media (max-width: 768px) {
    .rk-expert-container { flex-direction: column; text-align: center; padding: 30px 25px; align-items: center; }
    .rk-expert-header h2 { font-size: 22px; text-align: center; }
    .rk-expert-container::before { width: 100%; height: 6px; }
    .rk-expert-data-panel.active { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-cytat",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Robert Kucharski: Beton wybacza wiele, ale nieszczelnej rury nigdy",
    "description": "Ekspercka opinia na temat kluczowej roli 24-godzinnej próby szczelności podłogówki przed wykonaniem wylewki betonowej.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Beton wybacza wiele, ale nieszczelnej rury w podłogówce nigdy. Pominięcie 24-godzinnej próby szczelności przy 6 barach to najdroższy błąd, jaki możesz popełnić na budowie. Jeśli zalejesz nieszczelny układ jastrychem, koszty kucia i suszenia posadzki przekroczą wartość całej instalacji grzewczej o kilkaset procent.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "Inżynier HVAC & 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",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-cytat",
    "name": "Eksperckie parametry graniczne próby ciśnieniowej",
    "description": "Zestawienie inżynierskich wartości bazowych wymaganych do skutecznego przeprowadzenia testu hydrometrycznego w systemach płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "próba szczelności podłogówki cytat",
      "skutki braku próby ciśnieniowej",
      "inżynier hvac robert kucharski",
      "zalanie wylewki bez ciśnienia",
      "awaria rury pod wylewką"
    ],
    "measurementTechnique": "Określenie krytycznych wartości brzegowych weryfikacji instalacji przed wylaniem jastrychu.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wymagane ciśnienie ochronne: 6.0 bar",
        "Minimalny czas weryfikacji: 24h",
        "Dopuszczalna tolerancja spadku: 0.2 bar"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-cytat",
    "name": "Panel Analityczny: Parametry Testowe",
    "description": "Interaktywny interfejs wyświetlający twarde dane liczbowe wynikające z norm hydraulicznych przytoczonych przez inżyniera.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-expert-wrapper" id="rk-expert-quote-app">
    <div class="rk-expert-header">
        <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="var(--rk-quote-accent)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg>
        <h2>Głos Inżyniera</h2>
    </div>
    
    <div class="rk-expert-container">
        <div class="rk-expert-photo-wrap">
            <div class="rk-expert-photo-ring"></div>
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-expert-photo" loading="lazy">
            <div class="rk-expert-badge-icon">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            </div>
        </div>
        
        <div class="rk-expert-content">
            <span class="rk-expert-label">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                Reguła #1 na budowie
            </span>
            <p class="rk-expert-text">
                "Beton wybacza wiele, ale nieszczelnej rury w podłogówce nigdy. Pominięcie 24-godzinnej próby szczelności przy 6 barach to najdroższy błąd, jaki możesz popełnić na etapie stanu surowego. Jeśli zalejesz <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">nieszczelny układ</a> mokrym <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">jastrychem</a>, koszty namierzania wycieku kamerą termowizyjną, kucia oraz suszenia posadzki przekroczą wartość całej instalacji grzewczej o kilkaset procent."
            </p>
            <span class="rk-expert-signature">— Robert Kucharski, Inżynier HVAC Projekt-Ogrzewania.pl</span>
            
            <div class="rk-expert-interactive">
                <button class="rk-expert-btn" id="toggleDataBtn">
                    Rozwiń twarde dane testowe
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </button>
                
                <div class="rk-expert-data-panel" id="expertDataPanel">
                    <div class="rk-data-stat">
                        <span class="rk-data-val">6.0 bar</span>
                        <span class="rk-data-lab">Wymagane ciśnienie</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val">24 h</span>
                        <span class="rk-data-lab">Czas weryfikacji</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-primary);">0.2 bar</span>
                        <span class="rk-data-lab">Tolerancja spadku</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f8fafc; border-radius: 16px; margin-top: 20px; font-family: sans-serif;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a; margin-top:0;">Parametry graniczne weryfikacji (Robert Kucharski):</p>
            <ul style="font-size: 14px; color: #475569; margin-bottom:0;">
                <li>Ciśnienie robocze testu: 6.0 bar</li>
                <li>Czas trwania procedury: 24 godziny</li>
                <li>Dopuszczalna tolerancja (puchnięcie rury): 0.2 bar</li>
            </ul>
        </div>
    </noscript>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak nagłówków H2/H3/H4 w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-expert-quote-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 20px; border: 2px dashed #ef4444;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada bezpieczeństwa</div>
                    <div style="font-size: 14px; color: #7f1d1d;">Cytat inżynierski jest chroniony prawem autorskim serwisu Projekt-Ogrzewania.pl.</div>
                </div>
            `;
            // Usuwamy resztę styli z kontenera by nie zepsuć wyglądu komunikatu
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.boxShadow = 'none';
            return;
        }
    }

    // 2. Interakcja z panelem danych
    const toggleBtn = document.getElementById('toggleDataBtn');
    const dataPanel = document.getElementById('expertDataPanel');

    if (toggleBtn && dataPanel) {
        toggleBtn.addEventListener('click', function() {
            this.classList.toggle('active');
            dataPanel.classList.toggle('active');
            
            if(this.classList.contains('active')) {
                this.innerHTML = `Zwiń dane testowe <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            } else {
                this.innerHTML = `Rozwiń twarde dane testowe <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            }
        });
    }
});
</script>



<style>
:root {
    --rk-cs-primary: #0f172a;
    --rk-cs-accent: #0284c7;
    --rk-cs-panic: #ef4444; /* Kolor błędu/paniki */
    --rk-cs-physics: #10b981; /* Kolor fizyki/sukcesu */
    --rk-cs-bg: #f8fafc;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #475569;
}

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

/* ================= HEADER I METRYCZKA ================= */
.rk-cs-header {
    background: var(--rk-cs-primary);
    color: #ffffff;
    padding: 40px 50px;
    position: relative;
    overflow: hidden;
}

.rk-cs-header::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(2, 132, 199, 0.3) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.2);
    color: #7dd3fc;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.rk-cs-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 25px 0;
    line-height: 1.3;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.rk-cs-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.rk-cs-stat-box {
    background: rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

.rk-cs-label {
    display: block;
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
    letter-spacing: 0.5px;
}

.rk-cs-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= OPIS WYZWANIA ================= */
.rk-cs-content {
    padding: 40px 50px 30px 50px;
    background: #ffffff;
}

.rk-cs-lead {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-cs-text);
    margin: 0 0 20px 0;
}

.rk-cs-lead strong { color: var(--rk-cs-primary); }

.rk-cs-link {
    color: var(--rk-cs-accent);
    text-decoration: underline;
    text-underline-offset: 3px;
    font-weight: 600;
    transition: color 0.2s;
}

.rk-cs-link:hover { color: #0369a1; }

.rk-cs-author-box {
    background: #f0f9ff;
    border-left: 4px solid var(--rk-cs-accent);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 10px;
}

.rk-cs-author-photo {
    width: 52px;
    height: 52px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid #ffffff;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.2);
    flex-shrink: 0;
}

.rk-cs-author-box p {
    margin: 0;
    font-size: 14px;
    color: #0c4a6e;
    line-height: 1.6;
}

/* ================= INTERAKTYWNE WYZWANIE (KARTY) ================= */
.rk-cs-interactive {
    padding: 0 50px 40px 50px;
}

.rk-cs-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.rk-cs-card {
    border-radius: 16px;
    padding: 25px;
    border: 2px solid var(--rk-cs-border);
    cursor: pointer;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    overflow: hidden;
    background: #ffffff;
}

.rk-cs-card:not(.active) {
    opacity: 0.8;
    transform: scale(0.98);
}

.rk-cs-card.panic.active {
    border-color: var(--rk-cs-panic);
    background: #fef2f2;
    box-shadow: 0 10px 25px rgba(239, 68, 68, 0.15);
    opacity: 1;
    transform: scale(1);
}

.rk-cs-card.physics.active {
    border-color: var(--rk-cs-physics);
    background: #ecfdf5;
    box-shadow: 0 10px 25px rgba(16, 185, 129, 0.15);
    opacity: 1;
    transform: scale(1);
}

.rk-card-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 15px;
}

.rk-card-icon {
    width: 42px;
    height: 42px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 12px;
}

.panic .rk-card-icon { background: #fee2e2; color: var(--rk-cs-panic); }
.physics .rk-card-icon { background: #d1fae5; color: var(--rk-cs-physics); }

.rk-card-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-cs-primary);
    margin: 0;
}

.rk-card-desc {
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-cs-text);
    margin: 0;
}

.rk-card-solution {
    margin-top: 20px;
    padding-top: 15px;
    border-top: 1px dashed rgba(0,0,0,0.1);
    font-size: 14px;
    font-weight: 700;
    line-height: 1.6;
    display: none;
}

.rk-cs-card.panic .rk-card-solution { color: #991b1b; }
.rk-cs-card.physics .rk-card-solution { color: #065f46; }

.rk-cs-card.active .rk-card-solution {
    display: block;
    animation: csFadeIn 0.5s ease forwards;
}

@keyframes csFadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

@media (max-width: 768px) {
    .rk-cs-header { padding: 35px 25px; }
    .rk-cs-stats { grid-template-columns: 1fr 1fr; }
    .rk-cs-content { padding: 30px 25px 20px 25px; }
    .rk-cs-interactive { padding: 0 25px 30px 25px; }
    .rk-cs-grid { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Studium Przypadku: Panika Inwestora przy spadku ciśnienia (Zielona Góra)",
    "description": "Case study z Zielonej Góry ilustrujące zachowanie rur PEX podczas wodnej próby szczelności. Wyjaśniamy, jak odróżnić naturalne rozprężanie materiału od faktycznego wycieku.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-casestudy",
    "name": "Parametry Diagnostyczne Zjawiska Spadku Ciśnienia - Zielona Góra",
    "description": "Zestawienie parametrów wejściowych testu ciśnieniowego oraz charakterystyka zachowania polimeru (PEX) pod wpływem obciążenia 6.0 bar w rzeczywistych warunkach budowlanych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "spadek ciśnienia próba szczelności",
      "czy to wyciek w podłogówce",
      "rozprężanie rury PEX 6 bar",
      "ile wody wchodzi w podłogówkę kalkulator",
      "wady ogrzewania podłogowego diagnoza"
    ],
    "measurementTechnique": "Monitoring dynamiki spadku ciśnienia w funkcji czasu (0-2h) dla odróżnienia odkształcenia sprężystego od trwałego defektu mechanicznego.",
    "variableMeasured": [
      { "@type": "PropertyValue", "name": "Lokalizacja testu", "value": "Zielona Góra" },
      { "@type": "PropertyValue", "name": "Powierzchnia", "value": "130 m²" },
      { "@type": "PropertyValue", "name": "Ciśnienie początkowe", "value": "6.0 bar" },
      { "@type": "PropertyValue", "name": "Odczyt po 2h", "value": "5.7 bar (Naturalna faza stabilizacji)" }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-casestudy",
    "name": "Symulator Analizy Przypadku: Diagnoza Spadku Ciśnienia",
    "description": "Interaktywny moduł edukacyjny prezentujący dwa przeciwstawne scenariusze interpretacji odczytów z manometru podczas wodnej próby szczelności.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-cs-module" id="app-case-study">

    <!-- Nagłówek i Metryczka -->
    <div class="rk-cs-header">
        <div class="rk-cs-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            Case Study: Próba z życia wzięta
        </div>
        <h2>Pozorny wyciek, który o mało nie zatrzymał budowy</h2>
        <div class="rk-cs-stats">
            <div class="rk-cs-stat-box">
                <span class="rk-cs-label">Inwestor</span>
                <span class="rk-cs-value">Pan Dawid</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-label">Lokalizacja</span>
                <span class="rk-cs-value">Zielona Góra</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-label">Powierzchnia</span>
                <span class="rk-cs-value">130 m²</span>
            </div>
            <div class="rk-cs-stat-box">
                <span class="rk-cs-label">Parametr Testu</span>
                <span class="rk-cs-value">6.0 Bar (Woda)</span>
            </div>
        </div>
    </div>

    <!-- Opis Wyzwania -->
    <div class="rk-cs-content">
        <p class="rk-cs-lead">W lutym 2026 roku otrzymaliśmy telefon od zaniepokojonego Pana Dawida. Instalator zakończył układanie 130 m² instalacji, precyzyjnie przeliczając pojemność z <a href="https://projekt-ogrzewania.pl/ile-wody-potrzeba-do-wypelnienia-instalacji-podlogowki-kalkulator/" class="rk-cs-link">kalkulatora napełniania podłogówki</a>. Po wbiciu pompy na <strong>6.0 barów</strong> i odczekaniu 2 godzin, manometr bezlitośnie wskazał <strong>5.7 bara</strong>. Ekipa chciała zrywać styropian, szukając "dziury".</p>
        
        <div class="rk-cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-cs-author-photo" loading="lazy">
            <p>Jako inżynier prowadzący nadzór (Robert Kucharski), natychmiast poprosiłem o wstrzymanie prac. Znajomość fizyki tworzyw uchroniła inwestora przed kosztownym chaosem i niepotrzebnym poszukiwaniem <a href="https://projekt-ogrzewania.pl/wady-wodnego-ogrzewania-podlogowego-na-co-zwrocic-uwage-przed-instalacja/" class="rk-cs-link">wad instalacji</a>. Sprawdź, co dokładnie zaszło na budowie:</p>
        </div>
    </div>

    <!-- Interaktywne Diagnozy -->
    <div class="rk-cs-interactive">
        <div class="rk-cs-grid">
            
            <!-- Karta Paniki -->
            <div class="rk-cs-card panic active" id="cs-btn-panic">
                <div class="rk-card-header">
                    <div class="rk-card-icon">
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    </div>
                    <h3 class="rk-card-title">Scenariusz Inwestora</h3>
                </div>
                <p class="rk-card-desc">"Spadek o 0,3 bara w dwie godziny oznacza, że mamy nieszczelność na złączkach lub uszkodzoną rurę! Musimy szukać plamy wody na styropianie."</p>
                <div class="rk-card-solution">
                    Efekt: Strata czasu, niepotrzebny stres i ryzyko rzeczywistego uszkodzenia dobrze ułożonej rury podczas panicznego rozgrzebywania styropianu przez ekipę.
                </div>
            </div>

            <!-- Karta Fizyki -->
            <div class="rk-cs-card physics" id="cs-btn-physics">
                <div class="rk-card-header">
                    <div class="rk-card-icon">
                        <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    </div>
                    <h3 class="rk-card-title">Werdykt Inżyniera</h3>
                </div>
                <p class="rk-card-desc">Tworzywo sztuczne (PEX) poddane uderzeniu ciśnienia 6 bar po prostu "puchnie". Zwiększenie średnicy rury o ułamki milimetra powoduje spadek wskazań manometru.</p>
                <div class="rk-card-solution">
                    Rozwiązanie: Poinstruowaliśmy Pana Dawida, aby dobił ciśnienie ponownie do 6.0 bar (uzupełnienie rozprężenia). Po 24 godzinach zegar pokazał równe 5.9 bar. Układ był w 100% szczelny!
                </div>
            </div>

        </div>
    </div>

</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie domenowe (ściśle bez nagłówków H2/H3)
    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('app-case-study');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; border: 2px dashed #ef4444; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada Praw Autorskich</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #7f1d1d; max-width: 450px; margin-left: auto; margin-right: auto; line-height: 1.5;">
                        To dedykowane Studium Przypadku stanowi własność portalu Projekt-Ogrzewania.pl. Wykryto nieautoryzowaną domenę.
                    </div>
                </div>
            `;
            return;
        }
    }

    // Logika przełączania kart Case Study
    const cardPanic = document.getElementById('cs-btn-panic');
    const cardPhysics = document.getElementById('cs-btn-physics');

    function toggleCards(activeCard, inactiveCard) {
        activeCard.classList.add('active');
        inactiveCard.classList.remove('active');
    }

    if (cardPanic && cardPhysics) {
        cardPanic.addEventListener('click', () => toggleCards(cardPanic, cardPhysics));
        cardPhysics.addEventListener('click', () => toggleCards(cardPhysics, cardPanic));
    }
});
</script>



<style>
:root {
    --rk-faq-dark: #0f172a;
    --rk-faq-blue: #0284c7;
    --rk-faq-blue-light: #f0f9ff;
    --rk-faq-accent: #38bdf8;
    --rk-faq-success: #10b981;
    --rk-faq-warning: #f59e0b;
    --rk-faq-danger: #ef4444;
    --rk-faq-gray: #64748b;
    --rk-faq-border: #e2e8f0;
    --rk-faq-bg: #ffffff;
}

.rk-faq-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-faq-bg);
    border-radius: 20px;
    box-shadow: 0 15px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--rk-faq-border);
    overflow: hidden;
}

.rk-faq-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, var(--rk-faq-dark) 0%, #1e293b 100%);
    color: #ffffff;
    position: relative;
}

.rk-faq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.2);
    color: var(--rk-faq-accent);
    padding: 6px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(56, 189, 248, 0.3);
}

.rk-faq-title {
    font-size: 26px;
    font-weight: 900;
    margin: 0 0 10px 0;
    line-height: 1.3;
}

.rk-faq-desc {
    font-size: 15px;
    color: #94a3b8;
    line-height: 1.6;
    margin: 0;
    max-width: 700px;
}

/* Interaktywny Akordeon FAQ */
.rk-faq-list {
    padding: 30px 45px;
    background: #f8fafc;
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-faq-item {
    background: #ffffff;
    border: 1px solid var(--rk-faq-border);
    border-radius: 16px;
    overflow: hidden;
    transition: all 0.3s ease;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-faq-item.active {
    border-color: var(--rk-faq-blue);
    box-shadow: 0 10px 25px -5px rgba(2, 132, 199, 0.15);
}

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

.rk-faq-question:hover {
    background: var(--rk-faq-blue-light);
}

.rk-faq-q-text {
    display: flex;
    align-items: center;
    gap: 15px;
}

.rk-faq-icon-svg {
    width: 32px;
    height: 32px;
    border-radius: 8px;
    background: #f1f5f9;
    color: var(--rk-faq-gray);
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    transition: all 0.4s ease;
}

.rk-faq-item.active .rk-faq-icon-svg {
    background: var(--rk-faq-blue);
    color: #ffffff;
    transform: rotateY(180deg);
}

.rk-faq-chevron {
    width: 24px;
    height: 24px;
    color: var(--rk-faq-gray);
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-item.active .rk-faq-chevron {
    transform: rotate(180deg);
    color: var(--rk-faq-blue);
}

/* Odpowiedź z animacją */
.rk-faq-answer-wrapper {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-answer {
    padding: 0 25px 25px 72px; /* Margines wyrównany do tekstu pytania */
}

.rk-faq-answer p {
    margin: 0 0 15px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

.rk-faq-answer p:last-child {
    margin-bottom: 0;
}

.rk-faq-answer strong {
    color: var(--rk-faq-dark);
    font-weight: 700;
}

.rk-faq-link {
    color: var(--rk-faq-blue);
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-faq-blue);
    font-weight: 600;
    transition: all 0.2s ease;
}

.rk-faq-link:hover {
    color: #0369a1;
    border-bottom-style: solid;
    background: var(--rk-faq-blue-light);
}

.rk-faq-highlight {
    background: var(--rk-faq-blue-light);
    border-left: 3px solid var(--rk-faq-blue);
    padding: 12px 15px;
    border-radius: 0 8px 8px 0;
    font-size: 14px;
    color: #0369a1;
    font-weight: 600;
    margin-top: 15px;
    display: flex;
    align-items: center;
    gap: 10px;
}

@media (max-width: 768px) {
    .rk-faq-header, .rk-faq-list { padding: 30px 20px; }
    .rk-faq-question { padding: 15px; font-size: 15px; }
    .rk-faq-answer { padding: 0 15px 20px 15px; }
    .rk-faq-q-text { gap: 10px; }
    .rk-faq-icon-svg { width: 28px; height: 28px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "FAQ – Próba szczelności ogrzewania podłogowego. Najczęstsze pytania.",
    "description": "Rozwiązania problemów ze spadkiem ciśnienia, wymogi producentów pomp ciepła oraz zasady weryfikacji naturalnego rozprężania rur PEX. Baza wiedzy eksperta.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-faq",
    "name": "Baza Wiedzy Diagnostycznej (FAQ Ogrzewania Podłogowego)",
    "description": "Zestawienie najczęstszych pytań i eksperckich odpowiedzi dotyczących diagnostyki hydrometrycznej instalacji płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "co zrobić gdy ciśnienie spada w podłogówce",
      "czy można wykonać próbę szczelności po wylewce",
      "protokół szczelności a gwarancja pompy ciepła",
      "powietrze w rurach ogrzewania podłogowego",
      "jak odróżnić wyciek od rozprężania rury"
    ],
    "measurementTechnique": "Algorytmy diagnostyczne (np. weryfikacja spadków nieliniowych vs liniowych) i procedury gwarancyjne oparte na odczytach manometrycznych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Test po wylewce jest bezcelowy, nie wskaże lokalizacji awarii.",
        "Spadek 0,5 bar to sygnał do natychmiastowej inspekcji pianką detekcyjną.",
        "Protokół jest bezwzględnie wymagany do zachowania gwarancji na pompę ciepła.",
        "Powietrze w układzie zakłamuje wyniki z powodu ściśliwości gazu."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-faq",
    "name": "Interaktywny Asystent FAQ",
    "description": "Dynamiczny akordeon z bazą wiedzy, umożliwiający inwestorom szybkie odnajdywanie rozwiązań technicznych dotyczących prób ciśnieniowych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-faq-container" id="szczelnosc-faq-app">
    <div class="rk-faq-header">
        <div class="rk-faq-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Baza Wiedzy Eksperta
        </div>
        <h2 class="rk-faq-title">FAQ – Próba szczelności ogrzewania podłogowego</h2>
        <p class="rk-faq-desc">
            Instalacja grzewcza rodzi wiele technicznych pytań. Poniżej zebrałem najczęstsze wątpliwości inwestorów i instalatorów, z którymi spotykam się na co dzień. Kliknij pytanie, aby poznać sprawdzoną, inżynierską odpowiedź.
        </p>
    </div>

    <div class="rk-faq-list">
        
        <!-- Pytanie 1 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <span class="rk-faq-q-text">
                    <span class="rk-faq-icon-svg">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
                    </span>
                    1. Czy można wykonać próbę szczelności po wylewce?
                </span>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer">
                    <p><strong>Zdecydowanie nie.</strong> Wykonanie testu po zalaniu betonu mija się z prawami fizyki i logiką inżynierską. Nadrzędnym celem tej procedury jest wykrycie i usunięcie słabych punktów, gdy <a href="https://projekt-ogrzewania.pl/rury-do-ogrzewania-podlogowego/" class="rk-faq-link">rury grzewcze</a> są jeszcze całkowicie odsłonięte.</p>
                    <p>Po związaniu jastrychu, test potwierdzi jedynie, że system jest uszkodzony, ale nie pozwoli na zlokalizowanie nieszczelności bez użycia drogich kamer termowizyjnych. Naprawa w takim scenariuszu wymusza skuwanie betonu, co wiąże się z gigantycznymi kosztami.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 2 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <span class="rk-faq-q-text">
                    <span class="rk-faq-icon-svg">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    </span>
                    2. Co zrobić, gdy ciśnienie spadnie o 0,5 bar w ciągu godziny?
                </span>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer">
                    <p><strong>Zatrzymaj test i natychmiast rozpocznij inspekcję.</strong> Taki ubytek to wyraźny sygnał alarmowy wskazujący na faktyczną nieszczelność, a nie naturalne rozszerzenie rur.</p>
                    <p>W pierwszej kolejności spryskaj wszystkie gwinty i złączki przy <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-ogrzewania-podlogowego-mosiezny-czy-ze-stali-nierdzewnej/" class="rk-faq-link">rozdzielaczu</a> wodą z mydłem lub profesjonalnym sprayem detekcyjnym. Jeśli złącza są suche, błąd leży w obrębie wężownicy. Szukaj załamań rury, śladów po gwoździach lub upadku narzędzi na styropian.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 3 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <span class="rk-faq-q-text">
                    <span class="rk-faq-icon-svg">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                    </span>
                    3. Czy protokół jest potrzebny do gwarancji pompy ciepła?
                </span>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer">
                    <p><strong>Tak, to bezwzględny wymóg producentów.</strong> Znakomita większość marek HVAC wymaga dołączenia kopii protokołu odbiorczego bezpośrednio do karty gwarancyjnej jednostki centralnej.</p>
                    <p>Bez tego dokumentu, w przypadku awarii (np. pęknięcia wymiennika w <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" class="rk-faq-link">pompie ciepła</a> przez ciągłe dopełnianie układu twardą wodą z powodu ukrytej nieszczelności), autoryzowany serwis z dużym prawdopodobieństwem odrzuci Twoje roszczenie o bezpłatną naprawę.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 4 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <span class="rk-faq-q-text">
                    <span class="rk-faq-icon-svg">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg>
                    </span>
                    4. Czy powietrze w rurach wpływa na wynik próby wodnej?
                </span>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer">
                    <p><strong>Tak, ma ogromny, negatywny wpływ.</strong> Pęcherze powietrza, w przeciwieństwie do gęstej struktury cieczy, są silnie ściśliwe i podatne na zmiany termiczne otoczenia.</p>
                    <p>Nawet idealnie szczelna instalacja z zalegającym powietrzem będzie generować fałszywe, niestabilne odczyty manometru (często określane jako "pływające ciśnienie"). Dlatego rygorystyczne <a href="https://projekt-ogrzewania.pl/objawy-zapowietrzenia-ogrzewania-podlogowego/" class="rk-faq-link">odpowietrzenie podłogówki</a> sekcja po sekcji jest warunkiem rozpoczęcia testów.</p>
                </div>
            </div>
        </div>

        <!-- Pytanie 5 (Dodane) -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <span class="rk-faq-q-text">
                    <span class="rk-faq-icon-svg">
                        <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline></svg>
                    </span>
                    5. Jak odróżnić naturalny spadek ciśnienia od wycieku?
                </span>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer">
                    <p>Rury z tworzyw sztucznych (np. PEX/PERT) wykazują pamięć kształtu i naturalną elastyczność. Po nałożeniu agresywnego ciśnienia (6 bar) w pierwszych 2-3 godzinach <strong>rura minimalnie powiększa swoją objętość (puchnie)</strong>. W efekcie manometr wskazuje spadek rzędu 0,2 – 0,3 bara. </p>
                    <p>To zjawisko samoistnie zanika (wykres staje się nieliniowy i wypłaszcza się). Jeśli jednak po kilkukrotnym wyrównaniu ciśnienia pompą, spadek powtarza się w sposób ciągły i liniowy (np. spada o 0,1 bara równo co 30 minut) – masz do czynienia z <strong>twardym wyciekiem</strong>.</p>
                    
                    <div class="rk-faq-highlight">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
                        Wskazówka: Przed wylaniem jastrychu daj rurom czas na tzw. "zrelaksowanie się" po nabiciu kompresorem.
                    </div>
                </div>
            </div>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków wg wytycznych)
    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('szczelnosc-faq-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; color: #f87171; border: 1px dashed #dc2626; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 24px; margin-bottom: 10px;">🛑</div>
                    <div style="font-size: 14px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Nieautoryzowane użycie</div>
                    <div style="font-size: 13px; color: #94a3b8;">
                        Baza Wiedzy FAQ stanowi własność Projekt-Ogrzewania.pl. Skrypt zabezpieczający przerwał jej renderowanie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Akordeonu
    const faqItems = document.querySelectorAll('.rk-faq-item');

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

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

            // Zamykamy wszystkie pozostałe (opcjonalne, ale daje ładny efekt UX)
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.rk-faq-question').setAttribute('aria-expanded', 'false');
                otherItem.querySelector('.rk-faq-answer-wrapper').style.maxHeight = null;
            });

            // Jeśli nie był aktywny, otwieramy go
            if (!isActive) {
                item.classList.add('active');
                button.setAttribute('aria-expanded', 'true');
                answerWrapper.style.maxHeight = answerWrapper.scrollHeight + "px";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-sum-dark: #0f172a;
    --rk-sum-blue: #0284c7;
    --rk-sum-light-blue: #f0f9ff;
    --rk-sum-green: #10b981;
    --rk-sum-green-light: #dcfce7;
    --rk-sum-red: #ef4444;
    --rk-sum-gold: #eab308;
    --rk-sum-gray: #64748b;
    --rk-sum-border: #e2e8f0;
    --rk-sum-bg: #ffffff;
}

.rk-sum-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-sum-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-sum-blue);
    overflow: hidden;
}

/* Sekcja Nagłówkowa i Cytat */
.rk-sum-header {
    padding: 45px 50px 35px;
    background: linear-gradient(135deg, var(--rk-sum-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: center;
    position: relative;
}

.rk-sum-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.3);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.2);
}

.rk-sum-quote-box {
    position: relative;
    max-width: 700px;
    margin: 0 auto;
}

.rk-sum-quote-mark {
    font-size: 80px;
    color: rgba(255,255,255,0.1);
    position: absolute;
    top: -30px;
    left: -20px;
    line-height: 1;
    font-family: serif;
}

.rk-sum-quote-text {
    font-size: 22px;
    font-weight: 800;
    line-height: 1.4;
    color: #ffffff;
    margin: 0 0 15px 0;
    position: relative;
    z-index: 1;
}

.rk-sum-author {
    font-size: 14px;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 2px;
    font-weight: 700;
}

.rk-sum-author span { color: var(--rk-sum-gold); }

/* Interaktywny Symulator Decyzji */
.rk-sum-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-decision-wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-sum-border);
    border-radius: 20px;
    padding: 10px;
    margin-bottom: 30px;
}

.rk-decision-btn {
    padding: 20px;
    border-radius: 16px;
    border: 2px solid transparent;
    background: transparent;
    cursor: pointer;
    transition: all 0.3s ease;
    text-align: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 12px;
}

.rk-decision-btn:hover { background: #f1f5f9; }

.rk-decision-btn.active[data-choice="pro"] {
    background: var(--rk-sum-green-light);
    border-color: var(--rk-sum-green);
    box-shadow: 0 10px 20px -5px rgba(16, 185, 129, 0.2);
}

.rk-decision-btn.active[data-choice="amateur"] {
    background: #fef2f2;
    border-color: var(--rk-sum-red);
    box-shadow: 0 10px 20px -5px rgba(239, 68, 68, 0.2);
}

.rk-decision-icon {
    width: 48px;
    height: 48px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #e2e8f0;
    color: #64748b;
    transition: all 0.3s;
}

.rk-decision-btn.active[data-choice="pro"] .rk-decision-icon {
    background: var(--rk-sum-green);
    color: #ffffff;
}

.rk-decision-btn.active[data-choice="amateur"] .rk-decision-icon {
    background: var(--rk-sum-red);
    color: #ffffff;
}

.rk-decision-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-sum-dark);
    margin: 0;
}

/* Wynik symulacji */
.rk-sim-result {
    display: grid;
    grid-template-columns: 150px 1fr;
    gap: 30px;
    align-items: center;
    padding: 30px;
    background: #ffffff;
    border-radius: 16px;
    border: 1px solid var(--rk-sum-border);
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-anim-svg {
    width: 100%;
    height: auto;
    max-width: 120px;
    margin: 0 auto;
}

.anim-shield {
    transform-origin: center;
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.state-pro .anim-shield { fill: var(--rk-sum-green); stroke: #047857; animation: pulseShield 2s infinite; }
.state-amateur .anim-shield { fill: transparent; stroke: var(--rk-sum-red); stroke-dasharray: 10 10; animation: shatterShield 0.5s forwards; }

@keyframes pulseShield {
    0% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0.4)); }
    50% { filter: drop-shadow(0 0 15px rgba(16, 185, 129, 0.8)); transform: scale(1.05); }
    100% { filter: drop-shadow(0 0 0 rgba(16, 185, 129, 0.4)); }
}

@keyframes shatterShield {
    to { stroke-dashoffset: 100; opacity: 0.5; transform: scale(0.9) rotate(-10deg); }
}

.rk-result-content h4 {
    margin: 0 0 10px 0;
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-sum-dark);
}

.rk-result-content p {
    margin: 0 0 15px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #475569;
}

.rk-result-content a {
    color: var(--rk-sum-blue);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* Mocne CTA */
.rk-sum-cta-box {
    padding: 45px 50px;
    background: #ffffff;
    text-align: center;
    border-top: 1px solid var(--rk-sum-border);
}

.rk-sum-cta-title {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-sum-dark);
    margin: 0 0 15px 0;
}

.rk-sum-cta-text {
    font-size: 16px;
    color: #64748b;
    margin: 0 auto 30px auto;
    max-width: 600px;
    line-height: 1.6;
}

.rk-btn-massive {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-sum-blue);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 40px;
    border-radius: 16px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(2, 132, 199, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    border: 2px solid transparent;
}

.rk-btn-massive:hover {
    transform: translateY(-5px);
    background: #0369a1;
    box-shadow: 0 20px 35px -5px rgba(2, 132, 199, 0.5);
    border-color: #7dd3fc;
}

.rk-btn-massive svg {
    transition: transform 0.3s;
}

.rk-btn-massive:hover svg {
    transform: translateX(5px);
}

@media (max-width: 768px) {
    .rk-sum-header, .rk-sum-interactive, .rk-sum-cta-box { padding: 35px 25px; }
    .rk-decision-wrapper { grid-template-columns: 1fr; gap: 10px; }
    .rk-sim-result { grid-template-columns: 1fr; text-align: center; padding: 25px; }
    .rk-anim-svg { max-width: 80px; }
    .rk-sum-quote-text { font-size: 18px; }
    .rk-btn-massive { width: 100%; padding: 16px 20px; font-size: 16px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Podsumowanie – Inwestycja w 24 godziny spokoju",
    "description": "Próba szczelności i profesjonalny projekt OZC to fundament niezawodnej podłogówki. Zobacz, jak inżynierski standard chroni przed kosztownymi awariami.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-podsumowanie",
    "name": "Wskaźnik Bezpieczeństwa Instalacji Płaszczyznowej (ROI)",
    "description": "Zestawienie techniczno-ekonomiczne porównujące inwestycję w profesjonalny projekt i próbę szczelności z kosztami usunięcia awarii po wylaniu posadzki.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "koszt awarii ogrzewania podłogowego",
      "profesjonalny projekt podłogówki",
      "obliczenia OZC",
      "standardy montażu",
      "bezpieczeństwo hydrauliczne"
    ],
    "measurementTechnique": "Porównanie kosztów prewencji (projekt + próba ciśnieniowa) do kosztów naprawy awaryjnej (kucie jastrychu).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Standard Inżynierski: Wymaga projektu OZC, dokumentacji technicznej i 24-godzinnego testu 6 bar.",
        "Ryzyko Amatorskie: Instalacja robiona z pamięci, brak rzetelnego protokołu z testów."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-podsumowanie",
    "name": "Symulator Standardu Inżynierskiego",
    "description": "Narzędzie interaktywne demonstrujące różnice w bezpieczeństwie i trwałości instalacji pomiędzy profesjonalnym montażem a rozwiązaniami amatorskimi.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-sum-container" id="szczelnosc-sum-app">
    <!-- Nagłówek i Cytat -->
    <div class="rk-sum-header">
        <div class="rk-sum-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Podsumowanie
        </div>
        <div class="rk-sum-quote-box">
            <div class="rk-sum-quote-mark">"</div>
            <p class="rk-sum-quote-text">
                Próba szczelności ogrzewania podłogowego to najważniejsze 24 godziny w całym procesie montażu systemu grzewczego. Beton wybacza wiele, ale nieszczelnej rury nigdy.
            </p>
            <div class="rk-sum-author">
                <span>Robert Kucharski</span> | Inżynier HVAC
            </div>
        </div>
    </div>

    <!-- Symulator Standardu -->
    <div class="rk-sum-interactive">
        <div class="rk-decision-wrapper" id="simDecisions">
            <button class="rk-decision-btn active" data-choice="pro">
                <div class="rk-decision-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                </div>
                <h4 class="rk-decision-title">Standard Inżynierski</h4>
            </button>
            <button class="rk-decision-btn" data-choice="amateur">
                <div class="rk-decision-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                </div>
                <h4 class="rk-decision-title">Wykonawstwo "na oko"</h4>
            </button>
        </div>

        <div class="rk-sim-result state-pro" id="simResultBox">
            <svg class="rk-anim-svg" viewBox="0 0 100 100">
                <path class="anim-shield" d="M50 10 L10 25 L10 50 C10 75 40 90 50 95 C60 90 90 75 90 50 L90 25 Z" stroke-width="4" stroke-linejoin="round"/>
                <polyline class="anim-check" points="35 50 45 60 70 35" fill="none" stroke="#ffffff" stroke-width="6" stroke-linecap="round" stroke-linejoin="round" />
            </svg>
            <div class="rk-result-content" id="simResultContent">
                <h4 style="color: var(--rk-sum-green);">Absolutny spokój hydrauliczny</h4>
                <p>Wykonanie testu ciśnieniem 6 bar, udokumentowanie go rzetelnym protokołem i pozostawienie instalacji pod ciśnieniem na czas zalewania to standard, który <strong>oddziela profesjonalistów od amatorów</strong>.</p>
                <p>Pamiętaj, że fundamentem sukcesu jest <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">profesjonalny projekt ogrzewania podłogowego</a> oparty na <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczeniach OZC</a>. To on definiuje bezbłędny system.</p>
            </div>
        </div>
    </div>

    <!-- Mocne CTA -->
    <div class="rk-sum-cta-box">
        <h3 class="rk-sum-cta-title">Twoja podłoga ma grzać przez dekady</h3>
        <p class="rk-sum-cta-text">
            Nie pozwól, aby błędy montażowe zniszczyły Twój dom. Zbuduj swoją wiedzę, poznaj zaawansowane inżynierskie triki, tabele i normy, które uchronią Twój budżet przed katastrofą budowlaną.
        </p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-massive">
            PRZEJDŹ DO BAZY WIEDZY EKSKLUZYWNEJ
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi - brak nagłówków H2/H3)
    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('szczelnosc-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener podsumowujący oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Decyzji
    const btns = document.querySelectorAll('.rk-decision-btn');
    const resultBox = document.getElementById('simResultBox');
    const resultContent = document.getElementById('simResultContent');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zmiana aktywnych przycisków
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const choice = this.getAttribute('data-choice');

            // Aktualizacja wizualizacji
            if (choice === 'pro') {
                resultBox.className = 'rk-sim-result state-pro';
                resultContent.innerHTML = `
                    <h4 style="color: var(--rk-sum-green);">Absolutny spokój hydrauliczny</h4>
                    <p>Wykonanie testu ciśnieniem 6 bar, udokumentowanie go rzetelnym protokołem i pozostawienie instalacji pod ciśnieniem na czas zalewania to standard, który <strong>oddziela profesjonalistów od amatorów</strong>.</p>
                    <p>Pamiętaj, że fundamentem sukcesu jest <a href="https://projekt-ogrzewania.pl/jak-powinien-wygladac-profesjonalny-projekt-do-ogrzewania-podlogowego/">profesjonalny projekt ogrzewania podłogowego</a> oparty na <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczeniach OZC</a>. To on definiuje bezbłędny system.</p>
                `;
                resultBox.querySelector('.anim-check').style.display = 'block';
            } else {
                resultBox.className = 'rk-sim-result state-amateur';
                resultContent.innerHTML = `
                    <h4 style="color: var(--rk-sum-red);">Walka z wyciekami po wylewce</h4>
                    <p>Brak projektu i testów to przysłowiowa gra w ruletkę. Rury łączone z pamięci, "na oko", bez dokumentacji technicznej i kalibracji niemal zawsze kończą się awarią.</p>
                    <p>Jeśli zrezygnujesz z weryfikacji przy ciśnieniu <a href="https://projekt-ogrzewania.pl/ile-kosztuje-projekt-ogrzewania-podlogowego/" style="color: var(--rk-sum-red);">normatywnym</a>, ubezpieczyciel odrzuci wniosek po zalaniu, a poprawki pochłoną 300% wartości instalacji.</p>
                `;
                resultBox.querySelector('.anim-check').style.display = 'none';
            }
        });
    });
});
</script>



<style>
:root {
    --rk-doc-dark: #0f172a;
    --rk-doc-blue: #0284c7;
    --rk-doc-blue-light: #f0f9ff;
    --rk-doc-green: #10b981;
    --rk-doc-green-light: #dcfce7;
    --rk-doc-gray: #64748b;
    --rk-doc-bg: #ffffff;
    --rk-doc-border: #e2e8f0;
    --rk-doc-accent: #3b82f6;
}

.rk-doc-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-doc-bg);
    border-radius: 24px;
    box-shadow: 0 15px 40px -10px rgba(2, 132, 199, 0.1);
    border: 1px solid var(--rk-doc-border);
    overflow: hidden;
}

.rk-doc-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, #ffffff 0%, var(--rk-doc-blue-light) 100%);
    border-bottom: 1px solid var(--rk-doc-border);
}

.rk-doc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--rk-doc-blue);
    color: #ffffff;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.3);
}

.rk-doc-title {
    font-size: 28px;
    font-weight: 800;
    color: var(--rk-doc-dark);
    margin: 0 0 15px 0;
    line-height: 1.35;
}

.rk-doc-text {
    font-size: 16px;
    line-height: 1.8;
    color: #334155;
    margin: 0;
}

.rk-doc-link {
    color: var(--rk-doc-accent);
    text-decoration: underline;
    text-underline-offset: 4px;
    font-weight: 700;
    transition: color 0.2s;
}

.rk-doc-link:hover { color: #1d4ed8; }

/* Interaktywny podgląd dokumentów */
.rk-doc-interactive {
    padding: 0;
    background: #f8fafc;
    display: flex;
    flex-direction: column;
}

.rk-doc-tabs {
    display: flex;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-doc-border);
}

.rk-doc-tab {
    flex: 1;
    padding: 20px;
    text-align: center;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-doc-gray);
    cursor: pointer;
    background: transparent;
    border: none;
    border-bottom: 3px solid transparent;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-doc-tab:hover {
    color: var(--rk-doc-dark);
    background: #f1f5f9;
}

.rk-doc-tab.active {
    color: var(--rk-doc-blue);
    border-bottom-color: var(--rk-doc-blue);
    background: var(--rk-doc-blue-light);
}

.rk-doc-workspace {
    padding: 40px 45px;
    display: grid;
    grid-template-columns: 1fr 300px;
    gap: 40px;
    align-items: start;
}

/* Karta Dokumentu */
.rk-paper {
    background: #ffffff;
    border: 1px solid var(--rk-doc-border);
    border-radius: 8px;
    padding: 30px;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
    position: relative;
    display: none;
    animation: fadePaper 0.4s ease-out;
}

.rk-paper.active { display: block; }

@keyframes fadePaper {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-paper-header {
    text-align: center;
    border-bottom: 2px solid var(--rk-doc-dark);
    padding-bottom: 15px;
    margin-bottom: 20px;
}

.rk-paper-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-doc-dark);
    margin: 0;
    text-transform: uppercase;
}

.rk-paper-row {
    display: flex;
    justify-content: space-between;
    padding: 8px 0;
    border-bottom: 1px dashed var(--rk-doc-border);
    font-size: 13px;
    color: #475569;
}

.rk-paper-row strong { color: var(--rk-doc-dark); }

.rk-paper-highlight {
    background: var(--rk-doc-green-light);
    color: var(--rk-doc-green);
    padding: 2px 6px;
    border-radius: 4px;
    font-weight: 800;
}

.rk-paper-blank {
    color: #cbd5e1;
    font-style: italic;
}

/* Panel pobierania */
.rk-dl-panel {
    background: #ffffff;
    border: 1px solid var(--rk-doc-border);
    border-radius: 16px;
    padding: 25px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.02);
}

.rk-dl-title {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-doc-dark);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-dl-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    width: 100%;
    padding: 14px 20px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 800;
    text-decoration: none;
    transition: all 0.3s ease;
    margin-bottom: 15px;
    border: 2px solid transparent;
}

.btn-primary {
    background: var(--rk-doc-blue);
    color: #ffffff;
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.3);
}

.btn-primary:hover {
    background: #0369a1;
    transform: translateY(-2px);
}

.btn-outline {
    background: transparent;
    color: var(--rk-doc-dark);
    border-color: var(--rk-doc-border);
}

.btn-outline:hover {
    border-color: var(--rk-doc-blue);
    color: var(--rk-doc-blue);
    background: var(--rk-doc-blue-light);
}

.rk-dl-meta {
    font-size: 11px;
    color: #94a3b8;
    text-align: center;
    margin: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
}

@media (max-width: 768px) {
    .rk-doc-header { padding: 30px 20px; }
    .rk-doc-tabs { flex-direction: column; }
    .rk-doc-tab { border-bottom: 1px solid var(--rk-doc-border); }
    .rk-doc-tab.active { border-left: 4px solid var(--rk-doc-blue); border-bottom: 1px solid var(--rk-doc-border); }
    .rk-doc-workspace { grid-template-columns: 1fr; padding: 30px 20px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-protokol",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Protokół próby szczelności ogrzewania podłogowego – darmowy wzór PDF",
    "description": "Pobierz darmowy wzór protokołu próby szczelności instalacji ogrzewania podłogowego w formacie PDF. Sprawdź poprawnie wypełniony przykład dla domu 200 m².",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-03-07",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-protokol",
    "name": "Wzór protokołu próby ciśnieniowej ogrzewania podłogowego PEX",
    "description": "Dokumentacja prawno-techniczna stanowiąca załącznik odbiorowy instalacji płaszczyznowej, wymagana przez ubezpieczycieli i producentów pomp ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "protokół próby szczelności ogrzewania podłogowego wzór pdf",
      "jak wypełnić protokół szczelności instalacji",
      "dokument odbioru ogrzewania podłogowego",
      "spadek ciśnienia na protokole PEX",
      "odbiór instalacji z pompą ciepła"
    ],
    "measurementTechnique": "Formalna ewidencja wartości początkowych (np. 6 bar), końcowych oraz różnicy ciśnień w 24-godzinnym interwale pomiarowym zgodnie z normą PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dane ogólne instalacji: powierzchnia, liczba pętli, rodzaj rozdzielacza.",
        "Warunki testu: data rozpoczęcia, czas trwania (24h), medium próbne.",
        "Wyniki pomiarowe: ciśnienie początkowe, końcowe i obliczony spadek."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-protokol",
    "name": "Wirtualna Przeglądarka Protokołów Odbioru",
    "description": "Interaktywny interfejs umożliwiający podgląd pustego formularza oraz poprawnie wypełnionego protokołu testu przed pobraniem plików PDF.",
    "applicationCategory": "BusinessApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-doc-container" id="szczelnosc-doc-app">
    <div class="rk-doc-header">
        <div class="rk-doc-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            Dokumentacja Odbiorcza
        </div>
        <h2 class="rk-doc-title">Protokół próby szczelności instalacji – pobierz darmowy wzór PDF</h2>
        <p class="rk-doc-text">
            Słowa instalatora "panie, będzie trzymać" nie mają żadnej wartości prawnej. Prawidłowo wypełniony <strong>protokół próby ciśnieniowej</strong> to Twoja jedyna tarcza w przypadku awarii[cite: 1, 2]. Ubezpieczyciele bezwzględnie go wymagają przed wypłatą odszkodowania, a producenci uzależniają od niego gwarancję na sprzęt (np. wyliczając <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/" class="rk-doc-link">koszty ogrzewania</a> i efektywność pompy ciepła). Poniżej przygotowałem dla Ciebie czysty formularz oraz autorski <a href="https://projekt-ogrzewania.pl/produkt/projekt-ogrzewania-podlogowego-do-200-m2/" class="rk-doc-link">przykład dla inwestycji 200 m²</a>.
        </p>
    </div>

    <div class="rk-doc-interactive">
        <div class="rk-doc-tabs">
            <button class="rk-doc-tab active" data-target="paper-blank">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                Pusty formularz (Wzór)
            </button>
            <button class="rk-doc-tab" data-target="paper-filled">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                Wypełniony przykład (200 m²)
            </button>
        </div>

        <div class="rk-doc-workspace">
            <!-- Podgląd: Pusty -->
            <div class="rk-paper active" id="paper-blank">
                <div class="rk-paper-header">
                    <h3 class="rk-paper-title">PROTOKÓŁ PRÓBY SZCZELNOŚCI</h3>
                    <div style="font-size: 11px; color: #94a3b8; margin-top: 5px;">INSTALACJI OGRZEWANIA PODŁOGOWEGO</div>
                </div>
                <div class="rk-paper-row">
                    <span>Miejscowość / Data:</span>
                    <strong class="rk-paper-blank">...........................................</strong>
                </div>
                <div class="rk-paper-row">
                    <span>Inwestor / Wykonawca:</span>
                    <strong class="rk-paper-blank">...........................................</strong>
                </div>
                <h4 style="font-size: 14px; margin: 20px 0 10px 0; color: var(--rk-doc-dark);">1. Dane ogólne instalacji[cite: 2]</h4>
                <div class="rk-paper-row"><span>Powierzchnia ogrzewana:</span><strong class="rk-paper-blank">.......... m²</strong></div>
                <div class="rk-paper-row"><span>Liczba i dł. pętli:</span><strong class="rk-paper-blank">.......... szt. / .......... m</strong></div>
                <div class="rk-paper-row"><span>Rodzaj rur / Rozdzielacz:</span><strong class="rk-paper-blank">...........................................</strong></div>
                
                <h4 style="font-size: 14px; margin: 20px 0 10px 0; color: var(--rk-doc-dark);">3. Parametry próby[cite: 2]</h4>
                <div class="rk-paper-row"><span>Ciśnienie początkowe:</span><strong class="rk-paper-blank">.......... bar</strong></div>
                <div class="rk-paper-row"><span>Ciśnienie po 24 godzinach:</span><strong class="rk-paper-blank">.......... bar</strong></div>
                <div class="rk-paper-row"><span>Rzeczywisty spadek:</span><strong class="rk-paper-blank">.......... bar</strong></div>
                <div style="margin-top: 30px; display: flex; justify-content: space-between; font-size: 11px; color: #94a3b8; border-top: 1px solid var(--rk-doc-border); padding-top: 10px;">
                    <span>Podpis Wykonawcy</span>
                    <span>Podpis Inwestora</span>
                </div>
            </div>

            <!-- Podgląd: Wypełniony -->
            <div class="rk-paper" id="paper-filled">
                <div class="rk-paper-header">
                    <h3 class="rk-paper-title">PROTOKÓŁ PRÓBY SZCZELNOŚCI</h3>
                    <div style="font-size: 11px; color: #94a3b8; margin-top: 5px;">INSTALACJI OGRZEWANIA PODŁOGOWEGO</div>
                </div>
                <div class="rk-paper-row">
                    <span>Miejscowość / Data:</span>
                    <strong>Kraków, 07.03.2025[cite: 1]</strong>
                </div>
                <div class="rk-paper-row">
                    <span>Inwestor / Wykonawca:</span>
                    <strong>Jan Kowalski / Firma XYZ[cite: 1]</strong>
                </div>
                <h4 style="font-size: 14px; margin: 20px 0 10px 0; color: var(--rk-doc-dark);">1. Dane ogólne instalacji</h4>
                <div class="rk-paper-row"><span>Powierzchnia ogrzewana:</span><strong>200 m²[cite: 1]</strong></div>
                <div class="rk-paper-row"><span>Liczba i dł. pętli:</span><strong>20 szt. / 80 m[cite: 1]</strong></div>
                <div class="rk-paper-row"><span>Rodzaj rur / Rozdzielacz:</span><strong>Wielowarstwowa 16x2 / Stalowy INOX[cite: 1]</strong></div>
                
                <h4 style="font-size: 14px; margin: 20px 0 10px 0; color: var(--rk-doc-dark);">3. Parametry próby</h4>
                <div class="rk-paper-row"><span>Ciśnienie początkowe:</span><strong>6,0 bar[cite: 1]</strong></div>
                <div class="rk-paper-row"><span>Ciśnienie po 24 godzinach:</span><strong>5,9 bar[cite: 1]</strong></div>
                <div class="rk-paper-row"><span>Rzeczywisty spadek:</span><span class="rk-paper-highlight">0,1 bar[cite: 1]</span></div>
                <div class="rk-paper-row" style="margin-top: 15px;"><span>Szczelność instalacji:</span><span class="rk-paper-highlight">SZCZELNA[cite: 1]</span></div>
                
                <div style="margin-top: 30px; display: flex; justify-content: space-between; font-size: 11px; color: #94a3b8; border-top: 1px solid var(--rk-doc-border); padding-top: 10px;">
                    <span style="color: var(--rk-doc-dark); font-weight: bold; text-decoration: underline;">Adam Nowak</span>
                    <span style="color: var(--rk-doc-dark); font-weight: bold; text-decoration: underline;">Jan Kowalski</span>
                </div>
            </div>

            <!-- Panel Pobierania -->
            <div class="rk-dl-panel">
                <h3 class="rk-dl-title">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                    Pliki do pobrania
                </h3>
                <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2025/03/PROTOKOL-PROBY-SZCZELNOSCI-INSTALACJI-OGRZEWANIA-PODLOGOWEGO.pdf" target="_blank" class="rk-dl-btn btn-primary">
                    Pobierz pusty wzór (PDF)
                </a>
                <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2025/03/Przyklad-wypelnionego-protokolu-proby-szczelnosci-instalacji-ogrzewania-podlogowego-dla-domu-200-m%C2%B2.pdf" target="_blank" class="rk-dl-btn btn-outline">
                    Pobierz przykład 200m² (PDF)
                </a>
                <p class="rk-dl-meta">
                    <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                    Gwarancja zgodności z PN-EN 1264
                </p>
            </div>
        </div>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe
    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('szczelnosc-doc-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #0f172a; color: #f87171; border: 1px solid #dc2626; border-radius: 12px; font-family: sans-serif;">
                    <div style="font-size: 30px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 15px; font-weight: bold; margin-bottom: 5px; text-transform: uppercase;">Zabezpieczenie przed kradzieżą</div>
                    <div style="font-size: 13px; color: #94a3b8;">
                        Moduł "Wirtualny Podgląd Protokołu" został osadzony na nieautoryzowanej domenie. Należy do Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Zakładek
    const tabs = document.querySelectorAll('.rk-doc-tab');
    const papers = document.querySelectorAll('.rk-paper');

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Usuwamy klasy active
            tabs.forEach(t => t.classList.remove('active'));
            papers.forEach(p => p.classList.remove('active'));

            // Aktywujemy kliknięty
            this.classList.add('active');
            const targetId = this.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-dl-dark: #0f172a;
    --rk-dl-blue: #0284c7;
    --rk-dl-light-blue: #f0f9ff;
    --rk-dl-accent: #38bdf8;
    --rk-dl-green: #10b981;
    --rk-dl-gray: #64748b;
    --rk-dl-border: #e2e8f0;
    --rk-dl-bg: #ffffff;
}

.rk-dl-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-dl-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-dl-border);
    overflow: hidden;
}

.rk-dl-header {
    padding: 40px 45px 30px;
    background: linear-gradient(135deg, var(--rk-dl-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: left;
    position: relative;
}

.rk-dl-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.2);
    color: var(--rk-dl-accent);
    padding: 6px 16px;
    border-radius: 12px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(56, 189, 248, 0.3);
}

.rk-dl-title {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-dl-desc {
    font-size: 16px;
    color: #94a3b8;
    line-height: 1.7;
    margin: 0;
    max-width: 700px;
}

.rk-dl-link {
    color: var(--rk-dl-accent);
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-dl-accent);
    transition: all 0.2s;
}

.rk-dl-link:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

/* Interaktywny Hub */
.rk-dl-interactive {
    display: grid;
    grid-template-columns: 1fr 1fr;
    background: var(--rk-dl-bg);
}

/* Sekcja podglądu grafiki */
.rk-dl-preview-area {
    padding: 40px;
    background: #f8fafc;
    border-right: 1px solid var(--rk-dl-border);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.rk-img-wrapper {
    position: relative;
    border-radius: 16px;
    overflow: hidden;
    box-shadow: 0 15px 35px -5px rgba(0,0,0,0.1);
    border: 1px solid var(--rk-dl-border);
    transition: transform 0.4s ease;
}

.rk-img-wrapper:hover {
    transform: scale(1.02);
}

.rk-img-wrapper img {
    width: 100%;
    height: auto;
    display: block;
}

.rk-img-overlay {
    position: absolute;
    inset: 0;
    background: rgba(15, 23, 42, 0.6);
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transition: opacity 0.3s ease;
    backdrop-filter: blur(2px);
}

.rk-img-wrapper:hover .rk-img-overlay {
    opacity: 1;
}

.rk-img-overlay svg {
    color: #ffffff;
    width: 48px;
    height: 48px;
    animation: bounceIcon 2s infinite;
}

@keyframes bounceIcon {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-10px); }
}

/* Sekcja pobierania */
.rk-dl-action-area {
    padding: 40px;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-dl-tabs {
    display: flex;
    gap: 10px;
    margin-bottom: 30px;
    background: #f1f5f9;
    padding: 6px;
    border-radius: 16px;
}

.rk-dl-tab {
    flex: 1;
    padding: 12px 15px;
    border: none;
    background: transparent;
    border-radius: 12px;
    font-family: inherit;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-dl-gray);
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-dl-tab.active {
    background: #ffffff;
    color: var(--rk-dl-blue);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.rk-dl-content {
    display: none;
    animation: fadeTab 0.4s ease-out;
}

.rk-dl-content.active {
    display: block;
}

@keyframes fadeTab {
    from { opacity: 0; transform: translateX(10px); }
    to { opacity: 1; transform: translateX(0); }
}

.rk-dl-feature-list {
    list-style: none;
    padding: 0;
    margin: 0 0 30px 0;
}

.rk-dl-feature-list li {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 15px;
    font-size: 15px;
    color: #334155;
    line-height: 1.5;
}

.rk-dl-feature-list svg {
    flex-shrink: 0;
    color: var(--rk-dl-green);
    margin-top: 2px;
}

.rk-btn-download {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    width: 100%;
    padding: 18px 24px;
    border-radius: 14px;
    font-size: 16px;
    font-weight: 800;
    text-decoration: none;
    color: #ffffff;
    background: var(--rk-dl-blue);
    border: 2px solid transparent;
    transition: all 0.3s;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.4);
    cursor: pointer;
}

.rk-btn-download:hover {
    background: #0369a1;
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.5);
}

.rk-btn-download.pdf-variant {
    background: #ef4444;
    box-shadow: 0 10px 20px -5px rgba(239, 68, 68, 0.4);
}

.rk-btn-download.pdf-variant:hover {
    background: #dc2626;
    box-shadow: 0 15px 25px -5px rgba(239, 68, 68, 0.5);
}

.rk-file-meta {
    display: flex;
    justify-content: space-between;
    margin-top: 15px;
    font-size: 12px;
    color: #94a3b8;
    font-weight: 600;
}

@media (max-width: 768px) {
    .rk-dl-header, .rk-dl-preview-area, .rk-dl-action-area { padding: 30px 20px; }
    .rk-dl-interactive { grid-template-columns: 1fr; }
    .rk-dl-preview-area { border-right: none; border-bottom: 1px solid var(--rk-dl-border); }
    .rk-img-wrapper { max-width: 300px; margin: 0 auto; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/"
    },
    "headline": "Infografika: Próba szczelności ogrzewania podłogowego w pigułce",
    "description": "Zestawienie najważniejszych parametrów testu ciśnieniowego (6 bar, 24h) w formie czytelnej infografiki. Pobierz schemat w formacie PDF lub WebP bezpośrednio na telefon.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Proba-szczelnosci-ogrzewania-podlogowego.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-05",
    "dateModified": "2026-05-05"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#dataset-infografika",
    "name": "Wizualizacja Standardów: Próba Ciśnieniowa PEX",
    "description": "Skondensowane dane techniczne dotyczące parametrów testowych instalacji płaszczyznowych przygotowane do druku dla wykonawców.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika próba szczelności podłogówki",
      "schemat testu ciśnieniowego pdf",
      "parametry 6 bar 24h",
      "ściągawka instalatora hvac",
      "odbiór instalacji przed wylewką"
    ],
    "measurementTechnique": "Agregacja i wizualizacja danych hydrometrycznych (czas, ciśnienie, spadek) oraz procedur kontrolnych zawartych w normie PN-EN 1264 w formie graficznego algorytmu.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Medium: Woda (zalecana) / Sprężone powietrze",
        "Ciśnienie kontrolne: 6.0 bar (0.6 MPa)",
        "Czas trwania: 30 min (stabilizacja) + 24 godziny",
        "Tolerancja błędu: spadek ≤ 0.02 MPa"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/#webapp-infografika",
    "name": "Smart Download Hub: Materiały Edukacyjne HVAC",
    "description": "Interaktywne centrum dystrybucji wiedzy technicznej pozwalające na bezpieczne pobranie schematów weryfikacyjnych w formatach wektorowych (PDF) i rastrowych (WebP).",
    "applicationCategory": "MultimediaApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-dl-container" id="rk-dl-app">
    <div class="rk-dl-header">
        <div class="rk-dl-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
            Materiały do pobrania
        </div>
        <h2 class="rk-dl-title">Próba szczelności w pigułce – Infografika</h2>
        <p class="rk-dl-desc">
            Skomplikowane normy inżynierskie przełożyłem na czytelny schemat wizualny. To idealna ściągawka, którą warto mieć na telefonie podczas odbioru prac lub wydrukować dla ekipy przed wylaniem posadzki. Zoptymalizuj układ weryfikując wcześniej <a href="https://projekt-ogrzewania.pl/kalkulator-do-obliczania-ilosci-metrow-rury-potrzebnych-do-ogrzewania-podlogowego/" class="rk-dl-link">długość pętli z kalkulatorem</a> oraz odpowiedni <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-ogrzewaniu-podlogowym-co-10-czy-15-cm/" class="rk-dl-link">rozstaw rur grzewczych</a>.
        </p>
    </div>

    <div class="rk-dl-interactive">
        
        <!-- Sekcja Wizualna -->
        <div class="rk-dl-preview-area">
            <div class="rk-img-wrapper">
                <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Proba-szczelnosci-ogrzewania-podlogowego.webp" alt="Infografika - procedura i parametry próby szczelności ogrzewania podłogowego" loading="lazy">
                <div class="rk-img-overlay">
                    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                </div>
            </div>
        </div>

        <!-- Sekcja Akcji -->
        <div class="rk-dl-action-area">
            <div class="rk-dl-tabs">
                <button class="rk-dl-tab active" data-target="webp-dl">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>
                    Obraz (Smartfon)
                </button>
                <button class="rk-dl-tab" data-target="pdf-dl">
                    <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                    Wersja PDF (Druk)
                </button>
            </div>

            <!-- Content WebP -->
            <div class="rk-dl-content active" id="webp-dl">
                <ul class="rk-dl-feature-list">
                    <li>
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                        Lekki format WebP, idealny do otwarcia na placu budowy bez użycia transferu danych.
                    </li>
                    <li>
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                        Zawiera wizualny układ złączek, rozdzielacza i czytelny manometr.
                    </li>
                </ul>
                
                <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Proba-szczelnosci-ogrzewania-podlogowego.webp" target="_blank" class="rk-btn-download rk-trigger-dl" download>
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                    Pobierz infografikę
                </a>
                <div class="rk-file-meta">
                    <span>Format: High-Res WEBP</span>
                    <span>Weryfikacja: Wiruso-odporny</span>
                </div>
            </div>

            <!-- Content PDF -->
            <div class="rk-dl-content" id="pdf-dl">
                <ul class="rk-dl-feature-list">
                    <li>
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                        Wysoka rozdzielczość wektorowa bezstratna przy druku na formacie A4/A3.
                    </li>
                    <li>
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                        Świetny załącznik do dokumentacji projektowej lub dziennika budowy.
                    </li>
                </ul>
                
                <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Proba-szczelnosci-ogrzewania-podlogowego.pdf" target="_blank" class="rk-btn-download pdf-variant rk-trigger-dl">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
                    Pobierz dokument PDF
                </a>
                <div class="rk-file-meta">
                    <span>Format: Wektorowy PDF</span>
                    <span>Standard druku: CMYK</span>
                </div>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (bez nagłówków H-tags wg wytycznych)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-dl-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px dashed #dc2626; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Naruszenie zabezpieczeń</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Interaktywny moduł "Smart Download Hub" jest licencjonowany wyłącznie dla Projekt-Ogrzewania.pl. Użycie skryptu zostało przerwane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Zakładek (Tabs)
    const tabs = document.querySelectorAll('.rk-dl-tab');
    const contents = document.querySelectorAll('.rk-dl-content');

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            tabs.forEach(t => t.classList.remove('active'));
            contents.forEach(c => c.classList.remove('active'));

            this.classList.add('active');
            const targetId = this.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });

    // 3. Efekt kliknięcia w przycisk pobierania (symulacja przygotowania pliku)
    const dlButtons = document.querySelectorAll('.rk-trigger-dl');
    dlButtons.forEach(btn => {
        btn.addEventListener('click', function(e) {
            const originalHTML = this.innerHTML;
            this.innerHTML = `<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" class="animate-spin"><line x1="12" y1="2" x2="12" y2="6"></line><line x1="12" y1="18" x2="12" y2="22"></line><line x1="4.93" y1="4.93" x2="7.76" y2="7.76"></line><line x1="16.24" y1="16.24" x2="19.07" y2="19.07"></line><line x1="2" y1="12" x2="6" y2="12"></line><line x1="18" y1="12" x2="22" y2="12"></line><line x1="4.93" y1="19.07" x2="7.76" y2="16.24"></line><line x1="16.24" y1="7.76" x2="19.07" y2="4.93"></line></svg> Generowanie bezpiecznego linku...`;
            this.style.opacity = '0.8';
            this.style.pointerEvents = 'none';

            // Po kliknięciu link otworzy się normalnie przez target="_blank"
            // Tutaj tylko przywracamy wygląd przycisku po 2 sekundach dla lepszego UX
            setTimeout(() => {
                this.innerHTML = originalHTML;
                this.style.opacity = '1';
                this.style.pointerEvents = 'auto';
            }, 2000);
        });
    });
});
</script>
<style>
/* Dodatkowy styl dla loadera w przycisku */
.animate-spin {
    animation: rkSpin 1s linear infinite;
}
@keyframes rkSpin {
    from { transform: rotate(0deg); }
    to { transform: rotate(360deg); }
}
</style>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">Próba szczelności ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Wylewka na ogrzewanie podłogowe – kompletny przewodnik.</title>
		<link>https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/</link>
					<comments>https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 18 Feb 2025 19:48:37 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Jastrych]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradnik budowlany]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Porady budowlane]]></category>
		<category><![CDATA[Porady ekspertów]]></category>
		<category><![CDATA[Remonty i budowa]]></category>
		<category><![CDATA[Wylewka]]></category>
		<category><![CDATA[Wylewka anhydrytowa]]></category>
		<category><![CDATA[Wylewka cementowa]]></category>
		<category><![CDATA[grubość wylewki]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[jastrych]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[podkład podłogowy]]></category>
		<category><![CDATA[porady budowlane]]></category>
		<category><![CDATA[system grzewczy]]></category>
		<category><![CDATA[wylewka]]></category>
		<category><![CDATA[wylewka anhydrytowa]]></category>
		<category><![CDATA[wylewka cementowa]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2254</guid>

					<description><![CDATA[<p>Planujesz montaż ogrzewania podłogowego? Wylewka na ogrzewanie podłogowe to kluczowy element, który wpływa na efektywność i trwałość całego systemu. W naszym artykule dowiesz się, jak wybrać odpowiedni rodzaj wylewki (cementową lub anhydrytową), jaką grubość zastosować oraz na co zwrócić uwagę podczas jej wykonywania. Poznasz również najczęstsze błędy i praktyczne wskazówki, które pomogą Ci uniknąć kosztownych pomyłek. Sprawdź, jak prawidłowo przygotować podłoże i ciesz się równomiernym ciepłem w swoim domu!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">Wylewka na ogrzewanie podłogowe – kompletny przewodnik.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #0f172a;
    --rk-intro-blue: #2563eb;
    --rk-intro-cyan: #06b6d4;
    --rk-intro-red: #dc2626;
    --rk-intro-green: #16a34a;
    --rk-intro-bg: #ffffff;
    --rk-intro-surface: #f8fafc;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #334155;
}

.rk-intro-app {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-intro-bg);
    border-radius: 20px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.1);
    border: 1px solid var(--rk-intro-border);
    overflow: hidden;
}

/* Sekcja Treści - Wstęp */
.rk-intro-content {
    padding: 45px 50px 30px;
    background: linear-gradient(180deg, #ffffff 0%, var(--rk-intro-surface) 100%);
    border-bottom: 1px solid var(--rk-intro-border);
}

.rk-intro-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin: 0 0 25px 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-intro-title svg {
    color: var(--rk-intro-blue);
}

.rk-intro-text-block {
    font-size: 17px;
    line-height: 1.8;
    color: var(--rk-intro-text);
    margin-bottom: 20px;
}

.rk-intro-text-block strong {
    color: var(--rk-intro-dark);
    font-weight: 700;
}

.rk-intro-text-block a {
    color: var(--rk-intro-blue);
    font-weight: 600;
    text-decoration: none;
    border-bottom: 2px solid rgba(37, 99, 235, 0.2);
    transition: all 0.3s ease;
}

.rk-intro-text-block a:hover {
    border-bottom-color: var(--rk-intro-blue);
    background: rgba(37, 99, 235, 0.05);
}

.rk-intro-alert {
    background: #fff1f2;
    border-left: 4px solid var(--rk-intro-red);
    padding: 20px;
    border-radius: 0 12px 12px 0;
    margin: 25px 0 0 0;
    font-size: 16px;
    line-height: 1.6;
    color: #881337;
}

/* Sekcja Interaktywna - Skaner */
.rk-intro-scanner {
    padding: 40px 50px;
    background: var(--rk-intro-dark);
    color: #ffffff;
}

.rk-scanner-header {
    text-align: center;
    margin-bottom: 30px;
}

.rk-scanner-header h3 {
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: #f8fafc;
}

.rk-scanner-header p {
    color: #94a3b8;
    font-size: 15px;
    margin: 0;
}

/* Suwak w stylu aplikacji */
.rk-slider-container {
    padding: 20px 0;
    margin-bottom: 30px;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: linear-gradient(90deg, var(--rk-intro-red) 0%, var(--rk-intro-cyan) 50%, var(--rk-intro-green) 100%);
    border-radius: 10px;
    outline: none;
    cursor: grab;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: #ffffff;
    box-shadow: 0 0 15px rgba(255,255,255,0.5);
    border: 4px solid var(--rk-intro-dark);
    cursor: grabbing;
    transition: transform 0.1s;
}

.rk-range-input::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

.rk-slider-labels {
    display: flex;
    justify-content: space-between;
    margin-top: 15px;
    font-size: 13px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-label-bad { color: #f87171; }
.rk-label-good { color: #4ade80; }

/* Ekran diagnostyczny */
.rk-diag-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
}

.rk-diag-svg {
    width: 100%;
    max-width: 350px;
    margin: 0 auto;
    background: #1e293b;
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 4px 6px rgba(0,0,0,0.3);
}

.rk-diag-stats {
    background: rgba(255,255,255,0.05);
    padding: 25px;
    border-radius: 16px;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-stat-item {
    margin-bottom: 20px;
}
.rk-stat-item:last-child { margin-bottom: 0; }

.rk-stat-title {
    font-size: 13px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
}

.rk-stat-value {
    font-size: 24px;
    font-weight: 900;
    display: flex;
    align-items: baseline;
    gap: 5px;
    transition: color 0.3s;
}

.rk-stat-value small {
    font-size: 14px;
    font-weight: 600;
    opacity: 0.7;
}

/* Dynamika klas JS */
.status-critical .rk-stat-value { color: var(--rk-intro-red); }
.status-warning .rk-stat-value { color: var(--rk-intro-cyan); }
.status-optimal .rk-stat-value { color: var(--rk-intro-green); }

/* SVG Animacje wewnątrz Skanera */
.anim-heat-ray {
    stroke-dasharray: 10;
    animation: flowHeat 2s linear infinite;
}

@keyframes flowHeat {
    to { stroke-dashoffset: -20; }
}

@media (max-width: 768px) {
    .rk-intro-content, .rk-intro-scanner { padding: 30px 20px; }
    .rk-diag-grid { grid-template-columns: 1fr; }
    .rk-intro-title { font-size: 22px; }
    .rk-diag-svg { padding: 10px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Rola jastrychu grzejnego w systemie ogrzewania podłogowego",
    "description": "Czym jest wylewka na ogrzewanie podłogowe? Wyjaśniamy funkcje jastrychu grzejnego, normę PN-EN 1264-4 oraz zagrożenia płynące ze złego wykonawstwa (cisi zabójcy budżetu).",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-wstep",
    "name": "Parametry Prawidłowego Jastrychu wg PN-EN 1264-4",
    "description": "Baza wiedzy definiująca techniczne uwarunkowania wylewki grzejnej, z naciskiem na bezwładność, dylatacje i straty energii.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jastrych grzejny grubość 50-80mm",
      "norma PN-EN 1264-4 otulina rury",
      "bezwładność cieplna wylewki",
      "dylatacje ogrzewania podłogowego",
      "cisi zabójcy sprawności energetycznej"
    ],
    "measurementTechnique": "Analiza zgodności warstwy jastrychu z normami budowlanymi i termodynamiką.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Płyta akumulacyjna: Optymalna grubość to 50-80 mm dla zachowania balansu bezwładności.",
        "Otulina rury: Brak szczelnego przylegania betonu powoduje powstawanie izolatora powietrznego.",
        "Ryzyka awarii: Pęknięcia z powodu braku dylatacji zmniejszają przewodność i uszkadzają posadzkę."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-skaner",
    "name": "Inżynierski Skaner Jakości Jastrychu",
    "description": "Interaktywna aplikacja typu suwak (slider) pozwalająca użytkownikowi zobaczyć różnicę między wylewką wadliwą (pęcherze powietrza, pęknięcia) a zgodną z normą PN-EN 1264-4.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input and JavaScript",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-app" id="wylewka-intro-app">
    
    <!-- Treść Wstępu -->
    <div class="rk-intro-content">
        <h2 class="rk-intro-title">
            <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect><line x1="8" y1="21" x2="16" y2="21"></line><line x1="12" y1="17" x2="12" y2="21"></line></svg>
            Fundament sprawności systemu
        </h2>
        
        <p class="rk-intro-text-block">
            <strong>Wylewka na ogrzewanie podłogowe</strong>, fachowo nazywana <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">jastrychem grzejnym</a>, to warstwa podkładu podłogowego o grubości zazwyczaj od <strong>50 mm do 80 mm</strong>, pełniąca funkcję emitora ciepła, ochrony mechanicznej przewodów oraz płyty akumulacyjnej. 
        </p>
        
        <p class="rk-intro-text-block">
            Według normy <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264-4</a>, jastrych musi szczelnie otaczać rury grzejne, aby zapewnić maksymalną przewodność cieplną i równomierny rozkład temperatury na powierzchni posadzki (T<sub>surf</sub>).
        </p>

        <div class="rk-intro-alert">
            <strong>Problem z wylewką to nie tylko kwestia estetyki, ale przede wszystkim sprawności energetycznej.</strong> Zbyt duża <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">bezwładność cieplna</a>, pęknięcia wynikające z braku <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">dylatacji</a> czy niska przewodność materiału to „cisi zabójcy” Twojego portfela. Poniżej rozbijam ten temat na czynniki pierwsze.
        </div>
    </div>

    <!-- Interaktywny Skaner -->
    <div class="rk-intro-scanner">
        <div class="rk-scanner-header">
            <h3>Skaner Jakości Wylewki (Symulator)</h3>
            <p>Przesuń suwak, aby zobaczyć, co dzieje się wewnątrz posadzki.</p>
        </div>

        <div class="rk-slider-container">
            <input type="range" min="0" max="100" value="100" class="rk-range-input" id="rkQualitySlider">
            <div class="rk-slider-labels">
                <span class="rk-label-bad">Błędy Wykonawcze</span>
                <span class="rk-label-good">Norma PN-EN 1264</span>
            </div>
        </div>

        <div class="rk-diag-grid" id="rkDiagGrid">
            
            <!-- Grafika SVG -->
            <div class="rk-diag-svg">
                <svg viewBox="0 0 300 200" xmlns="http://www.w3.org/2000/svg">
                    <!-- Izolacja EPS -->
                    <rect x="0" y="160" width="300" height="40" fill="#334155"/>
                    <text x="10" y="185" fill="#64748b" font-size="12" font-family="sans-serif">EPS (Izolacja)</text>
                    
                    <!-- Rury -->
                    <circle cx="80" cy="130" r="14" fill="#ef4444" stroke="#ffffff" stroke-width="2"/>
                    <circle cx="220" cy="130" r="14" fill="#ef4444" stroke="#ffffff" stroke-width="2"/>
                    
                    <!-- Dylatacja brzegowa -->
                    <rect x="290" y="50" width="10" height="110" fill="#0ea5e9" id="svgDylatacja" opacity="1"/>

                    <!-- Zły Jastrych (Widoczny przy niskiej jakości) -->
                    <g id="svgBadScreed" opacity="0">
                        <path d="M0 50 H290 V160 H0 Z" fill="#475569"/>
                        <!-- Pęknięcie z powodu braku dylatacji -->
                        <path d="M150 50 L140 80 L160 110 L150 160" fill="none" stroke="#0f172a" stroke-width="3"/>
                        <!-- Pęcherze powietrza (Izolator) wokół rur -->
                        <circle cx="80" cy="130" r="22" fill="none" stroke="#94a3b8" stroke-width="2" stroke-dasharray="4"/>
                        <circle cx="220" cy="130" r="22" fill="none" stroke="#94a3b8" stroke-width="2" stroke-dasharray="4"/>
                        <text x="100" y="100" fill="#f87171" font-size="10" font-weight="bold">Powietrze = Izolator</text>
                        <!-- Zaburzony strumień ciepła -->
                        <path d="M80 100 Q60 70 90 40" fill="none" stroke="#ef4444" stroke-width="2" opacity="0.3"/>
                    </g>

                    <!-- Dobry Jastrych (Widoczny przy wysokiej jakości) -->
                    <g id="svgGoodScreed" opacity="1">
                        <path d="M0 50 H290 V160 H0 Z" fill="#94a3b8"/>
                        <!-- Prawidłowy otulina -->
                        <circle cx="80" cy="130" r="18" fill="none" stroke="#10b981" stroke-width="2"/>
                        <circle cx="220" cy="130" r="18" fill="none" stroke="#10b981" stroke-width="2"/>
                        <!-- Idealny strumień ciepła -->
                        <path class="anim-heat-ray" d="M80 110 V30" fill="none" stroke="#ef4444" stroke-width="3"/>
                        <path class="anim-heat-ray" d="M220 110 V30" fill="none" stroke="#ef4444" stroke-width="3"/>
                    </g>
                </svg>
            </div>

            <!-- Dane diagnostyczne -->
            <div class="rk-diag-stats">
                <div class="rk-stat-item">
                    <div class="rk-stat-title">Straty energetyczne</div>
                    <div class="rk-stat-value" id="valLoss">0<small>%</small></div>
                </div>
                <div class="rk-stat-item">
                    <div class="rk-stat-title">Zgodność z normą PN-EN</div>
                    <div class="rk-stat-value" id="valNorm">Pełna <small>(Akceptacja)</small></div>
                </div>
                <div class="rk-stat-item">
                    <div class="rk-stat-title">Ocena ryzyka awarii</div>
                    <div class="rk-stat-value" id="valRisk">Brak <small>(Dylatacje aktywne)</small></div>
                </div>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków H-tag)
    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('wylewka-intro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 30px; text-align: center; background: #fff1f2; color: #be123c; border: 2px solid #f43f5e; border-radius: 16px; font-family: sans-serif; margin: 20px;">
                    <div style="font-size: 32px; margin-bottom: 10px;">⚠️</div>
                    <div style="font-size: 16px; font-weight: 800; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; margin-top: 10px;">
                        Moduł "Skaner Jakości" i dane JSON-LD są przypisane do domeny Projekt-Ogrzewania.pl. Uruchomienie zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Skanera Jakości
    const slider = document.getElementById('rkQualitySlider');
    const svgGood = document.getElementById('svgGoodScreed');
    const svgBad = document.getElementById('svgBadScreed');
    const svgDylatacja = document.getElementById('svgDylatacja');
    
    const valLoss = document.getElementById('valLoss');
    const valNorm = document.getElementById('valNorm');
    const valRisk = document.getElementById('valRisk');
    const diagGrid = document.getElementById('rkDiagGrid');

    function updateScanner(val) {
        // Przeliczenie na skale 0-1
        const goodOpacity = val / 100;
        const badOpacity = 1 - goodOpacity;

        // Aktualizacja SVG
        svgGood.style.opacity = goodOpacity;
        svgBad.style.opacity = badOpacity;
        
        // Dylatacja zanika poniżej 40% jakości
        if(val < 40) {
            svgDylatacja.style.opacity = '0.2';
            svgDylatacja.setAttribute('fill', '#ef4444');
        } else {
            svgDylatacja.style.opacity = '1';
            svgDylatacja.setAttribute('fill', '#0ea5e9');
        }

        // Aktualizacja tekstów i klas kolorów
        diagGrid.classList.remove('status-optimal', 'status-warning', 'status-critical');

        if (val >= 80) {
            diagGrid.classList.add('status-optimal');
            valLoss.innerHTML = `${Math.round((100 - val) * 0.2)}<small>%</small>`;
            valNorm.innerHTML = `Pełna <small>(Akceptacja)</small>`;
            valRisk.innerHTML = `Niskie <small>(Otulina OK)</small>`;
        } else if (val >= 40) {
            diagGrid.classList.add('status-warning');
            valLoss.innerHTML = `${Math.round((100 - val) * 0.4)}<small>%</small>`;
            valNorm.innerHTML = `Częściowa <small>(Ostrzeżenie)</small>`;
            valRisk.innerHTML = `Średnie <small>(Pęcherze powietrza)</small>`;
        } else {
            diagGrid.classList.add('status-critical');
            valLoss.innerHTML = `${Math.round((100 - val) * 0.6)}<small>%</small>`;
            valNorm.innerHTML = `Brak <small>(Odrzucenie)</small>`;
            valRisk.innerHTML = `Krytyczne <small>(Pęknięcia/Izolator)</small>`;
        }
    }

    // Inicjalizacja nasłuchu na suwak
    slider.addEventListener('input', (e) => {
        updateScanner(e.target.value);
    });

    // Uruchomienie początkowe
    updateScanner(slider.value);
});
</script>



<style>
:root {
    --rk-vs-dark: #0f172a;
    --rk-vs-panel: #1e293b;
    --rk-vs-anhydrite: #fbbf24; /* Ciepły, płynny kolor */
    --rk-vs-cement: #94a3b8; /* Chłodny, betonowy szary */
    --rk-vs-heat: #ef4444;
    --rk-vs-bg: #ffffff;
    --rk-vs-border: #e2e8f0;
    --rk-vs-text: #334155;
}

.rk-vs-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-vs-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.08);
    border: 1px solid var(--rk-vs-border);
    overflow: hidden;
}

/* Nagłówek Sekcji */
.rk-vs-header {
    padding: 40px 50px 25px;
    background: linear-gradient(to right, #ffffff, #f8fafc);
    border-bottom: 1px solid var(--rk-vs-border);
}

.rk-vs-title {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-vs-dark);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-vs-desc {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-vs-text);
    margin: 0;
}

.rk-vs-desc strong {
    color: var(--rk-vs-dark);
}

.rk-vs-desc a {
    color: #2563eb;
    font-weight: 600;
    text-decoration: none;
    box-shadow: inset 0 -2px 0 rgba(37, 99, 235, 0.2);
    transition: all 0.2s;
}

.rk-vs-desc a:hover {
    box-shadow: inset 0 -10px 0 rgba(37, 99, 235, 0.1);
}

/* Interfejs Symulatora */
.rk-vs-app {
    display: grid;
    grid-template-columns: 350px 1fr;
    background: var(--rk-vs-panel);
    color: #ffffff;
}

/* Panel Boczny z Wyborem */
.rk-vs-sidebar {
    padding: 30px;
    border-right: 1px solid rgba(255,255,255,0.1);
    background: #0f172a;
}

.rk-vs-sidebar h3 {
    font-size: 16px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #94a3b8;
    margin: 0 0 20px 0;
    font-weight: 800;
}

.rk-type-btn {
    display: block;
    width: 100%;
    padding: 20px;
    margin-bottom: 15px;
    background: rgba(255,255,255,0.03);
    border: 2px solid rgba(255,255,255,0.1);
    border-radius: 16px;
    color: #ffffff;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    overflow: hidden;
}

.rk-type-btn:hover {
    background: rgba(255,255,255,0.08);
}

.rk-type-btn.active[data-target="anhydrite"] {
    background: rgba(251, 191, 36, 0.1);
    border-color: var(--rk-vs-anhydrite);
}

.rk-type-btn.active[data-target="cement"] {
    background: rgba(148, 163, 184, 0.1);
    border-color: var(--rk-vs-cement);
}

.rk-type-name {
    font-size: 18px;
    font-weight: 800;
    margin-bottom: 5px;
    display: block;
}

.rk-type-hint {
    font-size: 13px;
    color: #94a3b8;
}

/* Główny Ekran Symulacji */
.rk-vs-main {
    padding: 40px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

/* Wizualizacja SVG */
.rk-vs-visual {
    width: 100%;
    max-width: 400px;
    margin: 0 auto 30px auto;
    position: relative;
}

.rk-svg-cross {
    width: 100%;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(0,0,0,0.3));
}

/* Animacje fal ciepła */
.heat-wave {
    opacity: 0;
    transform-origin: bottom center;
}

.state-anhydrite .heat-wave {
    animation: flowUpFast 1.5s infinite linear;
    stroke: var(--rk-vs-anhydrite);
}

.state-cement .heat-wave {
    animation: flowUpSlow 3s infinite linear;
    stroke: #fca5a5;
}

/* Opóźnienia dla płynności */
.hw-1 { animation-delay: 0.0s !important; }
.hw-2 { animation-delay: 0.5s !important; }
.hw-3 { animation-delay: 1.0s !important; }

@keyframes flowUpFast {
    0% { transform: translateY(10px) scale(0.8); opacity: 0; }
    50% { opacity: 0.8; }
    100% { transform: translateY(-40px) scale(1.2); opacity: 0; }
}

@keyframes flowUpSlow {
    0% { transform: translateY(10px) scale(0.8); opacity: 0; }
    50% { opacity: 0.5; }
    100% { transform: translateY(-20px) scale(1.1); opacity: 0; }
}

/* Zmienne elementy SVG za pomocą klas */
.mesh-layer { transition: opacity 0.3s; }
.state-anhydrite .mesh-layer { opacity: 0; }
.state-cement .mesh-layer { opacity: 1; }

.screed-mass { transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); }
.state-anhydrite .screed-mass { height: 50px; y: 70; fill: #fef3c7; }
.state-cement .screed-mass { height: 65px; y: 55; fill: #cbd5e1; }

/* Tabela Parametrów (Dynamiczna) */
.rk-params-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

.rk-param-box {
    background: rgba(0,0,0,0.2);
    padding: 15px;
    border-radius: 12px;
    border: 1px solid rgba(255,255,255,0.05);
}

.rk-param-label {
    font-size: 12px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 8px;
    display: block;
}

.rk-param-value {
    font-size: 20px;
    font-weight: 900;
    color: #ffffff;
}

.rk-param-value small {
    font-size: 12px;
    font-weight: 400;
    color: #94a3b8;
}

.status-badge {
    display: inline-block;
    padding: 4px 8px;
    border-radius: 4px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    margin-top: 5px;
}

.badge-pro { background: rgba(16, 185, 129, 0.2); color: #34d399; }
.badge-con { background: rgba(239, 68, 68, 0.2); color: #f87171; }

@media (max-width: 768px) {
    .rk-vs-app { grid-template-columns: 1fr; }
    .rk-vs-sidebar { border-right: none; border-bottom: 1px solid rgba(255,255,255,0.1); padding: 25px; }
    .rk-params-grid { grid-template-columns: 1fr; }
    .rk-vs-header { padding: 30px 25px; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-wybor",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Jaka wylewka na ogrzewanie podłogowe jest najlepsza? Anhydryt vs Cement",
    "description": "Porównanie jastrychu anhydrytowego i cementowego pod ogrzewanie podłogowe. Poznaj współczynniki lambda (przewodność cieplna), grubości oraz klasy wytrzymałości.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-materialy",
    "name": "Baza Danych: Właściwości termiczne jastrychów grzejnych 2026",
    "description": "Zestawienie parametrów inżynierskich określających wydajność ogrzewania płaszczyznowego w zależności od użytej wylewki.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "współczynnik przewodzenia ciepła lambda",
      "jastrych anhydrytowy parametry",
      "wylewka cementowa plastyfikator",
      "wytrzymałość na ściskanie C20/F4",
      "bezwładność cieplna podłogówki"
    ],
    "measurementTechnique": "Określanie parametrów fizycznych (Lambda, MPa) na podstawie testów laboratoryjnych materiałów budowlanych oraz normy PN-EN.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Jastrych Anhydrytowy: Przewodność cieplna λ ≈ 1,6 - 2,0 W/(m·K), brak konieczności zbrojenia, grubość nad rurką min. 35mm.",
        "Jastrych Cementowy: Przewodność cieplna λ ≈ 1,1 - 1,4 W/(m·K), wysoka bezwładność, wymaga zbrojenia i plastyfikatorów."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-lambda",
    "name": "Symulator Przewodności Cieplnej (Lambda) i Doboru Wylewki",
    "description": "Interaktywny widget inżynierski analizujący przepływ ciepła i wymagania konstrukcyjne dla wylewek anhydrytowych i betonowych (cementowych).",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG Support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-vs-container" id="wylewka-vs-app">
    
    <!-- Nagłówek merytoryczny -->
    <div class="rk-vs-header">
        <h2 class="rk-vs-title">Jaka wylewka na ogrzewanie podłogowe jest najlepsza?</h2>
        <p class="rk-vs-desc">
            Najlepsza wylewka to taka, która posiada wysoki <strong>współczynnik przewodzenia ciepła (lambda)</strong> oraz wysoką wytrzymałość na ściskanie (klasa minimum <strong>C20/F4</strong>). W nowoczesnym budownictwie wybieramy między jastrychem anhydrytowym (płynnym) a <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">cementowym (półsuchym z miksokreta)</a>. Zrozumienie, <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">jak działa ogrzewanie podłogowe</a>, zaczyna się od wyboru tego materiału, ponieważ anhydryt dominuje w salonach i sypialniach ze względu na bezkonkurencyjne parametry termiczne.
        </p>
    </div>

    <!-- Moduł Interaktywny -->
    <div class="rk-vs-app state-anhydrite" id="rkVsEngine">
        
        <!-- Sidebar wyboru -->
        <div class="rk-vs-sidebar">
            <h3>Wybierz technologię</h3>
            
            <button class="rk-type-btn active" data-target="anhydrite">
                <span class="rk-type-name">Jastrych Anhydrytowy</span>
                <span class="rk-type-hint">System płynny, samopoziomujący</span>
            </button>
            
            <button class="rk-type-btn" data-target="cement">
                <span class="rk-type-name">Jastrych Cementowy</span>
                <span class="rk-type-hint">System półsuchy (miksokret)</span>
            </button>
        </div>

        <!-- Obszar symulacji i wyników -->
        <div class="rk-vs-main">
            
            <!-- Wizualizacja przekroju SVG -->
            <div class="rk-vs-visual">
                <svg viewBox="0 0 400 160" class="rk-svg-cross" xmlns="http://www.w3.org/2000/svg">
                    <!-- Fale Ciepła (Animowane klasy CSS) -->
                    <g class="heat-waves-group">
                        <path class="heat-wave hw-1" d="M100 110 Q110 70 100 20" fill="none" stroke-width="4" stroke-linecap="round"/>
                        <path class="heat-wave hw-2" d="M200 110 Q190 70 200 20" fill="none" stroke-width="4" stroke-linecap="round"/>
                        <path class="heat-wave hw-3" d="M300 110 Q310 70 300 20" fill="none" stroke-width="4" stroke-linecap="round"/>
                    </g>

                    <!-- Płytki / Wykończenie -->
                    <rect x="20" y="45" width="360" height="8" fill="#334155" rx="2"/>

                    <!-- Zmienna masa wylewki -->
                    <rect x="20" class="screed-mass" width="360" rx="3"/>

                    <!-- Siatka Zbrojeniowa (Widoczna tylko w cemencie) -->
                    <g class="mesh-layer" stroke="#64748b" stroke-width="1.5" opacity="0">
                        <line x1="20" y1="80" x2="380" y2="80" stroke-dasharray="8 4"/>
                        <line x1="20" y1="90" x2="380" y2="90" stroke-dasharray="8 4"/>
                    </g>

                    <!-- Rury PEX -->
                    <circle cx="100" cy="110" r="12" fill="#ef4444" stroke="#ffffff" stroke-width="3"/>
                    <circle cx="200" cy="110" r="12" fill="#ef4444" stroke="#ffffff" stroke-width="3"/>
                    <circle cx="300" cy="110" r="12" fill="#ef4444" stroke="#ffffff" stroke-width="3"/>

                    <!-- Izolacja EPS z folią -->
                    <rect x="20" y="125" width="360" height="4" fill="#3b82f6"/> <!-- Folia -->
                    <rect x="20" y="129" width="360" height="25" fill="#475569" rx="2"/> <!-- EPS -->
                </svg>
            </div>

            <!-- Dynamiczne parametry inżynierskie -->
            <div class="rk-params-grid">
                <div class="rk-param-box">
                    <span class="rk-param-label">Przewodność (Lambda)</span>
                    <span class="rk-param-value" id="valLambda">1,6 &#8211; 2,0 <small>W/(m·K)</small></span>
                    <div class="status-badge badge-pro" id="badgeLambda">Wysoka (Szybki nagrzew)</div>
                </div>
                <div class="rk-param-box">
                    <span class="rk-param-label">Wymagane zbrojenie</span>
                    <span class="rk-param-value" id="valZbroj">Brak</span>
                    <div class="status-badge badge-pro" id="badgeZbroj">Oszczędność czasu</div>
                </div>
                <div class="rk-param-box">
                    <span class="rk-param-label">Min. otulina nad rurą</span>
                    <span class="rk-param-value" id="valGrubosc">35 mm</span>
                    <div class="status-badge badge-pro" id="badgeGrubosc">Mniejsze obciążenie</div>
                </div>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Dyskretne zabezpieczenie domenowe (bez H-tagów)
    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('wylewka-vs-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Ochrona Własności Intelektualnej</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Moduł interaktywny "Symulator Przewodności Cieplnej" stanowi własność Projekt-Ogrzewania.pl. Wykryto użycie na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Silnika Symulacji
    const engine = document.getElementById('rkVsEngine');
    const buttons = document.querySelectorAll('.rk-type-btn');
    
    // Elementy DOM do aktualizacji danych
    const vLambda = document.getElementById('valLambda');
    const vZbroj = document.getElementById('valZbroj');
    const vGrubosc = document.getElementById('valGrubosc');
    
    const bLambda = document.getElementById('badgeLambda');
    const bZbroj = document.getElementById('badgeZbroj');
    const bGrubosc = document.getElementById('badgeGrubosc');

    // Baza danych materiałów (Zgodna z wytycznymi)
    const materialsData = {
        anhydrite: {
            lambda: "1,6 - 2,0",
            zbroj: "Brak",
            grubosc: "35 mm",
            bLText: "Wysoka (Szybki nagrzew)",
            bLClass: "badge-pro",
            bZText: "Oszczędność czasu",
            bZClass: "badge-pro",
            bGText: "Mniejsze obciążenie",
            bGClass: "badge-pro"
        },
        cement: {
            lambda: "1,1 - 1,4",
            zbroj: "Siatka / Włókna",
            grubosc: "Min. 45 mm",
            bLText: "Wysoka bezwładność",
            bLClass: "badge-con",
            bZText: "Wymaga plastyfikatorów",
            bZClass: "badge-con",
            bGText: "Większa masa stropu",
            bGClass: "badge-con"
        }
    };

    function updateSimulator(type) {
        const data = materialsData[type];
        
        // Aktualizacja Wartości
        vLambda.innerHTML = `${data.lambda} <small>W/(m·K)</small>`;
        vZbroj.innerHTML = data.zbroj;
        vGrubosc.innerHTML = data.grubosc;

        // Aktualizacja Etykiet (Badges)
        bLambda.textContent = data.bLText;
        bLambda.className = `status-badge ${data.bLClass}`;
        
        bZbroj.textContent = data.bZText;
        bZbroj.className = `status-badge ${data.bZClass}`;
        
        bGrubosc.textContent = data.bGText;
        bGrubosc.className = `status-badge ${data.bGClass}`;

        // Zmiana klas silnika dla animacji SVG
        engine.className = `rk-vs-app state-${type}`;
    }

    // Nasłuchiwanie na kliknięcia
    buttons.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zarządzanie stanem 'active'
            buttons.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // Pobranie celu i aktualizacja
            const target = this.getAttribute('data-target');
            updateSimulator(target);
        });
    });
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-thick-dark: #0f172a;
    --rk-thick-panel: #f8fafc;
    --rk-thick-primary: #3b82f6; /* Techniczny niebieski */
    --rk-thick-success: #10b981; /* Optymalnie */
    --rk-thick-warning: #f59e0b; /* Zbyt grubo */
    --rk-thick-danger: #ef4444; /* Zbyt cienko - ryzyko */
    --rk-thick-border: #cbd5e1;
    --rk-thick-text: #334155;
    --rk-thick-bg: #ffffff;
}

.rk-thick-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-thick-bg);
    border-radius: 20px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.15);
    border: 1px solid var(--rk-thick-border);
    overflow: hidden;
}

/* Nagłówek i Treść */
.rk-thick-header {
    padding: 45px 50px 30px;
    background: var(--rk-thick-bg);
    border-bottom: 2px dashed var(--rk-thick-border);
}

.rk-thick-title {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-thick-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-thick-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-thick-text);
    margin: 0 0 15px 0;
}

.rk-thick-text strong {
    color: var(--rk-thick-dark);
}

.rk-thick-text a {
    color: var(--rk-thick-primary);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(59, 130, 246, 0.2);
    transition: all 0.3s;
}

.rk-thick-text a:hover {
    border-bottom-color: var(--rk-thick-primary);
    background: rgba(59, 130, 246, 0.05);
}

/* Aplikacja: Kalibrator Bezwładności */
.rk-thick-app {
    background: var(--rk-thick-dark);
    color: #ffffff;
    padding: 40px 50px;
}

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

.rk-app-header h3 {
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: #f1f5f9;
}

/* Przełącznik Materiału */
.rk-material-switch {
    display: flex;
    justify-content: center;
    gap: 15px;
    margin-bottom: 35px;
}

.rk-mat-btn {
    background: rgba(255,255,255,0.05);
    border: 2px solid rgba(255,255,255,0.1);
    color: #94a3b8;
    padding: 12px 24px;
    border-radius: 12px;
    font-weight: 700;
    font-size: 15px;
    cursor: pointer;
    transition: all 0.3s;
}

.rk-mat-btn.active {
    background: rgba(59, 130, 246, 0.2);
    border-color: var(--rk-thick-primary);
    color: #ffffff;
    box-shadow: 0 0 20px rgba(59, 130, 246, 0.3);
}

/* Sekcja Suwaka */
.rk-slider-wrapper {
    position: relative;
    padding: 20px 0 40px;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 12px;
    background: #334155;
    border-radius: 10px;
    outline: none;
    cursor: ew-resize;
    position: relative;
    z-index: 2;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: #ffffff;
    border: 5px solid var(--rk-thick-primary);
    box-shadow: 0 0 15px rgba(0,0,0,0.5);
    cursor: grab;
    transition: transform 0.1s;
}

.rk-range-input::-webkit-slider-thumb:active {
    transform: scale(1.1);
    cursor: grabbing;
}

/* Strefy optymalne wizualizacja pod suwakiem */
.rk-slider-zones {
    position: absolute;
    top: 20px;
    left: 0;
    width: 100%;
    height: 12px;
    border-radius: 10px;
    z-index: 1;
    overflow: hidden;
    display: flex;
    opacity: 0.5;
}

/* Ekran Wyników */
.rk-results-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
}

/* SVG Wizualizacja */
.rk-svg-box {
    background: #1e293b;
    border-radius: 16px;
    padding: 30px 15px;
    box-shadow: inset 0 10px 20px rgba(0,0,0,0.2);
    position: relative;
}

.rk-svg-scene {
    width: 100%;
    height: auto;
    max-width: 320px;
    margin: 0 auto;
    display: block;
}

.anim-screed-level {
    transition: all 0.3s ease-out;
}

.rk-alert-badge {
    position: absolute;
    top: 15px;
    right: 15px;
    padding: 6px 12px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    display: flex;
    align-items: center;
    gap: 6px;
    opacity: 0;
    transform: translateY(-10px);
    transition: all 0.3s;
    z-index: 10;
}

.rk-alert-badge.show {
    opacity: 1;
    transform: translateY(0);
}

/* Dynamiczne stany dla kalibratora */
.state-danger-low .rk-range-input::-webkit-slider-thumb { border-color: var(--rk-thick-danger); }
.state-danger-low .anim-screed-level { fill: #7f1d1d; }
.state-danger-low .rk-alert-badge { background: rgba(239, 68, 68, 0.2); color: #fca5a5; }

.state-optimal .rk-range-input::-webkit-slider-thumb { border-color: var(--rk-thick-success); }
.state-optimal .anim-screed-level { fill: #064e3b; }
.state-optimal .rk-alert-badge { background: rgba(16, 185, 129, 0.2); color: #6ee7b7; }

.state-danger-high .rk-range-input::-webkit-slider-thumb { border-color: var(--rk-thick-warning); }
.state-danger-high .anim-screed-level { fill: #78350f; }
.state-danger-high .rk-alert-badge { background: rgba(245, 158, 11, 0.2); color: #fcd34d; }

/* Panel Danych */
.rk-data-panel {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-data-row {
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.05);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-data-label {
    font-size: 14px;
    color: #94a3b8;
    font-weight: 600;
}

.rk-data-val {
    font-size: 22px;
    font-weight: 900;
    color: #ffffff;
    font-variant-numeric: tabular-nums;
}

.rk-data-val small {
    font-size: 14px;
    font-weight: 500;
    color: #64748b;
    margin-left: 4px;
}

@media (max-width: 768px) {
    .rk-thick-header, .rk-thick-app { padding: 30px 20px; }
    .rk-results-grid { grid-template-columns: 1fr; }
    .rk-data-row { flex-direction: column; align-items: flex-start; gap: 5px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-grubosc",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Optymalna grubość wylewki na ogrzewanie podłogowe - Złoty środek inżynierii",
    "description": "Zgodnie z normą PN-EN 1264 optymalna grubość jastrychu to 65 mm (cement) i 50-60 mm (anhydryt). Sprawdź, jak każdy dodatkowy centymetr wpływa na bezwładność termiczną i obciążenie stropu.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-bezwladnosc",
    "name": "Tabela Bezwładności i Obciążeń Wylewek 2026",
    "description": "Zestawienie wzrostu masy jastrychu (kg/m2) oraz opóźnienia w reakcji systemu na zmianę temperatury w funkcji grubości warstwy przykrywającej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "optymalna grubość wylewki na podłogówkę",
      "norma obliczeń ogrzewania podłogowego EN 1264",
      "minimalna warstwa przykrycia rury sd",
      "obciążenie stropu ogrzewanie podłogowe",
      "czas reakcji ogrzewania bezwładność"
    ],
    "measurementTechnique": "Algorytmiczne obliczenia inżynierskie przyrostu masy (ok. 18 kg na każde 10mm) i czasu nagrzewania (ok. 38 minut na każde 10mm) w stosunku do wylewki odniesienia.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Jastrych Cementowy: Całkowita optymalna grubość 65 mm (min. przykrycie 45 mm).",
        "Jastrych Anhydrytowy: Całkowita optymalna grubość 50-60 mm (min. przykrycie 35 mm).",
        "Konsekwencje: Zwiększenie grubości o 10 mm to +15-20 kg obciążenia/m² i +30-45 min. opóźnienia."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-kalibrator",
    "name": "Inżynierski Kalibrator Bezwładności Wylewki",
    "description": "Interaktywny suwak obliczający w czasie rzeczywistym wpływ grubości jastrychu (w mm) na obciążenie stropu, czas odpowiedzi termostatu oraz zgodność grubości sd z normą PN-EN 1264.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input, JavaScript and SVG animations",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-thick-container" id="grubosc-app-core">
    
    <div class="rk-thick-header">
        <h2 class="rk-thick-title">Jaka jest optymalna grubość wylewki na ogrzewanie podłogowe?</h2>
        
        <p class="rk-thick-text">
            Optymalna całkowita <a href="https://projekt-ogrzewania.pl/grubosc-wylewki-betonowej-na-ogrzewanie-podlogowe/">grubość wylewki</a> wynosi <strong>65 mm dla jastrychu cementowego</strong> oraz <strong>50-60 mm dla anhydrytowego</strong>, licząc od warstwy izolacji termicznej. Zgodnie z <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">normą PN-EN 1264</a>, minimalna warstwa przykrycia ponad zewnętrzną średnicą rury (s<sub>d</sub>) powinna wynosić <strong>45 mm</strong> dla cementu i <strong>35 mm</strong> dla anhydrytu (przy klasie wytrzymałości min. C20).
        </p>

        <p class="rk-thick-text">
            Zwiększenie grubości o każde 10 mm to dodatkowe <strong>15-20 kg obciążenia na m²</strong> stropu i drastyczne wydłużenie <a href="https://projekt-ogrzewania.pl/ile-czasu-nagrzewa-sie-podlogowka/">czasu nagrzewania</a> (reakcji na zmianę nastawy na <a href="https://projekt-ogrzewania.pl/termostat-w-ogrzewaniu-podlogowym/">termostacie pokojowym</a>) o około <strong>30-45 minut</strong>. W moich projektach dążymy do inżynierskiego złotego środka: balansu między stabilnością temperatury a sterowalnością.
        </p>
    </div>

    <div class="rk-thick-app">
        <div class="rk-app-header">
            <h3>Kalibrator Bezwładności Wylewki (Symulator)</h3>
            <p style="color: #94a3b8; margin:0; font-size: 14px;">Sprawdź, jak grubość wpływa na fizykę budynku. Zmień parametry poniżej.</p>
        </div>

        <div class="rk-material-switch">
            <button class="rk-mat-btn active" data-mat="cement">Jastrych Cementowy</button>
            <button class="rk-mat-btn" data-mat="anhydryt">Jastrych Anhydrytowy</button>
        </div>

        <div class="rk-slider-wrapper" id="rkZoneContainer">
            <div class="rk-slider-zones" id="rkZones"></div>
            
            <input type="range" min="30" max="100" value="65" class="rk-range-input" id="rkThickSlider">
            <div style="display: flex; justify-content: space-between; margin-top: 10px; font-size: 12px; color: #64748b; font-weight: 700;">
                <span>30 mm (Zbyt cienko)</span>
                <span>100 mm (Bunkier)</span>
            </div>
        </div>

        <div class="rk-results-grid" id="rkResultEngine">
            
            <div class="rk-svg-box">
                <div class="rk-alert-badge" id="rkAlertBadge">
                    <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    <span id="rkAlertText">Ryzyko Pęknięć</span>
                </div>

                <svg viewBox="0 0 230 200" class="rk-svg-scene" xmlns="http://www.w3.org/2000/svg">
                    <rect x="0" y="0" width="230" height="200" fill="none" />
                    
                    <rect x="20" y="150" width="160" height="40" fill="#334155" rx="2" />
                    <text x="30" y="175" fill="#64748b" font-size="12">Izolacja EPS</text>
                    
                    <circle cx="100" cy="142" r="8" fill="#ef4444" stroke="#ffffff" stroke-width="2" />
                    <line x1="100" y1="142" x2="100" y2="150" stroke="#fff" stroke-dasharray="2 2" /> <rect id="svgScreed" class="anim-screed-level" x="20" y="85" width="160" height="65" rx="2" opacity="0.9"/>
                    
                    <path id="svgMeasureLine" class="anim-screed-level" d="M 185 150 L 185 85" stroke="#cbd5e1" stroke-width="2" marker-start="url(#arrow)" marker-end="url(#arrow)"/>
                    <text id="svgMeasureText" x="205" y="120" fill="#f8fafc" font-size="16" font-weight="bold" text-anchor="middle">65</text>
                    
                    <defs>
                        <marker id="arrow" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="4" markerHeight="4" orient="auto-start-reverse">
                            <path d="M 0 0 L 10 5 L 0 10 z" fill="#cbd5e1" />
                        </marker>
                    </defs>
                </svg>
            </div>

            <div class="rk-data-panel">
                <div class="rk-data-row">
                    <span class="rk-data-label">Całkowita Grubość</span>
                    <span class="rk-data-val" id="valTotal">65<small>mm</small></span>
                </div>
                <div class="rk-data-row">
                    <span class="rk-data-label">Otulina nad rurą (s<sub>d</sub>)</span>
                    <span class="rk-data-val" id="valSd">49<small>mm</small></span>
                </div>
                <div class="rk-data-row">
                    <span class="rk-data-label">Szacunkowa masa jastrychu</span>
                    <span class="rk-data-val" id="valWeight">143<small>kg/m²</small></span>
                </div>
                <div class="rk-data-row">
                    <span class="rk-data-label">Dodatkowe opóźnienie reakcji</span>
                    <span class="rk-data-val" style="color: #fca5a5;" id="valLag">+0<small>min</small></span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domeny (Bez znaczników nagłówków)
    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('grubosc-app-core');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; max-width: 950px; margin: 40px auto; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Ochrona Skryptów Narzędziowych</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Kalibrator Bezwładności Wylewki oraz dane strukturalne JSON-LD podlegają ochronie prawnoautorskiej serwisu Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalibratora
    const slider = document.getElementById('rkThickSlider');
    const matBtns = document.querySelectorAll('.rk-mat-btn');
    const engineBox = document.getElementById('rkResultEngine');
    const zonesBox = document.getElementById('rkZones');
    
    // SVG Elements
    const svgScreed = document.getElementById('svgScreed');
    const svgMeasureLine = document.getElementById('svgMeasureLine');
    const svgMeasureText = document.getElementById('svgMeasureText');
    const alertBadge = document.getElementById('rkAlertBadge');
    const alertText = document.getElementById('rkAlertText');

    // Wartości liczbowe
    const vTotal = document.getElementById('valTotal');
    const vSd = document.getElementById('valSd');
    const vWeight = document.getElementById('valWeight');
    const vLag = document.getElementById('valLag');

    // Konfiguracja norm i fizyki
    let currentMat = 'cement'; // 'cement' lub 'anhydryt'
    const RURA_DIA = 16;
    
    const matConfig = {
        cement: {
            minSdNorm: 45,
            densityKgMm: 2.2, // ~2200 kg/m3
            optimalMin: 60,
            optimalMax: 70
        },
        anhydryt: {
            minSdNorm: 35,
            densityKgMm: 2.0, // ~2000 kg/m3
            optimalMin: 50,
            optimalMax: 60
        }
    };

    function drawZones() {
        const conf = matConfig[currentMat];
        const totalRange = 100 - 30; // 70 jednostek
        
        // Poniżej normy (Czerwony)
        const pDangerLow = ((conf.optimalMin - 30) / totalRange) * 100;
        // Optymalna (Zielony)
        const pOptimal = ((conf.optimalMax - conf.optimalMin) / totalRange) * 100;
        // Za gruba (Żółty)
        const pDangerHigh = 100 - pDangerLow - pOptimal;

        zonesBox.innerHTML = `
            <div style="width: ${pDangerLow}%; background: var(--rk-thick-danger);"></div>
            <div style="width: ${pOptimal}%; background: var(--rk-thick-success);"></div>
            <div style="width: ${pDangerHigh}%; background: var(--rk-thick-warning);"></div>
        `;
    }

    function updateCalculator() {
        const t = parseInt(slider.value); // grubość całkowita (30 do 100)
        const conf = matConfig[currentMat];
        
        // Obliczenia
        const sd = t - RURA_DIA; // grubość nad rurą
        const weight = Math.round(t * conf.densityKgMm);
        
        // Obliczenie opóźnienia (delta względem minimum optymalnego)
        // Zakładamy, że każde 10mm PONAD optimum = +38 min (średnia z 30-45)
        let lag = 0;
        if (t > conf.optimalMax) {
            lag = Math.round(((t - conf.optimalMax) / 10) * 38);
        }

        // Aktualizacja UI Tekstowego
        vTotal.innerHTML = `${t}<small>mm</small>`;
        vSd.innerHTML = `${sd}<small>mm</small>`;
        vWeight.innerHTML = `${weight}<small>kg/m²</small>`;
        
        if (lag > 0) {
            vLag.innerHTML = `+${lag}<small>min</small>`;
            vLag.style.color = '#fca5a5';
        } else {
            vLag.innerHTML = `Norma`;
            vLag.style.color = '#6ee7b7';
        }

        // Aktualizacja SVG i Oceny (Klas CSS)
        engineBox.classList.remove('state-danger-low', 'state-optimal', 'state-danger-high');
        
        // Skalowanie w SVG: Y base = 150. 1mm = 1px na rysunku (skala 1:1 dla uproszczenia wizualnego 30-100)
        const rectHeight = t; 
        const rectY = 150 - t;
        
        svgScreed.setAttribute('height', rectHeight);
        svgScreed.setAttribute('y', rectY);
        svgMeasureLine.setAttribute('d', `M 185 150 L 185 ${rectY}`);
        // Wyrównanie Y do środka linii
        svgMeasureText.setAttribute('y', rectY + (rectHeight/2) + 5);
        svgMeasureText.textContent = t;

        // Logika statusu inżynierskiego
        if (sd < conf.minSdNorm) {
            engineBox.classList.add('state-danger-low');
            alertText.textContent = "Brak normy - Spękania!";
            alertBadge.classList.add('show');
        } else if (t >= conf.optimalMin && t <= conf.optimalMax) {
            engineBox.classList.add('state-optimal');
            alertText.textContent = "Złoty Środek";
            alertBadge.classList.add('show');
        } else {
            engineBox.classList.add('state-danger-high');
            alertText.textContent = "Wysoka Bezwładność!";
            alertBadge.classList.add('show');
        }
    }

    // Nasłuch na Slider
    slider.addEventListener('input', updateCalculator);

    // Nasłuch na zmianę materiału
    matBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            matBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            
            currentMat = this.getAttribute('data-mat');
            
            // Dopasuj domyślny slider do optimum materiału przy przełączeniu
            if(currentMat === 'anhydryt') slider.value = 55;
            if(currentMat === 'cement') slider.value = 65;

            drawZones();
            updateCalculator();
        });
    });

    // Inicjalizacja Startowa
    drawZones();
    updateCalculator();
});
</script>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-heat-dark: #0f172a;
    --rk-heat-panel: #1e293b;
    --rk-heat-blue: #0ea5e9; /* Woda/Wilgoć */
    --rk-heat-orange: #f97316; /* Ciepło */
    --rk-heat-red: #ef4444; /* Maksymalna temperatura */
    --rk-heat-green: #10b981; /* Gotowość */
    --rk-heat-bg: #ffffff;
    --rk-heat-text: #334155;
    --rk-heat-border: #e2e8f0;
}

.rk-heat-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-heat-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(249, 115, 22, 0.1);
    border: 1px solid var(--rk-heat-border);
    overflow: hidden;
}

/* Sekcja Treści */
.rk-heat-content {
    padding: 40px 50px 30px;
    background: #ffffff;
    border-bottom: 2px dashed var(--rk-heat-border);
}

.rk-heat-title {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-heat-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-heat-text p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-heat-text);
    margin: 0 0 15px 0;
}

.rk-heat-text strong {
    color: var(--rk-heat-dark);
    font-weight: 800;
}

.rk-heat-text a {
    color: var(--rk-heat-orange);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(249, 115, 22, 0.2);
    transition: all 0.3s;
}

.rk-heat-text a:hover {
    border-bottom-color: var(--rk-heat-orange);
    background: rgba(249, 115, 22, 0.05);
}

.rk-heat-alert {
    display: flex;
    gap: 15px;
    background: #fff7ed;
    border-left: 4px solid var(--rk-heat-orange);
    padding: 20px;
    border-radius: 0 12px 12px 0;
    margin-top: 25px;
}

.rk-heat-alert-icon {
    color: var(--rk-heat-orange);
    flex-shrink: 0;
}

.rk-heat-alert p {
    margin: 0;
    font-size: 15px;
    color: #9a3412;
}

/* Aplikacja Interaktywna */
.rk-heat-app {
    background: var(--rk-heat-dark);
    color: #ffffff;
    padding: 40px 50px;
}

.rk-app-header {
    text-align: center;
    margin-bottom: 30px;
}

.rk-app-header h3 {
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: #f8fafc;
}

.rk-app-header p {
    color: #94a3b8;
    font-size: 14px;
    margin: 0;
}

/* Material Toggle */
.rk-heat-mat-toggle {
    display: flex;
    justify-content: center;
    gap: 15px;
    margin-bottom: 35px;
}

.rk-btn-mat {
    background: rgba(255,255,255,0.05);
    border: 2px solid rgba(255,255,255,0.1);
    color: #94a3b8;
    padding: 12px 25px;
    border-radius: 12px;
    font-weight: 700;
    font-size: 15px;
    cursor: pointer;
    transition: all 0.3s;
}

.rk-btn-mat.active {
    background: rgba(249, 115, 22, 0.15);
    border-color: var(--rk-heat-orange);
    color: #ffffff;
    box-shadow: 0 0 20px rgba(249, 115, 22, 0.2);
}

/* Czas Oczekiwania (Dynamiczny) */
.rk-wait-phase {
    text-align: center;
    background: rgba(14, 165, 233, 0.1);
    border: 1px dashed var(--rk-heat-blue);
    padding: 15px;
    border-radius: 12px;
    margin-bottom: 30px;
}

.rk-wait-phase span {
    display: block;
    font-size: 13px;
    color: var(--rk-heat-blue);
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
}

.rk-wait-phase strong {
    font-size: 24px;
    color: #ffffff;
}

/* Suwak Dni Wygrzewania */
.rk-timeline-slider {
    margin-bottom: 40px;
}

.rk-range-days {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: #334155;
    border-radius: 10px;
    outline: none;
}

.rk-range-days::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: var(--rk-heat-orange);
    border: 4px solid #ffffff;
    box-shadow: 0 0 15px rgba(249, 115, 22, 0.6);
    cursor: pointer;
    transition: transform 0.1s;
}

.rk-range-days::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

.rk-slider-ticks {
    display: flex;
    justify-content: space-between;
    margin-top: 15px;
    font-size: 12px;
    color: #64748b;
    font-weight: 600;
}

/* Ekran Wyników */
.rk-heat-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
}

/* SVG Wizualizacja */
.rk-heat-svg-box {
    background: #1e293b;
    border-radius: 16px;
    padding: 30px 20px;
    box-shadow: inset 0 10px 20px rgba(0,0,0,0.3);
    position: relative;
    text-align: center;
}

.rk-svg-cross {
    width: 100%;
    max-width: 280px;
    height: auto;
}

/* Animacje i dynamiczne kolory SVG */
.anim-pipe { transition: fill 0.5s ease, filter 0.5s ease; }
.anim-therm-fill { transition: height 0.5s ease, y 0.5s ease, fill 0.5s ease; }
.anim-moisture { transition: opacity 0.5s ease; animation: floatUp 2s infinite linear; }

@keyframes floatUp {
    0% { transform: translateY(0) scale(0.8); opacity: 0; }
    50% { opacity: 0.6; }
    100% { transform: translateY(-30px) scale(1.2); opacity: 0; }
}

.delay-1 { animation-delay: 0s; }
.delay-2 { animation-delay: 0.6s; }
.delay-3 { animation-delay: 1.2s; }

/* Panel Danych */
.rk-stats-list {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-item {
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.05);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    flex-direction: column;
}

.rk-stat-label {
    font-size: 13px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
}

.rk-stat-val {
    font-size: 22px;
    font-weight: 900;
    color: #ffffff;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-badge {
    font-size: 11px;
    padding: 4px 8px;
    border-radius: 6px;
    font-weight: 800;
    text-transform: uppercase;
}

.badge-wait { background: rgba(14, 165, 233, 0.2); color: #7dd3fc; }
.badge-heat { background: rgba(249, 115, 22, 0.2); color: #fdba74; }
.badge-done { background: rgba(16, 185, 129, 0.2); color: #6ee7b7; }

@media (max-width: 768px) {
    .rk-heat-header, .rk-heat-app { padding: 30px 20px; }
    .rk-heat-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-wygrzewanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Ile trwa schnięcie i kiedy można uruchomić wygrzewanie podłogówki?",
    "description": "Harmonogram wygrzewania technologicznego wylewki. Sprawdź, dlaczego anhydryt schnie 7 dni, a beton 28 dni. Instrukcja podnoszenia temperatury zasilania krok po kroku.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-harmonogram",
    "name": "Harmonogram Wygrzewania Technologicznego Jastrychu",
    "description": "Zestawienie ram czasowych oraz przyrostów temperatury krzywej grzewczej wymaganych do bezpiecznego usunięcia wilgoci z jastrychu.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "czas schnięcia wylewki anhydrytowej",
      "wygrzewanie technologiczne jastrychu",
      "maksymalna temperatura zasilania podłogówki",
      "harmonogram podnoszenia temperatury",
      "skurcz i spękania betonu"
    ],
    "measurementTechnique": "Algorytm temperaturowy: start 20-25°C przez 3 dni, następnie przyrost +5°C/dobę aż do osiągnięcia projektowej temperatury zasilania Tz (np. 45°C).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Faza 1 (Oczekiwanie): Cement = 28 dni, Anhydryt = 7 dni naturalnego wiązania.",
        "Faza 2 (Start): Utrzymanie 25°C przez 3 doby robocze.",
        "Faza 3 (Progresja): Podnoszenie temperatury zasilania równe 5°C każdego dnia.",
        "Cel końcowy: Pozbycie się resztkowej wilgoci CM przed montażem okładzin (płytek/paneli)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-wygrzewanie",
    "name": "Symulator Wygrzewania Technologicznego",
    "description": "Interaktywny kalendarz budowlany z suwakiem pozwalający sprawdzić wymaganą temperaturę zasilania w danym dniu procesu wygrzewania posadzki.",
    "applicationCategory": "ConstructionCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input, JavaScript and SVG animations",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-heat-container" id="wygrzewanie-app-core">
    
    <div class="rk-heat-content">
        <h2 class="rk-heat-title">Ile trwa schnięcie i kiedy można uruchomić wygrzewanie?</h2>
        
        <div class="rk-heat-text">
            <p>
                Czas schnięcia jastrychu cementowego wynosi standardowo <strong>28 dni</strong>, natomiast jastrych anhydrytowy osiąga gotowość do wygrzewania już po <strong>7 dniach</strong>. Należy pamiętać, gdy planujesz <a href="https://projekt-ogrzewania.pl/kiedy-najlepiej-planowac-montaz-ogrzewania-podlogowego-w-nowym-domu/">montaż ogrzewania w nowym domu</a>, że proces ten absolutnie nie może być przyspieszany przeciągami. Wilgoć musi uchodzić naturalnie i powoli, aby uniknąć destrukcyjnego skurczu materiału i spękań.
            </p>
            <p>
                Wygrzewanie wylewki (tzw. wygrzewanie technologiczne) zaczynamy od temperatury <strong>20-25°C</strong>, którą utrzymujemy stabilnie przez 3 dni. Następnie podnosimy nastawę o <strong>5°C na dobę</strong>, aż do osiągnięcia <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">projektowej temperatury zasilania</a> (np. 45°C). 
            </p>
        </div>

        <div class="rk-heat-alert">
            <svg class="rk-heat-alert-icon" width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            <p><strong>Uwaga inżynierska:</strong> Pominięcie tego kroku przed kładzeniem docelowych <a href="https://projekt-ogrzewania.pl/czy-pod-ogrzewanie-podlogowe-nadaja-sie-panele-czy-tylko-plytki/">płytek lub paneli</a> to gwarancja ich całkowitego odspojenia (tzw. wysadzenia posadzki) już w pierwszym sezonie grzewczym.</p>
        </div>
    </div>

    <div class="rk-heat-app">
        <div class="rk-app-header">
            <h3>Termo-Symulator Wygrzewania Technologicznego</h3>
            <p>Przeprowadź wirtualny proces pozbywania się wilgoci z posadzki.</p>
        </div>

        <div class="rk-heat-mat-toggle">
            <button class="rk-btn-mat active" data-mat="anhydryt">Anhydryt</button>
            <button class="rk-btn-mat" data-mat="cement">Cement</button>
        </div>

        <div class="rk-wait-phase">
            <span>Czas wiązania przed startem pompy ciepła</span>
            <strong id="valWaitTime">7 Dni</strong>
        </div>

        <div class="rk-timeline-slider">
            <input type="range" min="1" max="8" value="1" class="rk-range-days" id="rkDaySlider">
            <div class="rk-slider-ticks">
                <span>Dzień 1 (Start)</span>
                <span>Dzień 4 (Progresja)</span>
                <span>Dzień 8 (Koniec)</span>
            </div>
        </div>

        <div class="rk-heat-grid">
            
            <div class="rk-heat-svg-box">
                <svg viewBox="0 0 200 160" class="rk-svg-cross" xmlns="http://www.w3.org/2000/svg">
                    <rect x="170" y="20" width="12" height="100" fill="#334155" rx="6"/>
                    <rect id="svgThermometer" class="anim-therm-fill" x="170" y="90" width="12" height="30" fill="#3b82f6" rx="6"/>
                    <circle id="svgThermBulb" class="anim-therm-fill" cx="176" cy="120" r="12" fill="#3b82f6"/>
                    
                    <g id="svgMoistureGroup">
                        <path class="anim-moisture delay-1" d="M 60 70 Q 65 60 60 50 Q 55 60 60 70" fill="#0ea5e9"/>
                        <path class="anim-moisture delay-2" d="M 100 80 Q 105 70 100 60 Q 95 70 100 80" fill="#0ea5e9"/>
                        <path class="anim-moisture delay-3" d="M 140 70 Q 145 60 140 50 Q 135 60 140 70" fill="#0ea5e9"/>
                    </g>

                    <rect x="20" y="90" width="140" height="60" fill="#64748b" rx="2" opacity="0.8"/>
                    
                    <circle id="svgPipe1" class="anim-pipe" cx="50" cy="125" r="10" fill="#3b82f6" stroke="#fff" stroke-width="2"/>
                    <circle id="svgPipe2" class="anim-pipe" cx="90" cy="125" r="10" fill="#3b82f6" stroke="#fff" stroke-width="2"/>
                    <circle id="svgPipe3" class="anim-pipe" cx="130" cy="125" r="10" fill="#3b82f6" stroke="#fff" stroke-width="2"/>
                </svg>
            </div>

            <div class="rk-stats-list">
                <div class="rk-stat-item">
                    <span class="rk-stat-label">Dzień Protokołu</span>
                    <span class="rk-stat-val" id="valDay">1</span>
                </div>
                <div class="rk-stat-item">
                    <span class="rk-stat-label">Nastawa Temperatury Zasilania</span>
                    <div class="rk-stat-val">
                        <span id="valTemp">25°C</span>
                        <span class="rk-badge badge-wait" id="valBadge">Utrzymanie</span>
                    </div>
                </div>
                <div class="rk-stat-item">
                    <span class="rk-stat-label">Status Wilgoci (Metoda CM)</span>
                    <span class="rk-stat-val" id="valStatus" style="font-size: 16px;">Intensywne odparowywanie</span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Dyskretne zabezpieczenie domenowe (bez znaczników nagłówków)
    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('wygrzewanie-app-core');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; max-width: 950px; margin: 40px auto; font-family: sans-serif;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Termo-Symulator Wygrzewania Technologicznego jest wyłączną własnością serwisu Projekt-Ogrzewania.pl. Wykryto nieautoryzowaną domenę.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora
    const matBtns = document.querySelectorAll('.rk-btn-mat');
    const waitTimeText = document.getElementById('valWaitTime');
    const slider = document.getElementById('rkDaySlider');
    
    // UI Elements
    const vDay = document.getElementById('valDay');
    const vTemp = document.getElementById('valTemp');
    const vBadge = document.getElementById('valBadge');
    const vStatus = document.getElementById('valStatus');
    
    // SVG Elements
    const pipes = [document.getElementById('svgPipe1'), document.getElementById('svgPipe2'), document.getElementById('svgPipe3')];
    const thermFill = document.getElementById('svgThermometer');
    const thermBulb = document.getElementById('svgThermBulb');
    const moistureGrp = document.getElementById('svgMoistureGroup');

    // Obsługa przełącznika materiałów
    matBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            matBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            
            const mat = this.getAttribute('data-mat');
            if(mat === 'anhydryt') {
                waitTimeText.textContent = "7 Dni";
            } else {
                waitTimeText.textContent = "28 Dni";
            }
        });
    });

    // Mechanizm obliczania protokołu wygrzewania
    function updateProtocol() {
        const day = parseInt(slider.value);
        let temp = 25; // Baza
        let color = '#3b82f6'; // Niebieski (chłodny/startowy)
        let stateText = "";
        let badgeClass = "";
        let badgeText = "";
        let moistureOpacity = "1";

        // Obliczenia logiki z tekstu: 
        // Dni 1-3: 25°C
        // Dzień 4+: +5°C na dobę aż do 45°C
        if (day >= 1 && day <= 3) {
            temp = 25;
            color = '#f59e0b'; // Ciepły żółty
            stateText = "Intensywne odparowywanie";
            badgeClass = "badge-wait";
            badgeText = "Utrzymanie";
            moistureOpacity = "1";
        } else if (day > 3 && day < 8) {
            temp = 25 + ((day - 3) * 5); // Dzień 4 = 30C, Dzień 5 = 35C, itd.
            color = '#f97316'; // Pomarańczowy
            stateText = "Zmniejszona emisja pary wodnej";
            badgeClass = "badge-heat";
            badgeText = "+5°C / Dobę";
            moistureOpacity = (1 - ((day - 3) * 0.2)).toString(); // Zanikanie wilgoci
        } else if (day >= 8) {
            temp = 45; // Max 45°C w 7/8 dniu podnoszenia
            color = '#ef4444'; // Czerwony (Gorący)
            stateText = "Wylewka sucha - Gotowa na płytki!";
            badgeClass = "badge-done";
            badgeText = "Sukces";
            moistureOpacity = "0"; // Brak wilgoci
        }

        // Aktualizacja Tekstów
        vDay.textContent = day;
        vTemp.textContent = temp + "°C";
        vStatus.textContent = stateText;
        
        vBadge.textContent = badgeText;
        vBadge.className = "rk-badge " + badgeClass;

        // Aktualizacja SVG - Rury
        pipes.forEach(p => {
            p.setAttribute('fill', color);
            p.style.filter = `drop-shadow(0 0 5px ${color})`;
        });

        // Aktualizacja SVG - Termometr (Max wys = 100, Min Y = 20, Max Y = 120)
        // Zakres temperatur do symulacji: 20C do 50C (30 jednostek). 
        // 25C to 5 z 30 jednostek = 16%. 45C to 25 z 30 jednostek = 83%.
        const percentFill = ((temp - 15) / 35); // Przepustowość wizualna
        const thermHeight = 100 * percentFill;
        const thermY = 120 - thermHeight;

        thermFill.setAttribute('height', thermHeight);
        thermFill.setAttribute('y', thermY);
        thermFill.setAttribute('fill', color);
        thermBulb.setAttribute('fill', color);

        // Aktualizacja SVG - Zanikanie wilgoci
        moistureGrp.style.opacity = moistureOpacity;
    }

    // Nasłuch na suwak
    slider.addEventListener('input', updateProtocol);

    // Inicjalizacja początkowa
    updateProtocol();
});
</script>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-comp-dark: #0f172a;
    --rk-comp-accent: #3b82f6;
    --rk-comp-cement: #94a3b8;
    --rk-comp-anhydryt: #fbbf24;
    --rk-comp-bg: #ffffff;
    --rk-comp-border: #e2e8f0;
    --rk-comp-text: #334155;
}

.rk-comparator-app {
    max-width: 950px;
    margin: 45px auto;
    font-family: 'Inter', -apple-system, system-ui, sans-serif;
    background: var(--rk-comp-bg);
    border-radius: 24px;
    border: 1px solid var(--rk-comp-border);
    box-shadow: 0 20px 50px -15px rgba(15, 23, 42, 0.1);
    overflow: hidden;
}

/* Nagłówek Komparatora */
.rk-comp-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%);
    border-bottom: 1px solid var(--rk-comp-border);
}

.rk-comp-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-comp-dark);
    margin: 0 0 15px 0;
}

.rk-comp-intro {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-comp-text);
    max-width: 800px;
}

.rk-comp-intro a {
    color: var(--rk-comp-accent);
    text-decoration: none;
    font-weight: 700;
    border-bottom: 2px solid rgba(59, 130, 246, 0.1);
}

.rk-comp-intro a:hover {
    border-bottom-color: var(--rk-comp-accent);
}

/* Panel sterowania (Mobile Tabs Style) */
.rk-comp-controls {
    display: flex;
    padding: 20px 50px;
    gap: 10px;
    overflow-x: auto;
    background: #ffffff;
    scrollbar-width: none;
}

.rk-comp-tab {
    white-space: nowrap;
    padding: 10px 20px;
    background: #f1f5f9;
    border: 1px solid var(--rk-comp-border);
    border-radius: 99px;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    cursor: pointer;
    transition: all 0.3s;
}

.rk-comp-tab.active {
    background: var(--rk-comp-dark);
    color: #ffffff;
    border-color: var(--rk-comp-dark);
}

/* Obszar wizualizacji danych */
.rk-comp-display {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 40px;
    padding: 40px 50px;
    background: #ffffff;
    align-items: center;
}

.rk-comp-info h3 {
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: var(--rk-comp-dark);
}

.rk-comp-info p {
    font-size: 15px;
    line-height: 1.6;
    color: #64748b;
    margin-bottom: 20px;
}

/* Wykresy SVG */
.rk-svg-viz {
    width: 100%;
    max-width: 350px;
    margin: 0 auto;
}

.rk-bar-group {
    margin-bottom: 25px;
}

.rk-bar-label {
    display: flex;
    justify-content: space-between;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    margin-bottom: 8px;
    color: var(--rk-comp-dark);
}

.rk-bar-bg {
    height: 12px;
    background: #f1f5f9;
    border-radius: 6px;
    overflow: hidden;
    position: relative;
}

.rk-bar-fill {
    height: 100%;
    border-radius: 6px;
    transition: width 0.8s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.fill-cement { background: var(--rk-comp-cement); }
.fill-anhydryt { background: var(--rk-comp-anhydryt); }

/* Legenda */
.rk-comp-legend {
    display: flex;
    gap: 20px;
    margin-top: 20px;
    font-size: 13px;
    font-weight: 600;
}

.leg-item { display: flex; align-items: center; gap: 8px; }
.dot { width: 10px; height: 10px; border-radius: 50%; }

/* Tabela mobilna (Fallback) */
.rk-comp-table-box {
    padding: 0 50px 40px;
}

.rk-tech-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 14px;
}

.rk-tech-table th {
    text-align: left;
    padding: 15px;
    background: #f8fafc;
    border-bottom: 2px solid var(--rk-comp-border);
    color: var(--rk-comp-dark);
}

.rk-tech-table td {
    padding: 15px;
    border-bottom: 1px solid var(--rk-comp-border);
    color: var(--rk-comp-text);
}

.rk-tech-table tr:hover { background: #fcfcfc; }

@media (max-width: 768px) {
    .rk-comp-display { grid-template-columns: 1fr; padding: 30px 25px; }
    .rk-comp-header, .rk-comp-controls, .rk-comp-table-box { padding: 25px; }
    .rk-comp-header h2 { font-size: 22px; }
    .rk-comp-info h3 { font-size: 18px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-porownanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Parametry techniczne wylewek – Porównanie inżynierskie",
    "description": "Zestawienie kluczowych parametrów jastrychów grzejnych: przewodność cieplna lambda, grubość s_d, wytrzymałość i dylatacje wg normy PN-EN 1264.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-tabela",
    "name": "Tabela Porównawcza Jastrychów Grzejnych 2026",
    "description": "Dane techniczne jastrychu cementowego i anhydrytowego używane w obliczeniach projektowych OZC i doboru instalacji podłogowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "przewodność cieplna wylewki lambda",
      "norma PN-EN 1264 jastrych",
      "wytrzymałość jastrychu C20/F4",
      "dylatacje wylewki cementowej",
      "ciężar właściwy jastrychu"
    ],
    "measurementTechnique": "Porównanie parametrów znormalizowanych wg normy PN-EN 1264 oraz danych producentów chemii budowlanej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        { "@type": "ListItem", "name": "Lambda Cement", "value": "1.2 W/(m·K)" },
        { "@type": "ListItem", "name": "Lambda Anhydryt", "value": "1.8 W/(m·K)" },
        { "@type": "ListItem", "name": "Min s_d Cement", "value": "45 mm" },
        { "@type": "ListItem", "name": "Min s_d Anhydryt", "value": "35 mm" }
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-komparator",
    "name": "Interaktywny Komparator Technologii Jastrychowych",
    "description": "Narzędzie symulujące różnice w wydajności i konstrukcji wylewek na ogrzewanie podłogowe.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG Support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-comparator-app" id="rk-comp-app">
    
    <div class="rk-comp-header">
        <h2>Parametry techniczne wylewek – porównanie</h2>
        <p class="rk-comp-intro">
            Wybór między jastrychem cementowym a anhydrytowym to nie kwestia gustu, a czysta inżynieria. Według <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">normy PN-EN 1264</a>, to parametry takie jak przewodność cieplna (lambda) i grubość s<sub>d</sub> determinują wydajność całego układu.
        </p>
    </div>

    <div class="rk-comp-controls">
        <div class="rk-comp-tab active" data-param="lambda">Przewodność (lambda)</div>
        <div class="rk-comp-tab" data-param="thickness">Grubość (s<sub>d</sub>)</div>
        <div class="rk-comp-tab" data-param="dilatation">Dylatacje</div>
        <div class="rk-comp-tab" data-param="weight">Ciężar właściwy</div>
    </div>

    <div class="rk-comp-display">
        <div class="rk-comp-info" id="rk-comp-text">
            <h3 id="comp-title">Przewodność cieplna (lambda)</h3>
            <p id="comp-desc">Anhydryt wygrywa w kategorii szybkości oddawania ciepła. Wyższa wartość lambda pozwala na obniżenie temperatury zasilania pompy ciepła.</p>
            <div class="rk-comp-legend">
                <div class="leg-item"><span class="dot" style="background:var(--rk-comp-cement)"></span> Cement</div>
                <div class="leg-item"><span class="dot" style="background:var(--rk-comp-anhydryt)"></span> Anhydryt</div>
            </div>
        </div>

        <div class="rk-svg-viz">
            <div class="rk-bar-group">
                <div class="rk-bar-label">
                    <span>Cement</span>
                    <span id="val-cement">1.2 W/mK</span>
                </div>
                <div class="rk-bar-bg">
                    <div class="rk-bar-fill fill-cement" id="bar-cement" style="width: 60%"></div>
                </div>
            </div>
            <div class="rk-bar-group">
                <div class="rk-bar-label">
                    <span>Anhydryt</span>
                    <span id="val-anhydryt">1.8 W/mK</span>
                </div>
                <div class="rk-bar-bg">
                    <div class="rk-bar-fill fill-anhydryt" id="bar-anhydryt" style="width: 90%"></div>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-comp-table-box">
        <h4 style="margin: 0 0 20px 0; color: var(--rk-comp-dark); font-size: 16px;">Tabela zbiorcza parametrów (Standard Inżynierski)</h4>
        <div style="overflow-x: auto;">
            <table class="rk-tech-table">
                <thead>
                    <tr>
                        <th>Parametr</th>
                        <th>Jastrych Cementowy</th>
                        <th>Jastrych Anhydrytowy</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td><strong>Wytrzymałość (Klasa)</strong></td>
                        <td>C20/F4 do C30/F5</td>
                        <td>C20/F5 do C35/F7</td>
                    </tr>
                    <tr>
                        <td><strong>Odporność na wilgoć</strong></td>
                        <td>Wysoka (Łazienki)</td>
                        <td>Niska (Pomieszczenia suche)</td>
                    </tr>
                    <tr>
                        <td><strong>Czas do wejścia</strong></td>
                        <td>2-3 dni</td>
                        <td>24-48 godzin</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z Twoim wzorem)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-comp-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; margin: 20px;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Interaktywny Komparator Jastrychów oraz struktura Dataset są własnością intelektualną Projekt-Ogrzewania.pl. Użycie nieautoryzowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Komparatora
    const tabs = document.querySelectorAll('.rk-comp-tab');
    const title = document.getElementById('comp-title');
    const desc = document.getElementById('comp-desc');
    const barCement = document.getElementById('bar-cement');
    const barAnhydryt = document.getElementById('bar-anhydryt');
    const valCement = document.getElementById('val-cement');
    const valAnhydryt = document.getElementById('val-anhydryt');

    const data = {
        lambda: {
            title: "Przewodność cieplna (lambda)",
            desc: "Anhydryt wygrywa w kategorii szybkości oddawania ciepła. Pozwala to na szybszą reakcję systemu i wyższą sprawność energetyczną.",
            cCement: "1.2 W/mK",
            cAnhy: "1.8 W/mK",
            pCement: "60%",
            pAnhy: "90%"
        },
        thickness: {
            title: "Min. grubość nad rurką (s<sub>d</sub>)",
            desc: "Anhydryt pozwala na cieńszą warstwę (35mm), co redukuje bezwładność. Cement wymaga min. 45mm dla zachowania stabilności płyty.",
            cCement: "45 mm",
            cAnhy: "35 mm",
            pCement: "85%",
            pAnhy: "60%"
        },
        dilatation: {
            title: "Pole dylatacyjne (Max m²)",
            desc: "Cement wymaga gęstej siatki nacięć co 30-40m². Anhydryt jest niemal bezskurczowy, co pozwala na pola do 600m² bez przerw.",
            cCement: "40 m²",
            cAnhy: "600 m²",
            pCement: "15%",
            pAnhy: "100%"
        },
        weight: {
            title: "Ciężar właściwy (kg/m³)",
            desc: "Oba materiały są ciężkie, ale cement z racji wymaganej większej grubości generuje o ok. 20% większe obciążenie stropu.",
            cCement: "2200 kg/m³",
            cAnhy: "2100 kg/m³",
            pCement: "100%",
            pAnhy: "95%"
        }
    };

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            tabs.forEach(t => t.classList.remove('active'));
            this.classList.add('active');

            const p = this.getAttribute('data-param');
            const d = data[p];

            // Animacja tekstu i słupków
            title.innerHTML = d.title;
            desc.innerHTML = d.desc;
            
            barCement.style.width = d.pCement;
            barAnhydryt.style.width = d.pAnhy;
            
            valCement.innerText = d.cCement;
            valAnhydryt.innerText = d.cAnhy;
        });
    });
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-calc-dark: #0f172a;
    --rk-calc-panel: #1e293b;
    --rk-calc-primary: #06b6d4; /* Cyjan - techniczny/kalkulacyjny */
    --rk-calc-primary-dark: #0891b2;
    --rk-calc-accent: #8b5cf6; /* Fiolet - inżynieria */
    --rk-calc-warning: #f59e0b;
    --rk-calc-bg: #ffffff;
    --rk-calc-text: #334155;
    --rk-calc-border: #e2e8f0;
}

.rk-calc-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-calc-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(6, 182, 212, 0.15);
    border: 1px solid var(--rk-calc-border);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-calc-header {
    padding: 45px 50px 30px;
    background: #ffffff;
}

.rk-calc-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-calc-dark);
    margin: 0 0 20px 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-calc-intro {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-calc-text);
    margin: 0;
}

.rk-calc-intro strong {
    color: var(--rk-calc-dark);
    font-weight: 800;
}

/* Interfejs Kalkulatora */
.rk-calc-app {
    background: var(--rk-calc-dark);
    padding: 40px 50px;
    color: #ffffff;
}

.rk-app-title {
    font-size: 20px;
    font-weight: 800;
    color: #f8fafc;
    margin: 0 0 30px 0;
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 1px;
}

/* Panel sterowania */
.rk-controls-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    margin-bottom: 40px;
}

.rk-control-group {
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.1);
    padding: 25px;
    border-radius: 16px;
}

.rk-control-label {
    display: flex;
    justify-content: space-between;
    font-size: 14px;
    font-weight: 700;
    color: #94a3b8;
    margin-bottom: 15px;
    text-transform: uppercase;
}

.rk-control-val {
    color: var(--rk-calc-primary);
    font-size: 18px;
    font-weight: 900;
}

/* Suwak Metrażu */
.rk-area-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: #334155;
    border-radius: 8px;
    outline: none;
    margin-top: 10px;
}

.rk-area-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--rk-calc-primary);
    border: 4px solid #ffffff;
    cursor: ew-resize;
    transition: transform 0.1s;
    box-shadow: 0 0 15px rgba(6, 182, 212, 0.5);
}

.rk-area-slider::-webkit-slider-thumb:active {
    transform: scale(1.15);
}

/* Przełącznik Materiału */
.rk-mat-toggle {
    display: flex;
    gap: 10px;
}

.rk-mat-btn {
    flex: 1;
    background: rgba(0,0,0,0.2);
    border: 2px solid rgba(255,255,255,0.1);
    color: #94a3b8;
    padding: 12px;
    border-radius: 10px;
    font-weight: 700;
    font-size: 14px;
    cursor: pointer;
    transition: all 0.3s;
}

.rk-mat-btn.active {
    background: rgba(139, 92, 246, 0.2);
    border-color: var(--rk-calc-accent);
    color: #ffffff;
}

/* Wyniki (Algorytm) */
.rk-results-board {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    margin-bottom: 30px;
}

.rk-res-card {
    background: var(--rk-calc-panel);
    border: 1px solid rgba(255,255,255,0.05);
    border-top: 4px solid var(--rk-calc-primary);
    padding: 25px;
    border-radius: 12px;
    position: relative;
    overflow: hidden;
}

.rk-res-card.accent {
    border-top-color: var(--rk-calc-accent);
    background: linear-gradient(180deg, rgba(139, 92, 246, 0.1) 0%, var(--rk-calc-panel) 100%);
}

.rk-res-step {
    font-size: 12px;
    color: #64748b;
    font-weight: 800;
    text-transform: uppercase;
    margin-bottom: 5px;
}

.rk-res-title {
    font-size: 15px;
    color: #cbd5e1;
    font-weight: 600;
    margin-bottom: 15px;
}

.rk-res-formula {
    font-family: 'Courier New', monospace;
    font-size: 12px;
    color: #94a3b8;
    background: rgba(0,0,0,0.3);
    padding: 5px 8px;
    border-radius: 4px;
    margin-bottom: 15px;
    display: inline-block;
}

.rk-res-output {
    font-size: 32px;
    font-weight: 900;
    color: #ffffff;
    display: flex;
    align-items: baseline;
    gap: 5px;
}

.rk-res-output small {
    font-size: 16px;
    font-weight: 600;
    color: #94a3b8;
}

/* SVG Animacja Obciążenia */
.rk-svg-viz {
    width: 100%;
    height: 120px;
    background: rgba(0,0,0,0.2);
    border-radius: 12px;
    margin-top: 20px;
}

.anim-weight-block {
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.anim-heat-arrow {
    transition: stroke-dashoffset 0.5s;
    animation: flowResistance 2s infinite linear;
}

@keyframes flowResistance {
    to { stroke-dashoffset: -20; }
}

/* Mocne CTA - Sprzedażowe */
.rk-cta-box {
    background: linear-gradient(135deg, #f8fafc 0%, #e0e7ff 100%);
    padding: 45px 50px;
    border-top: 1px solid var(--rk-calc-border);
    display: flex;
    flex-direction: column;
    align-items: center;
    text-align: center;
}

.rk-cta-warning {
    color: #4338ca;
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 10px;
}

.rk-cta-title {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-calc-dark);
    margin: 0 0 15px 0;
}

.rk-cta-desc {
    font-size: 16px;
    color: #475569;
    max-width: 700px;
    line-height: 1.6;
    margin: 0 0 30px 0;
}

.rk-cta-btn {
    background: #4f46e5;
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 18px 40px;
    border-radius: 12px;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 12px;
    box-shadow: 0 10px 20px -5px rgba(79, 70, 229, 0.4);
    transition: all 0.3s;
    border: 2px solid transparent;
}

.rk-cta-btn:hover {
    background: #4338ca;
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(79, 70, 229, 0.5);
}

@media (max-width: 768px) {
    .rk-calc-header, .rk-calc-app, .rk-cta-box { padding: 30px 20px; }
    .rk-controls-grid, .rk-results-board { grid-template-columns: 1fr; gap: 20px; }
    .rk-res-output { font-size: 26px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Kalkulator ilości materiału i parametrów termicznych (Algorytm)",
    "description": "Zrozum fizykę swojej posadzki. Kalkulator inżynierski obliczający objętość (V), masę (M) oraz opór cieplny (Rλ) dla jastrychu cementowego i anhydrytowego.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-algorytm",
    "name": "Algorytm Obliczeniowy Jastrychu Grzejnego OZC",
    "description": "Zestaw wzorów matematycznych i stałych fizycznych używanych do doboru parametrów ogrzewania podłogowego: Objętość, Masa, Opór Cieplny.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "obliczanie objętości betonu na wylewkę",
      "opór cieplny jastrychu R lambda",
      "masa jastrychu obciążenie stropu",
      "algorytm OZC projektowanie ogrzewania",
      "wzór na parametry termiczne podłogówki"
    ],
    "measurementTechnique": "Kalkulacja oparta na wzorach fizycznych: V = A × h, M = V × ρ, Rλ = d / λ. Gęstość cementu ~2200 kg/m³, anhydrytu ~2100 kg/m³.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Objętość (V) = Metraż (A) × Grubość (h).",
        "Krok 2: Masa (M) = Objętość (V) × Gęstość materiału (ρ).",
        "Krok 3: Opór cieplny (Rλ) = Grubość (d) / Przewodność cieplna (λ)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-kalkulator-wylewki",
    "name": "Inżynierski Kalkulator Jastrychu",
    "description": "Interaktywny kalkulator przeliczający w czasie rzeczywistym metraż domu na metry sześcienne betonu, tony obciążenia stropu oraz opór termiczny Rλ.",
    "applicationCategory": "EngineeringCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5 Range Input, JavaScript and SVG rendering",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calc-container" id="rk-algorytm-app">
    
    <div class="rk-calc-header">
        <h2 class="rk-calc-title">
            <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="color: var(--rk-calc-primary);"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
            Kalkulator materiału i parametrów termicznych
        </h2>
        <p class="rk-calc-intro">
            Jako inżynier, nie operuję na „workach”, ale na objętości i oporze przewodzenia. W moich projektach liczy się każdy niuans, bo ma on wpływ na końcowe <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczenia OZC</a>. Anhydryt stawia o <strong>50% mniejszy opór cieplny</strong> niż tradycyjny beton. Sprawdź, jak matematyka fizyki budowli wygląda dla Twojego domu.
        </p>
    </div>

    <div class="rk-calc-app">
        <h3 class="rk-app-title">Kalkulator Inżynierski Jastrychu</h3>

        <div class="rk-controls-grid">
            <div class="rk-control-group">
                <div class="rk-control-label">
                    <span>Powierzchnia (A)</span>
                    <span class="rk-control-val" id="valAreaOut">150 m²</span>
                </div>
                <input type="range" min="50" max="350" value="150" step="5" class="rk-area-slider" id="rkSliderArea">
            </div>

            <div class="rk-control-group">
                <div class="rk-control-label"><span>Rodzaj Mieszanki</span></div>
                <div class="rk-mat-toggle">
                    <button class="rk-mat-btn active" data-mat="cement">Jastrych Cementowy</button>
                    <button class="rk-mat-btn" data-mat="anhydryt">Anhydryt (Płynny)</button>
                </div>
            </div>
        </div>

        <div class="rk-results-board">
            <div class="rk-res-card">
                <div class="rk-res-step">Krok 1: Objętość</div>
                <div class="rk-res-title">Ilość betonu (V)</div>
                <div class="rk-res-formula">V = A × h</div>
                <div class="rk-res-output" id="outVol">9.75 <small>m³</small></div>
            </div>

            <div class="rk-res-card">
                <div class="rk-res-step">Krok 2: Masa</div>
                <div class="rk-res-title">Obciążenie stropu (M)</div>
                <div class="rk-res-formula">M = V × ρ</div>
                <div class="rk-res-output" id="outMass">21.4 <small>ton</small></div>
            </div>

            <div class="rk-res-card accent">
                <div class="rk-res-step">Krok 3: Termika</div>
                <div class="rk-res-title">Opór cieplny (R<sub>λ</sub>)</div>
                <div class="rk-res-formula">R<sub>λ</sub> = d / λ</div>
                <div class="rk-res-output" id="outRes" style="color: #c4b5fd;">0.054 <small>m²·K/W</small></div>
            </div>
        </div>

        <svg class="rk-svg-viz" viewBox="0 0 800 120" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid slice">
            <rect x="0" y="80" width="800" height="40" fill="#334155" />
            <circle cx="400" cy="80" r="16" fill="#ef4444" stroke="#fff" stroke-width="3"/>
            
            <rect id="svgScreedBlock" class="anim-weight-block" x="250" y="20" width="300" height="60" fill="#64748b" rx="4" opacity="0.8"/>
            <text id="svgScreedText" x="400" y="55" fill="#ffffff" font-size="14" font-weight="bold" text-anchor="middle">Obciążenie: 21.4 ton</text>

            <path class="anim-heat-arrow" id="svgHeat1" d="M 360 80 L 360 10" stroke="#f59e0b" stroke-width="4" stroke-dasharray="8" fill="none" stroke-linecap="round"/>
            <path class="anim-heat-arrow" id="svgHeat2" d="M 440 80 L 440 10" stroke="#f59e0b" stroke-width="4" stroke-dasharray="8" fill="none" stroke-linecap="round"/>
        </svg>

    </div>

    <div class="rk-cta-box">
        <div class="rk-cta-warning">Decyzja, której nie cofniesz</div>
        <h3 class="rk-cta-title">Zaraz, zaraz&#8230; Różnica to 50%!</h3>
        <p class="rk-cta-desc">
            Zauważyłeś? Opór cieplny wylewki cementowej jest o połowę wyższy. Jeśli dobierzesz rozstaw rur i parametry pompy ciepła pod anhydryt, a wylejesz grubszy beton – <strong>będziesz miał niedogrzany dom</strong>. System podłogowy musi być zaprojektowany z uwzględnieniem docelowego jastrychu!
        </p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-cta-btn">
            Zamów Profesjonalny Projekt Podłogówki
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H-tags w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-algorytm-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zabezpieczenie Antypirackie</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Kalkulator Inżynierski Jastrychu jest prawnie chronionym kodem domeny Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Algorytmu Kalkulatora
    const sliderArea = document.getElementById('rkSliderArea');
    const valAreaOut = document.getElementById('valAreaOut');
    const matBtns = document.querySelectorAll('.rk-mat-btn');
    
    const outVol = document.getElementById('outVol');
    const outMass = document.getElementById('outMass');
    const outRes = document.getElementById('outRes');
    
    const svgBlock = document.getElementById('svgScreedBlock');
    const svgText = document.getElementById('svgScreedText');
    const heatArr1 = document.getElementById('svgHeat1');
    const heatArr2 = document.getElementById('svgHeat2');

    let currentMat = 'cement';

    const physics = {
        cement: { h: 0.065, rho: 2200, lambda: 1.2, color: '#64748b', heatSpeed: '3s' },
        anhydryt: { h: 0.050, rho: 2100, lambda: 1.8, color: '#8b5cf6', heatSpeed: '1.5s' }
    };

    function runAlgorithm() {
        const A = parseInt(sliderArea.value);
        valAreaOut.innerText = `${A} m²`;

        const mat = physics[currentMat];
        
        // Obliczenia
        const V = A * mat.h;
        const M_kg = V * mat.rho;
        const M_ton = M_kg / 1000;
        const R = mat.h / mat.lambda;

        // Aktualizacja DOM
        outVol.innerHTML = `${V.toFixed(2)} <small>m³</small>`;
        outMass.innerHTML = `${M_ton.toFixed(1)} <small>ton</small>`;
        outRes.innerHTML = `${R.toFixed(3)} <small>m²·K/W</small>`;

        // Aktualizacja SVG wizualizacji (Szerokość rośnie z metrażem bazowo)
        const blockWidth = 150 + (A * 1.5); // Skalowanie wizualne
        const blockX = 400 - (blockWidth / 2);
        const blockHeight = mat.h * 1000; // Skalowanie grubości
        const blockY = 80 - blockHeight;

        svgBlock.setAttribute('width', blockWidth > 700 ? 700 : blockWidth);
        svgBlock.setAttribute('x', blockWidth > 700 ? 50 : blockX);
        svgBlock.setAttribute('height', blockHeight);
        svgBlock.setAttribute('y', blockY);
        svgBlock.setAttribute('fill', mat.color);
        
        svgText.setAttribute('y', blockY + (blockHeight/2) + 5);
        svgText.textContent = `Obciążenie: ${M_ton.toFixed(1)} ton`;

        // Prędkość animacji ciepła
        heatArr1.style.animationDuration = mat.heatSpeed;
        heatArr2.style.animationDuration = mat.heatSpeed;
    }

    // Eventy
    sliderArea.addEventListener('input', runAlgorithm);

    matBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            matBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            currentMat = this.getAttribute('data-mat');
            runAlgorithm();
        });
    });

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



<style>
:root {
    --rk-err-dark: #0f172a;
    --rk-err-panel: #1e293b;
    --rk-err-red: #ef4444; /* Błąd krytyczny */
    --rk-err-orange: #f97316; /* Ostrzeżenie */
    --rk-err-blue: #3b82f6; /* Woda / Mróz */
    --rk-err-gray: #64748b;
    --rk-err-bg: #ffffff;
    --rk-err-border: #e2e8f0;
    --rk-err-text: #334155;
}

.rk-err-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-err-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(239, 68, 68, 0.1);
    border: 1px solid var(--rk-err-border);
    overflow: hidden;
}

/* Nagłówek i Wstęp */
.rk-err-header {
    padding: 40px 50px 30px;
    background: linear-gradient(135deg, #fff1f2 0%, #ffffff 100%);
    border-bottom: 2px dashed #fecdd3;
}

.rk-err-title {
    font-size: 26px;
    font-weight: 900;
    color: #9f1239;
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-err-intro {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-err-text);
    margin: 0;
}

.rk-err-intro a {
    color: #be123c;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(190, 18, 60, 0.2);
    transition: all 0.3s;
}

.rk-err-intro a:hover {
    border-bottom-color: #be123c;
    background: rgba(190, 18, 60, 0.05);
}

/* Panel Symulatora */
.rk-err-app {
    display: grid;
    grid-template-columns: 350px 1fr;
    background: var(--rk-err-dark);
    color: #ffffff;
}

/* Przyciski (Lista Błędów) */
.rk-err-sidebar {
    padding: 30px;
    border-right: 1px solid rgba(255,255,255,0.05);
    background: #0b1120;
}

.rk-err-sidebar h3 {
    font-size: 15px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #94a3b8;
    margin: 0 0 20px 0;
    font-weight: 800;
}

.rk-fault-btn {
    display: flex;
    flex-direction: column;
    width: 100%;
    text-align: left;
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.05);
    padding: 15px;
    border-radius: 12px;
    margin-bottom: 10px;
    cursor: pointer;
    transition: all 0.3s;
    color: #cbd5e1;
}

.rk-fault-btn:hover {
    background: rgba(255,255,255,0.08);
}

.rk-fault-btn.active {
    background: rgba(239, 68, 68, 0.15);
    border-color: var(--rk-err-red);
    color: #ffffff;
    box-shadow: inset 4px 0 0 var(--rk-err-red);
}

.rk-fault-name {
    font-size: 15px;
    font-weight: 800;
    margin-bottom: 4px;
}

.rk-fault-hint {
    font-size: 12px;
    color: #64748b;
}

/* Wizualizacja i Opis (Prawa strona) */
.rk-err-main {
    padding: 40px;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

/* Moduł SVG */
.rk-err-svg-box {
    background: var(--rk-err-panel);
    border-radius: 16px;
    padding: 20px;
    box-shadow: inset 0 10px 20px rgba(0,0,0,0.4);
    margin-bottom: 30px;
    position: relative;
}

.rk-svg-scene {
    width: 100%;
    max-width: 320px;
    height: auto;
    margin: 0 auto;
    display: block;
}

/* Opis wybranego błędu */
.rk-err-details {
    background: rgba(0,0,0,0.2);
    border-left: 4px solid var(--rk-err-red);
    padding: 25px;
    border-radius: 0 12px 12px 0;
}

.rk-err-details h4 {
    font-size: 20px;
    font-weight: 800;
    margin: 0 0 10px 0;
    color: #f8fafc;
}

.rk-err-details p {
    font-size: 15px;
    line-height: 1.7;
    color: #94a3b8;
    margin: 0 0 15px 0;
}

.rk-err-tech {
    display: inline-block;
    background: rgba(239, 68, 68, 0.2);
    color: #fca5a5;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 700;
    font-family: 'Courier New', monospace;
}

/* ANIMACJE SVG (Sterowane klasami z JS) */
.anim-layer { opacity: 0; transition: opacity 0.4s; }

/* 1. Dylatacje (Pęknięcia) */
.state-dylatacja .svg-crack { opacity: 1; stroke-dasharray: 100; animation: drawCrack 1s forwards; }
@keyframes drawCrack { from { stroke-dashoffset: 100; } to { stroke-dashoffset: 0; } }
.state-dylatacja .svg-foam { fill: #ef4444; }

/* 2. Powietrze (Izolator) */
.state-powietrze .svg-bubbles { opacity: 1; animation: pulseBubbles 1.5s infinite alternate; }
@keyframes pulseBubbles { from { transform: scale(0.95); stroke-width: 1; } to { transform: scale(1.05); stroke-width: 2.5; } }
.state-powietrze .svg-heat { stroke: #64748b; opacity: 0.3; } /* Słabe ciepło */

/* 3. Temperatura (Mróz/Smażenie) */
.state-temperatura .svg-screed { animation: flashTemp 2s infinite; }
@keyframes flashTemp { 0% { fill: #64748b; } 50% { fill: #3b82f6; } 100% { fill: #64748b; } }

/* 4. Plastyfikator (Pustki) */
.state-chemia .svg-voids { opacity: 1; }
.state-chemia .svg-screed { fill: #475569; }

/* Domyślne ciepło */
.svg-heat { stroke: #ef4444; animation: flowHeat 1.5s infinite linear; }
@keyframes flowHeat { to { stroke-dashoffset: -20; } }

@media (max-width: 768px) {
    .rk-err-app { grid-template-columns: 1fr; }
    .rk-err-header, .rk-err-sidebar, .rk-err-main { padding: 25px; }
    .rk-fault-btn { padding: 12px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Najczęstsze błędy niszczące instalację ogrzewania podłogowego",
    "description": "Zestawienie krytycznych błędów wykonawczych: brak dylatacji, złe odpowietrzenie anhydrytu, szok termiczny oraz złe proporcje plastyfikatora w miksokrecie.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-bledy",
    "name": "Rejestr Błędów Wykonawczych Jastrychu Grzejnego",
    "description": "Baza danych dokumentująca fizyczne i termodynamiczne skutki błędów instalatorskich na wylewkach betonowych i anhydrytowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "brak dylatacji brzegowej pękanie posadzki",
      "odpowietrzenie anhydrytu powietrze izolator",
      "plastyfikator do ogrzewania podłogowego",
      "najczęstsze błędy montażu ogrzewania podłogowego",
      "wygrzewanie wylewki w ujemnych temperaturach"
    ],
    "measurementTechnique": "Wizualizacja defektów strukturalnych za pomocą animacji SVG oraz estymacja spadku sprawności z uwzględnieniem oporu cieplnego powietrza (λ ≈ 0,025).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Brak dylatacji (min. 8-10 mm): skutkuje prężeniem i pękaniem na obwodzie.",
        "Pęcherze powietrza: działają jak izolator (Lambda pow. = 0.025), blokując transfer ciepła z rur PEX.",
        "Szok termiczny: zamarzanie lub przesuszenie (smażenie) degraduje strukturę krystaliczną.",
        "Zła chemia: brak plastyfikatora (0.2kg/worek) powoduje pustki powietrzne w miksokrecie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-symulator-awarii",
    "name": "X-Ray: Symulator Awarii Wylewki",
    "description": "Narzędzie inżynierskie pozwalające na interaktywny podgląd struktury wewnętrznej posadzki poddanej błędom wykonawczym.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG Support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-err-container" id="rk-bledy-core">
    
    <div class="rk-err-header">
        <h2 class="rk-err-title">
            <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Najczęstsze błędy niszczące instalację
        </h2>
        <p class="rk-err-intro">
            Fizyka budowli nie wybacza amatorszczyzny. <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">Błędy przy montażu ogrzewania podłogowego</a> na etapie wylewania jastrychu to wyrok na całą instalację hydrauliczną. Kucie gotowej posadzki to koszmar każdego inwestora. Zobacz, co dzieje się wewnątrz betonu, gdy wykonawca oszczędza na dylatacjach lub chemii.
        </p>
    </div>

    <div class="rk-err-app" id="rkErrEngine">
        
        <div class="rk-err-sidebar">
            <h3>Wybierz błąd wykonawczy</h3>
            
            <button class="rk-fault-btn active" data-err="dylatacja">
                <span class="rk-fault-name">1. Brak dylatacji</span>
                <span class="rk-fault-hint">Pękanie progów i narożników</span>
            </button>
            
            <button class="rk-fault-btn" data-err="powietrze">
                <span class="rk-fault-name">2. Złe odpowietrzenie</span>
                <span class="rk-fault-hint">Pęcherze w anhydrycie (Izolator)</span>
            </button>
            
            <button class="rk-fault-btn" data-err="temperatura">
                <span class="rk-fault-name">3. Szok termiczny</span>
                <span class="rk-fault-hint">Zamarznięcie lub &#8222;smażenie&#8221; betonu</span>
            </button>
            
            <button class="rk-fault-btn" data-err="chemia">
                <span class="rk-fault-name">4. Brak plastyfikatora</span>
                <span class="rk-fault-hint">Pustki powietrzne w miksokrecie</span>
            </button>
        </div>

        <div class="rk-err-main">
            
            <div class="rk-err-svg-box">
                <svg viewBox="0 0 300 160" class="rk-svg-scene" xmlns="http://www.w3.org/2000/svg">
                    <rect x="270" y="20" width="30" height="140" fill="#334155" />
                    <rect class="svg-foam" x="260" y="20" width="10" height="140" fill="#0ea5e9" transition="fill 0.3s"/>
                    
                    <rect x="0" y="130" width="260" height="30" fill="#475569" />
                    
                    <circle cx="80" cy="110" r="10" fill="#ef4444" stroke="#fff" stroke-width="2"/>
                    <circle cx="180" cy="110" r="10" fill="#ef4444" stroke="#fff" stroke-width="2"/>
                    
                    <path class="svg-heat" d="M 80 90 V 40" stroke-width="3" stroke-dasharray="6" fill="none" stroke-linecap="round"/>
                    <path class="svg-heat" d="M 180 90 V 40" stroke-width="3" stroke-dasharray="6" fill="none" stroke-linecap="round"/>

                    <rect class="svg-screed" x="0" y="50" width="260" height="80" fill="#94a3b8" opacity="0.8" rx="2"/>

                    <path class="anim-layer svg-crack" d="M 260 55 L 230 80 L 250 110 L 220 130" fill="none" stroke="#020617" stroke-width="3" stroke-linejoin="round"/>
                    <path class="anim-layer svg-crack" d="M 150 50 L 140 70 L 160 90" fill="none" stroke="#020617" stroke-width="2" />

                    <g class="anim-layer svg-bubbles">
                        <circle cx="80" cy="110" r="16" fill="none" stroke="#f8fafc" stroke-width="2" stroke-dasharray="4"/>
                        <circle cx="180" cy="110" r="16" fill="none" stroke="#f8fafc" stroke-width="2" stroke-dasharray="4"/>
                    </g>

                    <g class="anim-layer svg-voids" fill="#1e293b" opacity="0.6">
                        <circle cx="40" cy="70" r="5"/>
                        <circle cx="120" cy="90" r="8"/>
                        <circle cx="210" cy="65" r="6"/>
                        <circle cx="150" cy="110" r="4"/>
                        <circle cx="50" cy="100" r="7"/>
                    </g>
                </svg>
            </div>

            <div class="rk-err-details">
                <h4 id="errTitle">Brak dylatacji brzegowych</h4>
                <p id="errDesc">Wylewka stale „pracuje” termicznie (rozszerza się i kurczy). Brak <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/" style="color:#f8fafc; text-decoration:underline;">pianki dylatacyjnej</a> o grubości min. 8-10 mm uderzy rykoszetem – spowoduje potężne naprężenia i pękanie jastrychu w progach, narożnikach oraz uszkodzenie płytek.</p>
                <div class="rk-err-tech" id="errParam">Wymóg: Pianka min. 8-10 mm gr.</div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków H-tags w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-bledy-core');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Moduł "Symulator Awarii Instalacji" to zintegrowany kod należący do Projekt-Ogrzewania.pl. Użycie nieautoryzowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Błędów
    const btns = document.querySelectorAll('.rk-fault-btn');
    const engine = document.getElementById('rkErrEngine');
    
    // Pola tekstowe
    const titleObj = document.getElementById('errTitle');
    const descObj = document.getElementById('errDesc');
    const paramObj = document.getElementById('errParam');

    // Baza danych błędów
    const errorsData = {
        dylatacja: {
            title: "Brak dylatacji brzegowych i pośrednich",
            desc: "Wylewka stale „pracuje” termicznie. Brak <a href='https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/' style='color:#f8fafc; text-decoration:underline;'>pianki dylatacyjnej</a> uderzy rykoszetem – spowoduje prężenie betonu o mury, co doprowadzi do pękania jastrychu w progach, narożnikach oraz uszkodzenia okładzin wierzchnich.",
            param: "Wymóg: Pianka min. 8-10 mm gr."
        },
        powietrze: {
            title: "Niedokładne odpowietrzenie anhydrytu",
            desc: "Złe odpowietrzenie płynnej masy (np. brak wibrowania sztangą) zostawia pęcherzyki powietrza wokół <a href='https://projekt-ogrzewania.pl/rura-pex-do-ogrzewania-podlogowego/' style='color:#f8fafc; text-decoration:underline;'>rur PEX</a>. Powietrze działa jak idealny izolator termiczny, drastycznie obniżając moc oddawania ciepła z pętli do posadzki.",
            param: "Fizyka: Powietrze ma λ ≈ 0,025 W/(m·K)"
        },
        temperatura: {
            title: "Szok termiczny wylewki",
            desc: "Zbyt wczesne wyłączenie ogrzewania po wylaniu to proszenie się o kłopoty. W ujemnych temperaturach jastrych musi być chroniony przed zamarznięciem wody zarobowej. Z drugiej strony, wpuszczenie od razu 40°C spowoduje \"smażenie\" betonu i jego dezintegrację.",
            param: "Konsekwencja: Utrata nośności / Zamarzanie"
        },
        chemia: {
            title: "Złe proporcje plastyfikatora",
            desc: "Wykonywanie wylewki z miksokreta bez odpowiedniej chemii (plastyfikatora) to błąd inżynierski. Masa staje się zbyt gęsta, nie otula rur i tworzą się w niej mikroskopijne pustki powietrzne, które degradują ogólną wydajność cieplną o kilkanaście procent.",
            param: "Błąd: Brak dawki 0,2 kg chemii / worek cementu"
        }
    };

    // Nasłuch kliknięć
    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Reset UI
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // Pobierz dane
            const errKey = this.getAttribute('data-err');
            const data = errorsData[errKey];

            // Animacja SVG poprzez klasy
            engine.className = "rk-err-app state-" + errKey;

            // Wypełnij tekst
            titleObj.innerHTML = data.title;
            descObj.innerHTML = data.desc;
            paramObj.innerHTML = data.param;
        });
    });

    // Inicjalizacja domyślnego błędu
    engine.classList.add('state-dylatacja');
});
</script>



<style>
:root {
    --rk-proj-dark: #0f172a;
    --rk-proj-panel: #1e293b;
    --rk-proj-primary: #10b981; /* Ekologiczna zieleń dla efektywności COP */
    --rk-proj-accent: #3b82f6; /* Techniczny niebieski */
    --rk-proj-warning: #f59e0b; /* Uwaga */
    --rk-proj-bg: #ffffff;
    --rk-proj-border: #e2e8f0;
    --rk-proj-text: #334155;
    --rk-proj-light: #f8fafc;
}

.rk-proj-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-proj-bg);
    border-radius: 20px;
    box-shadow: 0 25px 50px -15px rgba(16, 185, 129, 0.15);
    border: 1px solid var(--rk-proj-border);
    overflow: hidden;
}

/* Nagłówek i Wstęp */
.rk-proj-header {
    padding: 40px 50px 30px;
    background: linear-gradient(180deg, #ffffff 0%, var(--rk-proj-light) 100%);
    border-bottom: 1px solid var(--rk-proj-border);
}

.rk-proj-title {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-proj-dark);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-proj-intro {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-proj-text);
    margin: 0;
}

.rk-proj-intro a {
    color: var(--rk-proj-accent);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(59, 130, 246, 0.2);
    transition: all 0.3s ease;
}

.rk-proj-intro a:hover {
    border-bottom-color: var(--rk-proj-accent);
    background: rgba(59, 130, 246, 0.05);
}

/* Symulator Projektowy */
.rk-proj-app {
    background: var(--rk-proj-dark);
    padding: 40px 50px;
    color: #ffffff;
}

.rk-proj-app-title {
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 2px;
    color: #94a3b8;
    margin: 0 0 25px 0;
    font-weight: 800;
    text-align: center;
}

/* Przełącznik Jastrychu */
.rk-proj-switch {
    display: flex;
    justify-content: center;
    gap: 10px;
    margin-bottom: 40px;
}

.rk-btn-proj {
    background: rgba(255,255,255,0.05);
    border: 2px solid rgba(255,255,255,0.1);
    color: #cbd5e1;
    padding: 14px 30px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 15px;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-btn-proj.active[data-mat="anhydryt"] {
    background: rgba(16, 185, 129, 0.15);
    border-color: var(--rk-proj-primary);
    color: #ffffff;
    box-shadow: 0 10px 20px -5px rgba(16, 185, 129, 0.3);
}

.rk-btn-proj.active[data-mat="cement"] {
    background: rgba(148, 163, 184, 0.15);
    border-color: #94a3b8;
    color: #ffffff;
}

/* Dashboard Wyników */
.rk-dashboard-grid {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: 20px;
}

.rk-dash-card {
    background: var(--rk-proj-panel);
    border: 1px solid rgba(255,255,255,0.05);
    padding: 25px 20px;
    border-radius: 16px;
    position: relative;
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.rk-dash-card-title {
    font-size: 14px;
    color: #94a3b8;
    font-weight: 700;
    margin-bottom: 15px;
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-val-main {
    font-size: 28px;
    font-weight: 900;
    color: #ffffff;
    margin-bottom: 5px;
    display: flex;
    align-items: baseline;
    gap: 5px;
}

.rk-val-main small {
    font-size: 14px;
    font-weight: 600;
    color: #64748b;
}

.rk-val-sub {
    font-size: 13px;
    color: var(--rk-proj-primary);
    font-weight: 700;
}

.status-warn { color: var(--rk-proj-warning); }

/* SVG Animacje w kartach */
.rk-card-svg {
    width: 100%;
    height: 60px;
    margin-top: 15px;
    background: rgba(0,0,0,0.2);
    border-radius: 8px;
}

/* Animacja rozstawu rur */
.anim-pipe { transition: transform 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }
.state-cement .pipe-left { transform: translateX(20px); }
.state-cement .pipe-right { transform: translateX(-20px); }
.state-anhydryt .pipe-left { transform: translateX(0px); }
.state-anhydryt .pipe-right { transform: translateX(0px); }

/* Animacja ciepła (Zebra vs Równomierne) */
.anim-heat-wave { transition: opacity 0.5s; }
.state-cement .heat-zebra { opacity: 1; }
.state-cement .heat-even { opacity: 0; }
.state-anhydryt .heat-zebra { opacity: 0; }
.state-anhydryt .heat-even { opacity: 1; }

/* Animacja Krzywej Grzewczej */
.anim-curve { transition: stroke-dashoffset 2s ease-in-out; }
.state-cement .curve-stable { opacity: 0; }
.state-cement .curve-overshoot { opacity: 1; stroke-dasharray: 200; animation: drawCurve 2s infinite linear; }
.state-anhydryt .curve-stable { opacity: 1; stroke-dasharray: 200; animation: drawCurve 2s infinite linear; }
.state-anhydryt .curve-overshoot { opacity: 0; }

@keyframes drawCurve {
    from { stroke-dashoffset: 200; }
    to { stroke-dashoffset: 0; }
}

@media (max-width: 768px) {
    .rk-proj-header, .rk-proj-app { padding: 30px 20px; }
    .rk-dashboard-grid { grid-template-columns: 1fr; }
    .rk-proj-switch { flex-direction: column; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-projekt",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Jak wylewka wpływa na projekt ogrzewania podłogowego (OZC)?",
    "description": "Rodzaj wylewki determinuje parametry OZC, krzywą grzewczą, rozstaw rur i współczynnik COP pompy ciepła. Zobacz symulację wpływu jastrychu na projekt.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-parametry-ozc",
    "name": "Wpływ Parametrów Wylewki na Projekt OZC i Hydraulikę",
    "description": "Dane projektowe dla oprogramowania InstalSystem wykazujące relacje między typem jastrychu a efektywnością systemu grzewczego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projektowe obciążenie cieplne ozc",
      "rozstaw rur w ogrzewaniu podłogowym",
      "krzywa grzewcza pompy ciepła",
      "pompa obiegowa bezwładność wylewki",
      "współczynnik COP pompy ciepła podłogówka"
    ],
    "measurementTechnique": "Symulacja termodynamiczna: obniżenie Tz o 2-3°C dla anhydrytu względem cementu powoduje przyrost sezonowego współczynnika SCOP o 5-7%.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "OZC i COP: Wyższa przewodność (lambda) anhydrytu pozwala na pracę pompy ciepła na niższej temperaturze zasilania Tz.",
        "Rozstaw rur: Lepsze otulenie rury pozwala na rzadszy rozstaw (np. 12,5 cm zamiast 10 cm) bez zjawiska zebry cieplnej.",
        "Krzywa Grzewcza: Większa masa betonu generuje bezwładność, co grozi tzw. overshootingiem i wymaga innych nastaw pompy obiegowej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-symulator-ozc",
    "name": "Inżynierski Symulator Wpływu Jastrychu na Projekt",
    "description": "Narzędzie typu dashboard wizualizujące różnice w nastawach pompy ciepła, rozstawie rur i zjawisku overshootingu w zależności od wybranego jastrychu.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG Support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-proj-container" id="rk-projekt-core">
    
    <div class="rk-proj-header">
        <h2 class="rk-proj-title">
            <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            Jak wylewka wpływa na projekt ogrzewania podłogowego?
        </h2>
        <p class="rk-proj-intro">
            W moim biurze projektowym typ wylewki to jedna z pierwszych zmiennych wprowadzanych do oprogramowania (np. InstalSystem). Niezależnie czy robisz <a href="https://projekt-ogrzewania.pl/projekt-ogrzewania-podlogowego-z-pompa-ciepla/">projekt z pompą ciepła</a> czy kotłem gazowym, wybór jastrychu wprost determinuje całą hydraulikę, od <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">doboru pompy obiegowej</a> po ustawienia <a href="https://projekt-ogrzewania.pl/krzywa-grzewcza-w-ogrzewaniu-podlogowym/">krzywej grzewczej</a>. Zobacz, dlaczego tak jest.
        </p>
    </div>

    <div class="rk-proj-app state-anhydryt" id="rkProjEngine">
        
        <h3 class="rk-proj-app-title">Symulator Parametrów Projektowych</h3>

        <div class="rk-proj-switch">
            <button class="rk-btn-proj" data-mat="cement">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path></svg>
                Tradycyjny Cement
            </button>
            <button class="rk-btn-proj active" data-mat="anhydryt">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M8 14s1.5 2 4 2 4-2 4-2"></path><line x1="9" y1="9" x2="9.01" y2="9"></line><line x1="15" y1="9" x2="15.01" y2="9"></line></svg>
                Płynny Anhydryt
            </button>
        </div>

        <div class="rk-dashboard-grid">
            
            <div class="rk-dash-card">
                <div class="rk-dash-card-title">Zasilanie (T<sub>z</sub>) i Efektywność</div>
                <div class="rk-val-main" id="valTz">32°C</div>
                <div class="rk-val-sub" id="valCop">+7% wyższy COP pompy</div>
                
                <svg class="rk-card-svg" viewBox="0 0 100 60" xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none">
                    <rect x="20" y="30" width="20" height="20" fill="#475569" rx="2"/>
                    <rect id="svgCopBar" x="60" y="10" width="20" height="40" fill="#10b981" rx="2" style="transition: all 0.5s"/>
                    <path d="M 30 20 L 70 5" stroke="#fff" stroke-width="2" stroke-dasharray="4" fill="none"/>
                </svg>
            </div>

            <div class="rk-dash-card">
                <div class="rk-dash-card-title">
                    <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/" style="color:#94a3b8; text-decoration:none;">Rozstaw Rur</a>
                </div>
                <div class="rk-val-main" id="valSpacing">12.5 <small>cm</small></div>
                <div class="rk-val-sub" id="valZebra" style="color:#f8fafc;">Brak „zebry cieplnej”</div>
                
                <svg class="rk-card-svg" viewBox="0 0 200 60" xmlns="http://www.w3.org/2000/svg">
                    <path class="anim-heat-wave heat-zebra" d="M 40 40 Q 60 10 80 40 Q 100 10 120 40 Q 140 10 160 40" fill="none" stroke="#ef4444" stroke-width="15" opacity="0.4" stroke-linecap="round"/>
                    <rect class="anim-heat-wave heat-even" x="20" y="20" width="160" height="20" fill="#ef4444" opacity="0.5" rx="10"/>
                    
                    <circle class="anim-pipe pipe-left" cx="60" cy="45" r="8" fill="#3b82f6" stroke="#fff" stroke-width="2"/>
                    <circle cx="100" cy="45" r="8" fill="#3b82f6" stroke="#fff" stroke-width="2"/>
                    <circle class="anim-pipe pipe-right" cx="140" cy="45" r="8" fill="#3b82f6" stroke="#fff" stroke-width="2"/>
                </svg>
            </div>

            <div class="rk-dash-card">
                <div class="rk-dash-card-title">Krzywa i Bezwładność</div>
                <div class="rk-val-main" id="valInertia" style="font-size: 20px;">Wysoka sterowalność</div>
                <div class="rk-val-sub status-warn" id="valOver" style="color:#6ee7b7;">Brak przegrzewów</div>
                
                <svg class="rk-card-svg" viewBox="0 0 200 60" xmlns="http://www.w3.org/2000/svg">
                    <line x1="10" y1="30" x2="190" y2="30" stroke="#64748b" stroke-width="2" stroke-dasharray="4"/>
                    
                    <path class="anim-curve curve-overshoot" d="M 10 30 Q 50 -10 100 30 T 190 30" fill="none" stroke="#ef4444" stroke-width="3"/>
                    
                    <path class="anim-curve curve-stable" d="M 10 30 Q 50 20 100 30 T 190 30" fill="none" stroke="#10b981" stroke-width="3"/>
                </svg>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Zgodnie z wytycznymi)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-projekt-core');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Moduł "Symulator Parametrów Projektowych" jest własnością intelektualną Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Projektowego
    const btns = document.querySelectorAll('.rk-btn-proj');
    const engine = document.getElementById('rkProjEngine');
    
    // Elementy Tekstowe
    const vTz = document.getElementById('valTz');
    const vCop = document.getElementById('valCop');
    const vSpacing = document.getElementById('valSpacing');
    const vZebra = document.getElementById('valZebra');
    const vInertia = document.getElementById('valInertia');
    const vOver = document.getElementById('valOver');
    
    // Elementy SVG
    const svgCopBar = document.getElementById('svgCopBar');

    const dataModel = {
        anhydryt: {
            tz: "32°C",
            copText: "+7% wyższy COP pompy",
            copColor: "var(--rk-proj-primary)",
            barHeight: "40", barY: "10", barColor: "#10b981",
            spacing: "12.5 <small>cm</small>",
            zebraText: "Brak „zebry cieplnej”",
            inertia: "Wysoka sterowalność",
            overText: "Brak przegrzewów",
            overColor: "#6ee7b7"
        },
        cement: {
            tz: "35°C",
            copText: "Standardowy COP pompy",
            copColor: "#94a3b8",
            barHeight: "20", barY: "30", barColor: "#64748b",
            spacing: "10.0 <small>cm</small>",
            zebraText: "Ryzyko wahań temperatury",
            inertia: "Wysoka bezwładność",
            overText: "Ryzyko overshootingu!",
            overColor: "#f59e0b"
        }
    };

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zarządzanie przyciskami
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const mat = this.getAttribute('data-mat');
            const d = dataModel[mat];

            // Klasa główna dla animacji SVG
            engine.className = "rk-proj-app state-" + mat;

            // Aktualizacja tekstów
            vTz.innerHTML = d.tz;
            vCop.innerHTML = d.copText;
            vCop.style.color = d.copColor;
            
            vSpacing.innerHTML = d.spacing;
            vZebra.innerHTML = d.zebraText;
            
            vInertia.innerHTML = d.inertia;
            vOver.innerHTML = d.overText;
            vOver.style.color = d.overColor;

            // Aktualizacja słupka COP
            svgCopBar.setAttribute('height', d.barHeight);
            svgCopBar.setAttribute('y', d.barY);
            svgCopBar.setAttribute('fill', d.barColor);
        });
    });
});
</script>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<style>
:root {
    --rk-quote-primary: #0f172a;
    --rk-quote-accent: #ea580c; /* Termiczny pomarańczowy */
    --rk-quote-accent-light: #ffedd5;
    --rk-quote-danger: #ef4444;
    --rk-quote-bg: #f8fafc;
    --rk-quote-border: #e2e8f0;
}

.rk-expert-wrapper {
    max-width: 950px;
    margin: 50px auto 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
}

.rk-expert-header {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin-bottom: 25px;
}

.rk-expert-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-quote-primary);
    margin: 0;
}

.rk-expert-container {
    background: #ffffff;
    border-radius: 24px;
    padding: 35px 40px;
    display: flex;
    gap: 30px;
    align-items: flex-start;
    border: 1px solid var(--rk-quote-border);
    box-shadow: 0 20px 40px -15px rgba(234, 88, 12, 0.15);
    position: relative;
    overflow: hidden;
}

/* Dekoracyjne tło */
.rk-expert-container::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 6px; height: 100%;
    background: linear-gradient(to bottom, var(--rk-quote-accent), #fbd38d);
}

.rk-expert-container::after {
    content: '”';
    position: absolute;
    top: -20px;
    right: 20px;
    font-family: serif;
    font-size: 140px;
    color: var(--rk-quote-bg);
    line-height: 1;
    z-index: 0;
}

/* Animowane zdjęcie */
.rk-expert-photo-wrap {
    flex-shrink: 0;
    width: 110px;
    height: 110px;
    position: relative;
    z-index: 1;
}

.rk-expert-photo-ring {
    position: absolute;
    top: -5px; left: -5px; right: -5px; bottom: -5px;
    border-radius: 50%;
    border: 2px dashed var(--rk-quote-accent);
    animation: spinRing 12s linear infinite;
}

@keyframes spinRing {
    100% { transform: rotate(360deg); }
}

.rk-expert-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 4px solid #ffffff;
    box-shadow: 0 8px 15px rgba(0,0,0,0.1);
    position: relative;
    z-index: 2;
}

.rk-expert-badge-icon {
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: var(--rk-quote-accent);
    color: #ffffff;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 10px rgba(234, 88, 12, 0.4);
    z-index: 3;
}

/* Treść cytatu */
.rk-expert-content {
    flex-grow: 1;
    position: relative;
    z-index: 1;
}

.rk-expert-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-quote-accent);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 12px;
    background: var(--rk-quote-accent-light);
    padding: 4px 12px;
    border-radius: 20px;
}

.rk-expert-text {
    font-size: 18px;
    line-height: 1.7;
    color: var(--rk-quote-primary);
    font-style: italic;
    margin: 0 0 15px 0;
    font-weight: 500;
}

.rk-expert-text strong {
    color: var(--rk-quote-accent);
    font-weight: 800;
}

.rk-expert-text a {
    color: var(--rk-quote-primary);
    text-decoration: underline;
    text-decoration-color: var(--rk-quote-accent);
    text-underline-offset: 3px;
    transition: color 0.2s;
    font-weight: 700;
}

.rk-expert-text a:hover {
    color: var(--rk-quote-accent);
}

.rk-expert-signature {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: #64748b;
    border-top: 1px solid var(--rk-quote-border);
    padding-top: 15px;
    margin-top: 15px;
}

/* Interaktywny Panel Ukryty */
.rk-expert-interactive {
    margin-top: 20px;
}

.rk-expert-btn {
    background: #ffffff;
    border: 2px solid var(--rk-quote-border);
    color: var(--rk-quote-primary);
    padding: 10px 20px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: all 0.3s ease;
}

.rk-expert-btn:hover {
    border-color: var(--rk-quote-accent);
    color: var(--rk-quote-accent);
    background: var(--rk-quote-accent-light);
}

.rk-expert-btn svg {
    transition: transform 0.3s;
}

.rk-expert-btn.active svg {
    transform: rotate(180deg);
}

.rk-expert-data-panel {
    display: none;
    margin-top: 15px;
    padding: 20px;
    background: var(--rk-quote-bg);
    border-radius: 12px;
    border: 1px dashed var(--rk-quote-border);
    animation: fadeInDown 0.4s ease forwards;
}

.rk-expert-data-panel.active {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

@keyframes fadeInDown {
    from { opacity: 0; transform: translateY(-10px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-data-stat {
    text-align: center;
    background: #ffffff;
    padding: 15px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-data-val {
    display: block;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-quote-accent);
    margin-bottom: 5px;
}

.rk-data-lab {
    font-size: 11px;
    color: #64748b;
    text-transform: uppercase;
    font-weight: 700;
}

@media (max-width: 768px) {
    .rk-expert-container { flex-direction: column; text-align: center; padding: 30px 25px; align-items: center; }
    .rk-expert-header h2 { font-size: 22px; text-align: center; }
    .rk-expert-container::before { width: 100%; height: 6px; }
    .rk-expert-data-panel.active { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-cytat",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Robert Kucharski: Wylewka to serce Twojego systemu grzewczego",
    "description": "Ekspercka opinia na temat fizyki budowli. Jastrych to wymiennik ciepła, którego parametry decydują o sprawności pompy ciepła i wysokości rachunków.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Wylewka to nie jest zwykła podłoga. To największy wymiennik ciepła w Twoim domu. Błędy w proporcjach wody, brak dylatacji czy nadlane z lenistwa centymetry betonu to gwarancja, że zniszczysz sprawność nawet najlepszej pompy ciepła. Tu nie ma miejsca na wykonawcze 'zawsze tak robiliśmy', tu rządzi fizyka i norma PN-EN 1264.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "Inżynier HVAC & Właściciel Portalu",
      "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",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-cytat-parametry",
    "name": "Inżynierskie wskaźniki wylewek grzejnych",
    "description": "Kluczowe wartości fizyczne warunkujące poprawną pracę jastrychu jako wymiennika ciepła w instalacji płaszczyznowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wylewka jako wymiennik ciepła",
      "badanie wilgotności metodą CM",
      "opór cieplny anhydrytu",
      "zła grubość wylewki",
      "norma PN-EN 1264 jastrych"
    ],
    "measurementTechnique": "Parametry laboratoryjne i budowlane określające graniczną wilgotność resztkową, optymalną grubość oraz przewodność termiczną wylewki.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dopuszczalna wilgotność (CM) pod panele: < 1.8%",
        "Zalecana grubość nad rurką (s_d): 35 - 45 mm",
        "Optymalny opór cieplny Rλ: < 0.05 m²·K/W"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-cytat-panel",
    "name": "Panel Analityczny: Twarde Dane Wylewki",
    "description": "Interaktywny widget rozwijany z cytatu eksperckiego, prezentujący graniczne wskaźniki inżynierskie dla jastrychu.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-expert-wrapper" id="rk-expert-wylewka-app">
    <div class="rk-expert-header">
        <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="var(--rk-quote-accent)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
        <h2>Głos Inżyniera</h2>
    </div>
    
    <div class="rk-expert-container">
        <div class="rk-expert-photo-wrap">
            <div class="rk-expert-photo-ring"></div>
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-expert-photo" loading="lazy">
            <div class="rk-expert-badge-icon">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
            </div>
        </div>
        
        <div class="rk-expert-content">
            <span class="rk-expert-label">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="16"></line><line x1="8" y1="12" x2="16" y2="12"></line></svg>
                Fizyka budowli bez ściemy
            </span>
            <p class="rk-expert-text">
                "Wylewka to nie jest zwykła podłoga. To <strong>największy wymiennik ciepła</strong> w Twoim domu. Błędy w proporcjach wody, brak dylatacji czy nadlane z lenistwa centymetry betonu to gwarancja, że zniszczysz sprawność nawet najlepszej <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a>. Tu nie ma miejsca na wykonawcze 'zawsze tak robiliśmy'. Jeśli chcesz oszczędzać, tu rządzi fizyka i <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">norma PN-EN 1264</a>."
            </p>
            <span class="rk-expert-signature">— Robert Kucharski, Inżynier HVAC Projekt-Ogrzewania.pl</span>
            
            <div class="rk-expert-interactive">
                <button class="rk-expert-btn" id="toggleDataBtnWylewka">
                    Rozwiń twarde dane techniczne
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </button>
                
                <div class="rk-expert-data-panel" id="expertDataPanelWylewka">
                    <div class="rk-data-stat">
                        <span class="rk-data-val">35-45 mm</span>
                        <span class="rk-data-lab">Zalecana otulina (s<sub>d</sub>)</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val">< 1.8%</span>
                        <span class="rk-data-lab">Wilgotność CM (Panele)</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-primary);">< 0.05</span>
                        <span class="rk-data-lab">Opór cieplny (R<sub>λ</sub>)</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f8fafc; border-radius: 16px; margin-top: 20px; font-family: sans-serif;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a; margin-top:0;">Wskaźniki inżynierskie (Robert Kucharski):</p>
            <ul style="font-size: 14px; color: #475569; margin-bottom:0;">
                <li>Zalecana grubość nad rurką (s_d): 35-45 mm</li>
                <li>Maksymalna wilgotność resztkowa (CM) pod panele: poniżej 1.8%</li>
                <li>Optymalny opór cieplny (R_lambda): poniżej 0.05 m²·K/W</li>
            </ul>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków strukturalnych w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-expert-wylewka-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fff7ed; color: #c2410c; border-radius: 20px; border: 2px dashed #f97316;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada bezpieczeństwa</div>
                    <div style="font-size: 14px; color: #9a3412;">Własność intelektualna i cytat ekspercki przypisane do domeny Projekt-Ogrzewania.pl.</div>
                </div>
            `;
            // Reset styli dla bezpieczeństwa wizualnego komunikatu
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.boxShadow = 'none';
            return;
        }
    }

    // 2. Interakcja z panelem danych
    const toggleBtn = document.getElementById('toggleDataBtnWylewka');
    const dataPanel = document.getElementById('expertDataPanelWylewka');

    if (toggleBtn && dataPanel) {
        toggleBtn.addEventListener('click', function() {
            this.classList.toggle('active');
            dataPanel.classList.toggle('active');
            
            if(this.classList.contains('active')) {
                this.innerHTML = `Zwiń dane techniczne <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            } else {
                this.innerHTML = `Rozwiń twarde dane techniczne <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            }
        });
    }
});
</script>



<style>
:root {
    --rk-cs-dark: #0f172a;
    --rk-cs-panel: #1e293b;
    --rk-cs-primary: #f43f5e; /* Malinowa czerwień - strata/błąd */
    --rk-cs-success: #10b981; /* Projektowa zieleń */
    --rk-cs-warning: #f59e0b;
    --rk-cs-bg: #ffffff;
    --rk-cs-border: #e2e8f0;
    --rk-cs-text: #334155;
    --rk-cs-light: #fff1f2;
}

.rk-cs-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-cs-bg);
    border-radius: 20px;
    box-shadow: 0 25px 50px -15px rgba(244, 63, 94, 0.15);
    border: 1px solid var(--rk-cs-border);
    overflow: hidden;
}

/* Nagłówek i Treść (Rozwinięta pod SEO) */
.rk-cs-header {
    padding: 40px 50px 30px;
    background: linear-gradient(180deg, var(--rk-cs-light) 0%, #ffffff 100%);
    border-bottom: 1px solid #fecdd3;
}

.rk-cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: #ffe4e6;
    color: #e11d48;
    padding: 6px 14px;
    border-radius: 99px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid #fda4af;
}

.rk-cs-title {
    font-size: 26px;
    font-weight: 900;
    color: #881337;
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-cs-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-cs-text);
    margin: 0 0 15px 0;
}

.rk-cs-text strong {
    color: var(--rk-cs-dark);
}

.rk-cs-text a {
    color: #e11d48;
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(225, 29, 72, 0.2);
    transition: all 0.3s ease;
}

.rk-cs-text a:hover {
    border-bottom-color: #e11d48;
    background: rgba(225, 29, 72, 0.05);
}

/* Symulator Kosztów Błędu */
.rk-cs-app {
    background: var(--rk-cs-dark);
    padding: 40px 50px;
    color: #ffffff;
}

.rk-cs-app-title {
    font-size: 14px;
    text-transform: uppercase;
    letter-spacing: 2px;
    color: #94a3b8;
    margin: 0 0 25px 0;
    font-weight: 800;
    text-align: center;
}

/* Interaktywny Switch */
.rk-cs-switch {
    display: flex;
    justify-content: center;
    gap: 15px;
    margin-bottom: 40px;
}

.rk-btn-cs {
    background: rgba(255,255,255,0.05);
    border: 2px solid rgba(255,255,255,0.1);
    color: #cbd5e1;
    padding: 14px 30px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 15px;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-btn-cs.active[data-state="projekt"] {
    background: rgba(16, 185, 129, 0.15);
    border-color: var(--rk-cs-success);
    color: #ffffff;
}

.rk-btn-cs.active[data-state="blad"] {
    background: rgba(244, 63, 94, 0.15);
    border-color: var(--rk-cs-primary);
    color: #ffffff;
    box-shadow: 0 10px 25px -5px rgba(244, 63, 94, 0.4);
}

/* Grid Wyników */
.rk-cs-grid {
    display: grid;
    grid-template-columns: 1.2fr 0.8fr;
    gap: 30px;
    align-items: center;
}

/* SVG Wizualizacja */
.rk-cs-svg-box {
    background: var(--rk-cs-panel);
    border-radius: 16px;
    padding: 30px 20px;
    box-shadow: inset 0 10px 20px rgba(0,0,0,0.3);
    position: relative;
    border: 1px solid rgba(255,255,255,0.05);
}

.rk-svg-scene {
    width: 100%;
    height: auto;
    max-width: 320px;
    margin: 0 auto;
    display: block;
}

/* Animacje SVG */
.anim-screed { transition: height 0.6s cubic-bezier(0.34, 1.56, 0.64, 1), y 0.6s cubic-bezier(0.34, 1.56, 0.64, 1), fill 0.6s; }
.anim-measure { transition: all 0.6s cubic-bezier(0.34, 1.56, 0.64, 1); }
.anim-heat { transition: opacity 0.5s, stroke 0.5s; animation: riseHeat 1.5s infinite linear; }

@keyframes riseHeat {
    0% { stroke-dashoffset: 20; opacity: 0; }
    50% { opacity: 1; }
    100% { stroke-dashoffset: 0; opacity: 0; }
}

/* Klasy stanów do SVG */
.state-projekt .svg-screed { height: 65px; y: 85px; fill: #475569; }
.state-projekt .svg-line { d: path("M 210 150 L 210 85"); stroke: #10b981; }
.state-projekt .svg-text { y: 120px; fill: #10b981; }
.state-projekt .svg-heat-good { opacity: 1; }
.state-projekt .svg-heat-bad { opacity: 0; }

.state-blad .svg-screed { height: 85px; y: 65px; fill: #334155; }
.state-blad .svg-line { d: path("M 210 150 L 210 65"); stroke: #f43f5e; }
.state-blad .svg-text { y: 110px; fill: #f43f5e; }
.state-blad .svg-heat-good { opacity: 0; }
.state-blad .svg-heat-bad { opacity: 1; stroke: #f43f5e; animation-duration: 3s; } /* Ciepło ledwo przechodzi */

/* Panel Danych */
.rk-cs-stats {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-card {
    background: rgba(255,255,255,0.03);
    border: 1px solid rgba(255,255,255,0.05);
    padding: 20px;
    border-radius: 12px;
}

.rk-stat-label {
    font-size: 13px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 8px;
    display: block;
}

.rk-stat-val {
    font-size: 24px;
    font-weight: 900;
    color: #ffffff;
    display: flex;
    align-items: baseline;
    gap: 6px;
    font-variant-numeric: tabular-nums;
}

.rk-stat-val small {
    font-size: 14px;
    font-weight: 600;
    color: #64748b;
}

/* Licznik Kosztów */
.rk-loss-counter {
    background: linear-gradient(135deg, rgba(244, 63, 94, 0.1) 0%, rgba(225, 29, 72, 0.2) 100%);
    border-color: rgba(244, 63, 94, 0.3);
}

.rk-loss-val {
    color: var(--rk-cs-primary);
    font-size: 32px;
}

@media (max-width: 768px) {
    .rk-cs-header, .rk-cs-app { padding: 30px 20px; }
    .rk-cs-grid { grid-template-columns: 1fr; }
    .rk-cs-switch { flex-direction: column; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Case Study: Błąd o grubości 2 cm – nadlewka, która kosztuje",
    "description": "Analiza rzeczywistego błędu wykonawczego. Zobacz, jak nadlanie wylewki o 2 cm zwiększyło bezwładność systemu, zmusiło do podniesienia Tz i wygenerowało 850 PLN strat.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-straty",
    "name": "Koszty Błędów Grubości Jastrychu (ROI)",
    "description": "Zestawienie spadku sprawności pompy ciepła (SCOP) i dodatkowych kosztów w PLN wynikających z nieuzasadnionego pogrubienia wylewki grzejnej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "błąd o grubości 2 cm wylewka",
      "koszt ogrzewania domu 2025 pompa ciepła",
      "bezwładność cieplna spadek COP",
      "nadlewka betonu na podłogówce",
      "temperatura zasilania Tz ogrzewania"
    ],
    "measurementTechnique": "Porównanie parametrów z projektu OZC (jastrych 6,5 cm) z weryfikacją powykonawczą (jastrych 8,5 cm) dla budynku 185m2.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Bezwładność: Przyrost o 40% utrudniający stabilizację temperatury w strefach dziennych.",
        "Korekta Pompy: Wymuszone podniesienie temperatury zasilania (Tz) o 4°C w sterowniku.",
        "Koszt roczny: Spadek współczynnika SCOP wygenerował nadmiarowe zużycie prądu o wartości ok. 850 PLN/sezon."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-symulator-strat",
    "name": "Symulator Strat Błędu Wykonawczego",
    "description": "Interaktywna wizualizacja pokazująca fizyczne i finansowe skutki nieliczenia się z wytycznymi projektu OZC (zmiana grubości wylewki na obiekcie).",
    "applicationCategory": "FinancialCalculator",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, CSS transitions and SVG rendering",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-cs-container" id="rk-cs-core">
    
    <div class="rk-cs-header">
        <div class="rk-cs-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
            Case Study: Wrzesień 2025, Opole
        </div>
        <h2 class="rk-cs-title">Błąd o grubości 2 cm – dlaczego milimetry kosztują setki złotych?</h2>
        
        <div class="rk-cs-text">
            <p>
                We wrześniu 2025 roku nadzorowałem instalację, a w lutym 2026 korygowałem układ dla Pana Tomasza w Opolu (nowy dom 185 m²). Zignorowawszy precyzyjne <a href="https://projekt-ogrzewania.pl/kalkulator-strat-ciepla-budynku-jak-samodzielnie-obliczyc-zapotrzebowanie-na-ogrzewanie/">obliczenia strat ciepła</a>, wykonawca zalał rury wylewką cementową o grubości <strong>8,5 cm</strong> zamiast projektowanych <strong>6,5 cm</strong> (potoczna „nadlewka” dla wyrównania poziomów). 
            </p>
            <p>
                <strong>Zaraz... czy 2 centymetry robią różnicę?</strong><br>
                Zrobiły kolosalną. <a href="https://projekt-ogrzewania.pl/czym-jest-bezwladnosc-cieplna-w-ogrzewaniu-podlogowym/">Bezwładność układu</a> wzrosła o 40%, co doprowadziło do wychłodzeń nad ranem. Aby przebić się przez zaporę z betonu, temperatura zasilania (T<sub>z</sub>) na <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompie ciepła</a> musiała zostać podniesiona o 4°C. Ten pozornie drobny błąd drastycznie obniżył współczynnik efektywności SCOP urządzenia, co wywindowało <a href="https://projekt-ogrzewania.pl/koszt-ogrzewania-domu-2025/">koszty ogrzewania</a>.
            </p>
        </div>
    </div>

    <div class="rk-cs-app state-projekt" id="rkCsEngine">
        <h3 class="rk-cs-app-title">Kalkulator Strat (Symulacja Obiektu)</h3>

        <div class="rk-cs-switch">
            <button class="rk-btn-cs active" data-state="projekt">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                Zgodnie z projektem
            </button>
            <button class="rk-btn-cs" data-state="blad">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
                Samowolka wykonawcy
            </button>
        </div>

        <div class="rk-cs-grid">
            
            <div class="rk-cs-svg-box">
                <svg viewBox="0 0 250 180" class="rk-svg-scene" xmlns="http://www.w3.org/2000/svg">
                    <rect x="10" y="150" width="160" height="30" fill="#334155" rx="2" />
                    
                    <circle cx="90" cy="142" r="8" fill="#ef4444" stroke="#fff" stroke-width="2" />

                    <g class="anim-heat svg-heat-good" stroke="#10b981" stroke-width="4" stroke-dasharray="8" fill="none" stroke-linecap="round">
                        <path d="M 70 120 L 50 20" />
                        <path d="M 90 120 L 90 20" />
                        <path d="M 110 120 L 130 20" />
                    </g>
                    
                    <g class="anim-heat svg-heat-bad" stroke-width="4" stroke-dasharray="4" fill="none" stroke-linecap="round">
                        <path d="M 70 120 L 50 40" />
                        <path d="M 90 120 L 90 40" />
                        <path d="M 110 120 L 130 40" />
                    </g>

                    <rect id="svoScreed" class="anim-screed svg-screed" x="10" y="85" width="160" height="65" rx="2" opacity="0.9"/>

                    <path class="anim-measure svg-line" d="M 210 150 L 210 85" stroke-width="2" marker-start="url(#arrowCs)" marker-end="url(#arrowCs)"/>
                    <text class="anim-measure svg-text" x="220" y="120" font-size="16" font-weight="bold">6.5 cm</text>
                    
                    <defs>
                        <marker id="arrowCs" viewBox="0 0 10 10" refX="5" refY="5" markerWidth="4" markerHeight="4" orient="auto-start-reverse">
                            <path d="M 0 0 L 10 5 L 0 10 z" fill="currentColor" />
                        </marker>
                    </defs>
                </svg>
            </div>

            <div class="rk-cs-stats">
                <div class="rk-stat-card">
                    <span class="rk-stat-label">Bezwładność układu</span>
                    <span class="rk-stat-val" id="valInertia" style="color: #6ee7b7;">Optymalna</span>
                </div>
                <div class="rk-stat-card">
                    <span class="rk-stat-label">Nastawa Zasilania (T<sub>z</sub>)</span>
                    <span class="rk-stat-val" id="valTz">32.0<small>°C</small></span>
                </div>
                <div class="rk-stat-card rk-loss-counter">
                    <span class="rk-stat-label" style="color:#fda4af;">Nadmiarowe koszty / sezon</span>
                    <span class="rk-stat-val rk-loss-val">+<span id="valCost">0</span><small>PLN</small></span>
                </div>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H-tags w powiadomieniu)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-cs-core');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zabezpieczenie Treści</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Interaktywne Case Study oraz zintegrowane algorytmy są prawowitą własnością Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Błędu
    const btns = document.querySelectorAll('.rk-btn-cs');
    const engine = document.getElementById('rkCsEngine');
    
    // Obiekty DOM do nadpisania
    const vInertia = document.getElementById('valInertia');
    const vTz = document.getElementById('valTz');
    const vCost = document.getElementById('valCost');
    const svgText = document.querySelector('.svg-text');

    // Licznik numeryczny (Animacja od-do)
    function animateValue(obj, start, end, duration) {
        let startTimestamp = null;
        const step = (timestamp) => {
            if (!startTimestamp) startTimestamp = timestamp;
            const progress = Math.min((timestamp - startTimestamp) / duration, 1);
            obj.innerHTML = Math.floor(progress * (end - start) + start);
            if (progress < 1) {
                window.requestAnimationFrame(step);
            }
        };
        window.requestAnimationFrame(step);
    }

    const dataModel = {
        projekt: {
            inertia: "Optymalna",
            inertiaCol: "#6ee7b7",
            tz: "32.0<small>°C</small>",
            cost: 0,
            svgLabel: "6.5 cm"
        },
        blad: {
            inertia: "+40% (Przegrzewy)",
            inertiaCol: "#fca5a5",
            tz: "36.0<small>°C</small>",
            cost: 850,
            svgLabel: "8.5 cm"
        }
    };

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zarządzanie UI Buttonów
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const state = this.getAttribute('data-state');
            const d = dataModel[state];

            // Aktywacja animacji CSS (SVG klasa główna)
            engine.className = "rk-cs-app state-" + state;

            // Wypełnianie danych
            vInertia.innerHTML = d.inertia;
            vInertia.style.color = d.inertiaCol;
            vTz.innerHTML = d.tz;
            svgText.textContent = d.svgLabel;

            // Uruchomienie animacji licznika strat finansowych
            const currentCost = parseInt(vCost.innerText) || 0;
            animateValue(vCost, currentCost, d.cost, 800);
        });
    });
});
</script>



<style>
:root {
    --rk-faq-dark: #0f172a;
    --rk-faq-primary: #2563eb; /* Mocny niebieski ekspercki */
    --rk-faq-primary-light: #eff6ff;
    --rk-faq-accent: #f59e0b; /* Akcent ostrzegawczy */
    --rk-faq-bg: #ffffff;
    --rk-faq-surface: #f8fafc;
    --rk-faq-border: #e2e8f0;
    --rk-faq-text: #475569;
}

.rk-faq-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-faq-bg);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(37, 99, 235, 0.1);
    border: 1px solid var(--rk-faq-border);
    overflow: hidden;
}

/* Nagłówek */
.rk-faq-header {
    padding: 45px 50px 30px;
    background: linear-gradient(180deg, #ffffff 0%, var(--rk-faq-surface) 100%);
    border-bottom: 2px solid var(--rk-faq-primary);
    text-align: center;
}

.rk-faq-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-faq-dark);
    margin: 0 0 15px 0;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.rk-faq-title svg {
    color: var(--rk-faq-primary);
}

.rk-faq-desc {
    font-size: 16px;
    color: var(--rk-faq-text);
    line-height: 1.6;
    max-width: 700px;
    margin: 0 auto;
}

/* Interaktywny Akordeon */
.rk-faq-app {
    background: #ffffff;
    padding: 30px 50px;
}

.rk-faq-item {
    border-bottom: 1px solid var(--rk-faq-border);
    margin-bottom: 10px;
}

.rk-faq-item:last-child {
    border-bottom: none;
    margin-bottom: 0;
}

.rk-faq-btn {
    width: 100%;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: transparent;
    border: none;
    padding: 25px 10px;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-faq-dark);
    text-align: left;
    cursor: pointer;
    transition: all 0.3s ease;
}

.rk-faq-btn:hover {
    color: var(--rk-faq-primary);
}

.rk-faq-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: var(--rk-faq-surface);
    color: var(--rk-faq-primary);
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    flex-shrink: 0;
    margin-left: 20px;
}

.rk-faq-item.active .rk-faq-icon {
    background: var(--rk-faq-primary);
    color: #ffffff;
    transform: rotate(180deg);
}

/* Animowana treść odpowiedzi */
.rk-faq-answer-wrapper {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-item.active .rk-faq-answer-wrapper {
    grid-template-rows: 1fr;
}

.rk-faq-answer-inner {
    overflow: hidden;
}

.rk-faq-answer-content {
    padding: 0 10px 30px;
    display: flex;
    gap: 25px;
    align-items: flex-start;
}

.rk-faq-text {
    flex: 1;
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-faq-text);
    margin: 0;
}

.rk-faq-text strong {
    color: var(--rk-faq-dark);
    font-weight: 700;
}

.rk-faq-text a {
    color: var(--rk-faq-primary);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.rk-faq-text a:hover {
    color: #1e40af;
}

/* Badge do szybkich odpowiedzi */
.rk-ans-badge {
    display: inline-block;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    margin-bottom: 12px;
}

.badge-no { background: #fee2e2; color: #dc2626; }
.badge-info { background: #e0f2fe; color: #0284c7; }
.badge-money { background: #dcfce7; color: #16a34a; }

/* SVG Ilustracje w odpowiedziach */
.rk-faq-svg {
    width: 100px;
    height: 100px;
    flex-shrink: 0;
    background: var(--rk-faq-surface);
    border-radius: 12px;
    padding: 15px;
    display: none; /* Mobile hide */
}

@media (min-width: 640px) {
    .rk-faq-svg { display: block; }
}

@media (max-width: 768px) {
    .rk-faq-header, .rk-faq-app { padding: 30px 20px; }
    .rk-faq-btn { font-size: 16px; padding: 20px 5px; }
    .rk-faq-answer-content { padding: 0 5px 25px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "FAQ – Najczęstsze pytania inwestorów o wylewki",
    "description": "Odpowiedzi inżyniera na najważniejsze pytania dotyczące wylewek na ogrzewanie podłogowe: wygrzewanie, maksymalne temperatury, koszty i zbrojenie.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy można kłaść panele na wylewkę bez wygrzewania?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, jest to kategorycznie zabronione, ponieważ resztkowa wilgoć zamknięta pod podkładem doprowadzi do spuchnięcia paneli lub rozwoju pleśni po uruchomieniu ogrzewania."
        }
      },
      {
        "@type": "Question",
        "name": "Jaka jest maksymalna dopuszczalna temperatura wylewki?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Według normy PN-EN 1264, temperatura powierzchni jastrychu w strefie stałego przebywania ludzi nie może przekraczać 29°C (w łazienkach 33°C)."
        }
      },
      {
        "@type": "Question",
        "name": "Czy zbrojenie siatką stalową jest konieczne w anhydrycie?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, jastrychy anhydrytowe charakteryzują się wysoką wytrzymałością na zginanie i niskim skurczem, co eliminuje potrzebę stosowania siatek stalowych."
        }
      },
      {
        "@type": "Question",
        "name": "Czy wylewka cementowa jest tańsza od anhydrytowej?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Sam materiał i robocizna są tańsze o ok. 15-25%, jednak biorąc pod uwagę konieczność zbrojenia i niższą wydajność termiczną, różnica w koszcie całkowitym inwestycji często się zaciera."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-faq",
    "name": "Baza Wiedzy Inwestora - Zestawienie Błędów i Wytycznych",
    "description": "Zbiór ustandaryzowanych odpowiedzi rozwiązujących najczęstsze problemy wykonawcze z wylewkami grzejnymi.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wygrzewanie wylewki pod panele laminowane",
      "maksymalna temperatura jastrychu 29 stopni",
      "zbrojenie wylewki anhydrytowej siatka",
      "koszt wylewki cementowej vs anhydryt",
      "pleśń pod panelami wilgotność CM"
    ],
    "measurementTechnique": "Weryfikacja parametrów z wytycznymi norm budowlanych (m m.in. PN-EN 1264) oraz badaniami wilgotności resztkowej (CM).",
    "mainEntity": "FAQPage"
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-faq",
    "name": "Interaktywny Panel Ekspercki FAQ",
    "description": "Rozwijane, interaktywne menu akordeonowe ułatwiające skanowanie i przeglądanie kluczowych pytań i odpowiedzi inżynierskich.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-faq-container" id="rk-faq-core">
    
    <div class="rk-faq-header">
        <h2 class="rk-faq-title">
            <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            FAQ – Najczęstsze pytania inwestorów
        </h2>
        <p class="rk-faq-desc">
            Podłogówka to system naczyń połączonych, a błędy na etapie wylewki kosztują tysiące złotych. Sprawdź inżynierskie odpowiedzi na pytania, które najczęściej słyszę od inwestorów na budowach.
        </p>
    </div>

    <div class="rk-faq-app">
        
        <div class="rk-faq-item">
            <button class="rk-faq-btn">
                1. Czy można kłaść panele na wylewkę bez wygrzewania?
                <div class="rk-faq-icon">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer-inner">
                    <div class="rk-faq-answer-content">
                        <div class="rk-faq-text">
                            <span class="rk-ans-badge badge-no">Kategorycznie Nie</span><br>
                            Jest to fundamentalny błąd. Resztkowa wilgoć zamknięta pod podkładem doprowadzi do spuchnięcia <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/">paneli laminowanych</a> lub drewnianych, a także do agresywnego rozwoju pleśni po uruchomieniu pompy obiegowej. Zawsze wymagaj od wykonawcy protokołu wygrzewania i badania wilgotności metodą karbidową (CM).
                        </div>
                        <svg class="rk-faq-svg" viewBox="0 0 24 24" fill="none" stroke="#dc2626" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="17 8 12 3 7 8"></polyline><line x1="12" y1="3" x2="12" y2="15"></line></svg>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-btn">
                2. Jaka jest maksymalna dopuszczalna temperatura wylewki?
                <div class="rk-faq-icon">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer-inner">
                    <div class="rk-faq-answer-content">
                        <div class="rk-faq-text">
                            <span class="rk-ans-badge badge-info">Zgodnie z PN-EN 1264</span><br>
                            Zarówno ze względów zdrowotnych, jak i fizyki posadzki, <a href="https://projekt-ogrzewania.pl/jaka-jest-optymalna-temperatura-ogrzewania-podlogowego/">optymalna i maksymalna temperatura</a> powierzchni jastrychu (T<sub>surf</sub>) w strefie stałego przebywania ludzi nie może przekraczać <strong>29°C</strong>. W łazienkach dopuszcza się <strong>33°C</strong>, a w <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefach brzegowych</a> (np. przy dużych przeszkleniach) do <strong>35°C</strong>.
                        </div>
                        <svg class="rk-faq-svg" viewBox="0 0 24 24" fill="none" stroke="#0284c7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z"></path></svg>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-btn">
                3. Czy zbrojenie siatką stalową jest konieczne w anhydrycie?
                <div class="rk-faq-icon">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer-inner">
                    <div class="rk-faq-answer-content">
                        <div class="rk-faq-text">
                            <span class="rk-ans-badge badge-info">Brak zbrojenia</span><br>
                            Nie, siatka jest zbędna. Jastrychy anhydrytowe charakteryzują się bardzo wysoką wytrzymałością na zginanie i minimalnym skurczem przestrzennym w trakcie wiązania. W przeciwieństwie do tradycyjnej <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">wylewki betonowej z miksokreta</a>, eliminuje to potrzebę stosowania jakichkolwiek siatek stalowych czy zbrojenia rozproszonego (włókien).
                        </div>
                        <svg class="rk-faq-svg" viewBox="0 0 24 24" fill="none" stroke="#0284c7" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"></path><polyline points="3.27 6.96 12 12.01 20.73 6.96"></polyline><line x1="12" y1="22.08" x2="12" y2="12"></line></svg>
                    </div>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-btn">
                4. Czy wylewka cementowa jest tańsza od anhydrytowej?
                <div class="rk-faq-icon">
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-answer-wrapper">
                <div class="rk-faq-answer-inner">
                    <div class="rk-faq-answer-content">
                        <div class="rk-faq-text">
                            <span class="rk-ans-badge badge-money">Analiza ROI</span><br>
                            Pozornie tak. Sam materiał i <a href="https://projekt-ogrzewania.pl/podlogowka-cena-za-m%c2%b2-robocizny/">robocizna ekipy</a> są tańsze o ok. 15-25%. Jednak biorąc pod uwagę konieczność zakupu zbrojenia, plastyfikatora, dłuższy czas schnięcia (przestoje budowy) oraz – co najważniejsze – wyższe rachunki za ogrzewanie z powodu mniejszej wydajności termicznej, różnica w <a href="https://projekt-ogrzewania.pl/kompleksowa-wycena-ogrzewania-podlogowego-wodnego-na-co-przygotowac-budzet/">koszcie całkowitym inwestycji</a> zaciera się w ciągu pierwszych 2-3 sezonów grzewczych.
                        </div>
                        <svg class="rk-faq-svg" viewBox="0 0 24 24" fill="none" stroke="#16a34a" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="12" y1="1" x2="12" y2="23"></line><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
                    </div>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H-tags w bloku ostrzeżenia)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-faq-core');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Ochrona Własności Intelektualnej</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Interaktywny Panel FAQ oraz zintegrowane dane JSON-LD są chronione prawem autorskim serwisu Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Akordeonu
    const faqItems = document.querySelectorAll('.rk-faq-item');

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-faq-btn');
        
        btn.addEventListener('click', () => {
            // Zamknij wszystkie inne (Opcjonalne - dla zachowania czystości interfejsu)
            faqItems.forEach(otherItem => {
                if (otherItem !== item && otherItem.classList.contains('active')) {
                    otherItem.classList.remove('active');
                }
            });
            
            // Przełącz kliknięty
            item.classList.toggle('active');
        });
    });
    
    // Otwórz pierwsze pytanie domyślnie
    if(faqItems.length > 0) {
        faqItems[0].classList.add('active');
    }
});
</script>



<style>
:root {
    --rk-end-dark: #1e293b;
    --rk-end-primary: #f97316; /* Pomarańcz - ciepło */
    --rk-end-primary-light: #ffedd5;
    --rk-end-accent: #0ea5e9; /* Niebieski - inżynieria */
    --rk-end-bg: #ffffff;
    --rk-end-gray-light: #f1f5f9;
    --rk-end-text: #334155;
    --rk-end-warning: #ef4444;
}

.rk-final-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-end-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(249, 115, 22, 0.15);
    border: 1px solid #fed7aa;
    overflow: hidden;
}

/* Header z gradientem ciepła */
.rk-final-header {
    background: linear-gradient(135deg, var(--rk-end-dark) 0%, #0f172a 100%);
    padding: 40px 40px 30px;
    text-align: center;
    position: relative;
    border-bottom: 4px solid var(--rk-end-primary);
}

.rk-final-header h2 {
    color: #ffffff;
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-final-lead {
    color: #cbd5e1;
    font-size: 18px;
    line-height: 1.6;
    max-width: 700px;
    margin: 0 auto;
    font-weight: 300;
}

.rk-final-lead strong {
    color: var(--rk-end-primary);
    font-weight: 700;
}

/* Interaktywny symulator */
.rk-final-sim {
    padding: 40px;
    background: var(--rk-end-gray-light);
}

.rk-final-sim h3 {
    text-align: center;
    color: var(--rk-end-dark);
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 25px 0;
}

/* Toggle Switch w stylu mobilnym */
.rk-toggle-wrapper {
    display: flex;
    justify-content: center;
    margin-bottom: 35px;
}

.rk-toggle-bg {
    display: flex;
    background: #e2e8f0;
    border-radius: 99px;
    padding: 6px;
    position: relative;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.05);
}

.rk-toggle-btn {
    padding: 12px 30px;
    border-radius: 99px;
    font-size: 16px;
    font-weight: 700;
    color: #64748b;
    cursor: pointer;
    border: none;
    background: transparent;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 2;
}

.rk-toggle-btn.active {
    color: #ffffff;
}

.rk-toggle-pill {
    position: absolute;
    top: 6px;
    bottom: 6px;
    left: 6px;
    width: calc(50% - 6px);
    background: var(--rk-end-primary);
    border-radius: 99px;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 4px 10px -2px rgba(249, 115, 22, 0.5);
    z-index: 1;
}

.state-cement .rk-toggle-pill {
    transform: translateX(100%);
    background: var(--rk-end-dark);
    box-shadow: 0 4px 10px -2px rgba(30, 41, 59, 0.5);
}

/* Obszar danych technicznych i SVG */
.rk-data-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
    background: #ffffff;
    border-radius: 20px;
    padding: 30px;
    box-shadow: 0 10px 25px -5px rgba(0,0,0,0.05);
}

.rk-svg-container {
    width: 100%;
    max-width: 300px;
    margin: 0 auto;
}

.anim-heat-wave {
    opacity: 0;
}

/* Animacje Anhydryt - Szybkie oddawanie ciepła */
.state-anhydryt .wave-1 { animation: riseHeat 1.5s infinite 0s; stroke: #f97316; }
.state-anhydryt .wave-2 { animation: riseHeat 1.5s infinite 0.5s; stroke: #fb923c; }
.state-anhydryt .wave-3 { animation: riseHeat 1.5s infinite 1.0s; stroke: #fdba74; }
.state-anhydryt .screed-layer { height: 55px; fill: #ffedd5; transition: all 0.5s; }

/* Animacje Cement - Wolne oddawanie ciepła */
.state-cement .wave-1 { animation: riseHeat 3s infinite 0s; stroke: #94a3b8; }
.state-cement .wave-2 { animation: riseHeat 3s infinite 1s; stroke: #cbd5e1; }
.state-cement .wave-3 { animation: riseHeat 3s infinite 2s; stroke: #e2e8f0; }
.state-cement .screed-layer { height: 65px; fill: #f1f5f9; transition: all 0.5s; }

@keyframes riseHeat {
    0% { transform: translateY(0) scale(0.9); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-40px) scale(1.1); opacity: 0; }
}

.rk-tech-stats {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding-bottom: 10px;
    border-bottom: 1px dashed #cbd5e1;
}

.rk-stat-label {
    font-size: 15px;
    color: var(--rk-end-text);
    font-weight: 500;
}

.rk-stat-value {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-end-dark);
    transition: color 0.3s;
}

.state-anhydryt .val-highlight { color: var(--rk-end-primary); }
.state-cement .val-highlight { color: var(--rk-end-accent); }

/* Sekcja ostrzeżeń i podsumowania tekstu */
.rk-final-content {
    padding: 40px;
}

.rk-warning-box {
    background: #fef2f2;
    border-left: 5px solid var(--rk-end-warning);
    padding: 20px 25px;
    border-radius: 0 12px 12px 0;
    margin-bottom: 30px;
}

.rk-warning-box h4 {
    margin: 0 0 10px 0;
    color: var(--rk-end-warning);
    font-size: 18px;
    font-weight: 800;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-warning-box p {
    margin: 0;
    font-size: 15px;
    color: #7f1d1d;
    line-height: 1.6;
}

.rk-final-text p {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-end-text);
    margin: 0 0 20px 0;
}

.rk-final-text a {
    color: var(--rk-end-accent);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* Footer / CTA */
.rk-final-footer {
    background: #0f172a;
    padding: 30px 40px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    flex-wrap: wrap;
    gap: 20px;
}

.rk-signature {
    color: #94a3b8;
    font-size: 16px;
    font-weight: 400;
    font-style: italic;
}

.rk-signature span {
    color: var(--rk-end-primary);
    font-weight: 800;
    font-style: normal;
    display: block;
    font-size: 20px;
    margin-top: 5px;
}

.rk-cta-btn {
    background: var(--rk-end-primary);
    color: #fff;
    padding: 16px 32px;
    border-radius: 12px;
    font-weight: 800;
    text-decoration: none;
    font-size: 16px;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    transition: all 0.3s;
    border: 2px solid transparent;
}

.rk-cta-btn:hover {
    background: #ea580c;
    transform: scale(1.05);
    box-shadow: 0 10px 20px -5px rgba(234, 88, 12, 0.4);
}

@media (max-width: 768px) {
    .rk-data-grid { grid-template-columns: 1fr; gap: 20px; }
    .rk-final-header, .rk-final-sim, .rk-final-content { padding: 25px; }
    .rk-final-header h2 { font-size: 24px; }
    .rk-toggle-btn { padding: 10px 20px; font-size: 14px; }
    .rk-final-footer { flex-direction: column; text-align: center; justify-content: center; }
}
</style>

<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Mocne podsumowanie – Wylewka to Twój wymiennik ciepła",
    "description": "Podsumowanie parametrów technicznych wylewek grzejnych. Zobacz, dlaczego grubość jastrychu decyduje o sprawności pompy ciepła i dlaczego błędy są nieodwracalne.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-10",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-wylewki",
    "name": "Parametry Termiczne i Geometryczne Wylewek 2026",
    "description": "Zestawienie optymalnych grubości i parametrów dla wylewki anhydrytowej oraz cementowej w kontekście współpracy z pompami ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jastrych anhydrytowy 55 mm",
      "wylewka cementowa 65 mm",
      "opór cieplny Rλ",
      "badanie wilgotności metodą CM",
      "wymiennik ciepła ogrzewania podłogowego"
    ],
    "measurementTechnique": "Obliczenia na podstawie normy PN-EN 1264 oraz fizyki budowli dla instalacji płaszczyznowych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Anhydryt: Grubość całkowita 55mm, wysoka przewodność, niska bezwładność.",
        "Cement: Grubość całkowita 65mm, wyższa bezwładność, wymaga plastyfikatorów i dylatacji."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-wymiennik",
    "name": "Symulator Wymiennika Ciepła Jastrychu",
    "description": "Interaktywny panel przełączający parametry fizyczne i wizualizację emisji ciepła pomiędzy wylewką anhydrytową a tradycyjnym betonem.",
    "applicationCategory": "UtilitiesApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-final-container" id="wylewka-sum-app">
    
    <div class="rk-final-header">
        <h2>Mocne podsumowanie</h2>
        <div class="rk-final-lead">
            Wylewka to nie jest tylko „podłoga”. To Twój główny <strong>wymiennik ciepła</strong>, który decyduje o tym, czy Twoja <a href="https://projekt-ogrzewania.pl/pompa-ciepla/" style="color:#fff; text-decoration:underline;">pompa ciepła</a> będzie pracować z maksymalnym COP, czy generować straty rzędu tysięcy złotych rocznie.
        </div>
    </div>

    <!-- Symulator Wymiennika -->
    <div class="rk-final-sim" id="rkSimCore">
        <h3>Symulacja parametrów na 2026 rok</h3>
        
        <div class="rk-toggle-wrapper">
            <div class="rk-toggle-bg">
                <div class="rk-toggle-pill"></div>
                <button class="rk-toggle-btn active" data-type="anhydryt">Anhydryt (Płynny)</button>
                <button class="rk-toggle-btn" data-type="cement">Cement (Miksokret)</button>
            </div>
        </div>

        <div class="rk-data-grid">
            <!-- Interaktywny przekrój podłogi -->
            <div class="rk-svg-container">
                <svg viewBox="0 0 200 150" xmlns="http://www.w3.org/2000/svg">
                    <!-- Fale ciepła -->
                    <path class="anim-heat-wave wave-1" d="M40,70 Q50,40 40,10" fill="none" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-heat-wave wave-2" d="M100,70 Q110,40 100,10" fill="none" stroke-width="3" stroke-linecap="round"/>
                    <path class="anim-heat-wave wave-3" d="M160,70 Q170,40 160,10" fill="none" stroke-width="3" stroke-linecap="round"/>
                    
                    <!-- Okładzina wierzchnia -->
                    <rect x="10" y="75" width="180" height="8" fill="#e5e7eb" rx="2" />
                    
                    <!-- Warstwa Jastrychu (Wysokość dynamiczna z CSS) -->
                    <rect class="screed-layer" x="10" y="83" width="180" rx="2" />
                    
                    <!-- Rury PEX -->
                    <circle cx="40" cy="115" r="8" fill="#ef4444" stroke="#ffffff" stroke-width="2"/>
                    <circle cx="100" cy="115" r="8" fill="#ef4444" stroke="#ffffff" stroke-width="2"/>
                    <circle cx="160" cy="115" r="8" fill="#ef4444" stroke="#ffffff" stroke-width="2"/>
                    
                    <!-- Izolacja EPS -->
                    <rect x="10" y="138" width="180" height="12" fill="#cbd5e1" rx="2"/>
                </svg>
            </div>

            <!-- Zmienne Dane -->
            <div class="rk-tech-stats">
                <div class="rk-stat-row">
                    <span class="rk-stat-label">Rekomendowana grubość</span>
                    <span class="rk-stat-value val-highlight" id="val-thickness">55 mm</span>
                </div>
                <div class="rk-stat-row">
                    <span class="rk-stat-label">Nadlewka nad rurą (sd)</span>
                    <span class="rk-stat-value" id="val-sd">min. 35 mm</span>
                </div>
                <div class="rk-stat-row">
                    <span class="rk-stat-label">Opór cieplny Rλ</span>
                    <span class="rk-stat-value" id="val-r">Bardzo niski</span>
                </div>
                <div class="rk-stat-row">
                    <span class="rk-stat-label">Gotowość do wygrzewania</span>
                    <span class="rk-stat-value" id="val-time">Po 7 dniach</span>
                </div>
            </div>
        </div>
    </div>

    <!-- Treść merytoryczna -->
    <div class="rk-final-content">
        <div class="rk-warning-box">
            <h4>
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                Ryzyko błędu jest nieodwracalne
            </h4>
            <p>Błąd na etapie wylewki jest praktycznie nieusuwalny bez kucia całego parteru. Dlatego <strong>zawsze wymagaj od wykonawcy protokołu z wygrzewania technologicznego</strong> oraz twardego sprawdzenia wilgotności metodą CM (karbidową) przed montażem docelowych okładzin posadzkowych.</p>
        </div>

        <div class="rk-final-text">
            <p>Jeśli masz wątpliwości, zajrzyj do swojego projektu instalacji ogrzewania. To tam powinny być czarno na białym określone parametry oporu cieplnego (Rλ) niezbędne dla optymalnego przepływu energii w Twoim budynku.</p>
            <p>Zastanawiasz się, która opcja będzie idealna dla Twojej inwestycji? Porównaj parametry fizyczne, używając narzędzi inżynierskich dostępnych w naszej bazie wiedzy.</p>
        </div>
    </div>

    <!-- Stopka CTA -->
    <div class="rk-final-footer">
        <div class="rk-signature">
            Masz pytania o konkretną mieszankę? Jako inżynier powtarzam:
            <span>BUDUJ BEZ ŚCIEMY, LICZ Z FIZYKĄ.</span>
        </div>
        <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/" class="rk-cta-btn">
            Uruchom Kalkulatory
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 16 16 12 12 8"></polyline><line x1="8" y1="12" x2="16" y2="12"></line></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków H2/H3)
    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('wylewka-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 14px; color: #cbd5e1; max-width: 500px; margin: 0 auto; line-height: 1.6;">
                        Kontener interaktywny "Symulator Wymiennika" oraz struktura JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Wykryto próbę uruchomienia skryptu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Toggle / Symulatora
    const simCore = document.getElementById('rkSimCore');
    const buttons = document.querySelectorAll('.rk-toggle-btn');
    
    // Pola tekstowe do podmiany
    const vThick = document.getElementById('val-thickness');
    const vSd = document.getElementById('val-sd');
    const vR = document.getElementById('val-r');
    const vTime = document.getElementById('val-time');

    // Domyślny stan
    simCore.classList.add('state-anhydryt');

    buttons.forEach(btn => {
        btn.addEventListener('click', function() {
            const type = this.getAttribute('data-type');
            
            // UI Toggle
            buttons.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // Zmiana klas kontenera animacji
            simCore.classList.remove('state-anhydryt', 'state-cement');
            simCore.classList.add('state-' + type);

            // Zmiana danych
            if(type === 'anhydryt') {
                vThick.textContent = '55 mm';
                vSd.textContent = 'min. 35 mm';
                vR.textContent = 'Bardzo niski';
                vTime.textContent = 'Po 7 dniach';
            } else {
                vThick.textContent = '65 mm';
                vSd.textContent = 'min. 45 mm';
                vR.textContent = 'Większy (bufor)';
                vTime.textContent = 'Po 28 dniach';
            }
        });
    });
});
</script>



<style>
:root {
    --rk-dl-dark: #0f172a;
    --rk-dl-primary: #0284c7; /* Inżynierski niebieski */
    --rk-dl-accent: #f59e0b; /* Akcent złoty */
    --rk-dl-bg: #ffffff;
    --rk-dl-surface: #f8fafc;
    --rk-dl-border: #e2e8f0;
    --rk-dl-text: #334155;
}

.rk-dl-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    background: var(--rk-dl-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(2, 132, 199, 0.15);
    border: 1px solid var(--rk-dl-border);
    overflow: hidden;
}

/* Nagłówek Sekcji */
.rk-dl-header {
    padding: 45px 50px 30px;
    background: linear-gradient(135deg, var(--rk-dl-dark) 0%, #1e293b 100%);
    color: #ffffff;
    text-align: center;
}

.rk-dl-title {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-dl-intro {
    font-size: 17px;
    line-height: 1.6;
    color: #94a3b8;
    max-width: 750px;
    margin: 0 auto;
}

.rk-dl-intro strong {
    color: var(--rk-dl-accent);
}

/* Interaktywna Przeglądarka z Lupą */
.rk-dl-viewer {
    padding: 40px;
    background: var(--rk-dl-surface);
    display: flex;
    flex-direction: column;
    align-items: center;
}

.rk-viewer-box {
    position: relative;
    width: 100%;
    max-width: 600px;
    background: #fff;
    border-radius: 16px;
    box-shadow: 0 10px 30px rgba(0,0,0,0.1);
    overflow: hidden;
    cursor: zoom-in;
    border: 1px solid var(--rk-dl-border);
}

.rk-infographic-img {
    width: 100%;
    height: auto;
    display: block;
    transition: transform 0.3s ease;
}

/* Lupa */
.rk-magnifier {
    position: absolute;
    width: 150px;
    height: 150px;
    border-radius: 50%;
    border: 4px solid #fff;
    box-shadow: 0 0 20px rgba(0,0,0,0.3);
    background-repeat: no-repeat;
    display: none;
    pointer-events: none;
    z-index: 10;
}

/* Przyciski Pobierania */
.rk-dl-dashboard {
    padding: 40px 50px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    background: #ffffff;
}

.rk-dl-card {
    background: var(--rk-dl-surface);
    border: 1px solid var(--rk-dl-border);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    transition: transform 0.3s, border-color 0.3s;
}

.rk-dl-card:hover {
    transform: translateY(-5px);
    border-color: var(--rk-dl-primary);
}

.rk-card-icon {
    width: 48px;
    height: 48px;
    background: #fff;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-dl-primary);
    margin-bottom: 20px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.rk-card-title {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-dl-dark);
    margin: 0 0 10px 0;
}

.rk-card-desc {
    font-size: 14px;
    color: #64748b;
    line-height: 1.5;
    margin-bottom: 20px;
}

.rk-btn-action {
    width: 100%;
    padding: 14px;
    background: var(--rk-dl-primary);
    color: #fff;
    text-align: center;
    border-radius: 10px;
    font-weight: 800;
    text-decoration: none;
    font-size: 15px;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-btn-action:hover {
    background: #0369a1;
}

.rk-btn-pdf {
    background: #ef4444;
}

.rk-btn-pdf:hover {
    background: #dc2626;
}

@media (max-width: 768px) {
    .rk-dl-dashboard { grid-template-columns: 1fr; padding: 30px 20px; }
    .rk-dl-header { padding: 30px 20px; }
    .rk-dl-title { font-size: 22px; }
    .rk-viewer-box { cursor: default; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/"
    },
    "headline": "Kompletna infografika: Wylewka na ogrzewanie podłogowe",
    "description": "Pobierz inżynierski przewodnik po jastrychach. Zobacz warstwy systemu, czasy schnięcia i harmonogram wygrzewania technologicznego na jednej, czytelnej grafice.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wylewka-na-ogrzewanie-podlogowe-–-kompletny-przewodnik.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-02-18",
    "dateModified": "2026-05-10"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#dataset-przewodnik",
    "name": "Wytyczne Inżynierskie dla Wylewek Podłogowych 2026",
    "description": "Dane znormalizowane dotyczące grubości (5-7 cm), czasów schnięcia (7-28 dni) oraz krzywej wygrzewania posadzki grzejnej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "grubość wylewki 5-7 cm",
      "czas schnięcia betonu 28 dni",
      "schnięcie anhydrytu 7-14 dni",
      "warstwy ogrzewania podłogowego",
      "pobierz pdf wygrzewanie posadzki"
    ],
    "measurementTechnique": "Zbiór danych technicznych z infografiki opartej na normie PN-EN 1264 i fizyce budowli.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Optymalna grubość nad instalacją: 5-7 cm[cite: 5].",
        "Czas schnięcia Anhydryt: 7-14 dni[cite: 58].",
        "Czas schnięcia Beton: 21-28 dni[cite: 60].",
        "Faza wygrzewania: 20°C do 50°C ."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/#webapp-infoviewer",
    "name": "Interaktywny Podgląd Dokumentacji Technicznej",
    "description": "Narzędzie pozwalające na powiększenie i analizę warstw instalacji podłogowej przed pobraniem schematu w wersji PDF.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and high-res image support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-dl-container" id="rk-download-app">
    
    <div class="rk-dl-header">
        <h2 class="rk-dl-title">Pobierz Przewodnik Inżynierski</h2>
        <p class="rk-dl-intro">
            Zasady są proste: <strong>licz z fizyką, buduj bez ściemy.</strong> Przygotowałem dla Ciebie kompletny schemat, który możesz zabrać na budowę i pokazać swojemu wykonawcy. To Twoje ubezpieczenie przed błędami, których nie da się naprawić po wylaniu betonu.
        </p>
    </div>

    <div class="rk-dl-viewer">
        <div class="rk-viewer-box" id="rkViewer">
            <div id="rkMagnifier" class="rk-magnifier"></div>
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wylewka-na-ogrzewanie-podlogowe-–-kompletny-przewodnik.webp" alt="Infografika Wylewka na ogrzewanie podłogowe – kompletny przewodnik" class="rk-infographic-img" id="rkMainImg">
        </div>
        <p style="margin-top: 15px; font-size: 13px; color: #64748b; font-weight: 600;">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="vertical-align: middle; margin-right: 5px;"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
            Najechać na grafikę, aby powiększyć detale 
        </p>
    </div>

    <div class="rk-dl-dashboard">
        <div class="rk-dl-card">
            <div class="rk-card-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>
            </div>
            <h3 class="rk-card-title">Wersja Graficzna (WEBP)</h3>
            <p class="rk-card-desc">Idealna do szybkiego podglądu na smartfonie. Wysoka rozdzielczość, lekki format.</p>
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wylewka-na-ogrzewanie-podlogowe-–-kompletny-przewodnik.webp" download class="rk-btn-action">
                Pobierz Obraz (HD)
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
            </a>
        </div>

        <div class="rk-dl-card">
            <div class="rk-card-icon">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#ef4444" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            </div>
            <h3 class="rk-card-title">Format Drukarski (PDF)</h3>
            <p class="rk-card-desc">Wersja wektorowa do wydruku w formacie A3/A4. Niezbędna dokumentacja na placu budowy.</p>
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wylewka-na-ogrzewanie-podlogowe-–-kompletny-przewodnik.pdf" download class="rk-btn-action rk-btn-pdf">
                Pobierz Dokument PDF
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
            </a>
        </div>
    </div>
    
    <div style="background: #f1f5f9; padding: 20px 50px; border-top: 1px solid var(--rk-dl-border); text-align: center;">
        <p style="font-size: 14px; color: #475569; margin: 0;">
            Potrzebujesz obliczeń pod konkretny metraż? Użyj naszego <a href="https://projekt-ogrzewania.pl/kompleksowy-kalkulator-ogrzewania-podlogowego/" style="color: var(--rk-dl-primary); font-weight: 700; text-decoration: underline;">Kalkulatora Inżynierskiego</a>.
        </p>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Dyskretne zabezpieczenie domenowe (bez znaczników H)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-download-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif; max-width: 950px; margin: 40px auto;">
                    <div style="font-size: 36px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Zasoby Zastrzeżone</div>
                    <div style="font-size: 14px; color: #cbd5e1; line-height: 1.6;">
                        Interaktywne Centrum Pobierania oraz schematy techniczne stanowią własność Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na nieautoryzowanej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Lupy (Magnifier)
    const viewer = document.getElementById('rkViewer');
    const mainImg = document.getElementById('rkMainImg');
    const magnifier = document.getElementById('rkMagnifier');

    if (viewer && magnifier && window.innerWidth > 768) {
        viewer.addEventListener('mousemove', function(e) {
            magnifier.style.display = 'block';
            
            const rect = viewer.getBoundingClientRect();
            const x = e.pageX - rect.left - window.scrollX;
            const y = e.pageY - rect.top - window.scrollY;

            // Pozycjonowanie lupy
            magnifier.style.left = (x - magnifier.offsetWidth / 2) + 'px';
            magnifier.style.top = (y - magnifier.offsetHeight / 2) + 'px';

            // Pozycjonowanie tła lupy (powiększenie 2x)
            const zoom = 2;
            magnifier.style.backgroundImage = `url('${mainImg.src}')`;
            magnifier.style.backgroundSize = (mainImg.width * zoom) + "px " + (mainImg.height * zoom) + "px";
            magnifier.style.backgroundPosition = "-" + ((x * zoom) - magnifier.offsetWidth / 2) + "px -" + ((y * zoom) - magnifier.offsetHeight / 2) + "px";
        });

        viewer.addEventListener('mouseleave', () => magnifier.style.display = 'none');
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">Wylewka na ogrzewanie podłogowe – kompletny przewodnik.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Maksymalna długość pętli ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/</link>
					<comments>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 05 Feb 2025 20:55:07 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technologie budowlane]]></category>
		<category><![CDATA[długość pętli grzewczej]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[pętla ogrzewania podłogowego]]></category>
		<category><![CDATA[pex 16 mm]]></category>
		<category><![CDATA[pex 20 mm]]></category>
		<category><![CDATA[pompa obiegowa]]></category>
		<category><![CDATA[projektowanie ogrzewania]]></category>
		<category><![CDATA[równoważenie hydrauliczne]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2095</guid>

					<description><![CDATA[<p>Planujesz montaż ogrzewania podłogowego? Maksymalna długość pętli ogrzewania podłogowego to parametr, od którego zależy komfort cieplny i oszczędność energii. Zbyt długa pętla powoduje zimne strefy na podłodze, przeciąża pompę i zwiększa rachunki. W artykule wyjaśniamy, jak dobrać optymalną długość rur PEX 16 mm i 20 mm, jak obliczyć wydajność pompy oraz dlaczego izolacja podłogi jest kluczowa. Poznaj praktyczne przykłady, wzory i błędy, których warto uniknąć, by system działał sprawnie przez lata!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Maksymalna długość pętli 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: #0284c7; 
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f0f9ff; 
    --border-color: #e2e8f0;
}

.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;
}

.premium-hero-box::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    width: 300px;
    height: 300px;
    background: radial-gradient(circle, rgba(2, 132, 199, 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: #e0f2fe;
    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 #bae6fd;
}

.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: #0369a1;
}

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

.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(2, 132, 199, 0.1);
}

.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": "Maksymalna długość pętli ogrzewania podłogowego – granice, wzory i optymalizacja",
    "description": "Zaawansowany przewodnik inżynierski. Sprawdź, jaka jest maksymalna długość pętli ogrzewania podłogowego, jak obliczyć opór hydrauliczny i dlaczego rura 16 mm ma limit 100 metrów.",
    "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"
    },
    "license": "https://projekt-ogrzewania.pl/",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wartości graniczne oporów i długości dla obiegów grzewczych podłogowych",
    "description": "Zestawienie dopuszczalnych długości i wynikowych oporów hydraulicznych dla rur PEX/PERT stosowanych w niskotemperaturowych instalacjach płaszczyznowych wg normy PN-EN 1264.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Limit długości rury 16x2.0 mm",
        "value": "80-100 m",
        "description": "Zalecana wartość maksymalna zapewniająca liniowy opór poniżej 20 kPa"
      },
      {
        "@type": "PropertyValue",
        "name": "Limit długości rury 20x2.0 mm",
        "value": "100-120 m",
        "description": "Wartość graniczna dla dużych przestrzeni, stosowana m.in. w otwartych salonach"
      },
      {
        "@type": "PropertyValue",
        "name": "Krytyczny spadek ciśnienia na pętli",
        "value": "Max 0,25 bar (25 000 Pa)",
        "description": "Graniczna wartość oporu gwarantująca poprawne wymuszenie przepływu przez standardową pompę obiegową"
      }
    ],
    "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 Oporów Hydraulicznych i Straty Ciśnienia",
    "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#kalkulator-oporow",
    "description": "Interaktywne narzędzie inżynierskie do symulacji i obliczania oporów przepływu. Wskazuje, czy zaprojektowana długość pętli nie zablokuje przepływu masowego (l/min) i czy pompa obiegowa sprosta wygenerowanym oporom.",
    "applicationCategory": "EngineeringApplication",
    "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/"
      ]
    }
  }
]
</script>

<div class="premium-hero-box" id="hero-app-container">
    <div class="hero-content">
        
        <div class="hero-badge">
            <span>📏</span> Parametr Krytyczny Projektu
        </div>
        
        <p class="hero-text"><strong>Maksymalna długość pętli ogrzewania podłogowego</strong> to graniczna wartość rury grzejnej (najczęściej typu PEX lub PERT) ułożonej w jednym, ciągłym obiegu. Z punktu widzenia inżynierii sanitarnej, przekroczenie tego limitu skutkuje drastycznym wzrostem oporów hydraulicznych i natychmiastowym spadkiem wydajności cieplnej. Jeśli pętla jest zbyt długa, woda krążąca w systemie wychładza się zanim dotrze do końca obiegu, a standardowa pompa obiegowa traci zdolność do przetłoczenia wymaganej masy medium, co prowadzi do powstawania tzw. zimnych stref.</p>
        
        <p class="hero-text">Opierając się na wyliczeniach projektowych, normie <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a> oraz wieloletnim doświadczeniu z placów budowy, standardowo przyjmuje się, że dla najpopularniejszej rury o średnicy <strong>16&#215;2,0 mm</strong>, bezpieczna i maksymalna długość pętli ogrzewania podłogowego to <strong>80–100 metrów bieżących</strong>. W poniższym poradniku szczegółowo przeanalizujemy, z czego wynikają te restrykcje, jak średnica rury wpływa na limity i jak bezbłędnie zrównoważyć instalację.</p>

        <div class="hero-modules-title">W tym kompendium przeanalizujemy:</div>
        
        <div class="hero-grid">
            <div class="hero-card">
                <span class="hero-card-icon">🌊</span>
                <span class="hero-card-title">Opory hydrauliczne</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">📏</span>
                <span class="hero-card-title">Średnice rur a limity</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">⚖️</span>
                <span class="hero-card-title">Równoważenie obiegów</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">⚙️</span>
                <span class="hero-card-title">Wydajność pompy</span>
            </div>
        </div>

    </div>

    <noscript>
        <div style="padding: 20px 50px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <div style="font-size: 18px; color: #0f172a; margin-bottom: 15px; font-weight: bold;">Maksymalne granice parametrów pętli (wg PN-EN 1264)</div>
            <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;">Średnica rury PEX/PERT</th>
                        <th style="padding: 10px 0; color: #475569;">Maksymalna długość pętli</th>
                        <th style="padding: 10px 0; color: #475569;">Główne zadanie/limit</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">16 x 2.0 mm</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">80 &#8211; 100 mb</td>
                        <td style="padding: 10px 0; color: #0284c7;">Zachowanie oporu poniżej 20 kPa</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">17 x 2.0 mm</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">90 &#8211; 110 mb</td>
                        <td style="padding: 10px 0; color: #0284c7;">Margines błędu dla większych pomieszczeń</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">20 x 2.0 mm</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">100 &#8211; 120 mb</td>
                        <td style="padding: 10px 0; color: #0284c7;">Zastosowanie w dużych salonach i halach</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Ważna zasada:</td>
                        <td colspan="2" style="padding: 10px 0; font-style: italic;">Różnica w długości między najkrótszą a najdłuższą pętlą na tym samym rozdzielaczu nie powinna przekraczać 15-20%.</td>
                    </tr>
                </tbody>
            </table>
        </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('hero-app-container');
        if (container) {
            container.innerHTML = `
                <div style="padding: 60px 20px; text-align: center; background: #e0f2fe; color: #0284c7; 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;">🔒</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: #0369a1; 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: #0284c7; color: white; text-decoration: none; border-radius: 12px; font-weight: 800; transition: 0.3s;">ZOBACZ ORYGINALNY ARTYKUŁ</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --st-primary: #0f172a;
    --st-panel: #ffffff;
    --st-accent: #0284c7;
    --st-accent-light: #e0f2fe;
    --st-text: #334155;
    --st-muted: #94a3b8;
    --st-border: #e2e8f0;
    --st-highlight: #f8fafc;
}

.smart-table-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--st-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--st-border);
    overflow: hidden;
}

.st-content-wrapper {
    padding: 40px 50px 20px 50px;
}

.st-text-section h2 {
    color: var(--st-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.st-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--st-text);
    margin-bottom: 20px;
}

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

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

.st-text-section a:hover {
    color: #1e3a8a;
}

/* ================= INTERAKTYWNE KONTROLKI ================= */
.st-interactive-header {
    background: var(--st-highlight);
    border: 1px solid var(--st-border);
    border-radius: 16px;
    padding: 25px;
    margin: 30px 50px 0 50px;
}

.st-instruction {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--st-muted);
    letter-spacing: 1px;
    margin-bottom: 15px;
    text-align: center;
}

.st-controls-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}

.st-btn {
    background: #ffffff;
    border: 2px solid var(--st-border);
    border-radius: 12px;
    padding: 12px 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--st-text);
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
}

.st-btn span {
    font-size: 11px;
    color: var(--st-muted);
    font-weight: 600;
}

.st-btn:hover {
    border-color: #bae6fd;
    background: #f0f9ff;
    transform: translateY(-2px);
}

.st-btn.active {
    border-color: var(--st-accent);
    background: var(--st-accent-light);
    color: var(--st-accent);
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.15);
}

.st-btn.active span {
    color: var(--st-accent);
}

/* ================= TABELA DANYCH (DESKTOP) ================= */
.st-table-container {
    padding: 0 50px 40px 50px;
}

.st-table-responsive {
    width: 100%;
    border-radius: 12px;
    border: 1px solid var(--st-border);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.st-table {
    width: 100%;
    border-collapse: collapse;
    min-width: 600px;
    background: #ffffff;
}

.st-table th {
    background: #f1f5f9;
    color: var(--st-primary);
    font-weight: 800;
    font-size: 13px;
    text-transform: uppercase;
    padding: 18px 15px;
    text-align: left;
    border-bottom: 2px solid var(--st-border);
    white-space: nowrap;
}

.st-table td {
    padding: 16px 15px;
    font-size: 15px;
    color: var(--st-text);
    border-bottom: 1px solid var(--st-border);
    transition: all 0.3s ease;
}

.st-table tbody tr {
    transition: all 0.3s ease;
}

/* Stany interaktywne tabeli */
.st-table.filtering tbody tr {
    opacity: 0.3;
    background: #ffffff;
}

.st-table.filtering tbody tr.highlighted {
    opacity: 1;
    background: var(--st-accent-light);
    transform: scale(1.01);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.st-table.filtering tbody tr.highlighted td {
    font-weight: 700;
    color: var(--st-primary);
    border-color: transparent;
}

.st-table.filtering tbody tr.highlighted td:first-child {
    border-left: 4px solid var(--st-accent);
}

/* ================= DYNAMICZNA WSKAZÓWKA ================= */
.st-tip-box {
    margin-top: 20px;
    padding: 15px 20px;
    border-radius: 12px;
    background: #fffbeb;
    border-left: 4px solid #f59e0b;
    font-size: 14px;
    color: #92400e;
    display: none;
    animation: stFadeIn 0.4s ease;
}

.st-tip-box.visible {
    display: block;
}

.st-tip-box strong {
    color: #b45309;
}

@keyframes stFadeIn {
    from { opacity: 0; transform: translateY(5px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ================= WERSJA MOBILNA (UKŁAD KART) ================= */
@media (max-width: 768px) {
    .st-content-wrapper { padding: 30px 25px 15px 25px; }
    .st-interactive-header { margin: 20px 25px 0 25px; padding: 20px; }
    .st-controls-grid { grid-template-columns: 1fr 1fr; }
    .st-table-container { padding: 0 25px 30px 25px; margin-top: 15px; }
    
    /* Konwersja tabeli na karty */
    .st-table-responsive {
        border: none;
        box-shadow: none;
        background: transparent;
    }
    
    .st-table {
        min-width: 100%;
        display: block;
    }
    
    .st-table thead {
        display: none; /* Ukrywamy standardowe nagłówki */
    }
    
    .st-table tbody {
        display: block;
    }
    
    .st-table tbody tr {
        display: block;
        background: #ffffff;
        border: 1px solid var(--st-border);
        border-radius: 12px;
        margin-bottom: 15px;
        box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
        padding: 5px 0;
    }
    
    .st-table td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 12px 15px;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        text-align: right;
    }
    
    .st-table td:last-child {
        border-bottom: none;
    }
    
    /* Wyświetlanie etykiet data-label po lewej stronie */
    .st-table td::before {
        content: attr(data-label);
        font-weight: 800;
        font-size: 12px;
        color: var(--st-muted);
        text-transform: uppercase;
        text-align: left;
        margin-right: 15px;
        flex-shrink: 0;
        max-width: 50%;
    }

    /* Poprawka dla podświetlanego wiersza na mobile */
    .st-table.filtering tbody tr.highlighted {
        border: 2px solid var(--st-accent);
        transform: scale(1.02);
    }
    .st-table.filtering tbody tr.highlighted td:first-child {
        border-left: none; 
    }
}
</style>

<div class="smart-table-module" id="app-smart-table">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywna Tabela Parametrów Rur Ogrzewania Podłogowego",
        "description": "Moduł inżynierski pozwalający na dynamiczne filtrowanie i analizę parametrów krytycznych (długość, opór, moc) dla poszczególnych średnic rur PEX/PERT stosowanych w instalacjach płaszczyznowych.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#tabela-parametrow",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Filtrowanie wyników normy PN-EN 1264 dla średnic 16mm, 17mm, 20mm i 10mm",
          "Dynamiczne podświetlanie krytycznych oporów hydraulicznych (kPa)",
          "Kontekstowe porady projektowe dla wybranej średnicy rury"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zestawienie parametrów granicznych pętli ogrzewania podłogowego wg średnic",
        "description": "Tabela inżynierska korelująca średnicę rury z jej maksymalną długością bieżącą, oporem w kilopaskalach oraz generowaną mocą cieplną przy stałym parametrze ΔT=5K.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 16x2.0",
            "value": "Max 100m | Opór 15-20 kPa | Moc 1200-1500 W"
          },
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 17x2.0",
            "value": "Max 110m | Opór 15-22 kPa | Moc 1400-1700 W"
          },
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 20x2.0",
            "value": "Max 130m | Opór 18-25 kPa | Moc 1800-2200 W"
          },
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 10x1.3 (Kapilary)",
            "value": "Max 40m | Opór 10-15 kPa | Moc 300-500 W"
          }
        ],
        "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="st-content-wrapper">
        <div class="st-text-section">
            <h2>Jaka jest maksymalna długość pętli ogrzewania podłogowego dla różnych średnic rur?</h2>
            <p>Bezpośrednia odpowiedź zgodna z <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normą PN-EN 1264</a> oraz wytycznymi producentów (np. Rehau, Uponor, Kan-Therm) wskazuje, że dla rur <strong>16 mm limit to 100 m</strong>, a dla rur <strong>20 mm limit to 120 m</strong>. Przekroczenie tych wartości powoduje opór hydrauliczny powyżej 20 kPa (0,2 bara) na jednej pętli, co uniemożliwia poprawne <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">zrównoważenie instalacji</a> przy standardowych pompach obiegowych.</p>
            <p>W interaktywnej tabeli poniżej przedstawiam zestawienie parametrów granicznych, które stosuję w moich autorskich projektach:</p>
        </div>
    </div>

    <div class="st-interactive-header">
        <div class="st-instruction">👉 Wybierz średnicę rury, aby przeanalizować parametry</div>
        <div class="st-controls-grid">
            <button class="st-btn" data-target="pipe-16">16&#215;2.0 <span>Standard</span></button>
            <button class="st-btn" data-target="pipe-17">17&#215;2.0 <span>Optymalna</span></button>
            <button class="st-btn" data-target="pipe-20">20&#215;2.0 <span>Duże obiekty</span></button>
            <button class="st-btn" data-target="pipe-10">10&#215;1.3 <span>Ścienne/Kapilary</span></button>
        </div>
    </div>

    <div class="st-table-container">
        <div class="st-table-responsive">
            <table class="st-table" id="interactive-pipe-table">
                <thead>
                    <tr>
                        <th>Średnica rury (mm)</th>
                        <th>Maks. zalecana długość (m)</th>
                        <th>Maks. opór hydrauliczny (kPa)</th>
                        <th>Moc pętli (W) przy ΔT=5K</th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-row="pipe-16">
                        <td data-label="Średnica rury"><strong>PEX/PERT 16&#215;2,0</strong></td>
                        <td data-label="Maks. długość">80 – 100</td>
                        <td data-label="Maks. opór">15 – 20</td>
                        <td data-label="Moc pętli (ΔT=5K)">1200 – 1500</td>
                    </tr>
                    <tr data-row="pipe-17">
                        <td data-label="Średnica rury"><strong>PEX/PERT 17&#215;2,0</strong></td>
                        <td data-label="Maks. długość">90 – 110</td>
                        <td data-label="Maks. opór">15 – 22</td>
                        <td data-label="Moc pętli (ΔT=5K)">1400 – 1700</td>
                    </tr>
                    <tr data-row="pipe-20">
                        <td data-label="Średnica rury"><strong>PEX/PERT 20&#215;2,0</strong></td>
                        <td data-label="Maks. długość">110 – 130</td>
                        <td data-label="Maks. opór">18 – 25</td>
                        <td data-label="Moc pętli (ΔT=5K)">1800 – 2200</td>
                    </tr>
                    <tr data-row="pipe-10">
                        <td data-label="Średnica rury"><strong>PEX/PERT 10&#215;1,3 (kapilary)</strong></td>
                        <td data-label="Maks. długość">30 – 40</td>
                        <td data-label="Maks. opór">10 – 15</td>
                        <td data-label="Moc pętli (ΔT=5K)">300 – 500</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="st-tip-box" id="st-dynamic-tip">
            </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez tagów nagłówkowych)
    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('app-smart-table');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0284c7;">Ochrona Zawartości</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Tabela interaktywna jest autorskim narzędziem serwisu Projekt-Ogrzewania.pl.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0284c7; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">PRZEJDŹ DO ŹRÓDŁA</a>
                </div>
            `;
            return; 
        }
    }

    // Słownik porad dla poszczególnych rur
    const tips = {
        'pipe-16': '<strong>Wskazówka Projektowa:</strong> Najbardziej uniwersalna średnica w domach jednorodzinnych. Przy pętlach zbliżających się do 100m, bezwzględnie stosuj rotametry do precyzyjnego równoważenia.',
        'pipe-17': '<strong>Wskazówka Projektowa:</strong> Kompromis idealny dla pomp ciepła. Nieznacznie większa średnica wewnętrzna drastycznie obniża opory przy zachowaniu łatwości gięcia rury.',
        'pipe-20': '<strong>Wskazówka Projektowa:</strong> Rura trudna w układaniu przy gęstym rozstawie (np. 10 cm), ale niezastąpiona w ogromnych salonach i halach przemysłowych ze względu na potężny udźwig przepływu.',
        'pipe-10': '<strong>Wskazówka Projektowa:</strong> Bardzo cienka rura, generująca błyskawicznie ogromne opory. Stosowana wyłącznie w małych pętlach ściennych (tzw. kapilarach) i łazienkach pod lustra.'
    };

    // Logika interakcji
    const buttons = document.querySelectorAll('.st-btn');
    const table = document.getElementById('interactive-pipe-table');
    const rows = table.querySelectorAll('tbody tr');
    const tipBox = document.getElementById('st-dynamic-tip');

    buttons.forEach(button => {
        button.addEventListener('click', function() {
            const target = this.getAttribute('data-target');

            // Resetowanie aktywnego guzika
            buttons.forEach(btn => btn.classList.remove('active'));
            this.classList.add('active');

            // Aktywacja trybu filtrowania tabeli
            table.classList.add('filtering');

            // Podświetlanie odpowiedniego wiersza
            rows.forEach(row => {
                if (row.getAttribute('data-row') === target) {
                    row.classList.add('highlighted');
                } else {
                    row.classList.remove('highlighted');
                }
            });

            // Wyświetlenie porady
            if (tips[target]) {
                tipBox.innerHTML = tips[target];
                tipBox.classList.add('visible');
            }
        });
    });
});
</script>



<style>
:root {
    --math-primary: #0f172a;
    --math-accent: #0ea5e9; 
    --math-bg: #f8fafc;
    --math-border: #e2e8f0;
    --math-text: #334155;
    --math-highlight: #f0f9ff;
}

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

.math-header {
    background: linear-gradient(135deg, var(--math-primary), #1e293b);
    color: #ffffff;
    padding: 35px 50px;
    position: relative;
    overflow: hidden;
}

.math-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    border: 1px solid rgba(14, 165, 233, 0.4);
    color: #bae6fd;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.math-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.math-content {
    padding: 40px 50px;
    background: #ffffff;
}

.math-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--math-text);
    margin: 0 0 20px 0;
}

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

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

.math-text a:hover {
    color: #0284c7;
}

/* Sekcja Wzoru i Obliczeń */
.math-formula-container {
    background: var(--math-highlight);
    border: 1px solid #bae6fd;
    border-radius: 16px;
    padding: 30px;
    margin: 30px 0;
    position: relative;
}

.math-formula-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--math-primary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-top: 0;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.math-formula-title::before {
    content: '📊';
    font-size: 20px;
}

.math-equation-box {
    background: #ffffff;
    border: 1px solid var(--math-border);
    border-radius: 12px;
    padding: 25px;
    text-align: center;
    margin-bottom: 25px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.math-equation {
    font-size: 24px;
    font-family: 'Cambria Math', 'Times New Roman', serif;
    color: var(--math-primary);
    letter-spacing: 1px;
}

.math-variables {
    list-style: none;
    padding: 0;
    margin: 0;
}

.math-variables li {
    font-size: 15px;
    color: var(--math-text);
    margin-bottom: 12px;
    padding-left: 25px;
    position: relative;
}

.math-variables li::before {
    content: '•';
    position: absolute;
    left: 8px;
    color: var(--math-accent);
    font-weight: bold;
}

.math-variables li code {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 17px;
    color: var(--math-primary);
    font-weight: bold;
    background: transparent;
    padding: 0;
}

.math-result {
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px dashed #bae6fd;
    font-size: 16px;
    font-weight: 700;
    color: #0369a1;
}

@media (max-width: 768px) {
    .math-header { padding: 35px 25px; }
    .math-content { padding: 30px 25px; }
    .math-formula-container { padding: 20px; }
}
</style>

<div class="math-module-box" id="app-math-module">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Kalkulator Straty Ciśnienia i Oporów Hydraulicznych Pętli",
        "description": "Narzędzie i algorytm analityczny obliczający opór hydrauliczny (spadek ciśnienia w kPa) w rurach PEX 16mm w zależności od długości obiegu i prędkości przepływu wody grzewczej.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#obliczenia-oporow",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Wzór na spadek ciśnienia z uwzględnieniem prawa Hagena-Poiseuille’a",
          "Kalkulacja strat miejscowych i liniowych dla rury 16x2.0 mm",
          "Weryfikacja maksymalnej granicy obciążenia dla pomp obiegowych (np. 60 kPa)"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Współczynniki Oporów Liniowych dla Ogrzewania Podłogowego (Rura PEX)",
        "description": "Zestawienie zmiennych i stałych fizycznych wykorzystywanych do obliczania całkowitych oporów hydraulicznych w obiegach płaszczyznowych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Współczynnik oporu liniowego (R) dla PEX 16mm przy 2 l/min",
            "value": "150 Pa/m",
            "description": "Uśredniony opór stawiany przez 1 metr bieżący przewodu."
          },
          {
            "@type": "PropertyValue",
            "name": "Całkowita strata ciśnienia (Δp) dla pętli 100m",
            "value": "15 kPa",
            "description": "Bezpieczna granica obciążenia obwodu."
          },
          {
            "@type": "PropertyValue",
            "name": "Przepływ masowy",
            "value": "120 kg/h (ok. 2 l/min)",
            "description": "Wymagany strumień czynnika do pokrycia strat cieplnych."
          }
        ],
        "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="math-header">
        <div class="math-badge">Fizyka Budowli</div>
        <h2>Dlaczego opór hydrauliczny jest ważniejszy niż sama długość rury?</h2>
    </div>

    <div class="math-content">
        <p class="math-text">Dla inżyniera HVAC sama fizyczna długość rury jest tylko wartością pochodną, z której wynika najważniejszy parametr – dopuszczalna strata ciśnienia. Zgodnie z prawami termodynamiki i aerodynamiki płynów (w tym prawem Hagena-Poiseuille’a), opór przepływu rośnie liniowo wraz z długością przewodu, ale w kwadracie wraz ze wzrostem prędkości tłoczonego medium. To właśnie dlatego tak krytyczny jest precyzyjny dobór <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">pompy obiegowej w instalacji ogrzewania podłogowego</a>, która musi pokonać te siły tarcia.</p>

        <p class="math-text">Zobrazujmy to na przykładzie. W typowym projekcie, przy zapotrzebowaniu na ciepło wynoszącym 50 W/m² i rozstawie rur co 10 cm, na 1 m² przypada 10 mb rury. Jeśli nasza pętla osiągnie 120 m dla średnicy 16 mm, to przy przepływie niezbędnym do pokrycia strat ciepła, całkowity opór może skoczyć nawet do 35 kPa. Standardowa pompa w kotle gazowym lub pompie ciepła (np. o wysokości podnoszenia 6 m, co odpowiada ciśnieniu 60 kPa) musi obsłużyć nie tylko ten jeden obwód, ale także opory armatury, zaworów mieszających i głównej belki zasilającej, jaką stanowi <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do podłogówki</a>. Jeśli jedna zbyt długa pętla „zabierze” 35 kPa z dostępnych 60 kPa, na resztę systemu zostaje drastycznie mało mocy, co wprost prowadzi do niedogrzania najdalszych pomieszczeń i powstawania zimnych stref.</p>

        <div class="math-formula-container">
            <h3 class="math-formula-title">Obliczenie 1: Spadek ciśnienia w pętli</h3>
            
            <p class="math-text" style="font-size: 15px; margin-bottom: 15px;">Przyjmijmy do obliczeń najpopularniejszą rurę 16 mm, graniczną długość <strong>100 m</strong> i przepływ masowy rzędu <strong>120 kg/h</strong> (co odpowiada wskazaniu ok. 2 l/min na rotametrze). Wykorzystując współczynnik oporów liniowych dla przewodów z polietylenu sieciowanego (PEX), stosujemy poniższy algorytm:</p>

            <div class="math-equation-box">
                <span class="math-equation">&Delta;p = L &times; R + &Sigma;Z</span>
            </div>

            <ul class="math-variables">
                <li>Gdzie:</li>
                <li><code>L = 100 m</code> (długość rozwinięcia rury)</li>
                <li><code>R &approx; 150 Pa/m</code> (opór liniowy dla zadanej prędkości przepływu)</li>
                <li><code>&Sigma;Z</code> (suma oporów miejscowych – tu pominięta dla uproszczenia liniowego)</li>
            </ul>

            <div class="math-result">
                &Delta;p = 100 m &times; 150 Pa/m = 15 000 Pa = <strong>15 kPa</strong>
            </div>
        </div>

        <p class="math-text">Otrzymany wynik <strong>15 kPa</strong> to wartość wysoce bezpieczna dla prawidłowego zrównoważenia układu. Jednak wystarczy niepozorne zwiększenie długości do <strong>130 m</strong> przy utrzymaniu tego samego zapotrzebowania na przepływ, a opór liniowy podniesie się do ponad <strong>19,5 kPa</strong>. Jeśli dodamy do tego opory miejscowe na złączkach i belce rozdzielacza (kolejne 5–7 kPa), system niebezpiecznie zbliża się do granicy wydajności elektroniki pompowej pracującej na najniższych, energooszczędnych nastawach. Efekt? Znacząco wyższe zużycie prądu przez kotłownię.</p>
    </div>

</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('app-math-module');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 25px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">
                    <span style="font-size: 45px; display: block; margin-bottom: 15px;">🛑</span>
                    <div style="font-weight: 900; font-size: 22px; margin-bottom: 12px;">Naruszenie praw autorskich</div>
                    <p style="font-size: 15px; margin-bottom: 20px; color: #991b1b;">Ten moduł obliczeniowy jest własnością intelektualną Projekt-Ogrzewania.pl. Kopiowanie skryptów bez zgody jest zabronione.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 12px 24px; background: #dc2626; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 14px;">ZOBACZ ORYGINALNE OBLICZENIA</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --sim-bg: #0f172a;
    --sim-panel: #1e293b;
    --sim-accent: #0ea5e9;
    --sim-accent-glow: rgba(14, 165, 233, 0.4);
    --sim-text: #f8fafc;
    --sim-muted: #94a3b8;
    --sim-danger: #ef4444;
    --sim-success: #10b981;
    --sim-border: #334155;
}

.sim-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #e2e8f0;
    overflow: hidden;
}

.sim-text-section {
    padding: 40px 50px 10px 50px;
    color: #334155;
    font-size: 16px;
    line-height: 1.8;
}

.sim-text-section h2 {
    color: #0f172a;
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
}

.sim-text-section p {
    margin-bottom: 20px;
}

.sim-text-section a {
    color: #0284c7;
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
}

/* Nowe formatowanie bloków tekstu */
.sim-alert-box {
    padding: 15px 20px;
    border-radius: 12px;
    background: #fffbeb;
    border-left: 4px solid #f59e0b;
    color: #92400e;
    font-size: 15px;
    margin-bottom: 30px;
}

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

.sim-comp-card {
    padding: 25px;
    border-radius: 16px;
    border: 1px solid #e2e8f0;
}

.sim-comp-card.ok {
    background: #f0fdf4;
    border-top: 4px solid #16a34a;
}

.sim-comp-card.bad {
    background: #fef2f2;
    border-top: 4px solid #dc2626;
}

.sim-comp-card h3 {
    margin: 0 0 10px 0;
    font-size: 17px;
    font-weight: 800;
    color: #0f172a;
}

.sim-comp-card p {
    margin: 0;
    font-size: 14.5px;
    line-height: 1.6;
}

.sim-math-context {
    background: #f8fafc;
    padding: 30px;
    border-radius: 16px;
    border: 1px dashed #cbd5e1;
    margin-bottom: 30px;
}

.sim-equation-block {
    text-align: center;
    font-size: 20px;
    color: var(--sim-bg);
    margin: 20px 0;
    padding: 15px;
    background: #ffffff;
    border-radius: 12px;
    border: 1px solid #e2e8f0;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.sim-call-to-action {
    text-align: center;
    font-weight: 800;
    color: var(--sim-accent);
    font-size: 18px;
    margin-top: 10px;
}

/* ================= INTERAKTYWNY DASHBOARD ================= */
.sim-dashboard {
    background: var(--sim-bg);
    margin: 10px 50px 50px 50px;
    border-radius: 20px;
    padding: 35px;
    color: var(--sim-text);
    position: relative;
    border: 1px solid var(--sim-border);
    box-shadow: inset 0 0 40px rgba(0,0,0,0.5);
}

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

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

.sim-controls {
    background: var(--sim-panel);
    padding: 25px;
    border-radius: 16px;
    border: 1px solid var(--sim-border);
}

.sim-control-group {
    margin-bottom: 25px;
}

.sim-control-group:last-child {
    margin-bottom: 0;
}

.sim-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 12px;
}

.sim-label {
    font-size: 13px;
    font-weight: 700;
    color: var(--sim-muted);
    text-transform: uppercase;
}

.sim-value-display {
    font-size: 16px;
    font-weight: 900;
    color: var(--sim-text);
    background: rgba(0,0,0,0.3);
    padding: 4px 10px;
    border-radius: 6px;
    border: 1px solid var(--sim-border);
}

input[type=range].sim-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
}
input[type=range].sim-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    height: 20px;
    width: 20px;
    border-radius: 50%;
    background: var(--sim-accent);
    cursor: pointer;
    margin-top: -8px;
    box-shadow: 0 0 10px var(--sim-accent-glow);
    transition: 0.2s;
}
input[type=range].sim-slider::-webkit-slider-thumb:hover {
    transform: scale(1.2);
}
input[type=range].sim-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 6px;
    cursor: pointer;
    background: var(--sim-bg);
    border-radius: 4px;
    border: 1px solid var(--sim-border);
}

.sim-results {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    background: var(--sim-panel);
    border-radius: 16px;
    border: 1px solid var(--sim-border);
    padding: 25px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

.sim-result-label {
    font-size: 12px;
    color: var(--sim-muted);
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 1px;
    margin-bottom: 10px;
}

.sim-result-main {
    font-size: 48px;
    font-weight: 900;
    color: var(--sim-accent);
    line-height: 1;
    margin-bottom: 5px;
    font-family: 'Cambria Math', monospace;
    text-shadow: 0 0 20px var(--sim-accent-glow);
}

.sim-result-sub {
    font-size: 16px;
    color: var(--sim-muted);
    margin-bottom: 20px;
}

.sim-alert {
    padding: 12px 15px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    width: 100%;
    box-sizing: border-box;
    transition: all 0.3s ease;
}

.sim-alert.ok {
    background: rgba(16, 185, 129, 0.1);
    color: var(--sim-success);
    border: 1px solid rgba(16, 185, 129, 0.3);
}

.sim-alert.warn {
    background: rgba(239, 68, 68, 0.1);
    color: var(--sim-danger);
    border: 1px solid rgba(239, 68, 68, 0.3);
}

@media (max-width: 768px) {
    .sim-text-section { padding: 30px 25px 10px 25px; }
    .sim-comparison-grid { grid-template-columns: 1fr; }
    .sim-dashboard { margin: 20px 25px 30px 25px; padding: 25px; }
    .sim-grid { grid-template-columns: 1fr; gap: 20px; }
}
</style>

<div class="sim-module-wrapper" id="app-sim-interactive">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Symulator Przepływu Masowego i ΔT",
        "description": "Dynamiczny kalkulator inżynierski pozwalający na symulację wpływu zapotrzebowania na moc (W) oraz różnicy temperatur ΔT (K) na wymagany przepływ czynnika grzewczego (l/min). System ostrzega przed przekroczeniem limitów hydraulicznych dla rury 16mm.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#symulator-przeplywu",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Suwak zapotrzebowania na moc (Q) w zakresie 500W - 3000W",
          "Suwak różnicy temperatur (ΔT) w zakresie 4K - 12K",
          "Algorytm ostrzegający przed przepływem > 2.5 l/min wymuszającym podział na krótsze pętle"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zależność Długości Pętli, Przepływu i Różnicy Temperatur w Ogrzewaniu Płaszczyznowym",
        "description": "Zbiór danych wyjściowych dla optymalizacji ΔT przy zachowaniu reżimu oporów hydraulicznych w obwodach grzewczych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Optymalna różnica temperatur (ΔT)",
            "value": "5K - 10K",
            "description": "Zalecany zakres projektowy dla współpracy z pompami ciepła."
          },
          {
            "@type": "PropertyValue",
            "name": "Pojemność cieplna wody (c)",
            "value": "1.163 Wh/(kg·K)",
            "description": "Właściwa pojemność cieplna wykorzystywana we wzorze na przepływ."
          },
          {
            "@type": "PropertyValue",
            "name": "Krytyczny przepływ masowy (G)",
            "value": "> 2.5 l/min",
            "description": "Punkt, w którym dla rury 16mm generowane opory wymuszają podział dużej pętli na dwie mniejsze."
          }
        ],
        "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="sim-text-section">
        <h2>Jak długość pętli wpływa na różnicę temperatur (&Delta;T)?</h2>
        
        <p>Właściwa różnica temperatur między zasilaniem a powrotem w ogrzewaniu podłogowym powinna mieścić się w wąskim, precyzyjnie dobranym zakresie <strong>5K – 10K</strong>. Jeśli <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalna długość pętli ogrzewania podłogowego</a> zostanie drastycznie przekroczona, woda w końcowej części obiegu będzie już mocno wychłodzona.</p>
        
        <p>Stworzy to wysoce niepożądany efekt <strong>&#8222;zimnej podłogi&#8221;</strong> w dalszej części pomieszczenia. Zjawisko to dokładnie opisuje <a href="https://projekt-ogrzewania.pl/spadek-temperatury-dt-roznica-miedzy-temperatura-zasilania-a-powrotu/">spadek temperatury ΔT</a> w układach zamkniętych.</p>

        <div class="sim-alert-box">
            <strong>Ważne:</strong> Problem jest szczególnie niebezpieczny przy współpracy z nowoczesnymi źródłami, takimi jak <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła</a>, które pracują najefektywniej przy bardzo niskim ΔT (np. 5K).
        </div>

        <div class="sim-comparison-grid">
            <div class="sim-comp-card ok">
                <h3>Krótka pętla (np. 60 m)</h3>
                <p>Umożliwia wysoki przepływ przy niewielkich oporach. Skutkuje to małym ΔT i bardzo równomiernym rozkładem temperatury powierzchniowej podłogi (t_surface ≈ 26–27°C).</p>
            </div>
            
            <div class="sim-comp-card bad">
                <h3>Długa pętla (np. 120 m)</h3>
                <p>Wymusza dławienie przepływu z powodu potężnych oporów lub pracę przy ekstremalnie wysokim ΔT. Początek pętli parzy osiągając 29°C, a koniec ma zaledwie 22°C. Inwestor odczuje to jako <strong>bardzo nieprzyjemny dyskomfort termiczny</strong>.</p>
            </div>
        </div>

        <div class="sim-math-context">
            <p>Dla pętli o potężnej mocy <strong>1800 W</strong> (np. duży, przeszklony salon) i założonym <strong>ΔT = 7K</strong>, wzór na masowy przepływ czynnika wygląda następująco:</p>
            
            <div class="sim-equation-block">
                G = Q / (c &times; &Delta;T)<br>
                G = 1800 / (1,163 &times; 7) &approx; 221 l/h (3,68 l/min)
            </div>
            
            <p style="margin-bottom: 0;">Przy tak potężnym przepływie, rura 16 mm o długości zaledwie 100 m wygeneruje opory rzędu <strong>28 kPa</strong>, co jest wartością absolutnie niedopuszczalną i zablokuje obieg. W takim przypadku inżynier musi podjąć decyzję o podział salonu na <strong>dwie pętle po 50 m</strong>.</p>
        </div>

        <div class="sim-call-to-action">
            👇 Sprawdź na interaktywnym symulatorze poniżej, jak zmiana mocy i ΔT wpływa na krytyczny przepływ wody na rotametrze.
        </div>
    </div>

    <div class="sim-dashboard">
        <div class="sim-dashboard-title">
            <span style="font-size: 18px;">🎛️</span> Symulator Hydrauliczny: Przepływ a ΔT
        </div>
        
        <div class="sim-grid">
            
            <div class="sim-controls">
                <div class="sim-control-group">
                    <div class="sim-label-row">
                        <span class="sim-label">Zapotrzebowanie na moc (Q)</span>
                        <span class="sim-value-display" id="val-q">1800 W</span>
                    </div>
                    <input type="range" min="500" max="3000" step="50" value="1800" class="sim-slider" id="slider-q">
                </div>
                
                <div class="sim-control-group">
                    <div class="sim-label-row">
                        <span class="sim-label">Różnica temperatur (ΔT)</span>
                        <span class="sim-value-display" id="val-dt">7 K</span>
                    </div>
                    <input type="range" min="4" max="12" step="0.5" value="7" class="sim-slider" id="slider-dt">
                </div>
            </div>

            <div class="sim-results">
                <div class="sim-result-label">Wymagany przepływ na pętli</div>
                <div class="sim-result-main" id="result-lmin">3.68</div>
                <div class="sim-result-sub" id="result-lh">221 l/h</div>
                
                <div class="sim-alert warn" id="sim-warning">
                    ⚠️ Krytyczny przepływ! Opory > 20 kPa. Konieczny podział na 2 pętle.
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez nagłówków H)
    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('app-sim-interactive');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 15px;">🛡️</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Skrypt Zabezpieczony</div>
                    <p style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Ten interaktywny symulator jest chroniony prawem autorskim i przypisany do domeny Projekt-Ogrzewania.pl.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 25px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">WRÓĆ DO ORYGINAŁU</a>
                </div>
            `;
            return; // Przerywa działanie skryptu symulatora
        }
    }

    // Logika Kalkulatora
    const sliderQ = document.getElementById('slider-q');
    const sliderDt = document.getElementById('slider-dt');
    const valQ = document.getElementById('val-q');
    const valDt = document.getElementById('val-dt');
    const resLmin = document.getElementById('result-lmin');
    const resLh = document.getElementById('result-lh');
    const warningBox = document.getElementById('sim-warning');

    const C_WATER = 1.163;

    function calculateFlow() {
        const q = parseFloat(sliderQ.value);
        const dt = parseFloat(sliderDt.value);

        // Aktualizacja UI etykiet
        valQ.textContent = q + ' W';
        valDt.textContent = dt + ' K';

        // Obliczenia
        const flowLh = q / (C_WATER * dt);
        const flowLmin = flowLh / 60;

        // Aktualizacja Wyników
        resLh.textContent = Math.round(flowLh) + ' l/h';
        resLmin.textContent = flowLmin.toFixed(2);

        // Logika Ostrzeżeń
        if (flowLmin > 2.5) {
            warningBox.className = 'sim-alert warn';
            warningBox.innerHTML = '⚠️ Krytyczny przepływ! Opory > 20 kPa. Konieczny podział obwodu na 2 pętle dla rury 16mm.';
        } else if (flowLmin < 0.5) {
            warningBox.className = 'sim-alert warn';
            warningBox.innerHTML = '⚠️ Przepływ zbyt niski! Ryzyko zapowietrzania się pętli i braku oddawania ciepła.';
        } else {
            warningBox.className = 'sim-alert ok';
            warningBox.innerHTML = '✅ Przepływ optymalny. Instalacja bezpieczna dla rury o długości do 100 mb.';
        }
    }

    // Nasłuchiwacze zdarzeń
    if (sliderQ &#038;&#038; sliderDt) {
        sliderQ.addEventListener('input', calculateFlow);
        sliderDt.addEventListener('input', calculateFlow);
        // Inicjalizacja
        calculateFlow();
    }
});
</script>



<style>
:root {
    --algo-primary: #0f172a;
    --algo-panel: #ffffff;
    --algo-accent: #0284c7;
    --algo-accent-light: #e0f2fe;
    --algo-text: #334155;
    --algo-muted: #94a3b8;
    --algo-border: #e2e8f0;
    --algo-bg: #f8fafc;
    --algo-success: #16a34a;
}

.algo-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--algo-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--algo-border);
    overflow: hidden;
}

.algo-intro-section {
    padding: 40px 50px 20px 50px;
}

/* Zmiana na H2 */
.algo-intro-section h2 {
    color: var(--algo-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.algo-intro-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--algo-text);
    margin-bottom: 0;
}

.algo-intro-section a {
    color: var(--algo-accent);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: 0.2s;
}

.algo-intro-section a:hover {
    color: #1e3a8a;
}

/* ================= INTERAKTYWNY STEPPER ================= */
.algo-stepper-container {
    display: flex;
    margin: 30px 50px 50px 50px;
    background: var(--algo-bg);
    border: 1px solid var(--algo-border);
    border-radius: 16px;
    overflow: hidden;
}

/* Lista Kroków (Lewa strona) */
.algo-steps-nav {
    width: 35%;
    background: #ffffff;
    border-right: 1px solid var(--algo-border);
    display: flex;
    flex-direction: column;
}

.algo-step-btn {
    padding: 20px 25px;
    text-align: left;
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--algo-border);
    cursor: pointer;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    gap: 15px;
    color: var(--algo-muted);
}

.algo-step-btn:last-child {
    border-bottom: none;
}

.algo-step-number {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--algo-border);
    color: #ffffff;
    font-size: 13px;
    font-weight: 800;
    flex-shrink: 0;
    transition: 0.3s;
}

.algo-step-title {
    font-size: 14px;
    font-weight: 700;
    line-height: 1.4;
    transition: 0.3s;
}

.algo-step-btn:hover {
    background: var(--algo-bg);
}

.algo-step-btn.active {
    background: var(--algo-accent-light);
    border-left: 4px solid var(--algo-accent);
    padding-left: 21px; /* kompensacja bordera */
    color: var(--algo-primary);
}

.algo-step-btn.active .algo-step-number {
    background: var(--algo-accent);
    box-shadow: 0 0 10px rgba(2, 132, 199, 0.3);
}

.algo-step-btn.active .algo-step-title {
    color: var(--algo-accent);
}

/* Treść Kroku (Prawa strona) */
.algo-steps-content {
    width: 65%;
    padding: 40px;
    position: relative;
}

.algo-panel {
    display: none;
    animation: algoFadeIn 0.4s ease;
}

.algo-panel.active {
    display: block;
}

@keyframes algoFadeIn {
    from { opacity: 0; transform: translateX(10px); }
    to { opacity: 1; transform: translateX(0); }
}

.algo-panel-tag {
    display: inline-block;
    padding: 4px 12px;
    background: #e2e8f0;
    color: #475569;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

/* Zmiana na H3 */
.algo-panel h3 {
    font-size: 20px;
    font-weight: 900;
    color: var(--algo-primary);
    margin: 0 0 15px 0;
}

/* Zmiana na H4 */
.algo-panel h4 {
    font-size: 15px;
    font-weight: 800;
    color: var(--algo-primary);
    margin: 20px 0 10px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.algo-panel p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--algo-text);
    margin-bottom: 20px;
}

.algo-formula-box {
    background: #ffffff;
    border: 1px dashed var(--algo-accent);
    padding: 15px 20px;
    border-radius: 12px;
    font-family: 'Cambria Math', monospace;
    font-size: 16px;
    color: var(--algo-primary);
    font-weight: bold;
    text-align: center;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.algo-panel-alert {
    display: flex;
    gap: 12px;
    background: #f0fdf4;
    border: 1px solid #bbf7d0;
    padding: 15px;
    border-radius: 12px;
    color: #166534;
    font-size: 14px;
    line-height: 1.5;
}

@media (max-width: 768px) {
    .algo-intro-section { padding: 30px 25px 10px 25px; }
    .algo-stepper-container { margin: 20px 25px 40px 25px; flex-direction: column; }
    .algo-steps-nav { width: 100%; border-right: none; border-bottom: 1px solid var(--algo-border); flex-direction: row; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; }
    .algo-step-btn { padding: 15px; border-bottom: none; border-right: 1px solid var(--algo-border); flex-shrink: 0; min-width: 200px; }
    .algo-step-btn.active { border-left: none; border-bottom: 4px solid var(--algo-accent); padding-left: 15px; padding-bottom: 11px; }
    .algo-steps-content { width: 100%; padding: 25px; }
}
</style>

<div class="algo-module-wrapper" id="app-algo-stepper">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Algorytm Projektowy: Długość Pętli",
        "description": "Narzędzie typu krok-po-kroku ilustrujące procedurę inżynierską obliczania i weryfikacji hydraulicznej obiegów ogrzewania płaszczyznowego z uwzględnieniem normy PN-EN 12831.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#algorytm-krok-po-kroku",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Definiowanie zapotrzebowania cieplnego Q_pom (OZC)",
          "Ustalanie rozstawu rur w zależności od strefy (brzegowa/dzienna)",
          "Obliczanie wstępnej długości L_wst z wykorzystaniem wzorów",
          "Weryfikacja hydrauliczna podziału obiegów"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Procedura obliczeniowa parametrów podłogówki",
        "description": "Zestawienie zmiennych i stałych wykorzystywanych w procesie wymiarowania instalacji ogrzewania podłogowego.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Zapotrzebowanie na ciepło (Q_pom)",
            "value": "Wartość zmienna (np. 1500 W)",
            "description": "Wyznaczane na podstawie normy PN-EN 12831."
          },
          {
            "@type": "PropertyValue",
            "name": "Rozstaw rur (b)",
            "value": "10 cm lub 15 cm",
            "description": "Zapotrzebowanie rury dla rozstawu 15 cm wynosi ok. 6.7 mb/m2."
          },
          {
            "@type": "PropertyValue",
            "name": "Wyznaczenie wstępnej długości (L_wst)",
            "value": "(Powierzchnia × zapotrzebowanie mb) + przyłącza",
            "description": "Wzór obliczający teoretyczne zużycie rury na dany obieg."
          }
        ],
        "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="algo-intro-section">
        <h2>Algorytm wyznaczania długości pętli – krok po kroku</h2>
        <p>Jako projektant z wieloletnim doświadczeniem w branży HVAC, stosuję sztywną, sprawdzoną procedurę obliczeniową. Pozwala mi to bezbłędnie określić, jaka będzie <strong>maksymalna długość pętli ogrzewania podłogowego</strong> w konkretnym pomieszczeniu i kiedy należy dany układ podzielić, aby uniknąć krytycznych błędów wykonawczych i przeciążenia pompy.</p>
    </div>

    <div class="algo-stepper-container">
        
        <div class="algo-steps-nav">
            <button class="algo-step-btn active" data-step="step-1">
                <span class="algo-step-number">1</span>
                <span class="algo-step-title">Obliczenie Q<sub>pom</sub> (OZC)</span>
            </button>
            <button class="algo-step-btn" data-step="step-2">
                <span class="algo-step-number">2</span>
                <span class="algo-step-title">Określenie rozstawu (b)</span>
            </button>
            <button class="algo-step-btn" data-step="step-3">
                <span class="algo-step-number">3</span>
                <span class="algo-step-title">Długość wstępna L<sub>wst</sub></span>
            </button>
            <button class="algo-step-btn" data-step="step-4">
                <span class="algo-step-number">4</span>
                <span class="algo-step-title">Weryfikacja układu</span>
            </button>
            <button class="algo-step-btn" data-step="step-5">
                <span class="algo-step-number">5</span>
                <span class="algo-step-title">Nastawy na rotametrach</span>
            </button>
        </div>

        <div class="algo-steps-content">
            
            <div class="algo-panel active" id="step-1">
                <span class="algo-panel-tag">Fundament Projektu</span>
                <h3>Zapotrzebowanie na ciepło</h3>
                <p>Proces zawsze rozpoczynamy od rzetelnego <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektu OZC</a> (Obliczanie Zapotrzebowania na Ciepło), sporządzonego rygorystycznie zgodnie z normą <strong>PN-EN 12831</strong>.</p>
                <p>Na podstawie przenikalności cieplnej przegród, wielkości okien i strat na wentylacji określamy wartość <strong>Q<sub>pom</sub></strong>. Dla celów naszego algorytmu przyjmijmy modelową sypialnię, w której Q<sub>pom</sub> = 1500 W.</p>
            </div>

            <div class="algo-panel" id="step-2">
                <span class="algo-panel-tag">Parametry Fizyczne</span>
                <h3>Rozstaw rur (b)</h3>
                <p>Mając zdefiniowane zapotrzebowanie, dobieramy gęstość układania rury grzejnej, czyli jej rozstaw. Wybór uzależniony jest od charakterystyki strefy w budynku:</p>
                <ul style="color: var(--algo-text); line-height: 1.6; margin-bottom: 20px;">
                    <li><strong>10 cm:</strong> Strefy brzegowe (przy oknach), łazienki oraz miejsca o dużych stratach.</li>
                    <li><strong>15 cm:</strong> Standard dla pomieszczeń dziennych (salon, pokoje), zapewniający optymalny rozkład temperatury.</li>
                </ul>
                <p>Przyjęcie popularnego rozstawu b = 15 cm oznacza, że fizyczne zapotrzebowanie na rurę wynosi średnio <strong>6,7 metra bieżącego na każdy 1 m² powierzchni</strong>.</p>
            </div>

            <div class="algo-panel" id="step-3">
                <span class="algo-panel-tag">Kalkulacje Inżynierskie</span>
                <h3>Wyznaczenie wstępnej długości</h3>
                <p>Przechodzimy do matematycznego wyznaczenia wartości <strong>L<sub>wst</sub></strong>. Wzór uwzględnia obliczone w poprzednim kroku zagęszczenie oraz dystans dzielący pomieszczenie od rozdzielacza (tzw. przyłącza lub tranzyty).</p>
                
                <div class="algo-formula-box">
                    L<sub>wst</sub> = (Powierzchnia [m²] × 6,7) + przyłącza do rozdzielacza [m]
                </div>
            </div>

            <div class="algo-panel" id="step-4">
                <span class="algo-panel-tag">Kontrola Bezpieczeństwa</span>
                <h3>Weryfikacja hydrauliczna</h3>
                <p>To moment absolutnie krytyczny dla wydajności systemu. Posiadając obliczoną wartość L<sub>wst</sub>, musimy odnieść ją do limitów wytrzymałości hydraulicznej.</p>
                
                <h4>Krytyczny warunek podziału:</h4>
                <div class="algo-panel-alert">
                    <span>⚖️</span>
                    <div>Sprawdzamy, czy <strong>L<sub>wst</sub> ≤ 100 m</strong> dla zastosowanej rury PEX 16 mm. Jeżeli obliczenia wykazują, że wstępna długość przekracza 100 m (np. wynosi 130 m), natychmiast <strong>dzielimy powierzchnię pomieszczenia na dwie równe pętle</strong>.</div>
                </div>
            </div>

            <div class="algo-panel" id="step-5">
                <span class="algo-panel-tag">Regulacja Systemu</span>
                <h3>Dobór nastaw (Rotametry)</h3>
                <p>Gdy obwody są prawidłowo zwymiarowane, ostatnim krokiem wykonawczym jest wyliczenie nastaw wstępnych, wyrażanych najczęściej w litrach na minutę (l/min). Parametr ten ustawia się bezpośrednio na rotametrach znajdujących się na belce zasilającej <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacza</a>.</p>
                <p>Celem tej procedury jest precyzyjne <strong>zrównoważenie hydrauliczne</strong> całego układu – sprawienie, by pętla o długości 40 m w łazience stawiała sztucznie taki sam opór, jak pętla 90 m w salonie, zapewniając idealny rozkład przepływów.</p>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (Brak H1-H6)
    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('app-algo-stepper');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0284c7;">Zawartość Chroniona</div>
                    <p style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Interaktywny algorytm obliczeniowy stanowi własność intelektualną Projekt-Ogrzewania.pl.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0284c7; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">WRÓĆ NA STRONĘ AUTORA</a>
                </div>
            `;
            return; 
        }
    }

    // Logika Steppera
    const stepBtns = document.querySelectorAll('.algo-step-btn');
    const stepPanels = document.querySelectorAll('.algo-panel');

    stepBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const targetId = this.getAttribute('data-step');

            // Usuń aktywne klasy z przycisków
            stepBtns.forEach(b => b.classList.remove('active'));
            // Dodaj do klikniętego
            this.classList.add('active');

            // Schowaj wszystkie panele
            stepPanels.forEach(panel => {
                panel.classList.remove('active');
            });

            // Pokaż docelowy panel
            const targetPanel = document.getElementById(targetId);
            if (targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --st-primary: #0f172a;
    --st-panel: #ffffff;
    --st-accent: #0284c7;
    --st-accent-light: #e0f2fe;
    --st-text: #334155;
    --st-muted: #94a3b8;
    --st-border: #e2e8f0;
    --st-highlight: #f8fafc;
}

.smart-table-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--st-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--st-border);
    overflow: hidden;
}

.st-content-wrapper {
    padding: 40px 50px 20px 50px;
}

.st-text-section h2 {
    color: var(--st-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.st-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--st-text);
    margin-bottom: 20px;
}

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

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

.st-text-section a:hover {
    color: #1e3a8a;
}

/* ================= INTERAKTYWNE KONTROLKI ================= */
.st-interactive-header {
    background: var(--st-highlight);
    border: 1px solid var(--st-border);
    border-radius: 16px;
    padding: 25px;
    margin: 30px 50px 0 50px;
}

.st-instruction {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--st-muted);
    letter-spacing: 1px;
    margin-bottom: 15px;
    text-align: center;
}

.st-controls-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}

.st-btn {
    background: #ffffff;
    border: 2px solid var(--st-border);
    border-radius: 12px;
    padding: 12px 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--st-text);
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
}

.st-btn span {
    font-size: 11px;
    color: var(--st-muted);
    font-weight: 600;
}

.st-btn:hover {
    border-color: #bae6fd;
    background: #f0f9ff;
    transform: translateY(-2px);
}

.st-btn.active {
    border-color: var(--st-accent);
    background: var(--st-accent-light);
    color: var(--st-accent);
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.15);
}

.st-btn.active span {
    color: var(--st-accent);
}

/* ================= TABELA DANYCH (DESKTOP) ================= */
.st-table-container {
    padding: 0 50px 40px 50px;
}

.st-table-responsive {
    width: 100%;
    border-radius: 12px;
    border: 1px solid var(--st-border);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.st-table {
    width: 100%;
    border-collapse: collapse;
    min-width: 600px;
    background: #ffffff;
}

.st-table th {
    background: #f1f5f9;
    color: var(--st-primary);
    font-weight: 800;
    font-size: 13px;
    text-transform: uppercase;
    padding: 18px 15px;
    text-align: left;
    border-bottom: 2px solid var(--st-border);
    white-space: nowrap;
}

.st-table td {
    padding: 16px 15px;
    font-size: 15px;
    color: var(--st-text);
    border-bottom: 1px solid var(--st-border);
    transition: all 0.3s ease;
}

.st-table tbody tr {
    transition: all 0.3s ease;
}

/* Stany interaktywne tabeli */
.st-table.filtering tbody tr {
    opacity: 0.3;
    background: #ffffff;
}

.st-table.filtering tbody tr.highlighted {
    opacity: 1;
    background: var(--st-accent-light);
    transform: scale(1.01);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.st-table.filtering tbody tr.highlighted td {
    font-weight: 700;
    color: var(--st-primary);
    border-color: transparent;
}

.st-table.filtering tbody tr.highlighted td:first-child {
    border-left: 4px solid var(--st-accent);
}

/* ================= DYNAMICZNA WSKAZÓWKA ================= */
.st-tip-box {
    margin-top: 20px;
    padding: 15px 20px;
    border-radius: 12px;
    background: #fffbeb;
    border-left: 4px solid #f59e0b;
    font-size: 14px;
    color: #92400e;
    display: none;
    animation: stFadeIn 0.4s ease;
}

.st-tip-box.visible {
    display: block;
}

.st-tip-box strong {
    color: #b45309;
}

@keyframes stFadeIn {
    from { opacity: 0; transform: translateY(5px); }
    to { opacity: 1; transform: translateY(0); }
}

/* ================= WERSJA MOBILNA (UKŁAD KART) ================= */
@media (max-width: 768px) {
    .st-content-wrapper { padding: 30px 25px 15px 25px; }
    .st-interactive-header { margin: 20px 25px 0 25px; padding: 20px; }
    .st-controls-grid { grid-template-columns: 1fr 1fr; }
    .st-table-container { padding: 0 25px 30px 25px; margin-top: 15px; }
    
    .st-table-responsive {
        border: none;
        box-shadow: none;
        background: transparent;
    }
    
    .st-table {
        min-width: 100%;
        display: block;
    }
    
    .st-table thead {
        display: none;
    }
    
    .st-table tbody {
        display: block;
    }
    
    .st-table tbody tr {
        display: block;
        background: #ffffff;
        border: 1px solid var(--st-border);
        border-radius: 12px;
        margin-bottom: 15px;
        box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
        padding: 5px 0;
    }
    
    .st-table td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 12px 15px;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        text-align: right;
    }
    
    .st-table td:last-child {
        border-bottom: none;
    }
    
    .st-table td::before {
        content: attr(data-label);
        font-weight: 800;
        font-size: 12px;
        color: var(--st-muted);
        text-transform: uppercase;
        text-align: left;
        margin-right: 15px;
        flex-shrink: 0;
        max-width: 50%;
    }

    .st-table.filtering tbody tr.highlighted {
        border: 2px solid var(--st-accent);
        transform: scale(1.02);
    }
    .st-table.filtering tbody tr.highlighted td:first-child {
        border-left: none; 
    }
}
</style>

<div class="smart-table-module" id="app-routing-patterns">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Analizator Schematów Układania Ogrzewania Podłogowego",
        "description": "Narzędzie inżynierskie pozwalające na analizę wpływu wzoru układania rur (ślimak, meander) na opory miejscowe hydrauliczne i wynikającą z nich maksymalną długość pętli.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#schematy-ukladania",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Filtrowanie schematów układania: Spirala, Meander, Podwójny Meander, Mieszany",
          "Wizualizacja skutków oporów miejscowych (zagięć 180° i 90°) na przepływ wody",
          "Szacowanie spadku maksymalnej dopuszczalnej długości obwodu grzewczego"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Wpływ Schematów Układania na Maksymalną Długość Pętli Grzewczej",
        "description": "Tabela inżynierska korelująca typ układu rur płaszczyznowych z ich wpływem na generowane opory miejscowe oraz rozkład temperatury posadzki.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Wzór: Spirala (Ślimak)",
            "value": "Opory Niskie | Wpływ na limit: 100% wykorzystania zakłożonej maksymalnej długości"
          },
          {
            "@type": "PropertyValue",
            "name": "Wzór: Meander",
            "value": "Opory Wysokie (łuki 180°) | Wpływ na limit: Redukcja długości pętli o 15-20%"
          },
          {
            "@type": "PropertyValue",
            "name": "Wzór: Podwójny Meander",
            "value": "Opory Średnie | Wpływ na limit: Redukcja długości pętli o ok. 10%"
          }
        ],
        "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="st-content-wrapper">
        <div class="st-text-section">
            <h2>Schemat układania rur a maksymalna długość pętli</h2>
            <p>Zastanawiasz się, dlaczego w jednym pomieszczeniu <strong>maksymalna długość pętli ogrzewania podłogowego</strong> może bezpiecznie wynosić równe 100 metrów, a w innym instalator narzuca limit zaledwie 80 metrów, mimo zastosowania tej samej rury 16x2.0 mm? Kluczem do rozwiązania tej zagadki inżynieryjnej są tzw. opory miejscowe, które generuje <a href="https://projekt-ogrzewania.pl/jak-ukladac-rury-w-ogrzewaniu-slimak-meander-czy-podwojny-meander/">wybrany schemat układania rur</a>.</p>
            
            <h3>Wpływ zagięć na hydraulikę instalacji.</h3>
            <p>Każde ostre zagięcie przewodu o 180 stopni drastycznie dławi przepływ wody. Poniżej przygotowałem interaktywne zestawienie, które pokazuje, jak zastosowanie klasycznego meandra czy optymalnego ślimaka wpływa na ostateczne możliwości tłoczenia pompy obiegowej.</p>
        </div>
    </div>

    <div class="st-interactive-header">
        <div class="st-instruction">👉 Wybierz schemat, by sprawdzić jego wpływ na pętlę</div>
        <div class="st-controls-grid">
            <button class="st-btn" data-target="pat-spiral">Spirala <span>Ślimak</span></button>
            <button class="st-btn" data-target="pat-meander">Meander <span>Klasyczny</span></button>
            <button class="st-btn" data-target="pat-double">Podw. Meander <span>Mieszany</span></button>
            <button class="st-btn" data-target="pat-strefa">Strefa <span>Brzegowa</span></button>
        </div>
    </div>

    <div class="st-table-container">
        <div class="st-table-responsive">
            <table class="st-table" id="interactive-routing-table">
                <thead>
                    <tr>
                        <th>Schemat układania</th>
                        <th>Opory miejscowe rury</th>
                        <th>Rozkład temperatury posadzki</th>
                        <th>Skutek dla maks. długości pętli</th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-row="pat-spiral">
                        <td data-label="Schemat"><h4>Spirala (Ślimak)</h4></td>
                        <td data-label="Opory rury">Niskie (łuki łagodne 90°)</td>
                        <td data-label="Rozkład temp.">Bardzo równomierny</td>
                        <td data-label="Skutek dla długości">Pozwala wykorzystać <strong>100%</strong> limitu</td>
                    </tr>
                    <tr data-row="pat-meander">
                        <td data-label="Schemat"><h4>Meander</h4></td>
                        <td data-label="Opory rury">Wysokie (ostre łuki 180°)</td>
                        <td data-label="Rozkład temp.">Wyraźnie chłodniej na końcu</td>
                        <td data-label="Skutek dla długości">Wymaga skrócenia pętli o <strong>15–20%</strong></td>
                    </tr>
                    <tr data-row="pat-double">
                        <td data-label="Schemat"><h4>Podwójny Meander</h4></td>
                        <td data-label="Opory rury">Średnie (kompromis)</td>
                        <td data-label="Rozkład temp.">Zrównoważony</td>
                        <td data-label="Skutek dla długości">Wymaga skrócenia pętli o <strong>ok. 10%</strong></td>
                    </tr>
                    <tr data-row="pat-strefa">
                        <td data-label="Schemat"><h4>Układ Mieszany</h4></td>
                        <td data-label="Opory rury">Zmienne (zależne od strefy)</td>
                        <td data-label="Rozkład temp.">Ukierunkowany (np. na okna)</td>
                        <td data-label="Skutek dla długości">Ryzyko oporów – max. zalecane <strong>85m</strong></td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="st-tip-box" id="st-routing-tip">
            </div>
    </div>

</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('app-routing-patterns');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0284c7;">Ochrona Treści Interaktywnych</div>
                    <p style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Tabela analityczna jest autorskim narzędziem Projekt-Ogrzewania.pl i została skopiowana niezgodnie z prawem.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0284c7; color: white; text-decoration: none; border-radius: 12px; font-weight: bold; font-size: 13px;">PRZEJDŹ DO ORYGINAŁU</a>
                </div>
            `;
            return; 
        }
    }

    const tips = {
        'pat-spiral': '<strong>Wskazówka Projektowa:</strong> <a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-w-ukladzie-slimakowym/">Układ ślimakowy</a> to absolutny standard. Zasilanie i powrót idą obok siebie, uśredniając temperaturę posadzki i minimalizując opory przepływu.',
        'pat-meander': '<strong>Wskazówka Projektowa:</strong> Ze względu na ogromne spadki ciśnienia na zakrętach 180°, przy <a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-w-ukladzie-meandrowym/">układzie meandrowym</a> dla rury 16mm bezpieczniej nie przekraczać długości 80 metrów na jednej pętli.',
        'pat-double': '<strong>Wskazówka Projektowa:</strong> Świetna alternatywa dla długich i wąskich korytarzy, gdzie klasyczny ślimak jest trudny do wywinięcia, ale zależy nam na zbalansowaniu temperatury.',
        'pat-strefa': '<strong>Wskazówka Projektowa:</strong> Gdy zagęszczamy meander (np. co 10 cm) pod dużymi oknami HS, pętla drastycznie "nabiera" oporów. W <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefach brzegowych</a> zawsze celuj w krótsze obwody.'
    };

    const buttons = document.querySelectorAll('.st-btn');
    const table = document.getElementById('interactive-routing-table');
    const rows = table.querySelectorAll('tbody tr');
    const tipBox = document.getElementById('st-routing-tip');

    buttons.forEach(button => {
        button.addEventListener('click', function() {
            const target = this.getAttribute('data-target');
            buttons.forEach(btn => btn.classList.remove('active'));
            this.classList.add('active');
            table.classList.add('filtering');
            rows.forEach(row => {
                if (row.getAttribute('data-row') === target) {
                    row.classList.add('highlighted');
                } else {
                    row.classList.remove('highlighted');
                }
            });
            if (tips[target]) {
                tipBox.innerHTML = tips[target];
                tipBox.classList.add('visible');
            }
        });
    });
});
</script>



<style>
:root {
    --primary-hvac: #0f172a;
    --accent-hvac: #2563eb;
    --bg-tip: #f1f5f9;
}

.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: '📐';
    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;
}

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

.expert-tip-text {
    font-size: 16px;
    line-height: 1.6;
    color: var(--primary-hvac);
    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": "Często spotykam się z prośbami inwestorów o ułożenie pętli o długości 140 czy 150 metrów, by zaoszczędzić na wielkości rozdzielacza. To absolutnie najdroższa z możliwych oszczędności. Maksymalna długość pętli ogrzewania podłogowego to nie luźna sugestia, a twarda granica fizyki. Przekroczenie 100 metrów dla rury 16 mm sprawi, że zapłacisz o wiele więcej za prąd do pompy obiegowej, zmusisz pompę ciepła do pracy na wyższym zasilaniu, a Twoja podłoga w salonie i tak pozostanie niedogrzana. Zawsze taniej jest dołożyć jedną sekcję rozdzielacza więcej na etapie budowy, niż walczyć z zimnymi strefami przez kilkadziesiąt lat.",
    "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": "Wytyczne inżynierskie: Optymalizacja długości pętli grzewczej",
    "description": "Zestawienie inżynierskich zasad bezwzględnego unikania przekraczania maksymalnych długości obiegów dla systemów płaszczyznowych i wynikających z tego strat na wydajności źródeł ciepła.",
    "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">⚖️</span>Złota zasada eksperta</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">
            <h3 class="expert-tip-label">Wskazówka od Projektanta</h3>
            <p class="expert-tip-text">
                "Często spotykam się z prośbami inwestorów o ułożenie pętli o długości 140 czy 150 metrów, by zaoszczędzić na wielkości rozdzielacza. To absolutnie najdroższa z możliwych oszczędności. <strong>Maksymalna długość pętli ogrzewania podłogowego</strong> to nie luźna sugestia, a twarda granica fizyki. Przekroczenie 100 metrów dla rury 16 mm sprawi, że zapłacisz o wiele więcej za prąd do pompy obiegowej, zmusisz <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompę ciepła</a> do pracy na wyższym parametrze, a posadzka w salonie i tak pozostanie niedogrzana. Zawsze taniej jest dołożyć jedną sekcję <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacza</a> więcej, niż walczyć z zimnymi strefami przez kilkadziesiąt lat eksploatacji."
            </p>
            <span class="expert-tip-signature">— Robert Kucharski, CEO & Główny Projektant Projekt-Ogrzewania.pl</span>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f1f5f9; 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;">Oszczędzanie na ilości sekcji w rozdzielaczu poprzez sztuczne wydłużanie pętli grzewczych powyżej 100 metrów to błąd projektowy. Zawsze skutkuje on niedogrzaniem pomieszczeń i drastycznym wzrostem kosztów eksploatacyjnych systemu grzewczego.</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;">🔒</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 {
    --cs-primary: #0f172a;
    --cs-accent: #2563eb;
    --cs-danger: #dc2626;
    --cs-success: #16a34a;
    --cs-bg: #f8fafc;
    --cs-border: #e2e8f0;
    --cs-text: #475569;
}

.case-study-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--cs-border);
    overflow: hidden;
}

/* ================= HEADER I METRYCZKA ================= */
.cs-header-wrapper {
    background: var(--cs-primary);
    color: #ffffff;
    padding: 40px 50px;
    position: relative;
    overflow: hidden;
}

.cs-header-wrapper::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37, 99, 235, 0.3) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
}

.cs-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.2);
    color: #93c5fd;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.cs-header-wrapper h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 25px 0;
    line-height: 1.3;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.cs-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.cs-stat-box {
    background: rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

.cs-stat-label {
    display: block;
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
}

.cs-stat-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= OPIS WYZWANIA ================= */
.cs-content-section {
    padding: 40px 50px 30px 50px;
    background: #ffffff;
}

/* Nowe style dla H3 i H4 w sekcji treści */
.cs-content-section h3 {
    font-size: 22px;
    font-weight: 900;
    color: var(--cs-primary);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.cs-content-section h4 {
    font-size: 18px;
    font-weight: 800;
    color: var(--cs-primary);
    margin: 25px 0 10px 0;
    line-height: 1.4;
}

.cs-lead-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--cs-text);
    margin: 0 0 20px 0;
}

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

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

.cs-lead-text a:hover {
    color: #1e3a8a;
}

.cs-author-box {
    background: #f0f9ff;
    border-left: 4px solid var(--cs-accent);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 10px;
}

.cs-author-photo {
    width: 52px;
    height: 52px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid #ffffff;
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
    flex-shrink: 0;
}

.cs-author-box p {
    margin: 0;
    font-size: 14px;
    color: #1e3a8a;
    line-height: 1.6;
}

.cs-author-box a {
    color: var(--cs-accent);
    font-weight: 800;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
}

/* ================= INTERAKTYWNE WYZWANIE (SPLIT CARDS) ================= */
.cs-interactive-section {
    padding: 0 50px 40px 50px;
}

.cs-split-container {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.cs-split-card {
    border-radius: 16px;
    padding: 25px;
    border: 2px solid var(--cs-border);
    cursor: pointer;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    overflow: hidden;
    background: #ffffff;
}

.cs-split-card:not(.active) {
    opacity: 0.7;
    transform: scale(0.98);
}

.cs-split-card.danger.active {
    border-color: var(--cs-danger);
    background: #fef2f2;
    box-shadow: 0 10px 25px rgba(220, 38, 38, 0.1);
    opacity: 1;
    transform: scale(1);
}

.cs-split-card.success.active {
    border-color: var(--cs-success);
    background: #f0fdf4;
    box-shadow: 0 10px 25px rgba(22, 163, 74, 0.1);
    opacity: 1;
    transform: scale(1);
}

.cs-card-header {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 15px;
}

.cs-card-icon {
    font-size: 28px;
}

.cs-card-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--cs-primary);
    margin: 0;
}

.cs-card-desc {
    font-size: 14px;
    line-height: 1.6;
    color: var(--cs-text);
    margin: 0;
}

.cs-card-solution {
    margin-top: 15px;
    padding-top: 15px;
    border-top: 1px dashed rgba(0,0,0,0.1);
    font-size: 13px;
    font-weight: 700;
    display: none;
}

.cs-split-card.danger .cs-card-solution { color: #991b1b; }
.cs-split-card.success .cs-card-solution { color: #166534; }

.cs-split-card.active .cs-card-solution {
    display: block;
    animation: csFadeIn 0.4s ease forwards;
}

@keyframes csFadeIn {
    from { opacity: 0; transform: translateY(5px); }
    to { opacity: 1; transform: translateY(0); }
}

@media (max-width: 768px) {
    .cs-header-wrapper { padding: 35px 25px; }
    .cs-stats-grid { grid-template-columns: 1fr 1fr; }
    .cs-content-section { padding: 30px 25px 20px 25px; }
    .cs-interactive-section { padding: 0 25px 30px 25px; }
    .cs-split-container { grid-template-columns: 1fr; }
}
</style>

<div class="case-study-module" id="app-case-study">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Panel Studium Przypadku: Optymalizacja Długości Pętli",
        "description": "Interaktywny moduł prezentujący proces decyzyjny i wyzwania inżynierskie przy projektowaniu długości obwodów grzewczych w salonie z antresolą (wysokie straty cieplne).",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Analiza skutków przekroczenia maksymalnej długości pętli rury PEX 16mm",
          "Symulacja wzrostu oporów hydraulicznych w dużym salonie",
          "Wizualizacja dylematu podziału obiegów grzewczych na mniejsze sekcje"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Parametry Projektowe i Opory Hydrauliczne - Dom Brzeziny 2025",
        "description": "Zestawienie parametrów wejściowych budynku wykorzystanych do optymalizacji zasilania i uniknięcia przekroczenia krytycznych wartości oporów dla pomp obiegowych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Data projektu",
            "value": "Marzec 2025"
          },
          {
            "@type": "PropertyValue",
            "name": "Powierzchnia budynku",
            "value": "140 m²"
          },
          {
            "@type": "PropertyValue",
            "name": "Maksymalny limit długości (PEX 16mm)",
            "value": "100 mb"
          },
          {
            "@type": "PropertyValue",
            "name": "Lokalizacja",
            "value": "Brzeziny (k. Warszawy)"
          }
        ],
        "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="cs-header-wrapper">
        <div class="cs-badge">Case Study z Budowy</div>
        <h2>Problem długiej pętli w salonie z antresolą</h2>
        <div class="cs-stats-grid">
            <div class="cs-stat-box">
                <span class="cs-stat-label">Termin</span>
                <span class="cs-stat-value">Marzec 2025</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Lokalizacja</span>
                <span class="cs-stat-value">Brzeziny</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Powierzchnia</span>
                <span class="cs-stat-value">140 m²</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">System</span>
                <span class="cs-stat-value">PEX 16x2.0</span>
            </div>
        </div>
    </div>

    <div class="cs-content-section">
        <h3>Wyzwanie projektowe: Duże przeszklenia i otwarta strefa</h3>
        <p class="cs-lead-text">W marcu 2025 roku, podczas realizacji projektu instalacji w nowoczesnym domu jednorodzinnym o powierzchni 140 m² w miejscowości Brzeziny pod Warszawą dla inwestora pana Krzysztofa, kluczowym wyzwaniem okazało się zaprojektowanie otwartej strefy salonu z antresolą tak, aby nie przekroczyć parametrów krytycznych układu. Duża powierzchnia przeszkleń oraz wysoki sufit sprawiły, że zapotrzebowanie na moc cieplną w tym pomieszczeniu było ekstremalnie wysokie, co precyzyjnie wykazało <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne (OZC)</a>. </p>
        
        <h4>Oczekiwania inwestora a prawa fizyki</h4>
        <p class="cs-lead-text">Inwestor, szukając oszczędności na ilości rozdzielaczy, zapytał wprost: <em>ile metrów rury podłogówki możemy ułożyć w jednym kawałku, żeby pokryć cały salon?</em> Odpowiedź inżynierska musiała być stanowcza. Bezwzględna <strong>maksymalna długość pętli ogrzewania podłogowego</strong> dla zastosowanej rury o średnicy 16 mm wynosiła w tym układzie 100 metrów bieżących. Zlekceważenie tej zasady doprowadziłoby do skrajnie wysokich oporów hydraulicznych, z którymi nie poradziłaby sobie nawet najmocniejsza <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">pompa obiegowa</a>, skutkując wychłodzonymi sektorami przy oknach tarasowych.</p>
        
        <div class="cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="cs-author-photo" loading="lazy">
            <p>Obliczenia hydrauliczne w tym konkretnym obiekcie wykonał Robert Kucharski. Przed inwestorem postawiono dwie wizje rozwiązania problemu dużego metrażu:</p>
        </div>
    </div>

    <div class="cs-interactive-section">
        <div class="cs-split-container">
            
            <div class="cs-split-card danger active" id="cs-btn-long">
                <div class="cs-card-header">
                    <span class="cs-card-icon">⚠️</span>
                    <h3 class="cs-card-title">Ryzyko: Pętla > 130 mb</h3>
                </div>
                <p class="cs-card-desc">Próba pokrycia całego salonu jednym, długim ślimakiem rury 16 mm. Woda na początku pętli jest gorąca, ale nim dotrze na koniec obiegu, oddaje całą energię.</p>
                <div class="cs-card-solution">
                    Efekt krytyczny: Opór hydrauliczny rzędu 35 kPa całkowicie dławi przepływ (rotametr pokazuje zaledwie 0,5 l/min). Końcówka salonu pozostaje zimna, a pompa pracuje na maksymalnym przeciążeniu.
                </div>
            </div>

            <div class="cs-split-card success" id="cs-btn-short">
                <div class="cs-card-header">
                    <span class="cs-card-icon">✅</span>
                    <h3 class="cs-card-title">Optymalizacja: 3 x 85 mb</h3>
                </div>
                <p class="cs-card-desc">Podział dużej powierzchni salonu z antresolą na trzy mniejsze, niezależne strefy grzewcze podpięte pod dedykowany rozdzielacz, z zachowaniem reżimu poniżej 100 mb.</p>
                <div class="cs-card-solution">
                    Rozwiązanie wdrożone: Przepływy bez problemu ustawione na 2,2 l/min. Równomierny rozkład temperatury na całej powierzchni podłogi, bez obciążania pompy ciepła i obiegowej.
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie domenowe (bez tagów nagłówkowych, zgodnie z wcześniejszymi wytycznymi dla modułów bezpieczeństwa)
    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('app-case-study');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px;">Treść chroniona prawem autorskim</div>
                    <p style="font-size: 14px; margin-bottom: 15px;">Ten panel to autorska własność Projekt-Ogrzewania.pl.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #dc2626; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
            return;
        }
    }

    // Logika przełączania kart Case Study
    const cardLong = document.getElementById('cs-btn-long');
    const cardShort = document.getElementById('cs-btn-short');

    function toggleCards(activeCard, inactiveCard) {
        activeCard.classList.add('active');
        inactiveCard.classList.remove('active');
    }

    if (cardLong && cardShort) {
        cardLong.addEventListener('click', () => toggleCards(cardLong, cardShort));
        cardShort.addEventListener('click', () => toggleCards(cardShort, cardLong));
    }
});
</script>



<style>
:root {
    --bal-primary: #0f172a;
    --bal-panel: #ffffff;
    --bal-accent: #0ea5e9;
    --bal-accent-light: #e0f2fe;
    --bal-text: #334155;
    --bal-muted: #94a3b8;
    --bal-border: #e2e8f0;
    --bal-danger: #ef4444;
    --bal-success: #10b981;
    --bal-water: #38bdf8;
    --bal-water-dark: #0284c7;
}

.bal-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--bal-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--bal-border);
    overflow: hidden;
}

.bal-text-section {
    padding: 40px 50px 20px 50px;
}

/* Zmiana na H2 dla nagłówka głównego modułu */
.bal-text-section h2 {
    color: var(--bal-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.bal-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--bal-text);
    margin-bottom: 20px;
}

.bal-text-section a {
    color: var(--bal-accent-dark, #0284c7);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: 0.2s;
}

.bal-text-section a:hover {
    color: #0c4a6e;
}

/* ================= SYMULATOR ================= */
.bal-simulator {
    background: #f8fafc;
    border-top: 1px solid var(--bal-border);
    padding: 40px 50px;
}

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

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

.bal-slider-group {
    background: #ffffff;
    border: 1px solid var(--bal-border);
    padding: 20px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

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

.bal-label {
    font-size: 14px;
    font-weight: 800;
    color: var(--bal-primary);
    display: flex;
    align-items: center;
    gap: 8px;
}

.bal-badge {
    background: var(--bal-accent-light);
    color: var(--bal-water-dark);
    padding: 4px 12px;
    border-radius: 8px;
    font-weight: 900;
    font-size: 15px;
}

input[type=range].bal-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
}
input[type=range].bal-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    height: 24px;
    width: 24px;
    border-radius: 50%;
    background: var(--bal-water-dark);
    cursor: pointer;
    margin-top: -9px;
    border: 3px solid #ffffff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
input[type=range].bal-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 6px;
    cursor: pointer;
    background: #cbd5e1;
    border-radius: 4px;
}

/* WIZUALIZACJA ROTAMETRÓW */
.bal-visualization {
    display: flex;
    justify-content: center;
    gap: 50px;
    background: #ffffff;
    border: 1px solid var(--bal-border);
    padding: 30px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    position: relative;
}

.bal-rotameter-wrapper {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 15px;
}

/* Zmiana na H4 z wyzerowanym marginesem */
h4.bal-rotameter-title {
    font-size: 12px;
    font-weight: 800;
    color: var(--bal-muted);
    text-transform: uppercase;
    margin: 0;
}

.bal-rotameter-glass {
    width: 40px;
    height: 180px;
    background: #f1f5f9;
    border: 2px solid #cbd5e1;
    border-radius: 6px;
    position: relative;
    display: flex;
    align-items: flex-end;
    overflow: hidden;
    box-shadow: inset 0 2px 10px rgba(0,0,0,0.05);
}

.bal-rotameter-scale {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 10px;
    border-right: 1px solid rgba(0,0,0,0.1);
    background: repeating-linear-gradient(
        to bottom,
        transparent,
        transparent 19px,
        rgba(0,0,0,0.2) 19px,
        rgba(0,0,0,0.2) 20px
    );
    z-index: 2;
}

.bal-rotameter-fluid {
    width: 100%;
    background: linear-gradient(to top, var(--bal-water-dark), var(--bal-water));
    transition: height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 1;
}

/* Pływak (czerwony punkt na rotametrze) */
.bal-rotameter-float {
    width: 24px;
    height: 8px;
    background: #ef4444;
    border-radius: 4px;
    position: absolute;
    top: 0;
    left: 50%;
    transform: translate(-50%, -50%);
    box-shadow: 0 2px 4px rgba(0,0,0,0.3);
}

.bal-flow-readout {
    font-size: 18px;
    font-weight: 900;
    color: var(--bal-primary);
    font-family: 'Cambria Math', monospace;
}

/* WSKAŹNIKI I AKCJE */
.bal-status-panel {
    grid-column: 1 / -1;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #fffbeb;
    border: 1px solid #fde68a;
    padding: 20px 30px;
    border-radius: 16px;
    transition: 0.3s;
}

.bal-status-panel.balanced {
    background: #f0fdf4;
    border-color: #bbf7d0;
}

.bal-status-panel.error {
    background: #fef2f2;
    border-color: #fecaca;
}

.bal-status-info {
    max-width: 60%;
}

/* Zmiana na H3 z zerowaniem marginesów dla dopasowania */
h3.bal-status-title {
    font-size: 16px;
    font-weight: 900;
    color: #92400e;
    margin: 0 0 5px 0;
}
.bal-status-panel.balanced h3.bal-status-title { color: #166534; }
.bal-status-panel.error h3.bal-status-title { color: #991b1b; }

.bal-status-desc {
    font-size: 13px;
    color: #b45309;
    line-height: 1.5;
}
.bal-status-panel.balanced .bal-status-desc { color: #15803d; }
.bal-status-panel.error .bal-status-desc { color: #b91c1c; }

.bal-action-btn {
    background: var(--bal-primary);
    color: #ffffff;
    border: none;
    padding: 14px 24px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 14px;
    cursor: pointer;
    transition: 0.3s;
    display: flex;
    align-items: center;
    gap: 8px;
    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.2);
}

.bal-action-btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 15px rgba(15, 23, 42, 0.3);
}

.bal-action-btn:disabled {
    background: #cbd5e1;
    cursor: not-allowed;
    transform: none;
    box-shadow: none;
}

@media (max-width: 768px) {
    .bal-text-section { padding: 30px 25px 10px 25px; }
    .bal-simulator { padding: 30px 25px; }
    .bal-sim-grid { grid-template-columns: 1fr; gap: 30px; }
    .bal-status-panel { flex-direction: column; text-align: center; gap: 20px; }
    .bal-status-info { max-width: 100%; }
    .bal-action-btn { width: 100%; justify-content: center; }
}
</style>

<div class="bal-module-wrapper" id="app-hydraulic-balancing">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Symulator Równoważenia Hydraulicznego Pętli Ogrzewania",
        "description": "Interaktywne narzędzie ilustrujące zjawisko oporów hydraulicznych. Symuluje ucieczkę przepływu medium (wody grzewczej) do krótszych pętli i uczy konieczności stosowania rotametrów na rozdzielaczach.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#rownowazenie",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Wizualizacja zachowania wody jako medium szukającego najmniejszego oporu",
          "Dynamiczna zmiana długości dwóch sąsiadujących pętli (od 30m do 120m)",
          "Symulacja dławienia rotametrami w celu wymuszenia równego przepływu"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zasady równoważenia instalacji - Reguła Kucharskiego",
        "description": "Zestawienie parametrów projektowych chroniących układ przed rozregulowaniem termicznym posadzki.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Maksymalna różnica długości pętli",
            "value": "15%",
            "description": "Graniczna rozbieżność długości obwodów na jednym rozdzielaczu, powyżej której system wymaga mocnego dławienia (kryzowania)."
          },
          {
            "@type": "PropertyValue",
            "name": "Fizyka przepływu",
            "value": "Odwrotnie proporcjonalna do oporu",
            "description": "Woda zawsze wybierze pętlę o mniejszej długości, pozostawiając dłuższe obwody niedogrzanymi."
          }
        ],
        "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="bal-text-section">
        <h2>Równoważenie hydrauliczne – serce wydajności</h2>
        <p>Nawet jeśli zaprojektowane pętle w Twoim domu nie przekraczają magicznej granicy 100 m, ale jedna ma 30 m (np. w małej łazience), a druga 90 m (w salonie), instalacja nie będzie działać poprawnie bez rygorystycznej regulacji. Woda, jako medium z natury "leniwe", <strong>popłynie tam, gdzie stawia najmniejszy opór</strong> – zaleje krótką pętlę, a długa pozostanie niemal bez przepływu.</p>
        <p>W moich projektach absolutnie wymuszam stosowanie wysokiej jakości <a href="https://projekt-ogrzewania.pl/produkt/rozdzielacz-ze-stali-nierdzewnej-inox-do-ogrzewania-podlogowego-z-rotametrami/">rozdzielaczy ze stali nierdzewnej</a> wyposażonych w zintegrowane układy pomiarowe. Złota <strong>Zasada Roberta Kucharskiego</strong> mówi jasno: Różnica w długości pętli na jednym rozdzielaczu nie powinna przekraczać 15%. Jeśli rozbieżności są większe, stosujemy bezwzględne kryzowanie na zaworach powrotnych lub dławienie <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">przepływomierzami (rotametrami)</a>, zwiększając sztucznie opór krótkich pętli, aby zmusić wodę do wejścia w strefy o większych stratach.</p>
    </div>

    <div class="bal-simulator">
        <div class="bal-sim-grid">
            
            <div class="bal-controls">
                <div class="bal-slider-group">
                    <div class="bal-label-row">
                        <span class="bal-label"><span style="font-size:20px">📏</span> Pętla 1 (Łazienka)</span>
                        <span class="bal-badge"><span id="bal-len1-val">30</span> m</span>
                    </div>
                    <input type="range" id="bal-len1" class="bal-slider" min="30" max="120" step="5" value="30">
                </div>

                <div class="bal-slider-group">
                    <div class="bal-label-row">
                        <span class="bal-label"><span style="font-size:20px">📏</span> Pętla 2 (Salon)</span>
                        <span class="bal-badge"><span id="bal-len2-val">90</span> m</span>
                    </div>
                    <input type="range" id="bal-len2" class="bal-slider" min="30" max="120" step="5" value="90">
                </div>
            </div>

            <div class="bal-visualization">
                <div class="bal-rotameter-wrapper">
                    <h4 class="bal-rotameter-title">Rotametr 1</h4>
                    <div class="bal-rotameter-glass">
                        <div class="bal-rotameter-scale"></div>
                        <div class="bal-rotameter-fluid" id="bal-fluid1" style="height: 80%;">
                            <div class="bal-rotameter-float"></div>
                        </div>
                    </div>
                    <span class="bal-flow-readout" id="bal-flow1-val">3.0 l/min</span>
                </div>

                <div class="bal-rotameter-wrapper">
                    <h4 class="bal-rotameter-title">Rotametr 2</h4>
                    <div class="bal-rotameter-glass">
                        <div class="bal-rotameter-scale"></div>
                        <div class="bal-rotameter-fluid" id="bal-fluid2" style="height: 20%;">
                            <div class="bal-rotameter-float"></div>
                        </div>
                    </div>
                    <span class="bal-flow-readout" id="bal-flow2-val">1.0 l/min</span>
                </div>
            </div>

            <div class="bal-status-panel error" id="bal-status-box">
                <div class="bal-status-info">
                    <h3 class="bal-status-title" id="bal-status-title">⚠️ Woda płynie na skróty!</h3>
                    <div class="bal-status-desc" id="bal-status-desc">
                        Różnica długości wynosi ponad 15%. Całe ciśnienie ucieka w krótszą pętlę (30m). Długa pętla (90m) jest głodzona cieplnie. Podłoga w salonie będzie zimna.
                    </div>
                </div>
                <button class="bal-action-btn" id="bal-fix-btn">
                    <span>🔧</span> Zdław krótszą pętlę
                </button>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez tagów H2/H3)
    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('app-hydraulic-balancing');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Narzędzie Chronione</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Symulator Równoważenia Hydraulicznego jest własnością intelektualną serwisu Projekt-Ogrzewania.pl.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
            return; 
        }
    }

    // Elementy UI
    const len1Input = document.getElementById('bal-len1');
    const len2Input = document.getElementById('bal-len2');
    const len1Val = document.getElementById('bal-len1-val');
    const len2Val = document.getElementById('bal-len2-val');
    
    const fluid1 = document.getElementById('bal-fluid1');
    const fluid2 = document.getElementById('bal-fluid2');
    const flow1Val = document.getElementById('bal-flow1-val');
    const flow2Val = document.getElementById('bal-flow2-val');
    
    const statusBox = document.getElementById('bal-status-box');
    const statusTitle = document.getElementById('bal-status-title');
    const statusDesc = document.getElementById('bal-status-desc');
    const fixBtn = document.getElementById('bal-fix-btn');

    // Zmienne symulacji
    const TOTAL_PUMP_FLOW = 4.0; // Maksymalna wydajność pompy l/min dla tych 2 pętli
    let isForcedBalance = false;

    function updatePhysics() {
        const L1 = parseFloat(len1Input.value);
        const L2 = parseFloat(len2Input.value);
        
        len1Val.textContent = L1;
        len2Val.textContent = L2;

        // Obliczanie różnicy procentowej (względem najdłuższej pętli)
        const maxL = Math.max(L1, L2);
        const minL = Math.min(L1, L2);
        const diffPercent = ((maxL - minL) / maxL) * 100;

        let flow1, flow2;

        if (isForcedBalance) {
            // Rotametry zdławione - przepływ po równo lub proporcjonalnie do potrzeb
            flow1 = TOTAL_PUMP_FLOW / 2;
            flow2 = TOTAL_PUMP_FLOW / 2;
            
            statusBox.className = 'bal-status-panel balanced';
            statusTitle.innerHTML = '✅ Układ zrównoważony!';
            statusDesc.innerHTML = 'Rotametr na krótszej pętli został zdławiony sztucznym oporem. Woda została zmuszona do wejścia w długą pętlę. Oba obwody grzeją równomiernie.';
            fixBtn.innerHTML = '<span>🔓</span> Resetuj dławienie';
        } else {
            // Fizyka "leniwej wody" - przepływ odwrotnie proporcjonalny do oporu (długości)
            // flow1 = TOTAL * (L2 / (L1 + L2)) - im większe L1, tym mniejsze L2 w liczniku
            flow1 = TOTAL_PUMP_FLOW * (L2 / (L1 + L2));
            flow2 = TOTAL_PUMP_FLOW * (L1 / (L1 + L2));

            if (diffPercent <= 15) {
                // Różnica w normie - układ naturalnie zbalansowany
                statusBox.className = 'bal-status-panel balanced';
                statusTitle.innerHTML = '✅ Zgodnie z zasadą inżynierską';
                statusDesc.innerHTML = `Różnica długości wynosi ok. ${Math.round(diffPercent)}%. Układ jest na tyle zbalansowany, że woda naturalnie rozkłada się równomiernie.`;
                fixBtn.disabled = true;
                fixBtn.innerHTML = '<span>✨</span> Idealnie';
            } else {
                // Dysproporcja
                statusBox.className = 'bal-status-panel error';
                const shortLoop = L1 < L2 ? L1 : L2;
                const longLoop = L1 > L2 ? L1 : L2;
                statusTitle.innerHTML = '⚠️ Woda płynie na skróty!';
                statusDesc.innerHTML = `Różnica wynosi aż ${Math.round(diffPercent)}% (>15%). Całe ciśnienie ucieka w krótszą pętlę (${shortLoop}m). Długa pętla (${longLoop}m) jest głodzona cieplnie.`;
                fixBtn.disabled = false;
                fixBtn.innerHTML = '<span>🔧</span> Zdław krótszą pętlę';
            }
        }

        // Renderowanie widoku rotametrów
        // Założenie: wys. rotametru to max 4 l/min (100%)
        const height1 = (flow1 / TOTAL_PUMP_FLOW) * 100;
        const height2 = (flow2 / TOTAL_PUMP_FLOW) * 100;

        fluid1.style.height = `${height1}%`;
        fluid2.style.height = `${height2}%`;
        
        flow1Val.textContent = `${flow1.toFixed(1)} l/min`;
        flow2Val.textContent = `${flow2.toFixed(1)} l/min`;
    }

    // Nasłuchiwanie zdarzeń
    len1Input.addEventListener('input', () => { isForcedBalance = false; updatePhysics(); });
    len2Input.addEventListener('input', () => { isForcedBalance = false; updatePhysics(); });

    fixBtn.addEventListener('click', () => {
        isForcedBalance = !isForcedBalance;
        updatePhysics();
    });

    // Inicjalizacja pierwszej klatki
    updatePhysics();
});
</script>



<style>
:root {
    --primary: #0f172a;
    --accent: #2563eb;
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f8fafc;
}

.calc-intro {
    max-width: 1150px;
    margin: 40px auto 10px auto;
    text-align: center;
    padding: 0 20px;
}

h2.calc-intro-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    margin-top: 0;
    margin-bottom: 15px;
}

.calc-intro p {
    font-size: 16px;
    color: #475569;
    line-height: 1.6;
    max-width: 800px;
    margin: 0 auto;
}

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

.calc-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
}

.config-side {
    padding: 40px;
    background: #ffffff;
}

h3.section-title {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1.2px;
    margin-top: 0;
    margin-bottom: 20px;
    display: block;
}

.type-selector {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    margin-bottom: 30px;
}

.type-btn {
    padding: 12px 6px;
    border: 2px solid #cbd5e1;
    border-radius: 12px;
    cursor: pointer;
    text-align: center;
    font-weight: 700;
    font-size: 13px;
    color: #475569;
    background: #fff;
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.type-btn span {
    margin-top: 4px;
    font-size: 10px;
    font-weight: 400;
}

.type-btn.active {
    border-color: var(--accent);
    background: #eff6ff;
    color: var(--accent);
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
}

.input-wrap { margin-bottom: 25px; }
.input-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 8px;
    align-items: center;
}
.input-label-row label { font-weight: 600; font-size: 14px; }
.input-label-row .val-badge {
    background: #f1f5f9;
    padding: 4px 12px;
    border-radius: 8px;
    font-weight: 800;
    color: var(--accent);
    font-size: 14px;
}

input[type=range] {
    width: 100%; height: 6px; background: #e2e8f0; border-radius: 10px; appearance: none; outline: none; margin-top: 10px;
}
input[type=range]::-webkit-slider-thumb {
    appearance: none; width: 22px; height: 22px; background: var(--accent); border-radius: 50%; border: 3px solid white; box-shadow: 0 2px 5px rgba(0,0,0,0.15); cursor: pointer;
}

.result-side {
    padding: 40px;
    background: var(--bg-light);
    border-left: 1px solid #f1f5f9;
}

.main-score-box {
    background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--success); transition: 0.3s;
}
.score-num { font-size: 48px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

#risk-msg {
    margin-top: 15px; padding: 12px; border-radius: 10px; font-size: 13px; font-weight: 600; display: none; background: #fee2e2; color: var(--danger); border: 1px solid #fecaca; line-height: 1.4; text-align: left;
}

.tech-grid {
    background: var(--primary); color: white; padding: 25px; border-radius: 20px; display: grid; gap: 12px;
}
.tech-item {
    display: flex; justify-content: space-between; padding-bottom: 12px; border-bottom: 1px solid #1e293b; align-items: center;
}
.tech-item:last-child { border: none; padding-bottom: 0; }
.tech-item span { color: #94a3b8; font-size: 13px; }
.tech-item strong { font-size: 15px; text-align: right;}

.material-grid {
    display: grid; grid-template-columns: 1fr; gap: 10px; margin-top: 15px;
}
.mini-card { background: rgba(255,255,255,0.08); padding: 15px; border-radius: 12px; text-align: center;}
.mini-card span { font-size: 11px; color: #94a3b8; display: block; margin-bottom: 6px; text-transform: uppercase; font-weight: 600;}
.mini-card strong { font-size: 20px; color: #38bdf8; }

/* STOPKA CTA */
.footer-cta {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #fffbeb;
    border-radius: 20px;
    border-left: 6px solid var(--warning);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 30px;
}

.cta-text-side {
    max-width: 550px;
}

.cta-buttons-stack {
    display: flex;
    flex-direction: column; 
    gap: 12px;
    min-width: 280px; 
}

.cta-btn {
    display: block; background: var(--warning); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 14px; text-align: center; border: none; cursor: pointer;
}
.cta-btn:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(234, 88, 12, 0.2); }

@media (max-width: 900px) {
    .calc-grid { grid-template-columns: 1fr; }
    .type-selector { grid-template-columns: repeat(3, 1fr); }
    .footer-cta { flex-direction: column; text-align: center; gap: 25px; margin: 20px; }
    .cta-buttons-stack { min-width: 100%; width: 100%; }
}
@media (max-width: 500px) {
    .type-selector { grid-template-columns: 1fr; }
}
</style>

<div class="calc-intro">
    <h2 class="calc-intro-title">Kalkulator inżynierski: Graniczna długość pętli</h2>
    <p>Sprawdź, jak wybór średnicy rury oraz odległość pokoju od rozdzielacza wpływają na ostateczny podział obiegów. Narzędzie automatycznie dobiera limity hydrauliczne (np. 100 m dla rury 16 mm vs 130 m dla rury 20 mm) bazując na wytycznych <a href="https://projekt-ogrzewania.pl/" style="color: #2563eb; font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>.</p>
</div>

<div class="screed-calc" id="advanced-pipe-calc">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Zaawansowany Kalkulator Oporów i Długości Pętli (Ogrzewanie Podłogowe)",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#kalkulator",
        "license": "https://projekt-ogrzewania.pl/",
        "description": "Profesjonalny kalkulator inżynierski uwzględniający dystans do rozdzielacza (tranzyty) oraz zróżnicowane limity oporów hydraulicznych w zależności od wybranej średnicy rury (16mm, 17mm, 20mm).",
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Wybór średnicy rury (zmienne wartości graniczne pętli)",
          "Obliczanie oporów tranzytów (dystans od rozdzielacza)",
          "Automatyczny podział na obiegi z podaniem długości pojedynczej pętli"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zmienne hydrauliczne pętli ogrzewania podłogowego",
        "description": "Zestawienie zmiennych wykorzystywanych do obliczania całkowitego zużycia przewodu rurowego oraz ilości sekcji rozdzielacza.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Limit pętli PEX 16x2.0",
            "value": "100",
            "unitCode": "MTR"
          },
          {
            "@type": "PropertyValue",
            "name": "Limit pętli PEX 17x2.0",
            "value": "110",
            "unitCode": "MTR"
          },
          {
            "@type": "PropertyValue",
            "name": "Limit pętli PEX 20x2.0",
            "value": "130",
            "unitCode": "MTR"
          },
          {
            "@type": "PropertyValue",
            "name": "Długość tranzytów",
            "value": "Odległość * 2 (Zasilanie + Powrót)"
          }
        ],
        "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="calc-grid">
        <div class="config-side">
            
            <h3 class="section-title">1. Geometria układu</h3>
            <div class="input-wrap">
                <div class="input-label-row"><label>Powierzchnia pokoju</label><span class="val-badge"><span id="v-area2">20</span> m²</span></div>
                <input type="range" id="area2" min="5" max="60" step="1" value="20">
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Odległość do rozdzielacza</label><span class="val-badge"><span id="v-distance">5</span> m</span></div>
                <input type="range" id="distance" min="0" max="25" step="1" value="5">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Długość korytarza. Kalkulator automatycznie policzy zasilanie i powrót (x2).</div>
            </div>

            <h3 class="section-title">2. Średnica rury (Limit oporów)</h3>
            <div class="type-selector" id="pipe-selector">
                <div class="type-btn active" data-limit="100">16x2.0 <span>Limit: 100 mb</span></div>
                <div class="type-btn" data-limit="110">17x2.0 <span>Limit: 110 mb</span></div>
                <div class="type-btn" data-limit="130">20x2.0 <span>Limit: 130 mb</span></div>
            </div>

            <h3 class="section-title">3. Rozstaw rur</h3>
            <div class="type-selector" id="spacing-selector" style="margin-bottom:0">
                <div class="type-btn" data-spacing="0.10">10 cm <span>Gęsty</span></div>
                <div class="type-btn active" data-spacing="0.15">15 cm <span>Optymalny</span></div>
                <div class="type-btn" data-spacing="0.20">20 cm <span>Rzadki</span></div>
            </div>
        </div>

        <div class="result-side">
            <div id="mainBox2" class="main-score-box">
                <span class="score-label">Faktyczna długość jednej pętli</span>
                <span class="score-num" id="resPerLoop">--</span>
                <span class="score-label">metrów</span>
                <div id="risk-msg2">⚠️ Uwaga!</div>
            </div>

            <div class="tech-grid">
                <div class="tech-item"><span>Sumaryczna ilość rury w pokoju:</span><strong id="resRoomPipe">--</strong></div>
                <div class="tech-item"><span>Rura zużyta na tranzyty (korytarz):</span><strong id="resTransitPipe">--</strong></div>
                <div class="tech-item" style="border-top: 1px dashed #334155; padding-top:12px"><span>Całkowite zapotrzebowanie materiału:</span><strong id="resTotalPipe">--</strong></div>
                
                <div class="material-grid">
                    <div class="mini-card">
                        <span>Liczba obiegów na rozdzielaczu:</span>
                        <strong id="resLoopCount">--</strong>
                    </div>
                </div>
            </div>
            
            <div style="margin-top:20px; font-size:11px; color:#94a3b8; font-weight:700">STRATY MATERIAŁU (TRANZYTY VS POKÓJ):</div>
            <div style="height:12px; display:flex; border-radius:6px; overflow:hidden; margin-top:10px; background:#e2e8f0">
                <div id="bar-room" style="background:var(--accent); width:80%; transition: 0.3s;"></div>
                <div id="bar-transit" style="background:#94a3b8; width:20%; transition: 0.3s;"></div>
            </div>
            <div style="display: flex; justify-content: space-between; font-size: 10px; color: #64748b; margin-top: 5px;">
                <span>Grzeje pokój</span>
                <span>Ucieka w korytarzu</span>
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin-top:0; font-size: 21px; font-weight: 900; margin-bottom: 10px; color:#9a3412">Nie masz pewności co do wyliczeń? Nie ryzykuj!</h3>
            <p style="margin:0; font-size:14px; color:#78350f; line-height: 1.6;">Powyższy symulator to doskonałe narzędzie do wstępnej estymacji. Jednak ogrzewanie całego domu to skomplikowany system hydrauliczny. Błąd na tym etapie oznacza zimne strefy, przeciążenie pompy obiegowej i kucie wylewki. <strong>Zdaj się na fachową wiedzę inżynierską i zyskaj 100% gwarancji działania.</strong></p>
        </div>
        <div class="cta-buttons-stack">
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn">
                ZAMÓW PROFESJONALNY PROJEKT →
            </a>
        </div>
    </div>

    <noscript>
        <div style="padding: 30px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="margin-top:0; font-size: 18px; color: #0f172a; font-weight: bold; margin-bottom: 15px;">Fizyka oporów hydraulicznych</h3>
            <p style="font-size: 13px; color: #475569; line-height: 1.6;">
                <strong>Maksymalna długość pętli ogrzewania podłogowego</strong> zależy od średnicy rury. Dla PEX 16mm to 100m, dla 17mm to 110m, a dla 20mm to 130m. Wzór na całkowitą długość to: (Powierzchnia / Rozstaw) + (Odległość od rozdzielacza * 2). Jeśli suma przekracza limit wybranej rury, obieg bezwzględnie musi zostać podzielony na rozdzielaczu.
            </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('advanced-pipe-calc');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">' +
                '<span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span>' +
                '<div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px; color: #dc2626;">Kalkulator chroniony prawem autorskim</div>' +
                '<div style="font-size: 16px; margin-bottom: 25px;">Narzędzie inżynierskie jest własnością <a href="https://projekt-ogrzewania.pl/" style="color: #dc2626; font-weight: bold; text-decoration: underline;">Projekt-Ogrzewania.pl</a></div>' +
                '<a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 14px 28px; background: #dc2626; color: #ffffff; text-decoration: none; border-radius: 12px; font-weight: 800;">PRZEJDŹ DO ORYGINAŁU</a>' +
                '</div>';
        }
        return; 
    }

    // Zmienne domyślne
    var currentLimit = 100; // rura 16mm
    var currentSpacing = 0.15; // 15cm

    function calculateAdvanced() {
        var areaEl = document.getElementById('area2');
        var distEl = document.getElementById('distance');
        if(!areaEl || !distEl) return;

        var area = parseFloat(areaEl.value);
        var distance = parseFloat(distEl.value);
        
        // UI Suwaków
        document.getElementById('v-area2').innerText = area;
        document.getElementById('v-distance').innerText = distance;

        // OBLICZENIA INŻYNIERSKIE
        var roomPipe = area / currentSpacing;
        var transitPipe = distance * 2; // zasilanie i powrót
        var totalPipe = roomPipe + transitPipe;
        
        // Ilość obiegów (nie dzielimy "na sztywno" przy 100, tylko przy aktualnym limicie rury)
        var loopsRequired = Math.ceil(totalLengthCheck(totalPipe, currentLimit, transitPipe));
        var lengthPerLoop = totalPipe / loopsRequired;

        // UI Wyników
        document.getElementById('resRoomPipe').innerText = Math.round(roomPipe) + ' m';
        document.getElementById('resTransitPipe').innerText = Math.round(transitPipe) + ' m';
        document.getElementById('resTotalPipe').innerText = Math.round(totalPipe) + ' m';
        document.getElementById('resLoopCount').innerText = loopsRequired;
        document.getElementById('resPerLoop').innerText = Math.round(lengthPerLoop);

        // Ostrzeżenia i Kolory (Sprawdzamy długość PO podziale)
        var mBox = document.getElementById('mainBox2');
        var rMsg = document.getElementById('risk-msg2');
        var boxColor = 'var(--success)';
        var msgHtml = '';

        // Ostrzeżenie o długich tranzytach
        if (loopsRequired > 1 && (transitPipe * loopsRequired) > roomPipe) {
            boxColor = 'var(--warning)';
            msgHtml = '⚠️ <strong>Długi tranzyt!</strong> Korytarz zabiera większość rury. Ponieważ musisz podzielić pokój na ' + loopsRequired + ' pętle, korytarzem poprowadzisz ' + (loopsRequired * 2) + ' rury do rozdzielacza. Rozważ montaż dodatkowego rozdzielacza bliżej pokoju.';
        } else if (lengthPerLoop > (currentLimit * 0.9)) {
            // Ostrzeżenie, gdy zbliżamy się do limitu nawet po podziale
            boxColor = 'var(--warning)';
            msgHtml = '⚠️ Pętla jest blisko granicy oporów hydraulicznych (' + currentLimit + 'm) dla tej średnicy rury. Pompa obiegowa będzie pracować pod dużym obciążeniem.';
        }

        if (msgHtml !== '') {
            rMsg.innerHTML = msgHtml;
            rMsg.style.display = 'block';
        } else {
            rMsg.style.display = 'none';
        }
        mBox.style.borderColor = boxColor;

        // Pasek Proporcji
        var barTotal = totalPipe > 0 ? totalPipe : 1;
        var actualTransitTotal = transitPipe * loopsRequired; // jeśli są 2 pętle, tranzytów jest 2x więcej
        var actualTotal = roomPipe + actualTransitTotal;
        
        document.getElementById('bar-room').style.width = ((roomPipe / actualTotal) * 100) + '%';
        document.getElementById('bar-transit').style.width = ((actualTransitTotal / actualTotal) * 100) + '%';
    }

    // Funkcja weryfikująca czy podział jest możliwy (tranzyt nie może być dłuższy niż limit)
    function totalLengthCheck(total, limit, transit) {
        if(total <= limit) return 1;
        // Wymuszony podział. Sprawdzamy czy sam tranzyt nie jest dłuższy niż limit rury
        if(transit >= limit) {
             document.getElementById('risk-msg2').innerHTML = '❌ <strong>Błąd fizyki układu!</strong> Sam dojazd do rozdzielacza (' + transit + 'm) przekracza dopuszczalny limit oporów pętli (' + limit + 'm). Musisz przenieść rozdzielacz lub zmienić rurę na grubszą.';
             document.getElementById('risk-msg2').style.display = 'block';
             document.getElementById('mainBox2').style.borderColor = 'var(--danger)';
             return 99; // Zwraca błąd
        }
        return Math.ceil(total / (limit - transit*0.2)); // Lekki margines na przyłącza
    }

    // Obsługa przycisków ŚREDNICY
    var pipeBtns = document.querySelectorAll('#pipe-selector .type-btn');
    pipeBtns.forEach(function(btn) {
        btn.addEventListener('click', function(e) {
            pipeBtns.forEach(function(b) { b.classList.remove('active'); });
            this.classList.add('active');
            currentLimit = parseInt(this.getAttribute('data-limit'));
            calculateAdvanced();
        });
    });

    // Obsługa przycisków ROZSTAWU
    var spacingBtns = document.querySelectorAll('#spacing-selector .type-btn');
    spacingBtns.forEach(function(btn) {
        btn.addEventListener('click', function(e) {
            spacingBtns.forEach(function(b) { b.classList.remove('active'); });
            this.classList.add('active');
            currentSpacing = parseFloat(this.getAttribute('data-spacing'));
            calculateAdvanced();
        });
    });

    // Nasłuchiwanie suwaków
    var areaInput = document.getElementById('area2');
    var distInput = document.getElementById('distance');
    if(areaInput) areaInput.addEventListener('input', calculateAdvanced);
    if(distInput) distInput.addEventListener('input', calculateAdvanced);

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



<style>
:root {
    --di-primary: #0f172a;
    --di-panel: #ffffff;
    --di-accent: #0284c7;
    --di-accent-light: #e0f2fe;
    --di-text: #334155;
    --di-muted: #94a3b8;
    --di-border: #e2e8f0;
    --di-bg: #f8fafc;
    --di-danger: #ef4444;
    --di-warning: #f59e0b;
}

.di-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--di-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--di-border);
    overflow: hidden;
}

.di-text-section {
    padding: 40px 50px 20px 50px;
}

/* Zmiana na H2 dla głównego nagłówka modułu */
.di-text-section h2 {
    color: var(--di-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 15px;
    line-height: 1.3;
}

.di-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--di-text);
    margin-bottom: 20px;
}

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

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

.di-text-section a:hover {
    color: #1e3a8a;
}

.di-alert-box {
    background: #fef2f2;
    border-left: 4px solid var(--di-danger);
    padding: 15px 20px;
    border-radius: 8px;
    color: #991b1b;
    font-size: 15px;
    font-weight: 600;
    margin-bottom: 30px;
}

/* ================= INTERAKTYWNY WIDŻET ================= */
.di-widget-container {
    margin: 0 50px 40px 50px;
    background: var(--di-bg);
    border: 1px solid var(--di-border);
    border-radius: 16px;
    display: flex;
    overflow: hidden;
}

.di-tabs-column {
    width: 35%;
    background: #ffffff;
    border-right: 1px solid var(--di-border);
    display: flex;
    flex-direction: column;
}

.di-tab-btn {
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--di-border);
    padding: 20px;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s ease;
    display: flex;
    align-items: flex-start;
    gap: 12px;
    color: var(--di-muted);
}

.di-tab-btn:last-child {
    border-bottom: none;
}

.di-tab-icon {
    font-size: 20px;
    filter: grayscale(100%);
    opacity: 0.5;
    transition: 0.3s;
}

.di-tab-text {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.di-tab-title {
    font-size: 14px;
    font-weight: 800;
    color: var(--di-text);
    transition: 0.3s;
}

.di-tab-subtitle {
    font-size: 12px;
    font-weight: 500;
}

.di-tab-btn:hover {
    background: #f1f5f9;
}

.di-tab-btn.active {
    background: var(--di-accent-light);
    border-left: 4px solid var(--di-accent);
    padding-left: 16px; /* Kompensacja border-left */
}

.di-tab-btn.active .di-tab-icon {
    filter: grayscale(0%);
    opacity: 1;
}

.di-tab-btn.active .di-tab-title {
    color: var(--di-accent);
}

.di-tab-btn.active .di-tab-subtitle {
    color: var(--di-primary);
}

/* Panele z Treścią */
.di-content-column {
    width: 65%;
    padding: 30px;
    position: relative;
}

.di-panel {
    display: none;
    animation: diFadeIn 0.4s ease;
}

.di-panel.active {
    display: block;
}

@keyframes diFadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

.di-panel-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 15px;
}

/* Styl dla H3 w panelu */
h3.di-panel-title {
    margin: 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--di-primary);
}

.di-panel-badge {
    background: var(--di-primary);
    color: #ffffff;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    padding: 4px 10px;
    border-radius: 6px;
    letter-spacing: 1px;
}

.di-panel-badge.warning {
    background: var(--di-warning);
    color: #ffffff;
}

.di-panel-content {
    font-size: 15px;
    color: var(--di-text);
    line-height: 1.7;
    margin-bottom: 20px;
}

.di-impact-box {
    background: #ffffff;
    border: 1px dashed var(--di-accent);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    gap: 15px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.02);
}

.di-impact-icon {
    font-size: 28px;
}

/* Zmiana na H4 dla skutków */
.di-impact-text h4 {
    display: block;
    font-size: 15px;
    color: var(--di-primary);
    margin: 0 0 3px 0;
    font-weight: bold;
}

.di-impact-text span {
    font-size: 13px;
    color: var(--di-muted);
}

@media (max-width: 768px) {
    .di-text-section { padding: 30px 25px 10px 25px; }
    .di-widget-container { margin: 20px 25px 30px 25px; flex-direction: column; }
    .di-tabs-column { width: 100%; border-right: none; border-bottom: 1px solid var(--di-border); flex-direction: row; overflow-x: auto; white-space: nowrap; }
    .di-tab-btn { border-bottom: none; border-right: 1px solid var(--di-border); min-width: 220px; }
    .di-tab-btn.active { border-left: none; border-bottom: 4px solid var(--di-accent); padding-left: 20px; padding-bottom: 16px; }
    .di-content-column { width: 100%; padding: 25px; }
}
</style>

<div class="di-module-wrapper" id="app-design-impact">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Analizator Wpływu Błędów na Projekt Ogrzewania Podłogowego",
        "description": "Interaktywny moduł edukacyjny analizujący kluczowe błędy infrastrukturalne (lokalizacja rozdzielacza, średnica pionu, OZC) i ich bezpośredni, destrukcyjny wpływ na maksymalną dostępną długość pętli grzewczej w pomieszczeniach.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#wplyw-na-projekt",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Wizualizacja straty długości roboczej pętli przez długie tranzyty",
          "Analiza spadku ciśnienia spowodowanego zbyt cienką rurą zasilającą rozdzielacz",
          "Korelacja gęstości rozstawu rur (OZC) z koniecznością podziału obiegów na mniejsze"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Wytyczne projektowe: Zależności infrastrukturalne w ogrzewaniu podłogowym",
        "description": "Zbiór zasad inżynierskich określających parametry urządzeń współpracujących, niezbędnych do utrzymania nominalnej długości pętli grzewczych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Średnica rury zasilającej (Pion) dla >8 pętli",
            "value": "Min. 28 mm (Miedź) / 32 mm (PEX/PP)",
            "description": "Zapobiega generowaniu dodatkowych oporów przed wejściem wody w pętle."
          },
          {
            "@type": "PropertyValue",
            "name": "Strata długości na tranzytach",
            "value": "Nawet 20-30 metrów",
            "description": "Fizyczna strata rury wynikająca ze złej lokalizacji rozdzielacza."
          },
          {
            "@type": "PropertyValue",
            "name": "Wpływ OZC na rozstaw",
            "value": "Wysokie zapotrzebowanie (np. 80W/m2) wymusza zagęszczenie do 10 cm",
            "description": "Zagęszczenie drastycznie zwiększa metraż pętli, wymuszając jej skrócenie i podział."
          }
        ],
        "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="di-text-section">
        <h2>Jak to wpływa na projekt ogrzewania podłogowego i OZC?</h2>
        <div class="di-alert-box">
            Projektowanie bez uwzględnienia maksymalnej długości pętli ogrzewania podłogowego to absolutnie najczęstszy powód reklamacji wydajnościowych w nowych budynkach.
        </div>
        <p>Błędy popełnione na etapie koncepcji rzutują na cały układ hydrauliczny. Skutki nieprzemyślanej infrastruktury towarzyszącej niemal zawsze objawiają się tym samym: koniecznością ratunkowego skracania pętli lub drastycznym wzrostem rachunków za prąd z powodu przeciążenia pompy obiegowej.</p>
        <p>Przeanalizujmy 3 najgroźniejsze błędy i ich wpływ na obwody grzewcze w interaktywnym panelu poniżej:</p>
    </div>

    <div class="di-widget-container">
        
        <div class="di-tabs-column">
            <button class="di-tab-btn active" data-target="panel-lokalizacja">
                <span class="di-tab-icon">🎯</span>
                <div class="di-tab-text">
                    <span class="di-tab-title">Lokalizacja rozdzielacza</span>
                    <span class="di-tab-subtitle">Problem asymetrii</span>
                </div>
            </button>
            <button class="di-tab-btn" data-target="panel-pion">
                <span class="di-tab-icon">🚰</span>
                <div class="di-tab-text">
                    <span class="di-tab-title">Średnica podejść (Pion)</span>
                    <span class="di-tab-subtitle">Dławienie na starcie</span>
                </div>
            </button>
            <button class="di-tab-btn" data-target="panel-ozc">
                <span class="di-tab-icon">🔥</span>
                <div class="di-tab-text">
                    <span class="di-tab-title">OZC a rozstaw rur</span>
                    <span class="di-tab-subtitle">Zapotrzebowanie na moc</span>
                </div>
            </button>
        </div>

        <div class="di-content-column">
            
            <div class="di-panel active" id="panel-lokalizacja">
                <div class="di-panel-header">
                    <span class="di-panel-badge warning">Błąd Topologii</span>
                    <h3 class="di-panel-title">Lokalizacja rozdzielacza</h3>
                </div>
                <div class="di-panel-content">
                    Lokalizacja szafki rozdzielaczowej <strong>musi być centralna</strong> względem ogrzewanej kondygnacji. Jeśli rozdzielacz zostanie upchnięty na jednym, skrajnym końcu domu (np. w garażu), pętle prowadzące do najdalszych pokoi tracą ogromną ilość swojego limitu na same podejścia – tzw. tranzyty biegnące przez korytarz.
                </div>
                <div class="di-impact-box">
                    <span class="di-impact-icon">✂️</span>
                    <div class="di-impact-text">
                        <h4>Skutek dla długości pętli: Drastyczne skrócenie</h4>
                        <span>Tracisz 20-30 metrów z dopuszczalnego limitu roboczego pętli, jeszcze zanim woda w ogóle wpłynie do docelowego pokoju.</span>
                    </div>
                </div>
            </div>

            <div class="di-panel" id="panel-pion">
                <div class="di-panel-header">
                    <span class="di-panel-badge">Błąd Hydrauliczny</span>
                    <h3 class="di-panel-title">Średnica podejść (Pion)</h3>
                </div>
                <div class="di-panel-content">
                    Dla dużych rozdzielaczy obsługujących powyżej 8 pętli, to <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">jaka średnica rury zasilającej rozdzielacz (pion)</a> zostanie użyta, jest kluczowe. Przewód ten musi mieć średnicę <strong>minimum 28 mm (dla miedzi/stali) lub 32 mm (dla systemów PEX/PP)</strong>. Zbyt cienki pion dławi całą instalację na samym początku.
                </div>
                <div class="di-impact-box">
                    <span class="di-impact-icon">🛑</span>
                    <div class="di-impact-text">
                        <h4>Skutek dla pętli: Kaskadowy spadek ciśnienia</h4>
                        <span>Wąski pion generuje ogromne opory wstępne. Pompa "zużywa" swoją moc by przepchnąć wodę do belki, przez co w najdłuższych pętlach w pokojach woda niemal stoi w miejscu.</span>
                    </div>
                </div>
            </div>

            <div class="di-panel" id="panel-ozc">
                <div class="di-panel-header">
                    <span class="di-panel-badge warning">Błąd Bilansu</span>
                    <h3 class="di-panel-title">OZC a rozstaw rur</h3>
                </div>
                <div class="di-panel-content">
                    Jeśli z wyliczeń OZC wynika, że w danym pokoju musimy dostarczyć np. aż 80 W/m², a my planujemy ułożyć rurę co 15 cm, zasilanie musiałoby mieć ekstremalnie wysoką temperaturę (co jest zabójcze dla kosztów prądu przy pompie ciepła). Rozwiązaniem jest zmniejszenie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawu rur</a> do 10 cm. 
                </div>
                <div class="di-impact-box">
                    <span class="di-impact-icon">➗</span>
                    <div class="di-impact-text">
                        <h4>Skutek dla pętli: Wymuszony podział strefy</h4>
                        <span>Zagęszczenie rozstawu błyskawicznie "zjada" limit metrów. Pokój, który przy rozstawie 15 cm był na jednej pętli, przy 10 cm zmusza nas do podziału na dwa osobne obiegi i dodania sekcji.</span>
                    </div>
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez tagów H2/H3/H4 w komunikacie)
    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('app-design-impact');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Narzędzie Chronione</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Ten interaktywny moduł edukacyjny jest chroniony prawem autorskim i należy do serwisu Projekt-Ogrzewania.pl.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
            return; 
        }
    }

    // Logika przełączania zakładek
    const tabBtns = document.querySelectorAll('.di-tab-btn');
    const panels = document.querySelectorAll('.di-panel');

    tabBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const targetId = this.getAttribute('data-target');

            // Reset stanów
            tabBtns.forEach(b => b.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Aktywacja wybranych
            this.classList.add('active');
            const targetPanel = document.getElementById(targetId);
            if (targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</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);
}

h2.download-header-title {
    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);
    color: #ffffff;
}

.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);
}

h3.audit-title {
    font-size: 15px;
    font-weight: 800;
    text-transform: uppercase;
    color: #64748b;
    margin: 0 0 20px 0;
    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;
    flex-shrink: 0;
}

.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;
    line-height: 1.4;
}

/* 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;
    align-items: center;
    margin-bottom: 10px;
}

h4.risk-label { 
    color: #64748b; 
    margin: 0;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
}

.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>

<div class="premium-download-box" id="download-app-lock">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Audytor Parametrów Pętli Ogrzewania Podłogowego",
        "description": "Interaktywna check-lista inżynierska pozwalająca ocenić ryzyko awarii hydraulicznej i termicznej instalacji na podstawie weryfikacji 5 kluczowych punktów dotyczących długości obiegów grzewczych.",
        "applicationCategory": "EngineeringCalculator",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#audyt",
        "license": "https://projekt-ogrzewania.pl/",
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Weryfikacja maksymalnej długości pętli (100 mb dla 16mm)",
          "Kontrola różnicy długości pętli na jednym rozdzielaczu (<15%)",
          "Kalkulacja ryzyka awarii na podstawie braków w dokumentacji wykonawczej"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Wytyczne projektowe: Ogrzewanie Podłogowe (Infografika &#038; PDF)",
        "description": "Zestawienie twardych parametrów projektowych (ciśnienia, długości, temperatury) w formie skondensowanej infografiki edukacyjnej oraz materiału PDF gotowego do druku.",
        "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": "ImageObject",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        },
        "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego-1.webp",
        "description": "Kompleksowa infografika techniczna przedstawiająca wytyczne i najczęstsze błędy dotyczące projektowania długości pętli ogrzewania podłogowego, w tym problem oporów hydraulicznych i spadku temperatury ΔT.",
        "name": "Infografika: Maksymalna długość pętli ogrzewania podłogowego"
      }
    ]
    </script>
    
    <div class="download-header">
        <h2 class="download-header-title">Zabierz tę wiedzę na budowę!</h2>
        <p>Nie pozwól, aby wykonawca zbagatelizował zasady fizyki. Pobierz darmową infografikę w formacie PDF lub sprawdź status zaprojektowanej instalacji w poniższym mini-audycie inżynierskim.</p>
    </div>

    <div class="download-grid">
        
        <div class="download-media-section">
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego-1.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/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego-1.webp" 
                     alt="Infografika techniczna: Maksymalna długość pętli ogrzewania podłogowego, optymalne parametry pracy i najczęstsze błędy wykonawcze." 
                     class="infographic-preview" loading="lazy">
            </a>
            
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego.pdf" 
               class="btn-download-pdf" target="_blank" rel="noopener noreferrer">
                <span>📄 Pobierz Poradnik PDF</span>
            </a>
            <div class="download-hint">Gotowy do druku format A4 dla Ciebie i instalatora.</div>
        </div>

        <div class="audit-section">
            <h3 class="audit-title"><span>🔍</span> Szybki audyt projektu</h3>
            
            <div class="checklist-container">
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Długość pojedynczej pętli nie przekracza granicy 100 mb.</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Różnica długości między obiegami na rozdzielaczu wynosi poniżej 15%.</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Do limitu długości pętli doliczono odcinki dobiegowe (tranzyty).</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 do równoważenia.</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Zapotrzebowanie cieplne (OZC) dostosowano do rozstawu rur.</div>
                </div>
            </div>

            <div class="risk-meter-box">
                <div class="risk-header">
                    <h4 class="risk-label">Ryzyko awarii hydraulicznej:</h4>
                    <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;">
                    ⚠️ KRYTYCZNE RYZYKO. Instalacja zaprojektowana "na oko". Zignorowanie praw fizyki i oporów doprowadzi do zimnych stref. Pobierz PDF!
                </div>
            </div>

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

<script>
    // --- OCHRONA DOMENY (Bez tagów H2/H3 wewnątrz skryptu) ---
    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;">🔒</span><div style="font-size: 24px; font-weight: 900; margin-bottom: 10px;">Treść chroniona prawem autorskim</div><p style="font-size: 15px;">Własność intelektualna 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 = '⚠️ KRYTYCZNE RYZYKO. Instalacja zaprojektowana "na oko". Zignorowanie oporów doprowadzi do zimnych stref. 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 = '⚠️ WYSOKIE RYZYKO. Projekt ma istotne braki hydrauliczne. Pompa obiegowa będzie pracować pod dużym obciążeniem.';
        } 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 = '⚡ ŚREDNIE RYZYKO. Jesteś na dobrej drodze, ale upewnij się co do pozostałych punktów, by uniknąć problemów z przepływem.';
        } 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 = '✅ INSTALACJA BEZPIECZNA! Twój projekt spełnia rygorystyczne normy inżynierskie. Układ zadziała bezbłędnie.';
        }
    }
</script>



<style>
:root {
    --faq-primary: #0f172a;
    --faq-panel: #ffffff;
    --faq-accent: #0284c7;
    --faq-accent-light: #e0f2fe;
    --faq-text: #334155;
    --faq-muted: #94a3b8;
    --faq-border: #e2e8f0;
    --faq-bg: #f8fafc;
}

.faq-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--faq-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--faq-border);
    overflow: hidden;
}

.faq-header-section {
    padding: 40px 50px 20px 50px;
    text-align: center;
}

/* Zmiana na H2 dla głównego nagłówka */
.faq-header-section h2 {
    color: var(--faq-primary);
    font-size: 26px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 15px;
    line-height: 1.3;
}

.faq-header-section p {
    font-size: 16px;
    line-height: 1.6;
    color: var(--faq-muted);
    max-width: 600px;
    margin: 0 auto;
}

/* ================= INTERAKTYWNY AKORDION ================= */
.faq-accordion-container {
    padding: 0 50px 40px 50px;
}

.faq-item {
    border: 1px solid var(--faq-border);
    border-radius: 16px;
    margin-bottom: 15px;
    background: var(--faq-panel);
    transition: all 0.3s ease;
    overflow: hidden;
}

.faq-item:last-child {
    margin-bottom: 0;
}

.faq-item:hover {
    border-color: #bae6fd;
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.05);
}

.faq-item.active {
    border-color: var(--faq-accent);
    box-shadow: 0 8px 20px rgba(2, 132, 199, 0.1);
}

.faq-question {
    width: 100%;
    text-align: left;
    background: transparent;
    border: none;
    padding: 20px 25px;
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 20px;
    transition: 0.3s;
    color: var(--faq-primary);
}

/* Zmiana na H3 dla nagłówków pytań z zerowaniem marginesów dla dopasowania */
h3.faq-question-title {
    font-size: 16px;
    font-weight: 800;
    margin: 0;
    color: inherit;
    line-height: 1.4;
}

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

.faq-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: #f1f5f9;
    color: var(--faq-accent);
    font-size: 18px;
    flex-shrink: 0;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s;
}

.faq-item.active .faq-icon {
    transform: rotate(180deg);
    background: var(--faq-accent);
    color: #ffffff;
}

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

.faq-answer {
    padding: 0 25px 25px 25px;
    font-size: 15px;
    line-height: 1.7;
    color: var(--faq-text);
    border-top: 1px dashed transparent;
}

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

.faq-answer strong {
    color: var(--faq-primary);
}

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

.faq-answer a:hover {
    color: #1e3a8a;
}

@media (max-width: 768px) {
    .faq-header-section { padding: 30px 25px 20px 25px; }
    .faq-accordion-container { padding: 0 25px 30px 25px; }
    .faq-question { padding: 15px 20px; }
    h3.faq-question-title { font-size: 15px; }
    .faq-answer { padding: 0 20px 20px 20px; font-size: 14px; }
    .faq-icon { width: 28px; height: 28px; font-size: 16px; }
}
</style>

<div class="faq-module-wrapper" id="app-faq-interactive">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": [
          {
            "@type": "Question",
            "name": "Czy pętla 120 m rury 16 mm będzie grzać?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Będzie, ale znacznie słabiej niż pozostałe. Pompa obiegowa może nie być w stanie wymusić tam przepływu powyżej 0,5–1,0 l/min, co przy dużych mrozach spowoduje niedogrzanie pomieszczenia i dyskomfort odczuwalny jako chłodniejsze pasy na podłodze."
            }
          },
          {
            "@type": "Question",
            "name": "Co zrobić, gdy wykonawca ułożył już pętlę 140 m?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Jedynym ratunkiem jest montaż dedykowanej, mocniejszej pompy obiegowej (np. 25-80 zamiast standardowej 25-40/60) tylko dla tego rozdzielacza oraz bardzo mocne zdławienie pozostałych pętli. Wiąże się to jednak z wyższym zużyciem energii elektrycznej przez pompę."
            }
          },
          {
            "@type": "Question",
            "name": "Jaki jest maksymalny koszt błędnego zaprojektowania pętli?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "W skali 15 lat eksploatacji, praca pompy ciepła na wyższych parametrach zasilania (wymuszona przez zbyt długie pętle i wysokie opory) może zwiększyć rachunki za prąd o 15–20%, co dla domu 150 m² oznacza stratę rzędu 12 000 – 18 000 PLN."
            }
          },
          {
            "@type": "Question",
            "name": "Czy rury dobiegowe (tranzyty) wliczają się w maksymalną długość pętli ogrzewania podłogowego?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Tak, i to jest najczęstszy błąd instalatorski! Odcinek od rozdzielacza do pokoju (zasilanie i powrót) stawia taki sam opór hydrauliczny i bezwzględnie musi być odjęty od limitu. Jeśli limit rury 16 mm to 100 m, a pokój jest 15 m od rozdzielacza (30 m rury w obie strony), na samo pomieszczenie zostaje Ci tylko 70 metrów bieżących."
            }
          },
          {
            "@type": "Question",
            "name": "Czy można połączyć dwie krótsze rury złączką, aby uzyskać maksymalną długość pętli?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Bezwzględnie nie. Maksymalna długość pętli ogrzewania podłogowego musi być ułożona z jednego, ciągłego odcinka. Złączki zaciskowe schowane pod wylewką to nie tylko potężne ryzyko kosztownego wycieku w przyszłości, ale też drastyczny wzrost oporów miejscowych, które mogą całkowicie zablokować przepływ."
            }
          }
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Panel Ekspercki FAQ - Ogrzewanie Podłogowe",
        "description": "Dynamiczny moduł akordionowy odpowiadający na krytyczne pytania inwestorów dotyczące przekraczania maksymalnej długości pętli, błędów wykonawczych i doboru elementów hydraulicznych.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#faq",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@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/"
          ]
        },
        "featureList": [
          "Rozwijane odpowiedzi na problemy hydrauliczne",
          "Kalkulacja strat finansowych przy złym projekcie",
          "Rozwiązania ratunkowe dla źle wykonanej instalacji"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Baza Wiedzy Inwestora: Błędy długości pętli",
        "description": "Zbiór ustrukturyzowanych danych rozwiązujących najczęstsze problemy na budowach związane ze zbyt długimi obiegami grzewczymi.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Koszt błędu na 15 lat (Dom 150m2)",
            "value": "12 000 - 18 000 PLN"
          },
          {
            "@type": "PropertyValue",
            "name": "Rozwiązanie ratunkowe dla pętli 140m",
            "value": "Pompa 25-80 + mocne dławienie pozostałych pętli"
          }
        ],
        "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="faq-header-section">
        <h2>FAQ – Najczęstsze pytania inwestorów</h2>
        <p>Rozwiewamy inżynierskie mity i odpowiadamy na pytania prosto z placu budowy. Sprawdź, z czym najczęściej mierzą się inwestorzy.</p>
    </div>

    <div class="faq-accordion-container">
        
        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Czy pętla 120 m rury 16 mm będzie grzać?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    Będzie, ale znacznie słabiej niż pozostałe. <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">Pompa obiegowa</a> może nie być w stanie wymusić tam przepływu powyżej 0,5–1,0 l/min, co przy dużych mrozach spowoduje niedogrzanie pomieszczenia i dyskomfort odczuwalny jako chłodniejsze pasy na podłodze.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Co zrobić, gdy wykonawca ułożył już pętlę 140 m?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    Jedynym ratunkiem jest montaż dedykowanej, mocniejszej pompy obiegowej (np. 25-80 zamiast standardowej 25-40/60) tylko dla tego rozdzielacza oraz bardzo mocne zdławienie (kryzowanie) pozostałych, krótszych pętli. Wiąże się to jednak z zauważalnie wyższym zużyciem energii elektrycznej przez pompę przez cały okres eksploatacji.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Jaki jest maksymalny koszt błędnego zaprojektowania pętli?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    W skali 15 lat eksploatacji, praca <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a> na wymuszonych, wyższych parametrach zasilania (aby przebić wysokie opory długich pętli) może zwiększyć rachunki za prąd o 15–20%. Dla standardowego domu o powierzchni 150 m² oznacza to realną stratę finansową rzędu <strong>12 000 – 18 000 PLN</strong>.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Czy rury dobiegowe (tranzyty) wliczają się w maksymalną długość pętli?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    <strong>Tak, i to jest najczęstszy błąd instalatorski!</strong> Odcinek od rozdzielacza do pokoju (zasilanie i powrót) stawia taki sam opór hydrauliczny i bezwzględnie musi być odjęty od limitu roboczego pomieszczenia. Jeśli limit rury 16 mm to 100 m, a pokój jest 15 m od rozdzielacza (30 m rury w obie strony), na same meandry w pokoju zostaje Ci tylko 70 metrów bieżących.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Czy można połączyć rury złączką pod wylewką, aby uzyskać całą pętlę?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    <strong>Bezwzględnie nie.</strong> Maksymalna długość pętli ogrzewania podłogowego musi być zawsze ułożona z jednego, ciągłego odcinka rury (od belki zasilającej do belki powrotnej). Złączki zaprasowywane lub skręcane schowane pod jastrychem to nie tylko potężne ryzyko kosztownego wycieku w przyszłości, ale też drastyczny wzrost oporów miejscowych, które mogą całkowicie zaburzyć hydraulikę i zablokować przepływ.
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (BEZ TAGÓW NAGŁÓWKOWYCH - H2, H3 itp.)
    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('app-faq-interactive');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Treść Chroniona Licencją</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Baza wiedzy FAQ stanowi autorską własność intelektualną serwisu Projekt-Ogrzewania.pl. Kopiowanie modułów interaktywnych jest zabronione.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">PRZEJDŹ DO ORYGINAŁU</a>
                </div>
            `;
            return; 
        }
    }

    // Logika Akordionu FAQ
    const faqItems = document.querySelectorAll('.faq-item');

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

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

            // Zwiń wszystkie inne (opcjonalne, dla zachowania porządku)
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.faq-answer-wrapper').style.maxHeight = null;
            });

            // Rozwiń/zwiń kliknięty
            if (!isActive) {
                item.classList.add('active');
                answerWrapper.style.maxHeight = answerWrapper.scrollHeight + "px";
            }
        });
    });
});
</script>



<style>
:root {
    --sum-primary: #0f172a;
    --sum-accent: #0284c7;
    --sum-bg: #f0f9ff;
    --sum-card: #ffffff;
    --sum-border: #e2e8f0;
    --sum-text: #334155;
    --sum-cta-bg: #0f172a;
}

.final-summary-module {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--sum-bg);
    border-radius: 32px;
    padding: 50px;
    border: 1px solid var(--sum-border);
    position: relative;
    overflow: hidden;
}

/* Dekoracja tła */
.final-summary-module::before {
    content: '∑';
    position: absolute;
    top: -20px;
    right: 20px;
    font-size: 150px;
    font-weight: 900;
    color: rgba(2, 132, 199, 0.05);
    z-index: 0;
}

.sum-content {
    position: relative;
    z-index: 1;
}

.sum-header {
    text-align: center;
    margin-bottom: 40px;
}

.sum-badge {
    display: inline-block;
    padding: 6px 16px;
    background: var(--sum-accent);
    color: #ffffff;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 15px;
}

/* Zmiana na H2 i wyzerowanie domyślnych marginesów przeglądarki */
h2.sum-title {
    font-size: 32px;
    font-weight: 900;
    color: var(--sum-primary);
    margin: 0 0 15px 0;
    line-height: 1.2;
}

/* Karty podsumowania */
.sum-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    margin-bottom: 40px;
}

.sum-card {
    background: var(--sum-card);
    border: 1px solid var(--sum-border);
    padding: 25px;
    border-radius: 20px;
    text-align: center;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.sum-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 25px rgba(15, 23, 42, 0.08);
}

.sum-card-icon {
    font-size: 32px;
    margin-bottom: 15px;
    display: block;
}

.sum-card-val {
    display: block;
    font-size: 24px;
    font-weight: 900;
    color: var(--sum-accent);
    margin-bottom: 5px;
}

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

/* Sekcja CTA Blog */
.sum-blog-cta {
    background: var(--sum-cta-bg);
    border-radius: 24px;
    padding: 40px;
    color: #ffffff;
    display: flex;
    align-items: center;
    gap: 40px;
    box-shadow: 0 20px 40px rgba(15, 23, 42, 0.2);
}

.sum-cta-text {
    flex: 1;
}

/* Zmiana na H3 z zerowaniem domyślnych marginesów */
h3.sum-cta-title {
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 12px 0;
    line-height: 1.3;
}

.sum-cta-text p {
    font-size: 15px;
    line-height: 1.6;
    color: #94a3b8;
    margin: 0;
}

.sum-cta-btn-wrap {
    flex-shrink: 0;
}

.sum-cta-link {
    display: inline-block;
    padding: 18px 32px;
    background: var(--sum-accent);
    color: #ffffff;
    text-decoration: none;
    border-radius: 14px;
    font-weight: 800;
    font-size: 15px;
    transition: all 0.3s ease;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.sum-cta-link:hover {
    background: #0ea5e9;
    transform: scale(1.05);
    box-shadow: 0 0 20px rgba(2, 132, 199, 0.4);
}

@media (max-width: 850px) {
    .sum-grid { grid-template-columns: 1fr; }
    .sum-blog-cta { flex-direction: column; text-align: center; padding: 30px; }
    .final-summary-module { padding: 30px 20px; }
    h2.sum-title { font-size: 26px; }
}
</style>

<div class="final-summary-module" id="app-final-summary">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Kompendium Techniczne: Limity Pętli Grzewczych",
        "description": "Finalne podsumowanie inżynierskie określające maksymalną długość pętli ogrzewania podłogowego dla różnych standardów rur PEX/PERT.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#podsumowanie",
        "license": "https://projekt-ogrzewania.pl/",
        "creator": {
          "@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/"
          ]
        }
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zasady Projektowe Podłogówki 2026",
        "description": "Zbiór kluczowych parametrów i limitów dla instalacji ogrzewania płaszczyznowego opracowany przez Roberta Kucharskiego.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Maksymalna długość pętli 16mm",
            "value": "100 m"
          },
          {
            "@type": "PropertyValue",
            "name": "Maksymalna różnica długości (Zasada Kucharskiego)",
            "value": "15%"
          },
          {
            "@type": "PropertyValue",
            "name": "Optymalne Delta T (ΔT)",
            "value": "5K - 7K"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    ]
    </script>

    <div class="sum-content">
        <div class="sum-header">
            <span class="sum-badge">Kluczowe wnioski</span>
            <h2 class="sum-title">Pamiętaj: Fizyka instalacji nie wybacza dróg na skróty</h2>
        </div>

        <div class="sum-grid">
            <div class="sum-card">
                <span class="sum-card-icon">📏</span>
                <span class="sum-card-val">100 mb</span>
                <span class="sum-card-label">Limit rury 16mm</span>
            </div>
            <div class="sum-card">
                <span class="sum-card-icon">⚖️</span>
                <span class="sum-card-val">15%</span>
                <span class="sum-card-label">Max. różnica pętli</span>
            </div>
            <div class="sum-card">
                <span class="sum-card-icon">🌡️</span>
                <span class="sum-card-val">5K - 10K</span>
                <span class="sum-card-label">Optymalne ΔT</span>
            </div>
        </div>

        <div class="sum-blog-cta">
            <div class="sum-cta-text">
                <h3 class="sum-cta-title">O ogrzewaniu podłogowym wiemy absolutnie wszystko.</h3>
                <p>Niezależnie od tego, czy szukasz informacji o <strong>pompach ciepła</strong>, chcesz zrozumieć jak działa <strong>rekuperacja</strong>, czy zastanawiasz się nad wyborem idealnej wylewki – na naszym blogu znajdziesz setki eksperckich artykułów podpartych projektami OZC i realizacjami z placów budowy.</p>
            </div>
            <div class="sum-cta-btn-wrap">
                <a href="https://projekt-ogrzewania.pl/blog/" class="sum-cta-link">
                    Odkryj wiedzę na blogu →
                </a>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // ZABEZPIECZENIE DOMENOWE (Brak tagów nagłówkowych w komunikacie)
    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('app-final-summary');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 30px; text-align: center; background: #0f172a; color: #ffffff; border-radius: 32px; font-family: sans-serif;">
                    <div style="font-size: 50px; margin-bottom: 20px;">🔒</div>
                    <div style="font-size: 22px; font-weight: 900; margin-bottom: 12px; color: #0ea5e9;">Podsumowanie jest chronione prawem autorskim</div>
                    <p style="font-size: 15px; color: #94a3b8; max-width: 450px; margin: 0 auto 25px auto;">Treść tego artykułu i modułów interaktywnych należy do serwisu Projekt-Ogrzewania.pl. Kopiowanie bez zgody inż. Roberta Kucharskiego jest zabronione.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 15px 30px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 12px; font-weight: 800;">ZOBACZ ORYGINALNY WPIS</a>
                </div>
            `;
            container.style.background = '#0f172a';
            container.style.border = 'none';
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Maksymalna długość pętli 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/maksymalna-dlugosc-petli-ogrzewania-podlogowego/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Czym napełnić instalację ogrzewania podłogowego?</title>
		<link>https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/</link>
					<comments>https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Fri, 31 Jan 2025 12:30:43 +0000</pubDate>
				<category><![CDATA[Bezpieczeństwo instalacji]]></category>
		<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Dom i wnętrze]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Konserwacja systemów grzewczych]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki instalacyjne]]></category>
		<category><![CDATA[Technologie grzewcze]]></category>
		<category><![CDATA[efektywność grzewcza]]></category>
		<category><![CDATA[glikol etylenowy]]></category>
		<category><![CDATA[glikol propylenowy]]></category>
		<category><![CDATA[instalacje grzewcze]]></category>
		<category><![CDATA[konserwacja ogrzewania]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[płyny grzewcze]]></category>
		<category><![CDATA[płyny niezamarzające]]></category>
		<category><![CDATA[poradnik ogrzewanie]]></category>
		<category><![CDATA[woda w instalacji]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2046</guid>

					<description><![CDATA[<p>Planujesz montaż ogrzewania podłogowego lub wymianę płynu w istniejącej instalacji? Dowiedz się, czym napełnić instalację ogrzewania podłogowego, aby zapewnić jej wydajność i trwałość. W artykule omawiamy różne opcje, takie jak woda z dodatkami czy płyny niezamarzające, oraz podpowiadamy, na co zwrócić uwagę przy wyborze płynu grzewczego. Sprawdź, jak uniknąć błędów i cieszyć się komfortem cieplnym przez lata!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/">Czym napełnić instalację ogrzewania podłogowego?</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --rk-intro-dark: #0f172a;
    --rk-intro-blue: #0284c7;
    --rk-intro-blue-light: #e0f2fe;
    --rk-intro-accent: #f59e0b;
    --rk-intro-accent-light: #fef3c7;
    --rk-intro-gray: #475569;
    --rk-intro-border: #e2e8f0;
    --rk-intro-bg: #ffffff;
    --rk-intro-green: #10b981;
    --rk-intro-shadow: 0 10px 30px -10px rgba(2, 132, 199, 0.15);
}

.rk-intro-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-intro-bg);
    border-radius: 20px;
    box-shadow: var(--rk-intro-shadow);
    border: 1px solid var(--rk-intro-blue);
    overflow: hidden;
}

/* Nagłówek i Hook */
.rk-intro-header {
    background: linear-gradient(135deg, var(--rk-intro-dark) 0%, #1e293b 100%);
    padding: 40px 50px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-intro-accent);
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(245, 158, 11, 0.2);
    color: #fcd34d;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(253, 230, 138, 0.3);
}

.rk-intro-header h2 {
    font-size: 32px;
    font-weight: 900;
    margin: 0 0 20px 0;
    line-height: 1.2;
    color: #ffffff;
}

.rk-intro-hook {
    font-size: 18px;
    line-height: 1.6;
    color: #e2e8f0;
    margin: 0;
    padding-left: 20px;
    border-left: 4px solid var(--rk-intro-accent);
    font-weight: 600;
}

/* Zawartość Główna */
.rk-intro-content {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
    background: #f8fafc;
}

.rk-intro-text-area {
    padding: 40px 50px;
    background: #ffffff;
    border-right: 1px solid var(--rk-intro-border);
}

.rk-intro-text-area p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-intro-gray);
    margin: 0 0 20px 0;
}

.rk-intro-text-area p:last-child {
    margin-bottom: 0;
}

.rk-intro-text-area strong {
    color: var(--rk-intro-dark);
}

.rk-intro-text-area a {
    color: var(--rk-intro-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-intro-blue);
    transition: color 0.2s, border-color 0.2s;
}

.rk-intro-text-area a:hover {
    color: #0369a1;
    border-bottom-style: solid;
}

/* Interaktywny Moduł (Quick Answer / Spis) */
.rk-intro-interactive {
    padding: 40px;
    display: flex;
    flex-direction: column;
}

.rk-intro-tabs {
    display: flex;
    gap: 10px;
    margin-bottom: 20px;
}

.rk-intro-tab-btn {
    flex: 1;
    padding: 12px 15px;
    border-radius: 8px;
    border: 1px solid var(--rk-intro-border);
    background: #ffffff;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-intro-gray);
    cursor: pointer;
    text-align: center;
    transition: background 0.2s, color 0.2s;
}

.rk-intro-tab-btn.active {
    background: var(--rk-intro-blue);
    color: #ffffff;
    border-color: var(--rk-intro-blue);
}

.rk-intro-pane {
    display: none;
    background: #ffffff;
    border: 1px solid var(--rk-intro-border);
    border-radius: 12px;
    padding: 25px;
    flex: 1;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-intro-pane.active {
    display: block;
}

/* Pane 1: Szybka Odpowiedź */
.rk-qa-box {
    text-align: center;
}

.rk-qa-icon {
    margin: 0 auto 15px auto;
    width: 64px;
    height: 64px;
    background: var(--rk-intro-blue-light);
    color: var(--rk-intro-blue);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-qa-box h3 {
    margin: 0 0 10px 0;
    font-size: 18px;
    color: var(--rk-intro-dark);
    font-weight: 900;
}

.rk-qa-box p {
    font-size: 15px;
    color: var(--rk-intro-gray);
    line-height: 1.6;
    margin: 0;
}

.rk-qa-highlight {
    display: inline-block;
    background: #d1fae5;
    color: #065f46;
    padding: 8px 16px;
    border-radius: 6px;
    font-weight: 800;
    margin-top: 15px;
    border: 1px solid #a7f3d0;
}

/* Pane 2: Narzędzia */
.rk-tools-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.rk-tools-item {
    display: flex;
    align-items: flex-start;
    gap: 12px;
    margin-bottom: 15px;
    padding-bottom: 15px;
    border-bottom: 1px solid #f1f5f9;
}

.rk-tools-item:last-child {
    margin-bottom: 0;
    padding-bottom: 0;
    border-bottom: none;
}

.rk-tools-icon {
    flex-shrink: 0;
    color: var(--rk-intro-accent);
}

.rk-tools-text h4 {
    margin: 0 0 4px 0;
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-intro-dark);
}

.rk-tools-text p {
    margin: 0;
    font-size: 13px;
    color: var(--rk-intro-gray);
    line-height: 1.4;
}

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-intro-content { grid-template-columns: 1fr; }
    .rk-intro-header, .rk-intro-text-area { padding: 30px 20px; }
    .rk-intro-header h2 { font-size: 26px; }
    .rk-intro-hook { font-size: 16px; padding-left: 15px; }
    .rk-intro-text-area { border-right: none; border-bottom: 1px solid var(--rk-intro-border); }
    .rk-intro-interactive { padding: 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Czym napełnić instalację ogrzewania podłogowego?",
    "description": "Wydałeś majątek na pompę ciepła, a teraz chcesz zalać układ wodą z kranu? Dowiedz się, dlaczego woda demineralizowana z inhibitorem to jedyny bezpieczny wybór dla podłogówki.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-wstep",
    "name": "Rekomendowane medium grzewcze dla instalacji podłogowych",
    "description": "Zestawienie podstawowych wymogów technicznych dla czynnika grzewczego w nowoczesnych instalacjach płaszczyznowych opartych o pompy ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "czym napełnić instalację ogrzewania podłogowego",
      "woda do ogrzewania podłogowego",
      "jaki płyn do podłogówki",
      "zabezpieczenie pompy ciepła przed kamieniem",
      "woda demineralizowana do co"
    ],
    "measurementTechnique": "Określenie standardu inżynierskiego bazującego na wodzie demineralizowanej z dodatkiem inhibitora korozji (przewodność <100 µS/cm).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Rekomendacja 1: Woda demineralizowana z atestowanym inhibitorem korozji.",
        "Rekomendacja 2: Wykluczenie surowej wody z kranu ze względu na ryzyko utraty gwarancji."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-wstep",
    "name": "Asystent Szybkiej Odpowiedzi i Nawigator Narzędzi",
    "description": "Interaktywny moduł zakładkowy pozwalający użytkownikowi błyskawicznie sprawdzić rekomendowane medium grzewcze oraz przejrzeć listę kalkulatorów i symulatorów dostępnych w artykule.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-intro-container">
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
            Poradnik Eksperta HVAC
        </div>
        <h2>Czym napełnić instalację ogrzewania podłogowego?</h2>
        <div class="rk-intro-hook">
            Wydałeś 50 tysięcy na pompę ciepła i system podłogowy, a teraz chcesz zalać to wszystko zwykłą wodą ze szlaucha ogrodowego w ramach oszczędności? Uważaj – to najszybsza droga do utraty gwarancji i zatarcia sprężarki.
        </div>
    </div>

    <div class="rk-intro-content">
        <div class="rk-intro-text-area">
            <p>Napełnienie instalacji ogrzewania podłogowego to proces wprowadzenia medium grzewczego – najczęściej wody demineralizowanej z inhibitorami korozji – do pętli w celu zapewnienia efektywnego przekazywania ciepła i długowieczności systemu.</p>
            <p>Wybór medium decyduje o tym, czy Twoja <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła</a> osiągnie projektowaną wydajność, a rury pozostaną wolne od osadów wapiennych przez dekady. Jako projektant z ponad 1000 zrealizowanych instalacji, w ramach mojego standardu "Budowa bez ściemy" podkreślam z całą stanowczością: <strong>to, co wlejesz do rur, jest równie ważne, jak sama jakość użytej <a href="https://projekt-ogrzewania.pl/rura-z-bariera-antydyfuzyjna-evoh/">rury z barierą antydyfuzyjną EVOH</a></strong>.</p>
            <p>W tym kompletnym poradniku poznasz twarde normy, obliczenia oraz unikniesz bolesnych błędów finansowych, z którymi borykają się inwestorzy na etapie rozruchu.</p>
        </div>

        <div class="rk-intro-interactive">
            <div class="rk-intro-tabs">
                <button class="rk-intro-tab-btn active" data-tab="tab-qa">Szybka odpowiedź</button>
                <button class="rk-intro-tab-btn" data-tab="tab-tools">Co znajdziesz dalej?</button>
            </div>

            <div class="rk-intro-pane active" id="tab-qa">
                <div class="rk-qa-box">
                    <div class="rk-qa-icon">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    </div>
                    <h3>Tylko Woda Demineralizowana</h3>
                    <p>Zapomnij o kranówce. Jedynym bezpiecznym dla pomp ciepła i gwarancji wyborem jest woda poddana demineralizacji, uzupełniona o profesjonalny inhibitor korozji.</p>
                    <div class="rk-qa-highlight">Przewodność: &lt; 100 µS/cm</div>
                </div>
            </div>

            <div class="rk-intro-pane" id="tab-tools">
                <ul class="rk-tools-list">
                    <li class="rk-tools-item">
                        <div class="rk-tools-icon">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
                        </div>
                        <div class="rk-tools-text">
                            <h4>Symulator Jakości Wody</h4>
                            <p>Zobacz pod mikroskopem, co kranówka robi z rurami i zaworami.</p>
                        </div>
                    </li>
                    <li class="rk-tools-item">
                        <div class="rk-tools-icon">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                        </div>
                        <div class="rk-tools-text">
                            <h4>Kalkulator Zładu Wody</h4>
                            <p>Precyzyjne wyliczenie objętości cieczy dla Twojej długości pętli.</p>
                        </div>
                    </li>
                    <li class="rk-tools-item">
                        <div class="rk-tools-icon">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                        </div>
                        <div class="rk-tools-text">
                            <h4>Analiza Kosztów (Case Study)</h4>
                            <p>Oszczędności inżynieryjne na przykładzie domu 90 m².</p>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const tabs = document.querySelectorAll('.rk-intro-tab-btn');
    const panes = document.querySelectorAll('.rk-intro-pane');

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Reset aktywnych stanów
            tabs.forEach(t => t.classList.remove('active'));
            panes.forEach(p => p.classList.remove('active'));

            // Ustawienie aktywnej zakładki (statyczne przełączanie)
            this.classList.add('active');
            const targetId = this.getAttribute('data-tab');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-wq-dark: #0f172a;
    --rk-wq-blue: #0284c7;
    --rk-wq-blue-light: #e0f2fe;
    --rk-wq-red: #ef4444;
    --rk-wq-red-light: #fef2f2;
    --rk-wq-yellow: #f59e0b;
    --rk-wq-yellow-light: #fef3c7;
    --rk-wq-green: #10b981;
    --rk-wq-gray: #475569;
    --rk-wq-border: #cbd5e1;
    --rk-wq-bg: #ffffff;
    --rk-wq-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.12);
}

.rk-wq-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-wq-bg);
    border-radius: 20px;
    box-shadow: var(--rk-wq-shadow);
    border: 1px solid var(--rk-wq-blue);
    overflow: hidden;
}

/* Nagłówek */
.rk-wq-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, var(--rk-wq-dark) 0%, #1e293b 100%);
    color: #ffffff;
    border-bottom: 4px solid var(--rk-wq-blue);
}

.rk-wq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-wq-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
}

/* Wstęp */
.rk-wq-intro {
    padding: 35px 50px 0 50px;
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-wq-gray);
}

.rk-wq-intro strong { color: var(--rk-wq-dark); }
.rk-wq-intro a {
    color: var(--rk-wq-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-wq-blue);
    transition: all 0.3s;
}
.rk-wq-intro a:hover {
    color: #0369a1;
    border-bottom-style: solid;
}

/* Interaktywny Symulator */
.rk-wq-simulator {
    padding: 30px 50px 40px 50px;
}

.rk-sim-panel {
    background: #f8fafc;
    border: 1px solid var(--rk-wq-border);
    border-radius: 16px;
    padding: 30px;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    align-items: center;
}

/* Kontrolki (Slider) */
.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.rk-sim-controls h3 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-wq-dark);
}

.rk-slider-group {
    background: #ffffff;
    padding: 20px;
    border-radius: 12px;
    border: 1px solid var(--rk-wq-border);
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

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

.rk-slider-val {
    color: var(--rk-wq-red);
    font-size: 16px;
    font-weight: 900;
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: #e2e8f0;
    border-radius: 4px;
    outline: none;
}

.rk-range-input::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-wq-blue);
    cursor: pointer;
    box-shadow: 0 2px 6px rgba(2, 132, 199, 0.4);
    transition: transform 0.1s, background 0.3s;
}
.rk-range-input::-webkit-slider-thumb:hover { transform: scale(1.15); }

/* Parametry na żywo */
.rk-live-stats {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rk-stat-item {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 12px 15px;
    border-radius: 8px;
    background: #ffffff;
    border: 1px solid var(--rk-wq-border);
    font-size: 14px;
    font-weight: 700;
    transition: all 0.3s ease;
}

.rk-stat-item span:last-child {
    font-size: 16px;
    font-weight: 900;
}

/* Wizualizacja SVG */
.rk-sim-visual {
    background: var(--rk-wq-dark);
    border-radius: 16px;
    height: 100%;
    min-height: 250px;
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    border: 2px solid #334155;
}

.rk-vis-label {
    position: absolute;
    top: 15px;
    left: 20px;
    color: #94a3b8;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.rk-svg-exchanger {
    width: 80%;
    max-width: 200px;
}

/* Elementy SVG */
.rk-plate { fill: #475569; }
.rk-flow-hot { stroke: #ef4444; stroke-width: 6; stroke-linecap: round; stroke-dasharray: 10 10; animation: flowMove 1.5s linear infinite; }
.rk-flow-cold { stroke: #3b82f6; stroke-width: 6; stroke-linecap: round; stroke-dasharray: 10 10; animation: flowMove 1.5s linear infinite reverse; }

@keyframes flowMove { to { stroke-dashoffset: -20; } }

/* Kamień Kotłowy w SVG */
.rk-scale-layer {
    fill: #fde047;
    transition: width 0.3s ease, x 0.3s ease, opacity 0.3s ease;
    opacity: 0;
}

/* Konsekwencje - Karty */
.rk-wq-consequences {
    padding: 0 50px 40px 50px;
}

.rk-wq-consequences h3 {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-wq-dark);
    margin: 0 0 20px 0;
    text-align: center;
}

.rk-cons-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
}

.rk-cons-card {
    background: #ffffff;
    border: 1px solid var(--rk-wq-border);
    border-radius: 16px;
    padding: 25px 20px;
    text-align: center;
    transition: transform 0.3s, box-shadow 0.3s;
    position: relative;
    overflow: hidden;
}

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

.rk-cons-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 20px -5px rgba(0,0,0,0.1);
}

.rk-cons-card[data-type="corrosion"]::before { background: var(--rk-wq-yellow); }
.rk-cons-card[data-type="biofilm"]::before { background: var(--rk-wq-green); }
.rk-cons-card[data-type="warranty"]::before { background: var(--rk-wq-red); }

.rk-cons-icon {
    width: 48px;
    height: 48px;
    margin: 0 auto 15px auto;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
}

.rk-cons-card[data-type="corrosion"] .rk-cons-icon { background: var(--rk-wq-yellow-light); color: #d97706; }
.rk-cons-card[data-type="biofilm"] .rk-cons-icon { background: #d1fae5; color: #059669; }
.rk-cons-card[data-type="warranty"] .rk-cons-icon { background: var(--rk-wq-red-light); color: #dc2626; }

.rk-cons-card h4 {
    margin: 0 0 10px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-wq-dark);
}

.rk-cons-card p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-wq-gray);
}

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-wq-header, .rk-wq-intro, .rk-wq-simulator, .rk-wq-consequences { padding: 30px 20px; }
    .rk-wq-header h2 { font-size: 22px; }
    .rk-sim-panel { grid-template-columns: 1fr; gap: 20px; padding: 20px; }
    .rk-sim-visual { min-height: 200px; }
    .rk-cons-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-cons-card { padding: 20px 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-jakosc-wody",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Dlaczego jakość wody w instalacji ogrzewania podłogowego jest kluczowa dla żywotności pompy ciepła?",
    "description": "Zła jakość wody powoduje natychmiastowe osadzanie się kamienia kotłowego. Zgodnie z normą VDI 2035, 1 mm kamienia zwiększa zużycie prądu przez pompę ciepła o 10%.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-jakosc-wody",
    "name": "Wpływ grubości kamienia kotłowego na efektywność pompy ciepła",
    "description": "Kalkulacja techniczna określająca spadek współczynnika wymiany ciepła oraz wzrost poboru energii elektrycznej w zależności od warstwy osadów mineralnych w wymienniku.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jakość wody w instalacji ogrzewania podłogowego",
      "norma VDI 2035 twardość wody do co",
      "kamień kotłowy w pompie ciepła",
      "utrata gwarancji na pompę ciepła",
      "zatkane rotametry biofilm"
    ],
    "measurementTechnique": "Algorytm oparty na normie VDI 2035 wykazujący, że każdy 1 mm osadu wapiennego w układach niskotemperaturowych zwiększa opory hydrauliczne i straty energii o ok. 10%.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Dopuszczalna twardość wody wg VDI 2035: Poniżej 0,11 mmol/l.",
        "Grubość osadu 1 mm: Wzrost zużycia energii o ok. 10%.",
        "Grubość osadu > 2 mm: Ryzyko krytycznego uszkodzenia sprężarki, utrata gwarancji producenckiej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-jakosc-wody",
    "name": "Symulator Degradacji Wymiennika Ciepła (Pompa Ciepła)",
    "description": "Interaktywny panel obliczeniowy pozwalający inwestorowi przetestować wpływ twardej wody na koszty eksploatacji i stan prawny (gwarancję) pompy ciepła.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-wq-container">
    <div class="rk-wq-header">
        <div class="rk-wq-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 12h-4l-3 9L9 3l-3 9H2"></path></svg>
            Diagnostyka Awarii
        </div>
        <h2>Dlaczego jakość wody w instalacji ogrzewania podłogowego jest kluczowa dla żywotności pompy ciepła?</h2>
    </div>

    <div class="rk-wq-intro">
        <p>Właściwa jakość wody jest bezwzględnie kluczowa, ponieważ wg <strong>normy VDI 2035</strong> oraz zaleceń producentów urządzeń, przekroczenie dopuszczalnej twardości wody (zazwyczaj poniżej <strong>0,11 mmol/l</strong> dla instalacji powyżej 50 kW lub zgodnie z <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">wymogami gwarancyjnymi instalacji</a>) prowadzi do natychmiastowego osadzania się kamienia kotłowego na <a href="https://projekt-ogrzewania.pl/zasada-dzialania-wymiennika-plytowego-w-ogrzewaniu-podlogowym/">płytowym wymienniku ciepła</a>.</p>
        <p>W układach podłogowych z <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompą ciepła</a>, gdzie <a href="https://projekt-ogrzewania.pl/spadek-temperatury-%ce%b4t-roznica-miedzy-temperatura-zasilania-a-powrotu/">spadek temperatury (ΔT) wynosi zazwyczaj 5K</a>, każdy milimetr izolacji z kamienia drastycznie podnosi koszty pracy sprężarki.</p>
    </div>

    <div class="rk-wq-simulator">
        <div class="rk-sim-panel">
            
            <div class="rk-sim-controls">
                <h3>Symulator Kamienia Kotłowego</h3>
                
                <div class="rk-slider-group">
                    <div class="rk-slider-label">
                        <span>Grubość warstwy osadu</span>
                        <span class="rk-slider-val" id="rkScaleVal">0.0 mm</span>
                    </div>
                    <input type="range" min="0" max="3" step="0.1" value="0" class="rk-range-input" id="rkScaleSlider">
                </div>

                <div class="rk-live-stats">
                    <div class="rk-stat-item" id="statEnergy">
                        <span style="color: var(--rk-wq-gray);">Wzrost zużycia energii:</span>
                        <span style="color: var(--rk-wq-green);" id="valEnergy">+0%</span>
                    </div>
                    <div class="rk-stat-item" id="statFlow">
                        <span style="color: var(--rk-wq-gray);">Opory hydrauliczne:</span>
                        <span style="color: var(--rk-wq-green);" id="valFlow">Normatywne</span>
                    </div>
                    <div class="rk-stat-item" id="statWarranty">
                        <span style="color: var(--rk-wq-gray);">Status Gwarancji:</span>
                        <span style="color: var(--rk-wq-green);" id="valWarranty">Utrzymana</span>
                    </div>
                </div>
            </div>

            <div class="rk-sim-visual">
                <span class="rk-vis-label">Przekrój Wymiennika Płytowego</span>
                <svg class="rk-svg-exchanger" viewBox="0 0 100 100">
                    <rect class="rk-plate" x="20" y="10" width="4" height="80" rx="1"></rect>
                    <rect class="rk-plate" x="40" y="10" width="4" height="80" rx="1"></rect>
                    <rect class="rk-plate" x="60" y="10" width="4" height="80" rx="1"></rect>
                    <rect class="rk-plate" x="80" y="10" width="4" height="80" rx="1"></rect>

                    <line class="rk-flow-hot" x1="30" y1="15" x2="30" y2="85" id="animHot1"></line>
                    <line class="rk-flow-cold" x1="50" y1="15" x2="50" y2="85" id="animCold1"></line>
                    <line class="rk-flow-hot" x1="70" y1="15" x2="70" y2="85" id="animHot2"></line>

                    <rect class="rk-scale-layer" id="scale1L" x="24" y="15" width="0" height="70"></rect>
                    <rect class="rk-scale-layer" id="scale1R" x="40" y="15" width="0" height="70"></rect> <rect class="rk-scale-layer" id="scale2L" x="44" y="15" width="0" height="70"></rect>
                    <rect class="rk-scale-layer" id="scale2R" x="60" y="15" width="0" height="70"></rect>

                    <rect class="rk-scale-layer" id="scale3L" x="64" y="15" width="0" height="70"></rect>
                    <rect class="rk-scale-layer" id="scale3R" x="80" y="15" width="0" height="70"></rect>
                </svg>
            </div>

        </div>
    </div>

    <div class="rk-wq-consequences">
        <h3>Konsekwencje użycia nieuzdatnionej wody</h3>
        
        <div class="rk-cons-grid">
            <div class="rk-cons-card" data-type="corrosion">
                <div class="rk-cons-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M16 12l-4 4-4-4M12 8v7"></path></svg>
                </div>
                <h4>Korozja elektrochemiczna</h4>
                <p>Przy różnicy potencjałów między elementami mosiężnymi rozdzielacza a np. rurami stalowymi bez inhibitora, dochodzi do szybkiego utleniania i powstawania wżerów.</p>
            </div>

            <div class="rk-cons-card" data-type="biofilm">
                <div class="rk-cons-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z"></path><line x1="16" y1="8" x2="2" y2="22"></line><line x1="17.5" y1="15" x2="9" y2="6.5"></line></svg>
                </div>
                <h4>Zatory i Biofilm</h4>
                <p>Zwykła woda sieciowa zawiera tlen i mikroorganizmy, które w temperaturze pracy (30°C–40°C) tworzą tzw. biofilm, zatykający <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametry w rozdzielaczu</a>.</p>
            </div>

            <div class="rk-cons-card" data-type="warranty">
                <div class="rk-cons-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                </div>
                <h4>Utrata gwarancji</h4>
                <p>Większość producentów pomp ciepła wymaga przedstawienia protokołu pierwszego napełnienia instalacji z jednoznacznym potwierdzeniem demineralizacji i twardości wody.</p>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const slider = document.getElementById('rkScaleSlider');
    const valDisplay = document.getElementById('rkScaleVal');
    
    // Stats elements
    const valEnergy = document.getElementById('valEnergy');
    const valFlow = document.getElementById('valFlow');
    const valWarranty = document.getElementById('valWarranty');
    
    // SVG Scale Rects
    const layersLeft = [
        document.getElementById('scale1L'),
        document.getElementById('scale2L'),
        document.getElementById('scale3L')
    ];
    const layersRight = [
        document.getElementById('scale1R'),
        document.getElementById('scale2R'),
        document.getElementById('scale3R')
    ];

    // SVG Flow animations
    const flows = [
        document.getElementById('animHot1'),
        document.getElementById('animCold1'),
        document.getElementById('animHot2')
    ];

    slider.addEventListener('input', function() {
        const thickness = parseFloat(this.value);
        valDisplay.textContent = thickness.toFixed(1) + ' mm';
        
        // 1. Obliczenia Energii (1mm = 10%)
        const energyIncrease = Math.round(thickness * 10);
        valEnergy.textContent = '+' + energyIncrease + '%';

        // Koloryzacja i tekst statystyk
        if (thickness === 0) {
            valEnergy.style.color = 'var(--rk-wq-green)';
            
            valFlow.textContent = 'Normatywne';
            valFlow.style.color = 'var(--rk-wq-green)';
            
            valWarranty.textContent = 'Utrzymana';
            valWarranty.style.color = 'var(--rk-wq-green)';
            
            slider.style.background = 'var(--rk-wq-blue)';
        } else if (thickness <= 1.0) {
            valEnergy.style.color = 'var(--rk-wq-yellow)';
            
            valFlow.textContent = 'Lekko podwyższone';
            valFlow.style.color = 'var(--rk-wq-yellow)';
            
            valWarranty.textContent = 'Zagrożona';
            valWarranty.style.color = 'var(--rk-wq-yellow)';
            
            slider.style.background = 'var(--rk-wq-yellow)';
        } else {
            valEnergy.style.color = 'var(--rk-wq-red)';
            
            valFlow.textContent = 'Krytyczne (Ryzyko awarii)';
            valFlow.style.color = 'var(--rk-wq-red)';
            
            valWarranty.textContent = 'Odrzucona';
            valWarranty.style.color = 'var(--rk-wq-red)';
            
            slider.style.background = 'var(--rk-wq-red)';
        }

        // 2. Aktualizacja wizualizacji SVG (grubość kamienia w pikselach)
        // Max grubość osadu to powiedzmy 3px na ścianę (odwzorowanie 3mm)
        const svgThickness = thickness; 

        layersLeft.forEach(layer => {
            if (thickness === 0) {
                layer.style.opacity = '0';
            } else {
                layer.style.opacity = '1';
                layer.setAttribute('width', svgThickness);
            }
        });

        layersRight.forEach(layer => {
            if (thickness === 0) {
                layer.style.opacity = '0';
            } else {
                layer.style.opacity = '1';
                layer.setAttribute('width', svgThickness);
                // Musimy przesunąć X w lewo, żeby warstwa rosła "do środka" kanału
                const baseX = parseFloat(layer.getAttribute('data-basex') || layer.getAttribute('x'));
                if (!layer.getAttribute('data-basex')) layer.setAttribute('data-basex', baseX);
                layer.setAttribute('x', baseX - svgThickness);
            }
        });

        // 3. Spowolnienie przepływu (wzrost oporów hydraulicznych)
        // Domyślna animacja to 1.5s. Im grubszy kamień, tym wolniej.
        const animationSpeed = 1.5 + (thickness * 1.5); // Od 1.5s do 6s
        flows.forEach(flow => {
            flow.style.animationDuration = animationSpeed + 's';
        });
    });
});
</script>



<style>
:root {
    --rk-water-dark: #0f172a;
    --rk-water-blue: #0ea5e9;
    --rk-water-blue-light: #e0f2fe;
    --rk-water-red: #ef4444;
    --rk-water-red-light: #fef2f2;
    --rk-water-green: #10b981;
    --rk-water-gray: #475569;
    --rk-water-border: #cbd5e1;
    --rk-water-bg: #ffffff;
    --rk-water-shadow: 0 15px 35px -10px rgba(14, 165, 233, 0.15);
}

.rk-water-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-water-bg);
    border-radius: 20px;
    box-shadow: var(--rk-water-shadow);
    border: 1px solid var(--rk-water-blue);
    overflow: hidden;
    transition: all 0.4s ease;
}

/* Stan: Kranówka (Błąd) */
.rk-water-container.state-tap {
    border-color: var(--rk-water-red);
    box-shadow: 0 15px 35px -10px rgba(239, 68, 68, 0.15);
}

/* Nagłówek */
.rk-water-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, var(--rk-water-dark) 0%, #1e293b 100%);
    color: #ffffff;
    border-bottom: 4px solid var(--rk-water-blue);
    transition: border-bottom-color 0.4s ease;
}

.rk-water-container.state-tap .rk-water-header {
    border-bottom-color: var(--rk-water-red);
}

.rk-water-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.3);
    transition: all 0.4s ease;
}

.rk-water-container.state-tap .rk-water-badge {
    background: rgba(239, 68, 68, 0.2);
    color: #fca5a5;
    border-color: rgba(252, 165, 165, 0.3);
}

.rk-water-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
}

/* Tekst wprowadzający */
.rk-water-intro {
    padding: 35px 50px 10px 50px;
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-water-gray);
}

.rk-water-intro a {
    color: var(--rk-water-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-water-blue);
    transition: all 0.3s;
}

.rk-water-intro a:hover {
    color: #0369a1;
    border-bottom-style: solid;
}

/* Interaktywny Skaner Wody */
.rk-water-scanner {
    padding: 20px 50px 40px 50px;
}

.rk-scanner-box {
    background: #f8fafc;
    border: 1px solid var(--rk-water-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.02);
}

/* Przełącznik */
.rk-water-toggle {
    display: flex;
    gap: 15px;
    margin-bottom: 30px;
}

.rk-toggle-btn {
    flex: 1;
    padding: 16px;
    border-radius: 12px;
    border: 2px solid var(--rk-water-border);
    background: #ffffff;
    cursor: pointer;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-water-gray);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-toggle-btn span.sub {
    font-size: 12px;
    font-weight: 600;
    opacity: 0.7;
    text-transform: uppercase;
}

.rk-toggle-btn:hover { background: #f1f5f9; }

/* Aktywne stany przełącznika */
.rk-water-container.state-demi .rk-toggle-btn[data-water="demi"] {
    background: var(--rk-water-blue-light);
    border-color: var(--rk-water-blue);
    color: #0369a1;
    box-shadow: 0 8px 16px -4px rgba(14, 165, 233, 0.2);
}

.rk-water-container.state-tap .rk-toggle-btn[data-water="tap"] {
    background: var(--rk-water-red-light);
    border-color: var(--rk-water-red);
    color: #991b1b;
    box-shadow: 0 8px 16px -4px rgba(239, 68, 68, 0.2);
}

/* Wizualizacja SVG (Mikroskop) */
.rk-microscope-view {
    background: var(--rk-water-dark);
    border-radius: 12px;
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    margin-bottom: 30px;
    border: 2px solid #334155;
}

.rk-micro-label {
    position: absolute;
    top: 15px;
    left: 20px;
    color: #94a3b8;
    font-size: 12px;
    font-weight: 800;
    letter-spacing: 1px;
    z-index: 10;
}

.rk-svg-pipe {
    width: 100%;
    height: 100%;
    max-width: 400px;
}

/* SVG Animacje - Woda Demi */
.anim-water-flow {
    stroke-dasharray: 40 20;
    animation: flowBlue 2s linear infinite;
    transition: stroke 0.4s ease;
}

.state-demi .anim-water-flow { stroke: #38bdf8; }
.state-tap .anim-water-flow { stroke: #78350f; animation-duration: 4s; }

@keyframes flowBlue { to { stroke-dashoffset: -60; } }

/* SVG Animacje - Kranówka (Kamień i Korozja) */
.anim-calcium {
    opacity: 0;
    transform: translateY(10px);
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.state-tap .anim-calcium {
    opacity: 1;
    transform: translateY(0);
}

.anim-pitting {
    opacity: 0;
    fill: #ef4444;
    transition: opacity 0.5s;
    animation: pulseCorrosion 2s infinite alternate;
}

.state-tap .anim-pitting { opacity: 1; }

@keyframes pulseCorrosion {
    from { filter: drop-shadow(0 0 2px #ef4444); }
    to { filter: drop-shadow(0 0 8px #ef4444); }
}

/* Wskaźnik Przewodności (Miernik) */
.rk-meter {
    position: absolute;
    bottom: 15px;
    right: 20px;
    background: rgba(255, 255, 255, 0.1);
    padding: 8px 12px;
    border-radius: 8px;
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-meter-value {
    font-family: monospace;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-water-green);
    transition: color 0.4s;
}

.state-tap .rk-meter-value { color: var(--rk-water-red); }

/* Parametry Diagnostyczne (Kafelki) */
.rk-diag-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-diag-card {
    background: #ffffff;
    border: 1px solid var(--rk-water-border);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s ease;
    border-left: 4px solid transparent;
}

.rk-diag-info h4 {
    margin: 0 0 4px 0;
    font-size: 13px;
    color: var(--rk-water-gray);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-diag-info p {
    margin: 0;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-water-dark);
}

.rk-diag-status {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Karty w stanie Demi */
.state-demi .rk-diag-card { border-left-color: var(--rk-water-green); }
.state-demi .rk-diag-status { background: #d1fae5; color: #059669; }

/* Karty w stanie Tap */
.state-tap .rk-diag-card { border-left-color: var(--rk-water-red); background: #fef2f2; }
.state-tap .rk-diag-status { background: #fee2e2; color: #dc2626; }
.state-tap .rk-diag-info p { color: #991b1b; }

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-water-header, .rk-water-intro, .rk-water-scanner { padding: 25px 20px; }
    .rk-water-header h2 { font-size: 22px; }
    .rk-water-toggle { flex-direction: column; gap: 10px; }
    .rk-microscope-view { height: 150px; }
    .rk-diag-grid { grid-template-columns: 1fr; }
    .rk-diag-card { padding: 12px 15px; }
    .rk-meter { bottom: auto; top: 15px; right: 15px; }
    .rk-micro-label { display: none; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-woda-kranowa",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Czy można napełnić instalację ogrzewania podłogowego zwykłą wodą z kranu?",
    "description": "Kategorycznie odradzamy stosowanie zwykłej wody kranowej w ogrzewaniu podłogowym. Sprawdź wymagania normy PN-C-04607:1993 oraz ryzyko korozji wżerowej.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-woda",
    "name": "Parametry fizykochemiczne wody instalacyjnej wg normy PN-C-04607:1993",
    "description": "Zestawienie dopuszczalnych parametrów chemicznych dla czynnika grzewczego, definiujące ryzyko wytrącania soli wapnia i magnezu oraz zjawisko korozji wżerowej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "woda z kranu w ogrzewaniu podłogowym",
      "norma PN-C-04607:1993",
      "korozja wżerowa w podłogówce",
      "przewodność elektryczna wody kotłowej",
      "demineralizacja wody do CO"
    ],
    "measurementTechnique": "Analiza spektralna i pomiar konduktometryczny (przewodność w µS/cm) dla wody sieciowej w zestawieniu z wymogami antykorozyjnymi instalacji CO.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wymóg przewodności elektrycznej: Poniżej 100 µS/cm.",
        "Obecność chloru i tlenu w wodzie sieciowej: Inicjator korozji wżerowej elementów metalowych.",
        "Sole wapnia i magnezu: Bezpośrednia przyczyna zarastania instalacji kamieniem."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-woda",
    "name": "Symulator Korozji i Przewodności Wody (Kranówka vs Demi)",
    "description": "Interaktywny skaner diagnostyczny pokazujący mikroskopowy wpływ surowej wody na ściany rur i elementy mosiężne w porównaniu z wodą poddaną procesowi demineralizacji.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-water-container state-demi" id="rkWaterContainer">
    <div class="rk-water-header">
        <div class="rk-water-badge" id="rkWaterBadge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"></path></svg>
            <span id="rkBadgeText">Zgodność z Normą</span>
        </div>
        <h2>Czy można napełnić instalację ogrzewania podłogowego zwykłą wodą z kranu?</h2>
    </div>

    <div class="rk-water-intro">
        <p>Kategorycznie odradzam napełnianie instalacji bezpośrednio wodą z kranu, ponieważ zawiera ona chlor, tlen oraz sole wapnia i magnezu. Związki te, według <strong>normy PN-C-04607:1993</strong>, drastycznie przekraczają dopuszczalne parametry dla nowoczesnych systemów grzewczych. To jeden z <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstszych błędów przy montażu instalacji</a>.</p>
        <p>Woda sieciowa musi zostać poddana procesowi demineralizacji. Wykorzystanie <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-z-inhibitorem-korozji-do-ogrzewania-podlogowego/">wody demineralizowanej z inhibitorem korozji</a> obniża jej przewodność elektryczną poniżej <strong>100 µS/cm</strong>, co jest kluczowe, aby zminimalizować ryzyko korozji wżerowej elementów metalowych, np. gdy wybierasz <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-ogrzewania-podlogowego-mosiezny-czy-ze-stali-nierdzewnej/">mosiężny rozdzielacz do podłogówki</a>.</p>
    </div>

    <div class="rk-water-scanner">
        <div class="rk-scanner-box">
            
            <div class="rk-water-toggle">
                <button class="rk-toggle-btn" data-water="demi" style="border-color: var(--rk-water-blue); background: var(--rk-water-blue-light); color: #0369a1;">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    Woda Demineralizowana
                    <span class="sub">Standard Ekspercki</span>
                </button>
                <button class="rk-toggle-btn" data-water="tap">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    Woda z Kranu (Sieciowa)
                    <span class="sub">Wysokie Ryzyko</span>
                </button>
            </div>

            <div class="rk-microscope-view">
                <span class="rk-micro-label">Widok przekroju rury PEX / Mosiądz</span>
                
                <svg class="rk-svg-pipe" viewBox="0 0 200 80" preserveAspectRatio="none">
                    <rect x="0" y="10" width="200" height="60" fill="rgba(255,255,255,0.05)" stroke="#64748b" stroke-width="4"></rect>
                    
                    <line x1="-50" y1="40" x2="250" y2="40" class="anim-water-flow" stroke-width="20" stroke-linecap="round"></line>
                    
                    <path class="anim-calcium" d="M 20 68 Q 30 55 40 68 T 60 68 T 80 68 T 100 68 T 120 68 T 140 68 T 160 68 T 180 68" fill="none" stroke="#fef08a" stroke-width="6" stroke-linecap="round"></path>
                    <path class="anim-calcium" d="M 30 12 Q 40 25 50 12 T 70 12 T 90 12 T 110 12 T 130 12 T 150 12 T 170 12" fill="none" stroke="#fde047" stroke-width="4" stroke-linecap="round"></path>
                    
                    <circle class="anim-pitting" cx="80" cy="68" r="4"></circle>
                    <circle class="anim-pitting" cx="130" cy="12" r="3"></circle>
                    <circle class="anim-pitting" cx="170" cy="68" r="5"></circle>
                </svg>

                <div class="rk-meter">
                    <span style="font-size: 10px; color: #94a3b8; text-transform: uppercase;">Przewodność:</span>
                    <span class="rk-meter-value" id="rkConductivity">&lt; 10 µS/cm</span>
                </div>
            </div>

            <div class="rk-diag-grid">
                <div class="rk-diag-card">
                    <div class="rk-diag-info">
                        <h4>Sole wapnia i magnezu</h4>
                        <p id="valSalts">Usunięte (Brak kamienia)</p>
                    </div>
                    <div class="rk-diag-status" id="iconSalts">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                    </div>
                </div>
                
                <div class="rk-diag-card">
                    <div class="rk-diag-info">
                        <h4>Chlor i Tlen aktywny</h4>
                        <p id="valOxygen">Brak (Ochrona metali)</p>
                    </div>
                    <div class="rk-diag-status" id="iconOxygen">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                    </div>
                </div>

                <div class="rk-diag-card">
                    <div class="rk-diag-info">
                        <h4>Korozja Wżerowa</h4>
                        <p id="valCorrosion">Zablokowana (Inhibitor)</p>
                    </div>
                    <div class="rk-diag-status" id="iconCorrosion">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                    </div>
                </div>

                <div class="rk-diag-card">
                    <div class="rk-diag-info">
                        <h4>Norma PN-C-04607:1993</h4>
                        <p id="valNorm">Spełniona w 100%</p>
                    </div>
                    <div class="rk-diag-status" id="iconNorm">
                        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                    </div>
                </div>
            </div>
            
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const container = document.getElementById('rkWaterContainer');
    const btns = document.querySelectorAll('.rk-water-toggle .rk-toggle-btn');
    
    // Elementy tekstowe
    const badgeText = document.getElementById('rkBadgeText');
    const conductivity = document.getElementById('rkConductivity');
    
    const valSalts = document.getElementById('valSalts');
    const valOxygen = document.getElementById('valOxygen');
    const valCorrosion = document.getElementById('valCorrosion');
    const valNorm = document.getElementById('valNorm');

    const iconSuccess = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>';
    const iconError = '<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>';

    const updateIcons = (iconHtml) => {
        document.getElementById('iconSalts').innerHTML = iconHtml;
        document.getElementById('iconOxygen').innerHTML = iconHtml;
        document.getElementById('iconCorrosion').innerHTML = iconHtml;
        document.getElementById('iconNorm').innerHTML = iconHtml;
    };

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            const waterType = this.getAttribute('data-water');
            
            // Reset stylów przycisków
            btns.forEach(b => {
                b.style.borderColor = 'var(--rk-water-border)';
                b.style.background = '#ffffff';
                b.style.color = 'var(--rk-water-gray)';
                b.style.boxShadow = 'none';
            });

            if (waterType === 'demi') {
                container.className = 'rk-water-container state-demi';
                this.style.borderColor = 'var(--rk-water-blue)';
                this.style.background = 'var(--rk-water-blue-light)';
                this.style.color = '#0369a1';
                this.style.boxShadow = '0 8px 16px -4px rgba(14, 165, 233, 0.2)';
                
                badgeText.textContent = 'Zgodność z Normą';
                conductivity.textContent = '< 10 µS/cm';
                
                valSalts.textContent = 'Usunięte (Brak kamienia)';
                valOxygen.textContent = 'Brak (Ochrona metali)';
                valCorrosion.textContent = 'Zablokowana (Inhibitor)';
                valNorm.textContent = 'Spełniona w 100%';
                
                updateIcons(iconSuccess);
            } else {
                container.className = 'rk-water-container state-tap';
                this.style.borderColor = 'var(--rk-water-red)';
                this.style.background = 'var(--rk-water-red-light)';
                this.style.color = '#991b1b';
                this.style.boxShadow = '0 8px 16px -4px rgba(239, 68, 68, 0.2)';
                
                badgeText.textContent = 'Przekroczenie Normy';
                conductivity.textContent = '> 600 µS/cm';
                
                valSalts.textContent = 'Wytrącanie kamienia kotłowego';
                valOxygen.textContent = 'Obecny (Inicjacja utleniania)';
                valCorrosion.textContent = 'Wysokie ryzyko wżerów';
                valNorm.textContent = 'Przekroczone parametry';
                
                updateIcons(iconError);
            }
        });
    });
});
</script>



<style>
:root {
    --rk-fluid-dark: #0f172a;
    --rk-fluid-water-main: #0284c7;
    --rk-fluid-water-light: #e0f2fe;
    --rk-fluid-water-bg: #f0f9ff;
    --rk-fluid-glycol-main: #d97706;
    --rk-fluid-glycol-light: #fef3c7;
    --rk-fluid-glycol-bg: #fffbeb;
    --rk-fluid-gray: #475569;
    --rk-fluid-border: #cbd5e1;
    --rk-fluid-bg: #ffffff;
    --rk-fluid-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.1);
}

.rk-fluid-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-fluid-bg);
    border-radius: 20px;
    box-shadow: var(--rk-fluid-shadow);
    border: 1px solid var(--rk-fluid-border);
    overflow: hidden;
    transition: border-color 0.4s ease;
}

.rk-fluid-wrapper.state-water { border-color: var(--rk-fluid-water-main); }
.rk-fluid-wrapper.state-glycol { border-color: var(--rk-fluid-glycol-main); }

/* Nagłówek */
.rk-fluid-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, var(--rk-fluid-dark) 0%, #1e293b 100%);
    color: #ffffff;
    position: relative;
    border-bottom: 4px solid var(--rk-fluid-water-main);
    transition: border-bottom-color 0.4s ease;
}

.rk-fluid-wrapper.state-glycol .rk-fluid-header {
    border-bottom-color: var(--rk-fluid-glycol-main);
}

.rk-fluid-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #e2e8f0;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(255, 255, 255, 0.2);
}

.rk-fluid-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
}

/* Wstęp tekstowy */
.rk-fluid-intro {
    padding: 35px 50px 20px 50px;
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-fluid-gray);
}

.rk-fluid-intro strong {
    color: var(--rk-fluid-dark);
}

.rk-fluid-intro a {
    color: var(--rk-fluid-water-main);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-fluid-water-main);
    transition: all 0.3s;
}

.rk-fluid-intro a:hover {
    color: #0369a1;
    border-bottom-style: solid;
}

.rk-fluid-wrapper.state-glycol .rk-fluid-intro a {
    color: var(--rk-fluid-glycol-main);
    border-bottom-color: var(--rk-fluid-glycol-main);
}

/* Interaktywny Dashboard */
.rk-fluid-dashboard {
    padding: 0 50px 40px 50px;
}

/* Przełącznik (Toggle) */
.rk-fluid-switch-container {
    display: flex;
    background: #f1f5f9;
    border-radius: 16px;
    padding: 8px;
    margin-bottom: 35px;
    border: 1px solid var(--rk-fluid-border);
}

.rk-fluid-tab {
    flex: 1;
    text-align: center;
    padding: 16px 20px;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-fluid-gray);
    cursor: pointer;
    border-radius: 12px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
}

.rk-fluid-wrapper.state-water .rk-fluid-tab[data-fluid="water"] {
    background: #ffffff;
    color: var(--rk-fluid-water-main);
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.15);
}

.rk-fluid-wrapper.state-glycol .rk-fluid-tab[data-fluid="glycol"] {
    background: #ffffff;
    color: var(--rk-fluid-glycol-main);
    box-shadow: 0 4px 10px rgba(217, 119, 6, 0.15);
}

/* Wizualizator SVG */
.rk-fluid-visualizer {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-bottom: 35px;
}

.rk-vis-box {
    background: var(--rk-fluid-dark);
    border-radius: 16px;
    padding: 25px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    height: 180px;
}

.rk-vis-title {
    position: absolute;
    top: 15px;
    left: 20px;
    color: #94a3b8;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    z-index: 2;
}

.rk-vis-svg {
    width: 100%;
    height: 100%;
    max-width: 120px;
    z-index: 1;
}

/* Animacje SVG: Termometr */
.anim-thermo-fill {
    transition: height 0.6s cubic-bezier(0.4, 0, 0.2, 1), y 0.6s cubic-bezier(0.4, 0, 0.2, 1), fill 0.6s;
}
.state-water .anim-thermo-fill { fill: var(--rk-fluid-water-main); height: 50px; y: 30px; }
.state-glycol .anim-thermo-fill { fill: var(--rk-fluid-glycol-main); height: 20px; y: 60px; }

/* Animacje SVG: Przepływ (Lepkość) */
.anim-flow-dash {
    stroke-dasharray: 15 15;
    transition: stroke 0.6s;
}
.state-water .anim-flow-dash {
    stroke: var(--rk-fluid-water-main);
    animation: flowMove 1s linear infinite;
}
.state-glycol .anim-flow-dash {
    stroke: var(--rk-fluid-glycol-main);
    animation: flowMove 3s linear infinite; /* Zdecydowanie wolniej z powodu wysokiej lepkości */
}

@keyframes flowMove {
    to { stroke-dashoffset: -30; }
}

/* Karty Danych (Zamiast standardowej tabeli) */
.rk-fluid-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 15px;
}

.rk-data-card {
    background: #f8fafc;
    border: 1px solid var(--rk-fluid-border);
    border-radius: 12px;
    padding: 20px;
    transition: all 0.4s ease;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.state-water .rk-data-card { border-left: 4px solid var(--rk-fluid-water-main); }
.state-glycol .rk-data-card { border-left: 4px solid var(--rk-fluid-glycol-main); background: var(--rk-fluid-glycol-bg); }

.rk-card-label {
    font-size: 13px;
    color: var(--rk-fluid-gray);
    font-weight: 700;
    margin-bottom: 8px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-card-value {
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-fluid-dark);
    transition: color 0.3s;
}

.state-water .rk-card-value { color: var(--rk-fluid-water-main); }
.state-glycol .rk-card-value { color: var(--rk-fluid-glycol-main); }

.rk-card-desc {
    font-size: 13px;
    color: var(--rk-fluid-gray);
    margin-top: 5px;
    font-weight: 500;
}

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-fluid-header, .rk-fluid-intro, .rk-fluid-dashboard { padding: 25px 20px; }
    .rk-fluid-header h2 { font-size: 22px; }
    .rk-fluid-switch-container { flex-direction: column; border-radius: 12px; padding: 5px; gap: 5px; }
    .rk-fluid-tab { padding: 12px; font-size: 14px; }
    .rk-fluid-visualizer { grid-template-columns: 1fr; gap: 15px; }
    .rk-vis-box { height: 140px; }
    .rk-fluid-grid { grid-template-columns: 1fr; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-parametry-plynu",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Jakie są parametry płynu niezamarzającego w ogrzewaniu podłogowym i kiedy go stosować?",
    "description": "Techniczne porównanie parametrów wody demineralizowanej i glikolu propylenowego (30%). Analiza przewodności cieplnej, lepkości i temperatur krzepnięcia w instalacjach podłogowych.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-parametry-plynu",
    "name": "Tabela porównawcza właściwości termodynamicznych: Woda vs Glikol",
    "description": "Zestawienie inżynierskie parametrów mediów grzewczych wykorzystywane do korekty obliczeń OZC i doboru pomp obiegowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "parametry glikolu w ogrzewaniu podłogowym",
      "lepkość kinematyczna płynu grzewczego",
      "przewodność cieplna glikolu a wody",
      "zamarzanie pompy ciepła monoblok",
      "temperatura krzepnięcia medium grzewczego"
    ],
    "measurementTechnique": "Porównanie wartości laboratoryjnych dla czystej wody demineralizowanej z inhibitorem oraz 30% roztworu glikolu propylenowego (zabezpieczenie do -15°C).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Przewodność cieplna: Woda ~0,6 W/mK | Glikol 30% ~0,45 W/mK (wymaga korekty OZC).",
        "Lepkość kinematyczna: Woda ~1 cSt | Glikol 30% ~3-4 cSt (wyższe opory tłoczenia).",
        "Temperatura krzepnięcia: Woda 0°C | Glikol 30% -15°C.",
        "Konserwacja: Woda (inhibitor co 5 lat) | Glikol (wymiana pełna co 3-5 lat)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-parametry-plynu",
    "name": "Symulator Właściwości Termodynamicznych Medium",
    "description": "Interaktywny wizualizator ilustrujący różnice w lepkości kinematycznej (prędkość przepływu) oraz temperaturze krzepnięcia pomiędzy wodą a glikolem propylenowym.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-fluid-wrapper state-water" id="rkFluidWrapper">
    <div class="rk-fluid-header">
        <div class="rk-fluid-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg>
            Analiza Parametrów Medium
        </div>
        <h2>Jakie są parametry płynu niezamarzającego w ogrzewaniu podłogowym i kiedy go stosować?</h2>
    </div>

    <div class="rk-fluid-intro">
        <p>Płyn niezamarzający, zazwyczaj na bazie <a href="https://projekt-ogrzewania.pl/glikol-w-ogrzewaniu-podlogowym-prawda-i-mity-ktore-musi-znac-kazdy-inwestor/">glikolu propylenowego</a>, stosujemy wyłącznie w budynkach o charakterze sezonowym lub w układach z <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompami ciepła typu monoblok</a>, gdzie istnieje realne ryzyko zamarznięcia medium w jednostce zewnętrznej przy awarii zasilania.</p>
        <p>Kluczowym inżynierskim problemem jest <strong>pojemność cieplna właściwa</strong>, która dla roztworu 30% glikolu jest o ok. 15-20% niższa niż dla czystej wody. Wymusza to obligatoryjną korektę <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczeń przepływów w OZC</a> (Obliczeniowe Zapotrzebowanie na Ciepło), w przeciwnym razie system będzie trwale niedogrzany.</p>
    </div>

    <div class="rk-fluid-dashboard">
        
        <div class="rk-fluid-switch-container">
            <div class="rk-fluid-tab" data-fluid="water">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg>
                Woda Demineralizowana
            </div>
            <div class="rk-fluid-tab" data-fluid="glycol">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
                Glikol Propylenowy (30%)
            </div>
        </div>

        <div class="rk-fluid-visualizer">
            <div class="rk-vis-box">
                <span class="rk-vis-title">Temp. Krzepnięcia</span>
                <svg class="rk-vis-svg" viewBox="0 0 100 100">
                    <rect x="40" y="10" width="20" height="60" rx="10" fill="none" stroke="#64748b" stroke-width="4"></rect>
                    <circle cx="50" cy="80" r="15" fill="none" stroke="#64748b" stroke-width="4"></circle>
                    <circle cx="50" cy="80" r="11" class="anim-thermo-fill"></circle>
                    <rect x="44" class="anim-thermo-fill" width="12" rx="6"></rect>
                    <line x1="25" y1="30" x2="35" y2="30" stroke="#cbd5e1" stroke-width="2"></line>
                    <text x="10" y="34" fill="#cbd5e1" font-size="12" font-family="sans-serif">0°</text>
                    <line x1="25" y1="60" x2="35" y2="60" stroke="#cbd5e1" stroke-width="2"></line>
                    <text x="5" y="64" fill="#cbd5e1" font-size="12" font-family="sans-serif">-15°</text>
                </svg>
            </div>

            <div class="rk-vis-box">
                <span class="rk-vis-title">Lepkość (Przepływ)</span>
                <svg class="rk-vis-svg" viewBox="0 0 100 100">
                    <rect x="10" y="35" width="80" height="30" rx="4" fill="none" stroke="#64748b" stroke-width="4"></rect>
                    <line x1="15" y1="50" x2="85" y2="50" class="anim-flow-dash" stroke-width="14" stroke-linecap="round"></line>
                </svg>
            </div>
        </div>

        <div class="rk-fluid-grid">
            <div class="rk-data-card">
                <span class="rk-card-label">Przewodność cieplna</span>
                <span class="rk-card-value" id="valThermo">Wysoka (ok. 0,6 W/mK)</span>
                <span class="rk-card-desc" id="descThermo">Optymalne przekazywanie ciepła.</span>
            </div>
            
            <div class="rk-data-card">
                <span class="rk-card-label">Lepkość kinematyczna</span>
                <span class="rk-card-value" id="valViscosity">Niska (1 cSt)</span>
                <span class="rk-card-desc" id="descViscosity">Minimalne obciążenie pompy obiegowej.</span>
            </div>
            
            <div class="rk-data-card">
                <span class="rk-card-label">Punkt krzepnięcia</span>
                <span class="rk-card-value" id="valFreeze">0°C</span>
                <span class="rk-card-desc" id="descFreeze">Brak ochrony przed mrozem.</span>
            </div>
            
            <div class="rk-data-card">
                <span class="rk-card-label">Interwał serwisowy</span>
                <span class="rk-card-value" id="valService">Wymiana inhibitora co 5 lat</span>
                <span class="rk-card-desc" id="descService">Tańsza i rzadsza eksploatacja.</span>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const wrapper = document.getElementById('rkFluidWrapper');
    const tabs = document.querySelectorAll('.rk-fluid-tab');
    
    // Obiekty DOM do podmiany danych
    const valThermo = document.getElementById('valThermo');
    const descThermo = document.getElementById('descThermo');
    const valViscosity = document.getElementById('valViscosity');
    const descViscosity = document.getElementById('descViscosity');
    const valFreeze = document.getElementById('valFreeze');
    const descFreeze = document.getElementById('descFreeze');
    const valService = document.getElementById('valService');
    const descService = document.getElementById('descService');

    // Baza danych dla kart
    const fluidData = {
        water: {
            thermo: "Wysoka (ok. 0,6 W/mK)",
            descThermo: "Optymalne i najszybsze przekazywanie ciepła z rur do jastrychu.",
            viscosity: "Niska (1 cSt)",
            descViscosity: "Minimalne obciążenie hydrauliczne dla pompy obiegowej.",
            freeze: "0°C",
            descFreeze: "Całkowity brak ochrony instalacji przed zjawiskiem zamarzania.",
            service: "Wymiana inhibitora co 5 lat",
            descService: "Niski koszt utrzymania zabezpieczenia antykorozyjnego."
        },
        glycol: {
            thermo: "Średnia (ok. 0,45 W/mK)",
            descThermo: "Spadek pojemności cieplnej o 15-20%. Wymaga korekty przepływów w OZC.",
            viscosity: "Wysoka (3-4 cSt)",
            descViscosity: "Silne opory. Wymaga większej średnicy rur lub mocniejszej pompy.",
            freeze: "ok. -15°C",
            descFreeze: "Pewna ochrona jednostek zewnętrznych (monoblok) przy awarii zasilania.",
            service: "Pełna wymiana płynu co 3-5 lat",
            descService: "Degradacja glikolu wymusza kosztowną, całkowitą wymianę medium."
        }
    };

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            const selectedFluid = this.getAttribute('data-fluid');
            
            // Zmiana głównej klasy wrappera (uruchamia przejścia CSS i SVG)
            wrapper.className = 'rk-fluid-wrapper state-' + selectedFluid;

            // Zmiana tekstów w kartach (Fade efekt)
            const cards = document.querySelectorAll('.rk-data-card');
            cards.forEach(card => card.style.opacity = '0');
            
            setTimeout(() => {
                const data = fluidData[selectedFluid];
                valThermo.textContent = data.thermo;
                descThermo.textContent = data.descThermo;
                valViscosity.textContent = data.viscosity;
                descViscosity.textContent = data.descViscosity;
                valFreeze.textContent = data.freeze;
                descFreeze.textContent = data.descFreeze;
                valService.textContent = data.service;
                descService.textContent = data.descService;

                cards.forEach(card => card.style.opacity = '1');
            }, 200);
        });
    });
});
</script>



<style>
:root {
    --rk-calc-dark: #0f172a;
    --rk-calc-blue: #3b82f6;
    --rk-calc-blue-hover: #2563eb;
    --rk-calc-light: #eff6ff;
    --rk-calc-accent: #0ea5e9;
    --rk-calc-gray: #475569;
    --rk-calc-border: #cbd5e1;
    --rk-calc-bg: #ffffff;
    --rk-calc-shadow: 0 20px 40px -10px rgba(59, 130, 246, 0.15);
}

.rk-calc-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-calc-bg);
    border-radius: 20px;
    box-shadow: var(--rk-calc-shadow);
    border: 1px solid var(--rk-calc-blue);
    overflow: hidden;
}

/* Nagłówek */
.rk-calc-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, var(--rk-calc-dark) 0%, #1e293b 100%);
    color: #ffffff;
    border-bottom: 4px solid var(--rk-calc-accent);
}

.rk-calc-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.3);
}

.rk-calc-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.3;
    color: #ffffff;
}

.rk-calc-header p {
    color: #cbd5e1;
    font-size: 16px;
    line-height: 1.6;
    margin: 0;
    max-width: 750px;
}

.rk-calc-header a {
    color: #7dd3fc;
    text-decoration: underline;
    font-weight: 600;
}

/* Zawartość: Grid */
.rk-calc-content {
    display: grid;
    grid-template-columns: 1fr 1fr;
    background: #f8fafc;
}

/* Sekcja Lewa: Algorytm */
.rk-calc-algo {
    padding: 40px 50px;
    border-right: 1px solid var(--rk-calc-border);
    background: #ffffff;
}

.rk-calc-algo h3 {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-calc-dark);
    margin: 0 0 25px 0;
}

.rk-algo-step {
    display: flex;
    gap: 15px;
    margin-bottom: 25px;
}

.rk-algo-num {
    flex-shrink: 0;
    width: 36px;
    height: 36px;
    background: var(--rk-calc-light);
    color: var(--rk-calc-blue);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 16px;
    border: 2px solid #bfdbfe;
}

.rk-algo-text h4 {
    margin: 0 0 5px 0;
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-calc-dark);
}

.rk-algo-text p {
    margin: 0;
    font-size: 15px;
    color: var(--rk-calc-gray);
    line-height: 1.6;
}

.rk-algo-formula {
    display: inline-block;
    background: #f1f5f9;
    padding: 8px 12px;
    border-radius: 8px;
    font-family: monospace;
    font-weight: 700;
    color: #0369a1;
    margin-top: 8px;
    border: 1px solid #e2e8f0;
}

/* Sekcja Prawa: Narzędzie */
.rk-calc-tool {
    padding: 40px 50px;
    display: flex;
    flex-direction: column;
}

/* Kontrolki narzędzia */
.rk-tool-control {
    background: #ffffff;
    border: 1px solid var(--rk-calc-border);
    border-radius: 16px;
    padding: 25px;
    margin-bottom: 25px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.rk-tool-label {
    display: flex;
    justify-content: space-between;
    font-weight: 800;
    color: var(--rk-calc-dark);
    margin-bottom: 15px;
    font-size: 15px;
}

.rk-tool-val {
    color: var(--rk-calc-blue);
}

/* Range Slider */
.rk-range-slider {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    background: #e2e8f0;
    border-radius: 4px;
    outline: none;
    margin-bottom: 20px;
}

.rk-range-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: var(--rk-calc-blue);
    cursor: pointer;
    box-shadow: 0 2px 6px rgba(59, 130, 246, 0.4);
    transition: transform 0.1s;
}

.rk-range-slider::-webkit-slider-thumb:hover {
    transform: scale(1.15);
}

/* Toggle Switch */
.rk-toggle-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding-top: 15px;
    border-top: 1px dashed var(--rk-calc-border);
}

.rk-toggle-desc {
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-calc-gray);
}

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

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

.rk-slider-round {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: #cbd5e1;
    transition: .4s;
    border-radius: 34px;
}

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

input:checked + .rk-slider-round { background-color: var(--rk-calc-blue); }
input:checked + .rk-slider-round:before { transform: translateX(22px); }

/* Wynik i SVG */
.rk-result-box {
    background: var(--rk-calc-dark);
    border-radius: 16px;
    padding: 30px;
    color: #ffffff;
    display: flex;
    align-items: center;
    gap: 25px;
    position: relative;
    overflow: hidden;
}

.rk-result-info {
    flex: 1;
    z-index: 2;
}

.rk-result-title {
    font-size: 14px;
    color: #94a3b8;
    text-transform: uppercase;
    letter-spacing: 1px;
    font-weight: 800;
    margin: 0 0 5px 0;
}

.rk-result-value {
    font-size: 38px;
    font-weight: 900;
    color: #7dd3fc;
    margin: 0;
    line-height: 1;
}

.rk-result-unit {
    font-size: 18px;
    color: #ffffff;
}

.rk-result-svg {
    width: 80px;
    height: 80px;
    z-index: 2;
}

/* Animacja wypełniania SVG */
#rkWaterFill {
    transition: height 0.4s cubic-bezier(0.4, 0, 0.2, 1), y 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-bg-waves {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 100%;
    opacity: 0.1;
    z-index: 1;
    pointer-events: none;
}

@media (max-width: 768px) {
    .rk-calc-content { grid-template-columns: 1fr; }
    .rk-calc-algo { border-right: none; border-bottom: 1px solid var(--rk-calc-border); padding: 30px 20px; }
    .rk-calc-header { padding: 30px 20px; }
    .rk-calc-header h2 { font-size: 24px; }
    .rk-calc-tool { padding: 30px 20px; }
    .rk-result-box { flex-direction: column; text-align: center; gap: 15px; padding: 25px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-kalkulator",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Jak obliczyć ilość wody potrzebną do napełnienia instalacji podłogowej?",
    "description": "Poznaj algorytm i skorzystaj z interaktywnego kalkulatora, aby dokładnie obliczyć zład wody w instalacji. Dowiedz się, ile litrów mieści metr rury PEX 16x2.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-kalkulator",
    "name": "Parametry objętościowe rur PEX/PERT do ogrzewania podłogowego",
    "description": "Zestawienie pojemności wodnej dla standardowych średnic rur ogrzewania płaszczyznowego, wykorzystywane do precyzyjnego określania pojemności całkowitej układu CO.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "ile wody potrzeba do wypełnienia instalacji podłogówki kalkulator",
      "ile wody mieści się w 1 metrze rury pex pert 16",
      "większy czy mniejszy zład wody w ogrzewaniu podłogowym",
      "pojemność wodna podłogówki",
      "objętość pętli grzewczej"
    ],
    "measurementTechnique": "Algorytm oparty na pojemności jednostkowej rury (np. 0,113 l/mb dla 16x2) skorygowany o wskaźnik osprzętu dodatkowego (+20% dla bufora).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Pojemność rury 16x2: ~0,113 litra na metr bieżący.",
        "Wskaźnik zapasu na osprzęt kotłowni: +15% do +20%."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-kalkulator",
    "name": "Kalkulator Objętości Zładu Wody (Ogrzewanie Podłogowe)",
    "description": "Dynamiczne narzędzie suwakowe obliczające całkowite zapotrzebowanie na medium grzewcze (wodę demineralizowaną) na podstawie długości rur i opcjonalnego bufora.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-calc-wrapper">
    <div class="rk-calc-header">
        <div class="rk-calc-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="4" y="4" width="16" height="16" rx="2" ry="2"></rect><rect x="9" y="9" width="6" height="6"></rect><line x1="9" y1="1" x2="9" y2="4"></line><line x1="15" y1="1" x2="15" y2="4"></line><line x1="9" y1="20" x2="9" y2="23"></line><line x1="15" y1="20" x2="15" y2="23"></line><line x1="20" y1="9" x2="23" y2="9"></line><line x1="20" y1="14" x2="23" y2="14"></line><line x1="1" y1="9" x2="4" y2="9"></line><line x1="1" y1="14" x2="4" y2="14"></line></svg>
            Wymiarowanie układu
        </div>
        <h2>Jak obliczyć ilość wody potrzebną do napełnienia instalacji podłogowej?</h2>
        <p>Aby precyzyjnie określić ilość potrzebnego medium, należy zsumować objętość wszystkich pętli grzewczych oraz rur magistralnych. Wiedza o tym, <a href="https://projekt-ogrzewania.pl/ile-wody-miesci-sie-w-1-metrze-rury-pex-pert-16/">ile wody mieści się w 1 metrze rury PEX/PERT 16</a>, jest kluczowa: to dokładnie <strong>0,113 litra na metr bieżący</strong>.</p>
    </div>

    <div class="rk-calc-content">
        <div class="rk-calc-algo">
            <h3>Algorytm obliczeń krok po kroku</h3>
            
            <div class="rk-algo-step">
                <div class="rk-algo-num">1</div>
                <div class="rk-algo-text">
                    <h4>Długość rur</h4>
                    <p>Zsumuj długości wszystkich pętli z projektu (np. 10 pętli po 100 m = 1000 m długości całkowitej).</p>
                </div>
            </div>

            <div class="rk-algo-step">
                <div class="rk-algo-num">2</div>
                <div class="rk-algo-text">
                    <h4>Objętość rur podłogowych</h4>
                    <p>Pomnóż wynik przez jednostkową pojemność rury. Nie wiesz, czy <a href="https://projekt-ogrzewania.pl/wiekszy-czy-mniejszy-zlad-wody-w-ogrzewaniu-podlogowym/">większy czy mniejszy zład wody</a> jest lepszy? Trzymaj się wyliczeń:</p>
                    <div class="rk-algo-formula">V_rury = L_całkowita × 0,113 l/m</div>
                </div>
            </div>

            <div class="rk-algo-step">
                <div class="rk-algo-num">3</div>
                <div class="rk-algo-text">
                    <h4>Osprzęt i bufor ciepła</h4>
                    <p>Dodaj objętość naczynia wzbiorczego, <a href="https://projekt-ogrzewania.pl/bufor-ciepla-w-ogrzewaniu-podlogowym/">bufora w ogrzewaniu podłogowym</a> oraz samego kotła. Bez bufora przyrównuje się zazwyczaj dodatek rzędu <strong>+15-20%</strong> na rozdzielacze i magistrale.</p>
                </div>
            </div>
            
            <div style="padding: 15px; background: #e0f2fe; border-radius: 12px; margin-top: 30px; border-left: 4px solid #0284c7;">
                <p style="margin: 0; font-size: 14px; color: #0c4a6e;"><strong>Przykład dla domu 150 m²:</strong> Przy łącznej długości rur 1200 m (1200 × 0,113 = 135,6 l). Wraz z podstawową instalacją kotłową należy przygotować ok. 160-170 litrów wody demineralizowanej.</p>
            </div>
        </div>

        <div class="rk-calc-tool">
            <div class="rk-tool-control">
                <div class="rk-tool-label">
                    <span>Łączna długość rur PEX 16x2</span>
                    <span class="rk-tool-val" id="rkValLength">1000 m</span>
                </div>
                <input type="range" min="200" max="3000" step="50" value="1000" class="rk-range-slider" id="rkInputLength">
                
                <div class="rk-toggle-row">
                    <span class="rk-toggle-desc">Uwzględnij rezerwę na osprzęt kotłowni (+20%)</span>
                    <label class="rk-switch">
                        <input type="checkbox" id="rkInputBuffer" checked>
                        <span class="rk-slider-round"></span>
                    </label>
                </div>
            </div>

            <div class="rk-result-box">
                <svg class="rk-bg-waves" preserveAspectRatio="none" viewBox="0 0 1440 320">
                    <path fill="#38bdf8" fill-opacity="1" d="M0,160L48,170.7C96,181,192,203,288,208C384,213,480,203,576,176C672,149,768,107,864,101.3C960,96,1056,128,1152,149.3C1248,171,1344,181,1392,186.7L1440,192L1440,320L1392,320C1344,320,1248,320,1152,320C1056,320,960,320,864,320C768,320,672,320,576,320C480,320,384,320,288,320C192,320,96,320,48,320L0,320Z"></path>
                </svg>

                <div class="rk-result-info">
                    <h4 class="rk-result-title">Wymagany zład wody:</h4>
                    <p class="rk-result-value"><span id="rkResultLiters">136</span> <span class="rk-result-unit">Litrów</span></p>
                </div>

                <svg class="rk-result-svg" viewBox="0 0 100 100">
                    <rect x="25" y="10" width="50" height="80" rx="10" fill="none" stroke="#64748b" stroke-width="4"></rect>
                    <rect id="rkWaterFill" x="27" y="50" width="46" height="38" rx="8" fill="#38bdf8"></rect>
                    <line x1="20" y1="30" x2="25" y2="30" stroke="#cbd5e1" stroke-width="2"></line>
                    <line x1="20" y1="50" x2="25" y2="50" stroke="#cbd5e1" stroke-width="2"></line>
                    <line x1="20" y1="70" x2="25" y2="70" stroke="#cbd5e1" stroke-width="2"></line>
                </svg>
            </div>
            <p style="text-align: center; margin-top: 15px; font-size: 13px; color: var(--rk-calc-gray);">
                Precyzyjne wyniki? Sprawdź nasz pełny <a href="https://projekt-ogrzewania.pl/ile-wody-potrzeba-do-wypelnienia-instalacji-podlogowki-kalkulator/" style="color: var(--rk-calc-blue); font-weight: 700; text-decoration: none;">kalkulator objętości zładu</a>.
            </p>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const inputLength = document.getElementById('rkInputLength');
    const inputBuffer = document.getElementById('rkInputBuffer');
    const valLength = document.getElementById('rkValLength');
    const resultLiters = document.getElementById('rkResultLiters');
    const waterFill = document.getElementById('rkWaterFill');
    
    // Stała objętości 1mb rury 16x2
    const VOLUME_PER_METER = 0.113;

    function calculateVolume() {
        const length = parseInt(inputLength.value);
        const hasBuffer = inputBuffer.checked;
        
        valLength.textContent = length + ' m';

        // Obliczenia
        let totalLiters = length * VOLUME_PER_METER;
        if (hasBuffer) {
            totalLiters = totalLiters * 1.20; // +20% na osprzęt
        }

        // Animacja cyfr
        resultLiters.textContent = Math.round(totalLiters);

        // Animacja SVG zbiornika (wysokość wizualna zależna od % z max możliwej wartości)
        // Max objętość dla 3000m z buforem = ~407L
        const maxVol = 3000 * VOLUME_PER_METER * 1.2;
        const fillPercentage = totalLiters / maxVol;
        
        // Prostokąt SVG: max wysokość = 76 (od y=86 do y=10), max y=12
        const maxHeight = 76;
        const currentHeight = Math.max(10, maxHeight * fillPercentage);
        const currentY = 88 - currentHeight;

        waterFill.setAttribute('height', currentHeight);
        waterFill.setAttribute('y', currentY);
    }

    inputLength.addEventListener('input', calculateVolume);
    inputBuffer.addEventListener('change', calculateVolume);

    // Initial call
    calculateVolume();
});
</script>



<style>
:root {
    --rk-inst-dark: #0f172a;
    --rk-inst-blue: #2563eb;
    --rk-inst-blue-light: #dbeafe;
    --rk-inst-cyan: #06b6d4;
    --rk-inst-green: #059669;
    --rk-inst-green-light: #d1fae5;
    --rk-inst-gray: #475569;
    --rk-inst-border: #e2e8f0;
    --rk-inst-bg: #ffffff;
    --rk-shadow: 0 15px 35px -10px rgba(37, 99, 235, 0.15);
}

.rk-inst-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-inst-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow);
    border: 1px solid var(--rk-inst-blue);
    overflow: hidden;
}

/* Nagłówek */
.rk-inst-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, var(--rk-inst-dark) 0%, #1e293b 100%);
    color: #ffffff;
    border-bottom: 4px solid var(--rk-inst-blue);
}

.rk-inst-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(37, 99, 235, 0.2);
    color: #93c5fd;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(147, 197, 253, 0.3);
}

.rk-inst-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-inst-header p {
    color: #cbd5e1;
    font-size: 16px;
    line-height: 1.6;
    margin: 0;
    max-width: 700px;
}

/* Sekcja Interaktywna */
.rk-inst-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-step-wrapper {
    display: flex;
    gap: 30px;
    background: #ffffff;
    border: 1px solid var(--rk-inst-border);
    border-radius: 16px;
    padding: 10px;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
}

/* Menu Kroków (Lewa strona) */
.rk-step-nav {
    display: flex;
    flex-direction: column;
    gap: 10px;
    min-width: 250px;
}

.rk-step-btn {
    padding: 16px 20px;
    border-radius: 12px;
    border: 2px solid transparent;
    background: transparent;
    cursor: pointer;
    text-align: left;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    gap: 15px;
    color: var(--rk-inst-gray);
}

.rk-step-btn:hover {
    background: #f1f5f9;
}

.rk-step-btn.active {
    background: var(--rk-inst-blue-light);
    border-color: var(--rk-inst-blue);
    color: #1e3a8a;
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.1);
}

.rk-step-num {
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: #e2e8f0;
    color: #64748b;
    display: flex;
    align-items: center;
    justify-content: center;
    font-weight: 900;
    font-size: 14px;
    transition: all 0.3s;
}

.rk-step-btn.active .rk-step-num {
    background: var(--rk-inst-blue);
    color: #ffffff;
}

.rk-step-title {
    font-size: 15px;
    font-weight: 800;
}

/* Zawartość Kroku (Prawa strona) */
.rk-step-content-area {
    flex: 1;
    background: var(--rk-inst-dark);
    border-radius: 12px;
    padding: 30px;
    display: flex;
    flex-direction: column;
    position: relative;
    overflow: hidden;
}

.rk-step-visual {
    height: 180px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    margin-bottom: 25px;
    padding-bottom: 15px;
}

/* SVG Animacje dla każdego kroku */
.rk-svg-stage {
    width: 100%;
    height: 100%;
    max-width: 250px;
    display: none;
}

/* Aktywacja SVG */
.state-stage1 #svg-stage1,
.state-stage2 #svg-stage2,
.state-stage3 #svg-stage3 {
    display: block;
}

/* Animacje Stage 1 (Płukanie) */
.anim-particle {
    animation: flowOut 2s linear infinite;
}
.anim-particle:nth-child(2) { animation-delay: 0.7s; }
.anim-particle:nth-child(3) { animation-delay: 1.4s; }

@keyframes flowOut {
    0% { transform: translateX(0); opacity: 1; }
    100% { transform: translateX(100px); opacity: 0; }
}

/* Animacje Stage 2 (Odpowietrzanie) */
.anim-bubble {
    animation: riseUp 2s ease-in infinite;
}
.anim-bubble:nth-child(2) { animation-delay: 0.5s; }
.anim-bubble:nth-child(3) { animation-delay: 1.2s; }

@keyframes riseUp {
    0% { transform: translateY(0) scale(1); opacity: 0; }
    20% { opacity: 1; }
    100% { transform: translateY(-60px) scale(1.5); opacity: 0; }
}

/* Animacje Stage 3 (Próba ciśnieniowa) */
.anim-needle {
    transform-origin: 50px 50px;
    transition: transform 1.5s cubic-bezier(0.34, 1.56, 0.64, 1);
    transform: rotate(-60deg); /* Start (0 bar) */
}
.state-stage3 .anim-needle {
    transform: rotate(60deg); /* Koniec (6 bar) */
}

/* Teksty */
.rk-step-text-box {
    display: none;
    color: #ffffff;
}

.state-stage1 #text-stage1,
.state-stage2 #text-stage2,
.state-stage3 #text-stage3 {
    display: block;
    animation: fadeIn 0.4s ease forwards;
}

@keyframes fadeIn {
    from { opacity: 0; transform: translateY(10px); }
    to { opacity: 1; transform: translateY(0); }
}

.rk-step-text-box h3 {
    margin: 0 0 10px 0;
    font-size: 20px;
    font-weight: 800;
    color: #60a5fa;
}

.rk-step-text-box p {
    margin: 0 0 15px 0;
    font-size: 15px;
    line-height: 1.7;
    color: #cbd5e1;
}

.rk-step-text-box a {
    color: #38bdf8;
    text-decoration: none;
    border-bottom: 1px dashed #38bdf8;
    font-weight: 600;
    transition: all 0.3s;
}

.rk-step-text-box a:hover {
    color: #ffffff;
    border-bottom-style: solid;
}

.rk-tech-param {
    display: inline-block;
    background: rgba(56, 189, 248, 0.15);
    padding: 6px 12px;
    border-radius: 6px;
    border: 1px solid rgba(56, 189, 248, 0.3);
    font-size: 13px;
    font-weight: 700;
    color: #7dd3fc;
    margin-top: 5px;
}

.rk-tech-param.success {
    background: rgba(16, 185, 129, 0.15);
    border-color: rgba(16, 185, 129, 0.3);
    color: #6ee7b7;
}

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-inst-header, .rk-inst-interactive { padding: 30px 20px; }
    .rk-inst-header h2 { font-size: 24px; }
    .rk-step-wrapper { flex-direction: column; gap: 15px; padding: 15px; }
    .rk-step-nav { min-width: 100%; flex-direction: column; }
    .rk-step-btn { padding: 12px 15px; }
    .rk-step-content-area { padding: 20px; }
    .rk-step-visual { height: 140px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-instrukcja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Jak prawidłowo napełnić instalację ogrzewania podłogowego – instrukcja techniczna?",
    "description": "Poznaj 3-etapową, normatywną procedurę napełniania podłogówki: płukanie pętli, odpowietrzanie rozdzielacza oraz 24-godzinną próbę ciśnieniową na 6 bar.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-instrukcja",
    "name": "Parametry normatywne napełniania i próby szczelności instalacji podłogowej",
    "description": "Dokładne parametry techniczne dotyczące procedury pierwszego uruchomienia instalacji ogrzewania podłogowego, w tym wymagania normy PN-EN 1264-4.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "jak prawidłowo napełnić instalację ogrzewania podłogowego",
      "odpowietrzanie podłogówki",
      "płukanie pętli grzewczych",
      "próba ciśnieniowa 6 bar",
      "norma PN-EN 1264-4"
    ],
    "measurementTechnique": "Procedura 3-etapowa: Płukanie (5-10 min/pętla), Odpowietrzanie, Próba ciśnieniowa (6 bar, 24h).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Etap 1: Przepłukanie indywidualne pętli w celu usunięcia zanieczyszczeń.",
        "Etap 2: Odpowietrzenie układu przy wyłączonych siłownikach.",
        "Etap 3: Próba szczelności przy ciśnieniu 1,5x robocze (min. 6 bar) przez 24 godziny."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-instrukcja",
    "name": "Symulator Procedury Napełniania Instalacji",
    "description": "Interaktywne narzędzie edukacyjne ilustrujące 3 etapy normatywnego napełniania układu hydraulicznego: płukanie pętli, odpowietrzanie i próbę ciśnieniową.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-inst-container">
    <div class="rk-inst-header">
        <div class="rk-inst-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Procedura Techniczna
        </div>
        <h2>Jak prawidłowo napełnić instalację ogrzewania podłogowego – instrukcja techniczna?</h2>
        <p>Prawidłowe napełnianie instalacji musi odbywać się od najniższego punktu do najwyższego z wykorzystaniem dedykowanej pompy do napełniania (tzw. "płuczki"), co pozwala na uzyskanie niezbędnego ciśnienia statycznego rzędu 1,5 - 2,0 bara. Przejdź przez 3 obowiązkowe kroki inżynierskie.</p>
    </div>

    <div class="rk-inst-interactive">
        <div class="rk-step-wrapper">
            
            <div class="rk-step-nav" id="rkStepNav">
                <button class="rk-step-btn active" data-stage="1">
                    <span class="rk-step-num">1</span>
                    <span class="rk-step-title">Indywidualne Przepłukanie</span>
                </button>
                <button class="rk-step-btn" data-stage="2">
                    <span class="rk-step-num">2</span>
                    <span class="rk-step-title">Pełne Odpowietrzenie</span>
                </button>
                <button class="rk-step-btn" data-stage="3">
                    <span class="rk-step-num">3</span>
                    <span class="rk-step-title">Próba Szczelności (6 bar)</span>
                </button>
            </div>

            <div class="rk-step-content-area state-stage1" id="rkStepContentArea">
                
                <div class="rk-step-visual">
                    <svg id="svg-stage1" class="rk-svg-stage" viewBox="0 0 100 100" fill="none" stroke="currentColor">
                        <path d="M 10 50 L 90 50" stroke="#3b82f6" stroke-width="12" stroke-linecap="round"/>
                        <circle class="anim-particle" cx="30" cy="50" r="4" fill="#94a3b8" stroke="none"/>
                        <circle class="anim-particle" cx="40" cy="48" r="3" fill="#64748b" stroke="none"/>
                        <circle class="anim-particle" cx="20" cy="52" r="5" fill="#475569" stroke="none"/>
                        <path d="M 80 40 L 90 50 L 80 60" stroke="#60a5fa" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
                    </svg>

                    <svg id="svg-stage2" class="rk-svg-stage" viewBox="0 0 100 100" fill="none" stroke="currentColor">
                        <path d="M 40 70 L 60 70 L 60 40 L 55 30 L 45 30 L 40 40 Z" fill="#334155" stroke="#94a3b8" stroke-width="2"/>
                        <circle class="anim-bubble" cx="50" cy="60" r="3" fill="#bae6fd" stroke="none"/>
                        <circle class="anim-bubble" cx="46" cy="50" r="4" fill="#e0f2fe" stroke="none"/>
                        <circle class="anim-bubble" cx="54" cy="55" r="2" fill="#7dd3fc" stroke="none"/>
                        <path d="M 50 30 L 50 15" stroke="#94a3b8" stroke-width="2" stroke-dasharray="2 2"/>
                    </svg>

                    <svg id="svg-stage3" class="rk-svg-stage" viewBox="0 0 100 100" fill="none" stroke="currentColor">
                        <circle cx="50" cy="50" r="40" fill="#1e293b" stroke="#cbd5e1" stroke-width="4"/>
                        <path d="M 20 50 A 30 30 0 0 1 80 50" stroke="#10b981" stroke-width="6" stroke-linecap="round"/>
                        <line class="anim-needle" x1="50" y1="50" x2="25" y2="25" stroke="#f87171" stroke-width="4" stroke-linecap="round"/>
                        <circle cx="50" cy="50" r="6" fill="#cbd5e1" stroke="none"/>
                    </svg>
                </div>

                <div id="text-stage1" class="rk-step-text-box">
                    <h3>1. Przepłukanie Instalacji</h3>
                    <p>Zanim woda trafi na stałe do układu, każda pętla grzewcza musi być płukana indywidualnie (przy zamkniętych pozostałych obwodach). Proces ten pozwala wyrzucić z rur opiłki, piasek i resztki montażowe.</p>
                    <div class="rk-tech-param">Zalecany czas: 5-10 minut / pętlę</div>
                </div>

                <div id="text-stage2" class="rk-step-text-box">
                    <h3>2. Odpowietrzenie Układu</h3>
                    <p>Po napełnieniu układu wodą lub glikolem, zablokowane powietrze musi zostać uwolnione. Instalacja musi pracować przy wyłączonych (otwartych) <a href="https://projekt-ogrzewania.pl/silowniki-termoelektryczne-na-rozdzielaczach/">siłownikach termoelektrycznych na rozdzielaczach</a>, wymuszając ruch cieczy i wypychając pęcherzyki przez odpowietrzniki automatyczne.</p>
                    <p>Zignorowanie tego kroku to gwarantowane <a href="https://projekt-ogrzewania.pl/objawy-zapowietrzenia-ogrzewania-podlogowego/">objawy zapowietrzenia ogrzewania podłogowego</a>, takie jak szumy i zimne strefy na podłodze.</p>
                </div>

                <div id="text-stage3" class="rk-step-text-box">
                    <h3>3. Normatywna Próba Szczelności</h3>
                    <p>Najważniejszy test przed wylaniem posadzki betonowej. Próbę wykonujemy z wykorzystaniem manometru i pompy kontrolnej, aby zagwarantować całkowity brak wycieków.</p>
                    <p>Zgodnie z wymaganiami technacyjnymi wytycznymi dla <a href="https://projekt-ogrzewania.pl/proba-szczelnosci-ogrzewania-podlogowego/">próby szczelności ogrzewania podłogowego</a>, test jest konieczny do ważności gwarancji.</p>
                    <div class="rk-tech-param success">Norma: PN-EN 1264-4</div>
                    <div class="rk-tech-param success">Ciśnienie: 1,5x robocze (min. 6 bar) przez 24h</div>
                </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    const btns = document.querySelectorAll('.rk-step-btn');
    const contentArea = document.getElementById('rkStepContentArea');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Usunięcie aktywnej klasy ze wszystkich przycisków
            btns.forEach(b => b.classList.remove('active'));
            // Dodanie aktywnej klasy do klikniętego
            this.classList.add('active');

            // Pobranie numeru etapu
            const stage = this.getAttribute('data-stage');

            // Aktualizacja klasy na kontenerze głównym (zmienia widoczność SVG i tekstów)
            contentArea.className = 'rk-step-content-area state-stage' + stage;
        });
    });
});
</script>



<style>
:root {
    --rk-base-dark: #1e293b;
    --rk-base-blue: #0ea5e9;
    --rk-base-light-blue: #e0f2fe;
    --rk-base-green: #059669;
    --rk-base-green-light: #d1fae5;
    --rk-base-red: #dc2626;
    --rk-base-red-light: #fee2e2;
    --rk-base-orange: #ea580c;
    --rk-base-gray: #475569;
    --rk-base-border: #cbd5e1;
    --rk-base-bg: #ffffff;
    --rk-shadow-lg: 0 20px 40px -10px rgba(14, 165, 233, 0.15);
}

.rk-final-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-base-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow-lg);
    border: 1px solid var(--rk-base-blue);
    overflow: hidden;
}

/* Header Section */
.rk-final-header {
    padding: 40px 50px;
    background: linear-gradient(145deg, #0f172a 0%, var(--rk-base-dark) 100%);
    color: #ffffff;
    text-align: center;
    border-bottom: 4px solid var(--rk-base-blue);
}

.rk-final-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    color: #7dd3fc;
    padding: 6px 18px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
    border: 1px solid rgba(125, 211, 252, 0.3);
}

.rk-final-header h2 {
    font-size: 28px;
    font-weight: 900;
    line-height: 1.3;
    margin: 0;
    color: #ffffff;
}

/* Content Section */
.rk-final-content {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-text-box {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-base-gray);
    margin-bottom: 40px;
}

.rk-text-box strong {
    color: var(--rk-base-dark);
    font-weight: 700;
}

.rk-text-box a {
    color: var(--rk-base-blue);
    font-weight: 600;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-base-blue);
    transition: all 0.3s;
}

.rk-text-box a:hover {
    color: #0284c7;
    border-bottom-style: solid;
}

/* Interactive Simulator */
.rk-simulator-box {
    background: #ffffff;
    border: 1px solid var(--rk-base-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
}

.rk-simulator-box h3 {
    margin: 0 0 25px 0;
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-base-dark);
    text-align: center;
}

.rk-sim-controls {
    display: flex;
    gap: 20px;
    margin-bottom: 30px;
}

.rk-sim-btn {
    flex: 1;
    padding: 18px 20px;
    border-radius: 12px;
    border: 2px solid var(--rk-base-border);
    background: #f1f5f9;
    cursor: pointer;
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-base-gray);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
}

.rk-sim-btn:hover {
    background: #e2e8f0;
}

.rk-sim-btn.active[data-medium="demi"] {
    background: var(--rk-base-light-blue);
    border-color: var(--rk-base-blue);
    color: #0369a1;
    box-shadow: 0 10px 15px -3px rgba(14, 165, 233, 0.2);
}

.rk-sim-btn.active[data-medium="kran"] {
    background: var(--rk-base-red-light);
    border-color: var(--rk-base-red);
    color: #991b1b;
    box-shadow: 0 10px 15px -3px rgba(220, 38, 38, 0.2);
}

/* Simulator Visuals */
.rk-sim-visual {
    position: relative;
    height: 200px;
    border-radius: 12px;
    background: #0f172a;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    border: 2px solid #334155;
}

.rk-pipe {
    width: 80%;
    height: 60px;
    background: rgba(255, 255, 255, 0.1);
    border: 4px solid #475569;
    border-radius: 30px;
    position: relative;
    overflow: hidden;
}

.rk-water-flow {
    position: absolute;
    top: 0;
    left: 0;
    height: 100%;
    width: 200%;
    background: repeating-linear-gradient(
        45deg,
        rgba(255,255,255,0.1),
        rgba(255,255,255,0.1) 20px,
        transparent 20px,
        transparent 40px
    );
    transition: all 0.5s ease;
}

/* States */
.state-demi .rk-pipe { border-color: var(--rk-base-blue); }
.state-demi .rk-water-flow {
    background-color: rgba(14, 165, 233, 0.6);
    animation: flowDemi 2s linear infinite;
}
.state-demi .rk-status-icon { color: var(--rk-base-green); }

.state-kran .rk-pipe { border-color: #78350f; }
.state-kran .rk-water-flow {
    background-color: rgba(180, 83, 9, 0.8);
    animation: flowKran 6s linear infinite;
}
.state-kran .rk-calc-buildup {
    opacity: 1;
}
.state-kran .rk-status-icon { color: var(--rk-base-red); }

@keyframes flowDemi { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }
@keyframes flowKran { 0% { transform: translateX(0); } 100% { transform: translateX(-50%); } }

.rk-calc-buildup {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 25px;
    background: repeating-radial-gradient(circle at 10px 10px, #fde68a 0, #f59e0b 5px, transparent 6px);
    opacity: 0;
    transition: opacity 1s ease-in-out;
}

.rk-sim-feedback {
    margin-top: 25px;
    padding: 20px;
    border-radius: 12px;
    display: flex;
    align-items: flex-start;
    gap: 15px;
    background: #f8fafc;
    border-left: 4px solid transparent;
}

.state-demi .rk-sim-feedback { border-left-color: var(--rk-base-green); background: var(--rk-base-green-light); }
.state-kran .rk-sim-feedback { border-left-color: var(--rk-base-red); background: var(--rk-base-red-light); }

.rk-feedback-text h4 {
    margin: 0 0 5px 0;
    font-size: 16px;
    font-weight: 800;
}
.state-demi .rk-feedback-text h4 { color: #065f46; }
.state-kran .rk-feedback-text h4 { color: #991b1b; }

.rk-feedback-text p {
    margin: 0;
    font-size: 14px;
    color: var(--rk-base-gray);
    line-height: 1.5;
}

/* CTA Box */
.rk-cta-box {
    background: var(--rk-base-bg);
    padding: 40px 50px;
    text-align: center;
    border-top: 1px solid var(--rk-base-border);
}

.rk-cta-title {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-base-dark);
    margin: 0 0 15px 0;
}

.rk-btn-primary {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    background: var(--rk-base-dark);
    color: #ffffff;
    font-size: 16px;
    font-weight: 800;
    padding: 18px 36px;
    border-radius: 12px;
    text-decoration: none;
    transition: all 0.3s ease;
    border: 2px solid transparent;
    box-shadow: 0 10px 20px -5px rgba(30, 41, 59, 0.4);
}

.rk-btn-primary:hover {
    background: #0f172a;
    transform: translateY(-3px);
    box-shadow: 0 15px 25px -5px rgba(30, 41, 59, 0.5);
    border-color: var(--rk-base-blue);
}

.rk-btn-primary svg { transition: transform 0.3s; }
.rk-btn-primary:hover svg { transform: translateX(6px); }

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-final-header { padding: 30px 20px; }
    .rk-final-header h2 { font-size: 22px; }
    .rk-final-content, .rk-cta-box { padding: 30px 20px; }
    .rk-simulator-box { padding: 20px 15px; }
    
    .rk-sim-controls { flex-direction: column; gap: 12px; }
    .rk-sim-btn { padding: 15px; width: 100%; justify-content: flex-start; }
    
    .rk-pipe { width: 90%; }
    .rk-btn-primary { width: 100%; padding: 16px; font-size: 15px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Podsumowanie: Czym napełnić instalację ogrzewania podłogowego, by przetrwała lata?",
    "description": "Jakość napełnienia instalacji to kluczowy etap montażu. Zobacz, dlaczego woda demineralizowana z inhibitorem korozji to najlepsze zabezpieczenie instalacji ogrzewania podłogowego i pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset",
    "name": "Analiza wpływu jakości medium grzewczego na żywotność pomp ciepła i instalacji",
    "description": "Zestawienie porównawcze degradacji układu hydraulicznego (opory przepływu, kamień kotłowy) w zależności od wybranego płynu do napełniania instalacji CO.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "czym napełnić instalację ogrzewania podłogowego",
      "woda demineralizowana z inhibitorem korozji do ogrzewania podłogowego",
      "płyn do napełniania instalacji co",
      "medium grzewcze do pompy ciepła",
      "zabezpieczenie instalacji ogrzewania podłogowego",
      "jak napełnić podłogówkę"
    ],
    "measurementTechnique": "Symulacja przyrostu osadów i korozji w cyklu 5-letnim dla wody sieciowej vs wody demineralizowanej z inhibitorami.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Woda z kranu: Ryzyko osadzania się kamienia i korozji wżerowej elementów mosiężnych.",
        "Woda demineralizowana z inhibitorem: Pełna ochrona antykorozyjna i stała wydajność (COP) urządzenia."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp",
    "name": "Symulator Jakości Medium Grzewczego",
    "description": "Interaktywny panel wizualizujący wpływ twardej wody w porównaniu do profesjonalnego zabezpieczenia instalacji ogrzewania podłogowego na przepływ hydrauliczny rur.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-final-container" id="rk-podsumowanie-app">
    <div class="rk-final-header">
        <div class="rk-final-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"></path></svg>
            Eksperckie Podsumowanie
        </div>
        <h2>Czym napełnić instalację ogrzewania podłogowego, by przetrwała lata?</h2>
    </div>

    <div class="rk-final-content">
        <div class="rk-text-box">
            <p>Jakość napełnienia instalacji to ostatni, a zarazem jeden z najważniejszych etapów montażu. Zastanawiając się, <strong>czym napełnić instalację ogrzewania podłogowego</strong>, pamiętaj, że to od tej decyzji zależy sprawność serca Twojego domu – pompy ciepła. Używając profesjonalnej <a href="https://projekt-ogrzewania.pl/woda-demineralizowana-w-ogrzewaniu-podlogowym-dlaczego-to-najlepszy-wybor-zamiast-zwyklej-wody-z-kranu/">wody demineralizowanej z inhibitorem korozji do ogrzewania podłogowego</a>, chronisz układ przed zatorami i utrzymujesz maksymalną efektywność energetyczną.</p>
            
            <p>Zwykła woda to najczęstszy błąd. Osad wapienny drastycznie niszczy <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">pompy obiegowe w instalacji</a>. Idealne <strong>medium grzewcze do pompy ciepła</strong> musi być wolne od tlenu i soli mineralnych. Jeśli chcesz dowiedzieć się <strong>jak napełnić podłogówkę</strong> bez narażania się na awarie, odpowiedź jest prosta: dedykowany <strong>płyn do napełniania instalacji CO</strong> (lub woda demi) to jedyne skuteczne <strong>zabezpieczenie instalacji ogrzewania podłogowego</strong> przed degradacją, co bezpośrednio przekłada się na to, <a href="https://projekt-ogrzewania.pl/jak-czesto-trzeba-serwisowac-ogrzewanie-podlogowe/">jak często musisz serwisować system</a>.</p>
        </div>

        <div class="rk-simulator-box" id="rkSimBox">
            <h3>Wybierz medium grzewcze i sprawdź efekt po 5 latach:</h3>
            
            <div class="rk-sim-controls">
                <button class="rk-sim-btn active" data-medium="demi">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg>
                    Woda Demineralizowana + Inhibitor
                </button>
                <button class="rk-sim-btn" data-medium="kran">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v6M12 18v4M4.93 10.93l-4.24 4.24M23.31 8.69l-4.24 4.24"></path><circle cx="12" cy="12" r="2"></circle></svg>
                    Zwykła woda z kranu (Surowa)
                </button>
            </div>

            <div class="rk-sim-visual state-demi" id="rkSimVisual">
                <div class="rk-pipe">
                    <div class="rk-water-flow"></div>
                    <div class="rk-calc-buildup"></div>
                </div>
            </div>

            <div class="rk-sim-feedback" id="rkSimFeedback">
                <div class="rk-status-icon">
                    <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                </div>
                <div class="rk-feedback-text">
                    <h4>Czysta instalacja, 100% wydajności</h4>
                    <p id="rkFeedbackDesc">Brak osadów i korozji. Twój układ hydrauliczny pracuje na optymalnych przepływach, a rachunki za ogrzewanie pozostają na niezmiennie niskim poziomie. Pompa ciepła jest całkowicie bezpieczna.</p>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-cta-box">
        <h3 class="rk-cta-title">Buduj dom z inżynierską precyzją</h3>
        <p style="color: var(--rk-base-gray); margin-bottom: 25px; font-size: 15px; line-height: 1.6;">Twoje ogrzewanie jest tak sprawne, jak jego najsłabsze ogniwo. Nie pozwól, by była nim zanieczyszczona woda. Unikaj „oszczędności”, które z czasem stają się potężnymi kosztami serwisowymi.</p>
        
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-primary">
            CZYTAJ WIĘCEJ PORADNIKÓW EKSPERCKICH
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const btns = document.querySelectorAll('.rk-sim-btn');
    const visual = document.getElementById('rkSimVisual');
    const feedbackIcon = document.querySelector('.rk-status-icon');
    const feedbackDesc = document.getElementById('rkFeedbackDesc');
    const feedbackTitle = document.querySelector('.rk-feedback-text h4');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const medium = this.getAttribute('data-medium');

            if (medium === 'demi') {
                visual.className = 'rk-sim-visual state-demi';
                feedbackIcon.innerHTML = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>';
                feedbackTitle.textContent = 'Czysta instalacja, 100% wydajności';
                feedbackDesc.textContent = 'Brak osadów i korozji. Twój układ hydrauliczny pracuje na optymalnych przepływach, a rachunki za ogrzewanie pozostają na niezmiennie niskim poziomie. Pompa ciepła jest całkowicie bezpieczna.';
            } else {
                visual.className = 'rk-sim-visual state-kran';
                feedbackIcon.innerHTML = '<svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>';
                feedbackTitle.textContent = 'Ryzyko awarii i spadku mocy';
                feedbackDesc.innerHTML = 'Wytrącający się kamień wapienny zmniejsza średnicę rur i obciąża rotametry. Każdy <strong>1 mm osadu</strong> to ogromny spadek współczynnika wymiany ciepła, wymuszający intensywniejszą i droższą pracę sprężarki.';
            }
        });
    });
});
</script>



<style>
:root {
    --rk-proj-dark: #0f172a;
    --rk-proj-blue: #0284c7;
    --rk-proj-blue-light: #e0f2fe;
    --rk-proj-cyan: #06b6d4;
    --rk-proj-accent: #f59e0b;
    --rk-proj-red: #ef4444;
    --rk-proj-green: #10b981;
    --rk-proj-gray: #475569;
    --rk-proj-border: #cbd5e1;
    --rk-proj-bg: #ffffff;
    --rk-shadow: 0 10px 30px -10px rgba(2, 132, 199, 0.15);
}

.rk-proj-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-proj-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow);
    border: 1px solid var(--rk-proj-blue);
    overflow: hidden;
}

/* Nagłówek */
.rk-proj-header {
    padding: 40px 50px;
    background: linear-gradient(135deg, var(--rk-proj-dark) 0%, #1e293b 100%);
    color: #ffffff;
    border-bottom: 4px solid var(--rk-proj-cyan);
    position: relative;
}

.rk-proj-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(6, 182, 212, 0.2);
    color: #67e8f9;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 20px;
    border: 1px solid rgba(103, 232, 249, 0.3);
}

.rk-proj-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
}

/* Treść główna */
.rk-proj-content {
    padding: 40px 50px;
    background: #f8fafc;
}

.rk-proj-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--rk-proj-gray);
    margin-bottom: 40px;
}

.rk-proj-text a {
    color: var(--rk-proj-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-proj-blue);
    transition: all 0.3s;
}

.rk-proj-text a:hover {
    color: var(--rk-proj-cyan);
    border-bottom-style: solid;
}

/* Interaktywny Kalkulator Oporów */
.rk-interactive-box {
    background: #ffffff;
    border: 1px solid var(--rk-proj-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
}

.rk-interactive-box h3 {
    margin: 0 0 25px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-proj-dark);
    text-align: center;
}

/* Kontrolki (Toggle) */
.rk-toggle-group {
    display: flex;
    gap: 15px;
    margin-bottom: 30px;
}

.rk-toggle-btn {
    flex: 1;
    padding: 18px 20px;
    border-radius: 12px;
    border: 2px solid var(--rk-proj-border);
    background: #f1f5f9;
    cursor: pointer;
    font-size: 15px;
    font-weight: 700;
    color: var(--rk-proj-gray);
    transition: all 0.3s;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 8px;
}

.rk-toggle-btn span.sub {
    font-size: 12px;
    font-weight: 500;
    opacity: 0.8;
}

.rk-toggle-btn:hover { background: #e2e8f0; }

.rk-toggle-btn.active[data-fluid="water"] {
    background: var(--rk-proj-blue-light);
    border-color: var(--rk-proj-blue);
    color: #0369a1;
    box-shadow: 0 10px 15px -3px rgba(2, 132, 199, 0.2);
}

.rk-toggle-btn.active[data-fluid="glycol"] {
    background: #fef3c7;
    border-color: var(--rk-proj-accent);
    color: #b45309;
    box-shadow: 0 10px 15px -3px rgba(245, 158, 11, 0.2);
}

/* Dashboard z danymi i SVG */
.rk-dashboard {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    background: var(--rk-proj-dark);
    border-radius: 12px;
    padding: 25px;
    color: #ffffff;
    align-items: center;
}

.rk-dash-visual {
    position: relative;
    height: 160px;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* SVG Animacja Pompy i Rury */
.rk-svg-pump {
    width: 100%;
    height: 100%;
    max-width: 200px;
}

.anim-rotor {
    transform-origin: 50px 50px;
    transition: all 0.3s;
}

.state-water .anim-rotor { animation: spinRotor 3s linear infinite; }
.state-glycol .anim-rotor { animation: spinRotor 1s linear infinite; stroke: var(--rk-proj-red); }

.anim-pipe {
    transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}

.state-water .anim-pipe { stroke-width: 12; stroke: var(--rk-proj-cyan); }
.state-glycol .anim-pipe { stroke-width: 18; stroke: var(--rk-proj-accent); }

@keyframes spinRotor { 100% { transform: rotate(360deg); } }

/* Parametry */
.rk-dash-stats {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-stat-row {
    background: rgba(255, 255, 255, 0.05);
    padding: 12px 15px;
    border-radius: 8px;
    border-left: 3px solid transparent;
    display: flex;
    justify-content: space-between;
    align-items: center;
    transition: all 0.3s;
}

.rk-stat-label { font-size: 13px; color: #94a3b8; font-weight: 600; }
.rk-stat-value { font-size: 16px; font-weight: 800; }

.state-water .rk-stat-row { border-left-color: var(--rk-proj-cyan); }
.state-water .rk-stat-value { color: #67e8f9; }

.state-glycol .rk-stat-row { border-left-color: var(--rk-proj-accent); }
.state-glycol .rk-stat-value { color: #fcd34d; }
.state-glycol .rk-stat-row.warning { border-left-color: var(--rk-proj-red); }
.state-glycol .rk-stat-row.warning .rk-stat-value { color: #fca5a5; }

/* Ostrzeżenie */
.rk-warning-box {
    margin-top: 20px;
    padding: 15px;
    border-radius: 8px;
    background: #fef2f2;
    border: 1px solid #fecaca;
    color: #991b1b;
    font-size: 14px;
    line-height: 1.5;
    display: none;
    align-items: flex-start;
    gap: 10px;
}

.rk-warning-box svg { flex-shrink: 0; margin-top: 2px; }
.state-glycol + .rk-warning-box { display: flex; }

/* CTA Box */
.rk-cta-wrapper {
    background: #ffffff;
    padding: 40px 50px;
    text-align: center;
    border-top: 1px solid var(--rk-proj-border);
}

.rk-cta-wrapper h3 {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-proj-dark);
    margin: 0 0 15px 0;
}

.rk-cta-wrapper p {
    color: var(--rk-proj-gray);
    margin: 0 auto 30px auto;
    font-size: 15px;
    line-height: 1.6;
    max-width: 600px;
}

.rk-btn-sell {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    background: var(--rk-proj-blue);
    color: #ffffff;
    font-size: 16px;
    font-weight: 800;
    padding: 18px 36px;
    border-radius: 12px;
    text-decoration: none;
    text-transform: uppercase;
    letter-spacing: 1px;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    border: 2px solid transparent;
}

.rk-btn-sell:hover {
    transform: translateY(-3px);
    background: #0369a1;
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.5);
    border-color: #7dd3fc;
}

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-proj-header, .rk-proj-content, .rk-cta-wrapper { padding: 30px 20px; }
    .rk-proj-header h2 { font-size: 22px; }
    .rk-interactive-box { padding: 20px 15px; }
    .rk-toggle-group { flex-direction: column; gap: 10px; }
    .rk-dashboard { grid-template-columns: 1fr; gap: 30px; }
    .rk-dash-visual { height: 120px; }
    .rk-btn-sell { width: 100%; padding: 16px 20px; font-size: 14px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-projekt",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Jak wybór medium grzewczego wpływa na projekt ogrzewania podłogowego i dobór pompy ciepła?",
    "description": "Dowiedz się, dlaczego zastosowanie glikolu w podłogówce wymaga zmiany średnicy rur zasilających i większej mocy pompy obiegowej. Inżynierska analiza oporów hydraulicznych.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-projekt",
    "name": "Tabela wpływu medium grzewczego na opory hydrauliczne instalacji",
    "description": "Porównanie parametrów technicznych (lepkość, opór hydrauliczny, obciążenie pompy obiegowej) dla wody demineralizowanej i 30% roztworu glikolu propylenowego w systemach płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "projekt ogrzewania podłogowego",
      "OZC a medium grzewcze",
      "opory hydrauliczne glikolu",
      "dobór pompy ciepła do podłogówki",
      "średnica rur zasilających rozdzielacz"
    ],
    "measurementTechnique": "Algorytm kalkulacyjny OZC uwzględniający wyższą lepkość kinematyczną glikolu (wymagany +1 wymiar średnicy rury zasilającej).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Woda: Standardowe opory, optymalny dobór średnicy magistrali (np. 25x2.5).",
        "Glikol 30%: Wzrost oporów o ok. 20-30%, wymóg zwiększenia średnicy magistrali (np. 32x3.0) lub mocy pompy obiegowej."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-projekt",
    "name": "Kalkulator Oporów Hydraulicznych Medium",
    "description": "Interaktywny panel ilustrujący bezpośredni wpływ zmiany medium grzewczego z wody na glikol na konieczność korekty projektu i wymiarów rur w instalacji CO.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-proj-container">
    <div class="rk-proj-header">
        <div class="rk-proj-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="9" y1="3" x2="9" y2="21"></line></svg>
            Wpływ na Inwestycję
        </div>
        <h2>Jak to wpływa na projekt ogrzewania podłogowego i dobór pompy ciepła?</h2>
    </div>

    <div class="rk-proj-content">
        <div class="rk-proj-text">
            <p>Wybór medium grzewczego ma fundamentalny wpływ na <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczenia OZC</a> i finalny <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">dobór pompy obiegowej</a> oraz samej pompy ciepła. Jeśli projekt zakłada użycie glikolu, musimy <strong>zwiększyć średnicę rur zasilających rozdzielacz o jeden wymiar</strong> lub zwiększyć moc pompy obiegowej ze względu na wyższe opory hydrauliczne (lepkość płynu). W moich projektach każdorazowo przeliczam straty ciśnienia dla konkretnego rodzaju medium – zaniedbanie tego elementu skutkuje szumami, hałasem w instalacji i niedogrzaniem stref końcowych w najdalszych pomieszczeniach.</p>
        </div>

        <div class="rk-interactive-box">
            <h3>Symulator Pracy Instalacji: Woda vs Glikol</h3>
            
            <div class="rk-toggle-group">
                <button class="rk-toggle-btn active" data-fluid="water">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg>
                    Woda Demineralizowana
                    <span class="sub">Standard projektowy</span>
                </button>
                <button class="rk-toggle-btn" data-fluid="glycol">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22a7 7 0 0 0 7-7c0-2-1-3.9-3-5.5s-3.5-4-4-6.5c-.5 2.5-2 4.9-4 6.5C6 11.1 5 13 5 15a7 7 0 0 0 7 7z"></path></svg>
                    Glikol (Roztwór 30%)
                    <span class="sub">Wymagana korekta OZC</span>
                </button>
            </div>

            <div id="rkDashboard" class="rk-dashboard state-water">
                <div class="rk-dash-visual">
                    <svg class="rk-svg-pump" viewBox="0 0 100 100" fill="none" stroke="currentColor">
                        <path class="anim-pipe" d="M 10 50 L 90 50" stroke-linecap="round"></path>
                        <circle cx="50" cy="50" r="25" fill="#1e293b" stroke="#cbd5e1" stroke-width="4"></circle>
                        <path class="anim-rotor" d="M 50 30 L 50 70 M 30 50 L 70 50" stroke="#67e8f9" stroke-width="6" stroke-linecap="round"></path>
                        <circle cx="50" cy="50" r="5" fill="#ffffff"></circle>
                    </svg>
                </div>
                
                <div class="rk-dash-stats">
                    <div class="rk-stat-row">
                        <span class="rk-stat-label">Opór hydrauliczny</span>
                        <span class="rk-stat-value" id="valResistance">Standardowy (1x)</span>
                    </div>
                    <div class="rk-stat-row">
                        <span class="rk-stat-label">Min. średnica zasilania</span>
                        <span class="rk-stat-value" id="valPipe">PEX 25x2.5 mm</span>
                    </div>
                    <div class="rk-stat-row" id="rowPump">
                        <span class="rk-stat-label">Praca pompy obiegowej</span>
                        <span class="rk-stat-value" id="valPump">Optymalna (Bieg I/II)</span>
                    </div>
                </div>
            </div>

            <div class="rk-warning-box">
                <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                <span><strong>Uwaga Inwestorze!</strong> Brak <a href="https://projekt-ogrzewania.pl/srednice-rur-w-ogrzewaniu-podlogowym/" style="color: #7f1d1d; font-weight: 700; text-decoration: underline;">korekty średnic rur</a> przy glikolu spowoduje dławienie przepływu. Pompa będzie pracować na maksymalnych obrotach (III bieg), generując szumy w rozdzielaczach i wyższe rachunki za prąd.</span>
            </div>
        </div>
    </div>

    <div class="rk-cta-wrapper">
        <h3>Nie zgaduj średnic rur. Zleć to inżynierom.</h3>
        <p>Błędy hydrauliczne na etapie doboru magistrali są nieodwracalne po wylaniu posadzki. Wybierz profesjonalny projekt, w którym precyzyjnie uwzględniamy lepkość wybranego medium grzewczego i opory każdej pojedynczej pętli.</p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-sell">
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            ZAMÓW PROJEKT OGRZEWANIA PODŁOGOWEGO
        </a>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const btns = document.querySelectorAll('.rk-toggle-btn');
    const dashboard = document.getElementById('rkDashboard');
    const rowPump = document.getElementById('rowPump');
    
    // Values
    const valResistance = document.getElementById('valResistance');
    const valPipe = document.getElementById('valPipe');
    const valPump = document.getElementById('valPump');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const fluid = this.getAttribute('data-fluid');

            if (fluid === 'water') {
                dashboard.className = 'rk-dashboard state-water';
                valResistance.textContent = 'Standardowy (1x)';
                valPipe.textContent = 'PEX 25x2.5 mm';
                valPump.textContent = 'Optymalna (Bieg I/II)';
                rowPump.classList.remove('warning');
            } else {
                dashboard.className = 'rk-dashboard state-glycol';
                valResistance.textContent = 'Podwyższony (+30%)';
                valPipe.textContent = 'PEX 32x3.0 mm (+1 wymiar)';
                valPump.textContent = 'Przeciążenie (Bieg III)';
                rowPump.classList.add('warning');
            }
        });
    });
});
</script>



<style>
:root {
    --rk-tbl-dark: #0f172a;
    --rk-tbl-blue: #0284c7;
    --rk-tbl-blue-light: #e0f2fe;
    --rk-tbl-red: #ef4444;
    --rk-tbl-red-light: #fef2f2;
    --rk-tbl-green: #10b981;
    --rk-tbl-green-light: #d1fae5;
    --rk-tbl-purple: #8b5cf6;
    --rk-tbl-purple-light: #ede9fe;
    --rk-tbl-gray: #475569;
    --rk-tbl-border: #cbd5e1;
    --rk-tbl-bg: #ffffff;
    --rk-shadow-tbl: 0 15px 35px -10px rgba(15, 23, 42, 0.12);
}

.rk-tbl-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-tbl-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow-tbl);
    border: 1px solid var(--rk-tbl-blue);
    overflow: hidden;
}

/* Nagłówek */
.rk-tbl-header {
    background: linear-gradient(135deg, var(--rk-tbl-dark) 0%, #1e293b 100%);
    padding: 40px 50px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-tbl-blue);
}

.rk-tbl-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(125, 211, 252, 0.3);
}

.rk-tbl-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-tbl-header p {
    color: #cbd5e1;
    font-size: 16px;
    line-height: 1.6;
    margin: 0;
}

/* Sekcja Interaktywnego Zestawienia */
.rk-tbl-interactive {
    padding: 40px 50px;
    background: #f8fafc;
}

/* Przełączniki (Zakładki) */
.rk-tbl-nav {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
    margin-bottom: 30px;
}

.rk-tbl-btn {
    padding: 15px 10px;
    border-radius: 12px;
    border: 2px solid var(--rk-tbl-border);
    background: #ffffff;
    cursor: pointer;
    text-align: center;
    transition: all 0.2s ease;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
}

.rk-tbl-btn:hover { background: #f1f5f9; }

.rk-tbl-btn-title {
    font-size: 14px;
    font-weight: 800;
    color: var(--rk-tbl-dark);
}

.rk-tbl-btn-sub {
    font-size: 12px;
    font-weight: 600;
    color: var(--rk-tbl-gray);
}

/* Aktywne stany zakładek */
.rk-tbl-btn.active[data-medium="tap"] { border-color: var(--rk-tbl-red); background: var(--rk-tbl-red-light); }
.rk-tbl-btn.active[data-medium="demi"] { border-color: var(--rk-tbl-green); background: var(--rk-tbl-green-light); }
.rk-tbl-btn.active[data-medium="pro"] { border-color: var(--rk-tbl-blue); background: var(--rk-tbl-blue-light); }
.rk-tbl-btn.active[data-medium="eth"] { border-color: var(--rk-tbl-purple); background: var(--rk-tbl-purple-light); }

/* Kontent Zestawienia */
.rk-tbl-content-area {
    background: #ffffff;
    border: 1px solid var(--rk-tbl-border);
    border-radius: 16px;
    padding: 30px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.rk-medium-pane {
    display: none;
}
.rk-medium-pane.active {
    display: block;
}

/* Grid Wady i Zalety */
.rk-pros-cons-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 30px;
    margin-top: 20px;
}

.rk-list-box {
    padding: 20px;
    border-radius: 12px;
}

.rk-list-pros { background: #f0fdf4; border: 1px solid #bbf7d0; }
.rk-list-cons { background: #fef2f2; border: 1px solid #fecaca; }

.rk-list-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 15px;
    font-size: 18px;
    font-weight: 800;
}

.rk-list-pros .rk-list-header { color: #166534; }
.rk-list-cons .rk-list-header { color: #991b1b; }

.rk-list-items {
    list-style: none;
    padding: 0;
    margin: 0;
}

.rk-list-items li {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    font-size: 15px;
    color: var(--rk-tbl-dark);
    margin-bottom: 10px;
    line-height: 1.5;
    font-weight: 600;
}
.rk-list-items li:last-child { margin-bottom: 0; }

.rk-list-items li svg { flex-shrink: 0; margin-top: 2px; }

/* SVG Statyczne Reprezentacje */
.rk-svg-static-header {
    display: flex;
    align-items: center;
    gap: 20px;
    padding-bottom: 20px;
    border-bottom: 1px solid var(--rk-tbl-border);
}

.rk-svg-icon-box {
    width: 60px;
    height: 60px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Kolory ikon */
.pane-tap .rk-svg-icon-box { background: var(--rk-tbl-red-light); color: var(--rk-tbl-red); }
.pane-demi .rk-svg-icon-box { background: var(--rk-tbl-green-light); color: var(--rk-tbl-green); }
.pane-pro .rk-svg-icon-box { background: var(--rk-tbl-blue-light); color: var(--rk-tbl-blue); }
.pane-eth .rk-svg-icon-box { background: var(--rk-tbl-purple-light); color: var(--rk-tbl-purple); }

.rk-svg-static-header h3 {
    margin: 0 0 5px 0;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-tbl-dark);
}

.rk-svg-static-header p {
    margin: 0;
    font-size: 14px;
    color: var(--rk-tbl-gray);
    font-weight: 600;
}

/* Mobilność */
@media (max-width: 768px) {
    .rk-tbl-header, .rk-tbl-interactive { padding: 30px 20px; }
    .rk-tbl-header h2 { font-size: 24px; }
    .rk-tbl-nav { grid-template-columns: 1fr 1fr; gap: 10px; }
    .rk-tbl-btn { padding: 12px; }
    .rk-tbl-content-area { padding: 20px; }
    .rk-pros-cons-grid { grid-template-columns: 1fr; gap: 15px; }
    .rk-svg-static-header { flex-direction: column; text-align: center; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-tabela",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Zestawienie mediów grzewczych: Woda vs Glikol (Zalety i Wady)",
    "description": "Techniczne porównanie wady i zalet wody wodociągowej, demineralizowanej oraz glikolu propylenowego i etylenowego w instalacjach ogrzewania podłogowego.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-tabela",
    "name": "Porównanie mediów grzewczych w instalacjach podłogowych: Woda vs Glikol",
    "description": "Tabularyczne zestawienie wad i zalet czynników roboczych w układach hydraulicznych, uwzględniające koszty, parametry wymiany ciepła oraz bezpieczeństwo toksykologiczne.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "woda wodociągowa w podłogówce",
      "woda demineralizowana z inhibitorem",
      "glikol propylenowy a etylenowy",
      "wady i zalety glikolu w co",
      "toksyczność glikolu etylenowego"
    ],
    "measurementTechnique": "Weryfikacja właściwości fizykochemicznych mediów roboczych na podstawie norm branżowych i analiz inżynierskich.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Woda wodociągowa: Zalety - Tania. Wady - Kamień, korozja.",
        "Woda demineralizowana + inhibitor: Zalety - Najlepsza sprawność. Wady - Wyższy koszt początkowy.",
        "Glikol propylenowy: Zalety - Ochrona przed zamarzaniem. Wady - Niższa sprawność.",
        "Glikol etylenowy: Zalety - Bardzo dobra ochrona. Wady - Toksyczny."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-tabela",
    "name": "Interaktywne Zestawienie Właściwości Mediów Grzewczych",
    "description": "Kalkulator oparty na zakładkach, pozwalający na błyskawiczne porównanie zagrożeń (np. toksyczność) i korzyści płynących z zastosowania konkretnego płynu do napełnienia instalacji CO.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-tbl-container">
    <div class="rk-tbl-header">
        <div class="rk-tbl-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
            Tabela Inżynierska
        </div>
        <h2>Czym napełnić instalację ogrzewania podłogowego? Zestawienie mediów</h2>
        <p>Wybierz nośnik ciepła z poniższej listy, aby sprawdzić jego realne wady i zalety z punktu widzenia projektanta HVAC. Dowiedz się, dlaczego tanie rozwiązania kosztują najwięcej.</p>
    </div>

    <div class="rk-tbl-interactive">
        
        <div class="rk-tbl-nav">
            <button class="rk-tbl-btn" data-medium="tap">
                <span class="rk-tbl-btn-title">Woda z kranu</span>
                <span class="rk-tbl-btn-sub">Surowa / Sieciowa</span>
            </button>
            <button class="rk-tbl-btn active" data-medium="demi">
                <span class="rk-tbl-btn-title">Woda Demi</span>
                <span class="rk-tbl-btn-sub">+ Inhibitor (Zalecane)</span>
            </button>
            <button class="rk-tbl-btn" data-medium="pro">
                <span class="rk-tbl-btn-title">Glikol Propylenowy</span>
                <span class="rk-tbl-btn-sub">Eko-ochrona (-15°C)</span>
            </button>
            <button class="rk-tbl-btn" data-medium="eth">
                <span class="rk-tbl-btn-title">Glikol Etylenowy</span>
                <span class="rk-tbl-btn-sub">Silnie toksyczny!</span>
            </button>
        </div>

        <div class="rk-tbl-content-area">
            
            <div class="rk-medium-pane pane-tap" id="pane-tap">
                <div class="rk-svg-static-header">
                    <div class="rk-svg-icon-box">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="13 2 3 14 12 14 11 22 21 10 12 10 13 2"></polygon></svg>
                    </div>
                    <div>
                        <h3>Woda wodociągowa (Kranówka)</h3>
                        <p>Zwykła woda prosto z sieci, niepoddana procesom demineralizacji.</p>
                    </div>
                </div>
                <div class="rk-pros-cons-grid">
                    <div class="rk-list-box rk-list-pros">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                            Zalety
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Skrajnie tania i łatwo dostępna na budowie.</li>
                        </ul>
                    </div>
                    <div class="rk-list-box rk-list-cons">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                            Wady
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Powoduje osadzanie się kamienia kotłowego na wymiennikach.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Błyskawiczna korozja wżerowa elementów mosiężnych i stalowych.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Ryzyko natychmiastowej utraty gwarancji producenta pompy ciepła.</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class="rk-medium-pane pane-demi active" id="pane-demi">
                <div class="rk-svg-static-header">
                    <div class="rk-svg-icon-box">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                    </div>
                    <div>
                        <h3>Woda demineralizowana + Inhibitor</h3>
                        <p>Standard Inżynierski "Budowa bez ściemy". Medium pozbawione twardości i tlenu.</p>
                    </div>
                </div>
                <div class="rk-pros-cons-grid">
                    <div class="rk-list-box rk-list-pros">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                            Zalety
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Najlepsza możliwa sprawność wymiany ciepła.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Całkowity brak osadów wapiennych (czyste rotametry).</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Pełna ochrona gwarancyjna pompy ciepła (zgodność z VDI 2035).</li>
                        </ul>
                    </div>
                    <div class="rk-list-box rk-list-cons">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                            Wady
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Wyższy koszt początkowy inwestycji.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Brak ochrony przed zamarznięciem układu (wymaga prądu).</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class="rk-medium-pane pane-pro" id="pane-pro">
                <div class="rk-svg-static-header">
                    <div class="rk-svg-icon-box">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M2 12h4l3-9 5 18 3-9h5"></path></svg>
                    </div>
                    <div>
                        <h3>Glikol propylenowy (Roztwór)</h3>
                        <p>Niezamarzające medium polecane do domów letniskowych i pomp ciepła Monoblok.</p>
                    </div>
                </div>
                <div class="rk-pros-cons-grid">
                    <div class="rk-list-box rk-list-pros">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                            Zalety
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Świetna ochrona przed zamarzaniem układu na zewnątrz.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Nietoksyczny – bezpieczny dla środowiska i domowników.</li>
                        </ul>
                    </div>
                    <div class="rk-list-box rk-list-cons">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                            Wady
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Niższa pojemność cieplna w stosunku do wody.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Wyższa lepkość kinematyczna (wymaga przeliczenia <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/" style="color: #991b1b; text-decoration: underline;">OZC</a>).</li>
                        </ul>
                    </div>
                </div>
            </div>

            <div class="rk-medium-pane pane-eth" id="pane-eth">
                <div class="rk-svg-static-header">
                    <div class="rk-svg-icon-box">
                        <svg width="32" height="32" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    </div>
                    <div>
                        <h3>Glikol etylenowy (Ostrzeżenie)</h3>
                        <p>Tansza alternatywa dla instalacji przemysłowych, odradzana w domach.</p>
                    </div>
                </div>
                <div class="rk-pros-cons-grid">
                    <div class="rk-list-box rk-list-pros">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                            Zalety
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Bardzo dobra ochrona przed ekstremalnym mrozem.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#166534" stroke-width="2"><polyline points="20 6 9 17 4 12"></polyline></svg> Tańszy od wersji propylenowej.</li>
                        </ul>
                    </div>
                    <div class="rk-list-box rk-list-cons" style="border-color: #fca5a5;">
                        <div class="rk-list-header">
                            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="15" y1="9" x2="9" y2="15"></line><line x1="9" y1="9" x2="15" y2="15"></line></svg>
                            Wady
                        </div>
                        <ul class="rk-list-items">
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> <strong>Silnie toksyczny!</strong> Grozi zatruciem wody użytkowej przy awarii np. w wężownicy zasobnika CWU.</li>
                            <li><svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="#991b1b" stroke-width="2"><line x1="5" y1="12" x2="19" y2="12"></line></svg> Wymaga specjalistycznej utylizacji (niebezpieczny odpad).</li>
                        </ul>
                    </div>
                </div>
            </div>

        </div>
        
        <p style="text-align: center; margin-top: 25px; font-size: 14px; color: var(--rk-tbl-gray);">
            Zastanawiasz się, jakie to rodzi konsekwencje hydrauliczne? Sprawdź, dlaczego woda ma bezpośredni wpływ na <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/" style="color: var(--rk-tbl-blue); font-weight: 700;">dobór pompy obiegowej</a>.
        </p>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const btns = document.querySelectorAll('.rk-tbl-btn');
    const panes = document.querySelectorAll('.rk-medium-pane');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zresetuj wszystkie klasy
            btns.forEach(b => b.classList.remove('active'));
            panes.forEach(p => p.classList.remove('active'));

            // Dodaj klase aktywna do kliknietego
            this.classList.add('active');
            
            // Wyswietl odpowiednia zawartosc uzywajac data-medium (Brak animacji, natychmiastowe przejscie)
            const targetMedium = this.getAttribute('data-medium');
            const targetPane = document.getElementById('pane-' + targetMedium);
            targetPane.classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-case-dark: #0f172a;
    --rk-case-blue: #0284c7;
    --rk-case-blue-light: #e0f2fe;
    --rk-case-accent: #f59e0b;
    --rk-case-red: #dc2626;
    --rk-case-red-light: #fef2f2;
    --rk-case-green: #059669;
    --rk-case-green-light: #d1fae5;
    --rk-case-gray: #475569;
    --rk-case-border: #cbd5e1;
    --rk-case-bg: #ffffff;
    --rk-shadow-case: 0 20px 40px -10px rgba(2, 132, 199, 0.15);
}

.rk-case-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-case-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow-case);
    border: 1px solid var(--rk-case-blue);
    overflow: hidden;
}

/* Nagłówek Case Study */
.rk-case-header {
    background: linear-gradient(135deg, var(--rk-case-dark) 0%, #1e293b 100%);
    padding: 40px 50px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-case-accent);
    position: relative;
}

.rk-case-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(245, 158, 11, 0.2);
    color: #fcd34d;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(253, 230, 138, 0.3);
}

.rk-case-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

/* Sekcja Fabularna (Story) */
.rk-case-story {
    padding: 35px 50px 20px 50px;
    background: #ffffff;
}

.rk-story-grid {
    display: grid;
    grid-template-columns: 2fr 1fr;
    gap: 30px;
    align-items: center;
}

.rk-story-text {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-case-gray);
}

.rk-story-text strong {
    color: var(--rk-case-dark);
}

.rk-story-text a {
    color: var(--rk-case-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-case-blue);
    transition: all 0.3s;
}

.rk-story-text a:hover {
    color: #0369a1;
    border-bottom-style: solid;
}

.rk-story-meta {
    background: #f8fafc;
    border: 1px solid var(--rk-case-border);
    border-radius: 12px;
    padding: 20px;
}

.rk-meta-item {
    display: flex;
    justify-content: space-between;
    margin-bottom: 12px;
    font-size: 14px;
    border-bottom: 1px dashed #e2e8f0;
    padding-bottom: 8px;
}
.rk-meta-item:last-child { margin-bottom: 0; border-bottom: none; padding-bottom: 0; }
.rk-meta-label { color: var(--rk-case-gray); font-weight: 600; }
.rk-meta-value { color: var(--rk-case-dark); font-weight: 800; text-align: right; }

/* Interaktywny Symulator Decyzji */
.rk-case-interactive {
    padding: 0 50px 40px 50px;
}

.rk-case-interactive h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-case-dark);
    margin: 0 0 30px 0;
}

.rk-decision-panel {
    background: #f8fafc;
    border: 1px solid var(--rk-case-border);
    border-radius: 16px;
    padding: 25px;
}

/* Przełączniki */
.rk-decision-toggles {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 15px;
    margin-bottom: 30px;
}

.rk-dec-btn {
    padding: 20px;
    border-radius: 12px;
    border: 2px solid var(--rk-case-border);
    background: #ffffff;
    cursor: pointer;
    text-align: center;
    transition: all 0.3s ease;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
}

.rk-dec-btn:hover { background: #f1f5f9; }

.rk-dec-btn span.title { font-size: 16px; font-weight: 900; color: var(--rk-case-dark); }
.rk-dec-btn span.sub { font-size: 13px; font-weight: 600; color: var(--rk-case-gray); }

/* Stany Przełączników */
.rk-case-container.state-uncle .rk-dec-btn[data-choice="uncle"] {
    background: var(--rk-case-red-light);
    border-color: var(--rk-case-red);
    box-shadow: 0 8px 15px -3px rgba(220, 38, 38, 0.2);
}
.rk-case-container.state-uncle .rk-dec-btn[data-choice="uncle"] span.title { color: #991b1b; }

.rk-case-container.state-expert .rk-dec-btn[data-choice="expert"] {
    background: var(--rk-case-green-light);
    border-color: var(--rk-case-green);
    box-shadow: 0 8px 15px -3px rgba(5, 150, 105, 0.2);
}
.rk-case-container.state-expert .rk-dec-btn[data-choice="expert"] span.title { color: #065f46; }

/* Wizualizacja i Wyniki */
.rk-result-area {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    align-items: center;
}

.rk-result-svg-box {
    background: var(--rk-case-dark);
    border-radius: 12px;
    height: 200px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
    border: 2px solid #334155;
}

/* SVG Animacje (Plan domu i rury) */
.rk-house-plan { width: 90%; height: 90%; max-width: 200px; }
.rk-pipe-loop { fill: none; stroke-width: 8; stroke-linecap: round; stroke-linejoin: round; transition: all 0.5s ease; }

.state-uncle .rk-pipe-loop {
    stroke: #b45309;
    stroke-dasharray: 20 5;
    animation: clogPipe 3s linear forwards;
}

.state-expert .rk-pipe-loop {
    stroke: #0ea5e9;
    stroke-dasharray: none;
    animation: flowSmooth 2s linear infinite;
}

@keyframes clogPipe {
    0% { stroke-dashoffset: 100; stroke-width: 8; }
    100% { stroke-dashoffset: 0; stroke-width: 4; stroke: #78350f; } /* Rura zarasta */
}
@keyframes flowSmooth {
    0% { filter: drop-shadow(0 0 2px #0ea5e9); }
    50% { filter: drop-shadow(0 0 8px #38bdf8); }
    100% { filter: drop-shadow(0 0 2px #0ea5e9); }
}

.rk-result-text-box {
    padding: 20px;
    border-radius: 12px;
    background: #ffffff;
    border: 1px solid var(--rk-case-border);
    transition: all 0.3s;
}

.state-uncle .rk-result-text-box { border-left: 5px solid var(--rk-case-red); }
.state-expert .rk-result-text-box { border-left: 5px solid var(--rk-case-green); }

.rk-result-text-box h4 {
    margin: 0 0 10px 0;
    font-size: 18px;
    font-weight: 800;
}

.state-uncle .rk-result-text-box h4 { color: #991b1b; }
.state-expert .rk-result-text-box h4 { color: #065f46; }

.rk-result-text-box p {
    margin: 0 0 15px 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-case-gray);
}

.rk-result-cost {
    display: inline-block;
    padding: 6px 12px;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 800;
}

.state-uncle .rk-result-cost { background: var(--rk-case-red-light); color: #b91c1c; }
.state-expert .rk-result-cost { background: var(--rk-case-green-light); color: #047857; }

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-case-header, .rk-case-story, .rk-case-interactive { padding: 25px 20px; }
    .rk-case-header h2 { font-size: 22px; }
    .rk-story-grid { grid-template-columns: 1fr; gap: 20px; }
    .rk-decision-toggles { grid-template-columns: 1fr; gap: 10px; }
    .rk-dec-btn { padding: 15px; }
    .rk-result-area { grid-template-columns: 1fr; }
    .rk-result-svg-box { height: 160px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Case Study: Samodzielny montaż ogrzewania podłogowego w domu 90 m² – Wiktor z Przeworska",
    "description": "Budowa systemem gospodarczym i dylemat inwestora: posłuchać wujka i wlać kranówkę, czy postawić na inżynierski standard? Poznaj realne skutki obu decyzji dla domu 90 m2.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-casestudy",
    "name": "Porównanie kosztów eksploatacji ogrzewania podłogowego: System Gospodarczy vs Standard Inżynierski",
    "description": "Zestawienie obrazujące ryzyko finansowe i serwisowe w przypadku nieprawidłowego napełnienia instalacji w domu jednorodzinnym o powierzchni 90 m2.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "samodzielny montaż ogrzewania podłogowego",
      "ogrzewanie podłogowe systemem gospodarczym",
      "koszt ogrzewania domu 90m2",
      "woda z kranu czy demineralizowana",
      "błędy przy montażu podłogówki"
    ],
    "measurementTechnique": "Projekcja kosztów na przestrzeni 3 lat dla instalacji 90m2: brak kosztów serwisowych (woda demi) vs koszty płukania chemicznego i wymiany rotametrów (kranówka).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Porada Wujka (Woda z kranu): Koszt naprawczy po 3 latach ~2500 PLN (płukanie, rotametry, spadek COP).",
        "Standard Budowa Bez Ściemy (Woda demi): Koszt prewencyjny ~400 PLN, oszczędność na rachunkach z tytułu pełnej sprawności pompy ciepła."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-casestudy",
    "name": "Symulator Decyzji Inwestorskiej: System Gospodarczy",
    "description": "Narzędzie interaktywne ilustrujące zjawisko zarastania rur grzewczych (kamień) przy zastosowaniu nieuzdatnionej wody kontra stabilna praca układu zalanego wodą demineralizowaną.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-case-container state-expert" id="rkCaseContainer">
    <div class="rk-case-header">
        <div class="rk-case-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
            Case Study: System Gospodarczy
        </div>
        <h2>Samodzielny montaż podłogówki w domu 90 m² – Dylemat Wiktora</h2>
    </div>

    <div class="rk-case-story">
        <div class="rk-story-grid">
            <div class="rk-story-text">
                <p>Wiktor buduje dom w Przeworsku. Zdecydował się na <a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-czy-warto-robic-to-samemu/">samodzielny montaż ogrzewania podłogowego</a> z pomocą ojca i wujka – typowy polski system gospodarczy. Rozłożyli pętle, zamontowali mosiężny rozdzielacz i nadszedł kluczowy moment: <strong>napełnianie układu</strong>.</p>
                <p>Wujek radzi stanowczo: <em>"Wiktor, podłączaj szlauch do kranu. Zawsze tak robiliśmy, woda to woda, beton wszystko przykryje i będzie grzać"</em>. Wiktor jednak, czytając mój blog, miał wątpliwości. Czy wlanie kranówki to jeden z tych <a href="https://projekt-ogrzewania.pl/samodzielny-montaz-ogrzewania-podlogowego-5-bledow-ktorych-nie-naprawisz-po-wylewce/">5 błędów, których nie naprawisz po wylewce</a>?</p>
            </div>
            <div class="rk-story-meta">
                <div class="rk-meta-item">
                    <span class="rk-meta-label">Inwestor</span>
                    <span class="rk-meta-value">Wiktor, Przeworsk</span>
                </div>
                <div class="rk-meta-item">
                    <span class="rk-meta-label">Powierzchnia</span>
                    <span class="rk-meta-value">90 m²</span>
                </div>
                <div class="rk-meta-item">
                    <span class="rk-meta-label">Zład wody</span>
                    <span class="rk-meta-value">~80 Litrów</span>
                </div>
                <div class="rk-meta-item">
                    <span class="rk-meta-label">Metoda</span>
                    <span class="rk-meta-value">System gospodarczy</span>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-case-interactive">
        <h3>Sprawdź, jak ta decyzja wpłynie na koszty Wiktora po 3 latach:</h3>
        
        <div class="rk-decision-panel">
            <div class="rk-decision-toggles">
                <button class="rk-dec-btn" data-choice="uncle">
                    <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"></path><line x1="12" y1="9" x2="12" y2="13"></line><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
                    <span class="title">Porada Wujka</span>
                    <span class="sub">Woda z kranu (0 PLN na start)</span>
                </button>
                <button class="rk-dec-btn" data-choice="expert">
                    <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
                    <span class="title">Standard Inżyniera</span>
                    <span class="sub">Woda Demi + Inhibitor (~400 PLN)</span>
                </button>
            </div>

            <div class="rk-result-area">
                <!-- SVG Wizualizacja -->
                <div class="rk-result-svg-box">
                    <svg class="rk-house-plan" viewBox="0 0 100 100">
                        <!-- Obrys domu -->
                        <rect x="10" y="10" width="80" height="80" fill="none" stroke="#475569" stroke-width="2" rx="4"></rect>
                        <!-- Pętle ogrzewania podłogowego (Ślimak) -->
                        <path class="rk-pipe-loop" d="M 20 20 L 80 20 L 80 80 L 30 80 L 30 40 L 60 40 L 60 60 L 40 60"></path>
                        <!-- Pompa ciepła ikona -->
                        <circle cx="90" cy="50" r="8" fill="#1e293b" stroke="#cbd5e1" stroke-width="2"></circle>
                    </svg>
                </div>

                <!-- Wynik tekstowy -->
                <div class="rk-result-text-box" id="rkResultText">
                    <!-- Treść podmieniana przez JS -->
                    <h4>Pełna sprawność hydrauliczna</h4>
                    <p>Instalacja pozostaje sterylnie czysta. Brak korozji, wymiennik pompy ciepła bez grama osadu. Oszczędność prądu pokrywa koszt zakupu wody demi już w pierwszym sezonie grzewczym.</p>
                    <span class="rk-result-cost">Bilans: +2500 PLN oszczędności vs awaria</span>
                </div>
            </div>
        </div>
        
        <p style="text-align: center; margin-top: 25px; font-size: 14px; color: var(--rk-case-gray);">
            Zastanawiasz się nad budżetem? Zobacz <a href="https://projekt-ogrzewania.pl/ile-kosztuje-100-m%c2%b2-ogrzewania-podlogowego/" style="color: var(--rk-case-blue); font-weight: 700;">ile realnie kosztuje 100 m² ogrzewania podłogowego</a> przy wykonaniu prawidłowym.
        </p>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const container = document.getElementById('rkCaseContainer');
    const btns = document.querySelectorAll('.rk-dec-btn');
    const textBox = document.getElementById('rkResultText');

    const contents = {
        uncle: `
            <h4>Katastrofa powolnego zarastania</h4>
            <p>Po 3 latach rotametry stają się czarne i nieczytelne. W twardej wodzie z kranu z wytrąconego wapnia tworzy się kamień kotłowy. Zmniejsza się średnica rur, a rachunki za prąd rosną o 15% z powodu izolacji wymiennika w pompie ciepła.</p>
            <span class="rk-result-cost">Koszty serwisu: ~2500 PLN (Płukanie chemiczne)</span>
        `,
        expert: `
            <h4>Pełna sprawność hydrauliczna</h4>
            <p>Instalacja "Budowa bez ściemy" pozostaje sterylnie czysta. Brak korozji, wymiennik pompy ciepła nie ma grama osadu. Oszczędność na poborze prądu pokrywa wydatek na wodę zdemineralizowaną już w pierwszym roku.</p>
            <span class="rk-result-cost">Bilans: 100% sprawności przez dekady</span>
        `
    };

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            const choice = this.getAttribute('data-choice');
            
            // Zmiana klasy kontenera dla CSS
            container.className = 'rk-case-container state-' + choice;
            
            // Delikatne zniknięcie tekstu i podmiana
            textBox.style.opacity = '0';
            setTimeout(() => {
                textBox.innerHTML = contents[choice];
                textBox.style.opacity = '1';
            }, 200);
        });
    });
});
</script>



<style>
:root {
    --rk-exp-dark: #0f172a;
    --rk-exp-blue: #0284c7;
    --rk-exp-blue-light: #e0f2fe;
    --rk-exp-gray: #475569;
    --rk-exp-gray-light: #f1f5f9;
    --rk-exp-border: #cbd5e1;
    --rk-exp-bg: #ffffff;
    --rk-exp-accent: #0ea5e9;
    --rk-exp-gold: #b45309;
    --rk-exp-gold-light: #fef3c7;
}

.rk-exp-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-exp-bg);
    border-radius: 20px;
    box-shadow: 0 15px 35px -10px rgba(2, 132, 199, 0.12);
    border: 1px solid var(--rk-exp-blue);
    overflow: hidden;
}

/* Nagłówek i Profil */
.rk-exp-header {
    background: linear-gradient(135deg, var(--rk-exp-dark) 0%, #1e293b 100%);
    padding: 0;
    border-bottom: 4px solid var(--rk-exp-blue);
    display: flex;
    flex-direction: column;
}

.rk-exp-title-bar {
    padding: 30px 40px 20px 40px;
}

.rk-exp-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(2, 132, 199, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(125, 211, 252, 0.2);
}

.rk-exp-title-bar h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
    color: #ffffff;
}

.rk-exp-profile-section {
    display: flex;
    align-items: stretch;
    background: rgba(255, 255, 255, 0.03);
    border-top: 1px solid rgba(255, 255, 255, 0.1);
}

.rk-exp-photo-box {
    padding: 30px 40px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-right: 1px solid rgba(255, 255, 255, 0.1);
}

.rk-exp-photo {
    width: 140px;
    height: 140px;
    border-radius: 12px;
    object-fit: cover;
    border: 3px solid var(--rk-exp-blue);
    box-shadow: 0 4px 15px rgba(0,0,0,0.3);
}

.rk-exp-bio {
    padding: 30px 40px;
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-exp-quote {
    font-size: 18px;
    font-weight: 700;
    color: #ffffff;
    line-height: 1.6;
    margin: 0 0 20px 0;
    font-style: italic;
}

.rk-exp-quote::before { content: '"'; color: var(--rk-exp-blue); font-size: 24px; }
.rk-exp-quote::after { content: '"'; color: var(--rk-exp-blue); font-size: 24px; }

.rk-exp-socials {
    display: flex;
    gap: 15px;
    align-items: center;
}

.rk-exp-social-link {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255,255,255,0.1);
    color: #cbd5e1;
    padding: 8px 16px;
    border-radius: 8px;
    text-decoration: none;
    font-size: 13px;
    font-weight: 700;
    border: 1px solid rgba(255,255,255,0.1);
}

.rk-exp-social-link:hover {
    background: var(--rk-exp-blue);
    color: #ffffff;
    border-color: var(--rk-exp-blue);
}

/* Interaktywny Panel Eksperta (Brak animacji, natychmiastowe przełączanie) */
.rk-exp-interactive {
    padding: 40px;
    background: #f8fafc;
}

.rk-exp-interactive h3 {
    margin: 0 0 25px 0;
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-exp-dark);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.rk-interactive-grid {
    display: grid;
    grid-template-columns: 300px 1fr;
    gap: 20px;
    background: #ffffff;
    border: 1px solid var(--rk-exp-border);
    border-radius: 16px;
    padding: 15px;
}

/* Przyciski zakładek */
.rk-exp-tabs {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.rk-exp-tab-btn {
    padding: 18px 20px;
    text-align: left;
    background: var(--rk-exp-gray-light);
    border: 2px solid transparent;
    border-radius: 12px;
    cursor: pointer;
    font-size: 15px;
    font-weight: 800;
    color: var(--rk-exp-gray);
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.rk-exp-tab-btn.active {
    background: var(--rk-exp-blue-light);
    border-color: var(--rk-exp-blue);
    color: var(--rk-exp-dark);
}

.rk-exp-tab-btn svg { stroke: var(--rk-exp-gray); }
.rk-exp-tab-btn.active svg { stroke: var(--rk-exp-blue); }

/* Zawartość zakładek */
.rk-exp-content-area {
    background: var(--rk-exp-dark);
    border-radius: 12px;
    padding: 30px;
    color: #ffffff;
    display: flex;
    flex-direction: column;
}

.rk-exp-pane {
    display: none;
}

.rk-exp-pane.active {
    display: block;
}

.rk-pane-header {
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 20px;
    padding-bottom: 15px;
    border-bottom: 1px solid rgba(255,255,255,0.1);
}

.rk-pane-icon {
    width: 48px;
    height: 48px;
    background: rgba(255,255,255,0.1);
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-exp-accent);
}

.rk-pane-title {
    font-size: 18px;
    font-weight: 800;
    margin: 0;
    color: #f1f5f9;
}

.rk-pane-text {
    font-size: 15px;
    line-height: 1.7;
    color: #cbd5e1;
    margin: 0 0 20px 0;
}

.rk-pane-text strong {
    color: #ffffff;
}

.rk-pane-verdict {
    background: rgba(14, 165, 233, 0.15);
    border-left: 4px solid var(--rk-exp-accent);
    padding: 15px 20px;
    border-radius: 0 8px 8px 0;
    font-size: 14px;
    font-weight: 700;
    color: #7dd3fc;
}

/* Statyczne SVG w zakładkach */
.rk-static-svg-box {
    margin-top: 20px;
    background: #1e293b;
    border-radius: 8px;
    padding: 20px;
    text-align: center;
    border: 1px solid #334155;
}

/* Mobile */
@media (max-width: 768px) {
    .rk-exp-title-bar { padding: 25px 20px; }
    .rk-exp-title-bar h2 { font-size: 22px; }
    .rk-exp-profile-section { flex-direction: column; }
    .rk-exp-photo-box { border-right: none; border-bottom: 1px solid rgba(255,255,255,0.1); padding: 20px; }
    .rk-exp-bio { padding: 25px 20px; text-align: center; }
    .rk-exp-quote { font-size: 16px; }
    .rk-exp-socials { justify-content: center; flex-wrap: wrap; }
    .rk-exp-interactive { padding: 25px 20px; }
    .rk-interactive-grid { grid-template-columns: 1fr; padding: 10px; gap: 10px; }
    .rk-exp-tab-btn { padding: 15px; font-size: 14px; }
    .rk-exp-content-area { padding: 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-ekspert",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Okiem eksperta: Robert Kucharski o tym, czym napełnić instalację ogrzewania podłogowego",
    "description": "Autorskie zestawienie kluczowych parametrów i weryfikacja techniczna instalacji płaszczyznowych. Zobacz, na co zwraca uwagę inżynier HVAC przy napełnianiu podłogówki.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-ekspert",
    "name": "Karta Weryfikacji Technicznej Instalacji by Robert Kucharski",
    "description": "Baza danych z wytycznymi kontrolnymi (Budowa bez ściemy) obejmującymi normy jakości medium, parametry ciśnieniowe oraz zgodność projektową OZC.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "czym napełnić instalację ogrzewania podłogowego opinie",
      "robert kucharski projekt ogrzewania",
      "weryfikacja instalacji podłogowej",
      "budowa bez ściemy podłogówka",
      "zabezpieczenie instalacji co"
    ],
    "measurementTechnique": "Algorytm weryfikacyjny (Checklista) sprawdzająca trzy filary bezpieczeństwa: parametry medium (<100 µS/cm), test ciśnieniowy (6 bar / 24h) oraz korekty lepkości w OZC.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Weryfikacja Medium: Wymóg wody demineralizowanej z inhibitorem zamiast surowej kranówki.",
        "Weryfikacja Szczelności: Obligatoryjna próba 6 bar udokumentowana protokołem.",
        "Weryfikacja Projektowa: Sprawdzenie oporów hydraulicznych przy zastosowaniu glikolu w pompach monoblok."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-ekspert",
    "name": "Panel Diagnostyczny Eksperta (Budowa bez ściemy)",
    "description": "Interaktywne narzędzie edukacyjne prezentujące kluczowe punkty weryfikacji instalacji grzewczej przed zalaniem posadzki, opatrzone komentarzem inżynierskim.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-exp-container">
    <div class="rk-exp-header">
        <div class="rk-exp-title-bar">
            <div class="rk-exp-badge">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
                Weryfikacja Techniczna
            </div>
            <h2>Okiem eksperta: Robert Kucharski o tym, czym napełnić instalację ogrzewania podłogowego</h2>
        </div>
        
        <div class="rk-exp-profile-section">
            <div class="rk-exp-photo-box">
                <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski - CEO Projekt-Ogrzewania.pl" class="rk-exp-photo">
            </div>
            <div class="rk-exp-bio">
                <p class="rk-exp-quote">Zdaniem Roberta Kucharskiego: Decyzja o tym, co wlejesz do instalacji, to test Twojej świadomości technicznej. Oszczędność kilkuset złotych na wodzie demineralizowanej to wyrok na żywotność pompy ciepła wydany z opóźnionym zapłonem. Budowa bez ściemy wymaga przestrzegania norm, a nie improwizacji.</p>
                
                <div class="rk-exp-socials">
                    <a href="https://www.linkedin.com/in/robert-kucharski-38069b48/" target="_blank" rel="noopener nofollow" class="rk-exp-social-link">
                        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path><rect x="2" y="9" width="4" height="12"></rect><circle cx="4" cy="4" r="2"></circle></svg>
                        Profil LinkedIn
                    </a>
                    <a href="https://www.facebook.com/projektogrzewaniapl/" target="_blank" rel="noopener nofollow" class="rk-exp-social-link">
                        <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"></path></svg>
                        Projekt Ogrzewania
                    </a>
                </div>
            </div>
        </div>
    </div>

    <div class="rk-exp-interactive">
        <h3>
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
            Karta Weryfikacji Inwestora
        </h3>
        
        <div class="rk-interactive-grid">
            <div class="rk-exp-tabs">
                <button class="rk-exp-tab-btn active" data-target="pane-water">
                    <span>1. Analiza Medium Grzewczego</span>
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
                </button>
                <button class="rk-exp-tab-btn" data-target="pane-pressure">
                    <span>2. Rygor Próby Szczelności</span>
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
                </button>
                <button class="rk-exp-tab-btn" data-target="pane-project">
                    <span>3. Korekta Projektu (Glikol)</span>
                    <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>
                </button>
            </div>

            <div class="rk-exp-content-area">
                
                <div class="rk-exp-pane active" id="pane-water">
                    <div class="rk-pane-header">
                        <div class="rk-pane-icon">
                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"></path></svg>
                        </div>
                        <h4 class="rk-pane-title">Wymóg wody demineralizowanej</h4>
                    </div>
                    <p class="rk-pane-text">Norma VDI 2035 nie pozostawia złudzeń. Napełnienie układu twardą kranówką to prosta droga do utraty gwarancji na pompę ciepła. <strong>Zawsze weryfikuj, czy instalator używa stacji demineralizującej i dodaje inhibitor.</strong></p>
                    <div class="rk-pane-verdict">
                        Werdykt: Przewodność elektryczna zładu musi wynosić poniżej 100 µS/cm przed rozruchem.
                    </div>
                    <div class="rk-static-svg-box">
                        <svg width="120" height="40" viewBox="0 0 120 40">
                            <rect x="0" y="10" width="120" height="20" rx="10" fill="#334155"></rect>
                            <rect x="0" y="10" width="40" height="20" rx="10" fill="#10b981"></rect>
                            <text x="50" y="24" fill="#cbd5e1" font-size="12" font-family="sans-serif">Wynik: OK (Demi)</text>
                        </svg>
                    </div>
                </div>

                <div class="rk-exp-pane" id="pane-pressure">
                    <div class="rk-pane-header">
                        <div class="rk-pane-icon">
                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><polyline points="12 6 12 12 16 14"></polyline></svg>
                        </div>
                        <h4 class="rk-pane-title">Rygor próby ciśnieniowej</h4>
                    </div>
                    <p class="rk-pane-text">Wielu "fachowców" wykonuje próbę powietrzem przez 2 godziny. To błąd w sztuce. Prawidłowa kontrola wg PN-EN 1264 to woda, <strong>ciśnienie 6 bar i minimum 24 godziny obserwacji</strong> przed wylaniem posadzki.</p>
                    <div class="rk-pane-verdict">
                        Werdykt: Brak pisemnego protokołu z testu na 6 bar = brak odbioru technicznego.
                    </div>
                    <div class="rk-static-svg-box">
                        <svg width="80" height="80" viewBox="0 0 100 100">
                            <circle cx="50" cy="50" r="45" fill="none" stroke="#cbd5e1" stroke-width="4"></circle>
                            <path d="M 20 50 A 30 30 0 0 1 80 50" stroke="#10b981" stroke-width="6" stroke-linecap="round" fill="none"></path>
                            <line x1="50" y1="50" x2="80" y2="50" stroke="#ef4444" stroke-width="4" stroke-linecap="round"></line>
                            <circle cx="50" cy="50" r="6" fill="#cbd5e1"></circle>
                            <text x="36" y="80" fill="#94a3b8" font-size="14" font-weight="bold" font-family="sans-serif">6 BAR</text>
                        </svg>
                    </div>
                </div>

                <div class="rk-exp-pane" id="pane-project">
                    <div class="rk-pane-header">
                        <div class="rk-pane-icon">
                            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><line x1="3" y1="9" x2="21" y2="9"></line><line x1="9" y1="21" x2="9" y2="9"></line></svg>
                        </div>
                        <h4 class="rk-pane-title">Uwzględnienie lepkości w OZC</h4>
                    </div>
                    <p class="rk-pane-text">Decydujesz się na roztwór glikolu propylenowego do pompy monoblok? Świetnie, ale pamiętaj: <strong>glikol jest gęstszy niż woda</strong>. Wymaga to przeliczenia średnicy rur magistralnych i doboru mocniejszej pompy obiegowej na etapie projektu.</p>
                    <div class="rk-pane-verdict">
                        Werdykt: Wlanie glikolu do instalacji policzonej pod wodę doprowadzi do dławienia przepływów.
                    </div>
                    <div class="rk-static-svg-box">
                        <svg width="180" height="40" viewBox="0 0 180 40">
                            <rect x="0" y="15" width="80" height="10" fill="#38bdf8"></rect>
                            <text x="10" y="10" fill="#cbd5e1" font-size="10" font-family="sans-serif">Woda: PEX 25</text>
                            
                            <rect x="100" y="10" width="80" height="20" fill="#f59e0b"></rect>
                            <text x="110" y="8" fill="#cbd5e1" font-size="10" font-family="sans-serif">Glikol: PEX 32</text>
                        </svg>
                    </div>
                </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    const tabs = document.querySelectorAll('.rk-exp-tab-btn');
    const panes = document.querySelectorAll('.rk-exp-pane');

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Usunięcie aktywnej klasy
            tabs.forEach(t => t.classList.remove('active'));
            panes.forEach(p => p.classList.remove('active'));

            // Aktywacja klikniętego elementu (Brak animacji, natychmiastowa zmiana display: block/none)
            this.classList.add('active');
            const targetId = this.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });
});
</script>



<style>
:root {
    --rk-faq-dark: #0f172a;
    --rk-faq-blue: #0284c7;
    --rk-faq-blue-hover: #0369a1;
    --rk-faq-light: #f8fafc;
    --rk-faq-border: #e2e8f0;
    --rk-faq-accent: #f59e0b;
    --rk-faq-green: #10b981;
    --rk-faq-text: #334155;
    --rk-faq-bg: #ffffff;
}

.rk-faq-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
    background: var(--rk-faq-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(2, 132, 199, 0.12);
    border: 1px solid var(--rk-faq-blue);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-faq-header {
    padding: 45px 50px;
    background: linear-gradient(135deg, var(--rk-faq-dark) 0%, #1e293b 100%);
    position: relative;
    border-bottom: 5px solid var(--rk-faq-blue);
}

.rk-faq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(255, 255, 255, 0.1);
    color: #e2e8f0;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
    border: 1px solid rgba(255, 255, 255, 0.2);
}

.rk-faq-header h2 {
    font-size: 28px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.rk-faq-header p {
    color: #94a3b8;
    font-size: 16px;
    margin: 0;
    line-height: 1.6;
    max-width: 700px;
}

/* Interaktywny Akordeon (Lista pytań) */
.rk-faq-list {
    padding: 30px 50px;
    background: #f8fafc;
}

.rk-faq-item {
    background: #ffffff;
    border: 1px solid var(--rk-faq-border);
    border-radius: 16px;
    margin-bottom: 15px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    overflow: hidden;
}

.rk-faq-item:hover {
    border-color: #bae6fd;
    box-shadow: 0 10px 15px -3px rgba(2, 132, 199, 0.1);
    transform: translateY(-2px);
}

.rk-faq-item.active {
    border-color: var(--rk-faq-blue);
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.15);
}

.rk-faq-trigger {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 25px 30px;
    background: transparent;
    border: none;
    cursor: pointer;
    text-align: left;
    gap: 20px;
}

.rk-faq-trigger h3 {
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-faq-dark);
    margin: 0;
    line-height: 1.4;
    transition: color 0.3s;
}

.rk-faq-item.active .rk-faq-trigger h3 {
    color: var(--rk-faq-blue);
}

.rk-faq-icon {
    flex-shrink: 0;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: #f1f5f9;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-faq-blue);
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-item.active .rk-faq-icon {
    background: var(--rk-faq-blue);
    color: #ffffff;
    transform: rotate(180deg);
}

.rk-faq-content {
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    background: #ffffff;
}

.rk-faq-inner {
    padding: 0 30px 30px 30px;
    border-top: 1px solid transparent;
}

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

.rk-faq-inner p {
    margin: 0;
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-faq-text);
}

.rk-faq-inner strong {
    color: var(--rk-faq-dark);
    font-weight: 700;
}

.rk-faq-inner a {
    color: var(--rk-faq-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid transparent;
    transition: all 0.3s;
}

.rk-faq-inner a:hover {
    border-bottom-color: var(--rk-faq-blue);
}

/* Wskaźniki techniczne (tagi) w odpowiedziach */
.rk-tech-tag {
    display: inline-block;
    background: #e0f2fe;
    color: #0369a1;
    padding: 2px 8px;
    border-radius: 6px;
    font-size: 14px;
    font-weight: 800;
    margin-top: 15px;
}

/* Mobile Adjustments */
@media (max-width: 768px) {
    .rk-faq-header, .rk-faq-list { padding: 30px 20px; }
    .rk-faq-header h2 { font-size: 24px; }
    .rk-faq-trigger { padding: 20px; flex-direction: row; }
    .rk-faq-trigger h3 { font-size: 16px; }
    .rk-faq-inner { padding: 0 20px 20px 20px; }
    .rk-faq-item.active .rk-faq-inner { padding-top: 20px; }
    .rk-faq-icon { width: 32px; height: 32px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "FAQ: Szybkie odpowiedzi dla inwestora – diagnoza i parametry",
    "description": "Najczęstsze pytania inwestorów dotyczące medium grzewczego. Dowiedz się, dlaczego rotametry mętnieją, jak dolewać glikol i jakie są optymalne temperatury zasilania dla pompy ciepła.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy wodę z instalacji trzeba wymieniać?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zaleca się wymianę medium lub uzupełnienie inhibitorów korozji co 3-5 lat, aby zachować skuteczność ochrony antykorozyjnej."
        }
      },
      {
        "@type": "Question",
        "name": "Dlaczego rotametry są mętne?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Zazwyczaj jest to wynik użycia twardej wody, która powoduje wytrącanie się osadów wapiennych, co wymaga czyszczenia lub wymiany wkładek rotametrów."
        }
      },
      {
        "@type": "Question",
        "name": "Jaka jest bezpieczna temperatura zasilania?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Dla podłogówki optymalna temperatura zasilania to 30-35°C, co zapewnia najwyższą efektywność (COP) pompy ciepła."
        }
      },
      {
        "@type": "Question",
        "name": "Czy można dolewać wody do instalacji z glikolem?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie, rozcieńczenie glikolu wodą obniża jego właściwości ochronne i zmienia temperaturę krzepnięcia, co może prowadzić do awarii przy ujemnych temperaturach."
        }
      },
      {
        "@type": "Question",
        "name": "Ile kosztuje profesjonalne przygotowanie wody?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Koszt zakupu demineralizatora lub specjalistycznego płynu z inhibitorem do średniej instalacji domowej to wydatek rzędu 400-800 PLN, co jest ułamkiem ceny awarii pompy ciepła."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-faq",
    "name": "Zestawienie interwałów serwisowych i parametrów roboczych instalacji podłogowej",
    "description": "Baza wiedzy definiująca normatywne temperatury zasilania (30-35°C), koszty demineralizacji wody oraz ramy czasowe wymiany inhibitorów w pompach ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wymiana wody w ogrzewaniu podłogowym",
      "czyszczenie mętnych rotametrów",
      "temperatura zasilania podłogówki COP",
      "dolewanie wody do glikolu",
      "cena demineralizatora do co"
    ],
    "measurementTechnique": "Analiza zapytań inwestorskich (FAQ) skorelowana z instrukcjami DTR producentów urządzeń grzewczych (interwały 3-5 lat, temp. 35°C).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Interwał wymiany inhibitora: 3 do 5 lat.",
        "Optymalna temperatura zasilania (Tz): 30°C - 35°C dla maksymalnego COP.",
        "Koszt prewencyjny (uzdatnienie): 400 - 800 PLN."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-faq",
    "name": "Interaktywna Baza Wiedzy (FAQ) – Diagnoza Instalacji",
    "description": "Dynamiczny komponent akordeonowy umożliwiający inwestorom szybką diagnozę problemów (np. mętne rotametry) i weryfikację parametrów roboczych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-faq-wrapper">
    <div class="rk-faq-header">
        <div class="rk-faq-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
            Baza Wiedzy Inwestora
        </div>
        <h2>FAQ: Szybkie odpowiedzi dla inwestora – diagnoza i parametry</h2>
        <p>Rozwiewamy techniczne mity. Poniżej znajdziesz konkretne, inżynierskie odpowiedzi na najczęstsze problemy zgłaszane po zalaniu jastrychu. Bez ściemy, same fakty.</p>
    </div>

    <div class="rk-faq-list" id="rkFaqAccordion">
        
        <div class="rk-faq-item">
            <button class="rk-faq-trigger" aria-expanded="false">
                <h3>Czy wodę z instalacji podłogowej trzeba wymieniać?</h3>
                <div class="rk-faq-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-inner">
                    <p>Zaleca się wymianę medium lub stanowcze uzupełnienie inhibitorów korozji <strong>co 3-5 lat</strong>. Proces ten jest niezbędny, aby zachować ciągłość ochrony antykorozyjnej w układzie, co chroni elementy mosiężne i stalowe przed utlenianiem.</p>
                    <div class="rk-tech-tag">Interwał serwisowy: 3-5 lat</div>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-trigger" aria-expanded="false">
                <h3>Dlaczego rotametry na rozdzielaczu są mętne?</h3>
                <div class="rk-faq-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-inner">
                    <p>Zazwyczaj jest to bezpośredni wynik napełnienia układu twardą wodą sieciową. Prowadzi to do wytrącania się osadów wapiennych oraz powstawania biofilmu. W takiej sytuacji konieczne jest mechaniczne czyszczenie lub całkowita wymiana wkładek. Przeczytaj więcej o tym, jak działa <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametr i wskaźnik przepływu w rozdzielaczu</a>.</p>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-trigger" aria-expanded="false">
                <h3>Jaka jest bezpieczna temperatura zasilania dla pompy ciepła?</h3>
                <div class="rk-faq-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-inner">
                    <p>Dla prawidłowo zaprojektowanej podłogówki optymalna i <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">bezpieczna temperatura zasilania to <strong>30-35°C</strong></a>. Utrzymanie tych parametrów roboczych gwarantuje najwyższą efektywność (wysoki wskaźnik COP) pompy ciepła i niższe rachunki za prąd.</p>
                    <div class="rk-tech-tag">Tz = 30°C - 35°C</div>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-trigger" aria-expanded="false">
                <h3>Czy można bezpiecznie dolewać wody do instalacji napełnionej glikolem?</h3>
                <div class="rk-faq-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-inner">
                    <p><strong>Zdecydowanie nie.</strong> Rozcieńczenie glikolu zwykłą wodą drastycznie obniża jego właściwości ochronne (inhibitory) i zmienia punkt krzepnięcia. W efekcie może to doprowadzić do rozerwania wymiennika w pompie typu monoblok przy pierwszych silnych mrozach. Poznaj <a href="https://projekt-ogrzewania.pl/glikol-w-ogrzewaniu-podlogowym-prawda-i-mity-ktore-musi-znac-kazdy-inwestor/">fakty i mity o glikolu w podłogówce</a>.</p>
                </div>
            </div>
        </div>

        <div class="rk-faq-item">
            <button class="rk-faq-trigger" aria-expanded="false">
                <h3>Ile realnie kosztuje profesjonalne przygotowanie wody do instalacji?</h3>
                <div class="rk-faq-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </div>
            </button>
            <div class="rk-faq-content">
                <div class="rk-faq-inner">
                    <p>Koszty są marginalne w stosunku do potencjalnych strat. Zakup demineralizatora stacjonarnego lub zlecenia napełnienia specjalistycznym płynem z inhibitorem dla średniego domu (ok. 150m²) to wydatek rzędu <strong>400 - 800 PLN</strong>. To zaledwie ułamek ceny ewentualnej wymiany zatartej sprężarki.</p>
                    <div class="rk-tech-tag">Koszt: 400-800 PLN</div>
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const faqItems = document.querySelectorAll('.rk-faq-item');

    faqItems.forEach(item => {
        const trigger = item.querySelector('.rk-faq-trigger');
        const content = item.querySelector('.rk-faq-content');

        trigger.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Zamknij wszystkie akordeony (opcjonalne, dla zachowania czystości interfejsu)
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.rk-faq-trigger').setAttribute('aria-expanded', 'false');
                otherItem.querySelector('.rk-faq-content').style.maxHeight = null;
            });

            // Jeśli kliknięty element nie był aktywny, otwórz go
            if (!isActive) {
                item.classList.add('active');
                trigger.setAttribute('aria-expanded', 'true');
                content.style.maxHeight = content.scrollHeight + "px";
            }
        });
    });
});
</script>



<style>
:root {
    --rk-dl-dark: #0f172a;
    --rk-dl-blue: #0284c7;
    --rk-dl-blue-light: #e0f2fe;
    --rk-dl-accent: #38bdf8;
    --rk-dl-gray: #475569;
    --rk-dl-border: #cbd5e1;
    --rk-dl-bg: #ffffff;
    --rk-shadow-dl: 0 10px 25px -5px rgba(2, 132, 199, 0.15);
}

.rk-dl-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-dl-bg);
    border-radius: 20px;
    box-shadow: var(--rk-shadow-dl);
    border: 1px solid var(--rk-dl-blue);
    overflow: hidden;
}

/* Nagłówek */
.rk-dl-header {
    background: linear-gradient(135deg, var(--rk-dl-dark) 0%, #1e293b 100%);
    padding: 35px 50px;
    color: #ffffff;
    border-bottom: 4px solid var(--rk-dl-accent);
}

.rk-dl-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.2);
    color: #7dd3fc;
    padding: 6px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(125, 211, 252, 0.3);
}

.rk-dl-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0 0 10px 0;
    line-height: 1.3;
}

.rk-dl-header p {
    color: #94a3b8;
    font-size: 15px;
    margin: 0;
    max-width: 700px;
    line-height: 1.6;
}

/* Sekcja Główna */
.rk-dl-content {
    display: grid;
    grid-template-columns: 1fr 350px;
    background: #f8fafc;
}

/* Lewa strona - Podgląd Infografiki */
.rk-dl-preview-box {
    padding: 40px;
    border-right: 1px solid var(--rk-dl-border);
    display: flex;
    flex-direction: column;
    align-items: center;
}

.rk-preview-image-wrapper {
    width: 100%;
    max-width: 400px;
    background: var(--rk-dl-dark);
    border-radius: 12px;
    padding: 10px;
    box-shadow: 0 4px 6px rgba(0,0,0,0.1);
    position: relative;
    cursor: pointer;
    border: 2px solid transparent;
    transition: border-color 0.2s;
}

.rk-preview-image-wrapper:hover {
    border-color: var(--rk-dl-accent);
}

.rk-preview-image-wrapper img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
}

.rk-preview-overlay {
    position: absolute;
    top: 0; left: 0; width: 100%; height: 100%;
    background: rgba(15, 23, 42, 0.7);
    border-radius: 10px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    opacity: 0;
    transition: opacity 0.2s;
    color: #ffffff;
}

.rk-preview-image-wrapper:hover .rk-preview-overlay {
    opacity: 1;
}

.rk-preview-overlay svg {
    width: 48px;
    height: 48px;
    margin-bottom: 10px;
}

.rk-preview-overlay span {
    font-size: 15px;
    font-weight: 800;
}

/* Prawa strona - Przyciski Pobierania */
.rk-dl-action-box {
    padding: 40px;
    background: #ffffff;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.rk-dl-action-box h3 {
    margin: 0 0 20px 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-dl-dark);
}

.rk-btn-download {
    display: flex;
    align-items: center;
    gap: 15px;
    width: 100%;
    padding: 16px 20px;
    border-radius: 12px;
    text-decoration: none;
    margin-bottom: 15px;
    border: 2px solid transparent;
    transition: background 0.2s, border-color 0.2s, transform 0.1s;
}

.rk-btn-download:active { transform: scale(0.98); }

.rk-btn-pdf {
    background: var(--rk-dl-blue);
    color: #ffffff;
    box-shadow: 0 4px 10px rgba(2, 132, 199, 0.3);
}

.rk-btn-pdf:hover {
    background: #0369a1;
}

.rk-btn-img {
    background: var(--rk-dl-blue-light);
    color: #0369a1;
    border-color: var(--rk-dl-blue);
}

.rk-btn-img:hover {
    background: #bae6fd;
}

.rk-btn-icon {
    width: 24px;
    height: 24px;
    flex-shrink: 0;
}

.rk-btn-text {
    display: flex;
    flex-direction: column;
}

.rk-btn-title {
    font-size: 15px;
    font-weight: 800;
}

.rk-btn-sub {
    font-size: 12px;
    font-weight: 500;
    opacity: 0.9;
}

/* Nota prawna */
.rk-dl-copyright {
    margin-top: auto;
    padding-top: 25px;
    border-top: 1px solid var(--rk-dl-border);
    font-size: 11px;
    line-height: 1.5;
    color: #64748b;
}

.rk-dl-copyright strong {
    color: var(--rk-dl-dark);
}

/* Modal (Powiększenie zdjęcia) */
.rk-modal {
    display: none; /* Sterowane z JS */
    position: fixed;
    z-index: 9999;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(15, 23, 42, 0.95);
    padding: 20px;
    box-sizing: border-box;
}

.rk-modal.active {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.rk-modal-content {
    max-width: 90%;
    max-height: 90vh;
    border-radius: 12px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.5);
    border: 2px solid var(--rk-dl-accent);
}

.rk-modal-close {
    position: absolute;
    top: 20px;
    right: 30px;
    color: #ffffff;
    font-size: 40px;
    font-weight: bold;
    cursor: pointer;
    background: none;
    border: none;
    padding: 0;
    line-height: 1;
}

.rk-modal-close:hover {
    color: var(--rk-dl-accent);
}

@media (max-width: 768px) {
    .rk-dl-content { grid-template-columns: 1fr; }
    .rk-dl-header { padding: 30px 20px; }
    .rk-dl-header h2 { font-size: 22px; }
    .rk-dl-preview-box { padding: 30px 20px; border-right: none; border-bottom: 1px solid var(--rk-dl-border); }
    .rk-dl-action-box { padding: 30px 20px; }
}
</style>

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#article-infografika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/"
    },
    "headline": "Materiały do pobrania: Infografika i instrukcja napełniania krok po kroku",
    "description": "Zapisz bezpłatną infografikę PDF (Budowa bez ściemy) zawierającą 7 inżynierskich kroków napełniania instalacji podłogowej i parametry wody grzewczej.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/06/Infografika-Czym-napelnic-instalacje-ogrzewania-podlogowego.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.facebook.com/projektogrzewaniapl/",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/",
        "https://remont.biz.pl/",
        "https://sobir.pl/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-06-14",
    "dateModified": "2026-06-14"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#dataset-infografika",
    "name": "Zestawienie mediów grzewczych i 7 kroków napełniania (Infografika PDF)",
    "description": "Zbiór wytycznych wizualnych dla instalatorów i inwestorów. Zawiera parametry dla 4 typów czynników grzewczych oraz 7-etapową instrukcję poprawnego napełniania układu.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika ogrzewanie podłogowe",
      "instrukcja napełniania podłogówki pdf",
      "woda do instalacji co pdf",
      "7 kroków napełniania instalacji",
      "robert kucharski materiały instalacyjne"
    ],
    "measurementTechnique": "Agregacja danych normatywnych (VDI 2035) do postaci graficznej matrycy decyzyjnej z parametrami zładu, odpowietrzania i próby 6 bar.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Plik: Infografika-Czym-napelnic-instalacje-ogrzewania-podlogowego.pdf",
        "Zawartość 1: Analiza Woda Demi vs Woda Kranowa vs Glikole.",
        "Zawartość 2: Check-lista 7 kroków do próby szczelności."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/#webapp-infografika",
    "name": "Eksplorator Materiałów Technicznych (Infografika)",
    "description": "Interaktywna przeglądarka dokumentacji pozwalająca na bezpieczne pobranie pliku PDF i podgląd schematów napełniania w wysokiej rozdzielczości.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<div class="rk-dl-container">
    <div class="rk-dl-header">
        <div class="rk-dl-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
            Materiały do pobrania
        </div>
        <h2>Ściąga na budowę: 7 kroków napełniania instalacji</h2>
        <p>Pobierz darmową infografikę, wydrukuj lub zapisz na telefonie. Miej pod ręką wszystkie normy, wady mediów i procedurę napełniania, gdy hydraulik pojawi się na budowie.</p>
    </div>

    <div class="rk-dl-content">
        <div class="rk-dl-preview-box">
            <div class="rk-preview-image-wrapper" id="rkImgPreviewTrigger">
                <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/06/Infografika-Czym-napelnic-instalacje-ogrzewania-podlogowego.webp" alt="Miniatura Infografiki: Czym napełnić instalację ogrzewania podłogowego" onerror="this.src='https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg'">
                
                <div class="rk-preview-overlay">
                    <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                    <span>Kliknij, aby powiększyć</span>
                </div>
            </div>
        </div>

        <div class="rk-dl-action-box">
            <h3>Wybierz format pliku:</h3>
            
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/06/Infografika-Czym-napelnic-instalacje-ogrzewania-podlogowego.pdf" target="_blank" rel="noopener noreferrer" class="rk-btn-download rk-btn-pdf">
                <svg class="rk-btn-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="12" y1="18" x2="12" y2="12"></line><polyline points="9 15 12 18 15 15"></polyline></svg>
                <div class="rk-btn-text">
                    <span class="rk-btn-title">Pobierz jako PDF</span>
                    <span class="rk-btn-sub">Wysoka jakość do druku (Wektor)</span>
                </div>
            </a>

            <button class="rk-btn-download rk-btn-img" id="rkBtnViewImg">
                <svg class="rk-btn-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg>
                <div class="rk-btn-text">
                    <span class="rk-btn-title">Wyświetl pełne zdjęcie</span>
                    <span class="rk-btn-sub">Szybki podgląd na ekranie</span>
                </div>
            </button>

            <div class="rk-dl-copyright">
                <strong>© 2026 Projekt-Ogrzewania.pl | Autor: Robert Kucharski.</strong><br>
                Udostępnianie materiału PDF dozwolone wyłącznie z zachowaniem logotypu portalu i bez modyfikacji pliku.
            </div>
        </div>
    </div>
</div>

<div class="rk-modal" id="rkImageModal">
    <button class="rk-modal-close" id="rkModalClose">&times;</button>
    <img decoding="async" class="rk-modal-content" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/06/Infografika-Czym-napelnic-instalacje-ogrzewania-podlogowego.webp" alt="Pełna Infografika: Napełnianie instalacji podłogowej" onerror="this.src='https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg'">
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const modal = document.getElementById('rkImageModal');
    const triggerBox = document.getElementById('rkImgPreviewTrigger');
    const triggerBtn = document.getElementById('rkBtnViewImg');
    const closeBtn = document.getElementById('rkModalClose');

    // Funkcja otwierająca modal
    const openModal = () => {
        modal.classList.add('active');
        document.body.style.overflow = 'hidden'; // Blokada przewijania strony
    };

    // Funkcja zamykająca modal
    const closeModal = () => {
        modal.classList.remove('active');
        document.body.style.overflow = ''; // Odblokowanie przewijania
    };

    // Nasłuchiwacze zdarzeń
    triggerBox.addEventListener('click', openModal);
    triggerBtn.addEventListener('click', openModal);
    closeBtn.addEventListener('click', closeModal);

    // Zamknięcie modala po kliknięciu w tło
    modal.addEventListener('click', function(e) {
        if (e.target === modal) {
            closeModal();
        }
    });

    // Zamknięcie na ESC
    document.addEventListener('keydown', function(e) {
        if (e.key === 'Escape' && modal.classList.contains('active')) {
            closeModal();
        }
    });
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/czym-napelnic-instalacje-ogrzewania-podlogowego/">Czym napełnić instalację 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/czym-napelnic-instalacje-ogrzewania-podlogowego/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
