<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archiwa błędy w próbie szczelności - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/bledy-w-probie-szczelnosci/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/bledy-w-probie-szczelnosci/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Tue, 05 May 2026 19:24: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 błędy w próbie szczelności - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/bledy-w-probie-szczelnosci/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>
	</channel>
</rss>
