<?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 pętla ogrzewania podłogowego - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/petla-ogrzewania-podlogowego/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/petla-ogrzewania-podlogowego/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Wed, 29 Apr 2026 21:02:59 +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 pętla ogrzewania podłogowego - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/petla-ogrzewania-podlogowego/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Maksymalna długość pętli ogrzewania podłogowego.</title>
		<link>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/</link>
					<comments>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#comments</comments>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Wed, 05 Feb 2025 20:55:07 +0000</pubDate>
				<category><![CDATA[Budowa i remont]]></category>
		<category><![CDATA[Dom pasywny]]></category>
		<category><![CDATA[Efektywność energetyczna]]></category>
		<category><![CDATA[Hydraulika]]></category>
		<category><![CDATA[Instalacje grzewcze]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Projektowanie instalacji]]></category>
		<category><![CDATA[Projektowanie instalacji grzewczych]]></category>
		<category><![CDATA[Projektowanie ogrzewania]]></category>
		<category><![CDATA[Projektowanie systemów grzewczych]]></category>
		<category><![CDATA[Technologie budowlane]]></category>
		<category><![CDATA[długość pętli grzewczej]]></category>
		<category><![CDATA[izolacja termiczna]]></category>
		<category><![CDATA[ogrzewanie podłogowe]]></category>
		<category><![CDATA[oszczędność energii]]></category>
		<category><![CDATA[pętla ogrzewania podłogowego]]></category>
		<category><![CDATA[pex 16 mm]]></category>
		<category><![CDATA[pex 20 mm]]></category>
		<category><![CDATA[pompa obiegowa]]></category>
		<category><![CDATA[projektowanie ogrzewania]]></category>
		<category><![CDATA[równoważenie hydrauliczne]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2095</guid>

					<description><![CDATA[<p>Planujesz montaż ogrzewania podłogowego? Maksymalna długość pętli ogrzewania podłogowego to parametr, od którego zależy komfort cieplny i oszczędność energii. Zbyt długa pętla powoduje zimne strefy na podłodze, przeciąża pompę i zwiększa rachunki. W artykule wyjaśniamy, jak dobrać optymalną długość rur PEX 16 mm i 20 mm, jak obliczyć wydajność pompy oraz dlaczego izolacja podłogi jest kluczowa. Poznaj praktyczne przykłady, wzory i błędy, których warto uniknąć, by system działał sprawnie przez lata!</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Maksymalna długość pętli ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<style>
:root {
    --primary: #0f172a;
    --accent: #0284c7; 
    --danger: #dc2626;
    --warning: #ea580c;
    --success: #16a34a;
    --bg-light: #f0f9ff; 
    --border-color: #e2e8f0;
}

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

.premium-hero-box::before {
    content: '';
    position: absolute;
    top: 0;
    right: 0;
    width: 300px;
    height: 300px;
    background: radial-gradient(circle, rgba(2, 132, 199, 0.05) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    transform: translate(30%, -30%);
    z-index: 0;
}

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

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

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

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

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

.hero-text a:hover {
    color: #0369a1;
}

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

.hero-modules-title {
    font-size: 14px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1px;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 15px;
}

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

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

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

.hero-card:hover {
    top: -5px;
    border-color: var(--accent);
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.1);
}

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

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

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

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

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "headline": "Maksymalna długość pętli ogrzewania podłogowego – granice, wzory i optymalizacja",
    "description": "Zaawansowany przewodnik inżynierski. Sprawdź, jaka jest maksymalna długość pętli ogrzewania podłogowego, jak obliczyć opór hydrauliczny i dlaczego rura 16 mm ma limit 100 metrów.",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl"
    },
    "license": "https://projekt-ogrzewania.pl/",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wartości graniczne oporów i długości dla obiegów grzewczych podłogowych",
    "description": "Zestawienie dopuszczalnych długości i wynikowych oporów hydraulicznych dla rur PEX/PERT stosowanych w niskotemperaturowych instalacjach płaszczyznowych wg normy PN-EN 1264.",
    "license": "https://projekt-ogrzewania.pl/",
    "variableMeasured": [
      {
        "@type": "PropertyValue",
        "name": "Limit długości rury 16x2.0 mm",
        "value": "80-100 m",
        "description": "Zalecana wartość maksymalna zapewniająca liniowy opór poniżej 20 kPa"
      },
      {
        "@type": "PropertyValue",
        "name": "Limit długości rury 20x2.0 mm",
        "value": "100-120 m",
        "description": "Wartość graniczna dla dużych przestrzeni, stosowana m.in. w otwartych salonach"
      },
      {
        "@type": "PropertyValue",
        "name": "Krytyczny spadek ciśnienia na pętli",
        "value": "Max 0,25 bar (25 000 Pa)",
        "description": "Graniczna wartość oporu gwarantująca poprawne wymuszenie przepływu przez standardową pompę obiegową"
      }
    ],
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "name": "Kalkulator Oporów Hydraulicznych i Straty Ciśnienia",
    "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#kalkulator-oporow",
    "description": "Interaktywne narzędzie inżynierskie do symulacji i obliczania oporów przepływu. Wskazuje, czy zaprojektowana długość pętli nie zablokuje przepływu masowego (l/min) i czy pompa obiegowa sprosta wygenerowanym oporom.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="premium-hero-box" id="hero-app-container">
    <div class="hero-content">
        
        <div class="hero-badge">
            <span>📏</span> Parametr Krytyczny Projektu
        </div>
        
        <p class="hero-text"><strong>Maksymalna długość pętli ogrzewania podłogowego</strong> to graniczna wartość rury grzejnej (najczęściej typu PEX lub PERT) ułożonej w jednym, ciągłym obiegu. Z punktu widzenia inżynierii sanitarnej, przekroczenie tego limitu skutkuje drastycznym wzrostem oporów hydraulicznych i natychmiastowym spadkiem wydajności cieplnej. Jeśli pętla jest zbyt długa, woda krążąca w systemie wychładza się zanim dotrze do końca obiegu, a standardowa pompa obiegowa traci zdolność do przetłoczenia wymaganej masy medium, co prowadzi do powstawania tzw. zimnych stref.</p>
        
        <p class="hero-text">Opierając się na wyliczeniach projektowych, normie <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">PN-EN 1264</a> oraz wieloletnim doświadczeniu z placów budowy, standardowo przyjmuje się, że dla najpopularniejszej rury o średnicy <strong>16&#215;2,0 mm</strong>, bezpieczna i maksymalna długość pętli ogrzewania podłogowego to <strong>80–100 metrów bieżących</strong>. W poniższym poradniku szczegółowo przeanalizujemy, z czego wynikają te restrykcje, jak średnica rury wpływa na limity i jak bezbłędnie zrównoważyć instalację.</p>

        <div class="hero-modules-title">W tym kompendium przeanalizujemy:</div>
        
        <div class="hero-grid">
            <div class="hero-card">
                <span class="hero-card-icon">🌊</span>
                <span class="hero-card-title">Opory hydrauliczne</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">📏</span>
                <span class="hero-card-title">Średnice rur a limity</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">⚖️</span>
                <span class="hero-card-title">Równoważenie obiegów</span>
            </div>
            <div class="hero-card">
                <span class="hero-card-icon">⚙️</span>
                <span class="hero-card-title">Wydajność pompy</span>
            </div>
        </div>

    </div>

    <noscript>
        <div style="padding: 20px 50px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <div style="font-size: 18px; color: #0f172a; margin-bottom: 15px; font-weight: bold;">Maksymalne granice parametrów pętli (wg PN-EN 1264)</div>
            <table style="width: 100%; border-collapse: collapse; font-size: 14px; text-align: left;">
                <thead>
                    <tr style="border-bottom: 2px solid #cbd5e1;">
                        <th style="padding: 10px 0; color: #475569;">Średnica rury PEX/PERT</th>
                        <th style="padding: 10px 0; color: #475569;">Maksymalna długość pętli</th>
                        <th style="padding: 10px 0; color: #475569;">Główne zadanie/limit</th>
                    </tr>
                </thead>
                <tbody>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">16 x 2.0 mm</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">80 &#8211; 100 mb</td>
                        <td style="padding: 10px 0; color: #0284c7;">Zachowanie oporu poniżej 20 kPa</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">17 x 2.0 mm</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">90 &#8211; 110 mb</td>
                        <td style="padding: 10px 0; color: #0284c7;">Margines błędu dla większych pomieszczeń</td>
                    </tr>
                    <tr style="border-bottom: 1px solid #e2e8f0;">
                        <td style="padding: 10px 0; font-weight: bold;">20 x 2.0 mm</td>
                        <td style="padding: 10px 0; color: #dc2626; font-weight: bold;">100 &#8211; 120 mb</td>
                        <td style="padding: 10px 0; color: #0284c7;">Zastosowanie w dużych salonach i halach</td>
                    </tr>
                    <tr>
                        <td style="padding: 10px 0; font-weight: bold;">Ważna zasada:</td>
                        <td colspan="2" style="padding: 10px 0; font-style: italic;">Różnica w długości między najkrótszą a najdłuższą pętlą na tym samym rozdzielaczu nie powinna przekraczać 15-20%.</td>
                    </tr>
                </tbody>
            </table>
        </div>
    </noscript>
</div>

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



<style>
:root {
    --st-primary: #0f172a;
    --st-panel: #ffffff;
    --st-accent: #0284c7;
    --st-accent-light: #e0f2fe;
    --st-text: #334155;
    --st-muted: #94a3b8;
    --st-border: #e2e8f0;
    --st-highlight: #f8fafc;
}

.smart-table-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--st-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--st-border);
    overflow: hidden;
}

.st-content-wrapper {
    padding: 40px 50px 20px 50px;
}

.st-text-section h2 {
    color: var(--st-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.st-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--st-text);
    margin-bottom: 20px;
}

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

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

.st-text-section a:hover {
    color: #1e3a8a;
}

/* ================= INTERAKTYWNE KONTROLKI ================= */
.st-interactive-header {
    background: var(--st-highlight);
    border: 1px solid var(--st-border);
    border-radius: 16px;
    padding: 25px;
    margin: 30px 50px 0 50px;
}

.st-instruction {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--st-muted);
    letter-spacing: 1px;
    margin-bottom: 15px;
    text-align: center;
}

.st-controls-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}

.st-btn {
    background: #ffffff;
    border: 2px solid var(--st-border);
    border-radius: 12px;
    padding: 12px 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--st-text);
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
}

.st-btn span {
    font-size: 11px;
    color: var(--st-muted);
    font-weight: 600;
}

.st-btn:hover {
    border-color: #bae6fd;
    background: #f0f9ff;
    transform: translateY(-2px);
}

.st-btn.active {
    border-color: var(--st-accent);
    background: var(--st-accent-light);
    color: var(--st-accent);
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.15);
}

.st-btn.active span {
    color: var(--st-accent);
}

/* ================= TABELA DANYCH (DESKTOP) ================= */
.st-table-container {
    padding: 0 50px 40px 50px;
}

.st-table-responsive {
    width: 100%;
    border-radius: 12px;
    border: 1px solid var(--st-border);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.st-table {
    width: 100%;
    border-collapse: collapse;
    min-width: 600px;
    background: #ffffff;
}

.st-table th {
    background: #f1f5f9;
    color: var(--st-primary);
    font-weight: 800;
    font-size: 13px;
    text-transform: uppercase;
    padding: 18px 15px;
    text-align: left;
    border-bottom: 2px solid var(--st-border);
    white-space: nowrap;
}

.st-table td {
    padding: 16px 15px;
    font-size: 15px;
    color: var(--st-text);
    border-bottom: 1px solid var(--st-border);
    transition: all 0.3s ease;
}

.st-table tbody tr {
    transition: all 0.3s ease;
}

/* Stany interaktywne tabeli */
.st-table.filtering tbody tr {
    opacity: 0.3;
    background: #ffffff;
}

.st-table.filtering tbody tr.highlighted {
    opacity: 1;
    background: var(--st-accent-light);
    transform: scale(1.01);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.st-table.filtering tbody tr.highlighted td {
    font-weight: 700;
    color: var(--st-primary);
    border-color: transparent;
}

.st-table.filtering tbody tr.highlighted td:first-child {
    border-left: 4px solid var(--st-accent);
}

/* ================= DYNAMICZNA WSKAZÓWKA ================= */
.st-tip-box {
    margin-top: 20px;
    padding: 15px 20px;
    border-radius: 12px;
    background: #fffbeb;
    border-left: 4px solid #f59e0b;
    font-size: 14px;
    color: #92400e;
    display: none;
    animation: stFadeIn 0.4s ease;
}

.st-tip-box.visible {
    display: block;
}

.st-tip-box strong {
    color: #b45309;
}

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

/* ================= WERSJA MOBILNA (UKŁAD KART) ================= */
@media (max-width: 768px) {
    .st-content-wrapper { padding: 30px 25px 15px 25px; }
    .st-interactive-header { margin: 20px 25px 0 25px; padding: 20px; }
    .st-controls-grid { grid-template-columns: 1fr 1fr; }
    .st-table-container { padding: 0 25px 30px 25px; margin-top: 15px; }
    
    /* Konwersja tabeli na karty */
    .st-table-responsive {
        border: none;
        box-shadow: none;
        background: transparent;
    }
    
    .st-table {
        min-width: 100%;
        display: block;
    }
    
    .st-table thead {
        display: none; /* Ukrywamy standardowe nagłówki */
    }
    
    .st-table tbody {
        display: block;
    }
    
    .st-table tbody tr {
        display: block;
        background: #ffffff;
        border: 1px solid var(--st-border);
        border-radius: 12px;
        margin-bottom: 15px;
        box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
        padding: 5px 0;
    }
    
    .st-table td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 12px 15px;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        text-align: right;
    }
    
    .st-table td:last-child {
        border-bottom: none;
    }
    
    /* Wyświetlanie etykiet data-label po lewej stronie */
    .st-table td::before {
        content: attr(data-label);
        font-weight: 800;
        font-size: 12px;
        color: var(--st-muted);
        text-transform: uppercase;
        text-align: left;
        margin-right: 15px;
        flex-shrink: 0;
        max-width: 50%;
    }

    /* Poprawka dla podświetlanego wiersza na mobile */
    .st-table.filtering tbody tr.highlighted {
        border: 2px solid var(--st-accent);
        transform: scale(1.02);
    }
    .st-table.filtering tbody tr.highlighted td:first-child {
        border-left: none; 
    }
}
</style>

<div class="smart-table-module" id="app-smart-table">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywna Tabela Parametrów Rur Ogrzewania Podłogowego",
        "description": "Moduł inżynierski pozwalający na dynamiczne filtrowanie i analizę parametrów krytycznych (długość, opór, moc) dla poszczególnych średnic rur PEX/PERT stosowanych w instalacjach płaszczyznowych.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#tabela-parametrow",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Filtrowanie wyników normy PN-EN 1264 dla średnic 16mm, 17mm, 20mm i 10mm",
          "Dynamiczne podświetlanie krytycznych oporów hydraulicznych (kPa)",
          "Kontekstowe porady projektowe dla wybranej średnicy rury"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zestawienie parametrów granicznych pętli ogrzewania podłogowego wg średnic",
        "description": "Tabela inżynierska korelująca średnicę rury z jej maksymalną długością bieżącą, oporem w kilopaskalach oraz generowaną mocą cieplną przy stałym parametrze ΔT=5K.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 16x2.0",
            "value": "Max 100m | Opór 15-20 kPa | Moc 1200-1500 W"
          },
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 17x2.0",
            "value": "Max 110m | Opór 15-22 kPa | Moc 1400-1700 W"
          },
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 20x2.0",
            "value": "Max 130m | Opór 18-25 kPa | Moc 1800-2200 W"
          },
          {
            "@type": "PropertyValue",
            "name": "Parametry graniczne PEX 10x1.3 (Kapilary)",
            "value": "Max 40m | Opór 10-15 kPa | Moc 300-500 W"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="st-content-wrapper">
        <div class="st-text-section">
            <h2>Jaka jest maksymalna długość pętli ogrzewania podłogowego dla różnych średnic rur?</h2>
            <p>Bezpośrednia odpowiedź zgodna z <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normą PN-EN 1264</a> oraz wytycznymi producentów (np. Rehau, Uponor, Kan-Therm) wskazuje, że dla rur <strong>16 mm limit to 100 m</strong>, a dla rur <strong>20 mm limit to 120 m</strong>. Przekroczenie tych wartości powoduje opór hydrauliczny powyżej 20 kPa (0,2 bara) na jednej pętli, co uniemożliwia poprawne <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">zrównoważenie instalacji</a> przy standardowych pompach obiegowych.</p>
            <p>W interaktywnej tabeli poniżej przedstawiam zestawienie parametrów granicznych, które stosuję w moich autorskich projektach:</p>
        </div>
    </div>

    <div class="st-interactive-header">
        <div class="st-instruction">👉 Wybierz średnicę rury, aby przeanalizować parametry</div>
        <div class="st-controls-grid">
            <button class="st-btn" data-target="pipe-16">16&#215;2.0 <span>Standard</span></button>
            <button class="st-btn" data-target="pipe-17">17&#215;2.0 <span>Optymalna</span></button>
            <button class="st-btn" data-target="pipe-20">20&#215;2.0 <span>Duże obiekty</span></button>
            <button class="st-btn" data-target="pipe-10">10&#215;1.3 <span>Ścienne/Kapilary</span></button>
        </div>
    </div>

    <div class="st-table-container">
        <div class="st-table-responsive">
            <table class="st-table" id="interactive-pipe-table">
                <thead>
                    <tr>
                        <th>Średnica rury (mm)</th>
                        <th>Maks. zalecana długość (m)</th>
                        <th>Maks. opór hydrauliczny (kPa)</th>
                        <th>Moc pętli (W) przy ΔT=5K</th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-row="pipe-16">
                        <td data-label="Średnica rury"><strong>PEX/PERT 16&#215;2,0</strong></td>
                        <td data-label="Maks. długość">80 – 100</td>
                        <td data-label="Maks. opór">15 – 20</td>
                        <td data-label="Moc pętli (ΔT=5K)">1200 – 1500</td>
                    </tr>
                    <tr data-row="pipe-17">
                        <td data-label="Średnica rury"><strong>PEX/PERT 17&#215;2,0</strong></td>
                        <td data-label="Maks. długość">90 – 110</td>
                        <td data-label="Maks. opór">15 – 22</td>
                        <td data-label="Moc pętli (ΔT=5K)">1400 – 1700</td>
                    </tr>
                    <tr data-row="pipe-20">
                        <td data-label="Średnica rury"><strong>PEX/PERT 20&#215;2,0</strong></td>
                        <td data-label="Maks. długość">110 – 130</td>
                        <td data-label="Maks. opór">18 – 25</td>
                        <td data-label="Moc pętli (ΔT=5K)">1800 – 2200</td>
                    </tr>
                    <tr data-row="pipe-10">
                        <td data-label="Średnica rury"><strong>PEX/PERT 10&#215;1,3 (kapilary)</strong></td>
                        <td data-label="Maks. długość">30 – 40</td>
                        <td data-label="Maks. opór">10 – 15</td>
                        <td data-label="Moc pętli (ΔT=5K)">300 – 500</td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="st-tip-box" id="st-dynamic-tip">
            </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez tagów nagłówkowych)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-smart-table');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0284c7;">Ochrona Zawartości</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Tabela interaktywna jest autorskim narzędziem serwisu Projekt-Ogrzewania.pl.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0284c7; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">PRZEJDŹ DO ŹRÓDŁA</a>
                </div>
            `;
            return; 
        }
    }

    // Słownik porad dla poszczególnych rur
    const tips = {
        'pipe-16': '<strong>Wskazówka Projektowa:</strong> Najbardziej uniwersalna średnica w domach jednorodzinnych. Przy pętlach zbliżających się do 100m, bezwzględnie stosuj rotametry do precyzyjnego równoważenia.',
        'pipe-17': '<strong>Wskazówka Projektowa:</strong> Kompromis idealny dla pomp ciepła. Nieznacznie większa średnica wewnętrzna drastycznie obniża opory przy zachowaniu łatwości gięcia rury.',
        'pipe-20': '<strong>Wskazówka Projektowa:</strong> Rura trudna w układaniu przy gęstym rozstawie (np. 10 cm), ale niezastąpiona w ogromnych salonach i halach przemysłowych ze względu na potężny udźwig przepływu.',
        'pipe-10': '<strong>Wskazówka Projektowa:</strong> Bardzo cienka rura, generująca błyskawicznie ogromne opory. Stosowana wyłącznie w małych pętlach ściennych (tzw. kapilarach) i łazienkach pod lustra.'
    };

    // Logika interakcji
    const buttons = document.querySelectorAll('.st-btn');
    const table = document.getElementById('interactive-pipe-table');
    const rows = table.querySelectorAll('tbody tr');
    const tipBox = document.getElementById('st-dynamic-tip');

    buttons.forEach(button => {
        button.addEventListener('click', function() {
            const target = this.getAttribute('data-target');

            // Resetowanie aktywnego guzika
            buttons.forEach(btn => btn.classList.remove('active'));
            this.classList.add('active');

            // Aktywacja trybu filtrowania tabeli
            table.classList.add('filtering');

            // Podświetlanie odpowiedniego wiersza
            rows.forEach(row => {
                if (row.getAttribute('data-row') === target) {
                    row.classList.add('highlighted');
                } else {
                    row.classList.remove('highlighted');
                }
            });

            // Wyświetlenie porady
            if (tips[target]) {
                tipBox.innerHTML = tips[target];
                tipBox.classList.add('visible');
            }
        });
    });
});
</script>



<style>
:root {
    --math-primary: #0f172a;
    --math-accent: #0ea5e9; 
    --math-bg: #f8fafc;
    --math-border: #e2e8f0;
    --math-text: #334155;
    --math-highlight: #f0f9ff;
}

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

.math-header {
    background: linear-gradient(135deg, var(--math-primary), #1e293b);
    color: #ffffff;
    padding: 35px 50px;
    position: relative;
    overflow: hidden;
}

.math-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(14, 165, 233, 0.2);
    border: 1px solid rgba(14, 165, 233, 0.4);
    color: #bae6fd;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.math-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0;
    line-height: 1.3;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.math-content {
    padding: 40px 50px;
    background: #ffffff;
}

.math-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--math-text);
    margin: 0 0 20px 0;
}

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

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

.math-text a:hover {
    color: #0284c7;
}

/* Sekcja Wzoru i Obliczeń */
.math-formula-container {
    background: var(--math-highlight);
    border: 1px solid #bae6fd;
    border-radius: 16px;
    padding: 30px;
    margin: 30px 0;
    position: relative;
}

.math-formula-title {
    font-size: 15px;
    font-weight: 800;
    color: var(--math-primary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-top: 0;
    margin-bottom: 20px;
    display: flex;
    align-items: center;
    gap: 10px;
}

.math-formula-title::before {
    content: '📊';
    font-size: 20px;
}

.math-equation-box {
    background: #ffffff;
    border: 1px solid var(--math-border);
    border-radius: 12px;
    padding: 25px;
    text-align: center;
    margin-bottom: 25px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.math-equation {
    font-size: 24px;
    font-family: 'Cambria Math', 'Times New Roman', serif;
    color: var(--math-primary);
    letter-spacing: 1px;
}

.math-variables {
    list-style: none;
    padding: 0;
    margin: 0;
}

.math-variables li {
    font-size: 15px;
    color: var(--math-text);
    margin-bottom: 12px;
    padding-left: 25px;
    position: relative;
}

.math-variables li::before {
    content: '•';
    position: absolute;
    left: 8px;
    color: var(--math-accent);
    font-weight: bold;
}

.math-variables li code {
    font-family: 'Cambria Math', 'Times New Roman', serif;
    font-size: 17px;
    color: var(--math-primary);
    font-weight: bold;
    background: transparent;
    padding: 0;
}

.math-result {
    margin-top: 20px;
    padding-top: 20px;
    border-top: 1px dashed #bae6fd;
    font-size: 16px;
    font-weight: 700;
    color: #0369a1;
}

@media (max-width: 768px) {
    .math-header { padding: 35px 25px; }
    .math-content { padding: 30px 25px; }
    .math-formula-container { padding: 20px; }
}
</style>

<div class="math-module-box" id="app-math-module">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Kalkulator Straty Ciśnienia i Oporów Hydraulicznych Pętli",
        "description": "Narzędzie i algorytm analityczny obliczający opór hydrauliczny (spadek ciśnienia w kPa) w rurach PEX 16mm w zależności od długości obiegu i prędkości przepływu wody grzewczej.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#obliczenia-oporow",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Wzór na spadek ciśnienia z uwzględnieniem prawa Hagena-Poiseuille’a",
          "Kalkulacja strat miejscowych i liniowych dla rury 16x2.0 mm",
          "Weryfikacja maksymalnej granicy obciążenia dla pomp obiegowych (np. 60 kPa)"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Współczynniki Oporów Liniowych dla Ogrzewania Podłogowego (Rura PEX)",
        "description": "Zestawienie zmiennych i stałych fizycznych wykorzystywanych do obliczania całkowitych oporów hydraulicznych w obiegach płaszczyznowych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Współczynnik oporu liniowego (R) dla PEX 16mm przy 2 l/min",
            "value": "150 Pa/m",
            "description": "Uśredniony opór stawiany przez 1 metr bieżący przewodu."
          },
          {
            "@type": "PropertyValue",
            "name": "Całkowita strata ciśnienia (Δp) dla pętli 100m",
            "value": "15 kPa",
            "description": "Bezpieczna granica obciążenia obwodu."
          },
          {
            "@type": "PropertyValue",
            "name": "Przepływ masowy",
            "value": "120 kg/h (ok. 2 l/min)",
            "description": "Wymagany strumień czynnika do pokrycia strat cieplnych."
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="math-header">
        <div class="math-badge">Fizyka Budowli</div>
        <h2>Dlaczego opór hydrauliczny jest ważniejszy niż sama długość rury?</h2>
    </div>

    <div class="math-content">
        <p class="math-text">Dla inżyniera HVAC sama fizyczna długość rury jest tylko wartością pochodną, z której wynika najważniejszy parametr – dopuszczalna strata ciśnienia. Zgodnie z prawami termodynamiki i aerodynamiki płynów (w tym prawem Hagena-Poiseuille’a), opór przepływu rośnie liniowo wraz z długością przewodu, ale w kwadracie wraz ze wzrostem prędkości tłoczonego medium. To właśnie dlatego tak krytyczny jest precyzyjny dobór <a href="https://projekt-ogrzewania.pl/kalkulator-doboru-pompy-obiegowej-w-ogrzewaniu-podlogowym/">pompy obiegowej w instalacji ogrzewania podłogowego</a>, która musi pokonać te siły tarcia.</p>

        <p class="math-text">Zobrazujmy to na przykładzie. W typowym projekcie, przy zapotrzebowaniu na ciepło wynoszącym 50 W/m² i rozstawie rur co 10 cm, na 1 m² przypada 10 mb rury. Jeśli nasza pętla osiągnie 120 m dla średnicy 16 mm, to przy przepływie niezbędnym do pokrycia strat ciepła, całkowity opór może skoczyć nawet do 35 kPa. Standardowa pompa w kotle gazowym lub pompie ciepła (np. o wysokości podnoszenia 6 m, co odpowiada ciśnieniu 60 kPa) musi obsłużyć nie tylko ten jeden obwód, ale także opory armatury, zaworów mieszających i głównej belki zasilającej, jaką stanowi <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacz do podłogówki</a>. Jeśli jedna zbyt długa pętla „zabierze” 35 kPa z dostępnych 60 kPa, na resztę systemu zostaje drastycznie mało mocy, co wprost prowadzi do niedogrzania najdalszych pomieszczeń i powstawania zimnych stref.</p>

        <div class="math-formula-container">
            <h3 class="math-formula-title">Obliczenie 1: Spadek ciśnienia w pętli</h3>
            
            <p class="math-text" style="font-size: 15px; margin-bottom: 15px;">Przyjmijmy do obliczeń najpopularniejszą rurę 16 mm, graniczną długość <strong>100 m</strong> i przepływ masowy rzędu <strong>120 kg/h</strong> (co odpowiada wskazaniu ok. 2 l/min na rotametrze). Wykorzystując współczynnik oporów liniowych dla przewodów z polietylenu sieciowanego (PEX), stosujemy poniższy algorytm:</p>

            <div class="math-equation-box">
                <span class="math-equation">&Delta;p = L &times; R + &Sigma;Z</span>
            </div>

            <ul class="math-variables">
                <li>Gdzie:</li>
                <li><code>L = 100 m</code> (długość rozwinięcia rury)</li>
                <li><code>R &approx; 150 Pa/m</code> (opór liniowy dla zadanej prędkości przepływu)</li>
                <li><code>&Sigma;Z</code> (suma oporów miejscowych – tu pominięta dla uproszczenia liniowego)</li>
            </ul>

            <div class="math-result">
                &Delta;p = 100 m &times; 150 Pa/m = 15 000 Pa = <strong>15 kPa</strong>
            </div>
        </div>

        <p class="math-text">Otrzymany wynik <strong>15 kPa</strong> to wartość wysoce bezpieczna dla prawidłowego zrównoważenia układu. Jednak wystarczy niepozorne zwiększenie długości do <strong>130 m</strong> przy utrzymaniu tego samego zapotrzebowania na przepływ, a opór liniowy podniesie się do ponad <strong>19,5 kPa</strong>. Jeśli dodamy do tego opory miejscowe na złączkach i belce rozdzielacza (kolejne 5–7 kPa), system niebezpiecznie zbliża się do granicy wydajności elektroniki pompowej pracującej na najniższych, energooszczędnych nastawach. Efekt? Znacząco wyższe zużycie prądu przez kotłownię.</p>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-math-module');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 25px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">
                    <span style="font-size: 45px; display: block; margin-bottom: 15px;">🛑</span>
                    <div style="font-weight: 900; font-size: 22px; margin-bottom: 12px;">Naruszenie praw autorskich</div>
                    <p style="font-size: 15px; margin-bottom: 20px; color: #991b1b;">Ten moduł obliczeniowy jest własnością intelektualną Projekt-Ogrzewania.pl. Kopiowanie skryptów bez zgody jest zabronione.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 12px 24px; background: #dc2626; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 14px;">ZOBACZ ORYGINALNE OBLICZENIA</a>
                </div>
            `;
        }
    }
});
</script>



<style>
:root {
    --sim-bg: #0f172a;
    --sim-panel: #1e293b;
    --sim-accent: #0ea5e9;
    --sim-accent-glow: rgba(14, 165, 233, 0.4);
    --sim-text: #f8fafc;
    --sim-muted: #94a3b8;
    --sim-danger: #ef4444;
    --sim-success: #10b981;
    --sim-border: #334155;
}

.sim-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid #e2e8f0;
    overflow: hidden;
}

.sim-text-section {
    padding: 40px 50px 10px 50px;
    color: #334155;
    font-size: 16px;
    line-height: 1.8;
}

.sim-text-section h2 {
    color: #0f172a;
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
}

.sim-text-section p {
    margin-bottom: 20px;
}

.sim-text-section a {
    color: #0284c7;
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
}

/* Nowe formatowanie bloków tekstu */
.sim-alert-box {
    padding: 15px 20px;
    border-radius: 12px;
    background: #fffbeb;
    border-left: 4px solid #f59e0b;
    color: #92400e;
    font-size: 15px;
    margin-bottom: 30px;
}

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

.sim-comp-card {
    padding: 25px;
    border-radius: 16px;
    border: 1px solid #e2e8f0;
}

.sim-comp-card.ok {
    background: #f0fdf4;
    border-top: 4px solid #16a34a;
}

.sim-comp-card.bad {
    background: #fef2f2;
    border-top: 4px solid #dc2626;
}

.sim-comp-card h3 {
    margin: 0 0 10px 0;
    font-size: 17px;
    font-weight: 800;
    color: #0f172a;
}

.sim-comp-card p {
    margin: 0;
    font-size: 14.5px;
    line-height: 1.6;
}

.sim-math-context {
    background: #f8fafc;
    padding: 30px;
    border-radius: 16px;
    border: 1px dashed #cbd5e1;
    margin-bottom: 30px;
}

.sim-equation-block {
    text-align: center;
    font-size: 20px;
    color: var(--sim-bg);
    margin: 20px 0;
    padding: 15px;
    background: #ffffff;
    border-radius: 12px;
    border: 1px solid #e2e8f0;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.sim-call-to-action {
    text-align: center;
    font-weight: 800;
    color: var(--sim-accent);
    font-size: 18px;
    margin-top: 10px;
}

/* ================= INTERAKTYWNY DASHBOARD ================= */
.sim-dashboard {
    background: var(--sim-bg);
    margin: 10px 50px 50px 50px;
    border-radius: 20px;
    padding: 35px;
    color: var(--sim-text);
    position: relative;
    border: 1px solid var(--sim-border);
    box-shadow: inset 0 0 40px rgba(0,0,0,0.5);
}

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

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

.sim-controls {
    background: var(--sim-panel);
    padding: 25px;
    border-radius: 16px;
    border: 1px solid var(--sim-border);
}

.sim-control-group {
    margin-bottom: 25px;
}

.sim-control-group:last-child {
    margin-bottom: 0;
}

.sim-label-row {
    display: flex;
    justify-content: space-between;
    margin-bottom: 12px;
}

.sim-label {
    font-size: 13px;
    font-weight: 700;
    color: var(--sim-muted);
    text-transform: uppercase;
}

.sim-value-display {
    font-size: 16px;
    font-weight: 900;
    color: var(--sim-text);
    background: rgba(0,0,0,0.3);
    padding: 4px 10px;
    border-radius: 6px;
    border: 1px solid var(--sim-border);
}

input[type=range].sim-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
}
input[type=range].sim-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    height: 20px;
    width: 20px;
    border-radius: 50%;
    background: var(--sim-accent);
    cursor: pointer;
    margin-top: -8px;
    box-shadow: 0 0 10px var(--sim-accent-glow);
    transition: 0.2s;
}
input[type=range].sim-slider::-webkit-slider-thumb:hover {
    transform: scale(1.2);
}
input[type=range].sim-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 6px;
    cursor: pointer;
    background: var(--sim-bg);
    border-radius: 4px;
    border: 1px solid var(--sim-border);
}

.sim-results {
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    background: var(--sim-panel);
    border-radius: 16px;
    border: 1px solid var(--sim-border);
    padding: 25px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

.sim-result-label {
    font-size: 12px;
    color: var(--sim-muted);
    text-transform: uppercase;
    font-weight: 700;
    letter-spacing: 1px;
    margin-bottom: 10px;
}

.sim-result-main {
    font-size: 48px;
    font-weight: 900;
    color: var(--sim-accent);
    line-height: 1;
    margin-bottom: 5px;
    font-family: 'Cambria Math', monospace;
    text-shadow: 0 0 20px var(--sim-accent-glow);
}

.sim-result-sub {
    font-size: 16px;
    color: var(--sim-muted);
    margin-bottom: 20px;
}

.sim-alert {
    padding: 12px 15px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    width: 100%;
    box-sizing: border-box;
    transition: all 0.3s ease;
}

.sim-alert.ok {
    background: rgba(16, 185, 129, 0.1);
    color: var(--sim-success);
    border: 1px solid rgba(16, 185, 129, 0.3);
}

.sim-alert.warn {
    background: rgba(239, 68, 68, 0.1);
    color: var(--sim-danger);
    border: 1px solid rgba(239, 68, 68, 0.3);
}

@media (max-width: 768px) {
    .sim-text-section { padding: 30px 25px 10px 25px; }
    .sim-comparison-grid { grid-template-columns: 1fr; }
    .sim-dashboard { margin: 20px 25px 30px 25px; padding: 25px; }
    .sim-grid { grid-template-columns: 1fr; gap: 20px; }
}
</style>

<div class="sim-module-wrapper" id="app-sim-interactive">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Symulator Przepływu Masowego i ΔT",
        "description": "Dynamiczny kalkulator inżynierski pozwalający na symulację wpływu zapotrzebowania na moc (W) oraz różnicy temperatur ΔT (K) na wymagany przepływ czynnika grzewczego (l/min). System ostrzega przed przekroczeniem limitów hydraulicznych dla rury 16mm.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#symulator-przeplywu",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Suwak zapotrzebowania na moc (Q) w zakresie 500W - 3000W",
          "Suwak różnicy temperatur (ΔT) w zakresie 4K - 12K",
          "Algorytm ostrzegający przed przepływem > 2.5 l/min wymuszającym podział na krótsze pętle"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zależność Długości Pętli, Przepływu i Różnicy Temperatur w Ogrzewaniu Płaszczyznowym",
        "description": "Zbiór danych wyjściowych dla optymalizacji ΔT przy zachowaniu reżimu oporów hydraulicznych w obwodach grzewczych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Optymalna różnica temperatur (ΔT)",
            "value": "5K - 10K",
            "description": "Zalecany zakres projektowy dla współpracy z pompami ciepła."
          },
          {
            "@type": "PropertyValue",
            "name": "Pojemność cieplna wody (c)",
            "value": "1.163 Wh/(kg·K)",
            "description": "Właściwa pojemność cieplna wykorzystywana we wzorze na przepływ."
          },
          {
            "@type": "PropertyValue",
            "name": "Krytyczny przepływ masowy (G)",
            "value": "> 2.5 l/min",
            "description": "Punkt, w którym dla rury 16mm generowane opory wymuszają podział dużej pętli na dwie mniejsze."
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="sim-text-section">
        <h2>Jak długość pętli wpływa na różnicę temperatur (&Delta;T)?</h2>
        
        <p>Właściwa różnica temperatur między zasilaniem a powrotem w ogrzewaniu podłogowym powinna mieścić się w wąskim, precyzyjnie dobranym zakresie <strong>5K – 10K</strong>. Jeśli <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalna długość pętli ogrzewania podłogowego</a> zostanie drastycznie przekroczona, woda w końcowej części obiegu będzie już mocno wychłodzona.</p>
        
        <p>Stworzy to wysoce niepożądany efekt <strong>&#8222;zimnej podłogi&#8221;</strong> w dalszej części pomieszczenia. Zjawisko to dokładnie opisuje <a href="https://projekt-ogrzewania.pl/spadek-temperatury-dt-roznica-miedzy-temperatura-zasilania-a-powrotu/">spadek temperatury ΔT</a> w układach zamkniętych.</p>

        <div class="sim-alert-box">
            <strong>Ważne:</strong> Problem jest szczególnie niebezpieczny przy współpracy z nowoczesnymi źródłami, takimi jak <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompa ciepła</a>, które pracują najefektywniej przy bardzo niskim ΔT (np. 5K).
        </div>

        <div class="sim-comparison-grid">
            <div class="sim-comp-card ok">
                <h3>Krótka pętla (np. 60 m)</h3>
                <p>Umożliwia wysoki przepływ przy niewielkich oporach. Skutkuje to małym ΔT i bardzo równomiernym rozkładem temperatury powierzchniowej podłogi (t_surface ≈ 26–27°C).</p>
            </div>
            
            <div class="sim-comp-card bad">
                <h3>Długa pętla (np. 120 m)</h3>
                <p>Wymusza dławienie przepływu z powodu potężnych oporów lub pracę przy ekstremalnie wysokim ΔT. Początek pętli parzy osiągając 29°C, a koniec ma zaledwie 22°C. Inwestor odczuje to jako <strong>bardzo nieprzyjemny dyskomfort termiczny</strong>.</p>
            </div>
        </div>

        <div class="sim-math-context">
            <p>Dla pętli o potężnej mocy <strong>1800 W</strong> (np. duży, przeszklony salon) i założonym <strong>ΔT = 7K</strong>, wzór na masowy przepływ czynnika wygląda następująco:</p>
            
            <div class="sim-equation-block">
                G = Q / (c &times; &Delta;T)<br>
                G = 1800 / (1,163 &times; 7) &approx; 221 l/h (3,68 l/min)
            </div>
            
            <p style="margin-bottom: 0;">Przy tak potężnym przepływie, rura 16 mm o długości zaledwie 100 m wygeneruje opory rzędu <strong>28 kPa</strong>, co jest wartością absolutnie niedopuszczalną i zablokuje obieg. W takim przypadku inżynier musi podjąć decyzję o podział salonu na <strong>dwie pętle po 50 m</strong>.</p>
        </div>

        <div class="sim-call-to-action">
            👇 Sprawdź na interaktywnym symulatorze poniżej, jak zmiana mocy i ΔT wpływa na krytyczny przepływ wody na rotametrze.
        </div>
    </div>

    <div class="sim-dashboard">
        <div class="sim-dashboard-title">
            <span style="font-size: 18px;">🎛️</span> Symulator Hydrauliczny: Przepływ a ΔT
        </div>
        
        <div class="sim-grid">
            
            <div class="sim-controls">
                <div class="sim-control-group">
                    <div class="sim-label-row">
                        <span class="sim-label">Zapotrzebowanie na moc (Q)</span>
                        <span class="sim-value-display" id="val-q">1800 W</span>
                    </div>
                    <input type="range" min="500" max="3000" step="50" value="1800" class="sim-slider" id="slider-q">
                </div>
                
                <div class="sim-control-group">
                    <div class="sim-label-row">
                        <span class="sim-label">Różnica temperatur (ΔT)</span>
                        <span class="sim-value-display" id="val-dt">7 K</span>
                    </div>
                    <input type="range" min="4" max="12" step="0.5" value="7" class="sim-slider" id="slider-dt">
                </div>
            </div>

            <div class="sim-results">
                <div class="sim-result-label">Wymagany przepływ na pętli</div>
                <div class="sim-result-main" id="result-lmin">3.68</div>
                <div class="sim-result-sub" id="result-lh">221 l/h</div>
                
                <div class="sim-alert warn" id="sim-warning">
                    ⚠️ Krytyczny przepływ! Opory > 20 kPa. Konieczny podział na 2 pętle.
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez nagłówków H)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-sim-interactive');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 15px;">🛡️</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Skrypt Zabezpieczony</div>
                    <p style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Ten interaktywny symulator jest chroniony prawem autorskim i przypisany do domeny Projekt-Ogrzewania.pl.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 25px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">WRÓĆ DO ORYGINAŁU</a>
                </div>
            `;
            return; // Przerywa działanie skryptu symulatora
        }
    }

    // Logika Kalkulatora
    const sliderQ = document.getElementById('slider-q');
    const sliderDt = document.getElementById('slider-dt');
    const valQ = document.getElementById('val-q');
    const valDt = document.getElementById('val-dt');
    const resLmin = document.getElementById('result-lmin');
    const resLh = document.getElementById('result-lh');
    const warningBox = document.getElementById('sim-warning');

    const C_WATER = 1.163;

    function calculateFlow() {
        const q = parseFloat(sliderQ.value);
        const dt = parseFloat(sliderDt.value);

        // Aktualizacja UI etykiet
        valQ.textContent = q + ' W';
        valDt.textContent = dt + ' K';

        // Obliczenia
        const flowLh = q / (C_WATER * dt);
        const flowLmin = flowLh / 60;

        // Aktualizacja Wyników
        resLh.textContent = Math.round(flowLh) + ' l/h';
        resLmin.textContent = flowLmin.toFixed(2);

        // Logika Ostrzeżeń
        if (flowLmin > 2.5) {
            warningBox.className = 'sim-alert warn';
            warningBox.innerHTML = '⚠️ Krytyczny przepływ! Opory > 20 kPa. Konieczny podział obwodu na 2 pętle dla rury 16mm.';
        } else if (flowLmin < 0.5) {
            warningBox.className = 'sim-alert warn';
            warningBox.innerHTML = '⚠️ Przepływ zbyt niski! Ryzyko zapowietrzania się pętli i braku oddawania ciepła.';
        } else {
            warningBox.className = 'sim-alert ok';
            warningBox.innerHTML = '✅ Przepływ optymalny. Instalacja bezpieczna dla rury o długości do 100 mb.';
        }
    }

    // Nasłuchiwacze zdarzeń
    if (sliderQ &#038;&#038; sliderDt) {
        sliderQ.addEventListener('input', calculateFlow);
        sliderDt.addEventListener('input', calculateFlow);
        // Inicjalizacja
        calculateFlow();
    }
});
</script>



<style>
:root {
    --algo-primary: #0f172a;
    --algo-panel: #ffffff;
    --algo-accent: #0284c7;
    --algo-accent-light: #e0f2fe;
    --algo-text: #334155;
    --algo-muted: #94a3b8;
    --algo-border: #e2e8f0;
    --algo-bg: #f8fafc;
    --algo-success: #16a34a;
}

.algo-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--algo-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--algo-border);
    overflow: hidden;
}

.algo-intro-section {
    padding: 40px 50px 20px 50px;
}

/* Zmiana na H2 */
.algo-intro-section h2 {
    color: var(--algo-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.algo-intro-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--algo-text);
    margin-bottom: 0;
}

.algo-intro-section a {
    color: var(--algo-accent);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: 0.2s;
}

.algo-intro-section a:hover {
    color: #1e3a8a;
}

/* ================= INTERAKTYWNY STEPPER ================= */
.algo-stepper-container {
    display: flex;
    margin: 30px 50px 50px 50px;
    background: var(--algo-bg);
    border: 1px solid var(--algo-border);
    border-radius: 16px;
    overflow: hidden;
}

/* Lista Kroków (Lewa strona) */
.algo-steps-nav {
    width: 35%;
    background: #ffffff;
    border-right: 1px solid var(--algo-border);
    display: flex;
    flex-direction: column;
}

.algo-step-btn {
    padding: 20px 25px;
    text-align: left;
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--algo-border);
    cursor: pointer;
    transition: all 0.3s ease;
    display: flex;
    align-items: center;
    gap: 15px;
    color: var(--algo-muted);
}

.algo-step-btn:last-child {
    border-bottom: none;
}

.algo-step-number {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--algo-border);
    color: #ffffff;
    font-size: 13px;
    font-weight: 800;
    flex-shrink: 0;
    transition: 0.3s;
}

.algo-step-title {
    font-size: 14px;
    font-weight: 700;
    line-height: 1.4;
    transition: 0.3s;
}

.algo-step-btn:hover {
    background: var(--algo-bg);
}

.algo-step-btn.active {
    background: var(--algo-accent-light);
    border-left: 4px solid var(--algo-accent);
    padding-left: 21px; /* kompensacja bordera */
    color: var(--algo-primary);
}

.algo-step-btn.active .algo-step-number {
    background: var(--algo-accent);
    box-shadow: 0 0 10px rgba(2, 132, 199, 0.3);
}

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

/* Treść Kroku (Prawa strona) */
.algo-steps-content {
    width: 65%;
    padding: 40px;
    position: relative;
}

.algo-panel {
    display: none;
    animation: algoFadeIn 0.4s ease;
}

.algo-panel.active {
    display: block;
}

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

.algo-panel-tag {
    display: inline-block;
    padding: 4px 12px;
    background: #e2e8f0;
    color: #475569;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
}

/* Zmiana na H3 */
.algo-panel h3 {
    font-size: 20px;
    font-weight: 900;
    color: var(--algo-primary);
    margin: 0 0 15px 0;
}

/* Zmiana na H4 */
.algo-panel h4 {
    font-size: 15px;
    font-weight: 800;
    color: var(--algo-primary);
    margin: 20px 0 10px 0;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.algo-panel p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--algo-text);
    margin-bottom: 20px;
}

.algo-formula-box {
    background: #ffffff;
    border: 1px dashed var(--algo-accent);
    padding: 15px 20px;
    border-radius: 12px;
    font-family: 'Cambria Math', monospace;
    font-size: 16px;
    color: var(--algo-primary);
    font-weight: bold;
    text-align: center;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.algo-panel-alert {
    display: flex;
    gap: 12px;
    background: #f0fdf4;
    border: 1px solid #bbf7d0;
    padding: 15px;
    border-radius: 12px;
    color: #166534;
    font-size: 14px;
    line-height: 1.5;
}

@media (max-width: 768px) {
    .algo-intro-section { padding: 30px 25px 10px 25px; }
    .algo-stepper-container { margin: 20px 25px 40px 25px; flex-direction: column; }
    .algo-steps-nav { width: 100%; border-right: none; border-bottom: 1px solid var(--algo-border); flex-direction: row; overflow-x: auto; white-space: nowrap; -webkit-overflow-scrolling: touch; }
    .algo-step-btn { padding: 15px; border-bottom: none; border-right: 1px solid var(--algo-border); flex-shrink: 0; min-width: 200px; }
    .algo-step-btn.active { border-left: none; border-bottom: 4px solid var(--algo-accent); padding-left: 15px; padding-bottom: 11px; }
    .algo-steps-content { width: 100%; padding: 25px; }
}
</style>

<div class="algo-module-wrapper" id="app-algo-stepper">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Algorytm Projektowy: Długość Pętli",
        "description": "Narzędzie typu krok-po-kroku ilustrujące procedurę inżynierską obliczania i weryfikacji hydraulicznej obiegów ogrzewania płaszczyznowego z uwzględnieniem normy PN-EN 12831.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#algorytm-krok-po-kroku",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Definiowanie zapotrzebowania cieplnego Q_pom (OZC)",
          "Ustalanie rozstawu rur w zależności od strefy (brzegowa/dzienna)",
          "Obliczanie wstępnej długości L_wst z wykorzystaniem wzorów",
          "Weryfikacja hydrauliczna podziału obiegów"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Procedura obliczeniowa parametrów podłogówki",
        "description": "Zestawienie zmiennych i stałych wykorzystywanych w procesie wymiarowania instalacji ogrzewania podłogowego.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Zapotrzebowanie na ciepło (Q_pom)",
            "value": "Wartość zmienna (np. 1500 W)",
            "description": "Wyznaczane na podstawie normy PN-EN 12831."
          },
          {
            "@type": "PropertyValue",
            "name": "Rozstaw rur (b)",
            "value": "10 cm lub 15 cm",
            "description": "Zapotrzebowanie rury dla rozstawu 15 cm wynosi ok. 6.7 mb/m2."
          },
          {
            "@type": "PropertyValue",
            "name": "Wyznaczenie wstępnej długości (L_wst)",
            "value": "(Powierzchnia × zapotrzebowanie mb) + przyłącza",
            "description": "Wzór obliczający teoretyczne zużycie rury na dany obieg."
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="algo-intro-section">
        <h2>Algorytm wyznaczania długości pętli – krok po kroku</h2>
        <p>Jako projektant z wieloletnim doświadczeniem w branży HVAC, stosuję sztywną, sprawdzoną procedurę obliczeniową. Pozwala mi to bezbłędnie określić, jaka będzie <strong>maksymalna długość pętli ogrzewania podłogowego</strong> w konkretnym pomieszczeniu i kiedy należy dany układ podzielić, aby uniknąć krytycznych błędów wykonawczych i przeciążenia pompy.</p>
    </div>

    <div class="algo-stepper-container">
        
        <div class="algo-steps-nav">
            <button class="algo-step-btn active" data-step="step-1">
                <span class="algo-step-number">1</span>
                <span class="algo-step-title">Obliczenie Q<sub>pom</sub> (OZC)</span>
            </button>
            <button class="algo-step-btn" data-step="step-2">
                <span class="algo-step-number">2</span>
                <span class="algo-step-title">Określenie rozstawu (b)</span>
            </button>
            <button class="algo-step-btn" data-step="step-3">
                <span class="algo-step-number">3</span>
                <span class="algo-step-title">Długość wstępna L<sub>wst</sub></span>
            </button>
            <button class="algo-step-btn" data-step="step-4">
                <span class="algo-step-number">4</span>
                <span class="algo-step-title">Weryfikacja układu</span>
            </button>
            <button class="algo-step-btn" data-step="step-5">
                <span class="algo-step-number">5</span>
                <span class="algo-step-title">Nastawy na rotametrach</span>
            </button>
        </div>

        <div class="algo-steps-content">
            
            <div class="algo-panel active" id="step-1">
                <span class="algo-panel-tag">Fundament Projektu</span>
                <h3>Zapotrzebowanie na ciepło</h3>
                <p>Proces zawsze rozpoczynamy od rzetelnego <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektu OZC</a> (Obliczanie Zapotrzebowania na Ciepło), sporządzonego rygorystycznie zgodnie z normą <strong>PN-EN 12831</strong>.</p>
                <p>Na podstawie przenikalności cieplnej przegród, wielkości okien i strat na wentylacji określamy wartość <strong>Q<sub>pom</sub></strong>. Dla celów naszego algorytmu przyjmijmy modelową sypialnię, w której Q<sub>pom</sub> = 1500 W.</p>
            </div>

            <div class="algo-panel" id="step-2">
                <span class="algo-panel-tag">Parametry Fizyczne</span>
                <h3>Rozstaw rur (b)</h3>
                <p>Mając zdefiniowane zapotrzebowanie, dobieramy gęstość układania rury grzejnej, czyli jej rozstaw. Wybór uzależniony jest od charakterystyki strefy w budynku:</p>
                <ul style="color: var(--algo-text); line-height: 1.6; margin-bottom: 20px;">
                    <li><strong>10 cm:</strong> Strefy brzegowe (przy oknach), łazienki oraz miejsca o dużych stratach.</li>
                    <li><strong>15 cm:</strong> Standard dla pomieszczeń dziennych (salon, pokoje), zapewniający optymalny rozkład temperatury.</li>
                </ul>
                <p>Przyjęcie popularnego rozstawu b = 15 cm oznacza, że fizyczne zapotrzebowanie na rurę wynosi średnio <strong>6,7 metra bieżącego na każdy 1 m² powierzchni</strong>.</p>
            </div>

            <div class="algo-panel" id="step-3">
                <span class="algo-panel-tag">Kalkulacje Inżynierskie</span>
                <h3>Wyznaczenie wstępnej długości</h3>
                <p>Przechodzimy do matematycznego wyznaczenia wartości <strong>L<sub>wst</sub></strong>. Wzór uwzględnia obliczone w poprzednim kroku zagęszczenie oraz dystans dzielący pomieszczenie od rozdzielacza (tzw. przyłącza lub tranzyty).</p>
                
                <div class="algo-formula-box">
                    L<sub>wst</sub> = (Powierzchnia [m²] × 6,7) + przyłącza do rozdzielacza [m]
                </div>
            </div>

            <div class="algo-panel" id="step-4">
                <span class="algo-panel-tag">Kontrola Bezpieczeństwa</span>
                <h3>Weryfikacja hydrauliczna</h3>
                <p>To moment absolutnie krytyczny dla wydajności systemu. Posiadając obliczoną wartość L<sub>wst</sub>, musimy odnieść ją do limitów wytrzymałości hydraulicznej.</p>
                
                <h4>Krytyczny warunek podziału:</h4>
                <div class="algo-panel-alert">
                    <span>⚖️</span>
                    <div>Sprawdzamy, czy <strong>L<sub>wst</sub> ≤ 100 m</strong> dla zastosowanej rury PEX 16 mm. Jeżeli obliczenia wykazują, że wstępna długość przekracza 100 m (np. wynosi 130 m), natychmiast <strong>dzielimy powierzchnię pomieszczenia na dwie równe pętle</strong>.</div>
                </div>
            </div>

            <div class="algo-panel" id="step-5">
                <span class="algo-panel-tag">Regulacja Systemu</span>
                <h3>Dobór nastaw (Rotametry)</h3>
                <p>Gdy obwody są prawidłowo zwymiarowane, ostatnim krokiem wykonawczym jest wyliczenie nastaw wstępnych, wyrażanych najczęściej w litrach na minutę (l/min). Parametr ten ustawia się bezpośrednio na rotametrach znajdujących się na belce zasilającej <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacza</a>.</p>
                <p>Celem tej procedury jest precyzyjne <strong>zrównoważenie hydrauliczne</strong> całego układu – sprawienie, by pętla o długości 40 m w łazience stawiała sztucznie taki sam opór, jak pętla 90 m w salonie, zapewniając idealny rozkład przepływów.</p>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (Brak H1-H6)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-algo-stepper');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0284c7;">Zawartość Chroniona</div>
                    <p style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Interaktywny algorytm obliczeniowy stanowi własność intelektualną Projekt-Ogrzewania.pl.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0284c7; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">WRÓĆ NA STRONĘ AUTORA</a>
                </div>
            `;
            return; 
        }
    }

    // Logika Steppera
    const stepBtns = document.querySelectorAll('.algo-step-btn');
    const stepPanels = document.querySelectorAll('.algo-panel');

    stepBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const targetId = this.getAttribute('data-step');

            // Usuń aktywne klasy z przycisków
            stepBtns.forEach(b => b.classList.remove('active'));
            // Dodaj do klikniętego
            this.classList.add('active');

            // Schowaj wszystkie panele
            stepPanels.forEach(panel => {
                panel.classList.remove('active');
            });

            // Pokaż docelowy panel
            const targetPanel = document.getElementById(targetId);
            if (targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>



<style>
:root {
    --st-primary: #0f172a;
    --st-panel: #ffffff;
    --st-accent: #0284c7;
    --st-accent-light: #e0f2fe;
    --st-text: #334155;
    --st-muted: #94a3b8;
    --st-border: #e2e8f0;
    --st-highlight: #f8fafc;
}

.smart-table-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--st-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--st-border);
    overflow: hidden;
}

.st-content-wrapper {
    padding: 40px 50px 20px 50px;
}

.st-text-section h2 {
    color: var(--st-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.st-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--st-text);
    margin-bottom: 20px;
}

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

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

.st-text-section a:hover {
    color: #1e3a8a;
}

/* ================= INTERAKTYWNE KONTROLKI ================= */
.st-interactive-header {
    background: var(--st-highlight);
    border: 1px solid var(--st-border);
    border-radius: 16px;
    padding: 25px;
    margin: 30px 50px 0 50px;
}

.st-instruction {
    font-size: 13px;
    text-transform: uppercase;
    font-weight: 800;
    color: var(--st-muted);
    letter-spacing: 1px;
    margin-bottom: 15px;
    text-align: center;
}

.st-controls-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}

.st-btn {
    background: #ffffff;
    border: 2px solid var(--st-border);
    border-radius: 12px;
    padding: 12px 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--st-text);
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 5px;
}

.st-btn span {
    font-size: 11px;
    color: var(--st-muted);
    font-weight: 600;
}

.st-btn:hover {
    border-color: #bae6fd;
    background: #f0f9ff;
    transform: translateY(-2px);
}

.st-btn.active {
    border-color: var(--st-accent);
    background: var(--st-accent-light);
    color: var(--st-accent);
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.15);
}

.st-btn.active span {
    color: var(--st-accent);
}

/* ================= TABELA DANYCH (DESKTOP) ================= */
.st-table-container {
    padding: 0 50px 40px 50px;
}

.st-table-responsive {
    width: 100%;
    border-radius: 12px;
    border: 1px solid var(--st-border);
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

.st-table {
    width: 100%;
    border-collapse: collapse;
    min-width: 600px;
    background: #ffffff;
}

.st-table th {
    background: #f1f5f9;
    color: var(--st-primary);
    font-weight: 800;
    font-size: 13px;
    text-transform: uppercase;
    padding: 18px 15px;
    text-align: left;
    border-bottom: 2px solid var(--st-border);
    white-space: nowrap;
}

.st-table td {
    padding: 16px 15px;
    font-size: 15px;
    color: var(--st-text);
    border-bottom: 1px solid var(--st-border);
    transition: all 0.3s ease;
}

.st-table tbody tr {
    transition: all 0.3s ease;
}

/* Stany interaktywne tabeli */
.st-table.filtering tbody tr {
    opacity: 0.3;
    background: #ffffff;
}

.st-table.filtering tbody tr.highlighted {
    opacity: 1;
    background: var(--st-accent-light);
    transform: scale(1.01);
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.st-table.filtering tbody tr.highlighted td {
    font-weight: 700;
    color: var(--st-primary);
    border-color: transparent;
}

.st-table.filtering tbody tr.highlighted td:first-child {
    border-left: 4px solid var(--st-accent);
}

/* ================= DYNAMICZNA WSKAZÓWKA ================= */
.st-tip-box {
    margin-top: 20px;
    padding: 15px 20px;
    border-radius: 12px;
    background: #fffbeb;
    border-left: 4px solid #f59e0b;
    font-size: 14px;
    color: #92400e;
    display: none;
    animation: stFadeIn 0.4s ease;
}

.st-tip-box.visible {
    display: block;
}

.st-tip-box strong {
    color: #b45309;
}

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

/* ================= WERSJA MOBILNA (UKŁAD KART) ================= */
@media (max-width: 768px) {
    .st-content-wrapper { padding: 30px 25px 15px 25px; }
    .st-interactive-header { margin: 20px 25px 0 25px; padding: 20px; }
    .st-controls-grid { grid-template-columns: 1fr 1fr; }
    .st-table-container { padding: 0 25px 30px 25px; margin-top: 15px; }
    
    .st-table-responsive {
        border: none;
        box-shadow: none;
        background: transparent;
    }
    
    .st-table {
        min-width: 100%;
        display: block;
    }
    
    .st-table thead {
        display: none;
    }
    
    .st-table tbody {
        display: block;
    }
    
    .st-table tbody tr {
        display: block;
        background: #ffffff;
        border: 1px solid var(--st-border);
        border-radius: 12px;
        margin-bottom: 15px;
        box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
        padding: 5px 0;
    }
    
    .st-table td {
        display: flex;
        justify-content: space-between;
        align-items: center;
        padding: 12px 15px;
        border-bottom: 1px solid #f1f5f9;
        font-size: 14px;
        text-align: right;
    }
    
    .st-table td:last-child {
        border-bottom: none;
    }
    
    .st-table td::before {
        content: attr(data-label);
        font-weight: 800;
        font-size: 12px;
        color: var(--st-muted);
        text-transform: uppercase;
        text-align: left;
        margin-right: 15px;
        flex-shrink: 0;
        max-width: 50%;
    }

    .st-table.filtering tbody tr.highlighted {
        border: 2px solid var(--st-accent);
        transform: scale(1.02);
    }
    .st-table.filtering tbody tr.highlighted td:first-child {
        border-left: none; 
    }
}
</style>

<div class="smart-table-module" id="app-routing-patterns">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Analizator Schematów Układania Ogrzewania Podłogowego",
        "description": "Narzędzie inżynierskie pozwalające na analizę wpływu wzoru układania rur (ślimak, meander) na opory miejscowe hydrauliczne i wynikającą z nich maksymalną długość pętli.",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#schematy-ukladania",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Filtrowanie schematów układania: Spirala, Meander, Podwójny Meander, Mieszany",
          "Wizualizacja skutków oporów miejscowych (zagięć 180° i 90°) na przepływ wody",
          "Szacowanie spadku maksymalnej dopuszczalnej długości obwodu grzewczego"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Wpływ Schematów Układania na Maksymalną Długość Pętli Grzewczej",
        "description": "Tabela inżynierska korelująca typ układu rur płaszczyznowych z ich wpływem na generowane opory miejscowe oraz rozkład temperatury posadzki.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Wzór: Spirala (Ślimak)",
            "value": "Opory Niskie | Wpływ na limit: 100% wykorzystania zakłożonej maksymalnej długości"
          },
          {
            "@type": "PropertyValue",
            "name": "Wzór: Meander",
            "value": "Opory Wysokie (łuki 180°) | Wpływ na limit: Redukcja długości pętli o 15-20%"
          },
          {
            "@type": "PropertyValue",
            "name": "Wzór: Podwójny Meander",
            "value": "Opory Średnie | Wpływ na limit: Redukcja długości pętli o ok. 10%"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="st-content-wrapper">
        <div class="st-text-section">
            <h2>Schemat układania rur a maksymalna długość pętli</h2>
            <p>Zastanawiasz się, dlaczego w jednym pomieszczeniu <strong>maksymalna długość pętli ogrzewania podłogowego</strong> może bezpiecznie wynosić równe 100 metrów, a w innym instalator narzuca limit zaledwie 80 metrów, mimo zastosowania tej samej rury 16x2.0 mm? Kluczem do rozwiązania tej zagadki inżynieryjnej są tzw. opory miejscowe, które generuje <a href="https://projekt-ogrzewania.pl/jak-ukladac-rury-w-ogrzewaniu-slimak-meander-czy-podwojny-meander/">wybrany schemat układania rur</a>.</p>
            
            <h3>Wpływ zagięć na hydraulikę instalacji.</h3>
            <p>Każde ostre zagięcie przewodu o 180 stopni drastycznie dławi przepływ wody. Poniżej przygotowałem interaktywne zestawienie, które pokazuje, jak zastosowanie klasycznego meandra czy optymalnego ślimaka wpływa na ostateczne możliwości tłoczenia pompy obiegowej.</p>
        </div>
    </div>

    <div class="st-interactive-header">
        <div class="st-instruction">👉 Wybierz schemat, by sprawdzić jego wpływ na pętlę</div>
        <div class="st-controls-grid">
            <button class="st-btn" data-target="pat-spiral">Spirala <span>Ślimak</span></button>
            <button class="st-btn" data-target="pat-meander">Meander <span>Klasyczny</span></button>
            <button class="st-btn" data-target="pat-double">Podw. Meander <span>Mieszany</span></button>
            <button class="st-btn" data-target="pat-strefa">Strefa <span>Brzegowa</span></button>
        </div>
    </div>

    <div class="st-table-container">
        <div class="st-table-responsive">
            <table class="st-table" id="interactive-routing-table">
                <thead>
                    <tr>
                        <th>Schemat układania</th>
                        <th>Opory miejscowe rury</th>
                        <th>Rozkład temperatury posadzki</th>
                        <th>Skutek dla maks. długości pętli</th>
                    </tr>
                </thead>
                <tbody>
                    <tr data-row="pat-spiral">
                        <td data-label="Schemat"><h4>Spirala (Ślimak)</h4></td>
                        <td data-label="Opory rury">Niskie (łuki łagodne 90°)</td>
                        <td data-label="Rozkład temp.">Bardzo równomierny</td>
                        <td data-label="Skutek dla długości">Pozwala wykorzystać <strong>100%</strong> limitu</td>
                    </tr>
                    <tr data-row="pat-meander">
                        <td data-label="Schemat"><h4>Meander</h4></td>
                        <td data-label="Opory rury">Wysokie (ostre łuki 180°)</td>
                        <td data-label="Rozkład temp.">Wyraźnie chłodniej na końcu</td>
                        <td data-label="Skutek dla długości">Wymaga skrócenia pętli o <strong>15–20%</strong></td>
                    </tr>
                    <tr data-row="pat-double">
                        <td data-label="Schemat"><h4>Podwójny Meander</h4></td>
                        <td data-label="Opory rury">Średnie (kompromis)</td>
                        <td data-label="Rozkład temp.">Zrównoważony</td>
                        <td data-label="Skutek dla długości">Wymaga skrócenia pętli o <strong>ok. 10%</strong></td>
                    </tr>
                    <tr data-row="pat-strefa">
                        <td data-label="Schemat"><h4>Układ Mieszany</h4></td>
                        <td data-label="Opory rury">Zmienne (zależne od strefy)</td>
                        <td data-label="Rozkład temp.">Ukierunkowany (np. na okna)</td>
                        <td data-label="Skutek dla długości">Ryzyko oporów – max. zalecane <strong>85m</strong></td>
                    </tr>
                </tbody>
            </table>
        </div>

        <div class="st-tip-box" id="st-routing-tip">
            </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-routing-patterns');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0284c7;">Ochrona Treści Interaktywnych</div>
                    <p style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Tabela analityczna jest autorskim narzędziem Projekt-Ogrzewania.pl i została skopiowana niezgodnie z prawem.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0284c7; color: white; text-decoration: none; border-radius: 12px; font-weight: bold; font-size: 13px;">PRZEJDŹ DO ORYGINAŁU</a>
                </div>
            `;
            return; 
        }
    }

    const tips = {
        'pat-spiral': '<strong>Wskazówka Projektowa:</strong> <a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-w-ukladzie-slimakowym/">Układ ślimakowy</a> to absolutny standard. Zasilanie i powrót idą obok siebie, uśredniając temperaturę posadzki i minimalizując opory przepływu.',
        'pat-meander': '<strong>Wskazówka Projektowa:</strong> Ze względu na ogromne spadki ciśnienia na zakrętach 180°, przy <a href="https://projekt-ogrzewania.pl/instalacja-ogrzewania-podlogowego-w-ukladzie-meandrowym/">układzie meandrowym</a> dla rury 16mm bezpieczniej nie przekraczać długości 80 metrów na jednej pętli.',
        'pat-double': '<strong>Wskazówka Projektowa:</strong> Świetna alternatywa dla długich i wąskich korytarzy, gdzie klasyczny ślimak jest trudny do wywinięcia, ale zależy nam na zbalansowaniu temperatury.',
        'pat-strefa': '<strong>Wskazówka Projektowa:</strong> Gdy zagęszczamy meander (np. co 10 cm) pod dużymi oknami HS, pętla drastycznie "nabiera" oporów. W <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">strefach brzegowych</a> zawsze celuj w krótsze obwody.'
    };

    const buttons = document.querySelectorAll('.st-btn');
    const table = document.getElementById('interactive-routing-table');
    const rows = table.querySelectorAll('tbody tr');
    const tipBox = document.getElementById('st-routing-tip');

    buttons.forEach(button => {
        button.addEventListener('click', function() {
            const target = this.getAttribute('data-target');
            buttons.forEach(btn => btn.classList.remove('active'));
            this.classList.add('active');
            table.classList.add('filtering');
            rows.forEach(row => {
                if (row.getAttribute('data-row') === target) {
                    row.classList.add('highlighted');
                } else {
                    row.classList.remove('highlighted');
                }
            });
            if (tips[target]) {
                tipBox.innerHTML = tips[target];
                tipBox.classList.add('visible');
            }
        });
    });
});
</script>



<style>
:root {
    --primary-hvac: #0f172a;
    --accent-hvac: #2563eb;
    --bg-tip: #f1f5f9;
}

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

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

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

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

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

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

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

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

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

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

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

<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Często spotykam się z prośbami inwestorów o ułożenie pętli o długości 140 czy 150 metrów, by zaoszczędzić na wielkości rozdzielacza. To absolutnie najdroższa z możliwych oszczędności. Maksymalna długość pętli ogrzewania podłogowego to nie luźna sugestia, a twarda granica fizyki. Przekroczenie 100 metrów dla rury 16 mm sprawi, że zapłacisz o wiele więcej za prąd do pompy obiegowej, zmusisz pompę ciepła do pracy na wyższym zasilaniu, a Twoja podłoga w salonie i tak pozostanie niedogrzana. Zawsze taniej jest dołożyć jedną sekcję rozdzielacza więcej na etapie budowy, niż walczyć z zimnymi strefami przez kilkadziesiąt lat.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "CEO & Główny Projektant",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ],
      "worksFor": {
        "@type": "Organization",
        "name": "Projekt-Ogrzewania.pl"
      }
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "name": "Wytyczne inżynierskie: Optymalizacja długości pętli grzewczej",
    "description": "Zestawienie inżynierskich zasad bezwzględnego unikania przekraczania maksymalnych długości obiegów dla systemów płaszczyznowych i wynikających z tego strat na wydajności źródeł ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    }
  }
]
</script>

<div class="expert-tip-wrapper">
    <h2><span style="margin-right:10px">⚖️</span>Złota zasada eksperta</h2>
    
    <div class="expert-tip-container" id="expert-tip-hvac">
        <div class="expert-tip-photo-wrap">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="expert-tip-photo" loading="lazy">
        </div>
        <div class="expert-tip-content">
            <h3 class="expert-tip-label">Wskazówka od Projektanta</h3>
            <p class="expert-tip-text">
                "Często spotykam się z prośbami inwestorów o ułożenie pętli o długości 140 czy 150 metrów, by zaoszczędzić na wielkości rozdzielacza. To absolutnie najdroższa z możliwych oszczędności. <strong>Maksymalna długość pętli ogrzewania podłogowego</strong> to nie luźna sugestia, a twarda granica fizyki. Przekroczenie 100 metrów dla rury 16 mm sprawi, że zapłacisz o wiele więcej za prąd do pompy obiegowej, zmusisz <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompę ciepła</a> do pracy na wyższym parametrze, a posadzka w salonie i tak pozostanie niedogrzana. Zawsze taniej jest dołożyć jedną sekcję <a href="https://projekt-ogrzewania.pl/rozdzielacz-do-podlogowki-kluczowy-element-systemu-ogrzewania-podlogowego/">rozdzielacza</a> więcej, niż walczyć z zimnymi strefami przez kilkadziesiąt lat eksploatacji."
            </p>
            <span class="expert-tip-signature">— Robert Kucharski, CEO & Główny Projektant Projekt-Ogrzewania.pl</span>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #f1f5f9; border-radius: 20px; margin-top: 20px; font-family: sans-serif;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a;">Rekomendacja inżynierska Roberta Kucharskiego:</p>
            <p style="font-size: 14px; color: #475569;">Oszczędzanie na ilości sekcji w rozdzielaczu poprzez sztuczne wydłużanie pętli grzewczych powyżej 100 metrów to błąd projektowy. Zawsze skutkuje on niedogrzaniem pomieszczeń i drastycznym wzrostem kosztów eksploatacyjnych systemu grzewczego.</p>
        </div>
    </noscript>
</div>

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



<style>
:root {
    --cs-primary: #0f172a;
    --cs-accent: #2563eb;
    --cs-danger: #dc2626;
    --cs-success: #16a34a;
    --cs-bg: #f8fafc;
    --cs-border: #e2e8f0;
    --cs-text: #475569;
}

.case-study-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--cs-border);
    overflow: hidden;
}

/* ================= HEADER I METRYCZKA ================= */
.cs-header-wrapper {
    background: var(--cs-primary);
    color: #ffffff;
    padding: 40px 50px;
    position: relative;
    overflow: hidden;
}

.cs-header-wrapper::after {
    content: '';
    position: absolute;
    top: -50px;
    right: -50px;
    width: 250px;
    height: 250px;
    background: radial-gradient(circle, rgba(37, 99, 235, 0.3) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
}

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

.cs-header-wrapper h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 25px 0;
    line-height: 1.3;
    color: #ffffff;
    position: relative;
    z-index: 2;
}

.cs-stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 15px;
    position: relative;
    z-index: 2;
}

.cs-stat-box {
    background: rgba(0, 0, 0, 0.2);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 15px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

.cs-stat-label {
    display: block;
    font-size: 11px;
    color: #94a3b8;
    text-transform: uppercase;
    font-weight: 700;
    margin-bottom: 5px;
}

.cs-stat-value {
    display: block;
    font-size: 16px;
    font-weight: 900;
    color: #ffffff;
}

/* ================= OPIS WYZWANIA ================= */
.cs-content-section {
    padding: 40px 50px 30px 50px;
    background: #ffffff;
}

/* Nowe style dla H3 i H4 w sekcji treści */
.cs-content-section h3 {
    font-size: 22px;
    font-weight: 900;
    color: var(--cs-primary);
    margin: 0 0 15px 0;
    line-height: 1.3;
}

.cs-content-section h4 {
    font-size: 18px;
    font-weight: 800;
    color: var(--cs-primary);
    margin: 25px 0 10px 0;
    line-height: 1.4;
}

.cs-lead-text {
    font-size: 16px;
    line-height: 1.8;
    color: var(--cs-text);
    margin: 0 0 20px 0;
}

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

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

.cs-lead-text a:hover {
    color: #1e3a8a;
}

.cs-author-box {
    background: #f0f9ff;
    border-left: 4px solid var(--cs-accent);
    padding: 15px 20px;
    border-radius: 0 12px 12px 0;
    display: flex;
    align-items: center;
    gap: 15px;
    margin-bottom: 10px;
}

.cs-author-photo {
    width: 52px;
    height: 52px;
    border-radius: 50%;
    object-fit: cover;
    border: 2px solid #ffffff;
    box-shadow: 0 4px 10px rgba(37, 99, 235, 0.2);
    flex-shrink: 0;
}

.cs-author-box p {
    margin: 0;
    font-size: 14px;
    color: #1e3a8a;
    line-height: 1.6;
}

.cs-author-box a {
    color: var(--cs-accent);
    font-weight: 800;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
}

/* ================= INTERAKTYWNE WYZWANIE (SPLIT CARDS) ================= */
.cs-interactive-section {
    padding: 0 50px 40px 50px;
}

.cs-split-container {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.cs-split-card {
    border-radius: 16px;
    padding: 25px;
    border: 2px solid var(--cs-border);
    cursor: pointer;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    overflow: hidden;
    background: #ffffff;
}

.cs-split-card:not(.active) {
    opacity: 0.7;
    transform: scale(0.98);
}

.cs-split-card.danger.active {
    border-color: var(--cs-danger);
    background: #fef2f2;
    box-shadow: 0 10px 25px rgba(220, 38, 38, 0.1);
    opacity: 1;
    transform: scale(1);
}

.cs-split-card.success.active {
    border-color: var(--cs-success);
    background: #f0fdf4;
    box-shadow: 0 10px 25px rgba(22, 163, 74, 0.1);
    opacity: 1;
    transform: scale(1);
}

.cs-card-header {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 15px;
}

.cs-card-icon {
    font-size: 28px;
}

.cs-card-title {
    font-size: 18px;
    font-weight: 900;
    color: var(--cs-primary);
    margin: 0;
}

.cs-card-desc {
    font-size: 14px;
    line-height: 1.6;
    color: var(--cs-text);
    margin: 0;
}

.cs-card-solution {
    margin-top: 15px;
    padding-top: 15px;
    border-top: 1px dashed rgba(0,0,0,0.1);
    font-size: 13px;
    font-weight: 700;
    display: none;
}

.cs-split-card.danger .cs-card-solution { color: #991b1b; }
.cs-split-card.success .cs-card-solution { color: #166534; }

.cs-split-card.active .cs-card-solution {
    display: block;
    animation: csFadeIn 0.4s ease forwards;
}

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

@media (max-width: 768px) {
    .cs-header-wrapper { padding: 35px 25px; }
    .cs-stats-grid { grid-template-columns: 1fr 1fr; }
    .cs-content-section { padding: 30px 25px 20px 25px; }
    .cs-interactive-section { padding: 0 25px 30px 25px; }
    .cs-split-container { grid-template-columns: 1fr; }
}
</style>

<div class="case-study-module" id="app-case-study">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Panel Studium Przypadku: Optymalizacja Długości Pętli",
        "description": "Interaktywny moduł prezentujący proces decyzyjny i wyzwania inżynierskie przy projektowaniu długości obwodów grzewczych w salonie z antresolą (wysokie straty cieplne).",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Analiza skutków przekroczenia maksymalnej długości pętli rury PEX 16mm",
          "Symulacja wzrostu oporów hydraulicznych w dużym salonie",
          "Wizualizacja dylematu podziału obiegów grzewczych na mniejsze sekcje"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Parametry Projektowe i Opory Hydrauliczne - Dom Brzeziny 2025",
        "description": "Zestawienie parametrów wejściowych budynku wykorzystanych do optymalizacji zasilania i uniknięcia przekroczenia krytycznych wartości oporów dla pomp obiegowych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Data projektu",
            "value": "Marzec 2025"
          },
          {
            "@type": "PropertyValue",
            "name": "Powierzchnia budynku",
            "value": "140 m²"
          },
          {
            "@type": "PropertyValue",
            "name": "Maksymalny limit długości (PEX 16mm)",
            "value": "100 mb"
          },
          {
            "@type": "PropertyValue",
            "name": "Lokalizacja",
            "value": "Brzeziny (k. Warszawy)"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="cs-header-wrapper">
        <div class="cs-badge">Case Study z Budowy</div>
        <h2>Problem długiej pętli w salonie z antresolą</h2>
        <div class="cs-stats-grid">
            <div class="cs-stat-box">
                <span class="cs-stat-label">Termin</span>
                <span class="cs-stat-value">Marzec 2025</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Lokalizacja</span>
                <span class="cs-stat-value">Brzeziny</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Powierzchnia</span>
                <span class="cs-stat-value">140 m²</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">System</span>
                <span class="cs-stat-value">PEX 16x2.0</span>
            </div>
        </div>
    </div>

    <div class="cs-content-section">
        <h3>Wyzwanie projektowe: Duże przeszklenia i otwarta strefa</h3>
        <p class="cs-lead-text">W marcu 2025 roku, podczas realizacji projektu instalacji w nowoczesnym domu jednorodzinnym o powierzchni 140 m² w miejscowości Brzeziny pod Warszawą dla inwestora pana Krzysztofa, kluczowym wyzwaniem okazało się zaprojektowanie otwartej strefy salonu z antresolą tak, aby nie przekroczyć parametrów krytycznych układu. Duża powierzchnia przeszkleń oraz wysoki sufit sprawiły, że zapotrzebowanie na moc cieplną w tym pomieszczeniu było ekstremalnie wysokie, co precyzyjnie wykazało <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projektowe obciążenie cieplne (OZC)</a>. </p>
        
        <h4>Oczekiwania inwestora a prawa fizyki</h4>
        <p class="cs-lead-text">Inwestor, szukając oszczędności na ilości rozdzielaczy, zapytał wprost: <em>ile metrów rury podłogówki możemy ułożyć w jednym kawałku, żeby pokryć cały salon?</em> Odpowiedź inżynierska musiała być stanowcza. Bezwzględna <strong>maksymalna długość pętli ogrzewania podłogowego</strong> dla zastosowanej rury o średnicy 16 mm wynosiła w tym układzie 100 metrów bieżących. Zlekceważenie tej zasady doprowadziłoby do skrajnie wysokich oporów hydraulicznych, z którymi nie poradziłaby sobie nawet najmocniejsza <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">pompa obiegowa</a>, skutkując wychłodzonymi sektorami przy oknach tarasowych.</p>
        
        <div class="cs-author-box">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="cs-author-photo" loading="lazy">
            <p>Obliczenia hydrauliczne w tym konkretnym obiekcie wykonał Robert Kucharski. Przed inwestorem postawiono dwie wizje rozwiązania problemu dużego metrażu:</p>
        </div>
    </div>

    <div class="cs-interactive-section">
        <div class="cs-split-container">
            
            <div class="cs-split-card danger active" id="cs-btn-long">
                <div class="cs-card-header">
                    <span class="cs-card-icon">⚠️</span>
                    <h3 class="cs-card-title">Ryzyko: Pętla > 130 mb</h3>
                </div>
                <p class="cs-card-desc">Próba pokrycia całego salonu jednym, długim ślimakiem rury 16 mm. Woda na początku pętli jest gorąca, ale nim dotrze na koniec obiegu, oddaje całą energię.</p>
                <div class="cs-card-solution">
                    Efekt krytyczny: Opór hydrauliczny rzędu 35 kPa całkowicie dławi przepływ (rotametr pokazuje zaledwie 0,5 l/min). Końcówka salonu pozostaje zimna, a pompa pracuje na maksymalnym przeciążeniu.
                </div>
            </div>

            <div class="cs-split-card success" id="cs-btn-short">
                <div class="cs-card-header">
                    <span class="cs-card-icon">✅</span>
                    <h3 class="cs-card-title">Optymalizacja: 3 x 85 mb</h3>
                </div>
                <p class="cs-card-desc">Podział dużej powierzchni salonu z antresolą na trzy mniejsze, niezależne strefy grzewcze podpięte pod dedykowany rozdzielacz, z zachowaniem reżimu poniżej 100 mb.</p>
                <div class="cs-card-solution">
                    Rozwiązanie wdrożone: Przepływy bez problemu ustawione na 2,2 l/min. Równomierny rozkład temperatury na całej powierzchni podłogi, bez obciążania pompy ciepła i obiegowej.
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Zabezpieczenie domenowe (bez tagów nagłówkowych, zgodnie z wcześniejszymi wytycznymi dla modułów bezpieczeństwa)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-case-study');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px;">Treść chroniona prawem autorskim</div>
                    <p style="font-size: 14px; margin-bottom: 15px;">Ten panel to autorska własność Projekt-Ogrzewania.pl.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #dc2626; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
            return;
        }
    }

    // Logika przełączania kart Case Study
    const cardLong = document.getElementById('cs-btn-long');
    const cardShort = document.getElementById('cs-btn-short');

    function toggleCards(activeCard, inactiveCard) {
        activeCard.classList.add('active');
        inactiveCard.classList.remove('active');
    }

    if (cardLong && cardShort) {
        cardLong.addEventListener('click', () => toggleCards(cardLong, cardShort));
        cardShort.addEventListener('click', () => toggleCards(cardShort, cardLong));
    }
});
</script>



<style>
:root {
    --bal-primary: #0f172a;
    --bal-panel: #ffffff;
    --bal-accent: #0ea5e9;
    --bal-accent-light: #e0f2fe;
    --bal-text: #334155;
    --bal-muted: #94a3b8;
    --bal-border: #e2e8f0;
    --bal-danger: #ef4444;
    --bal-success: #10b981;
    --bal-water: #38bdf8;
    --bal-water-dark: #0284c7;
}

.bal-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--bal-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--bal-border);
    overflow: hidden;
}

.bal-text-section {
    padding: 40px 50px 20px 50px;
}

/* Zmiana na H2 dla nagłówka głównego modułu */
.bal-text-section h2 {
    color: var(--bal-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 20px;
    line-height: 1.3;
}

.bal-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--bal-text);
    margin-bottom: 20px;
}

.bal-text-section a {
    color: var(--bal-accent-dark, #0284c7);
    font-weight: 700;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: 0.2s;
}

.bal-text-section a:hover {
    color: #0c4a6e;
}

/* ================= SYMULATOR ================= */
.bal-simulator {
    background: #f8fafc;
    border-top: 1px solid var(--bal-border);
    padding: 40px 50px;
}

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

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

.bal-slider-group {
    background: #ffffff;
    border: 1px solid var(--bal-border);
    padding: 20px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
}

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

.bal-label {
    font-size: 14px;
    font-weight: 800;
    color: var(--bal-primary);
    display: flex;
    align-items: center;
    gap: 8px;
}

.bal-badge {
    background: var(--bal-accent-light);
    color: var(--bal-water-dark);
    padding: 4px 12px;
    border-radius: 8px;
    font-weight: 900;
    font-size: 15px;
}

input[type=range].bal-slider {
    -webkit-appearance: none;
    width: 100%;
    background: transparent;
}
input[type=range].bal-slider::-webkit-slider-thumb {
    -webkit-appearance: none;
    height: 24px;
    width: 24px;
    border-radius: 50%;
    background: var(--bal-water-dark);
    cursor: pointer;
    margin-top: -9px;
    border: 3px solid #ffffff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
input[type=range].bal-slider::-webkit-slider-runnable-track {
    width: 100%;
    height: 6px;
    cursor: pointer;
    background: #cbd5e1;
    border-radius: 4px;
}

/* WIZUALIZACJA ROTAMETRÓW */
.bal-visualization {
    display: flex;
    justify-content: center;
    gap: 50px;
    background: #ffffff;
    border: 1px solid var(--bal-border);
    padding: 30px;
    border-radius: 16px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.02);
    position: relative;
}

.bal-rotameter-wrapper {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 15px;
}

/* Zmiana na H4 z wyzerowanym marginesem */
h4.bal-rotameter-title {
    font-size: 12px;
    font-weight: 800;
    color: var(--bal-muted);
    text-transform: uppercase;
    margin: 0;
}

.bal-rotameter-glass {
    width: 40px;
    height: 180px;
    background: #f1f5f9;
    border: 2px solid #cbd5e1;
    border-radius: 6px;
    position: relative;
    display: flex;
    align-items: flex-end;
    overflow: hidden;
    box-shadow: inset 0 2px 10px rgba(0,0,0,0.05);
}

.bal-rotameter-scale {
    position: absolute;
    left: 0;
    top: 0;
    bottom: 0;
    width: 10px;
    border-right: 1px solid rgba(0,0,0,0.1);
    background: repeating-linear-gradient(
        to bottom,
        transparent,
        transparent 19px,
        rgba(0,0,0,0.2) 19px,
        rgba(0,0,0,0.2) 20px
    );
    z-index: 2;
}

.bal-rotameter-fluid {
    width: 100%;
    background: linear-gradient(to top, var(--bal-water-dark), var(--bal-water));
    transition: height 0.4s cubic-bezier(0.4, 0, 0.2, 1);
    position: relative;
    z-index: 1;
}

/* Pływak (czerwony punkt na rotametrze) */
.bal-rotameter-float {
    width: 24px;
    height: 8px;
    background: #ef4444;
    border-radius: 4px;
    position: absolute;
    top: 0;
    left: 50%;
    transform: translate(-50%, -50%);
    box-shadow: 0 2px 4px rgba(0,0,0,0.3);
}

.bal-flow-readout {
    font-size: 18px;
    font-weight: 900;
    color: var(--bal-primary);
    font-family: 'Cambria Math', monospace;
}

/* WSKAŹNIKI I AKCJE */
.bal-status-panel {
    grid-column: 1 / -1;
    display: flex;
    justify-content: space-between;
    align-items: center;
    background: #fffbeb;
    border: 1px solid #fde68a;
    padding: 20px 30px;
    border-radius: 16px;
    transition: 0.3s;
}

.bal-status-panel.balanced {
    background: #f0fdf4;
    border-color: #bbf7d0;
}

.bal-status-panel.error {
    background: #fef2f2;
    border-color: #fecaca;
}

.bal-status-info {
    max-width: 60%;
}

/* Zmiana na H3 z zerowaniem marginesów dla dopasowania */
h3.bal-status-title {
    font-size: 16px;
    font-weight: 900;
    color: #92400e;
    margin: 0 0 5px 0;
}
.bal-status-panel.balanced h3.bal-status-title { color: #166534; }
.bal-status-panel.error h3.bal-status-title { color: #991b1b; }

.bal-status-desc {
    font-size: 13px;
    color: #b45309;
    line-height: 1.5;
}
.bal-status-panel.balanced .bal-status-desc { color: #15803d; }
.bal-status-panel.error .bal-status-desc { color: #b91c1c; }

.bal-action-btn {
    background: var(--bal-primary);
    color: #ffffff;
    border: none;
    padding: 14px 24px;
    border-radius: 12px;
    font-weight: 800;
    font-size: 14px;
    cursor: pointer;
    transition: 0.3s;
    display: flex;
    align-items: center;
    gap: 8px;
    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.2);
}

.bal-action-btn:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 15px rgba(15, 23, 42, 0.3);
}

.bal-action-btn:disabled {
    background: #cbd5e1;
    cursor: not-allowed;
    transform: none;
    box-shadow: none;
}

@media (max-width: 768px) {
    .bal-text-section { padding: 30px 25px 10px 25px; }
    .bal-simulator { padding: 30px 25px; }
    .bal-sim-grid { grid-template-columns: 1fr; gap: 30px; }
    .bal-status-panel { flex-direction: column; text-align: center; gap: 20px; }
    .bal-status-info { max-width: 100%; }
    .bal-action-btn { width: 100%; justify-content: center; }
}
</style>

<div class="bal-module-wrapper" id="app-hydraulic-balancing">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Symulator Równoważenia Hydraulicznego Pętli Ogrzewania",
        "description": "Interaktywne narzędzie ilustrujące zjawisko oporów hydraulicznych. Symuluje ucieczkę przepływu medium (wody grzewczej) do krótszych pętli i uczy konieczności stosowania rotametrów na rozdzielaczach.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#rownowazenie",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Wizualizacja zachowania wody jako medium szukającego najmniejszego oporu",
          "Dynamiczna zmiana długości dwóch sąsiadujących pętli (od 30m do 120m)",
          "Symulacja dławienia rotametrami w celu wymuszenia równego przepływu"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zasady równoważenia instalacji - Reguła Kucharskiego",
        "description": "Zestawienie parametrów projektowych chroniących układ przed rozregulowaniem termicznym posadzki.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Maksymalna różnica długości pętli",
            "value": "15%",
            "description": "Graniczna rozbieżność długości obwodów na jednym rozdzielaczu, powyżej której system wymaga mocnego dławienia (kryzowania)."
          },
          {
            "@type": "PropertyValue",
            "name": "Fizyka przepływu",
            "value": "Odwrotnie proporcjonalna do oporu",
            "description": "Woda zawsze wybierze pętlę o mniejszej długości, pozostawiając dłuższe obwody niedogrzanymi."
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="bal-text-section">
        <h2>Równoważenie hydrauliczne – serce wydajności</h2>
        <p>Nawet jeśli zaprojektowane pętle w Twoim domu nie przekraczają magicznej granicy 100 m, ale jedna ma 30 m (np. w małej łazience), a druga 90 m (w salonie), instalacja nie będzie działać poprawnie bez rygorystycznej regulacji. Woda, jako medium z natury "leniwe", <strong>popłynie tam, gdzie stawia najmniejszy opór</strong> – zaleje krótką pętlę, a długa pozostanie niemal bez przepływu.</p>
        <p>W moich projektach absolutnie wymuszam stosowanie wysokiej jakości <a href="https://projekt-ogrzewania.pl/produkt/rozdzielacz-ze-stali-nierdzewnej-inox-do-ogrzewania-podlogowego-z-rotametrami/">rozdzielaczy ze stali nierdzewnej</a> wyposażonych w zintegrowane układy pomiarowe. Złota <strong>Zasada Roberta Kucharskiego</strong> mówi jasno: Różnica w długości pętli na jednym rozdzielaczu nie powinna przekraczać 15%. Jeśli rozbieżności są większe, stosujemy bezwzględne kryzowanie na zaworach powrotnych lub dławienie <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">przepływomierzami (rotametrami)</a>, zwiększając sztucznie opór krótkich pętli, aby zmusić wodę do wejścia w strefy o większych stratach.</p>
    </div>

    <div class="bal-simulator">
        <div class="bal-sim-grid">
            
            <div class="bal-controls">
                <div class="bal-slider-group">
                    <div class="bal-label-row">
                        <span class="bal-label"><span style="font-size:20px">📏</span> Pętla 1 (Łazienka)</span>
                        <span class="bal-badge"><span id="bal-len1-val">30</span> m</span>
                    </div>
                    <input type="range" id="bal-len1" class="bal-slider" min="30" max="120" step="5" value="30">
                </div>

                <div class="bal-slider-group">
                    <div class="bal-label-row">
                        <span class="bal-label"><span style="font-size:20px">📏</span> Pętla 2 (Salon)</span>
                        <span class="bal-badge"><span id="bal-len2-val">90</span> m</span>
                    </div>
                    <input type="range" id="bal-len2" class="bal-slider" min="30" max="120" step="5" value="90">
                </div>
            </div>

            <div class="bal-visualization">
                <div class="bal-rotameter-wrapper">
                    <h4 class="bal-rotameter-title">Rotametr 1</h4>
                    <div class="bal-rotameter-glass">
                        <div class="bal-rotameter-scale"></div>
                        <div class="bal-rotameter-fluid" id="bal-fluid1" style="height: 80%;">
                            <div class="bal-rotameter-float"></div>
                        </div>
                    </div>
                    <span class="bal-flow-readout" id="bal-flow1-val">3.0 l/min</span>
                </div>

                <div class="bal-rotameter-wrapper">
                    <h4 class="bal-rotameter-title">Rotametr 2</h4>
                    <div class="bal-rotameter-glass">
                        <div class="bal-rotameter-scale"></div>
                        <div class="bal-rotameter-fluid" id="bal-fluid2" style="height: 20%;">
                            <div class="bal-rotameter-float"></div>
                        </div>
                    </div>
                    <span class="bal-flow-readout" id="bal-flow2-val">1.0 l/min</span>
                </div>
            </div>

            <div class="bal-status-panel error" id="bal-status-box">
                <div class="bal-status-info">
                    <h3 class="bal-status-title" id="bal-status-title">⚠️ Woda płynie na skróty!</h3>
                    <div class="bal-status-desc" id="bal-status-desc">
                        Różnica długości wynosi ponad 15%. Całe ciśnienie ucieka w krótszą pętlę (30m). Długa pętla (90m) jest głodzona cieplnie. Podłoga w salonie będzie zimna.
                    </div>
                </div>
                <button class="bal-action-btn" id="bal-fix-btn">
                    <span>🔧</span> Zdław krótszą pętlę
                </button>
            </div>

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

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez tagów H2/H3)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-hydraulic-balancing');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Narzędzie Chronione</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Symulator Równoważenia Hydraulicznego jest własnością intelektualną serwisu Projekt-Ogrzewania.pl.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
            return; 
        }
    }

    // Elementy UI
    const len1Input = document.getElementById('bal-len1');
    const len2Input = document.getElementById('bal-len2');
    const len1Val = document.getElementById('bal-len1-val');
    const len2Val = document.getElementById('bal-len2-val');
    
    const fluid1 = document.getElementById('bal-fluid1');
    const fluid2 = document.getElementById('bal-fluid2');
    const flow1Val = document.getElementById('bal-flow1-val');
    const flow2Val = document.getElementById('bal-flow2-val');
    
    const statusBox = document.getElementById('bal-status-box');
    const statusTitle = document.getElementById('bal-status-title');
    const statusDesc = document.getElementById('bal-status-desc');
    const fixBtn = document.getElementById('bal-fix-btn');

    // Zmienne symulacji
    const TOTAL_PUMP_FLOW = 4.0; // Maksymalna wydajność pompy l/min dla tych 2 pętli
    let isForcedBalance = false;

    function updatePhysics() {
        const L1 = parseFloat(len1Input.value);
        const L2 = parseFloat(len2Input.value);
        
        len1Val.textContent = L1;
        len2Val.textContent = L2;

        // Obliczanie różnicy procentowej (względem najdłuższej pętli)
        const maxL = Math.max(L1, L2);
        const minL = Math.min(L1, L2);
        const diffPercent = ((maxL - minL) / maxL) * 100;

        let flow1, flow2;

        if (isForcedBalance) {
            // Rotametry zdławione - przepływ po równo lub proporcjonalnie do potrzeb
            flow1 = TOTAL_PUMP_FLOW / 2;
            flow2 = TOTAL_PUMP_FLOW / 2;
            
            statusBox.className = 'bal-status-panel balanced';
            statusTitle.innerHTML = '✅ Układ zrównoważony!';
            statusDesc.innerHTML = 'Rotametr na krótszej pętli został zdławiony sztucznym oporem. Woda została zmuszona do wejścia w długą pętlę. Oba obwody grzeją równomiernie.';
            fixBtn.innerHTML = '<span>🔓</span> Resetuj dławienie';
        } else {
            // Fizyka "leniwej wody" - przepływ odwrotnie proporcjonalny do oporu (długości)
            // flow1 = TOTAL * (L2 / (L1 + L2)) - im większe L1, tym mniejsze L2 w liczniku
            flow1 = TOTAL_PUMP_FLOW * (L2 / (L1 + L2));
            flow2 = TOTAL_PUMP_FLOW * (L1 / (L1 + L2));

            if (diffPercent <= 15) {
                // Różnica w normie - układ naturalnie zbalansowany
                statusBox.className = 'bal-status-panel balanced';
                statusTitle.innerHTML = '✅ Zgodnie z zasadą inżynierską';
                statusDesc.innerHTML = `Różnica długości wynosi ok. ${Math.round(diffPercent)}%. Układ jest na tyle zbalansowany, że woda naturalnie rozkłada się równomiernie.`;
                fixBtn.disabled = true;
                fixBtn.innerHTML = '<span>✨</span> Idealnie';
            } else {
                // Dysproporcja
                statusBox.className = 'bal-status-panel error';
                const shortLoop = L1 < L2 ? L1 : L2;
                const longLoop = L1 > L2 ? L1 : L2;
                statusTitle.innerHTML = '⚠️ Woda płynie na skróty!';
                statusDesc.innerHTML = `Różnica wynosi aż ${Math.round(diffPercent)}% (>15%). Całe ciśnienie ucieka w krótszą pętlę (${shortLoop}m). Długa pętla (${longLoop}m) jest głodzona cieplnie.`;
                fixBtn.disabled = false;
                fixBtn.innerHTML = '<span>🔧</span> Zdław krótszą pętlę';
            }
        }

        // Renderowanie widoku rotametrów
        // Założenie: wys. rotametru to max 4 l/min (100%)
        const height1 = (flow1 / TOTAL_PUMP_FLOW) * 100;
        const height2 = (flow2 / TOTAL_PUMP_FLOW) * 100;

        fluid1.style.height = `${height1}%`;
        fluid2.style.height = `${height2}%`;
        
        flow1Val.textContent = `${flow1.toFixed(1)} l/min`;
        flow2Val.textContent = `${flow2.toFixed(1)} l/min`;
    }

    // Nasłuchiwanie zdarzeń
    len1Input.addEventListener('input', () => { isForcedBalance = false; updatePhysics(); });
    len2Input.addEventListener('input', () => { isForcedBalance = false; updatePhysics(); });

    fixBtn.addEventListener('click', () => {
        isForcedBalance = !isForcedBalance;
        updatePhysics();
    });

    // Inicjalizacja pierwszej klatki
    updatePhysics();
});
</script>



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

.calc-intro {
    max-width: 1150px;
    margin: 40px auto 10px auto;
    text-align: center;
    padding: 0 20px;
}

h2.calc-intro-title {
    font-size: 28px;
    font-weight: 900;
    color: var(--primary);
    margin-top: 0;
    margin-bottom: 15px;
}

.calc-intro p {
    font-size: 16px;
    color: #475569;
    line-height: 1.6;
    max-width: 800px;
    margin: 0 auto;
}

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

.calc-grid {
    display: grid;
    grid-template-columns: 1.2fr 1fr;
}

.config-side {
    padding: 40px;
    background: #ffffff;
}

h3.section-title {
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    color: #94a3b8;
    letter-spacing: 1.2px;
    margin-top: 0;
    margin-bottom: 20px;
    display: block;
}

.type-selector {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 10px;
    margin-bottom: 30px;
}

.type-btn {
    padding: 12px 6px;
    border: 2px solid #cbd5e1;
    border-radius: 12px;
    cursor: pointer;
    text-align: center;
    font-weight: 700;
    font-size: 13px;
    color: #475569;
    background: #fff;
    transition: all 0.2s;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
}

.type-btn span {
    margin-top: 4px;
    font-size: 10px;
    font-weight: 400;
}

.type-btn.active {
    border-color: var(--accent);
    background: #eff6ff;
    color: var(--accent);
    box-shadow: 0 4px 12px rgba(37, 99, 235, 0.1);
}

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

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

.result-side {
    padding: 40px;
    background: var(--bg-light);
    border-left: 1px solid #f1f5f9;
}

.main-score-box {
    background: white; padding: 30px; border-radius: 20px; text-align: center; box-shadow: 0 10px 25px rgba(0,0,0,0.03); margin-bottom: 25px; border-bottom: 6px solid var(--success); transition: 0.3s;
}
.score-num { font-size: 48px; font-weight: 900; line-height: 1; display: block; margin: 10px 0; }
.score-label { font-size: 12px; color: #64748b; font-weight: 700; text-transform: uppercase; }

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

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

.material-grid {
    display: grid; grid-template-columns: 1fr; gap: 10px; margin-top: 15px;
}
.mini-card { background: rgba(255,255,255,0.08); padding: 15px; border-radius: 12px; text-align: center;}
.mini-card span { font-size: 11px; color: #94a3b8; display: block; margin-bottom: 6px; text-transform: uppercase; font-weight: 600;}
.mini-card strong { font-size: 20px; color: #38bdf8; }

/* STOPKA CTA */
.footer-cta {
    margin: 0 40px 40px 40px;
    padding: 30px;
    background: #fffbeb;
    border-radius: 20px;
    border-left: 6px solid var(--warning);
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 30px;
}

.cta-text-side {
    max-width: 550px;
}

.cta-buttons-stack {
    display: flex;
    flex-direction: column; 
    gap: 12px;
    min-width: 280px; 
}

.cta-btn {
    display: block; background: var(--warning); color: white; text-decoration: none; padding: 16px 20px; border-radius: 12px; font-weight: 800; transition: 0.3s; font-size: 14px; text-align: center; border: none; cursor: pointer;
}
.cta-btn:hover { transform: translateY(-3px); box-shadow: 0 5px 15px rgba(234, 88, 12, 0.2); }

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

<div class="calc-intro">
    <h2 class="calc-intro-title">Kalkulator inżynierski: Graniczna długość pętli</h2>
    <p>Sprawdź, jak wybór średnicy rury oraz odległość pokoju od rozdzielacza wpływają na ostateczny podział obiegów. Narzędzie automatycznie dobiera limity hydrauliczne (np. 100 m dla rury 16 mm vs 130 m dla rury 20 mm) bazując na wytycznych <a href="https://projekt-ogrzewania.pl/" style="color: #2563eb; font-weight: 700; text-decoration: none;">Projekt-Ogrzewania.pl</a>.</p>
</div>

<div class="screed-calc" id="advanced-pipe-calc">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Zaawansowany Kalkulator Oporów i Długości Pętli (Ogrzewanie Podłogowe)",
        "applicationCategory": "EngineeringApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#kalkulator",
        "license": "https://projekt-ogrzewania.pl/",
        "description": "Profesjonalny kalkulator inżynierski uwzględniający dystans do rozdzielacza (tranzyty) oraz zróżnicowane limity oporów hydraulicznych w zależności od wybranej średnicy rury (16mm, 17mm, 20mm).",
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Wybór średnicy rury (zmienne wartości graniczne pętli)",
          "Obliczanie oporów tranzytów (dystans od rozdzielacza)",
          "Automatyczny podział na obiegi z podaniem długości pojedynczej pętli"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zmienne hydrauliczne pętli ogrzewania podłogowego",
        "description": "Zestawienie zmiennych wykorzystywanych do obliczania całkowitego zużycia przewodu rurowego oraz ilości sekcji rozdzielacza.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Limit pętli PEX 16x2.0",
            "value": "100",
            "unitCode": "MTR"
          },
          {
            "@type": "PropertyValue",
            "name": "Limit pętli PEX 17x2.0",
            "value": "110",
            "unitCode": "MTR"
          },
          {
            "@type": "PropertyValue",
            "name": "Limit pętli PEX 20x2.0",
            "value": "130",
            "unitCode": "MTR"
          },
          {
            "@type": "PropertyValue",
            "name": "Długość tranzytów",
            "value": "Odległość * 2 (Zasilanie + Powrót)"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="calc-grid">
        <div class="config-side">
            
            <h3 class="section-title">1. Geometria układu</h3>
            <div class="input-wrap">
                <div class="input-label-row"><label>Powierzchnia pokoju</label><span class="val-badge"><span id="v-area2">20</span> m²</span></div>
                <input type="range" id="area2" min="5" max="60" step="1" value="20">
            </div>
            
            <div class="input-wrap">
                <div class="input-label-row"><label>Odległość do rozdzielacza</label><span class="val-badge"><span id="v-distance">5</span> m</span></div>
                <input type="range" id="distance" min="0" max="25" step="1" value="5">
                <div style="font-size: 11px; color: #64748b; margin-top: 8px;">Długość korytarza. Kalkulator automatycznie policzy zasilanie i powrót (x2).</div>
            </div>

            <h3 class="section-title">2. Średnica rury (Limit oporów)</h3>
            <div class="type-selector" id="pipe-selector">
                <div class="type-btn active" data-limit="100">16x2.0 <span>Limit: 100 mb</span></div>
                <div class="type-btn" data-limit="110">17x2.0 <span>Limit: 110 mb</span></div>
                <div class="type-btn" data-limit="130">20x2.0 <span>Limit: 130 mb</span></div>
            </div>

            <h3 class="section-title">3. Rozstaw rur</h3>
            <div class="type-selector" id="spacing-selector" style="margin-bottom:0">
                <div class="type-btn" data-spacing="0.10">10 cm <span>Gęsty</span></div>
                <div class="type-btn active" data-spacing="0.15">15 cm <span>Optymalny</span></div>
                <div class="type-btn" data-spacing="0.20">20 cm <span>Rzadki</span></div>
            </div>
        </div>

        <div class="result-side">
            <div id="mainBox2" class="main-score-box">
                <span class="score-label">Faktyczna długość jednej pętli</span>
                <span class="score-num" id="resPerLoop">--</span>
                <span class="score-label">metrów</span>
                <div id="risk-msg2">⚠️ Uwaga!</div>
            </div>

            <div class="tech-grid">
                <div class="tech-item"><span>Sumaryczna ilość rury w pokoju:</span><strong id="resRoomPipe">--</strong></div>
                <div class="tech-item"><span>Rura zużyta na tranzyty (korytarz):</span><strong id="resTransitPipe">--</strong></div>
                <div class="tech-item" style="border-top: 1px dashed #334155; padding-top:12px"><span>Całkowite zapotrzebowanie materiału:</span><strong id="resTotalPipe">--</strong></div>
                
                <div class="material-grid">
                    <div class="mini-card">
                        <span>Liczba obiegów na rozdzielaczu:</span>
                        <strong id="resLoopCount">--</strong>
                    </div>
                </div>
            </div>
            
            <div style="margin-top:20px; font-size:11px; color:#94a3b8; font-weight:700">STRATY MATERIAŁU (TRANZYTY VS POKÓJ):</div>
            <div style="height:12px; display:flex; border-radius:6px; overflow:hidden; margin-top:10px; background:#e2e8f0">
                <div id="bar-room" style="background:var(--accent); width:80%; transition: 0.3s;"></div>
                <div id="bar-transit" style="background:#94a3b8; width:20%; transition: 0.3s;"></div>
            </div>
            <div style="display: flex; justify-content: space-between; font-size: 10px; color: #64748b; margin-top: 5px;">
                <span>Grzeje pokój</span>
                <span>Ucieka w korytarzu</span>
            </div>
        </div>
    </div>

    <div class="footer-cta">
        <div class="cta-text-side">
            <h3 style="margin-top:0; font-size: 21px; font-weight: 900; margin-bottom: 10px; color:#9a3412">Nie masz pewności co do wyliczeń? Nie ryzykuj!</h3>
            <p style="margin:0; font-size:14px; color:#78350f; line-height: 1.6;">Powyższy symulator to doskonałe narzędzie do wstępnej estymacji. Jednak ogrzewanie całego domu to skomplikowany system hydrauliczny. Błąd na tym etapie oznacza zimne strefy, przeciążenie pompy obiegowej i kucie wylewki. <strong>Zdaj się na fachową wiedzę inżynierską i zyskaj 100% gwarancji działania.</strong></p>
        </div>
        <div class="cta-buttons-stack">
            <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="cta-btn">
                ZAMÓW PROFESJONALNY PROJEKT →
            </a>
        </div>
    </div>

    <noscript>
        <div style="padding: 30px; background: #f8fafc; border-top: 1px solid #e2e8f0; font-family: sans-serif;">
            <h3 style="margin-top:0; font-size: 18px; color: #0f172a; font-weight: bold; margin-bottom: 15px;">Fizyka oporów hydraulicznych</h3>
            <p style="font-size: 13px; color: #475569; line-height: 1.6;">
                <strong>Maksymalna długość pętli ogrzewania podłogowego</strong> zależy od średnicy rury. Dla PEX 16mm to 100m, dla 17mm to 110m, a dla 20mm to 130m. Wzór na całkowitą długość to: (Powierzchnia / Rozstaw) + (Odległość od rozdzielacza * 2). Jeśli suma przekracza limit wybranej rury, obieg bezwzględnie musi zostać podzielony na rozdzielaczu.
            </p>
        </div>
    </noscript>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // BLOKADA DOMENOWA
    var domain = window.location.hostname;
    var allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (allowedDomains.indexOf(domain) === -1) {
        var appContainer = document.getElementById('advanced-pipe-calc');
        if (appContainer) {
            appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px; font-family: sans-serif;">' +
                '<span style="font-size: 48px; display: block; margin-bottom: 15px;">🔒</span>' +
                '<div style="margin-top:0; font-size: 24px; font-weight: bold; margin-bottom: 10px; color: #dc2626;">Kalkulator chroniony prawem autorskim</div>' +
                '<div style="font-size: 16px; margin-bottom: 25px;">Narzędzie inżynierskie jest własnością <a href="https://projekt-ogrzewania.pl/" style="color: #dc2626; font-weight: bold; text-decoration: underline;">Projekt-Ogrzewania.pl</a></div>' +
                '<a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 14px 28px; background: #dc2626; color: #ffffff; text-decoration: none; border-radius: 12px; font-weight: 800;">PRZEJDŹ DO ORYGINAŁU</a>' +
                '</div>';
        }
        return; 
    }

    // Zmienne domyślne
    var currentLimit = 100; // rura 16mm
    var currentSpacing = 0.15; // 15cm

    function calculateAdvanced() {
        var areaEl = document.getElementById('area2');
        var distEl = document.getElementById('distance');
        if(!areaEl || !distEl) return;

        var area = parseFloat(areaEl.value);
        var distance = parseFloat(distEl.value);
        
        // UI Suwaków
        document.getElementById('v-area2').innerText = area;
        document.getElementById('v-distance').innerText = distance;

        // OBLICZENIA INŻYNIERSKIE
        var roomPipe = area / currentSpacing;
        var transitPipe = distance * 2; // zasilanie i powrót
        var totalPipe = roomPipe + transitPipe;
        
        // Ilość obiegów (nie dzielimy "na sztywno" przy 100, tylko przy aktualnym limicie rury)
        var loopsRequired = Math.ceil(totalLengthCheck(totalPipe, currentLimit, transitPipe));
        var lengthPerLoop = totalPipe / loopsRequired;

        // UI Wyników
        document.getElementById('resRoomPipe').innerText = Math.round(roomPipe) + ' m';
        document.getElementById('resTransitPipe').innerText = Math.round(transitPipe) + ' m';
        document.getElementById('resTotalPipe').innerText = Math.round(totalPipe) + ' m';
        document.getElementById('resLoopCount').innerText = loopsRequired;
        document.getElementById('resPerLoop').innerText = Math.round(lengthPerLoop);

        // Ostrzeżenia i Kolory (Sprawdzamy długość PO podziale)
        var mBox = document.getElementById('mainBox2');
        var rMsg = document.getElementById('risk-msg2');
        var boxColor = 'var(--success)';
        var msgHtml = '';

        // Ostrzeżenie o długich tranzytach
        if (loopsRequired > 1 && (transitPipe * loopsRequired) > roomPipe) {
            boxColor = 'var(--warning)';
            msgHtml = '⚠️ <strong>Długi tranzyt!</strong> Korytarz zabiera większość rury. Ponieważ musisz podzielić pokój na ' + loopsRequired + ' pętle, korytarzem poprowadzisz ' + (loopsRequired * 2) + ' rury do rozdzielacza. Rozważ montaż dodatkowego rozdzielacza bliżej pokoju.';
        } else if (lengthPerLoop > (currentLimit * 0.9)) {
            // Ostrzeżenie, gdy zbliżamy się do limitu nawet po podziale
            boxColor = 'var(--warning)';
            msgHtml = '⚠️ Pętla jest blisko granicy oporów hydraulicznych (' + currentLimit + 'm) dla tej średnicy rury. Pompa obiegowa będzie pracować pod dużym obciążeniem.';
        }

        if (msgHtml !== '') {
            rMsg.innerHTML = msgHtml;
            rMsg.style.display = 'block';
        } else {
            rMsg.style.display = 'none';
        }
        mBox.style.borderColor = boxColor;

        // Pasek Proporcji
        var barTotal = totalPipe > 0 ? totalPipe : 1;
        var actualTransitTotal = transitPipe * loopsRequired; // jeśli są 2 pętle, tranzytów jest 2x więcej
        var actualTotal = roomPipe + actualTransitTotal;
        
        document.getElementById('bar-room').style.width = ((roomPipe / actualTotal) * 100) + '%';
        document.getElementById('bar-transit').style.width = ((actualTransitTotal / actualTotal) * 100) + '%';
    }

    // Funkcja weryfikująca czy podział jest możliwy (tranzyt nie może być dłuższy niż limit)
    function totalLengthCheck(total, limit, transit) {
        if(total <= limit) return 1;
        // Wymuszony podział. Sprawdzamy czy sam tranzyt nie jest dłuższy niż limit rury
        if(transit >= limit) {
             document.getElementById('risk-msg2').innerHTML = '❌ <strong>Błąd fizyki układu!</strong> Sam dojazd do rozdzielacza (' + transit + 'm) przekracza dopuszczalny limit oporów pętli (' + limit + 'm). Musisz przenieść rozdzielacz lub zmienić rurę na grubszą.';
             document.getElementById('risk-msg2').style.display = 'block';
             document.getElementById('mainBox2').style.borderColor = 'var(--danger)';
             return 99; // Zwraca błąd
        }
        return Math.ceil(total / (limit - transit*0.2)); // Lekki margines na przyłącza
    }

    // Obsługa przycisków ŚREDNICY
    var pipeBtns = document.querySelectorAll('#pipe-selector .type-btn');
    pipeBtns.forEach(function(btn) {
        btn.addEventListener('click', function(e) {
            pipeBtns.forEach(function(b) { b.classList.remove('active'); });
            this.classList.add('active');
            currentLimit = parseInt(this.getAttribute('data-limit'));
            calculateAdvanced();
        });
    });

    // Obsługa przycisków ROZSTAWU
    var spacingBtns = document.querySelectorAll('#spacing-selector .type-btn');
    spacingBtns.forEach(function(btn) {
        btn.addEventListener('click', function(e) {
            spacingBtns.forEach(function(b) { b.classList.remove('active'); });
            this.classList.add('active');
            currentSpacing = parseFloat(this.getAttribute('data-spacing'));
            calculateAdvanced();
        });
    });

    // Nasłuchiwanie suwaków
    var areaInput = document.getElementById('area2');
    var distInput = document.getElementById('distance');
    if(areaInput) areaInput.addEventListener('input', calculateAdvanced);
    if(distInput) distInput.addEventListener('input', calculateAdvanced);

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



<style>
:root {
    --di-primary: #0f172a;
    --di-panel: #ffffff;
    --di-accent: #0284c7;
    --di-accent-light: #e0f2fe;
    --di-text: #334155;
    --di-muted: #94a3b8;
    --di-border: #e2e8f0;
    --di-bg: #f8fafc;
    --di-danger: #ef4444;
    --di-warning: #f59e0b;
}

.di-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--di-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--di-border);
    overflow: hidden;
}

.di-text-section {
    padding: 40px 50px 20px 50px;
}

/* Zmiana na H2 dla głównego nagłówka modułu */
.di-text-section h2 {
    color: var(--di-primary);
    font-size: 24px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 15px;
    line-height: 1.3;
}

.di-text-section p {
    font-size: 16px;
    line-height: 1.8;
    color: var(--di-text);
    margin-bottom: 20px;
}

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

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

.di-text-section a:hover {
    color: #1e3a8a;
}

.di-alert-box {
    background: #fef2f2;
    border-left: 4px solid var(--di-danger);
    padding: 15px 20px;
    border-radius: 8px;
    color: #991b1b;
    font-size: 15px;
    font-weight: 600;
    margin-bottom: 30px;
}

/* ================= INTERAKTYWNY WIDŻET ================= */
.di-widget-container {
    margin: 0 50px 40px 50px;
    background: var(--di-bg);
    border: 1px solid var(--di-border);
    border-radius: 16px;
    display: flex;
    overflow: hidden;
}

.di-tabs-column {
    width: 35%;
    background: #ffffff;
    border-right: 1px solid var(--di-border);
    display: flex;
    flex-direction: column;
}

.di-tab-btn {
    background: transparent;
    border: none;
    border-bottom: 1px solid var(--di-border);
    padding: 20px;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s ease;
    display: flex;
    align-items: flex-start;
    gap: 12px;
    color: var(--di-muted);
}

.di-tab-btn:last-child {
    border-bottom: none;
}

.di-tab-icon {
    font-size: 20px;
    filter: grayscale(100%);
    opacity: 0.5;
    transition: 0.3s;
}

.di-tab-text {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.di-tab-title {
    font-size: 14px;
    font-weight: 800;
    color: var(--di-text);
    transition: 0.3s;
}

.di-tab-subtitle {
    font-size: 12px;
    font-weight: 500;
}

.di-tab-btn:hover {
    background: #f1f5f9;
}

.di-tab-btn.active {
    background: var(--di-accent-light);
    border-left: 4px solid var(--di-accent);
    padding-left: 16px; /* Kompensacja border-left */
}

.di-tab-btn.active .di-tab-icon {
    filter: grayscale(0%);
    opacity: 1;
}

.di-tab-btn.active .di-tab-title {
    color: var(--di-accent);
}

.di-tab-btn.active .di-tab-subtitle {
    color: var(--di-primary);
}

/* Panele z Treścią */
.di-content-column {
    width: 65%;
    padding: 30px;
    position: relative;
}

.di-panel {
    display: none;
    animation: diFadeIn 0.4s ease;
}

.di-panel.active {
    display: block;
}

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

.di-panel-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 15px;
}

/* Styl dla H3 w panelu */
h3.di-panel-title {
    margin: 0;
    font-size: 18px;
    font-weight: 900;
    color: var(--di-primary);
}

.di-panel-badge {
    background: var(--di-primary);
    color: #ffffff;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    padding: 4px 10px;
    border-radius: 6px;
    letter-spacing: 1px;
}

.di-panel-badge.warning {
    background: var(--di-warning);
    color: #ffffff;
}

.di-panel-content {
    font-size: 15px;
    color: var(--di-text);
    line-height: 1.7;
    margin-bottom: 20px;
}

.di-impact-box {
    background: #ffffff;
    border: 1px dashed var(--di-accent);
    padding: 15px 20px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    gap: 15px;
    box-shadow: 0 4px 10px rgba(0,0,0,0.02);
}

.di-impact-icon {
    font-size: 28px;
}

/* Zmiana na H4 dla skutków */
.di-impact-text h4 {
    display: block;
    font-size: 15px;
    color: var(--di-primary);
    margin: 0 0 3px 0;
    font-weight: bold;
}

.di-impact-text span {
    font-size: 13px;
    color: var(--di-muted);
}

@media (max-width: 768px) {
    .di-text-section { padding: 30px 25px 10px 25px; }
    .di-widget-container { margin: 20px 25px 30px 25px; flex-direction: column; }
    .di-tabs-column { width: 100%; border-right: none; border-bottom: 1px solid var(--di-border); flex-direction: row; overflow-x: auto; white-space: nowrap; }
    .di-tab-btn { border-bottom: none; border-right: 1px solid var(--di-border); min-width: 220px; }
    .di-tab-btn.active { border-left: none; border-bottom: 4px solid var(--di-accent); padding-left: 20px; padding-bottom: 16px; }
    .di-content-column { width: 100%; padding: 25px; }
}
</style>

<div class="di-module-wrapper" id="app-design-impact">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Analizator Wpływu Błędów na Projekt Ogrzewania Podłogowego",
        "description": "Interaktywny moduł edukacyjny analizujący kluczowe błędy infrastrukturalne (lokalizacja rozdzielacza, średnica pionu, OZC) i ich bezpośredni, destrukcyjny wpływ na maksymalną dostępną długość pętli grzewczej w pomieszczeniach.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#wplyw-na-projekt",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Wizualizacja straty długości roboczej pętli przez długie tranzyty",
          "Analiza spadku ciśnienia spowodowanego zbyt cienką rurą zasilającą rozdzielacz",
          "Korelacja gęstości rozstawu rur (OZC) z koniecznością podziału obiegów na mniejsze"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Wytyczne projektowe: Zależności infrastrukturalne w ogrzewaniu podłogowym",
        "description": "Zbiór zasad inżynierskich określających parametry urządzeń współpracujących, niezbędnych do utrzymania nominalnej długości pętli grzewczych.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Średnica rury zasilającej (Pion) dla >8 pętli",
            "value": "Min. 28 mm (Miedź) / 32 mm (PEX/PP)",
            "description": "Zapobiega generowaniu dodatkowych oporów przed wejściem wody w pętle."
          },
          {
            "@type": "PropertyValue",
            "name": "Strata długości na tranzytach",
            "value": "Nawet 20-30 metrów",
            "description": "Fizyczna strata rury wynikająca ze złej lokalizacji rozdzielacza."
          },
          {
            "@type": "PropertyValue",
            "name": "Wpływ OZC na rozstaw",
            "value": "Wysokie zapotrzebowanie (np. 80W/m2) wymusza zagęszczenie do 10 cm",
            "description": "Zagęszczenie drastycznie zwiększa metraż pętli, wymuszając jej skrócenie i podział."
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="di-text-section">
        <h2>Jak to wpływa na projekt ogrzewania podłogowego i OZC?</h2>
        <div class="di-alert-box">
            Projektowanie bez uwzględnienia maksymalnej długości pętli ogrzewania podłogowego to absolutnie najczęstszy powód reklamacji wydajnościowych w nowych budynkach.
        </div>
        <p>Błędy popełnione na etapie koncepcji rzutują na cały układ hydrauliczny. Skutki nieprzemyślanej infrastruktury towarzyszącej niemal zawsze objawiają się tym samym: koniecznością ratunkowego skracania pętli lub drastycznym wzrostem rachunków za prąd z powodu przeciążenia pompy obiegowej.</p>
        <p>Przeanalizujmy 3 najgroźniejsze błędy i ich wpływ na obwody grzewcze w interaktywnym panelu poniżej:</p>
    </div>

    <div class="di-widget-container">
        
        <div class="di-tabs-column">
            <button class="di-tab-btn active" data-target="panel-lokalizacja">
                <span class="di-tab-icon">🎯</span>
                <div class="di-tab-text">
                    <span class="di-tab-title">Lokalizacja rozdzielacza</span>
                    <span class="di-tab-subtitle">Problem asymetrii</span>
                </div>
            </button>
            <button class="di-tab-btn" data-target="panel-pion">
                <span class="di-tab-icon">🚰</span>
                <div class="di-tab-text">
                    <span class="di-tab-title">Średnica podejść (Pion)</span>
                    <span class="di-tab-subtitle">Dławienie na starcie</span>
                </div>
            </button>
            <button class="di-tab-btn" data-target="panel-ozc">
                <span class="di-tab-icon">🔥</span>
                <div class="di-tab-text">
                    <span class="di-tab-title">OZC a rozstaw rur</span>
                    <span class="di-tab-subtitle">Zapotrzebowanie na moc</span>
                </div>
            </button>
        </div>

        <div class="di-content-column">
            
            <div class="di-panel active" id="panel-lokalizacja">
                <div class="di-panel-header">
                    <span class="di-panel-badge warning">Błąd Topologii</span>
                    <h3 class="di-panel-title">Lokalizacja rozdzielacza</h3>
                </div>
                <div class="di-panel-content">
                    Lokalizacja szafki rozdzielaczowej <strong>musi być centralna</strong> względem ogrzewanej kondygnacji. Jeśli rozdzielacz zostanie upchnięty na jednym, skrajnym końcu domu (np. w garażu), pętle prowadzące do najdalszych pokoi tracą ogromną ilość swojego limitu na same podejścia – tzw. tranzyty biegnące przez korytarz.
                </div>
                <div class="di-impact-box">
                    <span class="di-impact-icon">✂️</span>
                    <div class="di-impact-text">
                        <h4>Skutek dla długości pętli: Drastyczne skrócenie</h4>
                        <span>Tracisz 20-30 metrów z dopuszczalnego limitu roboczego pętli, jeszcze zanim woda w ogóle wpłynie do docelowego pokoju.</span>
                    </div>
                </div>
            </div>

            <div class="di-panel" id="panel-pion">
                <div class="di-panel-header">
                    <span class="di-panel-badge">Błąd Hydrauliczny</span>
                    <h3 class="di-panel-title">Średnica podejść (Pion)</h3>
                </div>
                <div class="di-panel-content">
                    Dla dużych rozdzielaczy obsługujących powyżej 8 pętli, to <a href="https://projekt-ogrzewania.pl/jaka-srednica-rury-zasilajacej-rozdzielacz-w-ukladzie-ogrzewania-podlogowego-kalkulator/">jaka średnica rury zasilającej rozdzielacz (pion)</a> zostanie użyta, jest kluczowe. Przewód ten musi mieć średnicę <strong>minimum 28 mm (dla miedzi/stali) lub 32 mm (dla systemów PEX/PP)</strong>. Zbyt cienki pion dławi całą instalację na samym początku.
                </div>
                <div class="di-impact-box">
                    <span class="di-impact-icon">🛑</span>
                    <div class="di-impact-text">
                        <h4>Skutek dla pętli: Kaskadowy spadek ciśnienia</h4>
                        <span>Wąski pion generuje ogromne opory wstępne. Pompa "zużywa" swoją moc by przepchnąć wodę do belki, przez co w najdłuższych pętlach w pokojach woda niemal stoi w miejscu.</span>
                    </div>
                </div>
            </div>

            <div class="di-panel" id="panel-ozc">
                <div class="di-panel-header">
                    <span class="di-panel-badge warning">Błąd Bilansu</span>
                    <h3 class="di-panel-title">OZC a rozstaw rur</h3>
                </div>
                <div class="di-panel-content">
                    Jeśli z wyliczeń OZC wynika, że w danym pokoju musimy dostarczyć np. aż 80 W/m², a my planujemy ułożyć rurę co 15 cm, zasilanie musiałoby mieć ekstremalnie wysoką temperaturę (co jest zabójcze dla kosztów prądu przy pompie ciepła). Rozwiązaniem jest zmniejszenie <a href="https://projekt-ogrzewania.pl/rozstaw-rur-w-wodnym-ogrzewaniu-podlogowym/">rozstawu rur</a> do 10 cm. 
                </div>
                <div class="di-impact-box">
                    <span class="di-impact-icon">➗</span>
                    <div class="di-impact-text">
                        <h4>Skutek dla pętli: Wymuszony podział strefy</h4>
                        <span>Zagęszczenie rozstawu błyskawicznie "zjada" limit metrów. Pokój, który przy rozstawie 15 cm był na jednej pętli, przy 10 cm zmusza nas do podziału na dwa osobne obiegi i dodania sekcji.</span>
                    </div>
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (bez tagów H2/H3/H4 w komunikacie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-design-impact');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <span style="font-size: 40px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Narzędzie Chronione</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Ten interaktywny moduł edukacyjny jest chroniony prawem autorskim i należy do serwisu Projekt-Ogrzewania.pl.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">ZOBACZ ORYGINAŁ</a>
                </div>
            `;
            return; 
        }
    }

    // Logika przełączania zakładek
    const tabBtns = document.querySelectorAll('.di-tab-btn');
    const panels = document.querySelectorAll('.di-panel');

    tabBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            const targetId = this.getAttribute('data-target');

            // Reset stanów
            tabBtns.forEach(b => b.classList.remove('active'));
            panels.forEach(p => p.classList.remove('active'));

            // Aktywacja wybranych
            this.classList.add('active');
            const targetPanel = document.getElementById(targetId);
            if (targetPanel) {
                targetPanel.classList.add('active');
            }
        });
    });
});
</script>



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

h4.risk-label { 
    color: #64748b; 
    margin: 0;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
}

.risk-value { 
    font-size: 16px; 
    font-weight: 900; 
}

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

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

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

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

<div class="premium-download-box" id="download-app-lock">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Audytor Parametrów Pętli Ogrzewania Podłogowego",
        "description": "Interaktywna check-lista inżynierska pozwalająca ocenić ryzyko awarii hydraulicznej i termicznej instalacji na podstawie weryfikacji 5 kluczowych punktów dotyczących długości obiegów grzewczych.",
        "applicationCategory": "EngineeringCalculator",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#audyt",
        "license": "https://projekt-ogrzewania.pl/",
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Weryfikacja maksymalnej długości pętli (100 mb dla 16mm)",
          "Kontrola różnicy długości pętli na jednym rozdzielaczu (<15%)",
          "Kalkulacja ryzyka awarii na podstawie braków w dokumentacji wykonawczej"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Wytyczne projektowe: Ogrzewanie Podłogowe (Infografika &#038; PDF)",
        "description": "Zestawienie twardych parametrów projektowych (ciśnienia, długości, temperatury) w formie skondensowanej infografiki edukacyjnej oraz materiału PDF gotowego do druku.",
        "license": "https://projekt-ogrzewania.pl/",
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      },
      {
        "@context": "https://schema.org",
        "@type": "ImageObject",
        "author": {
          "@type": "Person",
          "name": "Robert Kucharski"
        },
        "contentUrl": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego-1.webp",
        "description": "Kompleksowa infografika techniczna przedstawiająca wytyczne i najczęstsze błędy dotyczące projektowania długości pętli ogrzewania podłogowego, w tym problem oporów hydraulicznych i spadku temperatury ΔT.",
        "name": "Infografika: Maksymalna długość pętli ogrzewania podłogowego"
      }
    ]
    </script>
    
    <div class="download-header">
        <h2 class="download-header-title">Zabierz tę wiedzę na budowę!</h2>
        <p>Nie pozwól, aby wykonawca zbagatelizował zasady fizyki. Pobierz darmową infografikę w formacie PDF lub sprawdź status zaprojektowanej instalacji w poniższym mini-audycie inżynierskim.</p>
    </div>

    <div class="download-grid">
        
        <div class="download-media-section">
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego-1.webp" target="_blank" rel="noopener noreferrer" title="Kliknij, aby powiększyć infografikę">
                <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego-1.webp" 
                     alt="Infografika techniczna: Maksymalna długość pętli ogrzewania podłogowego, optymalne parametry pracy i najczęstsze błędy wykonawcze." 
                     class="infographic-preview" loading="lazy">
            </a>
            
            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/Infografika-Maksymalna-dlugosc-petli-ogrzewania-podlogowego.pdf" 
               class="btn-download-pdf" target="_blank" rel="noopener noreferrer">
                <span>📄 Pobierz Poradnik PDF</span>
            </a>
            <div class="download-hint">Gotowy do druku format A4 dla Ciebie i instalatora.</div>
        </div>

        <div class="audit-section">
            <h3 class="audit-title"><span>🔍</span> Szybki audyt projektu</h3>
            
            <div class="checklist-container">
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Długość pojedynczej pętli nie przekracza granicy 100 mb.</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Różnica długości między obiegami na rozdzielaczu wynosi poniżej 15%.</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Do limitu długości pętli doliczono odcinki dobiegowe (tranzyty).</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Rozdzielacz wyposażony jest w rotametry do równoważenia.</div>
                </div>
                <div class="audit-checkbox-row" onclick="toggleAudit(this)">
                    <div class="custom-checkbox"></div>
                    <div class="audit-label">Zapotrzebowanie cieplne (OZC) dostosowano do rozstawu rur.</div>
                </div>
            </div>

            <div class="risk-meter-box">
                <div class="risk-header">
                    <h4 class="risk-label">Ryzyko awarii hydraulicznej:</h4>
                    <span class="risk-value" id="risk-percent" style="color: var(--danger);">100%</span>
                </div>
                <div class="risk-bar-container">
                    <div class="risk-bar-fill" id="risk-bar" style="width: 100%; background-color: var(--danger);"></div>
                </div>
                <div class="risk-message" id="risk-msg" style="background: #fee2e2; color: #991b1b; border: 1px solid #fca5a5;">
                    ⚠️ KRYTYCZNE RYZYKO. Instalacja zaprojektowana "na oko". Zignorowanie praw fizyki i oporów doprowadzi do zimnych stref. Pobierz PDF!
                </div>
            </div>

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

<script>
    // --- OCHRONA DOMENY (Bez tagów H2/H3 wewnątrz skryptu) ---
    document.addEventListener('DOMContentLoaded', function() {
        const domain = window.location.hostname;
        const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
        if (!allowedDomains.includes(domain)) {
            const appContainer = document.getElementById('download-app-lock');
            if (appContainer) {
                appContainer.innerHTML = '<div style="padding: 60px 20px; text-align: center; background: #fee2e2; color: #dc2626; border-radius: 24px;"><span style="font-size: 48px; margin-bottom: 20px; display:block;">🔒</span><div style="font-size: 24px; font-weight: 900; margin-bottom: 10px;">Treść chroniona prawem autorskim</div><p style="font-size: 15px;">Własność intelektualna Projekt-Ogrzewania.pl</p></div>';
            }
        }
    });

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

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

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

        // Logika zmiany kolorów i komunikatów
        if (riskLevel === 100) {
            riskPercentEl.style.color = 'var(--danger)';
            riskBarEl.style.backgroundColor = 'var(--danger)';
            riskMsgEl.style.background = '#fee2e2';
            riskMsgEl.style.color = '#991b1b';
            riskMsgEl.style.borderColor = '#fca5a5';
            riskMsgEl.innerHTML = '⚠️ KRYTYCZNE RYZYKO. Instalacja zaprojektowana "na oko". Zignorowanie oporów doprowadzi do zimnych stref. Pobierz PDF!';
        } else if (riskLevel >= 60) {
            riskPercentEl.style.color = 'var(--danger)';
            riskBarEl.style.backgroundColor = 'var(--danger)';
            riskMsgEl.style.background = '#fee2e2';
            riskMsgEl.style.color = '#991b1b';
            riskMsgEl.style.borderColor = '#fca5a5';
            riskMsgEl.innerHTML = '⚠️ WYSOKIE RYZYKO. Projekt ma istotne braki hydrauliczne. Pompa obiegowa będzie pracować pod dużym obciążeniem.';
        } else if (riskLevel > 0) {
            riskPercentEl.style.color = 'var(--warning)';
            riskBarEl.style.backgroundColor = 'var(--warning)';
            riskMsgEl.style.background = '#ffedd5';
            riskMsgEl.style.color = '#9a3412';
            riskMsgEl.style.borderColor = '#fdba74';
            riskMsgEl.innerHTML = '⚡ ŚREDNIE RYZYKO. Jesteś na dobrej drodze, ale upewnij się co do pozostałych punktów, by uniknąć problemów z przepływem.';
        } else {
            riskPercentEl.style.color = 'var(--success)';
            riskBarEl.style.backgroundColor = 'var(--success)';
            riskMsgEl.style.background = '#dcfce7';
            riskMsgEl.style.color = '#166534';
            riskMsgEl.style.borderColor = '#86efac';
            riskMsgEl.innerHTML = '✅ INSTALACJA BEZPIECZNA! Twój projekt spełnia rygorystyczne normy inżynierskie. Układ zadziała bezbłędnie.';
        }
    }
</script>



<style>
:root {
    --faq-primary: #0f172a;
    --faq-panel: #ffffff;
    --faq-accent: #0284c7;
    --faq-accent-light: #e0f2fe;
    --faq-text: #334155;
    --faq-muted: #94a3b8;
    --faq-border: #e2e8f0;
    --faq-bg: #f8fafc;
}

.faq-module-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--faq-panel);
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(0, 0, 0, 0.08);
    border: 1px solid var(--faq-border);
    overflow: hidden;
}

.faq-header-section {
    padding: 40px 50px 20px 50px;
    text-align: center;
}

/* Zmiana na H2 dla głównego nagłówka */
.faq-header-section h2 {
    color: var(--faq-primary);
    font-size: 26px;
    font-weight: 900;
    margin-top: 0;
    margin-bottom: 15px;
    line-height: 1.3;
}

.faq-header-section p {
    font-size: 16px;
    line-height: 1.6;
    color: var(--faq-muted);
    max-width: 600px;
    margin: 0 auto;
}

/* ================= INTERAKTYWNY AKORDION ================= */
.faq-accordion-container {
    padding: 0 50px 40px 50px;
}

.faq-item {
    border: 1px solid var(--faq-border);
    border-radius: 16px;
    margin-bottom: 15px;
    background: var(--faq-panel);
    transition: all 0.3s ease;
    overflow: hidden;
}

.faq-item:last-child {
    margin-bottom: 0;
}

.faq-item:hover {
    border-color: #bae6fd;
    box-shadow: 0 4px 12px rgba(2, 132, 199, 0.05);
}

.faq-item.active {
    border-color: var(--faq-accent);
    box-shadow: 0 8px 20px rgba(2, 132, 199, 0.1);
}

.faq-question {
    width: 100%;
    text-align: left;
    background: transparent;
    border: none;
    padding: 20px 25px;
    cursor: pointer;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 20px;
    transition: 0.3s;
    color: var(--faq-primary);
}

/* Zmiana na H3 dla nagłówków pytań z zerowaniem marginesów dla dopasowania */
h3.faq-question-title {
    font-size: 16px;
    font-weight: 800;
    margin: 0;
    color: inherit;
    line-height: 1.4;
}

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

.faq-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: #f1f5f9;
    color: var(--faq-accent);
    font-size: 18px;
    flex-shrink: 0;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), background 0.3s;
}

.faq-item.active .faq-icon {
    transform: rotate(180deg);
    background: var(--faq-accent);
    color: #ffffff;
}

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

.faq-answer {
    padding: 0 25px 25px 25px;
    font-size: 15px;
    line-height: 1.7;
    color: var(--faq-text);
    border-top: 1px dashed transparent;
}

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

.faq-answer strong {
    color: var(--faq-primary);
}

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

.faq-answer a:hover {
    color: #1e3a8a;
}

@media (max-width: 768px) {
    .faq-header-section { padding: 30px 25px 20px 25px; }
    .faq-accordion-container { padding: 0 25px 30px 25px; }
    .faq-question { padding: 15px 20px; }
    h3.faq-question-title { font-size: 15px; }
    .faq-answer { padding: 0 20px 20px 20px; font-size: 14px; }
    .faq-icon { width: 28px; height: 28px; font-size: 16px; }
}
</style>

<div class="faq-module-wrapper" id="app-faq-interactive">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": [
          {
            "@type": "Question",
            "name": "Czy pętla 120 m rury 16 mm będzie grzać?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Będzie, ale znacznie słabiej niż pozostałe. Pompa obiegowa może nie być w stanie wymusić tam przepływu powyżej 0,5–1,0 l/min, co przy dużych mrozach spowoduje niedogrzanie pomieszczenia i dyskomfort odczuwalny jako chłodniejsze pasy na podłodze."
            }
          },
          {
            "@type": "Question",
            "name": "Co zrobić, gdy wykonawca ułożył już pętlę 140 m?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Jedynym ratunkiem jest montaż dedykowanej, mocniejszej pompy obiegowej (np. 25-80 zamiast standardowej 25-40/60) tylko dla tego rozdzielacza oraz bardzo mocne zdławienie pozostałych pętli. Wiąże się to jednak z wyższym zużyciem energii elektrycznej przez pompę."
            }
          },
          {
            "@type": "Question",
            "name": "Jaki jest maksymalny koszt błędnego zaprojektowania pętli?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "W skali 15 lat eksploatacji, praca pompy ciepła na wyższych parametrach zasilania (wymuszona przez zbyt długie pętle i wysokie opory) może zwiększyć rachunki za prąd o 15–20%, co dla domu 150 m² oznacza stratę rzędu 12 000 – 18 000 PLN."
            }
          },
          {
            "@type": "Question",
            "name": "Czy rury dobiegowe (tranzyty) wliczają się w maksymalną długość pętli ogrzewania podłogowego?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Tak, i to jest najczęstszy błąd instalatorski! Odcinek od rozdzielacza do pokoju (zasilanie i powrót) stawia taki sam opór hydrauliczny i bezwzględnie musi być odjęty od limitu. Jeśli limit rury 16 mm to 100 m, a pokój jest 15 m od rozdzielacza (30 m rury w obie strony), na samo pomieszczenie zostaje Ci tylko 70 metrów bieżących."
            }
          },
          {
            "@type": "Question",
            "name": "Czy można połączyć dwie krótsze rury złączką, aby uzyskać maksymalną długość pętli?",
            "acceptedAnswer": {
              "@type": "Answer",
              "text": "Bezwzględnie nie. Maksymalna długość pętli ogrzewania podłogowego musi być ułożona z jednego, ciągłego odcinka. Złączki zaciskowe schowane pod wylewką to nie tylko potężne ryzyko kosztownego wycieku w przyszłości, ale też drastyczny wzrost oporów miejscowych, które mogą całkowicie zablokować przepływ."
            }
          }
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Interaktywny Panel Ekspercki FAQ - Ogrzewanie Podłogowe",
        "description": "Dynamiczny moduł akordionowy odpowiadający na krytyczne pytania inwestorów dotyczące przekraczania maksymalnej długości pętli, błędów wykonawczych i doboru elementów hydraulicznych.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#faq",
        "license": "https://projekt-ogrzewania.pl/",
        "offers": {
          "@type": "Offer",
          "price": "0",
          "priceCurrency": "PLN"
        },
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        },
        "featureList": [
          "Rozwijane odpowiedzi na problemy hydrauliczne",
          "Kalkulacja strat finansowych przy złym projekcie",
          "Rozwiązania ratunkowe dla źle wykonanej instalacji"
        ]
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Baza Wiedzy Inwestora: Błędy długości pętli",
        "description": "Zbiór ustrukturyzowanych danych rozwiązujących najczęstsze problemy na budowach związane ze zbyt długimi obiegami grzewczymi.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Koszt błędu na 15 lat (Dom 150m2)",
            "value": "12 000 - 18 000 PLN"
          },
          {
            "@type": "PropertyValue",
            "name": "Rozwiązanie ratunkowe dla pętli 140m",
            "value": "Pompa 25-80 + mocne dławienie pozostałych pętli"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      }
    ]
    </script>

    <div class="faq-header-section">
        <h2>FAQ – Najczęstsze pytania inwestorów</h2>
        <p>Rozwiewamy inżynierskie mity i odpowiadamy na pytania prosto z placu budowy. Sprawdź, z czym najczęściej mierzą się inwestorzy.</p>
    </div>

    <div class="faq-accordion-container">
        
        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Czy pętla 120 m rury 16 mm będzie grzać?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    Będzie, ale znacznie słabiej niż pozostałe. <a href="https://projekt-ogrzewania.pl/pompa-obiegowa-w-instalacji-ogrzewania-podlogowego/">Pompa obiegowa</a> może nie być w stanie wymusić tam przepływu powyżej 0,5–1,0 l/min, co przy dużych mrozach spowoduje niedogrzanie pomieszczenia i dyskomfort odczuwalny jako chłodniejsze pasy na podłodze.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Co zrobić, gdy wykonawca ułożył już pętlę 140 m?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    Jedynym ratunkiem jest montaż dedykowanej, mocniejszej pompy obiegowej (np. 25-80 zamiast standardowej 25-40/60) tylko dla tego rozdzielacza oraz bardzo mocne zdławienie (kryzowanie) pozostałych, krótszych pętli. Wiąże się to jednak z zauważalnie wyższym zużyciem energii elektrycznej przez pompę przez cały okres eksploatacji.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Jaki jest maksymalny koszt błędnego zaprojektowania pętli?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    W skali 15 lat eksploatacji, praca <a href="https://projekt-ogrzewania.pl/pompa-ciepla/">pompy ciepła</a> na wymuszonych, wyższych parametrach zasilania (aby przebić wysokie opory długich pętli) może zwiększyć rachunki za prąd o 15–20%. Dla standardowego domu o powierzchni 150 m² oznacza to realną stratę finansową rzędu <strong>12 000 – 18 000 PLN</strong>.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Czy rury dobiegowe (tranzyty) wliczają się w maksymalną długość pętli?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    <strong>Tak, i to jest najczęstszy błąd instalatorski!</strong> Odcinek od rozdzielacza do pokoju (zasilanie i powrót) stawia taki sam opór hydrauliczny i bezwzględnie musi być odjęty od limitu roboczego pomieszczenia. Jeśli limit rury 16 mm to 100 m, a pokój jest 15 m od rozdzielacza (30 m rury w obie strony), na same meandry w pokoju zostaje Ci tylko 70 metrów bieżących.
                </div>
            </div>
        </div>

        <div class="faq-item">
            <button class="faq-question">
                <h3 class="faq-question-title">Czy można połączyć rury złączką pod wylewką, aby uzyskać całą pętlę?</h3>
                <span class="faq-icon">↓</span>
            </button>
            <div class="faq-answer-wrapper">
                <div class="faq-answer">
                    <strong>Bezwzględnie nie.</strong> Maksymalna długość pętli ogrzewania podłogowego musi być zawsze ułożona z jednego, ciągłego odcinka rury (od belki zasilającej do belki powrotnej). Złączki zaprasowywane lub skręcane schowane pod jastrychem to nie tylko potężne ryzyko kosztownego wycieku w przyszłości, ale też drastyczny wzrost oporów miejscowych, które mogą całkowicie zaburzyć hydraulikę i zablokować przepływ.
                </div>
            </div>
        </div>

    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    
    // Zabezpieczenie domenowe (BEZ TAGÓW NAGŁÓWKOWYCH - H2, H3 itp.)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-faq-interactive');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #f8fafc; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-weight: 900; font-size: 20px; margin-bottom: 10px; color: #0ea5e9;">Treść Chroniona Licencją</div>
                    <div style="font-size: 14px; margin-bottom: 20px; color: #94a3b8;">Baza wiedzy FAQ stanowi autorską własność intelektualną serwisu Projekt-Ogrzewania.pl. Kopiowanie modułów interaktywnych jest zabronione.</div>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 10px 20px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 8px; font-weight: bold; font-size: 13px;">PRZEJDŹ DO ORYGINAŁU</a>
                </div>
            `;
            return; 
        }
    }

    // Logika Akordionu FAQ
    const faqItems = document.querySelectorAll('.faq-item');

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

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

            // Zwiń wszystkie inne (opcjonalne, dla zachowania porządku)
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.faq-answer-wrapper').style.maxHeight = null;
            });

            // Rozwiń/zwiń kliknięty
            if (!isActive) {
                item.classList.add('active');
                answerWrapper.style.maxHeight = answerWrapper.scrollHeight + "px";
            }
        });
    });
});
</script>



<style>
:root {
    --sum-primary: #0f172a;
    --sum-accent: #0284c7;
    --sum-bg: #f0f9ff;
    --sum-card: #ffffff;
    --sum-border: #e2e8f0;
    --sum-text: #334155;
    --sum-cta-bg: #0f172a;
}

.final-summary-module {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--sum-bg);
    border-radius: 32px;
    padding: 50px;
    border: 1px solid var(--sum-border);
    position: relative;
    overflow: hidden;
}

/* Dekoracja tła */
.final-summary-module::before {
    content: '∑';
    position: absolute;
    top: -20px;
    right: 20px;
    font-size: 150px;
    font-weight: 900;
    color: rgba(2, 132, 199, 0.05);
    z-index: 0;
}

.sum-content {
    position: relative;
    z-index: 1;
}

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

.sum-badge {
    display: inline-block;
    padding: 6px 16px;
    background: var(--sum-accent);
    color: #ffffff;
    border-radius: 50px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 15px;
}

/* Zmiana na H2 i wyzerowanie domyślnych marginesów przeglądarki */
h2.sum-title {
    font-size: 32px;
    font-weight: 900;
    color: var(--sum-primary);
    margin: 0 0 15px 0;
    line-height: 1.2;
}

/* Karty podsumowania */
.sum-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
    margin-bottom: 40px;
}

.sum-card {
    background: var(--sum-card);
    border: 1px solid var(--sum-border);
    padding: 25px;
    border-radius: 20px;
    text-align: center;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.sum-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 25px rgba(15, 23, 42, 0.08);
}

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

.sum-card-val {
    display: block;
    font-size: 24px;
    font-weight: 900;
    color: var(--sum-accent);
    margin-bottom: 5px;
}

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

/* Sekcja CTA Blog */
.sum-blog-cta {
    background: var(--sum-cta-bg);
    border-radius: 24px;
    padding: 40px;
    color: #ffffff;
    display: flex;
    align-items: center;
    gap: 40px;
    box-shadow: 0 20px 40px rgba(15, 23, 42, 0.2);
}

.sum-cta-text {
    flex: 1;
}

/* Zmiana na H3 z zerowaniem domyślnych marginesów */
h3.sum-cta-title {
    font-size: 22px;
    font-weight: 800;
    margin: 0 0 12px 0;
    line-height: 1.3;
}

.sum-cta-text p {
    font-size: 15px;
    line-height: 1.6;
    color: #94a3b8;
    margin: 0;
}

.sum-cta-btn-wrap {
    flex-shrink: 0;
}

.sum-cta-link {
    display: inline-block;
    padding: 18px 32px;
    background: var(--sum-accent);
    color: #ffffff;
    text-decoration: none;
    border-radius: 14px;
    font-weight: 800;
    font-size: 15px;
    transition: all 0.3s ease;
    text-transform: uppercase;
    letter-spacing: 1px;
}

.sum-cta-link:hover {
    background: #0ea5e9;
    transform: scale(1.05);
    box-shadow: 0 0 20px rgba(2, 132, 199, 0.4);
}

@media (max-width: 850px) {
    .sum-grid { grid-template-columns: 1fr; }
    .sum-blog-cta { flex-direction: column; text-align: center; padding: 30px; }
    .final-summary-module { padding: 30px 20px; }
    h2.sum-title { font-size: 26px; }
}
</style>

<div class="final-summary-module" id="app-final-summary">

    <script type="application/ld+json">
    [
      {
        "@context": "https://schema.org",
        "@type": "WebApplication",
        "name": "Kompendium Techniczne: Limity Pętli Grzewczych",
        "description": "Finalne podsumowanie inżynierskie określające maksymalną długość pętli ogrzewania podłogowego dla różnych standardów rur PEX/PERT.",
        "applicationCategory": "EducationalApplication",
        "operatingSystem": "All",
        "url": "https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/#podsumowanie",
        "license": "https://projekt-ogrzewania.pl/",
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski",
          "url": "https://projekt-ogrzewania.pl",
          "sameAs": [
            "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
            "https://www.linkedin.com/in/robert-kucharski-38069b48/"
          ]
        }
      },
      {
        "@context": "https://schema.org",
        "@type": "Dataset",
        "name": "Zasady Projektowe Podłogówki 2026",
        "description": "Zbiór kluczowych parametrów i limitów dla instalacji ogrzewania płaszczyznowego opracowany przez Roberta Kucharskiego.",
        "license": "https://projekt-ogrzewania.pl/",
        "variableMeasured": [
          {
            "@type": "PropertyValue",
            "name": "Maksymalna długość pętli 16mm",
            "value": "100 m"
          },
          {
            "@type": "PropertyValue",
            "name": "Maksymalna różnica długości (Zasada Kucharskiego)",
            "value": "15%"
          },
          {
            "@type": "PropertyValue",
            "name": "Optymalne Delta T (ΔT)",
            "value": "5K - 7K"
          }
        ],
        "creator": {
          "@type": "Person",
          "name": "Robert Kucharski"
        }
      }
    ]
    </script>

    <div class="sum-content">
        <div class="sum-header">
            <span class="sum-badge">Kluczowe wnioski</span>
            <h2 class="sum-title">Pamiętaj: Fizyka instalacji nie wybacza dróg na skróty</h2>
        </div>

        <div class="sum-grid">
            <div class="sum-card">
                <span class="sum-card-icon">📏</span>
                <span class="sum-card-val">100 mb</span>
                <span class="sum-card-label">Limit rury 16mm</span>
            </div>
            <div class="sum-card">
                <span class="sum-card-icon">⚖️</span>
                <span class="sum-card-val">15%</span>
                <span class="sum-card-label">Max. różnica pętli</span>
            </div>
            <div class="sum-card">
                <span class="sum-card-icon">🌡️</span>
                <span class="sum-card-val">5K - 10K</span>
                <span class="sum-card-label">Optymalne ΔT</span>
            </div>
        </div>

        <div class="sum-blog-cta">
            <div class="sum-cta-text">
                <h3 class="sum-cta-title">O ogrzewaniu podłogowym wiemy absolutnie wszystko.</h3>
                <p>Niezależnie od tego, czy szukasz informacji o <strong>pompach ciepła</strong>, chcesz zrozumieć jak działa <strong>rekuperacja</strong>, czy zastanawiasz się nad wyborem idealnej wylewki – na naszym blogu znajdziesz setki eksperckich artykułów podpartych projektami OZC i realizacjami z placów budowy.</p>
            </div>
            <div class="sum-cta-btn-wrap">
                <a href="https://projekt-ogrzewania.pl/blog/" class="sum-cta-link">
                    Odkryj wiedzę na blogu →
                </a>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // ZABEZPIECZENIE DOMENOWE (Brak tagów nagłówkowych w komunikacie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-final-summary');
        if (container) {
            container.innerHTML = `
                <div style="padding: 50px 30px; text-align: center; background: #0f172a; color: #ffffff; border-radius: 32px; font-family: sans-serif;">
                    <div style="font-size: 50px; margin-bottom: 20px;">🔒</div>
                    <div style="font-size: 22px; font-weight: 900; margin-bottom: 12px; color: #0ea5e9;">Podsumowanie jest chronione prawem autorskim</div>
                    <p style="font-size: 15px; color: #94a3b8; max-width: 450px; margin: 0 auto 25px auto;">Treść tego artykułu i modułów interaktywnych należy do serwisu Projekt-Ogrzewania.pl. Kopiowanie bez zgody inż. Roberta Kucharskiego jest zabronione.</p>
                    <a href="https://projekt-ogrzewania.pl/" style="display: inline-block; padding: 15px 30px; background: #0ea5e9; color: white; text-decoration: none; border-radius: 12px; font-weight: 800;">ZOBACZ ORYGINALNY WPIS</a>
                </div>
            `;
            container.style.background = '#0f172a';
            container.style.border = 'none';
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">Maksymalna długość pętli ogrzewania podłogowego.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
