<?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 ogrzewanie podłogowe a drewno - Projekt Ogrzewania</title>
	<atom:link href="https://projekt-ogrzewania.pl/tag/ogrzewanie-podlogowe-a-drewno/feed/" rel="self" type="application/rss+xml" />
	<link>https://projekt-ogrzewania.pl/tag/ogrzewanie-podlogowe-a-drewno/</link>
	<description>Twój partner w projektowaniu komfortu – profesjonalne ogrzewanie podłogowe dla Twojego domu.</description>
	<lastBuildDate>Wed, 13 May 2026 09:54:09 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.2</generator>

<image>
	<url>https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1-32x32.jpg</url>
	<title>Archiwa ogrzewanie podłogowe a drewno - Projekt Ogrzewania</title>
	<link>https://projekt-ogrzewania.pl/tag/ogrzewanie-podlogowe-a-drewno/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Wybór idealnego drewna do ogrzewania podłogowego – kompletna tabela i poradnik.</title>
		<link>https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/</link>
		
		<dc:creator><![CDATA[Robert Kucharski]]></dc:creator>
		<pubDate>Tue, 14 Oct 2025 11:21:47 +0000</pubDate>
				<category><![CDATA[Drewno]]></category>
		<category><![CDATA[Materiały budowlane]]></category>
		<category><![CDATA[Ogrzewanie podłogowe]]></category>
		<category><![CDATA[Podłogi drewniane]]></category>
		<category><![CDATA[Podłogi w domu]]></category>
		<category><![CDATA[Poradniki budowlane]]></category>
		<category><![CDATA[Poradniki dla inwestorów]]></category>
		<category><![CDATA[Poradniki domowe]]></category>
		<category><![CDATA[Poradniki inwestora]]></category>
		<category><![CDATA[Poradniki techniczne]]></category>
		<category><![CDATA[dąb]]></category>
		<category><![CDATA[deska warstwowa]]></category>
		<category><![CDATA[drewna egzotyczne]]></category>
		<category><![CDATA[drewno na ogrzewanie podłogowe]]></category>
		<category><![CDATA[montaż podłogi drewnianej]]></category>
		<category><![CDATA[ogrzewanie podłogowe a drewno]]></category>
		<category><![CDATA[podłoga na podłogówce]]></category>
		<category><![CDATA[poradnik budowlany]]></category>
		<category><![CDATA[rodzaje drewna]]></category>
		<category><![CDATA[stabilność drewna]]></category>
		<guid isPermaLink="false">https://projekt-ogrzewania.pl/?p=2807</guid>

					<description><![CDATA[<p>Planujesz piękną drewnianą podłogę w domu z ogrzewaniem podłogowym? To świetny pomysł, który gwarantuje niepowtarzalny klimat i komfort. Jednak nie każde drewno będzie dobrze współpracować z instalacją grzewczą. Aby uniknąć kosztownych pomyłek i rozczarowań, takich jak paczenie się desek czy powstawanie szpar, konieczny jest świadomy wybór materiału. W naszym artykule znajdziesz wybór idealnego drewna do ogrzewania podłogowego – kompletna tabela i poradnik, które rozwieją wszystkie Twoje wątpliwości. Dowiesz się, które gatunki są bezpieczne, a których lepiej unikać, oraz poznasz kluczowe zasady poprawnego montażu. Z nami Twoja podłoga będzie trwała, piękna i ciepła na długie lata.</p>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/">Wybór idealnego drewna do ogrzewania podłogowego – kompletna tabela i poradnik.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-wstep",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Wprowadzenie: Drewno jako okładzina na ogrzewanie podłogowe",
    "description": "Definicja i kluczowe parametry: stabilność wymiarowa, współczynnik przewodzenia ciepła lambda oraz opór cieplny drewna (max 0,15 m2K/W) na podłogówce.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-wstep",
    "name": "Wymagania Termofizyczne dla Drewna na Podłogówce",
    "description": "Zestawienie dopuszczalnego oporu cieplnego i wpływu klas stabilności higroskopijnej na bezpieczeństwo instalacji grzewczej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny drewna",
      "stabilność wymiarowa podłogi",
      "drewno na podłogówkę",
      "przewodzenie ciepła lambda",
      "praca higroskopijna drewna"
    ],
    "measurementTechnique": "Weryfikacja współczynnika przewodzenia ciepła lambda oraz analizy skurczu higroskopijnego w klasach 1-4 wg ISO.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Drewno optymalne: Opór cieplny poniżej 0,10 m2K/W, konstrukcja warstwowa, klasa stabilności 1 lub 2.",
        "Drewno ryzykowne: Opór cieplny powyżej 0,15 m2K/W, podatność na pęknięcia i szczeliny (praca higroskopijna)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-wstep",
    "name": "Analizator Pracy Higroskopijnej Drewna",
    "description": "Interaktywny panel ilustrujący zachowanie struktury drewna i dystrybucję ciepła w zależności od wybranego współczynnika przewodzenia lambda i oporu R.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-intro-dark: #1e293b;
    --rk-intro-wood: #c2410c;
    --rk-intro-accent: #f59e0b;
    --rk-intro-bg: #f8fafc;
    --rk-intro-border: #e2e8f0;
    --rk-intro-text: #334155;
    --rk-switch-on: #10b981;
    --rk-switch-off: #ef4444;
}

.rk-intro-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 15px 35px -10px rgba(15, 23, 42, 0.1);
    border: 1px solid var(--rk-intro-border);
    overflow: hidden;
}

/* Sekcja Wprowadzenia (Top) */
.rk-intro-header {
    padding: 45px 50px;
    background: var(--rk-intro-bg);
    border-bottom: 2px solid var(--rk-intro-border);
    position: relative;
}

.rk-intro-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(194, 65, 12, 0.1);
    color: var(--rk-intro-wood);
    padding: 8px 20px;
    border-radius: 12px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 25px;
}

.rk-intro-content h2 {
    font-size: 28px;
    font-weight: 900;
    color: var(--rk-intro-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-intro-lead {
    font-size: 18px;
    line-height: 1.7;
    color: var(--rk-intro-text);
    margin: 0;
    border-left: 4px solid var(--rk-intro-wood);
    padding-left: 20px;
}

.rk-intro-lead strong {
    color: var(--rk-intro-dark);
    font-weight: 800;
}

/* Interaktywny Moduł (Środek) */
.rk-intro-interactive {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-intro-interactive h3 {
    text-align: center;
    font-size: 20px;
    color: var(--rk-intro-dark);
    margin: 0 0 30px 0;
}

/* Mobile-style Toggle Switch */
.rk-toggle-wrapper {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 20px;
    margin-bottom: 40px;
    background: #f1f5f9;
    padding: 15px 30px;
    border-radius: 999px;
    width: max-content;
    margin-left: auto;
    margin-right: auto;
}

.rk-toggle-label {
    font-weight: 700;
    font-size: 15px;
    color: var(--rk-intro-text);
    transition: color 0.3s;
}

.rk-toggle-label.active-off { color: var(--rk-switch-off); }
.rk-toggle-label.active-on { color: var(--rk-switch-on); }

.rk-switch {
    position: relative;
    display: inline-block;
    width: 66px;
    height: 36px;
}

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

.rk-slider {
    position: absolute;
    cursor: pointer;
    top: 0; left: 0; right: 0; bottom: 0;
    background-color: var(--rk-switch-off);
    transition: .4s cubic-bezier(0.4, 0, 0.2, 1);
    border-radius: 36px;
    box-shadow: inset 0 2px 4px rgba(0,0,0,0.1);
}

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

input:checked + .rk-slider { background-color: var(--rk-switch-on); }
input:checked + .rk-slider:before { transform: translateX(30px); }

/* Animacja i Wynik */
.rk-dyn-area {
    display: grid;
    grid-template-columns: 180px 1fr;
    gap: 40px;
    align-items: center;
    background: var(--rk-intro-bg);
    padding: 30px;
    border-radius: 20px;
    border: 1px solid var(--rk-intro-border);
}

.rk-anim-box {
    width: 100%;
    aspect-ratio: 1;
    background: #ffffff;
    border-radius: 16px;
    padding: 15px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.rk-anim-svg { width: 100%; height: 100%; overflow: visible; }

/* SVG States */
.state-bad .anim-board { fill: #854d0e; transition: all 0.5s; animation: swell 2s infinite alternate ease-in-out; }
.state-bad .anim-heat { stroke: #ef4444; stroke-width: 3; stroke-dasharray: 4 4; animation: heatBlock 1s infinite linear; }
.state-bad .anim-crack { stroke: #422006; stroke-width: 2; opacity: 1; transition: opacity 0.3s 0.5s; }

.state-good .anim-board { fill: #d97706; transition: all 0.5s; transform: scaleY(1); }
.state-good .anim-heat { stroke: #10b981; stroke-width: 4; stroke-dasharray: none; animation: heatPass 1.5s infinite linear; }
.state-good .anim-crack { opacity: 0; transition: opacity 0.2s; }

@keyframes swell {
    0% { transform: scaleY(1); }
    100% { transform: scaleY(1.15) translateY(-5px); }
}
@keyframes heatBlock {
    0% { stroke-dashoffset: 8; opacity: 0.8; transform: translateY(5px); }
    100% { stroke-dashoffset: 0; opacity: 0.2; transform: translateY(0px); }
}
@keyframes heatPass {
    0% { transform: translateY(15px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-15px); opacity: 0; }
}

.rk-dyn-content h4 {
    font-size: 22px;
    font-weight: 900;
    margin: 0 0 10px 0;
    transition: color 0.3s;
}

.rk-dyn-content p {
    font-size: 15px;
    line-height: 1.6;
    color: var(--rk-intro-text);
    margin: 0 0 15px 0;
}

.rk-dyn-content a {
    color: var(--rk-intro-wood);
    font-weight: 700;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* CTA Dolne */
.rk-intro-cta {
    padding: 30px 50px;
    background: var(--rk-intro-dark);
    text-align: center;
}

.rk-btn-link {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    color: #ffffff;
    font-weight: 800;
    font-size: 16px;
    text-decoration: none;
    padding: 15px 30px;
    border-radius: 12px;
    background: rgba(255,255,255,0.1);
    border: 1px solid rgba(255,255,255,0.2);
    transition: all 0.3s;
}

.rk-btn-link:hover {
    background: var(--rk-intro-wood);
    border-color: var(--rk-intro-wood);
    transform: translateY(-2px);
}

@media (max-width: 768px) {
    .rk-intro-header, .rk-intro-interactive, .rk-intro-cta { padding: 30px 20px; }
    .rk-dyn-area { grid-template-columns: 1fr; text-align: center; gap: 20px; }
    .rk-anim-box { max-width: 150px; margin: 0 auto; }
    .rk-toggle-wrapper { width: 100%; padding: 15px; gap: 10px; flex-direction: column; border-radius: 16px; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-intro-container" id="drewno-wstep-app">
    <!-- Wprowadzenie Merytoryczne -->
    <div class="rk-intro-header">
        <div class="rk-intro-badge">
            <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 20V10M18 20V4M6 20v-4"></path></svg>
            Parametry Startowe
        </div>
        <div class="rk-intro-content">
            <h2>Fundamenty wyboru naturalnej okładziny</h2>
            <p class="rk-intro-lead">
                Drewno do ogrzewania podłogowego to naturalny materiał wykończeniowy, który dzięki odpowiedniej <strong>stabilności wymiarowej i konstrukcji warstwowej</strong> pozwala na efektywne przekazywanie ciepła z instalacji wodnej do pomieszczenia. Wybór drewna na „podłogówkę” wymaga uwzględnienia współczynnika przewodzenia ciepła lambda oraz klasy stabilności gatunku, aby uniknąć pęknięć i szczelin wynikających z pracy higroskopijnej materiału. Prawidłowo dobrane drewno, o oporze cieplnym <strong>nieprzekraczającym 0,15 m2K/W</strong>, gwarantuje komfort cieplny przy zachowaniu estetyki naturalnego surowca.
            </p>
        </div>
    </div>

    <!-- Symulator Parametrów -->
    <div class="rk-intro-interactive">
        <h3>Przeanalizuj wpływ parametrów na podłogę</h3>
        
        <!-- Toggle Switch -->
        <div class="rk-toggle-wrapper">
            <span class="rk-toggle-label active-off" id="lblBad">Niestabilne (Opór > 0,15)</span>
            <label class="rk-switch">
                <input type="checkbox" id="woodParamToggle">
                <span class="rk-slider"></span>
            </label>
            <span class="rk-toggle-label" id="lblGood">Optymalne (Opór < 0,10)</span>
        </div>

        <!-- Dynamiczna Strefa Wyniku -->
        <div class="rk-dyn-area state-bad" id="woodDynArea">
            <div class="rk-anim-box">
                <svg class="rk-anim-svg" viewBox="0 0 100 100">
                    <!-- Rura grzewcza -->
                    <circle cx="50" cy="85" r="8" fill="none" stroke="#64748b" stroke-width="3" />
                    <circle cx="50" cy="85" r="5" fill="#ef4444" opacity="0.8" />
                    
                    <!-- Fale Ciepła -->
                    <path class="anim-heat" d="M30,70 Q30,45 30,20" fill="none" stroke-linecap="round" />
                    <path class="anim-heat" d="M50,70 Q50,45 50,20" fill="none" stroke-linecap="round" style="animation-delay: 0.3s;" />
                    <path class="anim-heat" d="M70,70 Q70,45 70,20" fill="none" stroke-linecap="round" style="animation-delay: 0.6s;" />

                    <!-- Deska / Drewno -->
                    <g transform="translate(10, 30)">
                        <rect class="anim-board" x="0" y="0" width="80" height="15" rx="2" />
                        <!-- Pęknięcia -->
                        <path class="anim-crack" d="M20,0 L25,8 L22,15" fill="none" />
                        <path class="anim-crack" d="M60,0 L55,10 L58,15" fill="none" />
                    </g>
                </svg>
            </div>
            <div class="rk-dyn-content" id="woodDynContent">
                <h4 style="color: var(--rk-switch-off);">Blokada cieplna i odkształcenia</h4>
                <p>Przekroczenie oporu <strong>0,15 m2K/W</strong> (np. gruba deska lita) powoduje zatrzymanie ciepła pod okładziną. Podłoga nie grzeje efektywnie, a wysoka temperatura od spodu drastycznie wysusza drewno.</p>
                <p>Niska klasa stabilności prowadzi do ekstremalnej <strong>pracy higroskopijnej</strong> – drewno kurczy się i pęka. Zrozum <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">jak opór cieplny R wpływa na całą instalację</a>.</p>
            </div>
        </div>
    </div>

    <!-- CTA -->
    <div class="rk-intro-cta">
        <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/" class="rk-btn-link">
            POZNAJ MECHANIKĘ DZIAŁANIA PODŁOGÓWKI
            <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domeny (bez H2/H3/H4)
    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('drewno-wstep-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fffbeb; color: #b45309; border: 2px dashed #f59e0b; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">⚠️</div>
                    <div style="font-size: 18px; font-weight: 800; margin-bottom: 10px;">Brak Autoryzacji</div>
                    <div style="font-size: 14px; line-height: 1.6; max-width: 500px; margin: 0 auto;">
                        Skrypt interaktywny i ukryte dane JSON-LD zostały skopiowane z serwisu Projekt-Ogrzewania.pl bez zgody autora. Prosimy o usunięcie kodu z tej domeny.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Toggle Switcha (Aplikacyjna)
    const toggle = document.getElementById('woodParamToggle');
    const area = document.getElementById('woodDynArea');
    const content = document.getElementById('woodDynContent');
    const lblBad = document.getElementById('lblBad');
    const lblGood = document.getElementById('lblGood');

    toggle.addEventListener('change', function() {
        if (this.checked) {
            // Stan OPTYMALNY
            area.className = 'rk-dyn-area state-good';
            lblGood.classList.add('active-on');
            lblBad.classList.remove('active-off');
            
            content.innerHTML = `
                <h4 style="color: var(--rk-switch-on);">Płynne przekazywanie ciepła</h4>
                <p>Wybór deski warstwowej o oporze <strong>poniżej 0,10 m2K/W</strong> (np. dąb 14 mm) pozwala ciepłu z rur na swobodne przenikanie do wnętrza pomieszczenia.</p>
                <p>Dzięki wysokiej stabilności wymiarowej (klasa 1), drewno nie ulega odkształceniom pod wpływem temperatury. Sprawdź, czy <a href="https://projekt-ogrzewania.pl/czy-ogrzewanie-podlogowe-moze-byc-jedynym-zrodlem-ciepla-w-domu-analiza-dla-polskich-warunkow/">takie rozwiązanie wystarczy jako jedyne źródło ciepła</a>.</p>
            `;
        } else {
            // Stan NIESTABILNY
            area.className = 'rk-dyn-area state-bad';
            lblBad.classList.add('active-off');
            lblGood.classList.remove('active-on');
            
            content.innerHTML = `
                <h4 style="color: var(--rk-switch-off);">Blokada cieplna i odkształcenia</h4>
                <p>Przekroczenie oporu <strong>0,15 m2K/W</strong> (np. gruba deska lita) powoduje zatrzymanie ciepła pod okładziną. Podłoga nie grzeje efektywnie, a wysoka temperatura od spodu drastycznie wysusza drewno.</p>
                <p>Niska klasa stabilności prowadzi do ekstremalnej <strong>pracy higroskopijnej</strong> – drewno kurczy się i pęka. Zrozum <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">jak opór cieplny R wpływa na całą instalację</a>.</p>
            `;
        }
    });
});
</script>



<ul class="wp-block-list">
<li></li>
</ul>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-temperatura",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Maksymalna temperatura powierzchni podłogi drewnianej (PN-EN 1264)",
    "description": "Zgodnie z normą PN-EN 1264 graniczna temperatura dla drewna na podłogówce wynosi 27°C. Sprawdź, jak zbyt wysokie parametry zasilania niszczą strukturę deski.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-temperatura",
    "name": "Parametry Pracy Instalacji Płaszczyznowej dla Okładzin Drewnianych",
    "description": "Zależność między temperaturą zasilania z pompy ciepła/kotła a temperaturą powierzchni podłogi drewnianej i jej wilgotnością resztkową.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "maksymalna temperatura podłogi 27°C",
      "norma PN-EN 1264 podłogówka",
      "temperatura zasilania ogrzewania podłogowego",
      "współczynnik przewodzenia ciepła dębu",
      "spadek wilgotności drewna podłogowego"
    ],
    "measurementTechnique": "Korelacja termowizyjna temperatury zasilania (Tz) z temperaturą powierzchni (Tp) oraz pomiar higrometryczny wilgotności komórkowej drewna.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Stan Optymalny: Zasilanie 35-40°C -> Powierzchnia 24-26°C -> Wilgotność drewna ok. 8%.",
        "Stan Krytyczny: Zasilanie >45°C -> Powierzchnia >27°C -> Wilgotność <6% (ryzyko pęknięć)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-temperatura",
    "name": "Symulator Degradacji Termicznej Drewna",
    "description": "Interaktywny suwak parametrów zasilania demonstrujący wpływ zbyt gorącego czynnika grzewczego na strukturę drewna, wilgotność oraz pękanie szczelin.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-temp-dark: #111827;
    --rk-temp-blue: #3b82f6;
    --rk-temp-orange: #f97316;
    --rk-temp-red: #ef4444;
    --rk-temp-bg: #ffffff;
    --rk-temp-panel: #f3f4f6;
    --rk-temp-border: #e5e7eb;
}

.rk-temp-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-temp-bg);
    border-radius: 24px;
    box-shadow: 0 10px 30px -10px rgba(0, 0, 0, 0.1);
    border: 1px solid var(--rk-temp-border);
    overflow: hidden;
}

/* Część Tekstowa */
.rk-temp-content-box {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-temp-content-box h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-temp-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-temp-text {
    font-size: 16px;
    line-height: 1.8;
    color: #4b5563;
    margin: 0;
}

.rk-temp-text p {
    margin-bottom: 15px;
}

.rk-temp-text strong {
    color: var(--rk-temp-dark);
    font-weight: 700;
}

.rk-temp-text a {
    color: var(--rk-temp-blue);
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-temp-blue);
    transition: all 0.2s;
}

.rk-temp-text a:hover {
    color: var(--rk-temp-orange);
    border-bottom-color: var(--rk-temp-orange);
}

.rk-highlight-box {
    background: #fff7ed;
    border-left: 4px solid var(--rk-temp-orange);
    padding: 15px 20px;
    margin: 20px 0;
    border-radius: 0 8px 8px 0;
    font-size: 15px;
}

/* Interaktywny Symulator (Z suwakiem) */
.rk-temp-simulator {
    padding: 40px 50px;
    background: var(--rk-temp-dark);
    color: #ffffff;
    border-top: 1px solid var(--rk-temp-border);
}

.rk-temp-simulator h3 {
    margin: 0 0 30px 0;
    font-size: 22px;
    font-weight: 800;
    text-align: center;
    color: #f3f4f6;
}

.rk-sim-grid {
    display: grid;
    grid-template-columns: 1fr 300px;
    gap: 40px;
    align-items: center;
}

/* Suwak i Panele Danych */
.rk-slider-section {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-slider-group {
    background: rgba(255, 255, 255, 0.05);
    padding: 20px 25px;
    border-radius: 16px;
    border: 1px solid rgba(255, 255, 255, 0.1);
}

.rk-slider-label {
    display: flex;
    justify-content: space-between;
    font-size: 15px;
    font-weight: 600;
    color: #9ca3af;
    margin-bottom: 15px;
}

.rk-val-tz {
    color: var(--rk-temp-orange);
    font-size: 20px;
    font-weight: 800;
}

.rk-range {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: linear-gradient(to right, #3b82f6, #f97316, #ef4444);
    outline: none;
}

.rk-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    appearance: none;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #ffffff;
    cursor: pointer;
    box-shadow: 0 0 10px rgba(0,0,0,0.5);
    border: 3px solid var(--rk-temp-dark);
    transition: transform 0.1s;
}

.rk-range::-webkit-slider-thumb:active {
    transform: scale(1.2);
}

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

.rk-data-card {
    background: rgba(0, 0, 0, 0.3);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
    border: 1px solid rgba(255,255,255,0.05);
    transition: all 0.3s;
}

.rk-data-card span {
    display: block;
    font-size: 12px;
    color: #9ca3af;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 5px;
}

.rk-data-card strong {
    display: block;
    font-size: 24px;
    font-weight: 900;
}

/* Stany Kolorystyczne */
.status-safe .val-tp { color: #10b981; }
.status-safe .val-rh { color: #3b82f6; }
.status-danger .val-tp { color: var(--rk-temp-red); animation: pulseText 1s infinite; }
.status-danger .val-rh { color: var(--rk-temp-red); }

@keyframes pulseText {
    0% { opacity: 1; }
    50% { opacity: 0.5; }
    100% { opacity: 1; }
}

/* Animacja SVG */
.rk-svg-section {
    background: #ffffff;
    border-radius: 20px;
    padding: 20px;
    position: relative;
}

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

/* Elementy SVG */
.svg-pipe { transition: fill 0.5s; }
.svg-heat-arrow { transition: opacity 0.3s, transform 0.5s; opacity: 0; }
.svg-wood-top { transition: fill 0.5s; }
.svg-crack { stroke: #1e293b; stroke-width: 2; opacity: 0; transition: opacity 0.5s; }

/* SVG stany */
.status-safe .svg-pipe { fill: #f97316; }
.status-safe .svg-heat-arrow { opacity: 0.6; stroke: #f97316; animation: floatUpSafe 2s infinite ease-in-out; }
.status-safe .svg-wood-top { fill: #d97706; }

.status-danger .svg-pipe { fill: #ef4444; }
.status-danger .svg-heat-arrow { opacity: 0.9; stroke: #ef4444; animation: floatUpDanger 0.8s infinite linear; }
.status-danger .svg-wood-top { fill: #92400e; }
.status-danger .svg-crack { opacity: 1; stroke-dasharray: 20; animation: drawCrack 1s forwards; }

@keyframes floatUpSafe {
    0% { transform: translateY(5px); }
    50% { transform: translateY(-5px); }
    100% { transform: translateY(5px); }
}

@keyframes floatUpDanger {
    0% { transform: translateY(10px); }
    100% { transform: translateY(-15px); opacity: 0; }
}

@keyframes drawCrack {
    from { stroke-dashoffset: 20; }
    to { stroke-dashoffset: 0; }
}

.rk-alert-msg {
    position: absolute;
    top: 10px; left: 10px; right: 10px;
    background: rgba(239, 68, 68, 0.9);
    color: #fff;
    padding: 8px;
    border-radius: 8px;
    text-align: center;
    font-size: 13px;
    font-weight: 800;
    opacity: 0;
    transition: opacity 0.3s;
    pointer-events: none;
}

.status-danger .rk-alert-msg {
    opacity: 1;
}

@media (max-width: 768px) {
    .rk-temp-content-box, .rk-temp-simulator { padding: 30px 20px; }
    .rk-sim-grid { grid-template-columns: 1fr; gap: 30px; }
    .rk-svg-section { max-width: 300px; margin: 0 auto; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-temp-container" id="temp-wood-app">
    
    <!-- Treść Merytoryczna -->
    <div class="rk-temp-content-box">
        <h2>Jaka jest maksymalna temperatura powierzchni podłogi drewnianej?</h2>
        <div class="rk-temp-text">
            <p>Maksymalna temperatura powierzchni podłogi wykończonej drewnem <strong>wynosi 27°C</strong>, co jest restrykcyjnie określone przez wytyczne <a href="https://projekt-ogrzewania.pl/pn-en-1264-norma-ktora-definiuje-ogrzewanie-podlogowe/">normy PN-EN 1264</a>.</p>
            
            <p>Przekroczenie tej fizycznej granicy nie jest tylko kwestią dyskomfortu. Zbyt wysoka temperatura prowadzi do gwałtownego spadku wilgotności drewna <strong>poniżej 6%</strong>, co w krótkim czasie skutkuje nieodwracalnym zniszczeniem struktury komórkowej, rozwarstwieniem oraz powstawaniem szerokich, nieestetycznych szczelin.</p>
            
            <div class="rk-highlight-box">
                W praktyce inżynierskiej, projektując instalację pod okładziny drewniane, przyjmujemy <a href="https://projekt-ogrzewania.pl/maksymalna-temperatura-zasilania-podlogowki/">temperaturę zasilania czynnika grzewczego (Tz) na poziomie 35-40°C</a>. Przy wyższej temperaturze, np. 50°C (charakterystycznej dla starych układów grzejnikowych), ryzyko „przegrzania” deski jest niemal pewne.
            </div>

            <p>Należy pamiętać o kluczowym fakcie: <strong>drewno to izolator</strong>. Jego współczynnik przewodzenia ciepła lambda (λ) dla dębu wynosi <strong>ok. 0,18 W/(m·K)</strong>, co jest wartością drastycznie niższą w porównaniu do gresu (1,05 W/(m·K)). Oznacza to, że system musi pracować dłużej i stabilniej, aby osiągnąć zadaną temperaturę powierzchni. Z tego powodu bezwzględnie wymagane jest precyzyjne <a href="https://projekt-ogrzewania.pl/sterowanie-pogodowe-w-ogrzewaniu-podlogowym/">sterowanie pogodowe w układzie hydraulicznym</a>.</p>
        </div>
    </div>

    <!-- Symulator Interaktywny -->
    <div class="rk-temp-simulator status-safe" id="rkSimState">
        <h3>Symulator Termiczny: Wpływ parametrów zasilania na drewno</h3>
        <div class="rk-sim-grid">
            
            <div class="rk-slider-section">
                <div class="rk-slider-group">
                    <div class="rk-slider-label">
                        <span>Zadana Temp. Zasilania (Tz z pompy ciepła)</span>
                        <span class="rk-val-tz"><span id="valTz">35</span>°C</span>
                    </div>
                    <input type="range" min="30" max="55" step="1" value="35" class="rk-range" id="tempSlider">
                </div>

                <div class="rk-data-panels">
                    <div class="rk-data-card">
                        <span>Temp. Powierzchni (Tp)</span>
                        <strong class="val-tp"><span id="valTp">24.2</span>°C</strong>
                    </div>
                    <div class="rk-data-card">
                        <span>Wilgotność Drewna</span>
                        <strong class="val-rh"><span id="valRh">8.5</span>%</strong>
                    </div>
                </div>
            </div>

            <div class="rk-svg-section">
                <div class="rk-alert-msg">PRZEKROCZONO NORMĘ EN 1264!</div>
                <svg class="rk-floor-svg" viewBox="0 0 100 100">
                    <!-- Jastrych / Beton -->
                    <rect x="10" y="50" width="80" height="40" fill="#cbd5e1" rx="2" />
                    <!-- Rura grzewcza -->
                    <circle cx="50" cy="70" r="10" fill="#94a3b8" />
                    <circle class="svg-pipe" cx="50" cy="70" r="7" fill="#f97316" />
                    
                    <!-- Fale Ciepła -->
                    <g stroke-width="2" fill="none" stroke-linecap="round">
                        <path class="svg-heat-arrow" d="M35,60 Q30,40 35,20" />
                        <path class="svg-heat-arrow" d="M50,55 Q50,35 50,15" style="animation-delay: 0.2s;" />
                        <path class="svg-heat-arrow" d="M65,60 Q70,40 65,20" style="animation-delay: 0.4s;" />
                    </g>

                    <!-- Drewno (Deska) -->
                    <g transform="translate(10, 30)">
                        <rect class="svg-wood-top" x="0" y="0" width="80" height="15" fill="#d97706" rx="1" />
                        <!-- Pęknięcia z powodu przegrzania -->
                        <path class="svg-crack" d="M25,0 L22,8 L26,15" fill="none" />
                        <path class="svg-crack" d="M55,0 L58,7 L54,15" fill="none" />
                    </g>
                </svg>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez semantyki nagłówkowej H2/H3 w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('temp-wood-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #111827; color: #ef4444; border: 2px dashed #dc2626; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 30px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 18px; font-weight: 900; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Licencji</div>
                    <div style="font-size: 14px; line-height: 1.6; color: #9ca3af; max-width: 500px; margin: 0 auto;">
                        Kod interaktywny i ukryte schematy danych JSON-LD są własnością Projekt-Ogrzewania.pl. Wykryto nieautoryzowane użycie na obecnej domenie.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Temperatury
    const slider = document.getElementById('tempSlider');
    const valTz = document.getElementById('valTz');
    const valTp = document.getElementById('valTp');
    const valRh = document.getElementById('valRh');
    const simState = document.getElementById('rkSimState');

    function updateSimulation() {
        const tz = parseFloat(slider.value);
        valTz.textContent = tz;

        // Uproszczony algorytm przyrostu temperatury (tylko na potrzeby prezentacji)
        // Zakładamy, że dla Tz=35C Tp to ok 24C. Co 1 stopień na Tz, Tp rośnie o ~0.4C.
        const tpBase = 24.2;
        const tzBase = 35;
        let tp = tpBase + ((tz - tzBase) * 0.45);
        
        // Wilgotność maleje logarytmicznie wraz ze wzrostem temp powierzchni
        let rh = 8.5 - ((tp - 24.2) * 0.5);
        if(rh < 4.0) rh = 4.0 + (Math.random() * 0.2); // Limit dolny z lekkim "szumem" dla realizmu

        valTp.textContent = tp.toFixed(1);
        valRh.textContent = rh.toFixed(1);

        // Próg krytyczny: PN-EN 1264 = 27°C
        if (tp > 27.0) {
            simState.className = 'rk-temp-simulator status-danger';
        } else {
            simState.className = 'rk-temp-simulator status-safe';
        }
    }

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



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-stabilnosc",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Dlaczego stabilność wymiarowa drewna jest ważniejsza niż twardość?",
    "description": "Rozwiewamy mit twardości Brinella. Zobacz, jak spadek wilgotności zimą do 25% wpływa na kurczenie się buka i dębu na ogrzewaniu podłogowym oraz jak powstają naprężenia zrywające klej.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-stabilnosc",
    "name": "Analiza Naprężeń Ścinających i Skurczu Higroskopijnego Drewna",
    "description": "Porównanie parametrów fizycznych drewna klasy 1 (Dąb/Merbau) i klasy 4 (Buk) pod wpływem zmian wilgotności otoczenia wywołanych pracą systemu płaszczyznowego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "stabilność wymiarowa drewna",
      "twardość Brinella a podłogówka",
      "skurcz higroskopijny ISO 16067",
      "naprężenia ścinające kleju do parkietu",
      "pękanie drewna na ogrzewaniu"
    ],
    "measurementTechnique": "Obliczenia liniowego skurczu drewna w funkcji spadku wilgotności względnej powietrza (RH) do poziomu 25-30% i wynikających z tego naprężeń na spoinę klejową (w MPa).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Klasa 1 (Dąb/Merbau): Minimalna praca higroskopijna, naprężenia na spoinę poniżej 1.0 MPa, zachowanie ciągłości podłogi.",
        "Klasa 4 (Buk): Agresywny skurcz o 30-40% większy od dębu, generowanie naprężeń przekraczających 2.0 MPa, zrywanie spoiny i powstawanie szerokich szczelin."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-stabilnosc",
    "name": "Kalkulator Naprężeń Higroskopijnych Drewna",
    "description": "Interaktywny symulator wizualizujący szerokość powstających szczelin w parkiecie oraz siłę niszczącą działającą na klej w zależności od wybranego gatunku drewna i wilgotności powietrza w zimie.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-stab-dark: #1f2937;
    --rk-stab-wood: #8b5cf6; /* Używamy fioletu/indygo jako nowoczesnego akcentu inżynieryjnego */
    --rk-stab-wood-dark: #6d28d9;
    --rk-stab-light: #f5f3ff;
    --rk-stab-border: #ede9fe;
    --rk-stab-danger: #e11d48;
    --rk-stab-safe: #059669;
    --rk-stab-text: #4b5563;
}

.rk-stab-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 12px 35px -12px rgba(139, 92, 246, 0.15);
    border: 1px solid var(--rk-stab-border);
    overflow: hidden;
}

/* Część Tekstowa i Nagłówek */
.rk-stab-header {
    padding: 45px 50px 30px;
    background: var(--rk-stab-light);
    border-bottom: 2px solid var(--rk-stab-border);
}

.rk-stab-badge {
    display: inline-block;
    background: var(--rk-stab-wood);
    color: #ffffff;
    padding: 6px 16px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 20px;
}

.rk-stab-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-stab-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

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

.rk-stab-icon {
    flex-shrink: 0;
    width: 48px;
    height: 48px;
    background: var(--rk-stab-light);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--rk-stab-wood);
}

.rk-stab-text p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-stab-text);
    margin: 0 0 10px 0;
}

.rk-stab-text a {
    color: var(--rk-stab-wood);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid transparent;
    transition: all 0.2s;
}

.rk-stab-text a:hover {
    border-bottom-color: var(--rk-stab-wood);
}

/* Symulator Interaktywny */
.rk-stab-interactive {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-stab-interactive h3 {
    font-size: 20px;
    font-weight: 800;
    color: var(--rk-stab-dark);
    text-align: center;
    margin: 0 0 35px 0;
}

.rk-app-grid {
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 40px;
    align-items: center;
}

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

.rk-control-group {
    background: var(--rk-stab-light);
    padding: 20px;
    border-radius: 16px;
    border: 1px solid var(--rk-stab-border);
}

.rk-control-label {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-stab-dark);
    margin-bottom: 12px;
}

/* Segmented Control dla Gatunku Drewna */
.rk-segmented {
    display: flex;
    background: #ffffff;
    border-radius: 10px;
    padding: 4px;
    border: 1px solid var(--rk-stab-border);
}

.rk-seg-btn {
    flex: 1;
    text-align: center;
    padding: 10px;
    font-size: 14px;
    font-weight: 700;
    color: var(--rk-stab-text);
    background: transparent;
    border: none;
    border-radius: 8px;
    cursor: pointer;
    transition: all 0.3s;
}

.rk-seg-btn.active {
    background: var(--rk-stab-wood);
    color: #ffffff;
    box-shadow: 0 2px 4px rgba(139, 92, 246, 0.3);
}

/* Suwak Wilgotności */
.rk-val-display {
    float: right;
    font-size: 18px;
    font-weight: 900;
    color: var(--rk-stab-wood);
}

.rk-range-input {
    -webkit-appearance: none;
    width: 100%;
    height: 8px;
    border-radius: 4px;
    background: #e2e8f0;
    outline: none;
    margin-top: 15px;
}

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

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

/* Panel Danych Wyjściowych */
.rk-data-outputs {
    display: flex;
    gap: 15px;
}

.rk-data-metric {
    flex: 1;
    background: #ffffff;
    border: 1px solid var(--rk-stab-border);
    padding: 15px;
    border-radius: 12px;
    text-align: center;
    transition: all 0.3s;
}

.rk-data-metric span {
    display: block;
    font-size: 11px;
    text-transform: uppercase;
    font-weight: 700;
    color: #9ca3af;
    margin-bottom: 5px;
}

.rk-data-metric strong {
    display: block;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-stab-dark);
}

.metric-danger { border-color: var(--rk-stab-danger); background: #fff1f2; }
.metric-danger strong { color: var(--rk-stab-danger); }

/* Strefa Wizualizacji SVG */
.rk-visual-zone {
    position: relative;
    background: #f8fafc;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid #e2e8f0;
    text-align: center;
}

.rk-svg-stage {
    width: 100%;
    max-width: 350px;
    height: auto;
    overflow: visible;
}

.plank-texture { fill: #d97706; transition: fill 0.4s; }
.glue-layer { stroke: #10b981; stroke-width: 4; transition: stroke 0.4s; }
.glue-layer.broken { stroke: var(--rk-stab-danger); stroke-dasharray: 4 6; }
.plank { transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); }

.rk-alert-banner {
    position: absolute;
    top: -15px;
    left: 50%;
    transform: translateX(-50%);
    background: var(--rk-stab-danger);
    color: #ffffff;
    padding: 6px 16px;
    border-radius: 20px;
    font-size: 12px;
    font-weight: 800;
    letter-spacing: 1px;
    opacity: 0;
    transition: opacity 0.3s, transform 0.3s;
    white-space: nowrap;
    box-shadow: 0 4px 10px rgba(225, 29, 72, 0.3);
}

.rk-alert-banner.show {
    opacity: 1;
    transform: translate(-50%, 10px);
}

@media (max-width: 768px) {
    .rk-stab-header, .rk-stab-interactive { padding: 30px 20px; }
    .rk-stab-myth-box { flex-direction: column; gap: 15px; }
    .rk-app-grid { grid-template-columns: 1fr; gap: 30px; }
    .rk-data-outputs { flex-direction: column; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-stab-container" id="stab-app">
    
    <!-- Header i Merytoryka -->
    <div class="rk-stab-header">
        <div class="rk-stab-badge">Zrozumieć fizykę drewna</div>
        <h2>Dlaczego stabilność wymiarowa jest ważniejsza niż twardość?</h2>
        
        <div class="rk-stab-myth-box">
            <div class="rk-stab-icon">
                <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 2 7 12 12 22 7 12 2"></polygon><polyline points="2 17 12 22 22 17"></polyline><polyline points="2 12 12 17 22 12"></polyline></svg>
            </div>
            <div class="rk-stab-text">
                <p>Inwestorzy często mylą <strong>twardość (skala Brinella)</strong> ze stabilnością. Tymczasem stabilność wymiarowa określa, jak bardzo dany gatunek drewna kurczy się lub rozszerza przy zmianie wilgotności powietrza o 1% (według <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">norm budowlanych</a> i ISO 16067).</p>
                <p>Przy cyklach grzewczych, gdzie <a href="https://projekt-ogrzewania.pl/jak-ogrzewanie-podlogowe-wplywa-na-wilgotnosc-powietrza-w-domu/">wilgotność względna powietrza w zimie spada w domach często do 25-30%</a>, drewno o wysokiej stabilności (klasa 1, np. Dąb, Merbau) reaguje na te zmiany minimalnie. Natomiast gatunki niestabilne, ale twarde (klasa 4, np. Buk), drastycznie się kurczą, generując potężne naprężenia ścinające.</p>
                <p>Naprężenie przekraczające <strong>2 MPa</strong> nieodwracalnie zrywa spoinę klejową, niszcząc podłogę. Z tego powodu na ogrzewaniu lepiej sprawdzi się „miękka” sosna w stabilnej formie warstwowej niż twardy, lity buk.</p>
            </div>
        </div>
    </div>

    <!-- Moduł Interaktywny -->
    <div class="rk-stab-interactive">
        <h3>Symulator Skurczu Higroskopijnego i Naprężeń</h3>
        
        <div class="rk-app-grid">
            
            <!-- Panel Lewy: Kontrolki -->
            <div class="rk-controls">
                
                <div class="rk-control-group">
                    <span class="rk-control-label">Klasa stabilności drewna</span>
                    <div class="rk-segmented" id="woodTypeTabs">
                        <button class="rk-seg-btn active" data-class="1" data-factor="0.06">DĄB (Klasa 1)</button>
                        <button class="rk-seg-btn" data-class="4" data-factor="0.25">BUK (Klasa 4)</button>
                    </div>
                </div>

                <div class="rk-control-group">
                    <span class="rk-control-label">
                        Wilgotność w pomieszczeniu (Zima)
                        <span class="rk-val-display"><span id="lblHum">50</span>%</span>
                    </span>
                    <input type="range" min="20" max="50" value="50" step="1" class="rk-range-input" id="humSlider">
                </div>

                <div class="rk-data-outputs">
                    <div class="rk-data-metric" id="metricGap">
                        <span>Szczelina w desce</span>
                        <strong><span id="valGap">0.0</span> mm</strong>
                    </div>
                    <div class="rk-data-metric" id="metricStress">
                        <span>Naprężenie kleju</span>
                        <strong><span id="valStress">0.0</span> MPa</strong>
                    </div>
                </div>

            </div>

            <!-- Panel Prawy: Wizualizacja SVG -->
            <div class="rk-visual-zone">
                <div class="rk-alert-banner" id="alertBanner">⚠️ ZERWANIE SPOINY KLEJOWEJ</div>
                
                <svg class="rk-svg-stage" viewBox="0 0 200 100">
                    <!-- Podłoże betonowe -->
                    <rect x="0" y="70" width="200" height="20" fill="#cbd5e1" rx="2" />
                    <text x="100" y="84" font-size="8" fill="#64748b" text-anchor="middle" font-weight="bold" font-family="sans-serif">JASTRYCH Z OGRZEWANIEM</text>
                    
                    <!-- Warstwa kleju (Dynamiczna) -->
                    <line class="glue-layer" id="animGlue" x1="10" y1="68" x2="190" y2="68" />
                    
                    <!-- Deski parkietu -->
                    <g transform="translate(100, 50)">
                        <!-- Lewa deska -->
                        <rect class="plank plank-texture" id="plankLeft" x="-90" y="-15" width="88" height="30" rx="1" />
                        <!-- Prawa deska -->
                        <rect class="plank plank-texture" id="plankRight" x="2" y="-15" width="88" height="30" rx="1" />
                    </g>

                    <!-- Znacznik naprężeń (Piorun) - Ukryty domyślnie -->
                    <g id="crackIcon" transform="translate(100, 68) scale(0)" style="transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275);">
                        <circle cx="0" cy="0" r="12" fill="#e11d48" />
                        <path d="M-2,-6 L4,-6 L1,0 L5,0 L-3,7 L0,1 Z" fill="#ffffff" />
                    </g>
                </svg>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domeny (Brak H2/H3 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('stab-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #f1f5f9; color: #334155; border: 2px dashed #94a3b8; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 30px; margin-bottom: 15px;">🛡️</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Zablokowano komponent</div>
                    <div style="font-size: 13px; line-height: 1.6; max-width: 450px; margin: 0 auto;">
                        Skrypt kalkulatora naprężeń i dane strukturalne JSON-LD podlegają ochronie praw autorskich serwisu Projekt-Ogrzewania.pl. Użycie poza autoryzowaną domeną jest zabronione.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Aplikacji
    const tabs = document.querySelectorAll('.rk-seg-btn');
    const humSlider = document.getElementById('humSlider');
    const lblHum = document.getElementById('lblHum');
    
    // Elementy wyjścia
    const valGap = document.getElementById('valGap');
    const valStress = document.getElementById('valStress');
    const metricGap = document.getElementById('metricGap');
    const metricStress = document.getElementById('metricStress');
    
    // SVG Elementy
    const plankLeft = document.getElementById('plankLeft');
    const plankRight = document.getElementById('plankRight');
    const animGlue = document.getElementById('animGlue');
    const crackIcon = document.getElementById('crackIcon');
    const alertBanner = document.getElementById('alertBanner');

    let currentFactor = 0.06; // Domyślnie Dąb
    const baseHumidity = 50;
    const stressThreshold = 2.0;

    // Przełączanie gatunków
    tabs.forEach(btn => {
        btn.addEventListener('click', function() {
            tabs.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            currentFactor = parseFloat(this.getAttribute('data-factor'));
            
            // Kolor desek zależny od gatunku
            const woodClass = this.getAttribute('data-class');
            if(woodClass === '1') {
                plankLeft.style.fill = '#d97706'; // Dąb
                plankRight.style.fill = '#d97706';
            } else {
                plankLeft.style.fill = '#b45309'; // Buk (ciemniejszy, twardszy wygląd)
                plankRight.style.fill = '#b45309';
            }
            
            calculatePhysics();
        });
    });

    // Zmiana na suwaku
    humSlider.addEventListener('input', calculatePhysics);

    function calculatePhysics() {
        const humidity = parseInt(humSlider.value);
        lblHum.textContent = humidity;

        // Obliczenia skurczu
        const drop = baseHumidity - humidity; // od 0 do 30
        const shrinkage = drop * currentFactor; // w mm na deskę
        
        // Szczelina (powstaje z dwóch desek)
        const gapSize = shrinkage * 2;
        
        // Naprężenie ścinające (uproszczony model: skurcz * sztywność)
        // Zakładamy, że 1 mm skurczu generuje ok 0.45 MPa naprężenia w warunkach brzegowych
        let stress = shrinkage * 0.45 * 2; 

        // Aktualizacja UI
        valGap.textContent = gapSize.toFixed(1);
        valStress.textContent = stress.toFixed(1);

        // Animacja SVG - Translacja po osi X
        // Lewa deska idzie w lewo, Prawa w prawo
        const moveDist = gapSize * 2; // Mnożnik dla lepszego efektu wizualnego
        plankLeft.style.transform = `translateX(-${moveDist}px)`;
        plankRight.style.transform = `translateX(${moveDist}px)`;

        // Sprawdzenie progu zerwania
        if (stress >= stressThreshold) {
            metricStress.classList.add('metric-danger');
            metricGap.classList.add('metric-danger');
            animGlue.classList.add('broken');
            crackIcon.style.transform = 'translate(100px, 68px) scale(1)';
            alertBanner.classList.add('show');
        } else {
            metricStress.classList.remove('metric-danger');
            metricGap.classList.remove('metric-danger');
            animGlue.classList.remove('broken');
            crackIcon.style.transform = 'translate(100px, 68px) scale(0)';
            alertBanner.classList.remove('show');
        }
    }

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



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-konstrukcja",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Jaka konstrukcja deski jest najbezpieczniejsza na ogrzewanie podłogowe?",
    "description": "Zrozum różnicę między deską warstwową a litą. Poznaj obliczenia oporu cieplnego (R) dla sklejki i warstwy dębowej oraz dowiedz się, jak zapobiegać łódkowaniu drewna na podłogówce.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-konstrukcja",
    "name": "Analiza Oporu Cieplnego R dla Konstrukcji Drewnianych",
    "description": "Zestawienie obliczeniowe oporu cieplnego dla deski litej 22 mm vs deski warstwowej 15 mm wraz z analizą powstawania zjawiska łódkowania.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "konstrukcja deski warstwowej",
      "opór cieplny deski dębowej",
      "łódkowanie drewna podłogowego",
      "norma PN-EN 13489 drewno",
      "obliczenia R m2K/W podłogówka"
    ],
    "measurementTechnique": "Sumowanie oporów cieplnych poszczególnych warstw (dąb + sklejka) na podstawie współczynników przewodzenia lambda (W/mK).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Deska warstwowa 15mm: R_total = 0,106 m2K/W, stabilność wymiarowa wysoka, redukcja naprężeń o 70%.",
        "Deska lita 22mm: R_total = 0,12 - 0,15 m2K/W, brak blokady naprężeń, podatność na deformacje typu łódka."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-konstrukcja",
    "name": "Kalkulator Warstw Oporu Cieplnego i Symulator Deformacji",
    "description": "Interaktywny moduł przełączający między strukturą deski warstwowej a litą, obliczający całkowity opór cieplny i wizualizujący blokadę termiczną.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-build-dark: #0f172a;
    --rk-build-primary: #0f766e; /* Zgaszony, inżynieryjny turkus */
    --rk-build-accent: #d97706; /* Ciepły bursztyn/drewno */
    --rk-build-bg: #ffffff;
    --rk-build-panel: #f8fafc;
    --rk-build-border: #e2e8f0;
    --rk-build-text: #334155;
    --rk-build-danger: #e11d48;
}

.rk-build-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-build-bg);
    border-radius: 20px;
    box-shadow: 0 10px 40px -15px rgba(15, 118, 110, 0.15);
    border: 1px solid var(--rk-build-primary);
    overflow: hidden;
}

/* Część Tekstowa */
.rk-build-content {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-build-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-build-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-build-text p {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-build-text);
    margin: 0 0 16px 0;
}

.rk-build-text strong {
    color: var(--rk-build-dark);
    font-weight: 800;
}

.rk-build-text a {
    color: var(--rk-build-primary);
    text-decoration: none;
    font-weight: 700;
    border-bottom: 2px solid rgba(15, 118, 110, 0.2);
    transition: all 0.3s;
}

.rk-build-text a:hover {
    border-bottom-color: var(--rk-build-primary);
}

.rk-math-box {
    background: var(--rk-build-panel);
    border-left: 4px solid var(--rk-build-primary);
    padding: 20px 25px;
    margin: 25px 0;
    border-radius: 0 12px 12px 0;
}

.rk-math-box h4 {
    margin: 0 0 10px 0;
    font-size: 16px;
    color: var(--rk-build-dark);
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.rk-math-equation {
    display: flex;
    flex-direction: column;
    gap: 8px;
    font-family: 'Courier New', Courier, monospace;
    font-size: 15px;
    color: #475569;
}

.rk-math-equation strong {
    color: var(--rk-build-primary);
}

.rk-math-result {
    margin-top: 12px;
    padding-top: 12px;
    border-top: 1px dashed var(--rk-build-border);
    font-size: 16px;
    font-weight: 900;
    color: var(--rk-build-dark);
}

/* Interaktywny Symulator */
.rk-build-interactive {
    padding: 45px 50px;
    background: var(--rk-build-dark);
    color: #ffffff;
}

.rk-build-interactive h3 {
    margin: 0 0 35px 0;
    font-size: 22px;
    font-weight: 800;
    text-align: center;
    color: #f1f5f9;
}

.rk-sim-layout {
    display: grid;
    grid-template-columns: 1fr 350px;
    gap: 40px;
    align-items: center;
}

/* Panel Przełączników */
.rk-structure-picker {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-btn-struct {
    background: rgba(255, 255, 255, 0.05);
    border: 2px solid rgba(255, 255, 255, 0.1);
    border-radius: 12px;
    padding: 15px 20px;
    color: #cbd5e1;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    justify-content: space-between;
}

.rk-btn-struct:hover {
    background: rgba(255, 255, 255, 0.1);
}

.rk-btn-struct.active {
    background: var(--rk-build-primary);
    border-color: #14b8a6;
    color: #ffffff;
    box-shadow: 0 10px 20px rgba(15, 118, 110, 0.4);
}

.rk-struct-title {
    font-size: 16px;
    font-weight: 800;
    display: block;
    margin-bottom: 4px;
}

.rk-struct-desc {
    font-size: 13px;
    opacity: 0.8;
}

.rk-struct-rval {
    font-size: 20px;
    font-weight: 900;
    font-family: monospace;
}

/* Moduł SVG */
.rk-svg-viewport {
    background: #1e293b;
    border-radius: 16px;
    padding: 30px;
    position: relative;
    border: 1px solid rgba(255, 255, 255, 0.1);
    box-shadow: inset 0 0 30px rgba(0,0,0,0.5);
    text-align: center;
}

.rk-svg-drawing {
    width: 100%;
    max-width: 250px;
    height: auto;
    overflow: visible;
}

/* Elementy animacji SVG */
.rk-layer { transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1); }
.rk-heat-arrow { stroke: #fb923c; stroke-linecap: round; transition: all 0.5s; }

/* Stan 1: Deska Warstwowa (Safe) */
.state-layered .layer-top { fill: #d97706; }
.state-layered .layer-bottom { fill: #b45309; }
.state-layered .rk-heat-arrow { stroke-width: 4; stroke-dasharray: none; animation: flowUp 1.5s infinite linear; opacity: 0.8; }
.state-layered .alert-loodka { opacity: 0; transform: translateY(10px); }

/* Stan 2: Deska Lita (Danger / Łódkowanie) */
.state-solid .layer-top { fill: #92400e; transform: translateY(-8px); border-radius: 50%; }
.state-solid .layer-bottom { fill: #78350f; transform: translateY(-8px); }
/* Symulacja łódkowania (wygięcie) poprzez transform na grupie */
.state-solid .wood-group { 
    transform: perspective(200px) rotateX(15deg) scaleY(1.1); 
    transform-origin: bottom center;
}
.state-solid .rk-heat-arrow { stroke-width: 6; stroke: var(--rk-build-danger); opacity: 0.3; animation: blockedHeat 1s infinite alternate; }
.state-solid .heat-trap { fill: var(--rk-build-danger); opacity: 0.2; animation: trapPulse 2s infinite; }
.state-solid .alert-loodka { opacity: 1; transform: translateY(0); }

@keyframes flowUp {
    0% { transform: translateY(15px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-25px); opacity: 0; }
}

@keyframes blockedHeat {
    0% { transform: translateY(15px); opacity: 0.2; }
    100% { transform: translateY(5px); opacity: 0.6; }
}

@keyframes trapPulse {
    0%, 100% { opacity: 0.1; }
    50% { opacity: 0.3; }
}

.alert-loodka {
    position: absolute;
    top: 15px;
    left: 0;
    width: 100%;
    text-align: center;
    color: #fca5a5;
    font-size: 13px;
    font-weight: 900;
    letter-spacing: 1px;
    text-transform: uppercase;
    transition: all 0.4s;
    pointer-events: none;
}

@media (max-width: 768px) {
    .rk-build-content, .rk-build-interactive { padding: 30px 20px; }
    .rk-sim-layout { grid-template-columns: 1fr; gap: 30px; }
    .rk-svg-viewport { padding: 20px; }
    .rk-btn-struct { flex-direction: column; align-items: flex-start; gap: 10px; }
    .rk-struct-rval { align-self: flex-end; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-build-container" id="build-app">
    
    <!-- Treść Merytoryczna -->
    <div class="rk-build-content">
        <h2>Jaka konstrukcja deski jest najbezpieczniejsza na „podłogówkę”?</h2>
        <div class="rk-build-text">
            <p>Najbezpieczniejszym rozwiązaniem w inżynierii ogrzewania płaszczyznowego jest bezdyskusyjnie <strong>deska warstwowa</strong> (dwu- lub trójwarstwowa). Dzięki prostopadłemu ułożeniu słojów w warstwach dolnych (tzw. warstwach przeciwprężnych), deska ta redukuje naturalną pracę drewna o nawet <strong>70% w stosunku do deski litej</strong>. Rygorystyczna norma <strong>PN-EN 13489</strong> jednoznacznie definiuje wymagania dla takich okładzin, wskazując na konieczność stosowania stabilnych podkładów konstrukcyjnych – najczęściej ze sklejki brzozowej lub lameli iglastych.</p>
            
            <p>Gruba <strong>deska lita (20-22 mm)</strong> generuje opór cieplny na poziomie 0,12-0,15 m2K/W. Chociaż z punktu widzenia fizyki <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">taki opór cieplny jest dopuszczalny</a>, to jej ogromna masa fizyczna i absolutny brak blokady naprężeń sprawiają, że przy jednostronnym nagrzewaniu od spodu drewno gwałtownie traci wilgoć na dole i <strong>wygina się w tzw. „łódkę”</strong>. Z kolei wysokiej klasy deska warstwowa o grubości 11-15 mm zachowuje idealną płaskość i oferuje opór R w rewelacyjnych granicach <strong>0,08-0,10 m2K/W</strong>.</p>
        </div>

        <!-- Rozbicie matematyczne -->
        <div class="rk-math-box">
            <h4>Przykładowe obliczenie oporu cieplnego (R) dla dębowej deski warstwowej 15 mm:</h4>
            <div class="rk-math-equation">
                <div>Warstwa użytkowa (Dąb 4 mm, λ=0,18): <span>R1 = 0,004 / 0,18 = <strong>0,022 m2K/W</strong></span></div>
                <div>Przeciwprężna sklejka (11 mm, λ=0,13): <span>R2 = 0,011 / 0,13 = <strong>0,084 m2K/W</strong></span></div>
            </div>
            <div class="rk-math-result">
                Suma R_total = 0,022 + 0,084 = 0,106 m2K/W
            </div>
            <p style="margin: 10px 0 0 0; font-size: 13px; color: #64748b;">
                Jest to wartość idealna, pozostawiająca inżynierom bezpieczny bufor dla oporu samego podkładu klejowego (który wynosi ok. 0,01 m2K/W). Warto <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/">porównać to z panelami laminowanymi</a>.
            </p>
        </div>
    </div>

    <!-- Symulator Interaktywny -->
    <div class="rk-build-interactive">
        <h3>Symulator Konstrukcji i Blokady Termicznej</h3>
        <div class="rk-sim-layout">
            
            <!-- Przyciski wyboru -->
            <div class="rk-structure-picker" id="structPicker">
                <button class="rk-btn-struct active" data-struct="layered">
                    <div>
                        <span class="rk-struct-title">Deska Warstwowa (15 mm)</span>
                        <span class="rk-struct-desc">Dąb (4mm) + Sklejka (11mm)</span>
                    </div>
                    <span class="rk-struct-rval">R ~0.10</span>
                </button>
                <button class="rk-btn-struct" data-struct="solid">
                    <div>
                        <span class="rk-struct-title">Deska Lita (22 mm)</span>
                        <span class="rk-struct-desc">Jednolity blok dębowy</span>
                    </div>
                    <span class="rk-struct-rval">R ~0.15</span>
                </button>
            </div>

            <!-- Strefa SVG -->
            <div class="rk-svg-viewport state-layered" id="structVisual">
                <div class="alert-loodka">⚠️ EFEKT ŁÓDKOWANIA</div>
                <svg class="rk-svg-drawing" viewBox="0 0 100 120">
                    <!-- Rura grzewcza -->
                    <circle cx="50" cy="100" r="8" fill="none" stroke="#64748b" stroke-width="2" />
                    <circle cx="50" cy="100" r="5" fill="#f97316" />
                    
                    <!-- Fale ciepła -->
                    <path class="rk-heat-arrow" d="M35,85 L35,25" />
                    <path class="rk-heat-arrow" d="M50,85 L50,25" style="animation-delay: 0.3s;" />
                    <path class="rk-heat-arrow" d="M65,85 L65,25" style="animation-delay: 0.6s;" />

                    <!-- Strefa pułapki cieplnej dla deski litej -->
                    <ellipse class="heat-trap" cx="50" cy="70" rx="35" ry="15" fill="transparent" />

                    <!-- Konstrukcja Drewna -->
                    <g class="wood-group" transform="translate(10, 40)">
                        <!-- Warstwa dolna (Sklejka lub część lita) -->
                        <rect class="rk-layer layer-bottom" x="0" y="8" width="80" height="15" rx="1" />
                        <!-- Warstwa górna (Lico) -->
                        <rect class="rk-layer layer-top" x="0" y="0" width="80" height="7" rx="1" />
                        
                        <!-- Linie słojów/faktury dla lepszego efektu wizualnego -->
                        <path class="rk-layer" d="M0,8 L80,8" fill="none" stroke="#000000" stroke-opacity="0.2" stroke-width="1" />
                    </g>
                </svg>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H2/H3 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('build-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #fca5a5; border: 2px dashed #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Nieautoryzowane Użycie</div>
                    <div style="font-size: 13px; line-height: 1.6; max-width: 450px; margin: 0 auto; color: #cbd5e1;">
                        Narzędzie obliczeniowe oraz dane JSON-LD są wyłączną własnością Projekt-Ogrzewania.pl. Wykryto próbę kradzieży kodu na inną domenę.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora
    const btns = document.querySelectorAll('#structPicker .rk-btn-struct');
    const visualBox = document.getElementById('structVisual');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Reset active states
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            // Switch class on SVG container
            const structType = this.getAttribute('data-struct');
            if(structType === 'layered') {
                visualBox.className = 'rk-svg-viewport state-layered';
            } else {
                visualBox.className = 'rk-svg-viewport state-solid';
            }
        });
    });
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-tabela",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Tabela: Rodzaje drewna i parametry techniczne pod ogrzewanie podłogowe",
    "description": "Interaktywne zestawienie 11 najpopularniejszych gatunków drewna. Sprawdź klasę stabilności dębu, buka czy drewna egzotycznego dla instalacji płaszczyznowych.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-tabela",
    "name": "Baza Gatunków Drewna na Ogrzewanie Podłogowe (Klasy Stabilności)",
    "description": "Techniczne zestawienie parametrów 11 gatunków drewna (m.in. Dąb, Merbau, Buk) klasyfikujące ich przydatność na ogrzewanie podłogowe wg stabilności higroskopijnej.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "gatunki drewna na podłogówkę",
      "dąb czy buk na ogrzewanie",
      "klasa stabilności drewna 1-4",
      "merbau ogrzewanie podłogowe",
      "egzotyczne drewno podłogowe"
    ],
    "measurementTechnique": "Klasyfikacja stabilności wymiarowej zgodnie z normami PN-EN określająca podatność na odkształcenia w systemach ogrzewania płaszczyznowego.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Doskonałe (Klasa 1): Dąb, Merbau, Iroko, Doussie, Teak - minimalny skurcz.",
        "Dobre (Klasa 2/3): Jesion, Klon, Akacja, Orzech, Sosna - wymagają weryfikacji producenta.",
        "Warunkowe (Klasa 4): Buk - wysokie ryzyko odkształceń, dopuszczalny tylko w cienkiej warstwie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-tabela",
    "name": "Interaktywny Wybierak Gatunków Drewna",
    "description": "Aplikacja filtrująca pozwalająca inwestorom na dynamiczne wyszukiwanie gatunków drewna na podstawie klasy stabilności i przydatności termicznej.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-tbl-dark: #18181b;
    --rk-tbl-wood: #a16207;
    --rk-tbl-wood-light: #fef08a;
    --rk-tbl-bg: #fafafa;
    --rk-tbl-card: #ffffff;
    --rk-tbl-border: #e4e4e7;
    --rk-tbl-text: #52525b;
    --rk-badge-perfect: #10b981;
    --rk-badge-good: #3b82f6;
    --rk-badge-warn: #ef4444;
}

.rk-tbl-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-tbl-bg);
    border-radius: 20px;
    box-shadow: 0 10px 30px -10px rgba(161, 98, 7, 0.15);
    border: 1px solid var(--rk-tbl-wood);
    overflow: hidden;
}

/* Sekcja Nagłówka */
.rk-tbl-header {
    padding: 40px 40px 25px;
    background: #ffffff;
    border-bottom: 1px solid var(--rk-tbl-border);
    text-align: center;
}

.rk-tbl-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-tbl-dark);
    margin: 0 0 15px 0;
}

.rk-tbl-header p {
    font-size: 16px;
    color: var(--rk-tbl-text);
    margin: 0 auto;
    max-width: 700px;
    line-height: 1.6;
}

.rk-tbl-header a {
    color: var(--rk-tbl-wood);
    text-decoration: underline;
    font-weight: 700;
}

/* Moduł Filtrowania */
.rk-tbl-filters {
    padding: 20px 40px;
    background: var(--rk-tbl-bg);
    display: flex;
    gap: 10px;
    justify-content: center;
    flex-wrap: wrap;
    border-bottom: 1px solid var(--rk-tbl-border);
}

.rk-filter-btn {
    padding: 10px 20px;
    border-radius: 999px;
    border: 1px solid var(--rk-tbl-border);
    background: #ffffff;
    color: var(--rk-tbl-text);
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    align-items: center;
    gap: 8px;
}

.rk-filter-btn:hover {
    border-color: var(--rk-tbl-wood);
    color: var(--rk-tbl-wood);
}

.rk-filter-btn.active {
    background: var(--rk-tbl-dark);
    border-color: var(--rk-tbl-dark);
    color: #ffffff;
    box-shadow: 0 4px 10px rgba(0,0,0,0.1);
}

.rk-filter-dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
}
.dot-all { background: var(--rk-tbl-wood); }
.dot-perfect { background: var(--rk-badge-perfect); }
.dot-good { background: var(--rk-badge-good); }
.dot-warn { background: var(--rk-badge-warn); }

/* Siatka Gatunków Drewna (Kafelki) */
.rk-tbl-grid {
    padding: 30px 40px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 20px;
}

.rk-wood-card {
    background: var(--rk-tbl-card);
    border: 1px solid var(--rk-tbl-border);
    border-radius: 16px;
    padding: 20px;
    transition: transform 0.3s, box-shadow 0.3s, opacity 0.4s;
    position: relative;
    overflow: hidden;
}

.rk-wood-card:hover {
    transform: translateY(-4px);
    box-shadow: 0 12px 24px -10px rgba(0,0,0,0.1);
    border-color: var(--rk-tbl-wood);
}

/* Ukrywanie kart (Filtrowanie) */
.rk-wood-card.hidden {
    display: none;
}

.rk-card-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 15px;
}

.rk-card-title {
    font-size: 20px;
    font-weight: 900;
    color: var(--rk-tbl-dark);
    margin: 0;
}

.rk-card-badge {
    font-size: 11px;
    font-weight: 800;
    padding: 4px 10px;
    border-radius: 6px;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.badge-perfect { background: #d1fae5; color: #047857; }
.badge-good { background: #dbeafe; color: #1d4ed8; }
.badge-warn { background: #fee2e2; color: #b91c1c; }

/* SVG Meter (Klasa stabilności) */
.rk-stability-meter {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 15px;
    background: #f4f4f5;
    padding: 10px;
    border-radius: 10px;
}

.rk-meter-label {
    font-size: 12px;
    font-weight: 700;
    color: var(--rk-tbl-text);
    flex-shrink: 0;
}

.rk-meter-svg {
    height: 14px;
    width: 100%;
}

.meter-bg { fill: #e4e4e7; rx: 3; }
.meter-fill { rx: 3; transition: width 1s cubic-bezier(0.4, 0, 0.2, 1); }

/* Kolory SVG Meter */
.card-perfect .meter-fill { fill: var(--rk-badge-perfect); width: 100%; } /* Klasa 1 */
.card-good-k2 .meter-fill { fill: var(--rk-badge-good); width: 75%; } /* Klasa 2 */
.card-good-k3 .meter-fill { fill: #f59e0b; width: 50%; } /* Klasa 3 */
.card-warn .meter-fill { fill: var(--rk-badge-warn); width: 25%; } /* Klasa 4 */

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

.rk-card-desc strong {
    color: var(--rk-tbl-dark);
}

@media (max-width: 768px) {
    .rk-tbl-header, .rk-tbl-filters, .rk-tbl-grid { padding: 25px 20px; }
    .rk-tbl-grid { grid-template-columns: 1fr; }
    .rk-filter-btn { flex: 1 1 calc(50% - 10px); justify-content: center; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-tbl-container" id="wood-table-app">
    
    <!-- Nagłówek -->
    <div class="rk-tbl-header">
        <h2>Interaktywna Baza Gatunków Drewna</h2>
        <p>Poniższa baza prezentuje przegląd najpopularniejszych gatunków drewna i ich przydatność w kontekście instalacji ogrzewania podłogowego. Sprawdź, jak <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">rodzaj okładziny wpływa na wydajność całego systemu</a>.</p>
    </div>

    <!-- Filtry -->
    <div class="rk-tbl-filters" id="woodFilters">
        <button class="rk-filter-btn active" data-filter="all">
            <div class="rk-filter-dot dot-all"></div> Wszystkie
        </button>
        <button class="rk-filter-btn" data-filter="perfect">
            <div class="rk-filter-dot dot-perfect"></div> Doskonałe (Kl. 1)
        </button>
        <button class="rk-filter-btn" data-filter="good">
            <div class="rk-filter-dot dot-good"></div> Dobre (Kl. 2/3)
        </button>
        <button class="rk-filter-btn" data-filter="warn">
            <div class="rk-filter-dot dot-warn"></div> Warunkowe (Kl. 4)
        </button>
    </div>

    <!-- Siatka Drewna -->
    <div class="rk-tbl-grid" id="woodGrid">
        
        <!-- Dąb -->
        <div class="rk-wood-card card-perfect" data-category="perfect">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Dąb</h3>
                <span class="rk-card-badge badge-perfect">Doskonała</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 1:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Twardy, wytrzymały, bardzo stabilny wymiarowo. Idealnie sprawdza się z <a href="https://projekt-ogrzewania.pl/jak-dziala-ogrzewanie-podlogowe/">ogrzewaniem podłogowym</a>.</p>
        </div>

        <!-- Merbau -->
        <div class="rk-wood-card card-perfect" data-category="perfect">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Merbau</h3>
                <span class="rk-card-badge badge-perfect">Doskonała</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 1:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Drewno egzotyczne o doskonałej stabilności i naturalnej odporności na wilgoć.</p>
        </div>

        <!-- Iroko -->
        <div class="rk-wood-card card-perfect" data-category="perfect">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Iroko</h3>
                <span class="rk-card-badge badge-perfect">Doskonała</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 1:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Podobnie jak Merbau, bardzo stabilne i odporne, doskonale nadaje się na posadzki z "podłogówką".</p>
        </div>

        <!-- Jesion -->
        <div class="rk-wood-card card-good-k2" data-category="good">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Jesion</h3>
                <span class="rk-card-badge badge-good">Dobra</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 2:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Twardy i elastyczny, o dobrej stabilności. Wymaga weryfikacji parametrów technicznych przez producenta.</p>
        </div>

        <!-- Klon -->
        <div class="rk-wood-card card-good-k2" data-category="good">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Klon</h3>
                <span class="rk-card-badge badge-good">Dobra</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 2:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Twardy, o dobrej stabilności. Sprawdza się na instalacjach podobnie do dębu europejskiego.</p>
        </div>

        <!-- Akacja -->
        <div class="rk-wood-card card-good-k2" data-category="good">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Akacja</h3>
                <span class="rk-card-badge badge-good">Dobra</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 2:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Bardzo twarda i dość stabilna. Coraz popularniejszy wybór dla nowoczesnych wnętrz.</p>
        </div>

        <!-- Orzech -->
        <div class="rk-wood-card card-good-k2" data-category="good">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Orzech</h3>
                <span class="rk-card-badge badge-good">Dobra</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 2:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Stabilny gatunek, bardzo dobrze znoszący wahania i cykle zmiany temperatury.</p>
        </div>

        <!-- Sosna/Modrzew -->
        <div class="rk-wood-card card-good-k3" data-category="good">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Sosna/Modrzew</h3>
                <span class="rk-card-badge badge-good">Dobra</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 3:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Miększe gatunki iglaste. Często oferowane w wersji <strong>warstwowej</strong>, co znacząco poprawia ich stabilność.</p>
        </div>

        <!-- Doussie -->
        <div class="rk-wood-card card-perfect" data-category="perfect">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Doussie</h3>
                <span class="rk-card-badge badge-perfect">Doskonała</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 1:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Kolejne egzotyczne, niezwykle stabilne drewno. Referencyjne parametry do tego zastosowania.</p>
        </div>

        <!-- Teak -->
        <div class="rk-wood-card card-perfect" data-category="perfect">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Teak</h3>
                <span class="rk-card-badge badge-perfect">Doskonała</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 1:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc">Legenda stabilności strukturalnej, uzyskana dzięki naturalnym olejkom wewnątrz włókien.</p>
        </div>

        <!-- Buk -->
        <div class="rk-wood-card card-warn" data-category="warn">
            <div class="rk-card-header">
                <h3 class="rk-card-title">Buk</h3>
                <span class="rk-card-badge badge-warn">Warunkowa</span>
            </div>
            <div class="rk-stability-meter">
                <span class="rk-meter-label">Klasa 4:</span>
                <svg class="rk-meter-svg" viewBox="0 0 100 14" preserveAspectRatio="none">
                    <rect class="meter-bg" x="0" y="0" width="100" height="14" />
                    <rect class="meter-fill" x="0" y="0" height="14" />
                </svg>
            </div>
            <p class="rk-card-desc"><strong>Uwaga!</strong> Buk ma niską stabilność wymiarową i mocno pracuje. Dopuszcza się go <strong>wyłącznie</strong> w postaci drewna warstwowego. Zobacz <a href="https://projekt-ogrzewania.pl/podlogi-drewniane-vs-panele-laminowane-co-wybrac-przy-ogrzewaniu-podlogowym/">alternatywy laminowane</a>.</p>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H-tagów)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('wood-table-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #18181b; color: #ef4444; border: 2px dashed #b91c1c; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Ochrona Domenowa</div>
                    <div style="font-size: 13px; line-height: 1.6; max-width: 500px; margin: 0 auto; color: #a1a1aa;">
                        Skrypt bazy gatunków drewna i znaczniki JSON-LD są własnością Projekt-Ogrzewania.pl. Uruchomienie interfejsu na obecnej domenie zostało zablokowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Filtrowania
    const filterBtns = document.querySelectorAll('#woodFilters .rk-filter-btn');
    const woodCards = document.querySelectorAll('#woodGrid .rk-wood-card');

    filterBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zmiana stanu przycisków
            filterBtns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const filterValue = this.getAttribute('data-filter');

            // Filtrowanie kart z płynnym efektem (CSS załatwia resztę poprzez display/opacity)
            woodCards.forEach(card => {
                const category = card.getAttribute('data-category');
                
                if (filterValue === 'all' || category === filterValue) {
                    card.classList.remove('hidden');
                    // Wymuszamy reflow dla animacji
                    void card.offsetWidth; 
                    card.style.opacity = '1';
                    card.style.transform = 'scale(1)';
                } else {
                    card.style.opacity = '0';
                    card.style.transform = 'scale(0.95)';
                    setTimeout(() => {
                        card.classList.add('hidden');
                    }, 300); // Czas musi zgadzać się z CSS transition, chociaż tutaj zrobimy uproszczony toggle
                }
            });
            
            // Prostszy wariant bez setTimeout dla czystości działania w gridzie:
            woodCards.forEach(card => {
                const category = card.getAttribute('data-category');
                if (filterValue === 'all' || category === filterValue) {
                    card.style.display = 'block';
                } else {
                    card.style.display = 'none';
                }
            });
        });
    });
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-montaz",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Kluczowe etapy montażu drewna na ogrzewaniu podłogowym",
    "description": "Od pomiaru wilgotności jastrychu (CM), przez 72-godzinną aklimatyzację, aż po rozruch podłogówki (+1°C na dobę). Kompletna procedura instalacyjna.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-montaz",
    "name": "Parametry Procedury Montażowej Parkietu na Podłogówce",
    "description": "Zbiór wartości granicznych dla poszczególnych etapów: wilgotność betonu, czas aklimatyzacji oraz krzywa grzewcza podczas pierwszego uruchomienia.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wilgotność jastrychu CM",
      "aklimatyzacja drewna podłogowego",
      "klej elastyczny do parkietu",
      "rozruch ogrzewania podłogowego",
      "montaż pływający podłogówka"
    ],
    "measurementTechnique": "Pomiary higrometryczne metodą karbidową (CM) oraz termiczny monitoring przyrostu temperatury zasilania (ΔT).",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Jastrych cementowy: max 1.8% CM. Jastrych anhydrytowy: max 0.5% CM.",
        "Aklimatyzacja: Minimum 72 godziny w temperaturze docelowej.",
        "Rozruch: Stopniowy przyrost temperatury zasilania o 1-2°C na dobę."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-montaz",
    "name": "Przewodnik Krok po Kroku: Instalacja Drewna",
    "description": "Interaktywny panel edukacyjny (stepper) prezentujący 4 główne etapy montażu drewna wraz z animacjami procesów fizykochemicznych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-step-dark: #1e293b;
    --rk-step-blue: #0284c7;
    --rk-step-wood: #b45309;
    --rk-step-bg: #f8fafc;
    --rk-step-border: #e2e8f0;
    --rk-step-text: #475569;
    --rk-step-success: #10b981;
}

.rk-step-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: #ffffff;
    border-radius: 20px;
    box-shadow: 0 10px 40px -10px rgba(2, 132, 199, 0.1);
    border: 1px solid var(--rk-step-border);
    overflow: hidden;
}

/* Nagłówek */
.rk-step-header {
    padding: 35px 40px;
    background: var(--rk-step-dark);
    color: #ffffff;
    text-align: center;
}

.rk-step-header h2 {
    font-size: 26px;
    font-weight: 900;
    margin: 0 0 15px 0;
    color: #f1f5f9;
}

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

/* Nawigacja Steppera */
.rk-stepper-nav {
    display: flex;
    background: var(--rk-step-bg);
    border-bottom: 1px solid var(--rk-step-border);
    overflow-x: auto;
    scrollbar-width: none; /* Firefox */
}
.rk-stepper-nav::-webkit-scrollbar { display: none; } /* Chrome */

.rk-step-btn {
    flex: 1;
    min-width: 150px;
    padding: 20px 15px;
    background: transparent;
    border: none;
    border-bottom: 4px solid transparent;
    color: var(--rk-step-text);
    font-size: 14px;
    font-weight: 800;
    cursor: pointer;
    transition: all 0.3s;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 10px;
    white-space: nowrap;
}

.rk-step-btn:hover {
    background: #f1f5f9;
    color: var(--rk-step-dark);
}

.rk-step-btn.active {
    background: #ffffff;
    color: var(--rk-step-blue);
    border-bottom-color: var(--rk-step-blue);
}

.rk-step-num {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--rk-step-border);
    color: var(--rk-step-text);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    transition: all 0.3s;
}

.rk-step-btn.active .rk-step-num {
    background: var(--rk-step-blue);
    color: #ffffff;
    box-shadow: 0 0 10px rgba(2, 132, 199, 0.3);
}

/* Kontent Kroków */
.rk-step-content-wrapper {
    padding: 40px;
    background: #ffffff;
}

.rk-step-pane {
    display: none;
    grid-template-columns: 1fr 300px;
    gap: 40px;
    align-items: center;
    animation: fadeInStep 0.4s ease-out forwards;
}

.rk-step-pane.active {
    display: grid;
}

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

.rk-step-text h3 {
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-step-dark);
    margin: 0 0 15px 0;
}

.rk-step-text p {
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-step-text);
    margin: 0 0 15px 0;
}

/* -------------------------------------
   Modernizacja Fontu Listy (UL/LI)
--------------------------------------*/
.rk-step-text ul {
    list-style: none;
    padding: 0;
    margin: 25px 0;
    display: flex;
    flex-direction: column;
    gap: 16px;
}

.rk-step-text li {
    position: relative;
    padding-left: 36px;
    font-size: 16px;
    line-height: 1.6;
    color: var(--rk-step-dark);
    font-weight: 500;
    letter-spacing: -0.2px;
}

.rk-step-text li::before {
    content: '';
    position: absolute;
    left: 0;
    top: 2px;
    width: 22px;
    height: 22px;
    background-color: var(--rk-step-success);
    border-radius: 6px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'%3E%3C/polyline%3E%3C/svg%3E");
    background-size: 12px;
    background-position: center;
    background-repeat: no-repeat;
    box-shadow: 0 3px 8px -2px rgba(16, 185, 129, 0.4);
}

.rk-step-text li strong {
    color: var(--rk-step-blue);
    font-weight: 800;
}
/* ------------------------------------- */

.rk-step-text a {
    color: var(--rk-step-blue);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--rk-step-blue);
}

.rk-data-pill {
    display: inline-block;
    background: #f0f9ff;
    border: 1px solid #bae6fd;
    color: #0369a1;
    padding: 8px 15px;
    border-radius: 8px;
    font-weight: 800;
    font-size: 14px;
    margin: 10px 10px 10px 0;
}

/* Moduł SVG */
.rk-svg-box {
    background: var(--rk-step-bg);
    border: 1px solid var(--rk-step-border);
    border-radius: 16px;
    padding: 20px;
    height: 250px;
    display: flex;
    align-items: center;
    justify-content: center;
    position: relative;
    overflow: hidden;
}

.rk-anim-svg {
    width: 100%;
    max-width: 200px;
    height: auto;
}

/* Sub-toggle dla kroku 3 */
.rk-sub-toggle {
    display: flex;
    background: #f1f5f9;
    border-radius: 8px;
    padding: 4px;
    margin-bottom: 20px;
    width: max-content;
}

.rk-sub-btn {
    padding: 8px 16px;
    font-size: 13px;
    font-weight: 700;
    color: var(--rk-step-text);
    background: transparent;
    border: none;
    border-radius: 6px;
    cursor: pointer;
    transition: all 0.2s;
}

.rk-sub-btn.active {
    background: #ffffff;
    color: var(--rk-step-dark);
    box-shadow: 0 2px 4px rgba(0,0,0,0.05);
}

/* SVG Animations */
.anim-dial { transform-origin: 50px 70px; animation: dialMove 2s ease-out forwards; }
@keyframes dialMove { 0% { transform: rotate(-45deg); } 100% { transform: rotate(15deg); } } /* 1.8% */

.anim-clock-hand { transform-origin: 50px 50px; animation: clockSpin 4s infinite linear; }
@keyframes clockSpin { 100% { transform: rotate(360deg); } }

.anim-trowel { animation: trowelSweep 2s infinite ease-in-out; }
@keyframes trowelSweep { 0% { transform: translateX(-10px); } 50% { transform: translateX(20px); } 100% { transform: translateX(-10px); } }

.anim-thermometer { transform-origin: bottom; animation: thermoRise 3s infinite alternate ease-in-out; }
@keyframes thermoRise { 0% { transform: scaleY(0.2); } 100% { transform: scaleY(0.8); } }

@media (max-width: 768px) {
    .rk-step-header { padding: 30px 20px; }
    .rk-step-pane { grid-template-columns: 1fr; gap: 30px; }
    .rk-step-content-wrapper { padding: 25px 20px; }
    .rk-stepper-nav { justify-content: flex-start; }
    .rk-svg-box { height: 200px; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-step-container" id="install-steps-app">
    
    <div class="rk-step-header">
        <h2>Montaż drewna na ogrzewaniu podłogowym – kluczowe etapy</h2>
        <p>Nawet najlepsze gatunkowo drewno ułożone w niewłaściwy sposób ulegnie destrukcji. Przeanalizuj 4 inżynieryjne etapy poprawnego montażu, które gwarantują bezawaryjną pracę systemu.</p>
    </div>

    <!-- Nawigacja -->
    <div class="rk-stepper-nav">
        <button class="rk-step-btn active" data-target="step1">
            <span class="rk-step-num">1</span>
            Przygotowanie
        </button>
        <button class="rk-step-btn" data-target="step2">
            <span class="rk-step-num">2</span>
            Aklimatyzacja
        </button>
        <button class="rk-step-btn" data-target="step3">
            <span class="rk-step-num">3</span>
            Metoda Montażu
        </button>
        <button class="rk-step-btn" data-target="step4">
            <span class="rk-step-num">4</span>
            Rozruch
        </button>
    </div>

    <!-- Treść -->
    <div class="rk-step-content-wrapper">
        
        <!-- KROK 1 -->
        <div class="rk-step-pane active" id="step1">
            <div class="rk-step-text">
                <h3>1. Przygotowanie i badanie podłoża</h3>
                <p>Podkład (jastrych), na którym ma być zamontowana podłoga, musi być idealnie równy i przede wszystkim <strong>suchy</strong>. Przed przystąpieniem do prac należy koniecznie przeprowadzić pomiar wilgotnościomierzem karbidowym (metoda CM).</p>
                <div class="rk-data-pill">Cementowy: max 1,8% CM</div>
                <div class="rk-data-pill">Anhydrytowy: max 0,5% CM</div>
                <p>Montaż na mokrym podkładzie to inżynieryjne proszenie się o katastrofę. Zobacz szczegóły w naszym <a href="https://projekt-ogrzewania.pl/wylewka-na-ogrzewanie-podlogowe-kompletny-przewodnik/">przewodniku po wylewkach podłogowych</a>.</p>
            </div>
            <div class="rk-svg-box">
                <svg class="rk-anim-svg" viewBox="0 0 100 100">
                    <!-- Podłoże -->
                    <rect x="10" y="80" width="80" height="15" fill="#cbd5e1" rx="2" />
                    <!-- Wilgotnościomierz -->
                    <path d="M30,70 L40,40 L60,40 L70,70 Z" fill="#64748b" />
                    <circle cx="50" cy="40" r="25" fill="#ffffff" stroke="#334155" stroke-width="4" />
                    <path d="M30,40 A20,20 0 0,1 70,40" fill="none" stroke="#10b981" stroke-width="6" />
                    <path d="M50,20 A20,20 0 0,1 70,40" fill="none" stroke="#ef4444" stroke-width="6" />
                    <!-- Wskazówka -->
                    <line class="anim-dial" x1="50" y1="40" x2="35" y2="25" stroke="#1e293b" stroke-width="3" stroke-linecap="round" />
                    <circle cx="50" cy="40" r="4" fill="#1e293b" />
                </svg>
            </div>
        </div>

        <!-- KROK 2 -->
        <div class="rk-step-pane" id="step2">
            <div class="rk-step-text">
                <h3>2. Aklimatyzacja – nie pomijaj tego kroku!</h3>
                <p>Deski podłogowe to żywy materiał, który musi dostosować swoją wilgotność wewnętrzną do warunków panujących w pomieszczeniu. Pominięcie tego kroku to jeden z <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">najczęstszych błędów montażowych</a>.</p>
                <p>Aklimatyzacja polega na pozostawieniu oryginalnie zapakowanych paczek w pomieszczeniu docelowym na <strong>minimum 72 godziny</strong> (niektórzy producenci zalecają nawet do 7 dni).</p>
                <div class="rk-data-pill">Wyłączone ogrzewanie!</div>
                <div class="rk-data-pill">Wilgotność powietrza: 45-55%</div>
            </div>
            <div class="rk-svg-box">
                <svg class="rk-anim-svg" viewBox="0 0 100 100">
                    <!-- Paczki desek -->
                    <rect x="20" y="60" width="60" height="15" fill="#d97706" rx="2" />
                    <rect x="25" y="40" width="50" height="15" fill="#b45309" rx="2" />
                    <path d="M20,60 L80,60 M25,40 L75,40" stroke="#fff" stroke-width="1" stroke-dasharray="2 2" />
                    <!-- Zegar (72h) -->
                    <circle cx="80" cy="30" r="15" fill="#ffffff" stroke="#0284c7" stroke-width="3" />
                    <line class="anim-clock-hand" x1="80" y1="30" x2="80" y2="20" stroke="#0284c7" stroke-width="2" stroke-linecap="round" />
                    <line x1="80" y1="30" x2="86" y2="30" stroke="#0ea5e9" stroke-width="2" stroke-linecap="round" />
                </svg>
            </div>
        </div>

        <!-- KROK 3 -->
        <div class="rk-step-pane" id="step3">
            <div class="rk-step-text">
                <h3>3. Wybór metody montażu</h3>
                <div class="rk-sub-toggle">
                    <button class="rk-sub-btn active" id="btnKlej">Klejenie (Zalecane)</button>
                    <button class="rk-sub-btn" id="btnPlyw">Pływający</button>
                </div>
                
                <div id="descKlej">
                    <p>To najpewniejsza metoda na <strong>trwałe i stabilne połączenie</strong> podłogi z podłożem, minimalizująca opór cieplny. Konieczne jest użycie elastycznych klejów (np. silanowych).</p>
                    <p>Klej musi pozostawać elastyczny po wyschnięciu, aby <strong>kompensować mikroruchy drewna</strong> wywołane cyklami grzania pompy ciepła lub kotła.</p>
                </div>
                
                <div id="descPlyw" style="display: none;">
                    <p>System szybszy i czystszy. Wymaga jednak użycia specjalistycznych, <strong>bardzo cienkich podkładów akustycznych</strong>, które nie stanowią izolatora termicznego.</p>
                    <p>Metoda ta sprawdza się znakomicie przy nowoczesnych deskach warstwowych z systemem zatrzaskowym (click).</p>
                </div>
            </div>
            <div class="rk-svg-box">
                <!-- SVG Klejenie -->
                <svg class="rk-anim-svg" id="svgKlej" viewBox="0 0 100 100">
                    <rect x="10" y="80" width="80" height="10" fill="#cbd5e1" />
                    <!-- Ścieżki kleju -->
                    <path d="M10,75 L80,75" stroke="#10b981" stroke-width="4" stroke-dasharray="5 5" />
                    <!-- Paca zębata -->
                    <g class="anim-trowel">
                        <path d="M40,75 L50,60 L70,60 L70,75 Z" fill="#64748b" />
                        <rect x="50" y="50" width="10" height="10" fill="#334155" />
                        <rect x="40" y="45" width="30" height="5" fill="#f59e0b" rx="2" />
                    </g>
                </svg>
                <!-- SVG Pływająco -->
                <svg class="rk-anim-svg" id="svgPlyw" viewBox="0 0 100 100" style="display: none;">
                    <rect x="10" y="80" width="80" height="10" fill="#cbd5e1" />
                    <!-- Mata podkładowa -->
                    <rect x="10" y="70" width="80" height="5" fill="#fbbf24" />
                    <!-- Deska Click -->
                    <path d="M20,60 L80,60 L80,70 L20,70 Z" fill="#b45309" />
                    <path d="M80,65 L85,65 L85,70 L80,70" fill="#b45309" /> <!-- zamek -->
                </svg>
            </div>
        </div>

        <!-- KROK 4 -->
        <div class="rk-step-pane" id="step4">
            <div class="rk-step-text">
                <h3>4. Rozruch ogrzewania – cierpliwość popłaca</h3>
                <p>Gdy podłoga jest już ułożona, a klej całkowicie związał, można przystąpić do integracji cieplnej. <strong>Absolutnie zabronione jest gwałtowne nagrzewanie!</strong> Szok termiczny natychmiast zniszczy wiązania.</p>
                <p>Proces wygrzewania podłogi (sprawdź <a href="https://projekt-ogrzewania.pl/ile-czasu-nagrzewa-sie-podlogowka/">ile czasu nagrzewa się instalacja</a>) należy przeprowadzać według schematu:</p>
                <ul>
                    <li>Start od naturalnej temperatury pokojowej.</li>
                    <li>Zwiększanie zasilania o max <strong>1-2°C na dobę</strong>.</li>
                    <li>Analogiczne schładzanie systemu po sezonie letnim.</li>
                </ul>
            </div>
            <div class="rk-svg-box">
                <svg class="rk-anim-svg" viewBox="0 0 100 100">
                    <!-- Termometr obudowa -->
                    <rect x="40" y="20" width="20" height="60" rx="10" fill="#ffffff" stroke="#94a3b8" stroke-width="3" />
                    <circle cx="50" cy="80" r="15" fill="#ffffff" stroke="#94a3b8" stroke-width="3" />
                    <!-- Płyn termometru -->
                    <circle cx="50" cy="80" r="10" fill="#ef4444" />
                    <rect class="anim-thermometer" x="46" y="25" width="8" height="50" fill="#ef4444" rx="4" />
                    <!-- Miarka -->
                    <line x1="60" y1="30" x2="65" y2="30" stroke="#64748b" stroke-width="2" />
                    <line x1="60" y1="45" x2="65" y2="45" stroke="#64748b" stroke-width="2" />
                    <line x1="60" y1="60" x2="65" y2="60" stroke="#64748b" stroke-width="2" />
                </svg>
            </div>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domeny (Brak H-tagów)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('install-steps-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #1e293b; color: #f87171; border: 2px solid #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🚫</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Naruszenie Praw Autorskich</div>
                    <div style="font-size: 13px; line-height: 1.6; max-width: 500px; margin: 0 auto; color: #cbd5e1;">
                        Interaktywny przewodnik montażowy oraz skrypty SEO JSON-LD należą do Projekt-Ogrzewania.pl. Prosimy o usunięcie kodu z nieautoryzowanej witryny.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Steppera (Kroki główne)
    const stepBtns = document.querySelectorAll('.rk-step-btn');
    const stepPanes = document.querySelectorAll('.rk-step-pane');

    stepBtns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Reset active states
            stepBtns.forEach(b => b.classList.remove('active'));
            stepPanes.forEach(p => p.classList.remove('active'));

            // Set new active state
            this.classList.add('active');
            const targetId = this.getAttribute('data-target');
            document.getElementById(targetId).classList.add('active');
        });
    });

    // 3. Logika Sub-Toggle (Krok 3: Klej vs Pływający)
    const btnKlej = document.getElementById('btnKlej');
    const btnPlyw = document.getElementById('btnPlyw');
    const descKlej = document.getElementById('descKlej');
    const descPlyw = document.getElementById('descPlyw');
    const svgKlej = document.getElementById('svgKlej');
    const svgPlyw = document.getElementById('svgPlyw');

    if(btnKlej && btnPlyw) {
        btnKlej.addEventListener('click', () => {
            btnKlej.classList.add('active');
            btnPlyw.classList.remove('active');
            descKlej.style.display = 'block';
            descPlyw.style.display = 'none';
            svgKlej.style.display = 'block';
            svgPlyw.style.display = 'none';
        });

        btnPlyw.addEventListener('click', () => {
            btnPlyw.classList.add('active');
            btnKlej.classList.remove('active');
            descPlyw.style.display = 'block';
            descKlej.style.display = 'none';
            svgPlyw.style.display = 'block';
            svgKlej.style.display = 'none';
        });
    }
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-bledy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Jakie błędy montażowe niszczą drewnianą podłogę na ogrzewaniu?",
    "description": "Zbyt wysoka wilgotność jastrychu (powyżej 1,8% CM), sztywny klej i brak dylatacji brzegowych to główne przyczyny łódkowania i pękania parkietu na podłogówce.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-bledy",
    "name": "Parametry Krytyczne Montażu Drewna na Jastrychu",
    "description": "Limity technologiczne instalacji parkietu: dopuszczalna wilgotność wylewek CM, wymagane wydłużenie klejów (ISO 17178) oraz wymiary szczelin dylatacyjnych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "błędy montażu podłogówki",
      "wilgotność jastrychu pod drewno",
      "klej silanowy do parkietu",
      "dylatacja brzegowa podłogi",
      "łódkowanie drewna na ogrzewaniu"
    ],
    "measurementTechnique": "Analiza odkształceń naprężeniowych drewna pod wpływem skurczu higroskopijnego, braku przestrzeni ekspansyjnej oraz zerwania sztywnej spoiny klejowej.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Błąd wilgotności: Jastrych > 1,8% CM powoduje transfer pary wodnej i łódkowanie.",
        "Błąd chemii: Klej o wydłużeniu < 50% ulega zerwaniu pod wpływem mikroruchów termicznych.",
        "Błąd dylatacji: Szczelina < 10 mm blokuje ekspansję, powodując pękanie posadzki w osi."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-bledy",
    "name": "Symulator Błędów Montażowych Parkietu",
    "description": "Interaktywna animacja SVG ukazująca procesy degradacji drewna w zależności od popełnionego błędu wykonawczego: odkształcenia higroskopijne, ścinanie kleju oraz kolizje ze ścianą.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-err-dark: #111827;
    --rk-err-red: #dc2626;
    --rk-err-red-light: #fef2f2;
    --rk-err-accent: #f59e0b; /* Bursztyn dla akcentów drewna */
    --rk-err-bg: #ffffff;
    --rk-err-border: #e5e7eb;
    --rk-err-text: #4b5563;
}

.rk-err-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-err-bg);
    border-radius: 20px;
    box-shadow: 0 15px 40px -10px rgba(220, 38, 38, 0.15);
    border: 1px solid var(--rk-err-red);
    overflow: hidden;
}

/* Sekcja Treściowa */
.rk-err-content {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-err-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-err-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-err-content p {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-err-text);
    margin: 0 0 20px 0;
}

.rk-err-content a {
    color: var(--rk-err-red);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(220, 38, 38, 0.2);
    transition: all 0.3s;
}

.rk-err-content a:hover {
    border-bottom-color: var(--rk-err-red);
}

/* Nowoczesna, wyrazista lista błędów */
.rk-err-list {
    list-style: none;
    padding: 0;
    margin: 30px 0;
    display: flex;
    flex-direction: column;
    gap: 20px;
}

.rk-err-list li {
    position: relative;
    padding: 20px 20px 20px 55px;
    background: var(--rk-err-red-light);
    border-radius: 12px;
    border: 1px solid #fecaca;
    font-size: 16px;
    line-height: 1.6;
    color: var(--rk-err-dark);
    font-weight: 500;
}

.rk-err-list li::before {
    content: '';
    position: absolute;
    left: 15px;
    top: 20px;
    width: 26px;
    height: 26px;
    background-color: var(--rk-err-red);
    border-radius: 8px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='18' y1='6' x2='6' y2='18'%3E%3C/line%3E%3Cline x1='6' y1='6' x2='18' y2='18'%3E%3C/line%3E%3C/svg%3E");
    background-size: 14px;
    background-position: center;
    background-repeat: no-repeat;
    box-shadow: 0 4px 10px -2px rgba(220, 38, 38, 0.4);
}

.rk-err-list li strong {
    color: var(--rk-err-red);
    font-weight: 900;
    display: block;
    font-size: 17px;
    margin-bottom: 5px;
}

/* Moduł Symulatora */
.rk-err-interactive {
    padding: 45px 50px;
    background: var(--rk-err-dark);
    color: #ffffff;
    border-top: 1px solid #374151;
}

.rk-err-interactive h3 {
    margin: 0 0 30px 0;
    font-size: 22px;
    font-weight: 800;
    text-align: center;
    color: #f3f4f6;
}

.rk-sim-grid {
    display: grid;
    grid-template-columns: 320px 1fr;
    gap: 40px;
    align-items: center;
}

/* Zakładki błędów */
.rk-err-tabs {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.rk-err-tab {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-radius: 12px;
    padding: 16px 20px;
    color: #9ca3af;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s;
    font-size: 15px;
    font-weight: 700;
    display: flex;
    align-items: center;
    gap: 12px;
}

.rk-err-tab:hover {
    background: rgba(255, 255, 255, 0.1);
}

.rk-err-tab.active {
    background: var(--rk-err-red);
    color: #ffffff;
    border-color: #ef4444;
    box-shadow: 0 10px 20px rgba(220, 38, 38, 0.4);
}

.rk-tab-icon {
    width: 24px;
    height: 24px;
    background: rgba(0,0,0,0.2);
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
}

/* Strefa animacji SVG */
.rk-svg-stage {
    background: #1f2937;
    border-radius: 16px;
    padding: 30px;
    height: 260px;
    position: relative;
    border: 1px solid #374151;
    box-shadow: inset 0 0 30px rgba(0,0,0,0.5);
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.rk-svg-canvas {
    width: 100%;
    max-width: 300px;
    height: auto;
    overflow: visible;
}

/* SVG Elementy bazowe */
.sv-screed { fill: #6b7280; rx: 4; }
.sv-board { fill: #d97706; rx: 2; transition: all 0.5s ease; }
.sv-wall { fill: #4b5563; rx: 2; }
.sv-glue { stroke: #10b981; stroke-width: 4; fill: none; stroke-dasharray: 6 4; transition: all 0.3s; }

/* Stany Animacji dla konkretnych błędów */

/* 1. Wilgotność (Łódkowanie) */
.state-moisture .sv-board {
    animation: warpBoard 3s infinite alternate ease-in-out;
    transform-origin: center;
}
.state-moisture .sv-vapor {
    stroke: #3b82f6; stroke-width: 2; opacity: 0;
    animation: riseVapor 2s infinite ease-in;
}

/* 2. Zły klej (Zerwanie) */
.state-glue .sv-glue {
    stroke: #ef4444;
    animation: breakGlue 2s infinite;
}
.state-glue .sv-board {
    animation: shiftBoard 2s infinite ease-in-out;
}

/* 3. Brak dylatacji (Pękanie) */
.state-gap .sv-board {
    animation: expandBoard 3s infinite;
}
.state-gap .sv-crack {
    stroke: #451a03; stroke-width: 3; stroke-linecap: round;
    stroke-dasharray: 30; stroke-dashoffset: 30;
    animation: drawCrack 3s infinite;
}

/* Keyframes */
@keyframes warpBoard {
    0% { transform: scaleY(1) translateY(0); }
    100% { transform: scaleY(1.3) translateY(-10px) perspective(200px) rotateX(15deg); }
}

@keyframes riseVapor {
    0% { transform: translateY(15px); opacity: 0; }
    50% { opacity: 0.8; }
    100% { transform: translateY(-10px); opacity: 0; }
}

@keyframes shiftBoard {
    0%, 100% { transform: translateX(0); }
    50% { transform: translateX(10px); }
}

@keyframes breakGlue {
    0% { stroke-dasharray: 6 4; opacity: 1; }
    40% { stroke-dasharray: 20 10; opacity: 0.5; }
    50% { stroke-dasharray: 2 20; opacity: 0.2; }
    100% { stroke-dasharray: 2 20; opacity: 0.2; }
}

@keyframes expandBoard {
    0% { transform: scaleX(1); transform-origin: left; }
    40%, 100% { transform: scaleX(1.15); transform-origin: left; } /* uderza w ścianę */
}

@keyframes drawCrack {
    0%, 35% { stroke-dashoffset: 30; opacity: 0; }
    40%, 100% { stroke-dashoffset: 0; opacity: 1; }
}

/* Etykiety na płótnie */
.sv-label {
    fill: #ffffff;
    font-size: 10px;
    font-weight: bold;
    font-family: sans-serif;
    text-anchor: middle;
    opacity: 0;
    transition: opacity 0.3s;
}

.state-moisture .lbl-moisture { opacity: 1; }
.state-glue .lbl-glue { opacity: 1; }
.state-gap .lbl-gap { opacity: 1; }

@media (max-width: 768px) {
    .rk-err-content, .rk-err-interactive { padding: 30px 20px; }
    .rk-sim-grid { grid-template-columns: 1fr; gap: 30px; }
    .rk-err-list li { padding-left: 45px; }
    .rk-err-list li::before { left: 10px; width: 22px; height: 22px; background-size: 12px; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-err-container" id="error-sim-app">
    
    <!-- Sekcja Tekstowa -->
    <div class="rk-err-content">
        <h2>Jakie błędy montażowe niszczą drewnianą podłogę?</h2>
        <p>Najczęstszym błędem jest całkowity brak wykonania protokołu wygrzewania jastrychu przed rozpoczęciem montażu. Zgodnie z bezwzględnymi wytycznymi organizacji parkieciarskich, wilgotność podłoża cementowego nie może przekraczać <strong>1,8% CM</strong>, a jastrychu anhydrytowego zaledwie <strong>0,5% CM</strong>.</p>
        
        <p>Jeśli <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">unikniesz tych 3 najczęstszych pułapek</a>, Twoja podłoga przetrwa dekady:</p>

        <ul class="rk-err-list">
            <li>
                <strong>Błąd 1: Zbyt wczesny montaż</strong>
                Jeśli położysz drewno na jastrych o wilgotności rzędu 3%, instalacja podłogowa zadziała jak potężny „ekstraktor wilgoci”, siłą wtłaczając parę wodną wprost w wewnętrzną strukturę deski. Fizyczny efekt jest brutalny: potężne łódkowanie desek zazwyczaj w ciągu 14 dni od uruchomienia ogrzewania.
            </li>
            <li>
                <strong>Błąd 2: Zły klej</strong>
                Stosowanie tanich klejów sztywnych (np. rozpuszczalnikowych na bazie żywic syntetycznych) zamiast dedykowanych klejów silanowych lub poliuretanowo-silanowych (certyfikat ISO 17178). Klej pod drewno pracujące na instalacji grzewczej musi posiadać wydłużenie przy zerwaniu na poziomie min. 50-100%, aby bezpiecznie kompensować mikroruchy.
            </li>
            <li>
                <strong>Błąd 3: Brak dylatacji brzegowych</strong>
                Pozostawienie <a href="https://projekt-ogrzewania.pl/izolacja-brzegowa-i-dylatacje-w-instalacji-ogrzewania-podlogowego/">szczeliny obwodowej</a> mniejszej niż 10-15 mm przy ścianach i oknach. Drewno przy grzaniu od spodu „puchnie” i „kurczy się” znacznie szybciej. Całkowity brak miejsca na ten naturalny ruch skutkuje silnym wypchnięciem listew przypodłogowych lub spektakularnym pękaniem desek (tzw. "łódka odwrócona") w połowie salonu.
            </li>
        </ul>
    </div>

    <!-- Sekcja Interaktywna -->
    <div class="rk-err-interactive">
        <h3>Symulator Zniszczeń: Mechanika Błędów</h3>
        <div class="rk-sim-grid">
            
            <!-- Zakładki -->
            <div class="rk-err-tabs" id="errTabs">
                <button class="rk-err-tab active" data-state="state-moisture">
                    <div class="rk-tab-icon">1</div>
                    Ekstrakcja wilgoci (>1.8% CM)
                </button>
                <button class="rk-err-tab" data-state="state-glue">
                    <div class="rk-tab-icon">2</div>
                    Zerwanie sztywnego kleju
                </button>
                <button class="rk-err-tab" data-state="state-gap">
                    <div class="rk-tab-icon">3</div>
                    Blokada dylatacyjna (<10mm)
                </button>
            </div>

            <!-- SVG Scena -->
            <div class="rk-svg-stage state-moisture" id="errSvgStage">
                <svg class="rk-svg-canvas" viewBox="0 0 200 120">
                    
                    <!-- Podstawa - Jastrych -->
                    <rect class="sv-screed" x="10" y="80" width="160" height="25" />
                    
                    <!-- Etykiety jastrychu -->
                    <text class="sv-label lbl-moisture" x="90" y="100">Wilgotność 3% CM !</text>
                    <text class="sv-label lbl-glue" x="90" y="100">Praca cieplna posadzki</text>
                    <text class="sv-label lbl-gap" x="70" y="100">Rozszerzalność drewna</text>

                    <!-- Ściana (tylko dla dylatacji) -->
                    <rect class="sv-wall" x="175" y="40" width="15" height="65" />
                    
                    <!-- Para wodna (tylko dla wilgotności) -->
                    <g class="sv-vapor-group">
                        <path class="sv-vapor" d="M30,75 Q25,60 30,45" fill="none" />
                        <path class="sv-vapor" d="M90,75 Q95,60 90,45" fill="none" style="animation-delay: 0.5s;" />
                        <path class="sv-vapor" d="M150,75 Q145,60 150,45" fill="none" style="animation-delay: 0.2s;" />
                    </g>

                    <!-- Warstwa Kleju (głównie dla błędu kleju) -->
                    <path class="sv-glue" d="M20,77 L160,77" />

                    <!-- Deska / Drewno -->
                    <rect class="sv-board" x="20" y="55" width="140" height="20" />
                    
                    <!-- Pęknięcie (tylko dla dylatacji) -->
                    <path class="sv-crack" d="M90,55 L95,65 L88,75" fill="none" />

                </svg>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Brak H-tagów)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('error-sim-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #111827; color: #ef4444; border: 2px dashed #dc2626; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🛑</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Zablokowano komponent</div>
                    <div style="font-size: 13px; line-height: 1.6; max-width: 500px; margin: 0 auto; color: #9ca3af;">
                        Wykryto kradzież kodu. Interaktywny symulator błędów i zaszyte dane SEO są własnością Projekt-Ogrzewania.pl. Uruchomienie poza autoryzowaną domeną jest niemożliwe.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Zakładek Symulatora
    const tabs = document.querySelectorAll('#errTabs .rk-err-tab');
    const stage = document.getElementById('errSvgStage');

    tabs.forEach(tab => {
        tab.addEventListener('click', function() {
            // Reset active states
            tabs.forEach(t => t.classList.remove('active'));
            
            // Set new active state
            this.classList.add('active');
            
            // Read target state
            const targetState = this.getAttribute('data-state');
            
            // Update SVG container class to trigger animations
            stage.className = `rk-svg-stage ${targetState}`;
        });
    });
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-algorytm",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Jak obliczyć wymaganą moc grzewczą przy podłodze drewnianej? Algorytm OZC",
    "description": "Kalkulator wymaganej temperatury powierzchni podłogi z drewna. Sprawdź, czy Twoje obciążenie cieplne (W/m2) nie przekracza normy EN 1264 dla parkietu (max 27°C).",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-algorytm",
    "name": "Algorytm Obliczeniowy Mocy Grzewczej dla Drewna",
    "description": "Zestawienie wzorów na obciążenie projektowe (q) i temperaturę powierzchni (tp) oraz warunków brzegowych dla okładzin z drewna warstwowego i litego.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "wymagana moc grzewcza drewna",
      "obliczenia OZC podłogówka",
      "temperatura powierzchni podłogi",
      "algorytm EN 1264",
      "straty ciepła W/m2"
    ],
    "measurementTechnique": "Rozwiązywanie równania strumienia cieplnego q = 11 * (tp - ti) w celu wyznaczenia niezbędnej temperatury powierzchni podłogi przy zadanych stratach cieplnych.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Krok 1: Wyznaczenie obciążenia projektowego q [W/m2].",
        "Krok 2: Wyliczenie tp = ti + (q / 11).",
        "Krok 3: Weryfikacja warunku tp <= 27°C."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-algorytm",
    "name": "Kalkulator Bezpieczeństwa Termicznego Drewna",
    "description": "Interaktywne narzędzie obliczeniowe dla inwestorów, pozwalające symulować temperaturę powierzchni podłogi drewnianej w zależności od strat ciepła budynku i oczekiwanej temperatury pokojowej.",
    "applicationCategory": "CalculatorApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-alg-dark: #1e1b4b; /* Deep Indigo */
    --rk-alg-primary: #4f46e5; /* Indigo Accent */
    --rk-alg-light: #e0e7ff;
    --rk-alg-bg: #ffffff;
    --rk-alg-border: #c7d2fe;
    --rk-alg-text: #475569;
    --rk-alg-safe: #10b981;
    --rk-alg-danger: #ef4444;
}

.rk-alg-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-alg-bg);
    border-radius: 20px;
    box-shadow: 0 15px 40px -10px rgba(79, 70, 229, 0.15);
    border: 1px solid var(--rk-alg-primary);
    overflow: hidden;
}

/* Sekcja Treści - Edukacyjna */
.rk-alg-content {
    padding: 40px 50px;
    background: #ffffff;
}

.rk-alg-content h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-alg-dark);
    margin: 0 0 20px 0;
    line-height: 1.3;
}

.rk-alg-content p {
    font-size: 16px;
    line-height: 1.7;
    color: var(--rk-alg-text);
    margin: 0 0 15px 0;
}

.rk-alg-content a {
    color: var(--rk-alg-primary);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid rgba(79, 70, 229, 0.2);
    transition: border-color 0.3s;
}

.rk-alg-content a:hover {
    border-bottom-color: var(--rk-alg-primary);
}

/* Algorytm Lista Numeryczna */
.rk-alg-steps {
    background: var(--rk-alg-light);
    border-radius: 16px;
    padding: 25px 30px;
    margin: 25px 0;
    border: 1px solid var(--rk-alg-border);
}

.rk-alg-steps ol {
    margin: 0;
    padding-left: 20px;
    color: var(--rk-alg-dark);
}

.rk-alg-steps li {
    font-size: 15px;
    line-height: 1.6;
    margin-bottom: 12px;
    padding-left: 10px;
}

.rk-alg-steps li::marker {
    font-weight: 800;
    color: var(--rk-alg-primary);
}

.rk-alg-steps strong {
    color: var(--rk-alg-primary);
    background: rgba(255,255,255,0.6);
    padding: 2px 6px;
    border-radius: 4px;
    font-family: monospace;
    font-size: 14px;
}

/* Moduł Interaktywny */
.rk-alg-interactive {
    padding: 45px 50px;
    background: var(--rk-alg-dark);
    color: #ffffff;
    border-top: 1px solid #312e81;
}

.rk-alg-interactive h3 {
    margin: 0 0 30px 0;
    font-size: 22px;
    font-weight: 800;
    text-align: center;
    color: #e0e7ff;
}

.rk-alg-grid {
    display: grid;
    grid-template-columns: 1fr 320px;
    gap: 40px;
    align-items: center;
}

/* Suwaki i Parametry */
.rk-sliders-box {
    display: flex;
    flex-direction: column;
    gap: 25px;
}

.rk-slider-wrap {
    background: rgba(255,255,255,0.05);
    padding: 20px;
    border-radius: 12px;
    border: 1px solid rgba(255,255,255,0.1);
}

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

.rk-slider-label {
    font-size: 14px;
    font-weight: 600;
    color: #a5b4fc;
}

.rk-slider-val {
    font-size: 20px;
    font-weight: 900;
    color: #ffffff;
    font-family: monospace;
}

.rk-range {
    -webkit-appearance: none;
    width: 100%;
    height: 6px;
    border-radius: 3px;
    background: #4338ca;
    outline: none;
}

.rk-range::-webkit-slider-thumb {
    -webkit-appearance: none;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: #ffffff;
    cursor: pointer;
    border: 3px solid var(--rk-alg-primary);
    transition: transform 0.1s;
}

.rk-range::-webkit-slider-thumb:active {
    transform: scale(1.2);
}

/* Wynik (Result Box) */
.rk-result-panel {
    background: rgba(0,0,0,0.3);
    border-radius: 16px;
    padding: 25px;
    text-align: center;
    position: relative;
    border: 2px solid transparent;
    transition: all 0.3s;
}

.rk-result-title {
    font-size: 13px;
    text-transform: uppercase;
    letter-spacing: 1px;
    color: #a5b4fc;
    margin-bottom: 10px;
    display: block;
}

.rk-result-tp {
    font-size: 42px;
    font-weight: 900;
    line-height: 1;
    margin-bottom: 15px;
    font-family: monospace;
    transition: color 0.3s;
}

.rk-result-msg {
    font-size: 14px;
    font-weight: 700;
    padding: 8px 15px;
    border-radius: 8px;
    display: inline-block;
    transition: all 0.3s;
}

/* Statusy Wyniku */
.status-ok .rk-result-panel { border-color: var(--rk-alg-safe); box-shadow: 0 0 20px rgba(16,185,129,0.1); }
.status-ok .rk-result-tp { color: var(--rk-alg-safe); }
.status-ok .rk-result-msg { background: rgba(16,185,129,0.2); color: #34d399; }

.status-err .rk-result-panel { border-color: var(--rk-alg-danger); box-shadow: 0 0 20px rgba(239,68,68,0.2); }
.status-err .rk-result-tp { color: var(--rk-alg-danger); }
.status-err .rk-result-msg { background: rgba(239,68,68,0.2); color: #fca5a5; }

/* SVG Animacja */
.rk-svg-viz {
    width: 100%;
    height: 150px;
    margin-top: 20px;
    overflow: visible;
}

.anim-floor { transition: fill 0.4s; }
.anim-wave { transition: stroke 0.4s; }
.anim-crack { opacity: 0; transition: opacity 0.3s; stroke-dasharray: 50; stroke-dashoffset: 50; }

.status-ok .anim-floor { fill: #d97706; }
.status-ok .anim-wave { stroke: #10b981; animation: waveUpOk 2s infinite linear; }

.status-err .anim-floor { fill: #92400e; }
.status-err .anim-wave { stroke: #ef4444; stroke-width: 4; animation: waveUpErr 1s infinite linear; }
.status-err .anim-crack { opacity: 1; animation: crackDraw 0.5s forwards; }

@keyframes waveUpOk {
    0% { transform: translateY(10px); opacity: 0; }
    50% { opacity: 0.8; }
    100% { transform: translateY(-20px); opacity: 0; }
}

@keyframes waveUpErr {
    0% { transform: translateY(10px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-10px); opacity: 0; }
}

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

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

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-alg-container" id="algo-sim-app">
    
    <!-- Sekcja Tekstowa -->
    <div class="rk-alg-content">
        <h2>Jak obliczyć wymaganą moc grzewczą przy podłodze drewnianej? (Algorytm)</h2>
        <p>Jeśli planujesz położyć naturalne drewno, jako inwestor musisz zweryfikować, czy podłoga zdoła oddać (kolokwialnie: "puścić") wystarczającą ilość ciepła, aby pokryć realne straty wykazane w rzetelnym <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">projekcie OZC</a>.</p>
        
        <p>Aby uniknąć przykrych niespodzianek, przyjmij poniższy inżynierski algorytm oparty na normie badawczej <a href="https://projekt-ogrzewania.pl/norma-obliczen-ogrzewania-podlogowego-en-1264/">EN 1264</a>:</p>

        <div class="rk-alg-steps">
            <ol>
                <li><strong>Oblicz obciążenie projektowe (q):</strong> q = Φ / A, gdzie Φ to straty ciepła pomieszczenia [W], a A to całkowita powierzchnia grzejna [m2].</li>
                <li><strong>Określ wymaganą temperaturę powierzchni (tp):</strong> tp = ti + (q / α), gdzie ti to oczekiwana temperatura wewnętrzna (np. 20°C), a α to fizyczny współczynnik przejmowania ciepła od podłogi (standardowo przyjmuje się 11 W/m2K).</li>
                <li><strong>Sprawdź ograniczenie:</strong> Jeśli wynikowa tp jest wyższa niż 27°C, układ nie zadziała prawidłowo z drewnem. Konieczne jest <a href="https://projekt-ogrzewania.pl/jak-gesto-rozkladac-podlogowke/">zagęszczenie rozstawu rur w projekcie</a> lub obniżenie strat ciepła (np. przez lepszą izolację ścian zewnętrznych).</li>
                <li><strong>Oblicz temperaturę czynnika (tm):</strong> Wykorzystaj logarytmiczną różnicę temperatur. Pamiętaj, że dla drewna, parametr tm (temperatura średnia wody) będzie zazwyczaj o 5 do 8 K wyższa niż dla zwykłych płytek przy tym samym układzie.</li>
            </ol>
        </div>

        <p><strong>Przykład z praktyki instalacyjnej:</strong><br>
        Masz dom o stratach rzędu 45 W/m2. Przy docelowej temperaturze wewnątrz wynoszącej 20°C, temperatura powierzchni podłogi musi wynosić: tp = 20 + (45 / 11) = 20 + 4,1 = <strong>24,1°C</strong>.<br>
        Wartość ta jest znacznie mniejsza niż rygorystyczny limit 27°C, a więc dębowa deska warstwowa o grubości 14 mm będzie pracować w idealnych i wysoce bezpiecznych warunkach.</p>
    </div>

    <!-- Sekcja Interaktywna - Kalkulator -->
    <div class="rk-alg-interactive">
        <h3>Interaktywny Kalkulator Temperatury Powierzchni</h3>
        <p style="text-align: center; color: #a5b4fc; margin-bottom: 30px; font-size: 14px;">Sprawdź, czy Twój budynek jest gotowy na drewnianą posadzkę.</p>
        
        <div class="rk-alg-grid" id="algoGridState">
            
            <!-- Suwaki sterujące -->
            <div class="rk-sliders-box">
                <div class="rk-slider-wrap">
                    <div class="rk-slider-header">
                        <span class="rk-slider-label">Straty Ciepła Pomieszczenia (q)</span>
                        <span class="rk-slider-val"><span id="valQ">45</span> W/m2</span>
                    </div>
                    <input type="range" id="slideQ" class="rk-range" min="20" max="100" value="45" step="1">
                </div>

                <div class="rk-slider-wrap">
                    <div class="rk-slider-header">
                        <span class="rk-slider-label">Wymagana Temp. Wewnętrzna (ti)</span>
                        <span class="rk-slider-val"><span id="valTi">20</span> °C</span>
                    </div>
                    <input type="range" id="slideTi" class="rk-range" min="18" max="25" value="20" step="0.5">
                </div>
            </div>

            <!-- Panel Wyników + SVG -->
            <div class="rk-result-panel">
                <span class="rk-result-title">Wymagana Temperatura Powierzchni</span>
                <div class="rk-result-tp"><span id="valTpRes">24.1</span>°C</div>
                <div class="rk-result-msg" id="msgStatus">Idealne warunki pracy</div>

                <!-- Wizualizacja SVG podłogi -->
                <svg class="rk-svg-viz" viewBox="0 0 200 100">
                    <!-- Beton/Rury -->
                    <rect x="20" y="70" width="160" height="20" fill="#475569" rx="2" />
                    <circle cx="60" cy="80" r="6" fill="#1e1b4b" />
                    <circle cx="100" cy="80" r="6" fill="#1e1b4b" />
                    <circle cx="140" cy="80" r="6" fill="#1e1b4b" />
                    
                    <!-- Drewniana Posadzka -->
                    <rect class="anim-floor" x="20" y="50" width="160" height="15" rx="1" />
                    <path class="anim-crack" d="M100,50 L105,58 L95,65" fill="none" stroke="#1e1b4b" stroke-width="2" />

                    <!-- Fale Ciepła -->
                    <path class="anim-wave" d="M60,40 Q55,25 60,10" fill="none" stroke-width="3" stroke-linecap="round" />
                    <path class="anim-wave" d="M100,40 Q105,25 100,10" fill="none" stroke-width="3" stroke-linecap="round" style="animation-delay: 0.3s;" />
                    <path class="anim-wave" d="M140,40 Q135,25 140,10" fill="none" stroke-width="3" stroke-linecap="round" style="animation-delay: 0.6s;" />
                </svg>
            </div>

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

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Brak H-tagów)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('algo-sim-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #1e1b4b; color: #f87171; border: 2px dashed #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🚫</div>
                    <div style="font-size: 16px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Zablokowano komponent</div>
                    <div style="font-size: 13px; line-height: 1.6; max-width: 500px; margin: 0 auto; color: #c7d2fe;">
                        Skrypt kalkulatora OZC i dane strukturalne JSON-LD podlegają ochronie praw autorskich Projekt-Ogrzewania.pl. Uruchomienie poza autoryzowaną domeną zostało zatrzymane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Kalkulatora i Interakcji
    const slideQ = document.getElementById('slideQ');
    const slideTi = document.getElementById('slideTi');
    const valQ = document.getElementById('valQ');
    const valTi = document.getElementById('valTi');
    const valTpRes = document.getElementById('valTpRes');
    const msgStatus = document.getElementById('msgStatus');
    const algoGridState = document.getElementById('algoGridState');

    const alpha = 11; // Współczynnik przejmowania ciepła (stała z normy)

    function calculateValues() {
        const q = parseFloat(slideQ.value);
        const ti = parseFloat(slideTi.value);

        // Wyświetlanie wartości na etykietach suwaków
        valQ.textContent = q;
        valTi.textContent = ti.toFixed(1);

        // Główny wzór: tp = ti + (q / alpha)
        const tp = ti + (q / alpha);
        valTpRes.textContent = tp.toFixed(1);

        // Weryfikacja warunku brzegowego (27 stopni)
        if (tp > 27.0) {
            algoGridState.className = 'rk-alg-grid status-err';
            msgStatus.textContent = 'PRZEKROCZENIE NORM! Zniszczenie deski.';
        } else if (tp > 26.0 && tp <= 27.0) {
            algoGridState.className = 'rk-alg-grid status-ok';
            msgStatus.textContent = 'Na granicy normy. Ostrożnie.';
        } else {
            algoGridState.className = 'rk-alg-grid status-ok';
            msgStatus.textContent = 'Parametry bezpieczne dla drewna';
        }
    }

    // Nasłuchiwanie zmian na suwakach
    slideQ.addEventListener('input', calculateValues);
    slideTi.addEventListener('input', calculateValues);

    // Inicjalizacja pierwszego obliczenia
    calculateValues();
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-hydraulika",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Jak posadzka drewniana wpływa na projekt OZC i hydraulikę?",
    "description": "Zobacz, dlaczego parkiet wymaga gęstszego rozstawu rur (co 10 cm), krótszych obwodów i rotametrów do 5 l/min. Symulacja hydrauliczna dla 150 m².",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-hydraulika",
    "name": "Zmiany Parametrów Hydraulicznych: Płytki vs Drewno",
    "description": "Zestawienie kompensacji oporu cieplnego posadzki na obciążenie układu: przepływ masowy, rozstaw pętli, dobór pompy i maksymalna długość pętli.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "rozstaw rur pod drewno 10cm",
      "rotametry 5 l/min podłogówka",
      "przepływ masowy ogrzewania m3/h",
      "maksymalna długość pętli ogrzewania podłogowego",
      "dobór pompy obiegowej do podłogówki",
      "opory hydrauliczne w instalacji"
    ],
    "measurementTechnique": "Symulacja fizycznego zagęszczenia pętli oraz przyrostu wydatku pompy dla budynku 150 m² przy utrzymaniu ΔT = 5 K.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Gres: Rozstaw 15 cm, przepływ ok. 1.15 m³/h, standardowe rotametry 2.5 l/min.",
        "Drewno: Rozstaw 10 cm, przepływ ok. 1.45 m³/h, rotametry 5.0 l/min, limity długości pętli PEX 16 do 80m."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-hydraulika",
    "name": "Symulator Obciążeń Hydraulicznych Instalacji",
    "description": "Zaawansowany panel edukacyjny (dashboard) ilustrujący w czasie rzeczywistym fizyczne zagęszczenie rur grzewczych, skokowy wzrost obciążenia pompy oraz dynamikę przepływu względem oporu cieplnego okładziny.",
    "applicationCategory": "EngineeringApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;700;800;900&display=swap');

:root {
    --rk-pro-dark: #0f172a;
    --rk-pro-slate: #334155;
    --rk-pro-blue: #0284c7;
    --rk-pro-blue-light: #f0f9ff;
    --rk-pro-wood: #d97706;
    --rk-pro-bg: #ffffff;
    --rk-pro-border: #e2e8f0;
    --rk-pro-font: 'Plus Jakarta Sans', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
}

.rk-pro-container {
    max-width: 950px;
    margin: 40px auto;
    font-family: var(--rk-pro-font);
    background: var(--rk-pro-bg);
    border-radius: 24px;
    box-shadow: 0 25px 50px -12px rgba(15, 23, 42, 0.15);
    border: 1px solid var(--rk-pro-border);
    overflow: hidden;
    color: var(--rk-pro-slate);
}

/* Sekcja Treściowa */
.rk-pro-content {
    padding: 50px;
    background: #ffffff;
}

.rk-pro-content h2 {
    font-size: 32px;
    font-weight: 900;
    color: var(--rk-pro-dark);
    margin: 0 0 20px 0;
    line-height: 1.25;
    letter-spacing: -0.5px;
}

.rk-pro-content p {
    font-size: 16px;
    line-height: 1.8;
    margin: 0 0 20px 0;
}

.rk-pro-content a {
    color: var(--rk-pro-blue);
    font-weight: 700;
    text-decoration: none;
    box-shadow: inset 0 -2px 0 rgba(2, 132, 199, 0.3);
    transition: all 0.3s;
}

.rk-pro-content a:hover {
    box-shadow: inset 0 -10px 0 rgba(2, 132, 199, 0.15);
    color: #0369a1;
}

/* Moduł Danych OZC */
.rk-ozc-banner {
    background: var(--rk-pro-blue-light);
    border-left: 4px solid var(--rk-pro-blue);
    padding: 25px 30px;
    border-radius: 0 16px 16px 0;
    margin: 35px 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 30px;
}

.rk-ozc-banner-text {
    flex: 1 1 300px;
}

.rk-ozc-banner-text h4 {
    margin: 0 0 10px 0;
    color: var(--rk-pro-dark);
    font-size: 18px;
    font-weight: 800;
}

.rk-ozc-banner-text p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
}

.rk-ozc-stats {
    display: flex;
    gap: 20px;
}

.rk-stat-box {
    background: #ffffff;
    padding: 15px 20px;
    border-radius: 12px;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
    text-align: center;
    border: 1px solid var(--rk-pro-border);
}

.rk-stat-box span {
    display: block;
    font-size: 12px;
    text-transform: uppercase;
    font-weight: 700;
    color: #64748b;
    margin-bottom: 5px;
}

.rk-stat-box strong {
    display: block;
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-pro-dark);
}

.rk-stat-box.highlight strong {
    color: #dc2626;
}

/* Kafelki Zmian (Siatka 2x2 z wypełnioną dziurą na długi ogon) */
.rk-changes-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-top: 40px;
}

.rk-card {
    background: #ffffff;
    border: 1px solid var(--rk-pro-border);
    border-radius: 16px;
    padding: 25px;
    transition: all 0.3s;
}

.rk-card:hover {
    border-color: var(--rk-pro-blue);
    box-shadow: 0 10px 25px -5px rgba(2, 132, 199, 0.1);
    transform: translateY(-2px);
}

.rk-card-icon {
    width: 44px;
    height: 44px;
    background: var(--rk-pro-blue-light);
    color: var(--rk-pro-blue);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 20px;
}

.rk-card h4 {
    margin: 0 0 12px 0;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-pro-dark);
}

.rk-card p {
    margin: 0;
    font-size: 14px;
    line-height: 1.6;
    color: var(--rk-pro-slate);
}

/* Symulator Kinetyczny (Nowy, profesjonalny dashboard) */
.rk-sim-area {
    background: var(--rk-pro-dark);
    padding: 50px;
    color: #ffffff;
}

.rk-sim-area h3 {
    text-align: center;
    font-size: 24px;
    font-weight: 800;
    margin: 0 0 40px 0;
    color: #f8fafc;
}

.rk-sim-layout {
    display: grid;
    grid-template-columns: 280px 1fr;
    gap: 40px;
    align-items: center;
}

.rk-sim-controls {
    display: flex;
    flex-direction: column;
    gap: 15px;
}

.rk-ctrl-btn {
    background: rgba(255, 255, 255, 0.05);
    border: 1px solid rgba(255, 255, 255, 0.1);
    padding: 20px;
    border-radius: 16px;
    color: #94a3b8;
    text-align: left;
    cursor: pointer;
    transition: all 0.3s;
    font-family: var(--rk-pro-font);
    display: flex;
    justify-content: space-between;
    align-items: center;
}

.rk-ctrl-btn:hover {
    background: rgba(255, 255, 255, 0.1);
}

.rk-ctrl-btn.active[data-mat="gres"] {
    background: var(--rk-pro-blue);
    border-color: #38bdf8;
    color: #ffffff;
}

.rk-ctrl-btn.active[data-mat="wood"] {
    background: var(--rk-pro-wood);
    border-color: #fbbf24;
    color: #ffffff;
}

.rk-ctrl-title {
    font-size: 16px;
    font-weight: 800;
    display: block;
}

.rk-ctrl-sub {
    font-size: 12px;
    opacity: 0.8;
    margin-top: 4px;
    display: block;
}

/* Nowoczesne płótno SVG - HUD Dashboard */
.rk-svg-viewport {
    background: #1e293b;
    border-radius: 20px;
    padding: 30px;
    border: 1px solid #334155;
    position: relative;
    overflow: hidden;
    box-shadow: inset 0 0 40px rgba(0,0,0,0.5);
}

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

/* Style SVG */
.svg-hud-title { fill: #94a3b8; font-size: 10px; font-weight: 800; font-family: var(--rk-pro-font); letter-spacing: 1px; }
.svg-bar-bg { fill: #334155; }
.svg-bar-flow, .svg-bar-pump { transition: width 0.6s cubic-bezier(0.4, 0, 0.2, 1), fill 0.6s; }
.svg-hud-val { fill: #f8fafc; font-size: 16px; font-weight: 900; font-family: monospace; transition: opacity 0.4s; }

.svg-floor { transition: opacity 0.5s; }
.floor-gres { fill: #94a3b8; }
.floor-wood { fill: #b45309; }
.svg-floor-txt { fill: #ffffff; font-size: 10px; font-weight: 800; font-family: var(--rk-pro-font); text-anchor: middle; transition: opacity 0.5s; }
.svg-screed { fill: #475569; }
.pipe-shell { fill: #0f172a; }

.pipe-water-slow, .pipe-water-fast { transition: fill 0.5s; }
.svg-pipes-gres, .svg-pipes-wood { transition: opacity 0.5s, transform 0.5s cubic-bezier(0.4, 0, 0.2, 1); }

/* Stany SVG CSS - Gres */
.state-gres .svg-bar-flow { width: 50px; fill: #0ea5e9; }
.state-gres .svg-bar-pump { width: 45px; fill: #10b981; }
.state-gres .val-wood { opacity: 0; }
.state-gres .val-gres { opacity: 1; }
.state-gres .floor-wood { opacity: 0; }
.state-gres .floor-gres { opacity: 1; }
.state-gres .txt-wood { opacity: 0; }
.state-gres .txt-gres { opacity: 1; }
.state-gres .svg-pipes-wood { opacity: 0; transform: translateY(15px); pointer-events: none; }
.state-gres .svg-pipes-gres { opacity: 1; transform: translateY(0); }
.state-gres .pipe-water-slow { fill: #38bdf8; animation: pulseWaterSlow 2.5s infinite alternate; }

/* Stany SVG CSS - Drewno */
.state-wood .svg-bar-flow { width: 130px; fill: #f59e0b; }
.state-wood .svg-bar-pump { width: 115px; fill: #ef4444; }
.state-wood .val-wood { opacity: 1; }
.state-wood .val-gres { opacity: 0; }
.state-wood .floor-wood { opacity: 1; }
.state-wood .floor-gres { opacity: 0; }
.state-wood .txt-wood { opacity: 1; }
.state-wood .txt-gres { opacity: 0; }
.state-wood .svg-pipes-wood { opacity: 1; transform: translateY(0); }
.state-wood .svg-pipes-gres { opacity: 0; transform: translateY(15px); pointer-events: none; }
.state-wood .pipe-water-fast { fill: #ef4444; animation: pulseWaterFast 0.6s infinite alternate; }

@keyframes pulseWaterSlow {
    0% { opacity: 0.6; }
    100% { opacity: 1; }
}

@keyframes pulseWaterFast {
    0% { opacity: 0.4; }
    100% { opacity: 1; }
}

/* Mocne CTA */
.rk-pro-cta {
    padding: 50px;
    text-align: center;
    background: #f8fafc;
    border-top: 1px solid var(--rk-pro-border);
}

.rk-pro-cta h3 {
    font-size: 26px;
    font-weight: 800;
    color: var(--rk-pro-dark);
    margin: 0 0 15px 0;
}

.rk-pro-cta p {
    font-size: 16px;
    color: var(--rk-pro-slate);
    max-width: 600px;
    margin: 0 auto 30px auto;
    line-height: 1.7;
}

.rk-btn-solid {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    background: var(--rk-pro-blue);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 40px;
    border-radius: 14px;
    text-decoration: none;
    box-shadow: 0 10px 20px -5px rgba(2, 132, 199, 0.4);
    transition: all 0.3s;
}

.rk-btn-solid:hover {
    background: #0369a1;
    transform: translateY(-4px);
    box-shadow: 0 15px 25px -5px rgba(2, 132, 199, 0.6);
}

.rk-btn-solid svg { transition: transform 0.3s; }
.rk-btn-solid:hover svg { transform: translateX(5px); }

@media (max-width: 768px) {
    .rk-pro-content, .rk-sim-area, .rk-pro-cta { padding: 30px 20px; }
    .rk-changes-grid { grid-template-columns: 1fr; margin-top: 30px; }
    .rk-sim-layout { grid-template-columns: 1fr; gap: 30px; }
    .rk-ozc-banner { flex-direction: column; align-items: stretch; border-radius: 16px; border-left: none; border-top: 4px solid var(--rk-pro-blue); padding: 20px; }
    .rk-ozc-stats { justify-content: space-between; }
    .rk-stat-box { flex: 1; padding: 15px 10px; }
    .rk-ctrl-btn { flex-direction: column; align-items: flex-start; gap: 10px; }
    .rk-ctrl-btn svg { align-self: flex-end; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-pro-container" id="hydro-pro-app">
    
    <!-- Treść Merytoryczna -->
    <div class="rk-pro-content">
        <h2>Jak posadzka drewniana wpływa na projekt hydrauliki?</h2>
        <p>Decyzja o wyborze naturalnego drewna wymusza na inżynierze wykonanie potężnej korekty w obliczeniach OZC. Drewno jest izolatorem (posiada wysoki opór cieplny). Aby utrzymać zadaną temperaturę w pomieszczeniu, musimy tę barierę skompensować poprzez fizyczne <strong>zagęszczenie pętli grzewczych</strong> oraz znaczące przyspieszenie przepływu masowego wody.</p>

        <!-- Baner z Danymi -->
        <div class="rk-ozc-banner">
            <div class="rk-ozc-banner-text">
                <h4>Przykład z praktyki: Dom 150 m²</h4>
                <p>Zmiana decyzji z gresu na parkiet dębowy (przy utrzymaniu stałego parametru zasilania i ΔT = 5 K) diametralnie obciąża układ hydrauliczny. Taka sytuacja wymusza błyskawiczną zmianę modelu pompy obiegowej.</p>
            </div>
            <div class="rk-ozc-stats">
                <div class="rk-stat-box">
                    <span>Gres (Płytki)</span>
                    <strong>1.15 m³/h</strong>
                </div>
                <div class="rk-stat-box highlight">
                    <span>Drewno</span>
                    <strong>1.45 m³/h</strong>
                </div>
            </div>
        </div>

        <!-- Siatka 4 Zmian (Wyeliminowana "dziura", mocny długi ogon) -->
        <div class="rk-changes-grid">
            <div class="rk-card">
                <div class="rk-card-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
                </div>
                <h4>Zagęszczenie stref</h4>
                <p>Pod dużymi oknami tarasowymi, przy drewnie, <a href="https://projekt-ogrzewania.pl/strefa-brzegowa-w-ogrzewaniu-podlogowym/">rozstaw rur w strefie brzegowej</a> musi wynosić rygorystyczne <strong>5-10 cm</strong>.</p>
            </div>
            
            <div class="rk-card">
                <div class="rk-card-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><circle cx="12" cy="12" r="10"/><path d="M12 8v8"/><path d="M8 12h8"/></svg>
                </div>
                <h4>Dobór rotametrów</h4>
                <p>Rozdzielacz musi posiadać <a href="https://projekt-ogrzewania.pl/rotametr-wskaznik-przeplywu-w-rozdzielaczu-ogrzewania-podlogowego/">rotametry o zakresie do 5 l/min</a> dla poprawnej obsługi wymagających, gęstych pętli.</p>
            </div>
            
            <div class="rk-card">
                <div class="rk-card-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M4 19V5a2 2 0 0 1 2-2h13.4a.6.6 0 0 1 .6.6v13.8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"/><path d="M4 15h16"/></svg>
                </div>
                <h4>Korekta OZC</h4>
                <p>W <a href="https://projekt-ogrzewania.pl/projektowe-obciazenie-cieplne-ozc/">obliczeniach OZC</a> należy obligatoryjnie uwzględnić realną grubość deski oraz użytego kleju elastycznego.</p>
            </div>

            <div class="rk-card">
                <div class="rk-card-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M22 12A10 10 0 0 0 12 2v10l8.5 5.5"/></svg>
                </div>
                <h4>Długość obwodów i opory</h4>
                <p>Gęstszy rozstaw wymusza użycie znacznie większej ilości rury. Należy pamiętać, że <a href="https://projekt-ogrzewania.pl/maksymalna-dlugosc-petli-ogrzewania-podlogowego/">maksymalna długość pętli ogrzewania podłogowego</a> (PEX 16x2.0) to graniczne 80-90 m.</p>
            </div>
        </div>
    </div>

    <!-- Symulator Kinetyczny (Nowy Dashboard) -->
    <div class="rk-sim-area">
        <h3>Symulator Oporu i Obciążenia Pompy</h3>
        
        <div class="rk-sim-layout">
            <!-- Przyciski -->
            <div class="rk-sim-controls" id="proToggles">
                <button class="rk-ctrl-btn active" data-mat="gres">
                    <div>
                        <span class="rk-ctrl-title">Płytki Ceramiczne</span>
                        <span class="rk-ctrl-sub">Standardowy układ (Rozstaw 15cm)</span>
                    </div>
                </button>
                
                <button class="rk-ctrl-btn" data-mat="wood">
                    <div>
                        <span class="rk-ctrl-title">Parkiet Drewniany</span>
                        <span class="rk-ctrl-sub">Zagęszczenie pętli (Rozstaw 10cm)</span>
                    </div>
                </button>
            </div>

            <!-- SVG Płótno HUD -->
            <div class="rk-svg-viewport state-gres" id="proSvgStage">
                <svg class="rk-dynamic-svg" viewBox="0 0 400 160">
                    
                    <!-- Wskaźniki cyfrowe (HUD Górny) -->
                    <g transform="translate(10, 15)">
                        <text class="svg-hud-title" x="0" y="0">WYMAGANY PRZEPŁYW (m³/h)</text>
                        <rect class="svg-bar-bg" x="0" y="8" width="140" height="10" rx="5" />
                        <rect class="svg-bar-flow" x="0" y="8" width="50" height="10" rx="5" />
                        <text class="svg-hud-val val-gres" x="150" y="18">1.15</text>
                        <text class="svg-hud-val val-wood" x="150" y="18">1.45</text>
                    </g>

                    <g transform="translate(210, 15)">
                        <text class="svg-hud-title" x="0" y="0">OBCIĄŻENIE POMPY (%)</text>
                        <rect class="svg-bar-bg" x="0" y="8" width="130" height="10" rx="5" />
                        <rect class="svg-bar-pump" x="0" y="8" width="45" height="10" rx="5" />
                        <text class="svg-hud-val val-gres" x="140" y="18">45%</text>
                        <text class="svg-hud-val val-wood" x="140" y="18">92%</text>
                    </g>

                    <!-- Przekrój podłogi i animacja rur -->
                    <g transform="translate(10, 60)">
                        <!-- Okładzina -->
                        <rect class="svg-floor floor-gres" x="0" y="0" width="380" height="12" rx="2" />
                        <text class="svg-floor-txt txt-gres" x="190" y="9">GRES (OPÓR CIEPLNY: 0.02 m²K/W)</text>
                        
                        <rect class="svg-floor floor-wood" x="0" y="-8" width="380" height="20" rx="2" />
                        <text class="svg-floor-txt txt-wood" x="190" y="6">PARKIET (OPÓR CIEPLNY: 0.10 m²K/W)</text>
                        
                        <!-- Jastrych z rurami -->
                        <rect class="svg-screed" x="0" y="16" width="380" height="50" rx="4" />
                        
                        <!-- Rury GRES (Szeroko) -->
                        <g class="svg-pipes-gres">
                            <circle cx="60" cy="42" r="10" class="pipe-shell" />
                            <circle cx="60" cy="42" r="6" class="pipe-water-slow" />
                            
                            <circle cx="190" cy="42" r="10" class="pipe-shell" />
                            <circle cx="190" cy="42" r="6" class="pipe-water-slow" />
                            
                            <circle cx="320" cy="42" r="10" class="pipe-shell" />
                            <circle cx="320" cy="42" r="6" class="pipe-water-slow" />
                        </g>

                        <!-- Rury WOOD (Zagęszczone) -->
                        <g class="svg-pipes-wood">
                            <circle cx="30" cy="42" r="10" class="pipe-shell" />
                            <circle cx="30" cy="42" r="6" class="pipe-water-fast" />
                            
                            <circle cx="110" cy="42" r="10" class="pipe-shell" />
                            <circle cx="110" cy="42" r="6" class="pipe-water-fast" />
                            
                            <circle cx="190" cy="42" r="10" class="pipe-shell" />
                            <circle cx="190" cy="42" r="6" class="pipe-water-fast" />
                            
                            <circle cx="270" cy="42" r="10" class="pipe-shell" />
                            <circle cx="270" cy="42" r="6" class="pipe-water-fast" />
                            
                            <circle cx="350" cy="42" r="10" class="pipe-shell" />
                            <circle cx="350" cy="42" r="6" class="pipe-water-fast" />
                        </g>
                    </g>
                </svg>
            </div>
        </div>
    </div>

    <!-- Mocne CTA -->
    <div class="rk-pro-cta">
        <h3>Twoja podłoga nie wybaczy błędów szacunkowych</h3>
        <p>Zmiana okładziny na etapie wykończeniowym bez przeliczenia oporów układu to gwarancja niedogrzanych pomieszczeń lub uszkodzonej pompy. Zamów rzetelną dokumentację i śpij spokojnie.</p>
        <a href="https://projekt-ogrzewania.pl/produkt/projekt-instalacji-ogrzewania-podlogowego-podlogowki/" class="rk-btn-solid">
            ZAMÓW INŻYNIERSKI PROJEKT PODŁOGÓWKI
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez H-tagów w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('hydro-pro-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #0f172a; color: #f87171; border: 2px solid #ef4444; border-radius: 16px; font-family: sans-serif;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🚫</div>
                    <div style="font-size: 18px; font-weight: 800; margin-bottom: 10px; text-transform: uppercase;">Zablokowano komponent</div>
                    <div style="font-size: 14px; line-height: 1.6; max-width: 500px; margin: 0 auto; color: #94a3b8;">
                        Narzędzie symulacyjne OZC oraz infrastruktura JSON-LD podlegają ścisłej ochronie praw autorskich Projekt-Ogrzewania.pl.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Kinetyka Interfejsu (SVG Dashboard)
    const btns = document.querySelectorAll('#proToggles .rk-ctrl-btn');
    const stage = document.getElementById('proSvgStage');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zmiana aktywności
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');
            
            // Pobranie materiału
            const mat = this.getAttribute('data-mat');
            
            // Aplikacja kinetyki i klas CSS na głównym kontenerze SVG
            if (mat === 'wood') {
                stage.className = 'rk-svg-viewport state-wood';
            } else {
                stage.className = 'rk-svg-viewport state-gres';
            }
        });
    });
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-casestudy",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Studium Przypadku: Optymalizacja podłogówki pod parkiet dębowy (Jasło)",
    "description": "Nadzór inwestorski w Jaśle (165 m2). Zobacz jak dobór deski warstwowej o grubości 15 mm i ograniczenie oporu cieplnego do R=0,10 uratowały instalację.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-casestudy",
    "name": "Parametry Projektowe OZC - Dom Jasło 2026",
    "description": "Zestawienie parametrów wejściowych i audytowych wykorzystanych do optymalizacji zasilania ogrzewania podłogowego w systemie mokrym.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "ogrzewanie podłogowe jasło",
      "opór cieplny deski dębowej",
      "deska warstwowa na ogrzewanie podłogowe",
      "system mokry podłogówka",
      "dobór drewna na podłogę grzewczą"
    ],
    "measurementTechnique": "Porównanie oporu cieplnego R [m²K/W] wariantu błędnego (deska lita 22mm) z wariantem optymalnym (deska warstwowa 15mm) pod kątem zgodności z normą PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Wariant Inwestora: Lita deska dębowa 22 mm, R > 0.15 m²K/W (ryzyko izolacji).",
        "Korekta Inżynierska: Deska warstwowa 15 mm, R = 0.10 m²K/W (stabilne przekazywanie ciepła)."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-casestudy",
    "name": "Panel Studium Przypadku: Dylemat Wykonawczy",
    "description": "Interaktywny moduł edukacyjny z animacjami SVG obrazujący konsekwencje wyboru niewłaściwej grubości drewna na instalacji płaszczyznowej.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires HTML5, CSS3, JavaScript and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --cs-primary: #0f172a;
    --cs-accent: #0284c7;
    --cs-err: #dc2626; /* Kolor błędu */
    --cs-ok: #059669; /* Kolor sukcesu */
    --cs-bg: #f8fafc;
    --cs-border: #e2e8f0;
    --cs-text: #475569;
}

.case-study-module {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    background: #ffffff;
    border-radius: 24px;
    box-shadow: 0 20px 40px -10px rgba(15, 23, 42, 0.1);
    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: 300px;
    height: 300px;
    background: radial-gradient(circle, rgba(2, 132, 199, 0.3) 0%, rgba(255,255,255,0) 70%);
    border-radius: 50%;
    pointer-events: none;
}

.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: #bae6fd;
    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: 32px;
    font-weight: 900;
    margin: 0 0 25px 0;
    line-height: 1.25;
    color: #ffffff;
    position: relative;
    z-index: 2;
    letter-spacing: -0.5px;
}

.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 20px;
    border-radius: 12px;
    backdrop-filter: blur(4px);
}

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

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

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

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

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

.cs-author-photo {
    width: 60px;
    height: 60px;
    border-radius: 50%;
    object-fit: cover;
    border: 3px solid #ffffff;
    box-shadow: 0 5px 15px rgba(2, 132, 199, 0.2);
    flex-shrink: 0;
}

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

.cs-author-box strong {
    font-weight: 900;
    color: #0369a1;
}

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

.cs-interactive-section h3 {
    text-align: center;
    font-size: 22px;
    font-weight: 900;
    color: var(--cs-primary);
    margin: 0 0 30px 0;
}

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

.cs-split-card {
    border-radius: 16px;
    padding: 30px;
    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;
    display: flex;
    flex-direction: column;
}

/* Stan nieaktywny lekko przygaszony */
.cs-split-card:not(.active) {
    opacity: 0.6;
    transform: scale(0.97);
    filter: grayscale(0.5);
}

.cs-split-card:not(.active):hover {
    opacity: 0.9;
    filter: grayscale(0);
}

/* Kolorystyka i aktywacja */
.cs-split-card.error.active {
    border-color: var(--cs-err);
    background: #fef2f2;
    box-shadow: 0 15px 30px rgba(220, 38, 38, 0.15);
    opacity: 1;
    transform: scale(1);
}

.cs-split-card.success.active {
    border-color: var(--cs-ok);
    background: #ecfdf5;
    box-shadow: 0 15px 30px rgba(5, 150, 105, 0.15);
    opacity: 1;
    transform: scale(1);
}

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

.cs-card-icon {
    font-size: 24px;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px; height: 40px;
    border-radius: 10px;
    background: #ffffff;
    box-shadow: 0 2px 5px rgba(0,0,0,0.05);
}

.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 0 20px 0;
    flex-grow: 1;
}

.cs-split-card.error .cs-card-desc strong { color: #b91c1c; }
.cs-split-card.success .cs-card-desc strong { color: #047857; }

/* Animowana Wizualizacja SVG w karcie */
.cs-svg-box {
    width: 100%;
    height: 120px;
    background: #ffffff;
    border-radius: 12px;
    border: 1px solid rgba(0,0,0,0.05);
    margin-top: auto;
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
}

.cs-anim-svg {
    width: 100%;
    height: 100%;
}

/* Animacje SVG */
.sv-pipe { fill: #475569; }
.sv-water { fill: #38bdf8; }

.cs-split-card.error .sv-wood { fill: #78350f; transition: transform 2s; }
.cs-split-card.error.active .sv-wood { transform: perspective(100px) rotateX(5deg); }
.cs-split-card.error .sv-heat { stroke: #ef4444; stroke-width: 4; stroke-linecap: round; opacity: 0; }
.cs-split-card.error.active .sv-heat { animation: heatBlocked 1.5s infinite alternate; }

.cs-split-card.success .sv-wood { fill: #d97706; }
.cs-split-card.success .sv-heat { stroke: #10b981; stroke-width: 4; stroke-linecap: round; opacity: 0; }
.cs-split-card.success.active .sv-heat { animation: heatPass 1.5s infinite linear; }

@keyframes heatBlocked {
    0% { transform: translateY(15px); opacity: 0; stroke-width: 4; }
    100% { transform: translateY(5px); opacity: 0.8; stroke-width: 8; }
}

@keyframes heatPass {
    0% { transform: translateY(15px); opacity: 0; }
    50% { opacity: 0.8; }
    100% { transform: translateY(-15px); opacity: 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-author-box { flex-direction: column; text-align: center; }
    .cs-interactive-section { padding: 0 25px 30px 25px; }
    .cs-split-container { grid-template-columns: 1fr; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="case-study-module" id="app-jaslo-case">

    <!-- Header i Metryczka -->
    <div class="cs-header-wrapper">
        <div class="cs-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"></path></svg>
            Case Study z Placu Budowy
        </div>
        <h2>Optymalizacja OZC pod parkiet dębowy</h2>
        <div class="cs-stats-grid">
            <div class="cs-stat-box">
                <span class="cs-stat-label">Termin</span>
                <span class="cs-stat-value">14 Luty 2026</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Lokalizacja</span>
                <span class="cs-stat-value">Jasło</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">Powierzchnia</span>
                <span class="cs-stat-value">165 m²</span>
            </div>
            <div class="cs-stat-box">
                <span class="cs-stat-label">System</span>
                <span class="cs-stat-value">Mokry (Jastrych)</span>
            </div>
        </div>
    </div>

    <!-- Treść Opisowa -->
    <div class="cs-content-section">
        <p class="cs-lead-text">Zakończenie nadzoru nad realizacją instalacji dla Pana Filipa obnażyło jedno z największych zagrożeń w <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/">projektowaniu nowoczesnych systemów płaszczyznowych</a>. Inwestor zakupił materiał wykończeniowy bez wcześniejszej konsultacji inżynieryjnej dotyczącej oporów cieplnych.</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><strong>Dziennik Inżyniera:</strong> "Gdy przyjechałem na audyt do Jasła, wyzwaniem nie był sam montaż rur, ale zablokowanie fatalnej decyzji o zastosowaniu grubej na 22 mm dębowej deski litej. Moim zadaniem było przeprojektowanie systemu tak, aby <strong>nie przekroczyć bariery oporu cieplnego R = 0,10 m²K/W.</strong>"</p>
        </div>
    </div>

    <!-- Moduł Interaktywny -->
    <div class="cs-interactive-section">
        <h3>Decyzja, która uratowała posadzkę</h3>
        
        <div class="cs-split-container">
            
            <!-- Karta 1: Błąd (Deska Lita) -->
            <div class="cs-split-card error" id="cs-err-card">
                <div class="cs-card-header">
                    <div class="cs-card-icon">⚠️</div>
                    <h3 class="cs-card-title">Założenie Pierwotne</h3>
                </div>
                <p class="cs-card-desc">
                    Inwestor zaplanował ułożenie <strong>deski litej o grubości 22 mm</strong>. Jej fizyczny opór cieplny (R > 0,15) doprowadziłby do "zduszenia" podłogówki. Pompa ciepła musiałaby tłoczyć wodę o temp. ~45°C, co w krótkim czasie spowodowałoby gwałtowne przesuszenie i pękanie drogiego drewna.
                </p>
                <div class="cs-svg-box">
                    <svg class="cs-anim-svg" viewBox="0 0 200 100">
                        <rect x="0" y="60" width="200" height="40" fill="#cbd5e1" />
                        <circle cx="100" cy="80" r="10" class="sv-pipe" />
                        <circle cx="100" cy="80" r="6" fill="#ef4444" /> <!-- Gorąca woda -->
                        <rect class="sv-wood" x="20" y="20" width="160" height="25" /> <!-- Gruba deska -->
                        <path class="sv-heat" d="M80,60 Q100,40 80,20" fill="none" />
                        <path class="sv-heat" d="M120,60 Q100,40 120,20" fill="none" />
                    </svg>
                </div>
            </div>

            <!-- Karta 2: Sukces (Deska Warstwowa) -->
            <div class="cs-split-card success active" id="cs-ok-card">
                <div class="cs-card-header">
                    <div class="cs-card-icon">✅</div>
                    <h3 class="cs-card-title">Korekta Inżynierska</h3>
                </div>
                <p class="cs-card-desc">
                    Wymusiłem zmianę na <strong>dębową deskę warstwową (15 mm)</strong>. Ten jeden manewr obniżył <a href="https://projekt-ogrzewania.pl/opor-cieplny-r-m%c2%b2k-w-klucz-do-efektywnego-ogrzewania-podlogowego/">opór cieplny do optymalnego R = 0,10 m²K/W</a>. W połączeniu z zagęszczonym rozstawem rur zagwarantowaliśmy perfekcyjne oddawanie mocy przy niskiej, bezpiecznej dla drewna temperaturze zasilania.
                </p>
                <div class="cs-svg-box">
                    <svg class="cs-anim-svg" viewBox="0 0 200 100">
                        <rect x="0" y="60" width="200" height="40" fill="#cbd5e1" />
                        <!-- Gęsty rozstaw rur -->
                        <circle cx="60" cy="80" r="10" class="sv-pipe" />
                        <circle cx="60" cy="80" r="6" class="sv-water" />
                        <circle cx="140" cy="80" r="10" class="sv-pipe" />
                        <circle cx="140" cy="80" r="6" class="sv-water" />
                        
                        <rect class="sv-wood" x="20" y="40" width="160" height="15" /> <!-- Cienka deska -->
                        <!-- Płynące fale ciepła -->
                        <path class="sv-heat" d="M60,50 Q60,30 60,10" fill="none" />
                        <path class="sv-heat" d="M100,50 Q100,30 100,10" fill="none" style="animation-delay: 0.3s;" />
                        <path class="sv-heat" d="M140,50 Q140,30 140,10" fill="none" style="animation-delay: 0.6s;" />
                    </svg>
                </div>
            </div>

        </div>
    </div>

</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie domenowe (bez H-tagów)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('app-jaslo-case');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 25px; text-align: center; background: #0f172a; color: #ef4444; border-radius: 24px; border: 1px solid #dc2626;">
                    <span style="font-size: 32px; display: block; margin-bottom: 10px;">🔒</span>
                    <div style="margin: 0 0 10px 0; font-size: 18px; font-weight: 900; text-transform: uppercase;">Zablokowano komponent</div>
                    <p style="font-size: 14px; margin-bottom: 15px; color: #94a3b8;">Narzędzie analityczne i dane JSON-LD należą do Projekt-Ogrzewania.pl. Brak licencji dla obecnej domeny.</p>
                </div>
            `;
            return;
        }
    }

    // 2. Logika przełączania kart (Interaktywność)
    const cardErr = document.getElementById('cs-err-card');
    const cardOk = document.getElementById('cs-ok-card');

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

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



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-podsumowanie-eksperta",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Podsumowanie Inwestycyjne: Drewno na ogrzewaniu podłogowym",
    "description": "Finałowe zalecenia inżynierskie: wybór deski warstwowej 14-15 mm, kleju silanowego i zachowanie oporu R=0,10 m2K/W.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Quotation",
    "license": "https://projekt-ogrzewania.pl/",
    "text": "Decyzja o drewnie na ogrzewaniu podłogowym to balans między fizyką a estetyką. Jako inżynier z tysiącem projektów na koncie, radzę: wybierz dębową deskę warstwową o grubości 14-15 mm, zleć montaż na kleju silanowym i dopilnuj, aby projektant instalacji uwzględnił opór cieplny R=0,10 m2K/W. Tylko takie podejście zagwarantuje, że Twoje rachunki za gaz czy prąd do pompy ciepła nie wzrosną, a podłoga będzie wyglądać idealnie przez dekady.",
    "spokenByCharacter": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "jobTitle": "Inżynier HVAC & CEO",
      "url": "https://projekt-ogrzewania.pl",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ],
      "worksFor": {
        "@type": "Organization",
        "name": "Projekt-Ogrzewania.pl"
      }
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-podsumowanie-eksperta",
    "name": "Parametry Docelowe dla Podłogi Drewnianej",
    "description": "Zestawienie optymalnych wartości brzegowych dla okładziny drewnianej zapewniających wydajną i bezawaryjną pracę pompy ciepła.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "podsumowanie parametrów drewna na podłogówkę",
      "opór cieplny deski R=0.10",
      "grubość deski warstwowej 15mm",
      "klej silanowy na ogrzewanie podłogowe",
      "koszty ogrzewania przy drewnie"
    ],
    "measurementTechnique": "Wskazania inżynierskie oparte na bilansie energetycznym budynku, optymalizacji kosztów eksploatacji i normach posadzkarskich.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Optymalna grubość deski warstwowej: 14-15 mm",
        "Zalecany opór cieplny R: 0.10 m2K/W",
        "Wymagana chemia: Trwale elastyczny klej silanowy"
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-podsumowanie-eksperta",
    "name": "Dekalog Inwestora: Podsumowanie",
    "description": "Interaktywny moduł z cytatem podsumowującym, pozwalający użytkownikowi rozwinąć i przeanalizować twarde wartości techniczne wynikające z artykułu.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and HTML5",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-quote-primary: #0f172a;
    --rk-quote-accent: #b45309; /* Ciepły odcień drewna/bursztynu */
    --rk-quote-accent-light: #fffbeb;
    --rk-quote-danger: #ef4444;
    --rk-quote-bg: #fafaf9;
    --rk-quote-border: #e7e5e4;
}

.rk-expert-wrapper {
    max-width: 950px;
    margin: 50px auto 40px auto;
    font-family: 'Inter', -apple-system, sans-serif;
}

.rk-expert-header {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin-bottom: 25px;
}

.rk-expert-header h2 {
    font-size: 26px;
    font-weight: 900;
    color: var(--rk-quote-primary);
    margin: 0;
}

.rk-expert-container {
    background: #ffffff;
    border-radius: 24px;
    padding: 35px 40px;
    display: flex;
    gap: 30px;
    align-items: flex-start;
    border: 1px solid var(--rk-quote-border);
    box-shadow: 0 20px 40px -15px rgba(180, 83, 9, 0.15);
    position: relative;
    overflow: hidden;
}

/* Dekoracyjne tło */
.rk-expert-container::before {
    content: '';
    position: absolute;
    top: 0; left: 0; width: 6px; height: 100%;
    background: linear-gradient(to bottom, var(--rk-quote-accent), #f59e0b);
}

.rk-expert-container::after {
    content: '”';
    position: absolute;
    top: -20px;
    right: 20px;
    font-family: Georgia, serif;
    font-size: 140px;
    color: var(--rk-quote-bg);
    line-height: 1;
    z-index: 0;
}

/* Animowane zdjęcie */
.rk-expert-photo-wrap {
    flex-shrink: 0;
    width: 110px;
    height: 110px;
    position: relative;
    z-index: 1;
}

.rk-expert-photo-ring {
    position: absolute;
    top: -5px; left: -5px; right: -5px; bottom: -5px;
    border-radius: 50%;
    border: 2px dashed var(--rk-quote-accent);
    animation: spinRing 12s linear infinite;
}

@keyframes spinRing {
    100% { transform: rotate(360deg); }
}

.rk-expert-photo {
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
    object-position: center top;
    border: 4px solid #ffffff;
    box-shadow: 0 8px 15px rgba(0,0,0,0.1);
    position: relative;
    z-index: 2;
}

.rk-expert-badge-icon {
    position: absolute;
    bottom: -5px;
    right: -5px;
    background: var(--rk-quote-accent);
    color: #ffffff;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    box-shadow: 0 4px 10px rgba(180, 83, 9, 0.4);
    z-index: 3;
}

/* Treść cytatu */
.rk-expert-content {
    flex-grow: 1;
    position: relative;
    z-index: 1;
}

.rk-expert-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 800;
    color: var(--rk-quote-accent);
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 12px;
    background: var(--rk-quote-accent-light);
    padding: 6px 14px;
    border-radius: 20px;
}

.rk-expert-text {
    font-size: 17px;
    line-height: 1.8;
    color: var(--rk-quote-primary);
    font-style: italic;
    margin: 0 0 15px 0;
    font-weight: 500;
}

.rk-expert-text strong {
    color: var(--rk-quote-accent);
    font-weight: 800;
    background: rgba(180, 83, 9, 0.08);
    padding: 2px 4px;
    border-radius: 4px;
}

.rk-expert-text a {
    color: var(--rk-quote-primary);
    text-decoration: underline;
    text-decoration-color: var(--rk-quote-accent);
    text-underline-offset: 3px;
    transition: color 0.2s;
}

.rk-expert-text a:hover {
    color: var(--rk-quote-accent);
}

.rk-expert-signature {
    display: block;
    font-size: 14px;
    font-weight: 700;
    color: #78716c;
    border-top: 1px solid var(--rk-quote-border);
    padding-top: 15px;
    margin-top: 15px;
}

/* Interaktywny Panel Ukryty */
.rk-expert-interactive {
    margin-top: 20px;
}

.rk-expert-btn {
    background: #ffffff;
    border: 2px solid var(--rk-quote-border);
    color: var(--rk-quote-primary);
    padding: 10px 20px;
    border-radius: 12px;
    font-size: 14px;
    font-weight: 800;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 8px;
    transition: all 0.3s ease;
}

.rk-expert-btn:hover {
    border-color: var(--rk-quote-accent);
    color: var(--rk-quote-accent);
    background: var(--rk-quote-accent-light);
}

.rk-expert-btn svg {
    transition: transform 0.3s;
}

.rk-expert-btn.active svg {
    transform: rotate(180deg);
}

.rk-expert-data-panel {
    display: none;
    margin-top: 15px;
    padding: 20px;
    background: var(--rk-quote-bg);
    border-radius: 12px;
    border: 1px dashed #d6d3d1;
    animation: fadeInDown 0.4s ease forwards;
}

.rk-expert-data-panel.active {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 15px;
}

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

.rk-data-stat {
    text-align: center;
    background: #ffffff;
    padding: 15px;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
    border: 1px solid var(--rk-quote-border);
}

.rk-data-val {
    display: block;
    font-size: 22px;
    font-weight: 900;
    color: var(--rk-quote-accent);
    margin-bottom: 5px;
    font-family: monospace;
}

.rk-data-lab {
    font-size: 11px;
    color: #78716c;
    text-transform: uppercase;
    font-weight: 800;
    letter-spacing: 0.5px;
}

@media (max-width: 768px) {
    .rk-expert-container { flex-direction: column; text-align: center; padding: 30px 25px; align-items: center; }
    .rk-expert-header h2 { font-size: 22px; text-align: center; }
    .rk-expert-container::before { width: 100%; height: 6px; }
    .rk-expert-data-panel.active { grid-template-columns: 1fr; }
    .rk-expert-btn { width: 100%; justify-content: center; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-expert-wrapper" id="rk-expert-summary-app">
    <div class="rk-expert-header">
        <svg width="28" height="28" viewBox="0 0 24 24" fill="none" stroke="var(--rk-quote-accent)" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path><line x1="8" y1="2" x2="8" y2="5"></line><line x1="16" y1="2" x2="16" y2="5"></line></svg>
        <h2>Moim zdaniem</h2>
    </div>
    
    <div class="rk-expert-container">
        <div class="rk-expert-photo-wrap">
            <div class="rk-expert-photo-ring"></div>
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/04/PO-Robert-Kucharski.webp" alt="Robert Kucharski" class="rk-expert-photo" loading="lazy">
            <div class="rk-expert-badge-icon">
                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
            </div>
        </div>
        
        <div class="rk-expert-content">
            <span class="rk-expert-label">
                <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="16" x2="12" y2="12"></line><line x1="12" y1="8" x2="12.01" y2="8"></line></svg>
                Złota Reguła Inwestycyjna
            </span>
            <p class="rk-expert-text">
                "Decyzja o drewnie na ogrzewaniu podłogowym to balans między fizyką a estetyką. Jako inżynier z tysiącem projektów na koncie, radzę: wybierz dębową deskę warstwową o grubości <strong>14-15 mm</strong>, zleć montaż na <strong>kleju silanowym</strong> i dopilnuj, aby projektant instalacji uwzględnił opór cieplny <strong>R=0,10 m²K/W</strong>. Tylko takie podejście zagwarantuje, że Twoje rachunki za gaz czy prąd do pompy ciepła nie wzrosną, a podłoga będzie wyglądać idealnie przez dekady. Pamiętaj: montaż drewna na „podłogówkę” to proces technologiczny, a nie tylko układanie klocków – tutaj liczy się każdy 1% wilgotności i każdy 1 mm grubości."
            </p>
            <span class="rk-expert-signature">— Robert Kucharski, CEO & Inżynier Projekt-Ogrzewania.pl</span>
            
            <div class="rk-expert-interactive">
                <button class="rk-expert-btn" id="toggleSummaryBtn">
                    Wyświetl kluczowe parametry
                    <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>
                </button>
                
                <div class="rk-expert-data-panel" id="expertSummaryPanel">
                    <div class="rk-data-stat">
                        <span class="rk-data-val">14-15 mm</span>
                        <span class="rk-data-lab">Optymalna grubość deski</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val" style="color: var(--rk-quote-primary);">0.10</span>
                        <span class="rk-data-lab">Wymagany Opór R [m²K/W]</span>
                    </div>
                    <div class="rk-data-stat">
                        <span class="rk-data-val">Silanowy</span>
                        <span class="rk-data-lab">Rekomendowany Klej</span>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <noscript>
        <div style="padding: 20px; background: #fafaf9; border-radius: 16px; margin-top: 20px; font-family: sans-serif; border: 1px solid #e7e5e4;">
            <p style="font-size: 14px; font-weight: bold; color: #0f172a; margin-top:0;">Kluczowe parametry dla inwestora:</p>
            <ul style="font-size: 14px; color: #475569; margin-bottom:0;">
                <li>Optymalna grubość deski warstwowej: 14-15 mm</li>
                <li>Zalecany opór cieplny (R): 0.10 m2K/W</li>
                <li>Rekomendowana chemia montażowa: elastyczny klej silanowy</li>
            </ul>
        </div>
    </noscript>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków H2/H3/H4 w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('rk-expert-summary-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 20px; border: 2px dashed #ef4444;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada bezpieczeństwa</div>
                    <div style="font-size: 14px; color: #7f1d1d;">Cytat inżynierski jest chroniony prawem autorskim serwisu Projekt-Ogrzewania.pl.</div>
                </div>
            `;
            // Usuwamy resztę styli z kontenera by nie zepsuć wyglądu komunikatu
            container.style.borderLeft = 'none';
            container.style.background = 'transparent';
            container.style.boxShadow = 'none';
            return;
        }
    }

    // 2. Interakcja z panelem danych
    const toggleBtn = document.getElementById('toggleSummaryBtn');
    const dataPanel = document.getElementById('expertSummaryPanel');

    if (toggleBtn && dataPanel) {
        toggleBtn.addEventListener('click', function() {
            this.classList.toggle('active');
            dataPanel.classList.toggle('active');
            
            if(this.classList.contains('active')) {
                this.innerHTML = `Zwiń parametry <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            } else {
                this.innerHTML = `Wyświetl kluczowe parametry <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="6 9 12 15 18 9"></polyline></svg>`;
            }
        });
    }
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#faq",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "Czy mogę położyć deskę litą o grubości 22 mm na ogrzewanie podłogowe?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Nie zaleca się tego, ponieważ opór cieplny tak grubej deski przekracza 0,15 m²K/W, co drastycznie obniża wydajność systemu i powoduje ryzyko dużych szczelin. Bezpieczną alternatywą jest deska warstwowa o grubości do 15 mm."
        }
      },
      {
        "@type": "Question",
        "name": "Jak długo należy aklimatyzować drewno przed montażem?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Drewno powinno przebywać w pomieszczeniu docelowym przez minimum 72 godziny, w paczkach, przy wyłączonym ogrzewaniu podłogowym. Wilgotność powietrza w tym czasie musi wynosić 45-55%, a temperatura ok. 20°C."
        }
      },
      {
        "@type": "Question",
        "name": "Czy ogrzewanie podłogowe niszczy parkiet?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Prawidłowo zaprojektowane i wykonane ogrzewanie (temp. powierzchni do 27°C) nie niszczy drewna, a wręcz stabilizuje jego wilgotność. Problemy pojawiają się jedynie przy gwałtownych zmianach temperatury lub zbyt wysokiej wilgotności jastrychu."
        }
      },
      {
        "@type": "Question",
        "name": "Który klej wybrać pod drewno na podłogówkę?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "Najlepszym wyborem są jednoskładnikowe kleje silanowe (MS Polimer), które są trwale elastyczne i nie zawierają wody ani rozpuszczalników. Koszt takiego kleju to ok. 25-35 PLN/kg, a zużycie wynosi ok. 1-1,2 kg/m²."
        }
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-faq",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "FAQ – Najczęstsze pytania inwestorów o drewno na podłogówce",
    "description": "Baza wiedzy inżynierskiej w pigułce: aklimatyzacja, grubość deski litej, mity o niszczeniu parkietu oraz wybór kleju MS Polimer.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-faq",
    "name": "Specyfikacja Montażowo-Eksploatacyjna Podłogi Drewnianej",
    "description": "Zbiór kluczowych wartości liczbowych niezbędnych do prawidłowej adaptacji drewna i chemii budowlanej do pracy z instalacją grzewczą.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "aklimatyzacja drewna podłogowego",
      "deska lita 22mm opór",
      "klej silanowy do parkietu zużycie",
      "maksymalna temperatura podłogi 27",
      "wilgotność powietrza drewno"
    ],
    "measurementTechnique": "Określenie parametrów brzegowych środowiska (temperatura, wilgotność, czas) dla bezpiecznej integracji drewna z wylewką grzewczą.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Limit grubości deski litej: do 15mm (nie zaleca się 22mm).",
        "Parametry aklimatyzacji: 72h / 20°C / 45-55% wilgotności.",
        "Klej MS Polimer: koszt 25-35 PLN/kg, zużycie 1.0-1.2 kg/m²."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-faq",
    "name": "Interaktywny Panel FAQ",
    "description": "Dynamiczny komponent akordeonowy pozwalający na skanowanie i eksplorację wiedzy inżynierskiej poprzez interakcję z poszczególnymi elementami list.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript and CSS Grid support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
@import url('https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;700;800;900&display=swap');

:root {
    --rk-faq-dark: #0f172a;
    --rk-faq-slate: #334155;
    --rk-faq-blue: #0284c7;
    --rk-faq-blue-light: #f0f9ff;
    --rk-faq-amber: #d97706;
    --rk-faq-amber-light: #fffbeb;
    --rk-faq-bg: #ffffff;
    --rk-faq-border: #e2e8f0;
    --rk-faq-font: 'Plus Jakarta Sans', system-ui, sans-serif;
}

.rk-faq-wrapper {
    max-width: 950px;
    margin: 50px auto;
    font-family: var(--rk-faq-font);
    background: var(--rk-faq-bg);
    border-radius: 24px;
    box-shadow: 0 20px 40px -15px rgba(2, 132, 199, 0.1);
    border: 1px solid var(--rk-faq-border);
    overflow: hidden;
}

/* Nagłówek */
.rk-faq-header {
    background: var(--rk-faq-dark);
    padding: 40px 50px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

.rk-faq-header::before {
    content: '?';
    position: absolute;
    top: -20px;
    left: 20px;
    font-size: 150px;
    font-weight: 900;
    color: rgba(255,255,255,0.03);
    line-height: 1;
    pointer-events: none;
}

.rk-faq-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(56, 189, 248, 0.15);
    color: #38bdf8;
    padding: 6px 16px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 15px;
    border: 1px solid rgba(56, 189, 248, 0.2);
}

.rk-faq-header h2 {
    font-size: 32px;
    font-weight: 900;
    color: #ffffff;
    margin: 0 0 10px 0;
    position: relative;
    z-index: 2;
    letter-spacing: -0.5px;
}

.rk-faq-header p {
    font-size: 16px;
    color: #94a3b8;
    margin: 0;
    position: relative;
    z-index: 2;
}

/* Lista Akordeonu */
.rk-faq-container {
    padding: 30px 40px 50px;
    background: #ffffff;
}

.rk-faq-item {
    margin-bottom: 15px;
    border: 1px solid var(--rk-faq-border);
    border-radius: 16px;
    background: #ffffff;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    overflow: hidden;
}

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

.rk-faq-item.active {
    border-color: var(--rk-faq-blue);
    box-shadow: 0 15px 30px -10px rgba(2, 132, 199, 0.15);
}

/* Pytanie (Przycisk) */
.rk-faq-question {
    width: 100%;
    text-align: left;
    padding: 25px 30px;
    background: transparent;
    border: none;
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 20px;
    position: relative;
}

.rk-faq-icon {
    flex-shrink: 0;
    width: 44px;
    height: 44px;
    background: var(--rk-faq-blue-light);
    color: var(--rk-faq-blue);
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.3s;
}

.rk-faq-item.active .rk-faq-icon {
    background: var(--rk-faq-blue);
    color: #ffffff;
}

.rk-faq-q-text {
    flex-grow: 1;
    font-size: 18px;
    font-weight: 800;
    color: var(--rk-faq-dark);
    margin: 0;
    line-height: 1.4;
    transition: color 0.3s;
}

.rk-faq-item.active .rk-faq-q-text {
    color: var(--rk-faq-blue);
}

.rk-faq-chevron {
    flex-shrink: 0;
    width: 24px;
    height: 24px;
    color: #94a3b8;
    transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-item.active .rk-faq-chevron {
    transform: rotate(180deg);
    color: var(--rk-faq-blue);
}

/* Odpowiedź (Rozwijana zawartość) */
.rk-faq-answer {
    display: grid;
    grid-template-rows: 0fr;
    transition: grid-template-rows 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-faq-item.active .rk-faq-answer {
    grid-template-rows: 1fr;
}

.rk-faq-inner {
    overflow: hidden;
}

.rk-faq-content {
    padding: 0 30px 30px 84px; /* Wyrównanie do tekstu pytania, ominięcie ikony */
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-faq-slate);
}

.rk-faq-content strong {
    color: var(--rk-faq-dark);
    font-weight: 800;
}

/* Elementy wyróżnione w odpowiedziach */
.rk-faq-warning {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #fef2f2;
    color: #dc2626;
    padding: 4px 10px;
    border-radius: 6px;
    font-weight: 800;
    font-size: 13px;
    margin-bottom: 8px;
    border: 1px solid #fecaca;
}

.rk-faq-data-pills {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 15px;
}

.rk-faq-pill {
    background: var(--rk-faq-bg);
    border: 1px solid var(--rk-faq-border);
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 13px;
    font-weight: 700;
    color: var(--rk-faq-dark);
    display: flex;
    align-items: center;
    gap: 6px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.02);
}

.rk-faq-pill svg {
    color: var(--rk-faq-blue);
}

@media (max-width: 768px) {
    .rk-faq-header { padding: 35px 25px; }
    .rk-faq-container { padding: 25px 20px 40px; }
    .rk-faq-question { padding: 20px; gap: 15px; }
    .rk-faq-icon { width: 36px; height: 36px; }
    .rk-faq-q-text { font-size: 16px; }
    .rk-faq-content { padding: 0 20px 25px 20px; } /* Usunięto mocne wcięcie na mobilkach */
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-faq-wrapper" id="expert-faq-app">
    
    <div class="rk-faq-header">
        <div class="rk-faq-badge">Baza Wiedzy</div>
        <h2>Najczęstsze pytania o drewno na podłogówce</h2>
        <p>Rozwiewamy mity i dostarczamy twardych, inżynierskich faktów.</p>
    </div>

    <div class="rk-faq-container">
        
        <!-- Pytanie 1 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <div class="rk-faq-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
                </div>
                <h3 class="rk-faq-q-text">Czy mogę położyć deskę litą o grubości 22 mm na ogrzewanie podłogowe?</h3>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer">
                <div class="rk-faq-inner">
                    <div class="rk-faq-content">
                        <span class="rk-faq-warning"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg> Nie zaleca się</span><br>
                        Absolutnie nie zaleca się takiego rozwiązania. Opór cieplny tak grubej deski litej z reguły <strong>przekracza 0,15 m²K/W</strong>, co drastycznie obniża wydajność całego systemu grzewczego. Pompa ciepła pracuje na skrajnych obrotach, co generuje koszty. Co gorsza, jednostronne oddziaływanie wysokiej temperatury powoduje ryzyko powstawania potężnych szczelin i zjawiska zwanego łódkowaniem.<br><br>
                        <strong>Rekomendacja inżynierska:</strong> Bezpieczną, wysoce stabilną alternatywą jest <strong>deska warstwowa o grubości do 15 mm</strong>.
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 2 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <div class="rk-faq-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
                </div>
                <h3 class="rk-faq-q-text">Jak długo należy aklimatyzować drewno przed montażem?</h3>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer">
                <div class="rk-faq-inner">
                    <div class="rk-faq-content">
                        Drewno jest higroskopijne i musi wyrównać wilgotność z otoczeniem. Należy je pozostawić w pomieszczeniu docelowym przez <strong>minimum 72 godziny</strong>. Co ważne: paczki z drewnem pozostają zamknięte (chyba że producent rygorystycznie zaleca inaczej), a <strong>ogrzewanie podłogowe musi być w tym czasie całkowicie wyłączone</strong>.
                        
                        <div class="rk-faq-data-pills">
                            <div class="rk-faq-pill">
                                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
                                Temp. pow.: ~20°C
                            </div>
                            <div class="rk-faq-pill">
                                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><path d="M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z"/></svg>
                                Wilgotność: 45-55%
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 3 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <div class="rk-faq-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z"/></svg>
                </div>
                <h3 class="rk-faq-q-text">Czy ogrzewanie podłogowe niszczy parkiet?</h3>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer">
                <div class="rk-faq-inner">
                    <div class="rk-faq-content">
                        To powielany mit z lat 90. Prawidłowo zaprojektowane i wyregulowane ogrzewanie, które utrzymuje temperaturę powierzchni <strong>do 27°C (zgodnie z normą PN-EN 1264)</strong>, absolutnie nie niszczy drewna, a wręcz stabilizuje jego zimową wilgotność. 
                        <br><br>
                        Poważne problemy, pęknięcia i zrywanie kleju pojawiają się tylko przy gwałtownych zmianach temperatury (szok termiczny) lub w sytuacji, gdy drewno układane jest na <a href="https://projekt-ogrzewania.pl/wylewka-betonowa-na-ogrzewanie-podlogowe/">niedosuszonym jastrychu</a> (powyżej 1,8% CM).
                    </div>
                </div>
            </div>
        </div>

        <!-- Pytanie 4 -->
        <div class="rk-faq-item">
            <button class="rk-faq-question" aria-expanded="false">
                <div class="rk-faq-icon">
                    <svg width="22" height="22" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2v20M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
                </div>
                <h3 class="rk-faq-q-text">Który klej wybrać pod drewno na podłogówkę?</h3>
                <svg class="rk-faq-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"></polyline></svg>
            </button>
            <div class="rk-faq-answer">
                <div class="rk-faq-inner">
                    <div class="rk-faq-content">
                        Nie wolno tu oszczędzać. Najlepszym, inżynieryjnym wyborem są <strong>jednoskładnikowe kleje silanowe (MS Polimer)</strong>. Są one trwale elastyczne (kompensują zjawiska rozszerzalności cieplnej) i całkowicie pozbawione wody oraz rozpuszczalników, które mogłyby wniknąć w drewno podczas wiązania.
                        
                        <div class="rk-faq-data-pills">
                            <div class="rk-faq-pill">
                                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><line x1="12" y1="1" x2="12" y2="23"/><path d="M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6"/></svg>
                                Koszt rynkowy: ok. 25-35 PLN/kg
                            </div>
                            <div class="rk-faq-pill">
                                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5"><rect x="3" y="3" width="18" height="18" rx="2"/><path d="M3 9h18"/><path d="M9 21V9"/></svg>
                                Normatywne zużycie: 1.0 - 1.2 kg/m²
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE (DOMAIN LOCK)
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków semantycznych H-tag w alercie)
    const domain = window.location.hostname;
    const allowedDomains = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowedDomains.includes(domain)) {
        const container = document.getElementById('expert-faq-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px 20px; text-align: center; background: #fef2f2; color: #dc2626; border-radius: 20px; border: 2px dashed #ef4444;">
                    <div style="font-size: 32px; margin-bottom: 15px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; text-transform: uppercase; margin-bottom: 10px;">Blokada bezpieczeństwa</div>
                    <div style="font-size: 14px; color: #7f1d1d;">Moduł FAQ oraz zaszyte w nim dane Schema.org (JSON-LD) są własnością Projekt-Ogrzewania.pl. Użycie zabronione.</div>
                </div>
            `;
            // Usuwamy resztę styli z kontenera by nie zepsuć wyglądu komunikatu
            container.style.background = 'transparent';
            container.style.boxShadow = 'none';
            container.style.border = 'none';
            return;
        }
    }

    // 2. Interakcja Akordeonu
    const faqItems = document.querySelectorAll('#expert-faq-app .rk-faq-item');

    faqItems.forEach(item => {
        const btn = item.querySelector('.rk-faq-question');
        
        btn.addEventListener('click', () => {
            const isActive = item.classList.contains('active');
            
            // Opcjonalnie: Zamykanie pozostałych otwartych
            faqItems.forEach(otherItem => {
                otherItem.classList.remove('active');
                otherItem.querySelector('.rk-faq-question').setAttribute('aria-expanded', 'false');
            });
            
            // Otwieranie/Zamykanie klikniętego
            if (!isActive) {
                item.classList.add('active');
                btn.setAttribute('aria-expanded', 'true');
            }
        });
    });
    
    // Otwarcie pierwszego pytania na start
    if (faqItems.length > 0) {
        faqItems[0].classList.add('active');
        faqItems[0].querySelector('.rk-faq-question').setAttribute('aria-expanded', 'true');
    }
});
</script>



<!-- ==========================================
     INVISIBLE DATA (JSON-LD)
=========================================== -->
<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#article-podsumowanie",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Podsumowanie dla Inwestora – Drewno na Ogrzewaniu Podłogowym",
    "description": "Zestawienie kluczowych parametrów: grubość 14-15 mm, klej silanowy i opór cieplny R=0,10 m2K/W jako gwarancja wydajnej podłogówki z dębową deską warstwową.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2025-10-14",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-podsumowanie",
    "name": "Parametry Fizyczne i Termiczne: Deska Warstwowa vs Lita",
    "description": "Porównanie oporu cieplnego, ryzyka odkształceń oraz doboru chemii parkieciarskiej dla systemów płaszczyznowych.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "opór cieplny R=0,10",
      "dębowa deska warstwowa",
      "klej silanowy do drewna",
      "grubość deski 14-15 mm",
      "wilgotność jastrychu pod drewno"
    ],
    "measurementTechnique": "Analiza higroskopijna oraz obliczenia oporu cieplnego R [m2K/W] wg normy PN-EN 1264.",
    "mainEntity": {
      "@type": "ItemList",
      "itemListElement": [
        "Standard Inżynierski: Deska warstwowa 15mm, klej elastyczny silanowy, opór poniżej 0,10 m2K/W.",
        "Ryzyko Amatorskie: Deska lita 22mm, klej rozpuszczalnikowy, wysoki opór cieplny i łódkowanie."
      ]
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#webapp-podsumowanie",
    "name": "Symulator Pracy Drewna na Ogrzewaniu Podłogowym",
    "description": "Narzędzie interaktywne ilustrujące zachowanie różnych typów drewna i chemii montażowej pod wpływem cyklów termicznych z instalacji OZC.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5 and SVG support",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    }
  }
]
</script>

<!-- ==========================================
     STYLIZACJA CSS KONTENERA
=========================================== -->
<style>
:root {
    --rk-wood-dark: #291002;
    --rk-wood-primary: #b45309;
    --rk-wood-light: #fffbeb;
    --rk-wood-border: #fcd34d;
    --rk-sum-green: #059669;
    --rk-sum-green-light: #d1fae5;
    --rk-sum-red: #dc2626;
    --rk-sum-red-light: #fee2e2;
    --rk-sum-gray: #475569;
    --rk-sum-bg: #ffffff;
}

.rk-wood-container {
    max-width: 950px;
    margin: 50px auto;
    font-family: 'Inter', -apple-system, sans-serif;
    background: var(--rk-sum-bg);
    border-radius: 20px;
    box-shadow: 0 20px 40px -10px rgba(180, 83, 9, 0.15);
    border: 1px solid var(--rk-wood-border);
    overflow: hidden;
}

/* Sekcja Nagłówkowa */
.rk-wood-header {
    padding: 50px 40px 40px;
    background: linear-gradient(145deg, var(--rk-wood-dark) 0%, #451a03 100%);
    color: #ffffff;
    text-align: center;
    position: relative;
    border-bottom: 4px solid var(--rk-wood-primary);
}

.rk-wood-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: rgba(180, 83, 9, 0.4);
    color: #fde68a;
    padding: 6px 18px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1px;
    margin-bottom: 25px;
    border: 1px solid rgba(253, 230, 138, 0.3);
}

.rk-wood-quote-box {
    position: relative;
    max-width: 750px;
    margin: 0 auto;
}

.rk-wood-quote-box h2 {
    color: #ffffff;
    font-size: 28px;
    font-weight: 900;
    margin-bottom: 20px;
    letter-spacing: -0.5px;
}

.rk-wood-quote-text {
    font-size: 20px;
    font-weight: 600;
    line-height: 1.6;
    color: #fef3c7;
    margin: 0 0 20px 0;
    font-style: italic;
}

.rk-wood-author {
    font-size: 14px;
    color: #d6d3d1;
    text-transform: uppercase;
    letter-spacing: 2px;
    font-weight: 700;
}

.rk-wood-author span { color: var(--rk-wood-primary); }

/* Interaktywny Symulator Decyzji */
.rk-wood-interactive {
    padding: 45px 50px;
    background: #fafaf9;
}

.rk-wood-interactive h3 {
    text-align: center;
    color: var(--rk-wood-dark);
    font-size: 22px;
    font-weight: 800;
    margin-top: 0;
    margin-bottom: 30px;
}

.rk-decision-wrapper {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
    margin-bottom: 35px;
}

.rk-decision-btn {
    padding: 20px;
    border-radius: 16px;
    border: 2px solid #e7e5e4;
    background: #ffffff;
    cursor: pointer;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    display: flex;
    align-items: center;
    gap: 15px;
    text-align: left;
    box-shadow: 0 4px 6px -1px rgba(0,0,0,0.05);
}

.rk-decision-btn:hover { border-color: var(--rk-wood-primary); transform: translateY(-2px); }

.rk-decision-btn.active[data-choice="pro"] {
    background: var(--rk-sum-green-light);
    border-color: var(--rk-sum-green);
    box-shadow: 0 10px 20px -5px rgba(5, 150, 105, 0.2);
}

.rk-decision-btn.active[data-choice="amateur"] {
    background: var(--rk-sum-red-light);
    border-color: var(--rk-sum-red);
    box-shadow: 0 10px 20px -5px rgba(220, 38, 38, 0.2);
}

.rk-decision-icon {
    width: 54px;
    height: 54px;
    flex-shrink: 0;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f5f5f4;
    color: var(--rk-sum-gray);
    transition: all 0.3s;
}

.rk-decision-btn.active[data-choice="pro"] .rk-decision-icon {
    background: var(--rk-sum-green); color: #ffffff;
}

.rk-decision-btn.active[data-choice="amateur"] .rk-decision-icon {
    background: var(--rk-sum-red); color: #ffffff;
}

.rk-decision-text h4 {
    font-size: 16px;
    font-weight: 800;
    color: var(--rk-wood-dark);
    margin: 0 0 5px 0;
}

.rk-decision-text p {
    font-size: 13px;
    color: var(--rk-sum-gray);
    margin: 0;
    line-height: 1.4;
}

/* Wynik symulacji (Dynamiczny) */
.rk-sim-result {
    display: flex;
    gap: 35px;
    align-items: center;
    padding: 35px;
    background: #ffffff;
    border-radius: 16px;
    border: 1px solid #e7e5e4;
    position: relative;
    overflow: hidden;
}

.rk-anim-container {
    flex-shrink: 0;
    width: 140px;
    height: 140px;
}

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

/* Animacje SVG dla PRO (Drewno Warstwowe) */
.state-pro .board-layer-1 { fill: #d97706; transition: fill 0.5s; }
.state-pro .board-layer-2 { fill: #b45309; transition: fill 0.5s; }
.state-pro .board-layer-3 { fill: #92400e; transition: fill 0.5s; }
.state-pro .heat-wave { stroke: #10b981; animation: heatRise 2s infinite linear; opacity: 0.8; }
.state-pro .crack { opacity: 0; transition: opacity 0.3s; }

/* Animacje SVG dla AMATOR (Deska Lita) */
.state-amateur .board-layer-1, .state-amateur .board-layer-2, .state-amateur .board-layer-3 { 
    fill: #78350f; transition: fill 0.5s; 
    animation: woodWarp 3s forwards ease-in-out; 
    transform-origin: center;
}
.state-amateur .heat-wave { stroke: #ef4444; animation: heatBlocked 1s infinite alternate; }
.state-amateur .crack { stroke: #451a03; stroke-width: 3; opacity: 1; stroke-dasharray: 50; animation: crackDraw 1s forwards ease-out; }

@keyframes heatRise {
    0% { transform: translateY(10px); opacity: 0; }
    50% { opacity: 1; }
    100% { transform: translateY(-20px); opacity: 0; }
}

@keyframes heatBlocked {
    0% { transform: translateY(15px); opacity: 0.8; stroke-width: 4px; }
    100% { transform: translateY(5px); opacity: 1; stroke-width: 6px; }
}

@keyframes woodWarp {
    0% { transform: scaleY(1) rotate(0deg); }
    100% { transform: scaleY(1.2) translateY(-10px) rotate(-2deg); }
}

@keyframes crackDraw {
    0% { stroke-dashoffset: 50; }
    100% { stroke-dashoffset: 0; }
}

.rk-result-content h4 {
    margin: 0 0 12px 0;
    font-size: 22px;
    font-weight: 900;
}

.rk-result-content p {
    margin: 0 0 15px 0;
    font-size: 15px;
    line-height: 1.7;
    color: var(--rk-sum-gray);
}

.rk-result-content strong { color: var(--rk-wood-dark); font-weight: 800; }

.rk-result-content a {
    color: var(--rk-wood-primary);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 2px solid transparent;
    transition: border-color 0.3s;
}
.rk-result-content a:hover { border-bottom-color: var(--rk-wood-primary); }

/* Mocne CTA */
.rk-wood-cta {
    padding: 40px 50px 50px;
    background: #ffffff;
    text-align: center;
    border-top: 1px solid #f5f5f4;
}

.rk-wood-cta h3 {
    font-size: 24px;
    font-weight: 900;
    color: var(--rk-wood-dark);
    margin: 0 0 15px 0;
}

.rk-wood-cta p {
    font-size: 16px;
    color: var(--rk-sum-gray);
    margin: 0 auto 30px auto;
    max-width: 650px;
    line-height: 1.6;
}

.rk-btn-wood {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--rk-wood-primary);
    color: #ffffff;
    font-size: 18px;
    font-weight: 800;
    padding: 20px 45px;
    border-radius: 14px;
    text-decoration: none;
    box-shadow: 0 10px 25px -5px rgba(180, 83, 9, 0.4);
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.rk-btn-wood:hover {
    transform: translateY(-4px);
    background: #92400e;
    box-shadow: 0 15px 35px -5px rgba(180, 83, 9, 0.5);
}

.rk-btn-wood svg { transition: transform 0.3s; }
.rk-btn-wood:hover svg { transform: translateX(6px); }

/* Responsywność */
@media (max-width: 768px) {
    .rk-wood-header, .rk-wood-interactive, .rk-wood-cta { padding: 35px 25px; }
    .rk-decision-wrapper { grid-template-columns: 1fr; }
    .rk-sim-result { flex-direction: column; text-align: center; padding: 25px; gap: 20px; }
    .rk-wood-quote-text { font-size: 17px; }
    .rk-btn-wood { width: 100%; padding: 16px 20px; font-size: 15px; }
}
</style>

<!-- ==========================================
     HTML KONTENERA
=========================================== -->
<div class="rk-wood-container" id="drewno-sum-app">
    <!-- Nagłówek -->
    <div class="rk-wood-header">
        <div class="rk-wood-badge">
            <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"></path></svg>
            Podsumowanie Inżynierskie
        </div>
        <div class="rk-wood-quote-box">
            <h2>Balans między fizyką a estetyką</h2>
            <p class="rk-wood-quote-text">
                "Jako inżynier z tysiącem projektów na koncie, radzę: wybierz dębową deskę warstwową o grubości 14-15 mm i dopilnuj, aby projektant uwzględnił opór cieplny R=0,10 m2K/W. Tutaj liczy się każdy 1% wilgotności i każdy 1 mm grubości."
            </p>
            <div class="rk-wood-author">
                <span>Robert Kucharski</span> | CEO Ogrzewanie Podłogowe
            </div>
        </div>
    </div>

    <!-- Symulator Standardu -->
    <div class="rk-wood-interactive">
        <h3>Symulator Zgodności OZC i Posadzki</h3>
        <div class="rk-decision-wrapper" id="woodSimDecisions">
            <button class="rk-decision-btn active" data-choice="pro">
                <div class="rk-decision-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"></polyline></svg>
                </div>
                <div class="rk-decision-text">
                    <h4>Standard Projektowy</h4>
                    <p>Deska warstwowa 15mm + klej silanowy</p>
                </div>
            </button>
            <button class="rk-decision-btn" data-choice="amateur">
                <div class="rk-decision-icon">
                    <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg>
                </div>
                <div class="rk-decision-text">
                    <h4>Wybór Ryzykowny</h4>
                    <p>Deska lita 22mm + tani klej</p>
                </div>
            </button>
        </div>

        <div class="rk-sim-result state-pro" id="woodSimResultBox">
            <div class="rk-anim-container">
                <svg class="rk-anim-svg" viewBox="0 0 100 100">
                    <!-- Rurka podłogówki -->
                    <circle cx="50" cy="85" r="8" fill="none" stroke="#ef4444" stroke-width="4" />
                    <!-- Fale ciepła -->
                    <path class="heat-wave wave-1" d="M35,70 Q25,50 35,30 T35,-10" fill="none" stroke-width="3" stroke-linecap="round"/>
                    <path class="heat-wave wave-2" d="M50,70 Q40,50 50,30 T50,-10" fill="none" stroke-width="3" stroke-linecap="round" style="animation-delay: 0.5s;"/>
                    <path class="heat-wave wave-3" d="M65,70 Q55,50 65,30 T65,-10" fill="none" stroke-width="3" stroke-linecap="round" style="animation-delay: 1s;"/>
                    
                    <!-- Struktura deski warstwowej -->
                    <g class="board-structure">
                        <rect class="board-layer-3" x="10" y="45" width="80" height="5" rx="1" />
                        <rect class="board-layer-2" x="10" y="38" width="80" height="6" rx="1" />
                        <rect class="board-layer-1" x="10" y="30" width="80" height="7" rx="1" />
                        <!-- Pęknięcie (domyślnie ukryte) -->
                        <path class="crack" d="M45,30 L50,35 L48,40 L52,45" fill="none" />
                    </g>
                </svg>
            </div>
            <div class="rk-result-content" id="woodSimResultContent">
                <h4 style="color: var(--rk-sum-green);">Idealny transfer ciepła</h4>
                <p>Zastosowanie <strong>dębowej deski warstwowej 14-15 mm</strong> i kleju silanowego gwarantuje, że opór cieplny nie przekroczy bezpiecznych <strong>R=0,10 m2K/W</strong>.</p>
                <p>Ciepło płynnie przenika przez materiał. To gwarantuje stabilne rachunki i <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">maksymalną wydajność instalacji podłogowej</a> przez dekady użytkowania.</p>
            </div>
        </div>
    </div>

    <!-- Mocne CTA -->
    <div class="rk-wood-cta">
        <h3>Nie ryzykuj błędów przy montażu na drewnie</h3>
        <p>Montaż drewna na systemach płaszczyznowych wymaga nie tylko dobrej deski, ale precyzyjnie dobranych parametrów hydraulicznych. Zainwestuj w profesjonalny projekt i zyskaj 100% pewności.</p>
        <a href="https://projekt-ogrzewania.pl/blog/" class="rk-btn-wood">
            ZOBACZ NASZ BLOG
            <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14M12 5l7 7-7 7"/></svg>
        </a>
    </div>
</div>

<!-- ==========================================
     LOGIKA JS I ZABEZPIECZENIE DOMENOWE
=========================================== -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // 1. Zabezpieczenie Domenowe (Bez nagłówków semantycznych)
    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('drewno-sum-app');
        if (container) {
            container.innerHTML = `
                <div style="padding: 45px 30px; text-align: center; background: #291002; color: #fca5a5; border: 2px solid #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 20px;">🔒</div>
                    <div style="font-size: 20px; font-weight: 900; margin-bottom: 12px; text-transform: uppercase;">Ochrona Praw Autorskich</div>
                    <div style="font-size: 15px; color: #fcd34d; max-width: 550px; margin: 0 auto; line-height: 1.6;">
                        Kontener interaktywny i warstwa danych JSON-LD są własnością Projekt-Ogrzewania.pl. Użycie tego kodu na obecnej domenie jest nieautoryzowane.
                    </div>
                </div>
            `;
            return;
        }
    }

    // 2. Logika Symulatora Decyzji Drewna
    const btns = document.querySelectorAll('#woodSimDecisions .rk-decision-btn');
    const resultBox = document.getElementById('woodSimResultBox');
    const resultContent = document.getElementById('woodSimResultContent');

    btns.forEach(btn => {
        btn.addEventListener('click', function() {
            // Zmiana aktywnych przycisków
            btns.forEach(b => b.classList.remove('active'));
            this.classList.add('active');

            const choice = this.getAttribute('data-choice');

            // Aktualizacja wizualizacji i treści
            if (choice === 'pro') {
                resultBox.className = 'rk-sim-result state-pro';
                resultContent.innerHTML = `
                    <h4 style="color: var(--rk-sum-green);">Idealny transfer ciepła</h4>
                    <p>Zastosowanie <strong>dębowej deski warstwowej 14-15 mm</strong> i kleju silanowego gwarantuje, że opór cieplny nie przekroczy bezpiecznych <strong>R=0,10 m2K/W</strong>.</p>
                    <p>Ciepło płynnie przenika przez materiał. To gwarantuje stabilne rachunki i <a href="https://projekt-ogrzewania.pl/jak-rodzaj-okladziny-podlogowej-wplywa-na-wydajnosc-ogrzewania-podlogowego/">maksymalną wydajność instalacji podłogowej</a> przez dekady użytkowania.</p>
                `;
            } else {
                resultBox.className = 'rk-sim-result state-amateur';
                resultContent.innerHTML = `
                    <h4 style="color: var(--rk-sum-red);">Blokada cieplna i zniszczenia</h4>
                    <p>Gruba <strong>deska lita 22 mm</strong> działa jak izolator. Opór cieplny rośnie, a pompa ciepła zmuszona jest do pracy na skrajnych parametrach.</p>
                    <p>Skutkiem ubocznym użycia nieelastycznego kleju i wysokiej temperatury jest <a href="https://projekt-ogrzewania.pl/najczestsze-bledy-przy-montazu-ogrzewania-podlogowego-i-jak-ich-uniknac/" style="color: var(--rk-sum-red);">zjawisko łódkowania i pękania struktury drewna</a> już w pierwszym sezonie grzewczym.</p>
                `;
            }
        });
    });
});
</script>



<script type="application/ld+json">
[
  {
    "@context": "https://schema.org",
    "@type": "Article",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#infografika-article",
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/"
    },
    "headline": "Infografika: Idealne drewno na ogrzewanie podłogowe (PDF)",
    "description": "Pobierz inżynierskie zestawienie stabilności drewna i parametrów montażowych dla ogrzewania podłogowego. Kompletny poradnik w formacie PDF i WEBP.",
    "image": "https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wybor-idealnego-drewna-do-ogrzewania-podlogowego-–-kompletna-tabela-i-poradnik.webp",
    "author": {
      "@type": "Person",
      "name": "Robert Kucharski",
      "url": "https://projekt-ogrzewania.pl/",
      "sameAs": [
        "https://www.facebook.com/robert.kucharski.budowa.bez.sciemy",
        "https://www.linkedin.com/in/robert-kucharski-38069b48/"
      ]
    },
    "publisher": {
      "@type": "Organization",
      "name": "Projekt-Ogrzewania.pl",
      "logo": {
        "@type": "ImageObject",
        "url": "https://projekt-ogrzewania.pl/wp-content/uploads/2024/09/cropped-Projekt-ogrzewania-logo-1.jpg"
      }
    },
    "datePublished": "2026-05-13",
    "dateModified": "2026-05-13"
  },
  {
    "@context": "https://schema.org",
    "@type": "Dataset",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#dataset-infografika",
    "name": "Tabela inżynierska: Klasa stabilności drewna vs Przewodzenie ciepła",
    "description": "Wizualne zestawienie parametrów fizycznych dla gatunków takich jak dąb, merbau, teak i buk, niezbędne do poprawnego projektowania podłogówki.",
    "license": "https://projekt-ogrzewania.pl/",
    "creator": {
      "@type": "Person",
      "name": "Robert Kucharski"
    },
    "keywords": [
      "infografika drewno podłogówka",
      "tabela drewna ogrzewanie podłogowe PDF",
      "stabilność wymiarowa dębu ogrzewanie",
      "jakie drewno na podłogówkę ściągawka",
      "parametry drewna na ogrzewanie ściągawka"
    ],
    "measurementTechnique": "Analiza porównawcza skurczu higroskopijnego (ISO 16067) i przewodności cieplnej (lambda) okładzin naturalnych w postaci graficznej tabeli i wykresów.",
    "mainEntity": {
      "@type": "Thing",
      "name": "Zestawienie graficzne parametrów montażowych drewna"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    "@id": "https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/#download-app",
    "name": "Centrum Pobierania Wiedzy: Infografika Drewno",
    "description": "Interaktywny moduł umożliwiający wizualizację i pobranie dokumentacji graficznej dotyczącej właściwości drewna w systemach grzewczych.",
    "applicationCategory": "EducationalApplication",
    "operatingSystem": "All",
    "browserRequirements": "Requires JavaScript, HTML5"
  }
]
</script>

<style>
:root {
    --dl-wood-primary: #1e293b;
    --dl-wood-accent: #d97706; /* Bursztyn/Drewno */
    --dl-wood-accent-dark: #b45309;
    --dl-wood-bg: #fffbeb;
    --dl-wood-border: #e2e8f0;
    --dl-wood-text: #334155;
    --dl-wood-white: #ffffff;
}

.dl-wood-container {
    max-width: 950px;
    margin: 60px auto;
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
    background: var(--dl-wood-white);
    border-radius: 24px;
    border: 1px solid var(--dl-wood-border);
    box-shadow: 0 20px 40px -10px rgba(217, 119, 6, 0.1);
    overflow: hidden;
}

/* NAGŁÓWEK SEKCI */
.dl-wood-header {
    background: linear-gradient(135deg, var(--dl-wood-primary) 0%, #0f172a 100%);
    padding: 40px 50px;
    color: var(--dl-wood-white);
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: relative;
    overflow: hidden;
}

/* Dekoracyjne tło nagłówka */
.dl-wood-header::after {
    content: '';
    position: absolute;
    top: -50px; right: -50px;
    width: 250px; height: 250px;
    background: radial-gradient(circle, rgba(217, 119, 6, 0.2) 0%, transparent 70%);
    border-radius: 50%;
}

.dl-wood-header-content { position: relative; z-index: 2; max-width: 65%; }

.dl-wood-badge {
    display: inline-block;
    background: rgba(217, 119, 6, 0.2);
    border: 1px solid rgba(217, 119, 6, 0.4);
    color: #fcd34d;
    padding: 6px 14px;
    border-radius: 50px;
    font-size: 11px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 1.5px;
    margin-bottom: 15px;
}

.dl-wood-header h2 {
    font-size: 28px;
    font-weight: 900;
    margin: 0 0 12px 0;
    letter-spacing: -0.5px;
}

.dl-wood-header p {
    font-size: 15px;
    color: #cbd5e1;
    margin: 0;
    line-height: 1.6;
}

/* WIZUALIZACJA PDF / IKONA */
.dl-wood-header-visual {
    position: relative;
    z-index: 2;
}

.dl-wood-pdf-icon-svg {
    width: 85px;
    height: auto;
    filter: drop-shadow(0 10px 15px rgba(0,0,0,0.4));
    animation: floatIconWood 3.5s infinite ease-in-out alternate;
}

@keyframes floatIconWood {
    from { transform: translateY(0) rotate(-2deg); }
    to { transform: translateY(-12px) rotate(2deg); }
}

/* GŁÓWNY WORKSPACE */
.dl-wood-workspace {
    display: flex;
    padding: 40px 50px;
    gap: 40px;
    background: var(--dl-wood-white);
}

.dl-wood-preview-box {
    flex: 1;
    background: #f8fafc;
    border: 1px solid var(--dl-wood-border);
    border-radius: 16px;
    padding: 15px;
    position: relative;
    cursor: zoom-in;
    transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}

.dl-wood-preview-box::before {
    content: '';
    position: absolute;
    top: 50%; left: 50%;
    width: 80%; height: 80%;
    background: var(--dl-wood-accent);
    filter: blur(40px);
    opacity: 0.15;
    transform: translate(-50%, -50%);
    z-index: 0;
    transition: opacity 0.4s;
}

.dl-wood-preview-box:hover {
    transform: scale(1.03) translateY(-5px);
    box-shadow: 0 15px 30px -10px rgba(217, 119, 6, 0.2);
    border-color: var(--dl-wood-accent);
}

.dl-wood-preview-box:hover::before { opacity: 0.3; }

.dl-wood-preview-img {
    width: 100%;
    height: auto;
    border-radius: 8px;
    display: block;
    position: relative;
    z-index: 1;
    box-shadow: 0 4px 10px rgba(0,0,0,0.05);
}

.dl-wood-zoom-hint {
    position: absolute;
    bottom: 25px;
    right: 25px;
    background: rgba(15, 23, 42, 0.85);
    backdrop-filter: blur(4px);
    color: white;
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    z-index: 2;
    display: flex;
    align-items: center;
    gap: 6px;
    pointer-events: none;
    border: 1px solid rgba(255,255,255,0.1);
}

.dl-wood-info-side {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
}

.dl-wood-feature-list {
    list-style: none;
    padding: 0;
    margin: 0 0 35px 0;
}

.dl-wood-feature-item {
    display: flex;
    align-items: flex-start;
    gap: 15px;
    margin-bottom: 20px;
    font-size: 15px;
    font-weight: 600;
    color: var(--dl-wood-text);
    line-height: 1.5;
}

.dl-wood-feature-item strong {
    color: var(--dl-wood-primary);
    font-weight: 800;
}

.dl-wood-check-svg {
    width: 22px;
    height: 22px;
    color: var(--dl-wood-accent);
    flex-shrink: 0;
    background: var(--dl-wood-bg);
    border-radius: 6px;
    padding: 2px;
}

/* PRZYCISK POBIERANIA */
.dl-wood-main-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    background: var(--dl-wood-accent);
    color: var(--dl-wood-white);
    text-decoration: none !important;
    padding: 20px 35px;
    border-radius: 14px;
    font-weight: 800;
    font-size: 16px;
    transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
    box-shadow: 0 10px 25px -5px rgba(217, 119, 6, 0.4);
    border: 2px solid transparent;
}

.dl-wood-main-btn:hover {
    background: var(--dl-wood-accent-dark);
    transform: translateY(-4px);
    box-shadow: 0 15px 35px -5px rgba(217, 119, 6, 0.5);
    border-color: #fcd34d;
}

.dl-wood-main-btn svg {
    transition: transform 0.3s;
}

.dl-wood-main-btn:hover svg {
    transform: translateY(3px);
}

/* STOPKA MODUŁU */
.dl-wood-footer {
    padding: 20px 50px;
    background: #f8fafc;
    border-top: 1px solid var(--dl-wood-border);
    font-size: 13px;
    color: #64748b;
    text-align: center;
}

.dl-wood-footer a {
    color: var(--dl-wood-accent-dark);
    font-weight: 700;
    text-decoration: none;
    border-bottom: 1px dashed var(--dl-wood-accent-dark);
}

@media (max-width: 800px) {
    .dl-wood-header { flex-direction: column; text-align: center; padding: 35px 25px; }
    .dl-wood-header-content { max-width: 100%; margin-bottom: 30px; }
    .dl-wood-workspace { flex-direction: column; padding: 35px 25px; }
    .dl-wood-preview-box { margin-bottom: 20px; }
    .dl-wood-main-btn { width: 100%; padding: 18px 20px; font-size: 15px; }
}
</style>

<div class="dl-wood-container" id="app-wood-dl">
    
    <div class="dl-wood-header">
        <div class="dl-wood-header-content">
            <div class="dl-wood-badge">Materiały Inżynierskie</div>
            <h2>Pobierz Kompletne Zestawienie (PDF)</h2>
            <p>Miej najważniejsze parametry zawsze pod ręką na budowie. Przejrzysta grafika z tabelą gatunków, krytycznymi wymiarami i ostrzeżeniami przed błędami montażowymi.</p>
        </div>
        <div class="dl-wood-header-visual">
            <svg class="dl-wood-pdf-icon-svg" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path d="M14 2H6C4.89543 2 4 2.89543 4 4V20C4 21.1046 4.89543 22 6 22H18C19.1046 22 20 21.1046 20 20V8L14 2Z" fill="#ea580c" stroke="#ffffff" stroke-width="1.5" stroke-linejoin="round"/>
                <path d="M14 2V8H20" fill="#c2410c" stroke="#ffffff" stroke-width="1.5" stroke-linejoin="round"/>
                <path d="M8 14H16M8 18H13" stroke="#ffffff" stroke-width="2" stroke-linecap="round"/>
                <text x="7" y="11" fill="white" font-size="5" font-weight="900" font-family="sans-serif">PDF</text>
            </svg>
        </div>
    </div>

    <div class="dl-wood-workspace">
        
        <div class="dl-wood-preview-box" onclick="window.open('https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wybor-idealnego-drewna-do-ogrzewania-podlogowego-–-kompletna-tabela-i-poradnik.webp', '_blank')">
            <img decoding="async" src="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wybor-idealnego-drewna-do-ogrzewania-podlogowego-–-kompletna-tabela-i-poradnik.webp" alt="Infografika - Wybór idealnego drewna do ogrzewania podłogowego z tabelą gatunków" class="dl-wood-preview-img" loading="lazy">
            <div class="dl-wood-zoom-hint">
                <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line><line x1="11" y1="8" x2="11" y2="14"></line><line x1="8" y1="11" x2="14" y2="11"></line></svg>
                Powiększ grafikę
            </div>
        </div>

        <div class="dl-wood-info-side">
            <ul class="dl-wood-feature-list">
                <li class="dl-wood-feature-item">
                    <svg class="dl-wood-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Tabela 11 gatunków</strong> – zestawienie klas stabilności dla dębu, merbau, buku i drewna egzotycznego.</span>
                </li>
                <li class="dl-wood-feature-item">
                    <svg class="dl-wood-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Wykres wydajności</strong> – wizualne zestawienie pracy drewna w stosunku do przewodzenia ciepła.</span>
                </li>
                <li class="dl-wood-feature-item">
                    <svg class="dl-wood-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Parametry krytyczne</strong> – maksymalne temperatury i wymagana wilgotność zebrane w jednym miejscu.</span>
                </li>
                <li class="dl-wood-feature-item">
                    <svg class="dl-wood-check-svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>
                    <span><strong>Format optymalny</strong> – plik wysokiej rozdzielczości, czytelny zarówno na telefonie instalatora, jak i w druku.</span>
                </li>
            </ul>

            <a href="https://projekt-ogrzewania.pl/wp-content/uploads/2026/05/Infografika-Wybor-idealnego-drewna-do-ogrzewania-podlogowego-–-kompletna-tabela-i-poradnik.pdf" class="dl-wood-main-btn" target="_blank">
                <svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"></path><polyline points="7 10 12 15 17 10"></polyline><line x1="12" y1="15" x2="12" y2="3"></line></svg>
                POBIERZ INFOGRAFIKĘ (PDF)
            </a>
            
            <p style="margin-top: 25px; font-size: 13px; color: #64748b; line-height: 1.5; padding: 15px; background: #f8fafc; border-radius: 12px; border: 1px dashed #cbd5e1;">
                Szukasz pewności, że Twoja instalacja zadziała z parkietem? Zobacz <a href="https://projekt-ogrzewania.pl/kompleksowa-wycena-ogrzewania-podlogowego-wodnego-na-co-przygotowac-budzet/">kompleksową wycenę ogrzewania podłogowego</a> uwzględniającą zwiększone opory hydrauliczne.
            </p>
        </div>

    </div>

    <div class="dl-wood-footer">
        © 2026 Projekt-Ogrzewania.pl | Autor: <strong>Robert Kucharski</strong>. Udostępnianie materiału w formie niezmienionej dozwolone.
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // --- OCHRONA DOMENOWA BEZ ZNACZNIKÓW H ---
    const domain = window.location.hostname;
    const allowed = ['projekt-ogrzewania.pl', 'www.projekt-ogrzewania.pl', 'localhost', '127.0.0.1', ''];
    
    if (!allowed.includes(domain)) {
        const container = document.getElementById('app-wood-dl');
        if (container) {
            container.innerHTML = `
                <div style="padding: 40px; text-align: center; background: #fef2f2; border: 2px dashed #ef4444; border-radius: 20px; font-family: sans-serif;">
                    <div style="font-size: 40px; margin-bottom: 10px;">🔒</div>
                    <div style="font-size: 18px; font-weight: 800; color: #991b1b; text-transform: uppercase;">Zasoby Chronione</div>
                    <p style="color: #b91c1c; font-size: 14px; line-height: 1.6; max-width: 500px; margin: 10px auto 0;">Ta infografika, narzędzie pobierania oraz wbudowane dane JSON-LD są własnością serwisu Projekt-Ogrzewania.pl. Osadzanie na zewnętrznych domenach bez zgody jest zabronione.</p>
                </div>
            `;
            container.style.boxShadow = 'none';
        }
    }
});
</script>
<p>Artykuł <a href="https://projekt-ogrzewania.pl/wybor-idealnego-drewna-do-ogrzewania-podlogowego-kompletna-tabela-i-poradnik/">Wybór idealnego drewna do ogrzewania podłogowego – kompletna tabela i poradnik.</a> pochodzi z serwisu <a href="https://projekt-ogrzewania.pl">Projekt Ogrzewania</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
