<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title><![CDATA[jutrobezsmogu.pl - Monitoruj jakość powietrza w całej Polsce]]></title>
    <link>https://jutrobezsmogu.pl/</link>
    <description><![CDATA[JutroBezSmogu.pl – sprawdzaj jakość powietrza na żywo! Śledź mapę smogu, kalkulatory ekologiczne, wpisy o recyklingu, rolnictwie, uprawach i zielonej energii.]]></description>
    <language>pl-PL</language>
    <lastBuildDate>Sat, 14 Nov 2026 17:36:03 GMT</lastBuildDate>
    <atom:link href="https://jutrobezsmogu.pl/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title><![CDATA[Kalkulator śladu węglowego – Oblicz emisję CO₂ online]]></title>
      <link>https://jutrobezsmogu.pl/kalkulator-sladu-weglowego-oblicz-emisje-co2-online</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/kalkulator-sladu-weglowego-oblicz-emisje-co2-online</guid>
      <pubDate>Sat, 14 Nov 2026 17:32:57 GMT</pubDate>
      <dc:creator><![CDATA[Julia Wanat]]></dc:creator>
      <category><![CDATA[Zanieczyszczenia]]></category>
      <description><![CDATA[Kalkulator śladu węglowego online. Oblicz roczną emisję CO₂ z prądu, ogrzewania, samochodu i lotów. Sprawdź wykres i sposoby na mniejszą emisję!]]></description>
      <content:encoded><![CDATA[<p>Czy wiesz, ile dwutlenku węgla i innych gazów cieplarnianych wiąże się z codziennym funkcjonowaniem Twojego gospodarstwa domowego? Zużywanie energii elektrycznej, ogrzewanie domu, jazda samochodem czy podróże samolotem wpływają na klimat. Dzięki naszemu kalkulatorowi śladu węglowego możesz oszacować wielkość tych emisji i sprawdzić, które codzienne aktywności mają największe znaczenie.</p><p>Kalkulator CO₂ na JutroBezSmogu.pl to bezpłatne narzędzie online, które pozwala obliczyć orientacyjną roczną emisję gazów cieplarnianych na podstawie kilku prostych informacji. Wystarczy podać zużycie prądu, rodzaj ogrzewania, liczbę przejechanych kilometrów oraz odległości pokonane samolotem.</p><p>Po wykonaniu obliczeń otrzymasz wynik w kilogramach i tonach ekwiwalentu dwutlenku węgla (CO₂e), czytelny wykres pokazujący udział poszczególnych źródeł emisji oraz praktyczne porady dotyczące ograniczania swojego wpływu na klimat. Sprawdź swój ślad węglowy i przekonaj się, od jakich zmian warto zacząć!</p><div class="raw-html-embed">
<div id="jbs-carbon">
  <div class="jbc-hero">
    <span class="jbc-eyebrow">JUTROBEZSMOGU.PL • EKO KALKULATOR</span>
    <div class="jbc-hero-title">🌍 Kalkulator śladu węglowego</div>
    <p>Sprawdź, ile gazów cieplarnianych generuje Twój dom i transport w ciągu roku. Poznaj największe źródła emisji i sposoby na ich ograniczenie.</p>
  </div>

  <div class="jbc-body">
    <div class="jbc-info">ℹ️ Wpisz dane za cały rok. Wszystkie pola możesz zmieniać. Jeśli nie korzystasz z danego źródła emisji, wpisz 0.</div>

    <div class="jbc-section">
      <div class="jbc-section-head"><span class="jbc-icon">⚡</span><div><b>1. Energia elektryczna</b><small>Roczne zużycie prądu z sieci</small></div></div>
      <div class="jbc-grid">
        <label class="jbc-field">
          <span>Zużycie energii (kWh/rok)</span>
          <input id="jbc-power" type="number" min="0" step="100" value="2500">
          <small>Sprawdź roczne zużycie na rachunkach za prąd.</small>
        </label>
        <label class="jbc-field">
          <span>Liczba domowników</span>
          <input id="jbc-people" type="number" min="1" max="30" step="1" value="3">
          <small>Potrzebna do obliczenia emisji na osobę.</small>
        </label>
      </div>
    </div>

    <div class="jbc-section">
      <div class="jbc-section-head"><span class="jbc-icon">🏠</span><div><b>2. Ogrzewanie domu</b><small>Wybierz główne źródło ciepła</small></div></div>
      <div class="jbc-grid">
        <label class="jbc-field">
          <span>Sposób ogrzewania</span>
          <select id="jbc-heat-type">
            <option value="gas">Gaz ziemny</option>
            <option value="coal">Węgiel kamienny</option>
            <option value="wood">Drewno opałowe</option>
            <option value="pellet">Pellet drzewny</option>
            <option value="oil">Olej opałowy</option>
            <option value="district">Ciepło systemowe</option>
            <option value="pump">Pompa ciepła</option>
            <option value="electric">Ogrzewanie elektryczne</option>
            <option value="none">Brak / inne – nie uwzględniaj</option>
          </select>
        </label>
        <label class="jbc-field" id="jbc-heat-amount-wrap">
          <span id="jbc-heat-label">Zużycie gazu (m³/rok)</span>
          <input id="jbc-heat-amount" type="number" min="0" step="100" value="1200">
          <small id="jbc-heat-hint">Podaj roczne zużycie gazu na ogrzewanie.</small>
        </label>
      </div>
      <div id="jbc-heat-warning" class="jbc-hint" hidden=""></div>
    </div>

    <div class="jbc-section">
      <div class="jbc-section-head"><span class="jbc-icon">🚗</span><div><b>3. Transport samochodowy</b><small>Roczny przebieg i rodzaj napędu</small></div></div>
      <div class="jbc-grid">
        <label class="jbc-field">
          <span>Rodzaj samochodu</span>
          <select id="jbc-car-type">
            <option value="petrol">Benzyna</option>
            <option value="diesel">Diesel</option>
            <option value="lpg">LPG</option>
            <option value="hybrid">Hybryda benzynowa</option>
            <option value="ev">Samochód elektryczny</option>
            <option value="none">Nie korzystam z samochodu</option>
          </select>
        </label>
        <label class="jbc-field">
          <span>Przejechane kilometry (km/rok)</span>
          <input id="jbc-car-km" type="number" min="0" step="500" value="12000">
          <small>Łączna liczba kilometrów przypisana gospodarstwu.</small>
        </label>
      </div>
      <div class="jbc-grid">
        <label class="jbc-field" id="jbc-car-consumption-wrap">
          <span id="jbc-car-consumption-label">Średnie spalanie (l/100 km)</span>
          <input id="jbc-car-consumption" type="number" min="0.1" max="100" step="0.1" value="7">
          <small id="jbc-car-consumption-hint">Możesz wpisać spalanie ze swojego samochodu.</small>
        </label>
        <label class="jbc-field">
          <span>Udział emisji przypisany gospodarstwu</span>
          <select id="jbc-car-share">
            <option value="1">100% – cały przebieg</option>
            <option value="0.5">50% – połowa przebiegu</option>
            <option value="0.25">25% – ćwierć przebiegu</option>
          </select>
          <small>Przydatne, jeśli dzielisz samochód z innym gospodarstwem.</small>
        </label>
      </div>
      <div id="jbc-car-warning" class="jbc-hint" hidden=""></div>
    </div>

    <div class="jbc-section">
      <div class="jbc-section-head"><span class="jbc-icon">✈️</span><div><b>4. Podróże samolotem</b><small>Podaj łączny dystans przelotów w roku</small></div></div>
      <div class="jbc-grid">
        <label class="jbc-field">
          <span>Loty krótkie i średnie (km/os./rok)</span>
          <input id="jbc-flight-short" type="number" min="0" step="500" value="0">
          <small>Łączny dystans wszystkich odcinków, także powrotnych.</small>
        </label>
        <label class="jbc-field">
          <span>Loty dalekodystansowe (km/os./rok)</span>
          <input id="jbc-flight-long" type="number" min="0" step="1000" value="0">
          <small>Wpisz dystans lotów jednej osoby, np. 12 000 km.</small>
        </label>
        <label class="jbc-field">
          <span>Liczba podróżujących osób</span>
          <input id="jbc-flyers" type="number" min="1" max="30" step="1" value="1">
          <small>Zakładamy ten sam dystans dla każdej osoby.</small>
        </label>
      </div>
    </div>

    <div class="jbc-actions">
      <button type="button" id="jbc-calculate">🌱 Oblicz mój ślad węglowy</button>
      <button type="button" id="jbc-reset">Wyczyść dane</button>
    </div>

    <div id="jbc-error" class="jbc-error" role="alert" hidden=""></div>

    <div id="jbc-results" hidden="">
      <div class="jbc-result-top">
        <span class="jbc-eyebrow">TWÓJ SZACUNKOWY WYNIK ROCZNY</span>
        <div class="jbc-big-number"><span id="jbc-total">0,00</span> <small>t CO₂e</small></div>
        <div id="jbc-total-kg" class="jbc-subtotal"></div>
        <div class="jbc-result-stats">
          <div><small>Na jedną osobę</small><b id="jbc-per-person">—</b></div>
          <div><small>Największe źródło emisji</small><b id="jbc-biggest">—</b></div>
        </div>
      </div>

      <div class="jbc-results-heading"><b>Skąd pochodzą Twoje emisje?</b><span>Udział poszczególnych kategorii</span></div>

      <div class="jbc-chart-layout">
        <div class="jbc-donut" id="jbc-donut" role="img" aria-label="Wykres udziału źródeł emisji">
          <div class="jbc-donut-center"><span>ROCZNIE</span><b id="jbc-donut-value">—</b><small>t CO₂e</small></div>
        </div>
        <div id="jbc-breakdown" class="jbc-breakdown"></div>
      </div>

      <div class="jbc-results-heading"><b>Co możesz zrobić, aby zmniejszyć emisje?</b><span>Porady dopasowane do Twojego wyniku</span></div>
      <div id="jbc-tips" class="jbc-tips"></div>

      <div class="jbc-result-buttons">
        <button type="button" id="jbc-copy">📋 Kopiuj podsumowanie</button>
        <button type="button" id="jbc-print">🖨️ Drukuj wynik</button>
      </div>
    </div>
  </div>

  <div class="jbc-method">
    <b>Metodologia i ograniczenia</b>
    <p>Wynik jest orientacyjną emisją gazów cieplarnianych w uwzględnionych kategoriach, wyrażoną jako CO₂e. Dla prądu zastosowano współczynnik KOBiZE 0,553 kg CO₂/kWh (dane za 2024 r.). Pozostałe współczynniki są uproszczonymi założeniami, opisanymi poniżej.</p>
    <details>
      <summary>Sprawdź zastosowane współczynniki i założenia</summary>
      <div class="jbc-method-details">
        <p><b>Prąd z sieci:</b> 0,553 kg CO₂/kWh.</p>
        <p><b>Ogrzewanie:</b> gaz 1,9 kg CO₂e/m³; węgiel 2,5 kg CO₂e/kg; olej 2,7 kg CO₂e/l; ciepło systemowe 0,38 kg CO₂e/kWh. Drewno 0,05 kg CO₂e/kg i pellet 0,10 kg CO₂e/kg to uproszczone wskaźniki emisji pozakopalnych i łańcucha dostaw, bez bezpośredniego biogenicznego CO₂ ze spalania. Nie oznacza to zerowego wpływu spalania biomasy na klimat ani jakości powietrza.</p>
        <p><b>Samochód:</b> benzyna 2,31 kg CO₂e/l; diesel 2,68 kg CO₂e/l; LPG 1,51 kg CO₂e/l. Hybryda korzysta ze wskaźnika benzyny i podanego spalania. Samochód elektryczny: kWh/100 km × 0,553 kg CO₂/kWh.</p>
        <p><b>Loty:</b> uproszczone 0,11 kg CO₂e/pasażerokm dla lotów krótkich i średnich oraz 0,15 kg CO₂e/pasażerokm dla lotów dalekich. Wartości są przybliżeniami uwzględniającymi dodatkowy wpływ emisji na dużej wysokości; zależą od trasy, klasy i samolotu.</p>
        <p><b>Zakres:</b> nie uwzględniamy pełnego cyklu życia budynków, samochodów, żywności, zakupów ani usług. Część wskaźników obejmuje CO₂, a część uproszczone CO₂e, dlatego wynik nie jest audytem zgodnym z pełną metodologią GHG Protocol.</p>
        <p><b>Unikanie podwójnego liczenia:</b> przy pompie ciepła i ogrzewaniu elektrycznym wpisz zużycie prądu w polu ogrzewania, a w pierwszej sekcji tylko pozostałe zużycie energii elektrycznej. Przy samochodzie elektrycznym analogicznie nie uwzględniaj ładowania w pierwszej sekcji.</p>        
      </div>
    </details>
  </div>
</div>

<style>
#jbs-carbon {
  --green:#46C288;
  --dark:#173e2b;
  --muted:#708277;
  --border:#e0ebe4;
  font-family:system-ui,-apple-system,"Segoe UI",sans-serif;
  max-width:1050px;
  margin:24px auto;
  background:#fff;
  color:#263d30;
  border:1px solid var(--border);
  border-radius:20px;
  overflow:hidden;
  box-shadow:0 8px 35px #163c2510;
}
#jbs-carbon * {box-sizing:border-box}
#jbs-carbon [hidden] {display:none!important}
#jbs-carbon button,#jbs-carbon input,#jbs-carbon select {font:inherit}
#jbs-carbon .jbc-hero {
  padding:32px;
  background:linear-gradient(125deg,#153d2b,#267e54);
  color:white;
}
#jbs-carbon .jbc-eyebrow {
  font-size:11px;
  letter-spacing:1.5px;
  font-weight:800;
  color:#a8efc4;
}
#jbs-carbon .jbc-hero-title {
  font-size:clamp(24px,4vw,35px);
  font-weight:850;
  line-height:1.2;
  margin:12px 0;
}
#jbs-carbon .jbc-hero p {
  color:#e1f3e8;
  font-size:14px;
  line-height:1.7;
  max-width:700px;
  margin:0;
}
#jbs-carbon .jbc-body {padding:26px}
#jbs-carbon .jbc-info,
#jbs-carbon .jbc-hint {
  background:#eff9f3;
  color:#46765a;
  border-radius:10px;
  padding:14px;
  font-size:12px;
  line-height:1.6;
}
#jbs-carbon .jbc-hint {margin-top:13px}
#jbs-carbon .jbc-section {
  padding:24px 0;
  border-bottom:1px solid var(--border);
}
#jbs-carbon .jbc-section-head {
  display:flex;
  align-items:center;
  gap:13px;
  margin-bottom:18px;
}
#jbs-carbon .jbc-icon {
  display:grid;
  place-items:center;
  width:47px;
  height:47px;
  flex-shrink:0;
  background:#e9f8ef;
  border-radius:12px;
  font-size:23px;
}
#jbs-carbon .jbc-section-head b {
  display:block;
  color:#183f2b;
  font-size:17px;
}
#jbs-carbon .jbc-section-head small {
  display:block;
  color:var(--muted);
  font-size:12px;
  margin-top:4px;
}
#jbs-carbon .jbc-grid {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:15px;
  margin-top:13px;
}
#jbs-carbon .jbc-field {
  display:flex;
  flex-direction:column;
  gap:7px;
  min-width:0;
}
#jbs-carbon .jbc-field>span {
  font-size:12px;
  font-weight:800;
  color:#355541;
}
#jbs-carbon .jbc-field input,
#jbs-carbon .jbc-field select {
  width:100%;
  padding:13px;
  border:1px solid #d9e6dd;
  border-radius:10px;
  color:#244332;
  background:#fbfdfb;
  font-size:14px;
  outline:none;
}
#jbs-carbon .jbc-field input:focus,
#jbs-carbon .jbc-field select:focus {
  border-color:#46C288;
  box-shadow:0 0 0 3px #46c28830;
}
#jbs-carbon .jbc-field small {
  font-size:11px;
  line-height:1.5;
  color:#8a988e;
}
#jbs-carbon .jbc-actions {
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin:26px 0;
}
#jbs-carbon .jbc-actions button,
#jbs-carbon .jbc-result-buttons button {
  padding:14px 20px;
  border-radius:10px;
  border:0;
  cursor:pointer;
  font-size:13px;
  font-weight:800;
}
#jbc-calculate {
  background:#46C288;
  color:#103b26;
  flex:1;
}
#jbc-calculate:hover {background:#6bd9a1}
#jbc-reset {
  background:#eef4f0;
  color:#567262;
}
#jbs-carbon .jbc-error {
  background:#fff0ed;
  color:#a03b30;
  padding:13px;
  border-radius:9px;
  font-size:12px;
  margin-bottom:15px;
}
#jbs-carbon .jbc-result-top {
  background:linear-gradient(130deg,#173e2c,#24784f);
  padding:28px;
  border-radius:15px;
  color:white;
}
#jbs-carbon .jbc-big-number {
  font-size:clamp(40px,7vw,68px);
  font-weight:850;
  line-height:1.2;
  margin:12px 0 4px;
}
#jbs-carbon .jbc-big-number small {
  font-size:22px;
  font-weight:600;
}
#jbs-carbon .jbc-subtotal {
  color:#c8e8d4;
  font-size:13px;
}
#jbs-carbon .jbc-result-stats {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
  margin-top:23px;
}
#jbs-carbon .jbc-result-stats>div {
  padding:15px;
  border-radius:10px;
  background:#ffffff17;
}
#jbs-carbon .jbc-result-stats small {
  display:block;
  color:#b7dec7;
  font-size:11px;
}
#jbs-carbon .jbc-result-stats b {
  display:block;
  font-size:17px;
  margin-top:5px;
}
#jbs-carbon .jbc-results-heading {
  display:flex;
  justify-content:space-between;
  align-items:end;
  flex-wrap:wrap;
  gap:8px;
  margin:30px 0 18px;
}
#jbs-carbon .jbc-results-heading b {
  font-size:20px;
  color:#173e2b;
}
#jbs-carbon .jbc-results-heading span {
  font-size:11px;
  color:#85958a;
}
#jbs-carbon .jbc-chart-layout {
  display:grid;
  grid-template-columns:260px 1fr;
  gap:28px;
  align-items:center;
}
#jbs-carbon .jbc-donut {
  width:245px;
  height:245px;
  border-radius:50%;
  background:#e6efe8;
  display:grid;
  place-items:center;
  margin:auto;
}
#jbs-carbon .jbc-donut-center {
  width:160px;
  height:160px;
  border-radius:50%;
  background:white;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:center;
  box-shadow:0 0 10px #0000000a;
}
#jbs-carbon .jbc-donut-center span {
  font-size:10px;
  color:#819185;
  font-weight:800;
  letter-spacing:1px;
}
#jbs-carbon .jbc-donut-center b {
  font-size:32px;
  color:#1a4d31;
}
#jbs-carbon .jbc-donut-center small {
  font-size:12px;
  color:#8a9b8e;
}
#jbs-carbon .jbc-breakdown {
  display:flex;
  flex-direction:column;
  gap:17px;
}
#jbs-carbon .jbc-break-row {
  display:grid;
  grid-template-columns:1fr auto;
  gap:7px;
}
#jbs-carbon .jbc-break-label {
  display:flex;
  align-items:center;
  gap:7px;
  font-weight:800;
}
#jbs-carbon .jbc-dot {
  width:11px;
  height:11px;
  border-radius:50%;
  display:inline-block;
}
#jbs-carbon .jbc-break-track {
  grid-column:1/-1;
  background:#edf3ef;
  height:9px;
  border-radius:9px;
  overflow:hidden;
}
#jbs-carbon .jbc-break-fill {
  height:100%;
  border-radius:9px;
}
#jbs-carbon .jbc-tips {
  display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));
  gap:12px;
}
#jbs-carbon .jbc-tip {
  padding:18px;
  background:#f3faf5;
  border:1px solid #e0f0e5;
  border-radius:12px;
}
#jbs-carbon .jbc-tip b {
  display:block;
  font-size:14px;
  color:#235b3a;
}
#jbs-carbon .jbc-tip p {
  font-size:12px;
  line-height:1.7;
  color:#607d69;
  margin:8px 0 0;
}
#jbs-carbon .jbc-result-buttons {
  display:flex;
  flex-wrap:wrap;
  gap:10px;
  margin-top:25px;
}
#jbs-carbon .jbc-result-buttons button {
  background:#edf7f0;
  color:#25824d;
  border:1px solid #d6ebdd;
}
#jbs-carbon .jbc-method {
  padding:22px 26px;
  background:#f6faf7;
  border-top:1px solid #e3ede6;
  font-size:12px;
  color:#617a69;
  line-height:1.7;
}
#jbs-carbon .jbc-method>b {
  font-size:14px;
  color:#244b34;
}
#jbs-carbon .jbc-method summary {
  cursor:pointer;
  font-weight:800;
  color:#278351;
}
#jbs-carbon .jbc-method a {color:#16844d}
#jbs-carbon .jbc-method-details {padding:8px 0}
@media(max-width:700px) {
  #jbs-carbon .jbc-hero {padding:23px}
  #jbs-carbon .jbc-body {padding:16px}
  #jbs-carbon .jbc-grid,
  #jbs-carbon .jbc-tips {grid-template-columns:1fr}
  #jbs-carbon .jbc-chart-layout {
    grid-template-columns:1fr;
    gap:22px;
  }
  #jbs-carbon .jbc-donut {width:220px;height:220px}
  #jbs-carbon .jbc-donut-center {width:145px;height:145px}
  #jbs-carbon .jbc-result-top {padding:20px}
  #jbs-carbon .jbc-result-stats b {font-size:14px}
  #jbs-carbon .jbc-actions button {width:100%}
}
@media print {
  #jbs-carbon .jbc-hero,
  #jbs-carbon .jbc-section,
  #jbs-carbon .jbc-actions,
  #jbs-carbon .jbc-result-buttons,
  #jbs-carbon .jbc-info,
  #jbs-carbon .jbc-method {display:none!important}
  #jbs-carbon #jbc-results {display:block!important}
  #jbs-carbon {border:0;box-shadow:none}
  #jbs-carbon .jbc-result-top {
    background:#f0f7f2!important;
    color:#173e2b!important;
    print-color-adjust:exact;
  }
}
</style>

<script>
(function () {
  const root = document.getElementById("jbs-carbon");
  if (!root || root.dataset.ready) return;
  root.dataset.ready = "1";

  const $ = id => root.querySelector("#" + id);
  const num = id => Number($(id).value);

  const F = {
    electricity: 0.553,
    gas: 1.9,
    coal: 2.5,
    wood: 0.05,
    pellet: 0.10,
    oil: 2.7,
    district: 0.38,
    petrol: 2.31,
    diesel: 2.68,
    lpg: 1.51,
    flightShort: 0.11,
    flightLong: 0.15
  };

  const heatConfig = {
    gas: {
      label:"Zużycie gazu (m³/rok)",
      hint:"Roczne zużycie gazu przeznaczonego na ogrzewanie.",
      value:1200
    },
    coal: {
      label:"Zużycie węgla (kg/rok)",
      hint:"Przykładowo 3000 kg = 3 tony.",
      value:3000
    },
    wood: {
      label:"Zużycie drewna (kg/rok)",
      hint:"Podaj masę drewna; wynik jest silnie uproszczony.",
      value:3000
    },
    pellet: {
      label:"Zużycie pelletu (kg/rok)",
      hint:"Podaj roczną masę zużytego pelletu.",
      value:2500
    },
    oil: {
      label:"Zużycie oleju (l/rok)",
      hint:"Podaj liczbę litrów oleju opałowego.",
      value:1500
    },
    district: {
      label:"Zużycie ciepła (kWh/rok)",
      hint:"Jeśli rachunek podaje GJ, pomnóż przez 277,78.",
      value:12000
    },
    pump: {
      label:"Prąd na pompę ciepła (kWh/rok)",
      hint:"Podaj energię pobraną z sieci przez pompę.",
      value:3500
    },
    electric: {
      label:"Prąd na ogrzewanie (kWh/rok)",
      hint:"Podaj energię elektryczną zużytą na ogrzewanie.",
      value:9000
    },
    none: {
      label:"Nie dotyczy",
      hint:"",
      value:0
    }
  };

  const carConfig = {
    petrol:{label:"Spalanie (l/100 km)",value:7},
    diesel:{label:"Spalanie (l/100 km)",value:6},
    lpg:{label:"Spalanie (l/100 km)",value:9},
    hybrid:{label:"Spalanie (l/100 km)",value:5},
    ev:{label:"Zużycie energii (kWh/100 km)",value:18},
    none:{label:"Nie dotyczy",value:0}
  };

  const format = (v,d=0) =>
    v.toLocaleString("pl-PL",{
      minimumFractionDigits:d,
      maximumFractionDigits:d
    });

  function updateHeat() {
    const type = $("jbc-heat-type").value;
    const cfg = heatConfig[type];

    $("jbc-heat-label").textContent = cfg.label;
    $("jbc-heat-hint").textContent = cfg.hint;
    $("jbc-heat-amount").value = cfg.value;

    $("jbc-heat-amount-wrap").hidden = type === "none";

    const warning = $("jbc-heat-warning");

    if (type === "pump" || type === "electric") {
      warning.hidden = false;
      warning.textContent =
        "Ważne: w pierwszej sekcji podaj zużycie prądu " +
        "bez energii na ogrzewanie. Dzięki temu nie policzymy jej dwa razy.";
    } else if (type === "wood" || type === "pellet") {
      warning.hidden = false;
      warning.textContent =
        "Uwaga: uproszczony współczynnik dla biomasy nie obejmuje " +
        "bezpośredniego biogenicznego CO₂ ze spalania. " +
        "Nie oznacza to braku wpływu na klimat ani smogu.";
    } else {
      warning.hidden = true;
    }
  }

  function updateCar() {
    const type = $("jbc-car-type").value;
    const cfg = carConfig[type];

    $("jbc-car-consumption-label").textContent = cfg.label;
    $("jbc-car-consumption").value = cfg.value;
    $("jbc-car-consumption-wrap").hidden = type === "none";

    const warning = $("jbc-car-warning");
    if (type === "ev") {
      warning.hidden = false;
      warning.textContent =
        "Ważne: jeśli ładowanie samochodu jest już uwzględnione " +
        "w zużyciu prądu w pierwszej sekcji, odejmij je tam, " +
        "aby uniknąć podwójnego liczenia.";
    } else {
      warning.hidden = true;
    }
  }

  $("jbc-heat-type").addEventListener("change",updateHeat);
  $("jbc-car-type").addEventListener("change",updateCar);

  function calculate() {
    const fields = [
      "jbc-power","jbc-people","jbc-heat-amount",
      "jbc-car-km","jbc-car-consumption",
      "jbc-flight-short","jbc-flight-long","jbc-flyers"
    ];

    for (const id of fields) {
      const element = $(id);
      if (element.closest("[hidden]")) continue;

      if (!Number.isFinite(num(id)) || num(id) < 0 ||
          (id === "jbc-car-consumption" &&
           num(id) === 0 &&
           $("jbc-car-type").value !== "none")) {
        $("jbc-error").textContent =
          "Sprawdź wpisane wartości. Nie mogą być ujemne ani nieprawidłowe.";
        $("jbc-error").hidden = false;
        return;
      }
    }

    const people = num("jbc-people");
    const flyers = num("jbc-flyers");

    if (!Number.isInteger(people) || people < 1 ||
        !Number.isInteger(flyers) || flyers < 1 ||
        people > 30 || flyers > 30) {
      $("jbc-error").textContent =
        "Liczba domowników i podróżujących musi być liczbą całkowitą od 1 do 30.";
      $("jbc-error").hidden = false;
      return;
    }

    $("jbc-error").hidden = true;

    const electricity = num("jbc-power") * F.electricity;

    const heatType = $("jbc-heat-type").value;
    const heatAmount = heatType === "none"
      ? 0 : num("jbc-heat-amount");

    let heating = 0;
    if (heatType === "pump" || heatType === "electric") {
      heating = heatAmount * F.electricity;
    } else if (heatType !== "none") {
      heating = heatAmount * F[heatType];
    }

    const carType = $("jbc-car-type").value;
    const carKm = carType === "none"
      ? 0 : num("jbc-car-km");
    const consumption = carType === "none"
      ? 0 : num("jbc-car-consumption");
    const share = num("jbc-car-share");

    let car = 0;
    if (carType === "ev") {
      car = carKm * consumption / 100 * F.electricity * share;
    } else if (carType !== "none") {
      const fuel = carType === "hybrid" ? "petrol" : carType;
      car = carKm * consumption / 100 * F[fuel] * share;
    }

    const flights = (
      num("jbc-flight-short") * F.flightShort +
      num("jbc-flight-long") * F.flightLong
    ) * flyers;

    const items = [
      {name:"Energia elektryczna",value:electricity,color:"#46C288",icon:"⚡"},
      {name:"Ogrzewanie",value:heating,color:"#f3a647",icon:"🏠"},
      {name:"Samochód",value:car,color:"#5396d8",icon:"🚗"},
      {name:"Podróże lotnicze",value:flights,color:"#a67bd9",icon:"✈️"}
    ];

    const total = items.reduce((s,x)=>s+x.value,0);
    const biggest = [...items].sort((a,b)=>b.value-a.value)[0];

    $("jbc-total").textContent = format(total/1000,2);
    $("jbc-total-kg").textContent =
      format(total,0) + " kg CO₂e rocznie";
    $("jbc-per-person").textContent =
      format(total/people/1000,2) + " t CO₂e";
    $("jbc-biggest").textContent =
      total > 0 ? biggest.name : "Brak emisji w danych";
    $("jbc-donut-value").textContent = format(total/1000,2);

    renderChart(items,total);
    renderTips(items,heatType,carType);

    $("jbc-results").hidden = false;
    $("jbc-results").scrollIntoView({
      behavior:"smooth",
      block:"start"
    });

    root._carbonResult = {items,total,people};
  }

  function renderChart(items,total) {
    const donut = $("jbc-donut");
    let start = 0;
    const segments = [];

    items.forEach(item => {
      const pct = total ? item.value / total * 100 : 0;
      if (pct > 0) {
        segments.push(
          item.color + " " + start.toFixed(3) + "% " +
          (start+pct).toFixed(3) + "%"
        );
      }
      start += pct;
    });

    donut.style.background = total
      ? "conic-gradient(" + segments.join(",") + ")"
      : "#e6efe8";

    const list = $("jbc-breakdown");
    list.replaceChildren();

    items.forEach(item => {
      const pct = total ? item.value/total*100 : 0;

      const row = document.createElement("div");
      row.className = "jbc-break-row";

      const label = document.createElement("span");
      label.className = "jbc-break-label";

      const dot = document.createElement("i");
      dot.className = "jbc-dot";
      dot.style.background = item.color;

      label.append(dot,document.createTextNode(
        item.icon + " " + item.name
      ));

      const value = document.createElement("strong");
      value.textContent =
        format(item.value,0) + " kg · " + format(pct,1) + "%";

      const track = document.createElement("div");
      track.className = "jbc-break-track";

      const fill = document.createElement("div");
      fill.className = "jbc-break-fill";
      fill.style.width = pct + "%";
      fill.style.background = item.color;

      track.appendChild(fill);
      row.append(label,value,track);
      list.appendChild(row);
    });
  }

  function renderTips(items,heatType,carType) {
    const tips = [];
    const byName = name =>
      items.find(item=>item.name===name)?.value || 0;

    if (byName("Energia elektryczna") > 0) {
      tips.push({
        title:"⚡ Ogranicz zużycie prądu",
        text:"Wyłączaj nieużywane urządzenia, wybieraj energooszczędny sprzęt i sprawdź możliwość wykorzystania własnej fotowoltaiki. Każde 100 kWh mniej to w tym modelu około 55 kg CO₂ mniej."
      });
    }

    if (byName("Ogrzewanie") > 0) {
      tips.push({
        title:"🏠 Popraw efektywność ogrzewania",
        text:"Sprawdź izolację budynku, szczelność okien i ustawienia ogrzewania. Zmniejszenie zapotrzebowania na ciepło może obniżyć zużycie paliwa lub energii."
      });
    }

    if (heatType === "coal" || heatType === "oil") {
      tips.push({
        title:"🌿 Rozważ modernizację ogrzewania",
        text:"Ogrzewanie węglem lub olejem wiąże się ze znacznymi emisjami. Przeanalizuj termomodernizację i możliwość przejścia na efektywniejsze źródło ciepła."
      });
    }

    if (byName("Samochód") > 0) {
      tips.push({
        title:"🚲 Ogranicz przejazdy samochodem",
        text:"Część krótkich tras zastąp spacerem, rowerem lub komunikacją zbiorową. Łączenie kilku spraw w jedną podróż również pomaga ograniczać emisje."
      });
    }

    if (carType === "ev") {
      tips.push({
        title:"🔌 Ładuj samochód świadomie",
        text:"Jeśli masz taką możliwość, korzystaj z własnej energii odnawialnej i ograniczaj zużycie energii podczas jazdy."
      });
    }

    if (byName("Podróże lotnicze") > 0) {
      tips.push({
        title:"🚆 Planuj podróże z mniejszą emisją",
        text:"Przy krótszych trasach porównaj podróż pociągiem z lotem. Ograniczenie liczby przelotów może istotnie zmniejszyć ślad klimatyczny."
      });
    }

    if (!tips.length) {
      tips.push({
        title:"🌱 Kontynuuj świadome wybory",
        text:"W podanych kategoriach wynik wynosi zero. Sprawdź, czy wszystkie wartości zostały wpisane poprawnie. Pamiętaj, że żywność, zakupy i usługi także mają wpływ na klimat."
      });
    }

    const container = $("jbc-tips");
    container.replaceChildren();

    tips.forEach(tip => {
      const card = document.createElement("div");
      card.className = "jbc-tip";

      const title = document.createElement("b");
      title.textContent = tip.title;

      const text = document.createElement("p");
      text.textContent = tip.text;

      card.append(title,text);
      container.appendChild(card);
    });
  }

  $("jbc-calculate").addEventListener("click",calculate);

  $("jbc-reset").addEventListener("click",() => {
    root.querySelectorAll("input").forEach(input => {
      input.value = "0";
    });
    $("jbc-people").value = "1";
    $("jbc-flyers").value = "1";
    $("jbc-heat-type").value = "none";
    $("jbc-car-type").value = "none";
    $("jbc-car-share").value = "1";
    updateHeat();
    updateCar();
    $("jbc-results").hidden = true;
    $("jbc-error").hidden = true;
    root.scrollIntoView({behavior:"smooth",block:"start"});
  });

  $("jbc-copy").addEventListener("click",async () => {
    const result = root._carbonResult;
    if (!result) return;

    const text =
      "Mój szacunkowy ślad węglowy – JutroBezSmogu.pl\n" +
      "Razem: " + format(result.total/1000,2) +
      " t CO₂e rocznie\n" +
      "Na osobę: " +
      format(result.total/result.people/1000,2) +
      " t CO₂e\n" +
      result.items.map(item =>
        item.name + ": " + format(item.value,0) + " kg CO₂e"
      ).join("\n") +
      "\nWynik orientacyjny, obejmuje wybrane źródła emisji.";

    try {
      await navigator.clipboard.writeText(text);
      $("jbc-copy").textContent = "✓ Skopiowano";
      setTimeout(() => {
        $("jbc-copy").textContent = "📋 Kopiuj podsumowanie";
      },2000);
    } catch(e) {
      $("jbc-error").textContent =
        "Nie udało się skopiować. Sprawdź uprawnienia przeglądarki.";
      $("jbc-error").hidden = false;
    }
  });

  $("jbc-print").addEventListener("click",() => window.print());

  updateHeat();
  updateCar();
})();
</script>
</div><p>Ślad węglowy to suma emisji gazów cieplarnianych związanych z działalnością człowieka, produktem, usługą lub funkcjonowaniem gospodarstwa domowego. Najczęściej wyraża się go w kilogramach albo tonach ekwiwalentu dwutlenku węgla (CO₂e).</p><p>Ekwiwalent CO₂ pozwala przedstawić wpływ różnych gazów cieplarnianych za pomocą wspólnej jednostki. Uwzględnia się w ten sposób nie tylko dwutlenek węgla, ale również inne substancje wpływające na ocieplenie klimatu, na przykład metan czy podtlenek azotu.</p><p>Na wielkość śladu węglowego wpływa wiele codziennych decyzji: sposób ogrzewania mieszkania, zużycie energii, wybór środka transportu, częstotliwość podróży lotniczych, dieta czy kupowane produkty. Nasz kalkulator skupia się na czterech obszarach: energii elektrycznej, ogrzewaniu, samochodzie i lotach. Dzięki temu pozwala szybko oszacować emisje związane z wybranymi elementami codziennego życia.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak działa kalkulator śladu węglowego?</strong></span></p><p>Kalkulator oblicza orientacyjną roczną emisję gazów cieplarnianych na podstawie danych wpisanych przez użytkownika oraz przyjętych współczynników emisji.</p><p>Każdy rodzaj zużywanej energii lub paliwa ma przypisany współczynnik określający, ile kilogramów CO₂ lub CO₂e wiąże się z jego wykorzystaniem. Kalkulator mnoży podane zużycie przez odpowiedni współczynnik, a następnie sumuje wyniki ze wszystkich uwzględnionych kategorii.</p><p>Obliczenia wykonywane są bezpośrednio w przeglądarce internetowej. Narzędzie nie wymaga rejestracji, logowania ani przesyłania wpisanych informacji na serwer.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak korzystać z kalkulatora CO₂ krok po kroku?</strong></span></p><ol><li><strong>Podaj zużycie energii elektrycznej</strong> – wpisz liczbę kilowatogodzin (kWh) zużytych w ciągu roku oraz liczbę domowników.</li><li><strong>Wybierz sposób ogrzewania</strong> – wskaż, czy ogrzewasz dom gazem, węglem, drewnem, pelletem, olejem opałowym, ciepłem systemowym, pompą ciepła czy energią elektryczną.</li><li><strong>Wprowadź zużycie paliwa lub energii na ogrzewanie</strong> – podaj roczną ilość w jednostce wskazanej przez kalkulator.</li><li><strong>Uzupełnij dane samochodu</strong> – wybierz rodzaj napędu, wpisz roczny przebieg i średnie spalanie paliwa lub zużycie energii elektrycznej.</li><li><strong>Dodaj podróże samolotem</strong> – wpisz łączną długość lotów krótkich, średnich i dalekodystansowych oraz liczbę podróżujących osób.</li><li><strong>Kliknij „Oblicz mój ślad węglowy”</strong> – otrzymasz podsumowanie emisji, wykres i porady.</li></ol><p>Wszystkie dane powinny dotyczyć jednego roku. Jeśli nie korzystasz z określonego środka transportu lub źródła energii, możesz wpisać 0 albo wybrać odpowiednią opcję w formularzu.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak kalkulator oblicza emisję CO₂ z energii elektrycznej?</strong></span></p><p>Zużycie energii elektrycznej jest jednym z podstawowych elementów śladu węglowego gospodarstwa domowego. Wielkość emisji zależy między innymi od ilości pobranego prądu oraz sposobu jego wytwarzania.</p><p>W naszym kalkulatorze zastosowano współczynnik 0,553 kg CO₂ na 1 kWh energii elektrycznej, oparty na danych Krajowego Ośrodka Bilansowania i Zarządzania Emisjami (KOBiZE) za 2024 rok.</p><p>Przykładowo, przy rocznym zużyciu 2500 kWh energii elektrycznej kalkulator wyliczy około 1382,5 kg CO₂, czyli około 1,38 tony. Jest to wartość szacunkowa. Rzeczywisty ślad związany z energią elektryczną może zależeć od źródła jej pochodzenia, zastosowanej metodologii i zakresu uwzględnianych emisji.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak sposób ogrzewania wpływa na ślad węglowy?</strong></span></p><p>Ogrzewanie domu może stanowić znaczną część rocznych emisji gospodarstwa domowego, szczególnie w przypadku budynków o słabej izolacji termicznej.</p><p>Kalkulator pozwala uwzględnić różne źródła ogrzewania, między innymi gaz ziemny, węgiel kamienny, drewno, pellet, olej opałowy, ciepło systemowe, pompę ciepła i ogrzewanie elektryczne. Dla każdego źródła wykorzystywany jest osobny współczynnik emisji. Wynik zależy od rodzaju paliwa lub energii oraz ich rocznego zużycia.</p><p>W przypadku drewna i pelletu stosowane są uproszczone współczynniki, które nie obejmują bezpośredniego biogenicznego CO₂ uwalnianego podczas spalania. Nie oznacza to, że spalanie biomasy jest całkowicie neutralne klimatycznie lub pozbawione wpływu na jakość powietrza.</p><p><strong>Ważne:</strong> jeśli korzystasz z pompy ciepła lub ogrzewania elektrycznego, wpisz energię zużytą na ogrzewanie w sekcji ogrzewania, a pozostałe zużycie prądu w pierwszej sekcji formularza. Pozwoli to uniknąć dwukrotnego uwzględnienia tej samej energii.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak obliczyć ślad węglowy samochodu?</strong></span></p><p>Emisje związane z jazdą samochodem zależą przede wszystkim od rodzaju napędu, zużycia paliwa lub energii oraz liczby przejechanych kilometrów. W kalkulatorze możesz wybrać samochód benzynowy, wysokoprężny, zasilany LPG, hybrydowy lub elektryczny.</p><p>Dla pojazdów spalinowych narzędzie szacuje roczne zużycie paliwa na podstawie przebiegu i średniego spalania, a następnie mnoży otrzymany wynik przez odpowiedni współczynnik emisji. W przypadku samochodu elektrycznego obliczenia opierają się na zużyciu energii w kWh na 100 km oraz współczynniku emisji energii elektrycznej. Jeśli uwzględniasz energię przeznaczoną na ładowanie samochodu elektrycznego w sekcji transportu, nie dodawaj jej ponownie do ogólnego zużycia prądu w domu.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak podróże samolotem wpływają na ślad węglowy?</strong></span></p><p>Lotnictwo jest kolejnym źródłem emisji gazów cieplarnianych. Wielkość emisji przypisanej pasażerowi zależy między innymi od długości trasy, rodzaju samolotu, liczby pasażerów oraz klasy podróży. Nasz kalkulator pozwala osobno podać dystans lotów krótkich i średnich oraz dalekodystansowych. Należy uwzględnić wszystkie odcinki podróży, również loty powrotne.</p><p>Obliczenia wykorzystują uproszczone współczynniki emisji na pasażerokilometr, które uwzględniają szacunkowy dodatkowy wpływ emisji na dużej wysokości. Wynik dla podróży lotniczych ma charakter orientacyjny i może różnić się od wartości obliczonych dla konkretnego połączenia lotniczego.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak interpretować wynik kalkulatora śladu węglowego?</strong></span></p><p>Po wykonaniu obliczeń zobaczysz łączną szacunkową emisję gazów cieplarnianych w tonach CO₂e rocznie. Kalkulator pokaże również emisję przypadającą na jednego domownika, obliczoną przez podzielenie wyniku gospodarstwa domowego przez liczbę mieszkańców. Kolorowy wykres kołowy przedstawia udział czterech kategorii:</p><ul><li><strong>Energia elektryczna</strong> – emisje związane ze zużyciem prądu z sieci.</li><li><strong>Ogrzewanie</strong> – emisje wynikające z wykorzystania wybranego źródła ciepła.</li><li><strong>Samochód</strong> – emisje związane z rocznym przebiegiem pojazdu.</li><li><strong>Podróże lotnicze</strong> – szacunkowy wpływ klimatyczny przelotów.</li></ul><p>Obok wykresu znajdziesz dokładniejsze zestawienie emisji w kilogramach oraz procentowy udział każdej kategorii. Dzięki temu łatwo sprawdzisz, czy w Twoim gospodarstwie największe znaczenie ma ogrzewanie, zużycie energii elektrycznej czy transport.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak zmniejszyć swój ślad węglowy?</strong></span></p><p>Ograniczanie emisji nie musi oznaczać rezygnacji z wygody. Często największe korzyści przynoszą działania poprawiające efektywność energetyczną oraz rozsądne planowanie transportu.</p><ul><li><strong>Zmniejsz zużycie energii elektrycznej</strong> – wybieraj energooszczędne urządzenia, wyłączaj niepotrzebne oświetlenie i unikaj zbędnego poboru prądu.</li><li><strong>Zadbaj o izolację domu</strong> – ocieplenie budynku i poprawa szczelności okien mogą ograniczyć zapotrzebowanie na ogrzewanie.</li><li><strong>Rozważ modernizację źródła ciepła</strong> – porównaj dostępne technologie i sprawdź, które rozwiązanie będzie odpowiednie dla Twojego budynku.</li><li><strong>Ogranicz krótkie przejazdy samochodem</strong> – jeśli to możliwe, wybieraj spacer, rower lub transport publiczny.</li><li><strong>Planuj podróże</strong> – łącz kilka spraw w jeden przejazd, a na krótszych trasach rozważ podróż koleją zamiast samolotem.</li><li><strong>Analizuj swoje zużycie</strong> – regularne sprawdzanie rachunków i przebiegu samochodu pomaga zauważyć możliwości oszczędzania.</li></ul><p>Kalkulator dodatkowo wyświetla wskazówki dopasowane do wybranych przez Ciebie źródeł emisji.</p><p><span style="color:hsl(150,75%,60%);"><strong>Czy kalkulator śladu węglowego jest dokładny?</strong></span></p><p>Narzędzie pozwala uzyskać orientacyjny wynik na podstawie wpisanych danych i przyjętych współczynników emisji. Nie jest jednak pełnym audytem klimatycznym ani oficjalnym raportem emisji gazów cieplarnianych. Obliczenia obejmują tylko wybrane obszary codziennego życia. Nie uwzględniają między innymi emisji związanych z produkcją żywności, zakupami, usługami, budową domu czy produkcją samochodu.</p><p>Niektóre współczynniki opisują emisję CO₂, a inne przybliżoną emisję wyrażoną jako CO₂e. Dlatego wynik należy traktować jako uproszczony wskaźnik pomocny w porównywaniu różnych scenariuszy zużycia energii i transportu. Dokładne współczynniki i założenia obliczeń znajdziesz w sekcji „Metodologia i ograniczenia” pod kalkulatorem.</p><p><span style="color:hsl(150,75%,60%);"><strong>Dlaczego warto obliczyć swój ślad węglowy?</strong></span></p><p>Znajomość własnych emisji pomaga lepiej zrozumieć wpływ codziennych wyborów na środowisko. Pozwala również zauważyć, które działania mogą przynieść największą redukcję emisji w konkretnym gospodarstwie domowym. Warto ponownie skorzystać z kalkulatora po zmianie źródła ogrzewania, zakupie bardziej oszczędnego samochodu, termomodernizacji domu lub ograniczeniu zużycia energii.</p><p>Na JutroBezSmogu.pl znajdziesz również inne praktyczne narzędzia ekologiczne, informacje o jakości powietrza i poradniki dotyczące ochrony klimatu. Sprawdź swój wynik, porównuj różne scenariusze i przekonaj się, jak codzienne decyzje mogą pomóc ograniczać emisje gazów cieplarnianych.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Prognoza smogu na najbliższe dni]]></title>
      <link>https://jutrobezsmogu.pl/prognoza-smogu-na-najblizsze-dni</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/prognoza-smogu-na-najblizsze-dni</guid>
      <pubDate>Sat, 14 Nov 2026 14:40:15 GMT</pubDate>
      <dc:creator><![CDATA[Natalia Ozdoba]]></dc:creator>
      <category><![CDATA[Zanieczyszczenia]]></category>
      <description><![CDATA[Sprawdź prognozę smogu na najbliższe 4 dni w swojej miejscowości. Zobacz godzinową jakość powietrza, PM2.5, PM10 i najlepsze pory na spacer.]]></description>
      <content:encoded><![CDATA[<p>Planujesz spacer, trening na świeżym powietrzu albo weekendowy wyjazd? Zanim wyjdziesz z domu, sprawdź, czym będziesz oddychać! Nasza interaktywna prognoza smogu pozwala zobaczyć przewidywaną jakość powietrza w polskich miejscowościach na najbliższe 4 dni.</p><p>Wystarczy wpisać nazwę miasta lub miejscowości, aby sprawdzić prognozowane stężenia pyłów PM2.5 i PM10 oraz europejski indeks jakości powietrza (EAQI). Narzędzie wyświetla szczegółowy wykres godzinowy, kolorowe oznaczenia poziomu zanieczyszczeń i podpowiada, w jakich godzinach warunki do spacerowania mogą być najkorzystniejsze.</p><p>Prognoza korzysta z danych modelowych Copernicus CAMS udostępnianych przez Open-Meteo Air Quality API. Wyniki nie są generowane losowo – pochodzą z rzeczywistego systemu prognozowania zanieczyszczeń atmosferycznych. Wyszukaj swoją miejscowość poniżej i sprawdź, czy w najbliższych dniach będzie czym oddychać!</p><div class="raw-html-embed">
<div id="jbs-forecast">
  <div class="jbf-header">
    <div class="jbf-brand">JUTROBEZSMOGU.PL · PROGNOZA</div>
    <h2>Prognoza smogu na najbliższe dni</h2>
    <p>Sprawdź, jak będzie zmieniać się jakość powietrza w Twojej miejscowości i kiedy warto zaplanować spacer.</p>

    <div class="jbf-searchbox">
      <label for="jbf-search">Wpisz nazwę miejscowości</label>
      <div class="jbf-searchrow">
        <input id="jbf-search" type="search" placeholder="Np. Kraków, Warszawa, Zakopane..." autocomplete="off">
        <button id="jbf-search-btn" type="button">Szukaj</button>
      </div>
      <div id="jbf-suggestions" class="jbf-suggestions" hidden=""></div>
    </div>
  </div>

  <div class="jbf-content">
    <div class="jbf-locationbar">
      <div>
        <span class="jbf-small">WYBRANA LOKALIZACJA</span>
        <div id="jbf-location" class="jbf-location">Warszawa, Polska</div>
      </div>
      <button id="jbf-refresh" type="button">↻ Odśwież</button>
    </div>

    <div id="jbf-message" class="jbf-message" role="status">
      Pobieranie prognozy...
    </div>

    <div id="jbf-results" hidden="">
      <div class="jbf-overview">
        <div class="jbf-overview-main">
          <span class="jbf-small">PROGNOZA NA NAJBLIŻSZĄ GODZINĘ</span>
          <div class="jbf-indexrow">
            <span id="jbf-now-index" class="jbf-index">—</span>
            <span id="jbf-now-label" class="jbf-quality">—</span>
          </div>
          <div id="jbf-now-time" class="jbf-muted">—</div>
        </div>
        <div class="jbf-overview-pollutants">
          <div>
            <span>PM2.5</span>
            <strong id="jbf-now-pm25">—</strong>
            <small>µg/m³</small>
          </div>
          <div>
            <span>PM10</span>
            <strong id="jbf-now-pm10">—</strong>
            <small>µg/m³</small>
          </div>
        </div>
      </div>

      <div class="jbf-section-title">
        <h3>Prognoza na 4 dni</h3>
        <span>Wybierz dzień, aby zobaczyć szczegóły</span>
      </div>

      <div id="jbf-days" class="jbf-days"></div>

      <div class="jbf-chart-head">
        <div>
          <h3>Godzinowa prognoza zanieczyszczeń</h3>
          <p id="jbf-chart-date">—</p>
        </div>
        <div class="jbf-metrics" role="group" aria-label="Wybierz wskaźnik">
          <button type="button" class="active" data-metric="european_aqi">EAQI</button>
          <button type="button" data-metric="pm2_5">PM2.5</button>
          <button type="button" data-metric="pm10">PM10</button>
        </div>
      </div>

      <div class="jbf-chart-card">
        <div id="jbf-chart" class="jbf-chart"></div>
        <div id="jbf-chart-detail" class="jbf-chart-detail">
          Dotknij punktu na wykresie, aby zobaczyć szczegóły.
        </div>
      </div>

      <div class="jbf-walk">
        <div class="jbf-walk-icon">🚶</div>
        <div class="jbf-walk-body">
          <div class="jbf-walk-title">Kiedy najlepiej wybrać się na spacer?</div>
          <div id="jbf-walk-result" class="jbf-walk-result">Analizowanie prognozy...</div>
          
        </div>
      </div>

      <div class="jbf-section-title">
        <h3>Prognoza godzina po godzinie</h3>
        <span>Wartości z modelu CAMS</span>
      </div>

      <div class="jbf-hour-table-wrap">
        <table class="jbf-hour-table">
          <thead>
            <tr>
              <th>Godzina</th>
              <th>Jakość powietrza</th>
              <th>EAQI</th>
              <th>PM2.5</th>
              <th>PM10</th>
            </tr>
          </thead>
          <tbody id="jbf-hour-rows"></tbody>
        </table>
      </div>

      <div class="jbf-legend">
        <span><i style="background:#20a65a"></i>Dobra</span>
        <span><i style="background:#a8cb42"></i>Zadowalająca</span>
        <span><i style="background:#f1c232"></i>Umiarkowana</span>
        <span><i style="background:#f28b39"></i>Zła</span>
        <span><i style="background:#e44848"></i>Bardzo zła</span>
        <span><i style="background:#872a71"></i>Ekstremalnie zła</span>
      </div>
    </div>
  </div>

  <div class="jbf-footer">
    <p><b>Źródło danych:</b> Open-Meteo Air Quality API / Copernicus CAMS Europe. Są to prognozy modelowe, a nie pomiary ze stacji.</p>
    <p>Prognozy są obarczone niepewnością. Wskazówki dotyczące spacerów opierają się wyłącznie na prognozowanym EAQI i nie uwzględniają pogody, pylenia ani indywidualnego stanu zdrowia.</p>
    <p id="jbf-updated">—</p>
  </div>
</div>

<style>
#jbs-forecast {
  --jbf-green:#46C288;
  --jbf-dark:#173d2c;
  --jbf-border:#e3ece6;
  font-family:system-ui,-apple-system,"Segoe UI",sans-serif;
  margin:24px auto;
  background:#fff;
  color:#23382c;
  border:1px solid var(--jbf-border);
  border-radius:20px;
  overflow:hidden;
  box-shadow:0 8px 32px #0000000a;
}
#jbs-forecast * {box-sizing:border-box}
#jbs-forecast button,
#jbs-forecast input {font:inherit}
#jbs-forecast [hidden] {display:none!important}

#jbs-forecast .jbf-header {
  background:linear-gradient(125deg,#153b2a,#277a53);
  padding:30px;
  color:white;
}
#jbs-forecast .jbf-brand {
  font-size:11px;
  font-weight:800;
  letter-spacing:2px;
  color:#9ce9be;
}
#jbs-forecast .jbf-header h2 {
  font-size:clamp(23px,3.8vw,34px);
  line-height:1.2;
  margin:10px 0;
  color:white;
  font-weight:800;
}
#jbs-forecast .jbf-header p {
  font-size:14px;
  line-height:1.6;
  color:#e0f1e7;
  max-width:670px;
  margin:0 0 24px;
}
#jbs-forecast .jbf-searchbox {
  position:relative;
  max-width:650px;
}
#jbs-forecast .jbf-searchbox label {
  display:block;
  margin-bottom:8px;
  font-size:12px;
  font-weight:700;
}
#jbs-forecast .jbf-searchrow {
  display:flex;
  gap:9px;
}
#jbf-search {
  flex:1;
  min-width:0;
  padding:14px 16px;
  background:white;
  color:#213c2d;
  border:1px solid #d9e5de;
  border-radius:10px;
  outline:none;
  font-size:14px;
}
#jbf-search:focus {
  border-color:#46C288;
  box-shadow:0 0 0 3px #46c28840;
}
#jbf-search-btn {
  background:#46C288;
  border:0;
  border-radius:10px;
  padding:12px 21px;
  color:#103e28;
  font-weight:800;
  cursor:pointer;
}
#jbf-search-btn:hover {background:#65d7a0}
#jbs-forecast .jbf-suggestions {
  position:absolute;
  top:100%;
  left:0;
  right:0;
  margin-top:6px;
  background:white;
  color:#244333;
  border-radius:10px;
  box-shadow:0 12px 35px #0003;
  z-index:30;
  max-height:270px;
  overflow-y:auto;
  border:1px solid #e4eee7;
}
#jbs-forecast .jbf-suggestion {
  display:block;
  width:100%;
  text-align:left;
  padding:12px 15px;
  border:0;
  border-bottom:1px solid #eff4f0;
  background:white;
  cursor:pointer;
  color:#23402f;
  font-size:13px;
}
#jbs-forecast .jbf-suggestion:hover {
  background:#eef9f2;
}
#jbs-forecast .jbf-suggestion small {
  display:block;
  margin-top:3px;
  color:#7c8c80;
}

#jbs-forecast .jbf-content {padding:25px}
#jbs-forecast .jbf-locationbar {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  margin-bottom:20px;
}
#jbs-forecast .jbf-small {
  display:block;
  font-size:10px;
  letter-spacing:1.2px;
  font-weight:800;
  color:#6f8c78;
}
#jbs-forecast .jbf-location {
  font-size:21px;
  font-weight:800;
  color:#173c2b;
  margin-top:5px;
}
#jbf-refresh {
  background:#eff8f2;
  border:1px solid #d8eee0;
  border-radius:9px;
  color:#238250;
  padding:10px 14px;
  font-size:12px;
  font-weight:800;
  cursor:pointer;
}
#jbf-refresh:disabled,
#jbf-search-btn:disabled {opacity:.55;cursor:wait}
#jbs-forecast .jbf-message {
  background:#f0f8f3;
  color:#466653;
  padding:15px;
  border-radius:10px;
  font-size:13px;
  margin-bottom:15px;
}
#jbs-forecast .jbf-message.error {
  background:#fff0ed;
  color:#a33a2b;
}

#jbs-forecast .jbf-overview {
  display:flex;
  justify-content:space-between;
  gap:20px;
  padding:25px;
  border:1px solid #e3eee7;
  border-radius:15px;
  background:#f5faf7;
}
#jbs-forecast .jbf-indexrow {
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:13px;
  margin:9px 0;
}
#jbs-forecast .jbf-index {
  font-size:56px;
  font-weight:850;
  line-height:1;
  color:#173e2d;
}
#jbs-forecast .jbf-quality {
  padding:8px 12px;
  border-radius:8px;
  color:white;
  font-size:12px;
  font-weight:800;
}
#jbs-forecast .jbf-muted {
  font-size:12px;
  color:#7b8d80;
}
#jbs-forecast .jbf-overview-pollutants {
  display:flex;
  gap:12px;
  align-items:center;
}
#jbs-forecast .jbf-overview-pollutants>div {
  min-width:115px;
  background:white;
  border:1px solid #e4eee7;
  padding:15px;
  border-radius:12px;
}
#jbs-forecast .jbf-overview-pollutants span,
#jbs-forecast .jbf-overview-pollutants small {
  display:block;
  font-size:11px;
  color:#829186;
}
#jbs-forecast .jbf-overview-pollutants strong {
  display:block;
  font-size:25px;
  color:#244b34;
  margin:4px 0;
}

#jbs-forecast .jbf-section-title {
  display:flex;
  align-items:end;
  justify-content:space-between;
  flex-wrap:wrap;
  gap:8px;
  margin:28px 0 14px;
}
#jbs-forecast .jbf-section-title h3,
#jbs-forecast .jbf-chart-head h3 {
  font-size:19px;
  font-weight:800;
  color:#193f2d;
  margin:0;
}
#jbs-forecast .jbf-section-title span {
  color:#87958a;
  font-size:11px;
}
#jbs-forecast .jbf-days {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:11px;
}
#jbs-forecast .jbf-day {
  border:2px solid #e4eee7;
  border-radius:13px;
  background:white;
  text-align:left;
  padding:15px;
  cursor:pointer;
  color:#24412e;
  min-width:0;
}
#jbs-forecast .jbf-day.active {
  border-color:#46C288;
  background:#f1fbf5;
  box-shadow:0 2px 12px #46c2881a;
}
#jbs-forecast .jbf-day-name {
  display:block;
  font-size:13px;
  font-weight:800;
}
#jbs-forecast .jbf-day-date {
  display:block;
  font-size:11px;
  color:#829186;
  margin-top:4px;
}
#jbs-forecast .jbf-day-value {
  display:block;
  font-size:25px;
  font-weight:850;
  margin:15px 0 6px;
}
#jbs-forecast .jbf-day-label {
  font-size:11px;
  font-weight:700;
}
#jbs-forecast .jbf-day-bar {
  height:5px;
  border-radius:8px;
  margin-top:12px;
}

#jbs-forecast .jbf-chart-head {
  display:flex;
  justify-content:space-between;
  align-items:center;
  flex-wrap:wrap;
  gap:12px;
  margin:29px 0 14px;
}
#jbs-forecast .jbf-chart-head p {
  margin:5px 0 0;
  font-size:12px;
  color:#819086;
}
#jbs-forecast .jbf-metrics {
  display:flex;
  padding:4px;
  background:#eef6f0;
  border-radius:10px;
  gap:4px;
}
#jbs-forecast .jbf-metrics button {
  border:0;
  background:transparent;
  color:#617a69;
  border-radius:7px;
  padding:9px 12px;
  font-size:12px;
  font-weight:800;
  cursor:pointer;
}
#jbs-forecast .jbf-metrics button.active {
  background:#46C288;
  color:white;
}
#jbs-forecast .jbf-chart-card {
  border:1px solid #e2ece5;
  border-radius:14px;
  padding:14px;
}
#jbs-forecast .jbf-chart {
  width:100%;
  overflow-x:auto;
}
#jbs-forecast .jbf-chart svg {
  display:block;
  width:100%;
  min-width:480px;
  height:auto;
}
#jbs-forecast .jbf-chart-detail {
  padding:11px;
  background:#f5f9f6;
  border-radius:8px;
  text-align:center;
  font-size:12px;
  color:#64786b;
  margin-top:8px;
}

#jbs-forecast .jbf-walk {
  display:flex;
  gap:15px;
  padding:22px;
  margin-top:25px;
  border:1px solid #cfeedd;
  background:#effaf3;
  border-radius:14px;
}
#jbs-forecast .jbf-walk-icon {
  font-size:30px;
  line-height:1;
}
#jbs-forecast .jbf-walk-title {
  font-size:16px;
  font-weight:800;
  color:#215638;
}
#jbs-forecast .jbf-walk-result {
  font-size:17px;
  font-weight:800;
  color:#1c7847;
  margin-top:9px;
}
#jbs-forecast .jbf-walk p {
  font-size:12px;
  line-height:1.6;
  color:#64836c;
  margin:8px 0 0;
}

#jbs-forecast .jbf-hour-table-wrap {
  overflow-x:auto;
}
#jbs-forecast .jbf-hour-table {
  width:100%;
  min-width:560px;
  border-collapse:collapse;
  font-size:12px;
}
#jbs-forecast .jbf-hour-table th {
  background:#f3f8f5;
  text-align:left;
  padding:13px;
  color:#637a6a;
}
#jbs-forecast .jbf-hour-table td {
  border-bottom:1px solid #edf2ee;
  padding:12px 13px;
}
#jbs-forecast .jbf-hour-table tr:hover {
  background:#f8fcf9;
}
#jbs-forecast .jbf-hour-table .jbf-pill {
  display:inline-flex;
  gap:7px;
  align-items:center;
  white-space:nowrap;
}
#jbs-forecast .jbf-hour-table .jbf-pill i {
  width:10px;
  height:10px;
  border-radius:50%;
}
#jbs-forecast .jbf-legend {
  display:flex;
  flex-wrap:wrap;
  gap:10px 16px;
  padding:20px 0 0;
}
#jbs-forecast .jbf-legend span {
  display:flex;
  align-items:center;
  gap:6px;
  color:#63776b;
  font-size:11px;
}
#jbs-forecast .jbf-legend i {
  width:11px;
  height:11px;
  border-radius:50%;
}
#jbs-forecast .jbf-footer {
  background:#f5faf7;
  border-top:1px solid #e3eee7;
  padding:18px 25px;
  color:#718478;
  font-size:11px;
  line-height:1.6;
}
#jbs-forecast .jbf-footer p {margin:6px 0}

@media(max-width:650px) {
  #jbs-forecast .jbf-header {padding:22px}
  #jbs-forecast .jbf-content {padding:14px}
  #jbs-forecast .jbf-overview {
    flex-direction:column;
    padding:18px;
  }
  #jbs-forecast .jbf-overview-pollutants>div {flex:1}
  #jbs-forecast .jbf-days {
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  #jbs-forecast .jbf-day {padding:12px}
  #jbs-forecast .jbf-index {font-size:46px}
  #jbs-forecast .jbf-searchrow {gap:5px}
  #jbf-search-btn {padding:12px}
  #jbs-forecast .jbf-chart-head {align-items:flex-start}
  #jbs-forecast .jbf-walk {padding:16px}
}
</style>

<script>
(function () {
  const root = document.getElementById("jbs-forecast");
  if (!root || root.dataset.initialized) return;
  root.dataset.initialized = "1";

  const $ = selector => root.querySelector(selector);
  const $$ = selector => root.querySelectorAll(selector);

  const state = {
    location: {
      name: "Warszawa",
      latitude: 52.2297,
      longitude: 21.0122
    },
    hours: [],
    days: [],
    selectedDay: 0,
    metric: "european_aqi",
    suggestions: [],
    requestId: 0,
    searchId: 0,
    searchTimer: null,
    lastFetch: 0,
    loadedLocation: null
  };

  const CACHE_MS = 15 * 60 * 1000;
  const POLAND = {
    minLat: 49.0,
    maxLat: 55.1,
    minLon: 14.0,
    maxLon: 24.3
  };

  function quality(value) {
    if (!Number.isFinite(value)) return ["Brak danych", "#9aa6a0"];
    if (value <= 20) return ["Dobra", "#20a65a"];
    if (value <= 40) return ["Zadowalająca", "#a8cb42"];
    if (value <= 60) return ["Umiarkowana", "#f1c232"];
    if (value <= 80) return ["Zła", "#f28b39"];
    if (value <= 100) return ["Bardzo zła", "#e44848"];
    return ["Ekstremalnie zła", "#872a71"];
  }

  function fmt(value, decimals = 1) {
    return Number.isFinite(value)
      ? value.toLocaleString("pl-PL", {
          minimumFractionDigits: decimals,
          maximumFractionDigits: decimals
        })
      : "—";
  }

  function localDateKey(date = new Date()) {
    return new Intl.DateTimeFormat("en-CA", {
      timeZone: "Europe/Warsaw",
      year: "numeric",
      month: "2-digit",
      day: "2-digit"
    }).format(date);
  }

  function localHourKey(date = new Date()) {
    const parts = new Intl.DateTimeFormat("en-GB", {
      timeZone: "Europe/Warsaw",
      year: "numeric",
      month: "2-digit",
      day: "2-digit",
      hour: "2-digit",
      hourCycle: "h23"
    }).formatToParts(date);

    const get = type => parts.find(x => x.type === type)?.value;
    return get("year") + "-" + get("month") + "-" +
      get("day") + "T" + get("hour") + ":00";
  }

  function dateLabel(key) {
    const date = new Date(key + "T12:00:00Z");
    return new Intl.DateTimeFormat("pl-PL", {
      day: "numeric",
      month: "long",
      weekday: "long",
      timeZone: "UTC"
    }).format(date);
  }

  function dayShort(key, index) {
    if (index === 0) return "Dzisiaj";
    if (index === 1) return "Jutro";
    const date = new Date(key + "T12:00:00Z");
    return new Intl.DateTimeFormat("pl-PL", {
      weekday: "long",
      timeZone: "UTC"
    }).format(date);
  }

  function showMessage(text, error = false) {
    const element = $("#jbf-message");
    element.textContent = text;
    element.classList.toggle("error", error);
    element.hidden = !text;
  }

  async function getJSON(url, timeout = 15000) {
    const controller = new AbortController();
    const timer = setTimeout(() => controller.abort(), timeout);

    try {
      const response = await fetch(url, {
        signal: controller.signal
      });

      if (!response.ok) {
        throw new Error("Błąd API: " + response.status);
      }

      return await response.json();
    } finally {
      clearTimeout(timer);
    }
  }

  async function searchCities(query) {
    const url = new URL(
      "https://geocoding-api.open-meteo.com/v1/search"
    );
    url.searchParams.set("name", query);
    url.searchParams.set("count", "30");
    url.searchParams.set("language", "pl");
    url.searchParams.set("countryCode", "PL");
    url.searchParams.set("format", "json");

    const data = await getJSON(url);

    return (data.results || [])
      .filter(item =>
        item.country_code === "PL" &&
        Number.isFinite(item.latitude) &&
        Number.isFinite(item.longitude) &&
        item.latitude >= POLAND.minLat &&
        item.latitude <= POLAND.maxLat &&
        item.longitude >= POLAND.minLon &&
        item.longitude <= POLAND.maxLon
      )
      .slice(0, 10);
  }

  function hideSuggestions() {
    $("#jbf-suggestions").hidden = true;
    $("#jbf-suggestions").replaceChildren();
  }

  function renderSuggestions(items) {
    const container = $("#jbf-suggestions");
    container.replaceChildren();

    if (!items.length) {
      const info = document.createElement("div");
      info.className = "jbf-suggestion";
      info.textContent = "Nie znaleziono miejscowości.";
      container.appendChild(info);
      container.hidden = false;
      return;
    }

    items.forEach(item => {
      const button = document.createElement("button");
      button.type = "button";
      button.className = "jbf-suggestion";

      const name = document.createElement("strong");
      name.textContent = item.name;

      const detail = document.createElement("small");
      detail.textContent = [
        item.admin2,
        item.admin1,
        "Polska"
      ].filter(Boolean).join(", ");

      button.append(name, detail);
      button.addEventListener("click", () => {
        chooseCity(item);
      });
      container.appendChild(button);
    });

    container.hidden = false;
  }

  function chooseCity(city) {
    state.location = {
      name: city.name,
      latitude: city.latitude,
      longitude: city.longitude
    };

    $("#jbf-search").value = city.name;
    $("#jbf-location").textContent = city.name + ", Polska";
    hideSuggestions();
    state.selectedDay = 0;
    state.hours = [];
    state.days = [];
    $("#jbf-results").hidden = true;
    loadForecast(true);
  }

  async function handleSearch() {
    const query = $("#jbf-search").value.trim();
    if (query.length < 2) {
      showMessage("Wpisz co najmniej 2 znaki nazwy miejscowości.", true);
      return;
    }

    const id = ++state.searchId;
    $("#jbf-search-btn").disabled = true;

    try {
      const results = await searchCities(query);
      if (id !== state.searchId) return;

      state.suggestions = results;
      renderSuggestions(results);

      if (!results.length) {
        showMessage("Nie znaleziono miejscowości. Spróbuj innej nazwy.", true);
      } else {
        showMessage("");
      }
    } catch (error) {
      if (id === state.searchId) {
        showMessage("Nie udało się wyszukać miejscowości.", true);
      }
    } finally {
      $("#jbf-search-btn").disabled = false;
    }
  }

  $("#jbf-search").addEventListener("input", () => {
    clearTimeout(state.searchTimer);
    const query = $("#jbf-search").value.trim();

    if (query.length < 2) {
      hideSuggestions();
      return;
    }

    state.searchTimer = setTimeout(handleSearch, 350);
  });

  $("#jbf-search").addEventListener("keydown", event => {
    if (event.key === "Enter") {
      event.preventDefault();
      clearTimeout(state.searchTimer);
      handleSearch();
    }
    if (event.key === "Escape") hideSuggestions();
  });

  $("#jbf-search-btn").addEventListener("click", () => {
    clearTimeout(state.searchTimer);
    handleSearch();
  });

  document.addEventListener("click", event => {
    if (!root.contains(event.target)) return;
    if (!event.target.closest(".jbf-searchbox")) {
      hideSuggestions();
    }
  });

  async function fetchForecast(location) {
    const url = new URL(
      "https://air-quality-api.open-meteo.com/v1/air-quality"
    );

    url.searchParams.set("latitude", location.latitude);
    url.searchParams.set("longitude", location.longitude);
    url.searchParams.set(
      "hourly",
      "european_aqi,pm2_5,pm10"
    );
    url.searchParams.set("timezone", "Europe/Warsaw");
    url.searchParams.set("forecast_days", "4");
    url.searchParams.set("domains", "cams_europe");

    const data = await getJSON(url.toString(), 20000);

    if (!data.hourly || !Array.isArray(data.hourly.time)) {
      throw new Error("Brak godzinowej prognozy");
    }

    return data;
  }

  function processForecast(data) {
    const hourly = data.hourly;
    const today = localDateKey();
    const nowHour = localHourKey();

    const hours = hourly.time.map((time, index) => ({
      time,
      date: time.slice(0, 10),
      hour: Number(time.slice(11, 13)),
      european_aqi: hourly.european_aqi?.[index],
      pm2_5: hourly.pm2_5?.[index],
      pm10: hourly.pm10?.[index]
    })).filter(item =>
      item.date >= today &&
      (
        Number.isFinite(item.european_aqi) ||
        Number.isFinite(item.pm2_5) ||
        Number.isFinite(item.pm10)
      )
    );

    const days = [...new Set(hours.map(item => item.date))]
      .slice(0, 4);

    if (!hours.length || !days.length) {
      throw new Error("Brak dostępnych danych prognozy");
    }

    state.hours = hours;
    state.days = days;
    state.selectedDay = 0;

    const upcoming = hours.find(item =>
      item.time >= nowHour &&
      Number.isFinite(item.european_aqi)
    );

    const current = upcoming ||
      hours.find(item => Number.isFinite(item.european_aqi));

    if (current) {
      const [label, color] = quality(current.european_aqi);

      $("#jbf-now-index").textContent =
        fmt(current.european_aqi, 0);
      $("#jbf-now-label").textContent = label;
      $("#jbf-now-label").style.background = color;

      $("#jbf-now-pm25").textContent = fmt(current.pm2_5);
      $("#jbf-now-pm10").textContent = fmt(current.pm10);

      $("#jbf-now-time").textContent =
        "Prognoza na " +
        current.time.replace("T", " ") +
        " · czas polski";
    } else {
      $("#jbf-now-index").textContent = "—";
      $("#jbf-now-label").textContent = "Brak EAQI";
      $("#jbf-now-label").style.background = "#9aa6a0";
      $("#jbf-now-pm25").textContent = "—";
      $("#jbf-now-pm10").textContent = "—";
      $("#jbf-now-time").textContent =
        "Brak indeksu EAQI dla najbliższych godzin";
    }

    $("#jbf-results").hidden = false;
    renderDays();
    renderSelectedDay();
  }

  function dayHours(key) {
    return state.hours.filter(item => item.date === key);
  }

  function renderDays() {
    const container = $("#jbf-days");
    container.replaceChildren();

    state.days.forEach((day, index) => {
      const hours = dayHours(day).filter(item =>
        Number.isFinite(item.european_aqi) &&
        (index !== 0 || item.time >= localHourKey())
      );

      const average = hours.length
        ? hours.reduce((sum, item) =>
            sum + item.european_aqi, 0) / hours.length
        : null;

      const [label, color] = quality(average);

      const button = document.createElement("button");
      button.type = "button";
      button.className = "jbf-day" +
        (state.selectedDay === index ? " active" : "");

      const name = document.createElement("span");
      name.className = "jbf-day-name";
      name.textContent = dayShort(day, index);

      const date = document.createElement("span");
      date.className = "jbf-day-date";
      date.textContent = dateLabel(day);

      const value = document.createElement("span");
      value.className = "jbf-day-value";
      value.textContent = fmt(average, 0);
      value.style.color = color;

      const status = document.createElement("span");
      status.className = "jbf-day-label";
      status.textContent = label;

      const bar = document.createElement("div");
      bar.className = "jbf-day-bar";
      bar.style.background = color;

      button.append(name, date, value, status, bar);

      button.addEventListener("click", () => {
        state.selectedDay = index;
        renderDays();
        renderSelectedDay();
      });

      container.appendChild(button);
    });
  }

  function renderSelectedDay() {
    const day = state.days[state.selectedDay];
    if (!day) return;

    $("#jbf-chart-date").textContent = dateLabel(day);

    const hours = dayHours(day);
    renderChart(hours);
    renderTable(hours);
    renderWalkAdvice(hours);
  }

  function renderChart(hours) {
    const container = $("#jbf-chart");
    container.replaceChildren();

    const metric = state.metric;
    const valid = hours.filter(item =>
      Number.isFinite(item[metric])
    );

    if (!valid.length) {
      container.textContent = "Brak danych dla wybranego wskaźnika.";
      $("#jbf-chart-detail").textContent = "Brak szczegółów.";
      return;
    }

    const svgNS = "http://www.w3.org/2000/svg";
    const width = 800;
    const height = 270;
    const left = 45;
    const right = 20;
    const top = 20;
    const bottom = 45;
    const plotW = width - left - right;
    const plotH = height - top - bottom;

    const values = valid.map(item => item[metric]);
    const max = Math.max(20, ...values);
    const yMax = Math.ceil(max / 20) * 20;

    const svg = document.createElementNS(svgNS, "svg");
    svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
    svg.setAttribute("role", "img");
    svg.setAttribute(
      "aria-label",
      "Godzinowa prognoza " + metric
    );

    function add(tag, attributes, text) {
      const el = document.createElementNS(svgNS, tag);
      Object.entries(attributes).forEach(([key, value]) => {
        el.setAttribute(key, String(value));
      });
      if (text !== undefined) el.textContent = text;
      svg.appendChild(el);
      return el;
    }

    for (let i = 0; i <= 4; i++) {
      const y = top + plotH * i / 4;
      const val = yMax * (1 - i / 4);

      add("line", {
        x1:left, y1:y, x2:width-right, y2:y,
        stroke:"#e4eee7", "stroke-width":1
      });

      add("text", {
        x:left-8, y:y+4,
        "text-anchor":"end",
        "font-size":11,
        fill:"#849388"
      }, String(Math.round(val)));
    }

    const points = valid.map(item => {
      const index = hours.indexOf(item);
      const x = left + (
        hours.length > 1
          ? index / (hours.length - 1) * plotW
          : plotW / 2
      );
      const y = top + plotH * (1 - item[metric] / yMax);
      return {x,y,item};
    });

    if (points.length > 1) {
      const path = points.map((p,i) =>
        (i === 0 ? "M" : "L") +
        p.x.toFixed(1) + " " + p.y.toFixed(1)
      ).join(" ");

      add("path", {
        d:path,
        fill:"none",
        stroke:"#46C288",
        "stroke-width":3,
        "stroke-linejoin":"round",
        "stroke-linecap":"round"
      });
    }

    points.forEach(({x,y,item}) => {
      const [,color] = quality(item.european_aqi);

      const circle = add("circle", {
        cx:x, cy:y, r:5,
        fill:color,
        stroke:"#fff",
        "stroke-width":2,
        tabindex:0,
        role:"button",
        "aria-label":
          item.time.slice(11) + ", " +
          metric + ": " + fmt(item[metric])
      });

      const detail = () => {
        const [label] = quality(item.european_aqi);
        $("#jbf-chart-detail").textContent =
          item.time.slice(11) +
          " · " + label +
          " · EAQI: " + fmt(item.european_aqi,0) +
          " · PM2.5: " + fmt(item.pm2_5) +
          " µg/m³ · PM10: " + fmt(item.pm10) + " µg/m³";
      };

      circle.addEventListener("click", detail);
      circle.addEventListener("keydown", event => {
        if (event.key === "Enter" || event.key === " ") {
          event.preventDefault();
          detail();
        }
      });
    });

    hours.forEach((item,i) => {
      if (item.hour % 3 !== 0) return;
      const x = left + (
        hours.length > 1
          ? i / (hours.length-1) * plotW
          : plotW/2
      );
      add("text", {
        x, y:height-15,
        "text-anchor":"middle",
        "font-size":11,
        fill:"#819287"
      }, String(item.hour).padStart(2,"0")+":00");
    });

    container.appendChild(svg);

    $("#jbf-chart-detail").textContent =
      "Kliknij punkt wykresu, aby sprawdzić godzinową prognozę. " +
      (metric === "european_aqi"
        ? "EAQI – indeks bez jednostki."
        : "Stężenie w µg/m³.");
  }

  function renderTable(hours) {
    const tbody = $("#jbf-hour-rows");
    tbody.replaceChildren();

    hours.forEach(item => {
      const tr = document.createElement("tr");
      const [label,color] = quality(item.european_aqi);

      const hour = document.createElement("td");
      hour.textContent = item.time.slice(11);

      const status = document.createElement("td");
      const pill = document.createElement("span");
      pill.className = "jbf-pill";
      const dot = document.createElement("i");
      dot.style.background = color;
      const name = document.createElement("span");
      name.textContent = label;
      pill.append(dot,name);
      status.appendChild(pill);

      const aqi = document.createElement("td");
      aqi.textContent = fmt(item.european_aqi,0);

      const pm25 = document.createElement("td");
      pm25.textContent = fmt(item.pm2_5);

      const pm10 = document.createElement("td");
      pm10.textContent = fmt(item.pm10);

      tr.append(hour,status,aqi,pm25,pm10);
      tbody.appendChild(tr);
    });
  }

  function renderWalkAdvice(hours) {
    const nowHour = localHourKey();

    const candidates = hours.filter(item =>
      item.hour >= 7 &&
      item.hour <= 20 &&
      item.time >= nowHour &&
      Number.isFinite(item.european_aqi)
    );

    const result = $("#jbf-walk-result");
    const note = $("#jbf-walk-note");

    if (!candidates.length) {
      result.textContent =
        "Brak dostępnych przyszłych godzin do oceny.";
      note.textContent =
        "Wybierz kolejny dzień lub spróbuj ponownie później.";
      return;
    }

    const suitable = candidates.filter(item =>
      item.european_aqi <= 40
    );

    if (!suitable.length) {
      const lowest = candidates.reduce((best,item) =>
        item.european_aqi < best.european_aqi
          ? item : best
      );

      result.textContent =
        "Brak godzin z dobrą lub zadowalającą jakością powietrza.";

      note.textContent =
        "Najniższy prognozowany EAQI w godzinach 7:00–20:00 " +
        "występuje około " + lowest.time.slice(11) +
        " i wynosi " + fmt(lowest.european_aqi,0) +
        ". Nie traktuj tej godziny jako rekomendacji aktywności.";
      return;
    }

    let groups = [];
    let group = [];

    suitable.forEach(item => {
      if (
        group.length &&
        item.hour !== group[group.length-1].hour + 1
      ) {
        groups.push(group);
        group = [];
      }
      group.push(item);
    });

    if (group.length) groups.push(group);

    groups.sort((a,b) => {
      const avgA = a.reduce((s,x)=>s+x.european_aqi,0)/a.length;
      const avgB = b.reduce((s,x)=>s+x.european_aqi,0)/b.length;
      return avgA-avgB || b.length-a.length;
    });

    const best = groups[0];
    const start = best[0].hour;
    const end = best[best.length-1].hour+1;
    const avg = best.reduce((sum,item) =>
      sum+item.european_aqi,0
    )/best.length;

    result.textContent =
      String(start).padStart(2,"0") + ":00–" +
      String(end).padStart(2,"0") + ":00";

    note.textContent =
      "To przedział z relatywnie najkorzystniejszą prognozą " +
      "EAQI spośród godzin z wynikiem nieprzekraczającym 40. " +
      "Średni prognozowany EAQI: " + fmt(avg,0) +
      ". Sprawdź również pogodę i własne potrzeby zdrowotne.";
  }

  async function loadForecast(force = false) {
    const requestId = ++state.requestId;
    const location = {...state.location};
    const locationKey =
      location.latitude + "," + location.longitude;

    $("#jbf-refresh").disabled = true;
    showMessage("Pobieranie prognozy dla " + location.name + "...");

    try {
      if (
        !force &&
        state.loadedLocation === locationKey &&
        Date.now() - state.lastFetch < CACHE_MS &&
        state.hours.length
      ) {
        showMessage("");
        $("#jbf-results").hidden = false;
        return;
      }

      const data = await fetchForecast(location);
      if (requestId !== state.requestId) return;

      processForecast(data);

      state.loadedLocation = locationKey;
      state.lastFetch = Date.now();

      showMessage("");

      $("#jbf-updated").textContent =
        "Ostatnio pobrano: " +
        new Date().toLocaleString("pl-PL", {
          timeZone:"Europe/Warsaw"
        }) + " (czas polski)";
    } catch (error) {
      if (requestId !== state.requestId) return;

      if (state.hours.length &&
          state.loadedLocation === locationKey) {
        showMessage(
          "Nie udało się odświeżyć prognozy. " +
          "Widoczne są wcześniej pobrane dane.",
          true
        );
      } else {
        $("#jbf-results").hidden = true;
        showMessage(
          "Prognoza jest chwilowo niedostępna. " +
          "Spróbuj ponownie później.",
          true
        );
      }
    } finally {
      if (requestId === state.requestId) {
        $("#jbf-refresh").disabled = false;
      }
    }
  }

  $$(".jbf-metrics button").forEach(button => {
    button.addEventListener("click", () => {
      state.metric = button.dataset.metric;

      $$(".jbf-metrics button").forEach(item => {
        item.classList.toggle("active",item===button);
      });

      renderSelectedDay();
    });
  });

  $("#jbf-refresh").addEventListener("click", () => {
    loadForecast(true);
  });

  loadForecast();

  setInterval(() => {
    if (document.visibilityState === "visible") {
      loadForecast(false);
    }
  }, CACHE_MS);
})();
</script>
</div><p>Nasze narzędzie pozwala sprawdzić przewidywaną jakość powietrza w wybranej miejscowości na najbliższe 4 dni. Zamiast ograniczać się do informacji o aktualnym poziomie zanieczyszczeń, możesz zobaczyć, jak sytuacja prawdopodobnie zmieni się w kolejnych godzinach i dniach.</p><p>Prognoza jest pobierana z Open-Meteo Air Quality API, które udostępnia dane europejskiego modelu atmosferycznego Copernicus CAMS. System oblicza przewidywane stężenia zanieczyszczeń na podstawie danych o emisjach, pogodzie i procesach zachodzących w atmosferze.</p><p>Wyniki prezentowane są w formie czterodniowej prognozy, interaktywnego wykresu godzinowego oraz tabeli z wartościami PM2.5, PM10 i EAQI. Dzięki temu możesz szybko ocenić, kiedy jakość powietrza będzie lepsza, a kiedy należy spodziewać się większego zanieczyszczenia.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak korzystać z prognozy jakości powietrza?</strong></span></p><p>Obsługa narzędzia jest prosta i nie wymaga zakładania konta ani instalowania dodatkowych aplikacji.</p><ol><li><strong>Wyszukaj miejscowość</strong> – wpisz nazwę miasta, wsi lub innej polskiej miejscowości i wybierz odpowiednią lokalizację z listy podpowiedzi.</li><li><strong>Sprawdź najbliższą godzinę</strong> – zobacz prognozowany indeks EAQI oraz stężenia PM2.5 i PM10.</li><li><strong>Wybierz dzień</strong> – kliknij jedną z czterech kart, aby przeanalizować prognozę na konkretny dzień.</li><li><strong>Przełącz wskaźnik</strong> – wybierz EAQI, PM2.5 lub PM10, aby zobaczyć jego wartości na wykresie godzinowym.</li><li><strong>Sprawdź godziny spaceru</strong> – przeczytaj podpowiedź dotyczącą godzin z najkorzystniejszą prognozowaną jakością powietrza.</li><li><strong>Przeanalizuj tabelę</strong> – porównaj przewidywane stężenia zanieczyszczeń godzina po godzinie.</li></ol><p>Możesz również użyć przycisku „Odśwież”, aby ponownie pobrać prognozę z API.</p><p><span style="color:hsl(150,75%,60%);"><strong>Co pokazuje prognoza smogu na 4 dni?</strong></span></p><p>Narzędzie przedstawia cztery dni prognozy, rozpoczynając od dnia bieżącego. Każda karta zawiera średnią wartość europejskiego indeksu jakości powietrza dla dostępnych godzin danego dnia oraz kolor informujący o poziomie zanieczyszczenia.</p><p>Po wybraniu konkretnego dnia zobaczysz szczegółowy wykres godzinowy. Możesz sprawdzić, czy przewidywana jakość powietrza będzie poprawiać się rano, pogarszać wieczorem lub pozostawać na podobnym poziomie przez większość dnia.</p><p>W przypadku dzisiejszego dnia średnia na karcie obliczana jest na podstawie dostępnych godzin od bieżącej godziny. Dla kolejnych dni uwzględniane są dostępne wartości godzinowe.</p><p><span style="color:hsl(150,75%,60%);"><strong>Co oznaczają wskaźniki PM2.5, PM10 i EAQI?</strong></span></p><p>Prognoza wykorzystuje trzy wskaźniki, które pomagają ocenić stan powietrza.</p><p><strong>PM2.5</strong> to drobny pył zawieszony składający się z cząstek o średnicy aerodynamicznej nieprzekraczającej 2,5 mikrometra. Ze względu na bardzo małe rozmiary cząstki te mogą docierać głęboko do płuc. Długotrwałe narażenie na podwyższone stężenia PM2.5 wiąże się ze zwiększonym ryzykiem chorób układu oddechowego i krążenia.</p><p><strong>PM10</strong> to pył zawieszony obejmujący cząstki o średnicy aerodynamicznej do 10 mikrometrów. Może pochodzić między innymi ze spalania paliw, transportu, przemysłu oraz pyłu unoszonego z dróg i innych powierzchni.</p><p><strong>EAQI (European Air Quality Index)</strong> to europejski indeks jakości powietrza, który pozwala w prosty sposób ocenić poziom zanieczyszczeń. Im wyższa jego wartość, tym gorsza jakość powietrza.</p><p>Stężenia PM2.5 i PM10 podawane są w mikrogramach na metr sześcienny (µg/m³), natomiast EAQI jest indeksem bez jednostki.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak odczytywać kolory jakości powietrza?</strong></span></p><p>W narzędziu stosujemy sześciostopniową skalę kolorystyczną europejskiego indeksu jakości powietrza:</p><ul><li><strong>Zielony – EAQI od 0 do 20:</strong> dobra jakość powietrza.</li><li><strong>Jasnozielony – EAQI powyżej 20 do 40:</strong> zadowalająca jakość powietrza.</li><li><strong>Żółty – EAQI powyżej 40 do 60:</strong> umiarkowana jakość powietrza.</li><li><strong>Pomarańczowy – EAQI powyżej 60 do 80:</strong> zła jakość powietrza.</li><li><strong>Czerwony – EAQI powyżej 80 do 100:</strong> bardzo zła jakość powietrza.</li><li><strong>Fioletowy – EAQI powyżej 100:</strong> ekstremalnie zła jakość powietrza.</li></ul><p>Kolorowe oznaczenia pozwalają szybko zauważyć, w których godzinach prognozowany poziom zanieczyszczeń będzie wyższy. Warto jednak pamiętać, że kolor nie zastępuje indywidualnej oceny ryzyka zdrowotnego.</p><p><span style="color:hsl(150,75%,60%);"><strong>Kiedy najlepiej wybrać się na spacer?</strong></span></p><p>Jedną z najbardziej praktycznych funkcji naszego narzędzia jest wskazywanie godzin z najkorzystniejszą prognozowaną jakością powietrza. System analizuje przyszłe godziny pomiędzy 7:00 a 20:00 i wyszukuje przedziały, w których prognozowany indeks EAQI nie przekracza 40. Następnie wybiera przedział o najniższej średniej wartości indeksu.</p><p>Jeśli przykładowo rano prognozowany poziom zanieczyszczeń będzie niższy niż po południu, narzędzie może wskazać godziny poranne jako korzystniejsze do aktywności na zewnątrz. Jeżeli żadna z analizowanych godzin nie spełnia przyjętego kryterium, system wyświetla informację o braku godzin z dobrą lub zadowalającą jakością powietrza. Nie oznacza to automatycznego zakazu wychodzenia z domu, ale może być sygnałem, aby ograniczyć intensywny wysiłek na zewnątrz.</p><p>Wskazówka dotyczy wyłącznie jakości powietrza. Przed spacerem warto również sprawdzić temperaturę, opady, wiatr i inne warunki pogodowe.</p><p><span style="color:hsl(150,75%,60%);"><strong>Skąd pochodzą dane do prognozy smogu?</strong></span></p><p>Dane prezentowane na JutroBezSmogu.pl pochodzą z Open-Meteo Air Quality API i europejskiego modelu Copernicus CAMS. Model atmosferyczny wykorzystuje informacje o emisjach zanieczyszczeń, warunkach meteorologicznych oraz procesach transportu i przemian substancji w atmosferze. Na tej podstawie oblicza przewidywane stężenia zanieczyszczeń w kolejnych godzinach.</p><p>Nie są to losowo generowane wartości ani bezpośrednie pomiary ze stacji Głównego Inspektoratu Ochrony Środowiska. To prognozy modelowe, które mogą różnić się od rzeczywistych stężeń obserwowanych w konkretnym miejscu. Model CAMS Europe ma ograniczoną rozdzielczość przestrzenną, dlatego może nie odzwierciedlać dokładnie lokalnych warunków przy ruchliwej ulicy, w dolinie czy w pobliżu konkretnego źródła emisji.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak często aktualizowana jest prognoza jakości powietrza?</strong></span></p><p>Narzędzie sprawdza dostępność nowych danych w odstępach 15-minutowych podczas korzystania ze strony. Możesz również ręcznie odświeżyć prognozę.</p><p>Nie oznacza to jednak, że model Copernicus CAMS publikuje nowe prognozy co 15 minut. Aktualizacja danych źródłowych odbywa się zgodnie z harmonogramem modelu, dlatego kolejne pobrania mogą zwracać te same wartości.</p><p><span style="color:hsl(150,75%,60%);"><strong>Czy prognoza smogu jest zawsze dokładna?</strong></span></p><p>Żadna prognoza atmosferyczna nie daje stuprocentowej pewności. Na rzeczywisty poziom zanieczyszczeń wpływają zmieniające się warunki pogodowe, lokalne emisje oraz zdarzenia, których model nie zawsze może dokładnie przewidzieć.</p><p>Prognozę warto traktować jako pomoc w planowaniu codziennych aktywności, a nie gwarancję określonego stężenia pyłów. Szczególnie przy wysokich poziomach zanieczyszczeń dobrze jest dodatkowo sprawdzić aktualne pomiary z najbliższych stacji monitoringu.</p><p><span style="color:hsl(150,75%,60%);"><strong>Dlaczego warto sprawdzać prognozę smogu przed wyjściem z domu?</strong></span></p><p>Jakość powietrza może wyraźnie zmieniać się w ciągu dnia. Sprawdzenie prognozy pozwala lepiej zaplanować spacer, jazdę na rowerze, bieganie czy inne aktywności na świeżym powietrzu. Informacje o przewidywanych zanieczyszczeniach są szczególnie przydatne dla rodziców małych dzieci, seniorów oraz osób z chorobami układu oddechowego i krążenia.</p><p>Na JutroBezSmogu.pl znajdziesz również mapę jakości powietrza, ranking najbardziej zanieczyszczonych miast Polski oraz poradniki dotyczące smogu, ekologii i ochrony środowiska. Sprawdzaj prognozę regularnie i planuj aktywności z większą świadomością tego, czym oddychasz!</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Ranking najbardziej zanieczyszczonych miast Polski]]></title>
      <link>https://jutrobezsmogu.pl/ranking-najbardziej-zanieczyszczonych-miast-polski</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/ranking-najbardziej-zanieczyszczonych-miast-polski</guid>
      <pubDate>Sat, 14 Nov 2026 12:21:13 GMT</pubDate>
      <dc:creator><![CDATA[Julia Wanat]]></dc:creator>
      <category><![CDATA[Zanieczyszczenia]]></category>
      <description><![CDATA[Ranking najbardziej zanieczyszczonych miast Polski. Sprawdź aktualną jakość powietrza, poziom PM2.5 i PM10 oraz porównaj smog w 40 polskich miastach.]]></description>
      <content:encoded><![CDATA[<p data-pm-slice="1 1 []"><span>Zastanawiasz się, w którym mieście w Polsce oddycha się najgorszym powietrzem? A może chcesz sprawdzić, jak pod względem zanieczyszczenia wypada Twoja miejscowość na tle innych? Nasz interaktywny ranking jakości powietrza pozwala szybko porównać poziom smogu w 40 polskich miastach, w tym w Warszawie, Krakowie, Katowicach, Wrocławiu, Łodzi i Poznaniu.</span></p><p><span>Zestawienie wykorzystuje aktualne dane modelowe udostępniane przez Open-Meteo na podstawie systemu Copernicus CAMS. Uwzględnia europejski indeks jakości powietrza (EAQI) oraz stężenia pyłów zawieszonych PM2.5 i PM10. Wyniki są automatycznie aktualizowane, dzięki czemu możesz obserwować zmieniającą się sytuację i sprawdzać, gdzie jakość powietrza jest obecnie najlepsza, a gdzie najgorsza.</span></p><p><span>Skorzystaj z rankingu poniżej, wyszukaj interesujące Cię miasto i przekonaj się, jak wygląda jego aktualna sytuacja.</span></p><div class="raw-html-embed">
<div id="jbs-ranking">
  <div class="jbs-r-header">
    <div class="jbs-r-eyebrow">JUTRO BEZ SMOGU · NA ŻYWO</div>
    <h2>Ranking jakości powietrza w Polsce</h2>
    <p>Sprawdź, w których miastach powietrze jest dziś najgorsze, a gdzie oddycha się najlepiej.</p>
    <div class="jbs-r-update">
      <span class="jbs-r-pulse"></span>
      <span id="jbs-r-time">Pobieranie danych...</span>
      <button type="button" id="jbs-r-refresh">↻ Odśwież</button>
    </div>
  </div>

  <div class="jbs-r-summary">
    <div class="jbs-r-stat">
      <span>Porównywane miasta</span>
      <strong id="jbs-r-count">—</strong>
      <small>Polska</small>
    </div>
    <div class="jbs-r-stat">
      <span>Najgorsza jakość</span>
      <strong id="jbs-r-worst">—</strong>
      <small id="jbs-r-worst-val">EAQI —</small>
    </div>
    <div class="jbs-r-stat">
      <span>Najlepsza jakość</span>
      <strong id="jbs-r-best">—</strong>
      <small id="jbs-r-best-val">EAQI —</small>
    </div>
    <div class="jbs-r-stat">
      <span>Średni indeks miast</span>
      <strong id="jbs-r-average">—</strong>
      <small>Średnia EAQI z próby</small>
    </div>
  </div>

  <div class="jbs-r-controls">
    <div class="jbs-r-switch" role="group" aria-label="Kolejność rankingu">
      <button class="active" data-order="worst" type="button">Najgorsze powietrze</button>
      <button data-order="best" type="button">Najlepsze powietrze</button>
    </div>
    <div class="jbs-r-filters">
      <label>
        Sortuj według
        <select id="jbs-r-metric">
          <option value="european_aqi">Indeks EAQI</option>
          <option value="pm2_5">Pył PM2.5</option>
          <option value="pm10">Pył PM10</option>
        </select>
      </label>
      <label>
        Wyszukaj miasto
        <input id="jbs-r-search" type="search" placeholder="np. Kraków">
      </label>
    </div>
  </div>

  <div class="jbs-r-scale">
    <span><i style="background:#20a65a"></i>Dobra</span>
    <span><i style="background:#a8cb42"></i>Zadowalająca</span>
    <span><i style="background:#f1c232"></i>Umiarkowana</span>
    <span><i style="background:#f28b39"></i>Zła</span>
    <span><i style="background:#e44848"></i>Bardzo zła</span>
    <span><i style="background:#872a71"></i>Ekstremalnie zła</span>
  </div>

  <div class="jbs-r-table-wrap">
    <table class="jbs-r-table">
      <thead>
        <tr>
          <th>Pozycja</th>
          <th>Miasto</th>
          <th>Jakość powietrza</th>
          <th>EAQI</th>
          <th>PM2.5</th>
          <th>PM10</th>
        </tr>
      </thead>
      <tbody id="jbs-r-rows">
        <tr><td colspan="6" class="jbs-r-loading">Pobieranie aktualnych danych...</td></tr>
      </tbody>
    </table>
  </div>

  <div class="jbs-r-bottom">
    <span id="jbs-r-shown">Oczekiwanie na dane</span>
    <button id="jbs-r-more" type="button" hidden="">Pokaż więcej miast ↓</button>
  </div>

  <div id="jbs-r-error" role="status"></div>

  <div class="jbs-r-info">
    <strong>Jak interpretować ranking?</strong>
    <p>EAQI to europejski indeks jakości powietrza. Im wyższa wartość, tym gorsza jakość powietrza. PM2.5 i PM10 podawane są w µg/m³. Ranking obejmuje wybrane miasta, a nie wszystkie miejscowości w Polsce.</p>    
  </div>
</div>

<style>
#jbs-ranking {
  --jgreen:#46C288;
  --jdark:#163a2c;
  font-family:system-ui,-apple-system,"Segoe UI",sans-serif;  
  margin:25px auto;
  color:#24372d;
  background:#fff;
  border:1px solid #e3eee8;
  border-radius:20px;
  overflow:hidden;
  box-shadow:0 8px 32px #143d2510;
}
#jbs-ranking * {box-sizing:border-box}
#jbs-ranking button,#jbs-ranking input,#jbs-ranking select {
  font:inherit;
}
#jbs-ranking .jbs-r-header {
  padding:29px;
  background:linear-gradient(120deg,#153d2d,#24684a);
  color:white;
}
#jbs-ranking .jbs-r-eyebrow {
  color:#a8efd0;
  font-size:11px;
  letter-spacing:2px;
  font-weight:800;
}
#jbs-ranking h2 {
  color:white;
  margin:9px 0;
  font-size:clamp(23px,3.5vw,33px);
  line-height:1.2;
  font-weight:800;
}
#jbs-ranking .jbs-r-header p {
  color:#d6e9de;
  font-size:14px;
  line-height:1.6;
  margin:0;
}
#jbs-ranking .jbs-r-update {
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:9px;
  margin-top:22px;
  font-size:12px;
  color:#e0f6e9;
}
#jbs-ranking .jbs-r-pulse {
  width:9px;height:9px;
  border-radius:50%;
  background:#65e7a7;
  box-shadow:0 0 0 4px #65e7a733;
}
#jbs-r-refresh {
  margin-left:auto;
  background:#ffffff20;
  color:white;
  border:1px solid #ffffff40;
  padding:8px 13px;
  border-radius:8px;
  cursor:pointer;
}
#jbs-r-refresh:hover {background:#ffffff35}
#jbs-r-refresh:disabled {opacity:.5;cursor:wait}
#jbs-ranking .jbs-r-summary {
  display:grid;
  grid-template-columns:repeat(4,minmax(0,1fr));
  gap:12px;
  padding:18px;
  background:#f4faf7;
}
#jbs-ranking .jbs-r-stat {
  background:#fff;
  border:1px solid #e4eee8;
  border-radius:12px;
  padding:15px;
  min-width:0;
}
#jbs-ranking .jbs-r-stat span {
  display:block;
  font-size:11px;
  color:#6b7b71;
  margin-bottom:8px;
}
#jbs-ranking .jbs-r-stat strong {
  display:block;
  font-size:clamp(16px,2vw,22px);
  color:#183e2c;
  line-height:1.25;
  overflow-wrap:anywhere;
}
#jbs-ranking .jbs-r-stat small {
  display:block;
  margin-top:6px;
  color:#69937c;
  font-size:11px;
}
#jbs-ranking .jbs-r-controls {padding:22px 22px 12px}
#jbs-ranking .jbs-r-switch {
  display:flex;
  gap:5px;
  background:#edf5f0;
  padding:5px;
  border-radius:11px;
  width:fit-content;
  max-width:100%;
}
#jbs-ranking .jbs-r-switch button {
  border:0;
  border-radius:8px;
  background:transparent;
  color:#63786a;
  padding:11px 15px;
  cursor:pointer;
  font-size:13px;
  font-weight:700;
}
#jbs-ranking .jbs-r-switch button.active {
  background:#46C288;
  color:#fff;
  box-shadow:0 2px 7px #46c28850;
}
#jbs-ranking .jbs-r-filters {
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:14px;
  margin-top:18px;
}
#jbs-ranking .jbs-r-filters label {
  font-size:12px;
  font-weight:700;
  color:#53675a;
}
#jbs-ranking select,#jbs-ranking input {
  display:block;
  width:100%;
  margin-top:7px;
  padding:12px;
  border:1px solid #dce8e0;
  border-radius:9px;
  background:#fff;
  color:#263b2e;
  outline:none;
  font-size:13px;
}
#jbs-ranking select:focus,#jbs-ranking input:focus {
  border-color:#46C288;
  box-shadow:0 0 0 3px #46c28820;
}
#jbs-ranking .jbs-r-scale {
  display:flex;
  flex-wrap:wrap;
  gap:9px 15px;
  padding:12px 22px 20px;
  font-size:11px;
  color:#607167;
}
#jbs-ranking .jbs-r-scale span {
  display:flex;align-items:center;gap:5px;
}
#jbs-ranking .jbs-r-scale i {
  display:inline-block;
  width:10px;height:10px;
  border-radius:50%;
}
#jbs-ranking .jbs-r-table-wrap {
  width:100%;
  overflow-x:auto;
}
#jbs-ranking .jbs-r-table {
  width:100%;
  border-collapse:collapse;
  text-align:left;
  font-size:13px;
  min-width:670px;
}
#jbs-ranking .jbs-r-table th {
  background:#f4f8f5;
  color:#64796b;
  font-size:11px;
  font-weight:800;
  padding:14px 12px;
  white-space:nowrap;
}
#jbs-ranking .jbs-r-table td {
  padding:15px 12px;
  border-bottom:1px solid #edf1ee;
  vertical-align:middle;
}
#jbs-ranking .jbs-r-table tbody tr:hover {
  background:#f7fbf8;
}
#jbs-ranking .jbs-r-pos {
  display:inline-flex;
  width:30px;height:30px;
  align-items:center;justify-content:center;
  border-radius:9px;
  background:#eef4f0;
  color:#456452;
  font-weight:800;
}
#jbs-ranking .jbs-r-pos.top {
  background:#fff0e9;
  color:#d45e32;
}
#jbs-ranking .jbs-r-city {font-weight:750;color:#203d2d}
#jbs-ranking .jbs-r-barbox {
  display:flex;
  align-items:center;
  gap:9px;
  min-width:155px;
}
#jbs-ranking .jbs-r-track {
  width:75px;height:8px;
  background:#eaf0ec;
  border-radius:8px;
  overflow:hidden;
}
#jbs-ranking .jbs-r-fill {
  display:block;height:100%;
  border-radius:8px;
}
#jbs-ranking .jbs-r-quality {
  font-size:11px;
  white-space:nowrap;
}
#jbs-ranking .jbs-r-aqi {
  font-size:17px;
  font-weight:800;
}
#jbs-ranking .jbs-r-bottom {
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:20px;
  font-size:12px;
  color:#77867b;
}
#jbs-r-more {
  background:#e4f7ec;
  border:0;
  border-radius:9px;
  padding:11px 15px;
  color:#23794e;
  font-weight:800;
  cursor:pointer;
}
#jbs-r-error {
  padding:0 20px;
  font-size:13px;
  color:#b42318;
}
#jbs-ranking .jbs-r-info {
  background:#f6faf7;
  border-top:1px solid #e4eee7;
  padding:20px 24px;
  font-size:12px;
  line-height:1.65;
  color:#63756a;
}
#jbs-ranking .jbs-r-info strong {color:#315740}
#jbs-ranking .jbs-r-info p {margin:8px 0}
#jbs-ranking .jbs-r-info a {color:#228e59}
#jbs-ranking .jbs-r-loading {
  text-align:center;
  padding:35px!important;
  color:#819188;
}
@media(max-width:650px) {
  #jbs-ranking .jbs-r-header {padding:21px}
  #jbs-ranking .jbs-r-summary {
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:8px;padding:12px;
  }
  #jbs-ranking .jbs-r-stat {padding:12px}
  #jbs-ranking .jbs-r-controls {padding:16px 12px 8px}
  #jbs-ranking .jbs-r-filters {grid-template-columns:1fr}
  #jbs-ranking .jbs-r-switch {width:100%}
  #jbs-ranking .jbs-r-switch button {flex:1;padding:10px 6px;font-size:11px}
  #jbs-ranking .jbs-r-scale {padding:12px}
}
</style>

<script>
(function(){
  const root=document.getElementById("jbs-ranking");
  if(!root||root.dataset.ready)return;
  root.dataset.ready="1";

  const cities=[
    ["Warszawa",52.2297,21.0122],
    ["Kraków",50.0647,19.9450],
    ["Łódź",51.7592,19.4560],
    ["Wrocław",51.1079,17.0385],
    ["Poznań",52.4064,16.9252],
    ["Gdańsk",54.3520,18.6466],
    ["Gdynia",54.5189,18.5305],
    ["Szczecin",53.4285,14.5528],
    ["Bydgoszcz",53.1235,18.0084],
    ["Toruń",53.0138,18.5984],
    ["Lublin",51.2465,22.5684],
    ["Białystok",53.1325,23.1688],
    ["Rzeszów",50.0412,21.9991],
    ["Katowice",50.2649,19.0238],
    ["Gliwice",50.2945,18.6714],
    ["Zabrze",50.3249,18.7857],
    ["Bytom",50.3484,18.9157],
    ["Sosnowiec",50.2863,19.1041],
    ["Rybnik",50.0971,18.5418],
    ["Tychy",50.1372,18.9664],
    ["Częstochowa",50.8118,19.1203],
    ["Kielce",50.8661,20.6286],
    ["Olsztyn",53.7784,20.4801],
    ["Opole",50.6751,17.9213],
    ["Gorzów Wielkopolski",52.7368,15.2288],
    ["Zielona Góra",51.9356,15.5062],
    ["Radom",51.4027,21.1471],
    ["Płock",52.5468,19.7064],
    ["Tarnów",50.0121,20.9858],
    ["Nowy Sącz",49.6218,20.6970],
    ["Bielsko-Biała",49.8224,19.0469],
    ["Jelenia Góra",50.9044,15.7194],
    ["Wałbrzych",50.7714,16.2843],
    ["Koszalin",54.1944,16.1722],
    ["Słupsk",54.4641,17.0287],
    ["Elbląg",54.1522,19.4088],
    ["Suwałki",54.1118,22.9300],
    ["Kalisz",51.7611,18.0910],
    ["Legnica",51.2070,16.1619],
    ["Zakopane",49.2992,19.9496]
  ];

  const $=s=>root.querySelector(s);
  const cacheKey="jbs-ranking-cams-v1";
  const cacheMs=15*60*1000;
  const state={
    data:[],
    order:"worst",
    metric:"european_aqi",
    search:"",
    limit:15
  };

  function quality(v){
    if(v<=20)return ["Dobra","#20a65a"];
    if(v<=40)return ["Zadowalająca","#a8cb42"];
    if(v<=60)return ["Umiarkowana","#f1c232"];
    if(v<=80)return ["Zła","#f28b39"];
    if(v<=100)return ["Bardzo zła","#e44848"];
    return ["Ekstremalnie zła","#872a71"];
  }

  function number(v,digits=1){
    return Number.isFinite(v)
      ?v.toLocaleString("pl-PL",{
        minimumFractionDigits:digits,
        maximumFractionDigits:digits
      })
      :"—";
  }

  function normalized(s){
    return s.toLocaleLowerCase("pl-PL")
      .normalize("NFD")
      .replace(/[\u0300-\u036fł]/g,c=>c==="ł"?"l":"");
  }

  function render(){
    const metric=state.metric;
    const descending=state.order==="worst";
    const all=state.data.filter(x=>Number.isFinite(x[metric]));
    const ranked=all.slice().sort((a,b)=>
      descending
        ?b[metric]-a[metric]
        :a[metric]-b[metric]
    );
    const filtered=ranked.filter(x=>
      normalized(x.name).includes(normalized(state.search))
    );
    const shown=filtered.slice(0,state.limit);
    const tbody=$("#jbs-r-rows");
    tbody.replaceChildren();

    const max=Math.max(1,...all.map(x=>x[metric]));

    shown.forEach((city,i)=>{
      const [label,color]=quality(city.european_aqi);
      const tr=document.createElement("tr");
      const cells=[
        String(i+1),
        city.name,
        label,
        String(Math.round(city.european_aqi)),
        number(city.pm2_5),
        number(city.pm10)
      ];

      cells.forEach((value,j)=>{
        const td=document.createElement("td");

        if(j===0){
          const span=document.createElement("span");
          span.className="jbs-r-pos"+(i<3&&descending?" top":"");
          span.textContent=value;
          td.appendChild(span);
        }else if(j===1){
          td.className="jbs-r-city";
          td.textContent=value;
        }else if(j===2){
          const box=document.createElement("div");
          box.className="jbs-r-barbox";
          const track=document.createElement("div");
          track.className="jbs-r-track";
          const fill=document.createElement("span");
          fill.className="jbs-r-fill";
          fill.style.background=color;
          fill.style.width=Math.max(3,Math.min(100,
            city[metric]/max*100))+"%";
          track.appendChild(fill);
          const text=document.createElement("span");
          text.className="jbs-r-quality";
          text.textContent=label;
          box.append(track,text);
          td.appendChild(box);
        }else{
          td.textContent=value;
          if(j===3)td.className="jbs-r-aqi";
        }
        tr.appendChild(td);
      });
      tbody.appendChild(tr);
    });

    if(!shown.length){
      const tr=document.createElement("tr");
      const td=document.createElement("td");
      td.colSpan=6;
      td.className="jbs-r-loading";
      td.textContent="Brak miast spełniających kryteria.";
      tr.appendChild(td);
      tbody.appendChild(tr);
    }

    $("#jbs-r-shown").textContent=
      "Wyświetlono "+shown.length+" z "+filtered.length+" miast";
    $("#jbs-r-more").hidden=shown.length>=filtered.length;
  }

  function summary(){
    const valid=state.data.filter(x=>
      Number.isFinite(x.european_aqi)
    );
    $("#jbs-r-count").textContent=valid.length;
    if(!valid.length)return;

    const sorted=valid.slice().sort((a,b)=>
      b.european_aqi-a.european_aqi
    );
    const worst=sorted[0];
    const best=sorted[sorted.length-1];
    const avg=valid.reduce((s,x)=>s+x.european_aqi,0)/valid.length;

    $("#jbs-r-worst").textContent=worst.name;
    $("#jbs-r-best").textContent=best.name;
    $("#jbs-r-worst-val").textContent=
      "EAQI "+Math.round(worst.european_aqi);
    $("#jbs-r-best-val").textContent=
      "EAQI "+Math.round(best.european_aqi);
    $("#jbs-r-average").textContent=Math.round(avg);
  }

  async function fetchData(){
    const url=new URL(
      "https://air-quality-api.open-meteo.com/v1/air-quality"
    );
    url.searchParams.set("latitude",cities.map(x=>x[1]).join(","));
    url.searchParams.set("longitude",cities.map(x=>x[2]).join(","));
    url.searchParams.set("current","european_aqi,pm2_5,pm10");
    url.searchParams.set("timezone","Europe/Warsaw");
    url.searchParams.set("forecast_days","1");

    const controller=new AbortController();
    const timer=setTimeout(()=>controller.abort(),20000);
    try{
      const response=await fetch(url,{
        signal:controller.signal
      });
      if(!response.ok)throw new Error("HTTP "+response.status);
      const result=await response.json();
      const array=Array.isArray(result)?result:[result];
      if(array.length!==cities.length){
        throw new Error("Niekompletna odpowiedź API");
      }
      return array.map((r,i)=>({
        name:cities[i][0],
        european_aqi:r.current?.european_aqi,
        pm2_5:r.current?.pm2_5,
        pm10:r.current?.pm10,
        time:r.current?.time
      })).filter(x=>Number.isFinite(x.european_aqi));
    }finally{
      clearTimeout(timer);
    }
  }

  async function load(force=false){
    const button=$("#jbs-r-refresh");
    button.disabled=true;
    $("#jbs-r-error").textContent="";

    try{
      let data=null;
      let saved=Date.now();

      if(!force){
        try{
          const cache=JSON.parse(
            localStorage.getItem(cacheKey)||"null"
          );
          if(cache&&Date.now()-cache.saved<cacheMs){
            data=cache.data;
            saved=cache.saved;
          }
        }catch(e){}
      }

      if(!data){
        $("#jbs-r-time").textContent="Aktualizowanie danych...";
        data=await fetchData();
        saved=Date.now();
        if(!data.length)throw new Error("Brak danych");
        try{
          localStorage.setItem(cacheKey,JSON.stringify({
            saved,data
          }));
        }catch(e){}
      }

      state.data=data;
      summary();
      render();

      const times=data.map(x=>x.time).filter(Boolean).sort();
      const latest=times[times.length-1];

      $("#jbs-r-time").textContent=latest
        ?"Dane modelowe: "+latest.replace("T"," ")+" (czas polski)"
        :"Dane modelowe · pobrano "+
          new Date(saved).toLocaleTimeString("pl-PL");
    }catch(e){
      if(state.data.length){
        $("#jbs-r-time").textContent=
          "Nie udało się odświeżyć danych";
        $("#jbs-r-error").textContent=
          "Pokazujemy poprzednio pobrane wartości.";
      }else{
        $("#jbs-r-time").textContent="Dane niedostępne";
        $("#jbs-r-rows").innerHTML=
          '<tr><td colspan="6" class="jbs-r-loading">'+
          'Nie udało się pobrać danych. Spróbuj ponownie.'+
          '</td></tr>';
      }
    }finally{
      button.disabled=false;
    }
  }

  root.querySelectorAll("[data-order]").forEach(btn=>{
    btn.addEventListener("click",()=>{
      state.order=btn.dataset.order;
      state.limit=15;
      root.querySelectorAll("[data-order]").forEach(b=>
        b.classList.toggle("active",b===btn)
      );
      render();
    });
  });

  $("#jbs-r-metric").addEventListener("change",e=>{
    state.metric=e.target.value;
    state.limit=15;
    render();
  });

  $("#jbs-r-search").addEventListener("input",e=>{
    state.search=e.target.value.trim();
    state.limit=15;
    render();
  });

  $("#jbs-r-more").addEventListener("click",()=>{
    state.limit+=15;
    render();
  });

  $("#jbs-r-refresh").addEventListener("click",()=>load(true));

  load();
  setInterval(()=>load(),cacheMs);
})();
</script>
</div><p>Nasz ranking smogu pozwala porównać aktualną jakość powietrza w 40 wybranych miastach Polski. Narzędzie automatycznie pobiera dane z Open-Meteo Air Quality API, wykorzystującego modele atmosferyczne Copernicus CAMS. Dzięki temu możesz sprawdzić, gdzie powietrze jest obecnie najbardziej zanieczyszczone, a gdzie jego jakość jest najlepsza.</p><p>Ranking uwzględnia europejski indeks jakości powietrza (EAQI) oraz stężenia pyłów zawieszonych PM2.5 i PM10. Dane są sprawdzane automatycznie co 15 minut, a wyniki prezentowane w przejrzystej tabeli z kolorowymi oznaczeniami.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak korzystać z rankingu najbardziej zanieczyszczonych miast?</strong></span></p><p>Obsługa narzędzia jest bardzo prosta. Możesz samodzielnie wybrać, jakie informacje chcesz zobaczyć:</p><ul><li><strong>Najgorsze powietrze</strong> – wyświetla miasta od najbardziej do najmniej zanieczyszczonych.</li><li><strong>Najlepsze powietrze</strong> – odwraca kolejność i pokazuje miejscowości z najniższymi wartościami wybranego wskaźnika.</li><li><strong>Sortowanie według EAQI</strong> – porównuje miasta na podstawie europejskiego indeksu jakości powietrza.</li><li><strong>Sortowanie według PM2.5 lub PM10</strong> – pozwala sprawdzić, gdzie występują najwyższe stężenia konkretnych rodzajów pyłu.</li><li><strong>Wyszukiwarka miast</strong> – umożliwia szybkie odnalezienie interesującej Cię miejscowości.</li><li><strong>Odświeżanie danych</strong> – pozwala ręcznie pobrać najnowsze dostępne informacje.</li></ul><p>W górnej części rankingu znajdziesz również krótkie podsumowanie, które pokazuje liczbę porównywanych miast, miejscowość z najlepszą i najgorszą jakością powietrza oraz średnią wartość indeksu EAQI dla uwzględnionych lokalizacji.</p><p><span style="color:hsl(150,75%,60%);"><strong>Co oznaczają PM2.5, PM10 i EAQI?</strong></span></p><p>W rankingu wykorzystujemy trzy wskaźniki, które pomagają ocenić poziom zanieczyszczenia powietrza.</p><p><strong>PM2.5</strong> to drobne cząstki pyłu zawieszonego o średnicy aerodynamicznej nieprzekraczającej 2,5 mikrometra. Mogą przenikać głęboko do układu oddechowego, a długotrwałe narażenie na ich wysokie stężenia wiąże się ze zwiększonym ryzykiem problemów zdrowotnych.</p><p><strong>PM10</strong> to pył zawieszony obejmujący cząstki o średnicy aerodynamicznej do 10 mikrometrów. Jego źródłem mogą być między innymi spalanie paliw, transport drogowy, przemysł oraz pył unoszony z powierzchni ziemi.</p><p><strong>EAQI (European Air Quality Index)</strong> to europejski indeks jakości powietrza. Ułatwia ocenę zanieczyszczenia za pomocą wartości liczbowej i odpowiedniego koloru. Im wyższy indeks, tym gorsza jakość powietrza.</p><p>Stężenia PM2.5 i PM10 wyrażane są w mikrogramach na metr sześcienny (µg/m³).</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak interpretować kolory jakości powietrza?</strong></span></p><p>Kolory w rankingu odpowiadają następującym przedziałom europejskiego indeksu jakości powietrza:</p><ul><li><strong>Zielony (0–20)</strong> – dobra jakość powietrza.</li><li><strong>Jasnozielony (21–40)</strong> – zadowalająca jakość powietrza.</li><li><strong>Żółty (41–60)</strong> – umiarkowana jakość powietrza.</li><li><strong>Pomarańczowy (61–80)</strong> – zła jakość powietrza.</li><li><strong>Czerwony (81–100)</strong> – bardzo zła jakość powietrza.</li><li><strong>Fioletowy (powyżej 100)</strong> – ekstremalnie zła jakość powietrza.</li></ul><p>Dzięki kolorowym oznaczeniom możesz szybko porównać sytuację w poszczególnych miastach, nawet bez szczegółowej analizy wartości liczbowych.</p><p><span style="color:hsl(150,75%,60%);"><strong>Dlaczego w niektórych miastach Polski smog jest większy?</strong></span></p><p>Na jakość powietrza wpływa wiele czynników, w tym sposób ogrzewania budynków, natężenie ruchu samochodowego, działalność przemysłowa, ukształtowanie terenu i warunki pogodowe.</p><p>W sezonie jesienno-zimowym szczególne znaczenie mają emisje związane z ogrzewaniem domów. Kiedy dodatkowo występuje słaby wiatr lub inwersja temperatury, zanieczyszczenia mogą utrzymywać się blisko powierzchni ziemi, powodując wzrost stężeń pyłów.</p><p>Warto pamiętać, że pozycja miasta w rankingu nie jest stała. Jakość powietrza może zmieniać się w ciągu dnia, dlatego miejscowość znajdująca się dziś na szczycie zestawienia nie musi mieć najgorszego powietrza przez cały rok.</p><p><span style="color:hsl(150,75%,60%);"><strong>Skąd pochodzą dane prezentowane w rankingu?</strong></span></p><p>Ranking wykorzystuje dane z Open-Meteo Air Quality API, oparte na modelach atmosferycznych Copernicus CAMS. Są to aktualne dane modelowe, czyli oszacowania stężeń zanieczyszczeń dla określonych lokalizacji.</p><p>Nie są to bezpośrednie odczyty z fizycznych stacji pomiarowych. Narzędzie służy do orientacyjnego porównywania jakości powietrza w wybranych miastach i nie stanowi oficjalnego rankingu Głównego Inspektoratu Ochrony Środowiska.</p><p>Ranking obejmuje 40 wybranych miast, dlatego nie należy traktować go jako zestawienia wszystkich miejscowości w Polsce.</p><p><span style="color:hsl(150,75%,60%);"><strong>Jak często aktualizowany jest ranking smogu?</strong></span></p><p>Narzędzie automatycznie sprawdza dostępność nowych danych co 15 minut. Możesz również skorzystać z przycisku „Odśwież”, aby ręcznie pobrać aktualne informacje.</p><p>Częstotliwość sprawdzania danych nie oznacza jednak, że sam model atmosferyczny publikuje nowe wartości dokładnie co 15 minut. Aktualność prezentowanych wyników zależy od harmonogramu aktualizacji źródłowego API.</p><p><span style="color:hsl(150,75%,60%);"><strong>Dlaczego warto sprawdzać jakość powietrza?</strong></span></p><p>Regularne monitorowanie poziomu zanieczyszczeń pomaga lepiej planować codzienne aktywności, szczególnie spacery, bieganie i inne formy ruchu na świeżym powietrzu. Informacje o jakości powietrza są szczególnie istotne dla dzieci, seniorów oraz osób z chorobami układu oddechowego i krążenia.</p><p>Na JutroBezSmogu.pl znajdziesz również mapy jakości powietrza, praktyczne kalkulatory ekologiczne i poradniki dotyczące ochrony środowiska. Sprawdzaj aktualne dane, porównuj miasta i dowiaduj się, jak codzienne decyzje wpływają na otaczającą nas przyrodę.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Gdzie bezpiecznie oddać pluszaki? 5 zaufanych miejsc pomagających dzieciom]]></title>
      <link>https://jutrobezsmogu.pl/gdzie-bezpiecznie-oddac-pluszaki-5-zaufanych-miejsc-pomagajacych-dzieciom</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/gdzie-bezpiecznie-oddac-pluszaki-5-zaufanych-miejsc-pomagajacych-dzieciom</guid>
      <pubDate>Sat, 14 Nov 2026 11:46:08 GMT</pubDate>
      <dc:creator><![CDATA[Maja Sośnierz]]></dc:creator>
      <category><![CDATA[Recykling]]></category>
      <description><![CDATA[Nie wiesz, gdzie bezpiecznie oddać pluszaki? Zobacz 5 sprawdzonych miejsc, które przekazują je dzieciom i podpowiadają, jak zrobić to bezpiecznie.]]></description>
      <content:encoded><![CDATA[<p>Masz w domu pluszaki, którymi dziecko już się nie bawi? Zamiast wyrzucać je do kosza, możesz przekazać je w miejsce, w którym sprawdzone zabawki dostaną drugie życie i przyniosą radość innym dzieciom. W artykule przedstawiam pięć zaufanych miejsc, gdzie można bezpiecznie oddać pluszaki, oraz podpowiadam, na co zwrócić uwagę przed przekazaniem darów.</p><p>Pluszaki szybko zapełniają półki, łóżka i pudła. Jeśli masz ich 10, 20 lub 50, sprawdź przed oddaniem, czy są czyste, kompletne i niezniszczone. Odrzuć zabawki z odpadającymi guzikami, dziurami lub trudnymi do usunięcia plamami — takie maskotki mogą stać się dla odbiorcy kłopotem.</p>
<p>Gdzie przekazać pluszaki dzieciom, które ich potrzebują? Oto 5 sprawdzonych miejsc oraz wskazówki, jak przygotować zabawki i o co zapytać przed wizytą. Zasady przyjmowania darów są różne: jedne placówki proszą o wyprane maskotki, inne przyjmują wyłącznie nowe. Dlatego najpierw skontaktuj się z wybranym miejscem — unikniesz niepotrzebnej wyprawy i pomożesz pluszakowi znaleźć dobry dom.</p><h3>Porównanie miejsc, do których można przekazać pluszaki</h3>
<table>
<thead>
<tr>
<th>Miejsce lub akcja</th>
<th>Co warto ustalić przed przekazaniem?</th>
<th>Wymagania dotyczące pluszaków</th>
<th>Przygotowanie i dostarczenie</th>
</tr>
</thead>
<tbody>
<tr>
<td>Fundacja Mam Marzenie</td>
<td>Skontaktuj się z lokalnym oddziałem i zapytaj o aktualną zbiórkę, stan zabawek, pakowanie oraz termin i miejsce dostawy.</td>
<td>Niektóre placówki przyjmują wyłącznie nowe, nieużywane maskotki z metką. Inne wymagania mogą zależeć od oddziału lub akcji.</td>
<td>Jeśli pluszaki są przyjmowane, wybierz czyste, kompletne i nieuszkodzone, wypierz je zgodnie z metką, dokładnie wysusz i zapakuj osobno. Nie zostawiaj ich w szpitalu bez uzgodnienia.</td>
</tr>
<tr>
<td>Lokalna Caritas</td>
<td>Zapytaj, czy placówka przyjmuje pluszaki, ile sztuk potrzebuje oraz gdzie i kiedy je dostarczyć.</td>
<td>Zabawki powinny być czyste, suche, kompletne i bez uszkodzeń. Pluszaki na baterie powinny być sprawne i kompletne.</td>
<td>Posegreguj zabawki, zapakuj do czystych toreb lub kartonów i opisz zawartość. Umów odbiór zamiast zostawiać dary pod drzwiami.</td>
</tr>
<tr>
<td>Dom dziecka lub rodzinna placówka opiekuńcza</td>
<td>Skontaktuj się z opiekunami i uzgodnij liczbę, stan oraz sposób dostawy. Zapytaj też, dla jakiej grupy wiekowej mają być zabawki.</td>
<td>Placówki mogą przyjmować tylko nowe maskotki albo zabawki, które łatwo wyprać. Pluszaki nie powinny mieć uszkodzonych szwów ani luźnych elementów.</td>
<td>Po potwierdzeniu odbioru wypierz maskotki zgodnie z metką, wysusz je i zabezpiecz na czas transportu.</td>
</tr>
<tr>
<td>InPost „Puść w Obieg”</td>
<td>Sprawdź aktualne zasady, rodzaje przyjmowanych maskotek, sposób zabezpieczenia przesyłki i dostępne punkty nadania.</td>
<td>Przekazuj wyłącznie czyste, kompletne i nieuszkodzone zabawki. Mocno przyszyte ozdoby i brak drobnych, odłączanych elementów zwiększają bezpieczeństwo.</td>
<td>W razie potrzeby wypierz pluszaki zgodnie z metką. Zapakuj tylko zadbane zabawki, które mogą posłużyć kolejnemu dziecku.</td>
</tr>
<tr>
<td>Lokalna zbiórka, świetlica lub grupa sąsiedzka</td>
<td>Potwierdź odbiór i ustal liczbę maskotek, wiek dzieci, wymagania, termin zbiórki oraz osobę za nią odpowiedzialną.</td>
<td>Wymagania dotyczące rozmiaru, prania i stanu zabawek ustala organizator lub placówka.</td>
<td>Po uzgodnieniu terminu wypierz i wysusz zabawki, a następnie zapakuj je do czystego worka lub kartonu. Ustal, czy trafią bezpośrednio do dzieci, czy najpierw do świetlicy.</td>
</tr>
</tbody>
</table><h2>Fundacja Mam Marzenie — nowe maskotki dla dzieci w szpitalach</h2><p>Fundacja Mam Marzenie spełnia marzenia ciężko chorych dzieci, a w wybranych akcjach przekazuje upominki i maskotki najmłodszym pacjentom. Zanim oddam pluszaka, sprawdzam potrzeby konkretnego oddziału lub fundacji: <strong>nie każda placówka przyjmuje zabawki</strong>, a ze względów higienicznych niektóre akceptują tylko nowe, nieużywane maskotki z metką. Dlatego kontaktuję się z lokalnym oddziałem i pytam o aktualną zbiórkę, wymagany stan zabawek, sposób pakowania oraz termin i miejsce dostawy.</p><p>Jeśli fundacja nie zbiera pluszaków, nie zostawiam ich w szpitalu bez uzgodnienia — <i>najpierw pytam personel lub organizatora akcji</i>. Gdy placówka je przyjmuje, wybieram maskotki czyste, kompletne i nieuszkodzone. Następnie piorę je zgodnie z instrukcją na metce, dokładnie suszę i pakuję osobno. Dzięki temu mam pewność, że paczka spełnia wymagania i odpowiada potrzebom dzieci.</p><h2>Lokalna Caritas — zabawki dla osób potrzebujących</h2><p>Skontaktuj się z lokalną Caritas telefonicznie lub odwiedź parafię, ponieważ każda placówka ustala własne terminy zbiórek i listę potrzebnych rzeczy. Zanim przyniesiesz pluszaki, zapytaj, czy są potrzebne, ile sztuk można przekazać i gdzie je dostarczyć. Wybierz zabawki <strong>czyste, suche i bez uszkodzeń</strong>; wypierz je zgodnie z metką, a zabawki na baterie sprawdź i przekaż kompletne. Dzięki temu wolontariusze szybciej przygotują je dla dzieci i rodzin.</p>
<p>Przed przekazaniem pluszaków warto sprawdzić następujące kwestie:</p>
<ul>
<li>Czy lokalna placówka Caritas przyjmuje pluszaki i ile sztuk można przekazać.</li>
<li>Gdzie i w jakim terminie dostarczyć zabawki.</li>
<li>Czy zabawki są czyste, suche, kompletne i nieuszkodzone.</li>
</ul>
<blockquote><p>Przekazując pluszaki, dajesz im drugie życie i sprawiasz radość dzieciom. Nawet niewielki dar może mieć wielkie znaczenie.</p></blockquote>
<p>W zależności od oddziału Caritas może przekazać zabawki rodzinom korzystającym z pomocy parafialnej, świetlicom, placówkom opiekuńczym lub dzieciom objętym lokalną zbiórką. Posegreguj pluszaki według rozmiaru i stanu, zapakuj je w czyste torby albo kartony, a następnie opisz zawartość, na przykład: „12 małych maskotek, wyprane”. Zamiast zostawiać dary pod drzwiami, <strong>umów ich odbiór</strong>, aby bezpiecznie trafiły do właściwego miejsca.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Warto zapytać, czy Caritas prowadzi aktualnie zbiórkę dla konkretnej świetlicy lub placówki — wtedy pluszaki można dopasować do potrzeb dzieci, zamiast przekazywać je bez wcześniejszego uzgodnienia.</p></div><h2>Dom dziecka lub rodzinna placówka opiekuńcza — po wcześniejszym uzgodnieniu</h2><figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Oddawanie pluszaków" src="https://jutrobezsmogu.pl/uploads/Oddawanie-pluszakow-f78f750e6f.webp"/></figure><p>Dom dziecka lub rodzinna placówka opiekuńcza może przyjąć pluszaki, ale najpierw pytam opiekunów — telefonicznie lub mailowo — czy ich potrzebują. Ustalam liczbę, stan i sposób dostawy, ponieważ placówki mają różne zasady: niektóre przyjmują tylko nowe maskotki albo takie, które łatwo wyprać.</p>
<p>Przed przekazaniem sprawdzam, czy każdy pluszak jest czysty, suchy i nie ma uszkodzonych szwów, luźnych elementów ani baterii. Jeśli placówka potwierdzi, że przyjmie na przykład 5 lub 10 maskotek, piorę je zgodnie z metką i zabezpieczam na czas transportu. Pytam też, dla jakiej grupy wiekowej mają być zabawki, by dobrać odpowiedni rozmiar i uniknąć niepotrzebnych darów.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Wskazówka: zapytaj, czy placówka może przyjąć pluszaki z metką informującą o sposobie prania — ułatwi to opiekunom utrzymanie zabawek w czystości.</p></div><h2>InPost „Puść w Obieg” — drugie życie dla pluszaków</h2><p>Gdy chcę przekazać pluszaka nowemu właścicielowi, sprawdzam akcję InPost „Puść w Obieg”. Zamiast wyrzucać niepotrzebną zabawkę, mogę podarować ją innemu dziecku. Wybieram maskotki <strong>czyste, kompletne i nieuszkodzone</strong>, a te wymagające odświeżenia piorę zgodnie z instrukcją na metce.</p>
<p>Przed zapakowaniem pluszaków sprawdzam aktualne zasady: jakie maskotki można przekazać, jak je zabezpieczyć i gdzie nadać paczkę. <i>Warunki oraz dostępność punktów mogą się zmieniać, dlatego warto je zweryfikować.</i> Do przesyłki wkładam tylko zadbane zabawki, które bez wahania podarowałabym bliskiej osobie — dzięki temu <strong>posłużą kolejnemu dziecku</strong> i nie będą zalegać w szafie.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Ciekawostka: pluszaki bez odłączanych, drobnych elementów są zwykle bezpieczniejszym wyborem dla młodszych dzieci — przed przekazaniem warto sprawdzić, czy oczy, nos i inne ozdoby są mocno przyszyte.</p></div><h2>Lokalna zbiórka, świetlica lub grupa sąsiedzka — po potwierdzeniu odbioru</h2><p>Lokalna zbiórka, świetlica lub grupa sąsiedzka mogą przyjąć pluszaki, jeśli wcześniej <strong>potwierdzę odbiór</strong>. Piszę do organizatorki albo placówki i pytam, ile maskotek potrzebują, dla dzieci w jakim wieku oraz jakie mają wymagania — na przykład dotyczące rozmiaru, prania i stanu zabawek. Dzięki temu nie zostawiam worka pod drzwiami. Nawet 5 czystych, zadbanych pluszaków przyda się tylko wtedy, gdy ktoś może je odebrać i przechować.</p>
<p>Przed przekazaniem pluszaków sprawdzam kilka ważnych kwestii:</p>
<ul>
<li>ile maskotek potrzeba i dla dzieci w jakim wieku;</li>
<li>jakie są wymagania dotyczące rozmiaru, prania i stanu zabawek;</li>
<li>kto odpowiada za zbiórkę i kiedy się kończy;</li>
<li>czy maskotki trafią bezpośrednio do dzieci, czy najpierw do świetlicy.</li>
</ul>
<blockquote><p>Przekazując pluszaki, warto zadbać o ich czystość i dobry stan. Wcześniejsze ustalenie szczegółów sprawi, że zabawki trafią tam, gdzie są potrzebne.</p></blockquote>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Darowizna zabawek dla dzieci" src="https://jutrobezsmogu.pl/uploads/Darowizna-zabawek-dla-dzieci-bf9ca35b2c.webp"/></figure><p>Po uzgodnieniu terminu i miejsca piorę zabawki zgodnie z metką, suszę je i pakuję do czystego worka lub kartonu. Jeśli grupa organizuje jednorazową akcję, sprawdzam, kto za nią odpowiada, kiedy kończy się zbiórka i czy maskotki trafią prosto do dzieci, czy najpierw do świetlicy. Proszę też o krótkie potwierdzenie odbioru — wystarczy wiadomość: „Dotarły, dziękujemy”.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Florence Nightingale – kobieta, która zrewolucjonizowała pielęgniarstwo]]></title>
      <link>https://jutrobezsmogu.pl/florence-nightingale-kobieta-ktora-zrewolucjonizowala-pielegniarstwo</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/florence-nightingale-kobieta-ktora-zrewolucjonizowala-pielegniarstwo</guid>
      <pubDate>Sat, 14 Nov 2026 11:43:57 GMT</pubDate>
      <dc:creator><![CDATA[Julia Wanat]]></dc:creator>
      <category><![CDATA[Zanieczyszczenia]]></category>
      <description><![CDATA[Florence Nightingale zmieniła oblicze opieki nad chorymi. Zobacz, jak jej idee, statystyki i standardy stworzyły fundamenty nowoczesnego pielęgniarstwa.]]></description>
      <content:encoded><![CDATA[<p>Florence Nightingale zapisała się w historii jako kobieta, która odmieniła oblicze pielęgniarstwa i położyła podwaliny pod nowoczesną opiekę nad chorymi. Jej odwaga, wiedza i determinacja pomogły poprawić warunki leczenia oraz podnieść rangę zawodu pielęgniarki. W artykule przyglądam się jej życiu, przełomowym dokonaniom i dziedzictwu, które inspiruje kolejne pokolenia.</p><p>Urodziłam się 12 maja 1820 roku we Florencji, w zamożnej brytyjskiej rodzinie, która nazwała mnie na cześć miasta. Dorastałam w Anglii, gdzie ojciec, William, zadbał o moją edukację. Uczyłam się matematyki, historii, filozofii i kilku języków — <strong>nietypowo szerokiego zestawu dla dziewczyny w XIX wieku</strong>. Szczególnie lubiłam rozwiązywać problemy i szukać sposobów na poprawę życia innych.</p>
<p>Jako nastolatka postanowiłam pomagać chorym, choć rodzina wolała, żebym prowadziła życie towarzyskie i wyszła dobrze za mąż. W 1837 roku, mając 17 lat, uznałam, że <i>Bóg wzywa mnie do służby</i>. Później podczas podróży po Europie poznawałam szpitale i placówki opiekuńcze; w 1849 roku odwiedziłam między innymi Egipt. Bliscy sprzeciwiali się moim planom, ponieważ pielęgniarstwo miało niską pozycję społeczną i — ich zdaniem — zagrażało mojej reputacji oraz przyszłości.</p>
<h3>38 pielęgniarek i szpital, który wymagał zmian</h3>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Historia pielęgniarstwa" src="https://jutrobezsmogu.pl/uploads/Historia-pielegniarstwa-b08d8a88d9.webp"/></figure><p>W 1850 roku odwiedziłam wspólnotę diakonis w Kaiserswerth w Prusach, która prowadziła szpital i szkoliła pielęgniarki. Wróciłam tam rok później na kilkumiesięczne przygotowanie praktyczne. Następnie, w 1853 roku, objęłam kierownictwo londyńskiej Institution for the Care of Sick Gentlewomen. Mając 33 lata, mogłam wreszcie organizować pracę i poprawiać opiekę nad pacjentami.</p>
<p>W październiku 1854 roku, podczas wojny krymskiej, wyjechałam <strong>z 38 pielęgniarkami</strong> do szpitala wojskowego w Scutari. Zastałyśmy przepełnione oddziały, brak czystej wody i niedostatek podstawowych materiałów. Dlatego oprócz opieki nad chorymi zajęłam się higieną, zaopatrzeniem i organizacją pracy. Doświadczenia wojenne pokazały mi, że skuteczna pomoc wymaga nie tylko współczucia, lecz także <strong>wiedzy, sprawnego zarządzania i analizy danych</strong>.</p><table>
<thead>
<tr>
<th>Rok</th>
<th>Wydarzenie</th>
<th>Dane</th>
</tr>
</thead>
<tbody>
<tr>
<td>1854</td>
<td>Scutari, wojna krymska</td>
<td>38 pielęgniarek pod jej kierownictwem</td>
</tr>
<tr>
<td>1854–1856</td>
<td>Reforma opieki szpitalnej</td>
<td>Higiena, wentylacja, zaopatrzenie, organizacja opieki</td>
</tr>
<tr>
<td>1858</td>
<td>Analiza śmiertelności</td>
<td>Diagram polarny; większość zgonów wiązała z chorobami możliwymi do uniknięcia</td>
</tr>
<tr>
<td>1859</td>
<td><i>Notes on Nursing</i></td>
<td>13 kanonów opieki</td>
</tr>
<tr>
<td>1860</td>
<td>Szkoła przy szpitalu św. Tomasza w Londynie</td>
<td>Profesjonalne kształcenie pielęgniarek</td>
</tr>
<tr>
<td>1820–1910</td>
<td>Życie Florence Nightingale</td>
<td>90 lat</td>
</tr>
</tbody>
</table><h2>Wojna krymska i narodziny nowoczesnej opieki nad rannymi</h2><figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Florence Nightingale" src="https://jutrobezsmogu.pl/uploads/Florence-Nightingale-0712d89a6b.webp"/></figure><p>Wojna krymska (1853–1856) toczyła się głównie między Rosją a koalicją Imperium Osmańskiego, Wielkiej Brytanii, Francji i Sardynii. Podczas oblężenia Sewastopola (październik 1854 – wrzesień 1855) żołnierze umierali nie tylko z powodu ran, lecz także chorób, zimna i złych warunków sanitarnych. <strong>Medycyna wojskowa nie nadążała za potrzebami</strong>, a skala cierpienia wyraźnie to ujawniła.</p>
<p>W 1854 roku brytyjska pielęgniarka Florence Nightingale przybyła na Krym z 38 pielęgniarkami. W szpitalu wojskowym w Scutari — dzisiejszym Üsküdarze w Stambule — zorganizowała opiekę, poprawiła higienę i żywienie oraz zadbała o zaopatrzenie rannych. Nie ograniczyła się do opatrywania ran: usprawniła codzienne funkcjonowanie placówki. Jej działania pokazały, że <strong>czysta pościel, sprawna kuchnia i bezpieczna woda</strong> mogą ratować życie równie skutecznie jak leki.</p>
<h3>Jak uporządkowana opieka uratowała tysiące istnień</h3>
<p>Początkowo w szpitalach brakowało łóżek, ubrań, żywności i środków higienicznych, a przeludnienie sprzyjało zakażeniom. Po wprowadzeniu zmian śmiertelność w Scutari znacznie spadła. Często przytaczane dane wskazują, że zmniejszyła się z około 42 procent zimą 1854–1855 do około 2 procent w kolejnych miesiącach. Historycy podkreślają jednak, że przyczyniły się do tego również działania sanitarne władz i lepsze zaopatrzenie. Nightingale zbierała dane, analizowała przyczyny zgonów i przedstawiała wyniki w czytelnych zestawieniach, dowodząc, że <strong>organizacja opieki jest częścią leczenia</strong>.</p>
<p>Najważniejsze elementy zmian wprowadzonych w szpitalu obejmowały:</p>
<ul>
<li>poprawę higieny i warunków sanitarnych,</li>
<li>zapewnienie lepszego żywienia i zaopatrzenia,</li>
<li>usprawnienie codziennej organizacji opieki,</li>
<li>zbieranie i analizowanie danych o przyczynach zgonów.</li>
</ul>
<p>Wojna krymska przyczyniła się do rozwoju nowoczesnej opieki nad rannymi, opartej na higienie, obserwacji, dokumentacji i wyszkolonym personelu. W 1860 roku Nightingale otworzyła szkołę pielęgniarską przy londyńskim szpitalu St Thomas’, wzmacniając zawodowe podstawy pielęgniarstwa. Jej dziedzictwo to nie tylko wizerunek „damy z lampą”, lecz także przekonanie, że troska, wiedza i dobra organizacja mogą odmienić szpital i ratować życie.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Ciekawostka: Florence Nightingale analizowała dane o zgonach i przedstawiała je na wykresach kołowych, by przekonać władze, że wielu żołnierzy umierało z powodu chorób, którym można zapobiegać — nie tylko od ran odniesionych w walce.</p></div><h2>Statystyka jako narzędzie reformy szpitali</h2><div class="article-special-block" data-special-block="header"><p>Statystyka pomaga planować reformy szpitalne i oceniać ich efekty.</p>
<ul>
<li><strong>Ocena potrzeb:</strong> Dane o liczbie pacjentów i rodzaju świadczeń wskazują, gdzie wprowadzić zmiany.</li>
<li><strong>Pomiar jakości:</strong> Wskaźniki zakażeń i ponownych przyjęć pokazują skuteczność opieki.</li>
<li><strong>Wykorzystanie zasobów:</strong> Analiza obłożenia łóżek oraz czasu pracy personelu pozwala usprawnić organizację.</li>
<li><strong>Kontrola efektów reform:</strong> Porównanie danych sprzed zmian i po ich wdrożeniu pokazuje, czy reforma przyniosła oczekiwane rezultaty.</li>
</ul></div><h2>Dziedzictwo Florence Nightingale w kształceniu pielęgniarek</h2><p>Florence Nightingale pomogła przekształcić pielęgniarstwo z zawodu o niskim prestiżu w dziedzinę opartą na wiedzy i umiejętnościach. W 1860 roku założyła w londyńskim St Thomas’ Hospital szkołę, w której roczna nauka łączyła teorię z opieką nad pacjentami. Ten model zainspirował kolejne placówki i potwierdza, że pielęgniarstwa nie można opanować wyłącznie z podręczników.</p>
<p>Nightingale łączyła współczucie z obserwacją, dbałością o higienę i analizą danych. Podczas wojny krymskiej (1854–1856) wskazywała na przeludnienie, brud i brak wentylacji w szpitalach wojskowych. Zestawiała dane o zgonach z warunkami leczenia, dzięki czemu zwracała uwagę na możliwe do uniknięcia przyczyny śmierci. Jej przykład pokazuje, że uważność na szczegóły pomaga zwiększać bezpieczeństwo pacjentów.</p>
<h3>Troska poparta wiedzą zmienia oblicze opieki nad pacjentem</h3>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Nowoczesna opieka medyczna" src="https://jutrobezsmogu.pl/uploads/Nowoczesna-opieka-medyczna-d3363cee9a.webp"/></figure><p>Współczesne kształcenie pielęgniarek jest znacznie obszerniejsze niż dziewiętnastowieczny kurs, ale nadal łączy wiedzę z praktyką. Uczę się anatomii, farmakologii i profilaktyki zakażeń, a także komunikacji, oceny stanu chorego i pracy zespołowej. Praktyki kliniczne oraz aktualizowanie umiejętności uzupełniają naukę, ponieważ medycyna stale się rozwija. Nightingale pokazała, że profesjonalizm wymaga dobrej organizacji, ciekawości i gotowości do nauki przez całe życie.</p>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Reforma szpitali" src="https://jutrobezsmogu.pl/uploads/Reforma-szpitali-29fa1d76f7.webp"/></figure><p>Co więcej, Nightingale dowiodła, że pielęgniarki mogą inicjować zmiany, a nie tylko wykonywać polecenia. Publikowała, zabierała głos w sprawach zdrowia publicznego i wykorzystywała statystykę, by wspierać reformy. Dziś podobną rolę pełnią badania pielęgniarskie, standardy opieki i rzecznictwo na rzecz pacjentów. Jej przykład przypomina mi, że troska i nauka wzajemnie się uzupełniają: pomagają lepiej rozumieć potrzeby chorego i zapewniać mu bezpieczniejszą opiekę.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Ciekawostka: Nightingale przedstawiała dane o śmiertelności za pomocą kolorowych diagramów kołowych, dzięki którym nawet osoby bez przygotowania statystycznego mogły szybko dostrzec skalę problemu.</p></div>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Pożary lasów zagrażają ujęciom wody pitnej. Skutki mogą utrzymywać się latami]]></title>
      <link>https://jutrobezsmogu.pl/pozary-lasow-zagrazaja-ujeciom-wody-pitnej-skutki-moga-utrzymywac-sie-latami</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/pozary-lasow-zagrazaja-ujeciom-wody-pitnej-skutki-moga-utrzymywac-sie-latami</guid>
      <pubDate>Sat, 14 Nov 2026 11:00:50 GMT</pubDate>
      <dc:creator><![CDATA[Natalia Ozdoba]]></dc:creator>
      <category><![CDATA[Aktualności]]></category>
      <description><![CDATA[Pożary lasów mogą zanieczyścić ujęcia wody pitnej i pogorszyć jej jakość na długie lata. Sprawdź, jakie zagrożenia niosą i dlaczego ich skutki nie kończą się wraz z ogniem.]]></description>
      <content:encoded><![CDATA[<p>Coraz częstsze i rozleglejsze pożary lasów mogą poważnie zakłócać dostawy wody pitnej w Stanach Zjednoczonych — ostrzegli eksperci w materiale <strong>Associated Press</strong> opublikowanym <strong>13 listopada 2026 roku</strong>. Ogień niszczy roślinność i zmienia właściwości gleby, a późniejsze opady spłukują do strumieni i rzek popiół, osady oraz materię organiczną. Zanieczyszczenia utrudniają pracę zakładów uzdatniania, które zwykle czerpią wodę z naturalnie filtrowanych, zalesionych zlewni.</p>
<p>Skala problemu jest istotna, bo — jak podaje AP, powołując się na badania — zalesione obszary zasilają wodą niemal <strong>dwie trzecie</strong> amerykańskich miejscowości. Analiza setek zlewni dotkniętych pożarami wykazała, że pogorszenie jakości wody może utrzymywać się nawet <strong>osiem lat</strong>. Do rzek trafiają między innymi metale ciężkie i związki organiczne, których usuwanie wymaga od wodociągów dodatkowych procedur, a niekiedy czasowego odcięcia poboru z danego ujęcia.</p>
<h3>Popiół i osady komplikują uzdatnianie</h3>
<p>Problem nie kończy się na mętnej wodzie. Osady pochodzące ze spalonych roślin mogą zawierać azot i fosfor, które sprzyjają zakwitom glonów w zbiornikach. Z kolei materia organiczna pozostała po pożarze reaguje z chlorem używanym do dezynfekcji, prowadząc do powstawania ubocznych produktów uzdatniania. Część z nich podlega regulacjom amerykańskiej <strong>Agencji Ochrony Środowiska</strong> ze względu na potencjalne ryzyko zdrowotne, dlatego zakłady muszą najpierw ograniczyć ilość materii organicznej, zanim bezpiecznie przeprowadzą dezynfekcję.</p>
<p>Doświadczenia kilku miast pokazują, jak długo mogą ciągnąć się konsekwencje pożaru. W <strong>Glenwood Springs</strong> w stanie Kolorado po pożarze z 2020 roku władze poszukiwały sposobów ochrony ujęć przed osadami, które miały spłynąć ze zboczy podczas wiosennych deszczy; stan zatwierdził awaryjną pożyczkę w wysokości <strong>8 milionów dolarów</strong> na modernizację systemu. W Fort Collins popiół i osad po pożarze Cameron Peak zmusiły miasto do zamknięcia poboru wody z rzeki i skorzystania z innego źródła.</p>
<h3>Odbudowa infrastruktury i szukanie nowych źródeł</h3>
<p>Szczególnie dotkliwe skutki odczuło <strong>Las Vegas w Nowym Meksyku</strong>, gdzie pożar z 2022 roku uszkodził zlewnię rzeki Gallinas. Ulewne deszcze poniosły popiół i błoto do rzeki oraz zbiorników, a zakład uzdatniania musiał wstrzymać pracę. W kolejnych latach miasto zmagało się z następnymi problemami: po powodzi w 2024 roku wodę dowożono cysternami z sąsiednich miejscowości, a w lutym 2025 roku mieszkańcy przez miesiąc obowiązywało zalecenie jej przegotowywania. Według AP na odbudowę zakładu i poszukiwanie alternatywnych źródeł przeznaczono łącznie <strong>148 milionów dolarów</strong>.</p>
<p>Eksperci zwracają uwagę, że zagrożenie wynika z połączenia zmian w środowisku i ograniczeń infrastruktury: instalacje zaprojektowane do uzdatniania czystej wody rzecznej nie zawsze radzą sobie z nagłym napływem popiołu, osadów i związków organicznych. Dla wodociągów oznacza to konieczność przygotowania planów awaryjnych, zabezpieczania zlewni oraz inwestowania w dodatkowe metody filtracji i zapasowe ujęcia. Przykłady przytoczone przez AP pokazują, że ochrona lasów i ich zlewni ma znaczenie nie tylko dla przyrody, lecz także dla niezawodności dostaw wody dla ludzi.</p>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Budowa kompostownika z desek – prosty sposób na własny kompost]]></title>
      <link>https://jutrobezsmogu.pl/budowa-kompostownika-z-desek-prosty-sposob-na-wlasny-kompost</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/budowa-kompostownika-z-desek-prosty-sposob-na-wlasny-kompost</guid>
      <pubDate>Sat, 14 Nov 2026 10:56:02 GMT</pubDate>
      <dc:creator><![CDATA[Maja Sośnierz]]></dc:creator>
      <category><![CDATA[Kompostowanie]]></category>
      <description><![CDATA[Budowa kompostownika z desek nie wymaga dużych umiejętności. Zobacz, jakie materiały wybrać, jak połączyć elementy i zacząć produkować kompost.]]></description>
      <content:encoded><![CDATA[<p>Kompostowanie to prosty sposób na wykorzystanie resztek roślinnych i wzbogacenie ogrodu w naturalny nawóz. W tym artykule pokażę, jak samodzielnie zbudować kompostownik z desek, nawet jeśli nie masz dużego doświadczenia w majsterkowaniu. Dowiesz się, jakie materiały i narzędzia przygotować oraz na co zwrócić uwagę, aby konstrukcja była trwała i wygodna w użytkowaniu.</p><div class="article-summary" style="background-color: #ecf9f3; border: 3px solid #46C288; padding: 20px; border-radius: 12px;"><b style="margin-bottom:2rem;display:block;">W skrócie:</b><ul>
<li>Zbuduj kompostownik z bezpiecznych desek, około 100 × 100 cm.</li>
<li>Ustaw go w półcieniu, bezpośrednio na równym gruncie.</li>
<li>Zostaw szczeliny wentylacyjne i otwierany front.</li>
<li>Na dnie ułóż gałązki, a potem naprzemiennie odpady mokre i suche.</li>
<li>Utrzymuj wilgotność, napowietrzaj pryzmę i unikaj odpadów odzwierzęcych.</li>
</ul></div><p>Kompostownik z desek pozwala niewielkim kosztem gromadzić resztki z ogrodu i kuchni, a później użyźniać nimi glebę. Ustawiam go w suchym, lekko zacienionym miejscu z dobrym odpływem wody — najlepiej na uboczu, ale w zasięgu ręki. W większości ogrodów wystarczy konstrukcja o wymiarach <strong>około 100 × 100 cm i wysokości 80–100 cm</strong>. Większy pojemnik może mieć do 150 cm wysokości i objętość 1–2 m³.</p>
<p>Do budowy przygotowuję 4 paliki lub kantówki narożne o długości 100–140 cm i przekroju około 5 × 5 cm oraz deski długości 100–120 cm. Potrzebuję też wkrętów do drewna albo gwoździ. Opcjonalnie użyję siatki drucianej, czarnej folii perforowanej, zawiasów do klapy lub drzwiczek oraz ziemi ogrodowej albo torfu. Przed użyciem sprawdzam deski nowe i z odzysku, w tym te z palet; <strong>odrzucam spleśniałe, zabrudzone chemikaliami lub pokryte nieznaną farbą</strong>.</p>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Jak zrobić kompostownik" src="https://jutrobezsmogu.pl/uploads/Jak-zrobic-kompostownik-2db79bc1f7.webp"/></figure><p>Przygotowuję miarkę, ołówek, piłę do drewna, młotek, wkrętarkę lub wiertarkę, poziomicę i papier ścierny albo szlifierkę. Zakładam rękawice ochronne, a do montażu siatki szykuję zszywacz tapicerski lub drut oraz nożyce do drutu. Drewno zabezpieczam impregnatem do zastosowań zewnętrznych albo pokostem lnianym — wybieram wyłącznie środek odpowiedni do ogrodu, by nie zanieczyścić kompostu.</p>
<h3>Swobodny przepływ powietrza i dostęp dżdżownic przyspieszą kompostowanie</h3>
<p>Między deskami zostawiam szczeliny szerokości około 2–3 cm, a dna nie zabudowuję. Dzięki temu kompost styka się z glebą, nadmiar wody odpływa, a do środka docierają mikroorganizmy i dżdżownice. Jeśli obawiam się gryzoni, układam na gruncie drobną siatkę, nie odcinając całkowicie kontaktu z podłożem. Dla łatwiejszego wybierania dojrzałego kompostu montuję zdejmowany front lub luźno wsuwane dolne deski.</p>
<p>Wyrównuję podłoże, wbijam paliki w czterech rogach i sprawdzam poziomicą, czy stoją równo. Następnie przycinam deski i mocuję je do słupków wkrętami lub gwoździami, zachowując zaplanowane odstępy. Jeśli chcę zatrzymać drobne resztki i ograniczyć utratę ciepła, mocuję od wewnątrz siatkę oraz folię perforowaną, nie zasłaniając otworów wentylacyjnych. Pokrywę mogę przymocować zawiasami, by chroniła zawartość przed ulewnym deszczem i nadmiernym wysychaniem.</p>
<p>Na dno wsypuję około 20 cm pociętych gałązek, a następnie cienką warstwę ziemi, torfu lub zeszłorocznego kompostu. Potem dokładam resztki warzyw i owoców, skoszoną trawę, liście, drobne gałązki, fusy z kawy i herbaty oraz pokruszone skorupki jaj. Większe kawałki rozdrabniam, a wilgotne odpady przeplatam suchymi liśćmi lub tekturą bez nadruku; <strong>utrzymuję w ten sposób wilgotność na poziomie około 50–60%</strong>. Nie wrzucam mięsa, ryb, nabiału, tłuszczów, plastiku, szkła ani metalu. Od czasu do czasu delikatnie mieszam zawartość, by dostarczyć tlen.</p><div class="article-special-block" data-special-block="pre-h2"><h3>Jak zbudować drewniany kompostownik ogrodowy</h3>
<figure style="text-align:center;margin:1em 0;"><img decoding="async" loading="lazy" alt="Budowa kompostownika z desek" src="https://jutrobezsmogu.pl/uploads/Budowa-kompostownika-z-desek-a910a533d6.webp"/></figure><p>Zbuduj kompostownik z desek, wybierając odpowiednie miejsce i drewno, a następnie zadbaj o wentylację oraz wygodny dostęp do gotowego kompostu.</p>
<ol>
<li><strong>Wybierz miejsce i wymiary.</strong> Ustaw skrzynię bezpośrednio na gruncie, w lekko zacienionym miejscu, osłoniętym od silnego wiatru i niezagrożonym zalaniem. Sprawdzą się wymiary około 100 × 100 cm i wysokość 80–100 cm. Przy większej ilości odpadów zaplanuj kilka komór.</li>
<li><strong>Przygotuj bezpieczne drewno.</strong> Użyj desek lub palet w dobrym stanie, bez śladów chemikaliów. Usuń farbę i lakier, przeszlifuj ostre krawędzie, a elementy przytnij na wymiar. Nie stosuj impregnatów, które mogłyby zanieczyścić kompost.</li>
<li><strong>Zbuduj stabilną, przewiewną konstrukcję.</strong> Połącz cztery narożne słupki poziomymi deskami za pomocą wkrętów lub gwoździ. Zostaw między deskami szczeliny o szerokości 2–3 cm, aby zapewnić dopływ tlenu i ograniczyć nadmiar wilgoci. Pozostaw dno otwarte, by kompost stykał się z glebą.</li>
<li><strong>Ułatw sobie dostęp do wnętrza.</strong> Z przodu zamontuj wyjmowane listwy lub ścianę na zawiasach. Dzięki temu wygodniej dodasz odpady, napowietrzysz pryzmę i wybierzesz dojrzały kompost. Pokrywa lub daszek ochroni zawartość przed nadmiernym nasiąkaniem podczas deszczu.</li>
<li><strong>Ułóż warstwę startową.</strong> Na dnie rozłóż około 20 cm pociętych gałązek, które poprawią drenaż i cyrkulację powietrza. Następnie dodaj ziemię ogrodową, torf lub dojrzały kompost, po czym układaj na przemian odpady zielone i suche, brunatne materiały.</li>
<li><strong>Dbaj o właściwe warunki kompostowania.</strong> Dodawaj resztki warzyw i owoców, liście, skoszoną trawę, drobne gałęzie, fusy oraz pokruszone skorupki jaj. Większe kawałki rozdrabniaj, utrzymuj wilgotność podobną do wilgotnej gąbki i co kilka tygodni przerzucaj zawartość. Nie wrzucaj mięsa, nabiału, tłuszczów, chorych roślin ani plastiku, szkła i metalu.</li>
</ol></div><h2>Jak wybrać miejsce i przygotować podłoże pod kompostownik</h2><figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Kompostownik ogrodowy DIY" src="https://jutrobezsmogu.pl/uploads/Kompostownik-ogrodowy-DIY-cac5675531.webp"/></figure><p>Kompostownik ustawiam w zacisznej, <strong>półcienistej części ogrodu</strong>, z dala od reprezentacyjnych rabat, ale blisko kuchni. Ostre słońce przesusza pryzmę, a głęboki cień spowalnia jej ogrzewanie. Wybieram równy, niepodmokły teren osłonięty od wiatru. Zostawiam też wygodne dojście, miejsce na taczkę i dostęp do wody na czas suszy.</p>
<p>Najpierw usuwam darń, kamienie i chwasty, a następnie wyrównuję ziemię, nie ubijając jej nadmiernie. Skrzynię stawiam <strong>bezpośrednio na gruncie, bez szczelnego dna</strong>, by dżdżownice i mikroorganizmy docierały do odpadków, a nadmiar wilgoci odpływał. Na spodzie układam około 15 cm drobnych gałązek, które poprawiają drenaż i przepływ powietrza. Na koniec dodaję cienką warstwę ziemi ogrodowej lub dojrzałego kompostu, by zatrzymać wilgoć i dostarczyć pożytecznych organizmów.</p>
<h3>Bez zastojów wody i nieprzyjemnego zapachu — kompostownik, który działa</h3>
<p>Na ciężkiej, gliniastej glebie rozluźniam wierzchnią warstwę i sprawdzam, czy po deszczu woda nie zalega przy skrzyni. Jeśli grunt jest bardzo mokry, wybieram wyżej położone miejsce — głęboka jama ograniczałaby dopływ tlenu. Gdy obawiam się gryzoni, rozkładam na ziemi metalową siatkę o drobnych oczkach, nie zamykając szczelnie dna. Skrzynię z desek lub palet buduję tak, by miała kilkucentymetrowe szczeliny. Z przodu montuję wyjmowane listwy albo drzwiczki, co ułatwia przerzucanie materiału i wybieranie gotowego nawozu.</p>
<p>Planując miejsce, uwzględniam przestrzeń potrzebną do obsługi kompostownika. W większości przydomowych ogrodów sprawdza się skrzynia o bokach około 1 m i wysokości 0,8–1,2 m; przy większej ilości odpadków wygodniejsze będą dwie lub trzy komory. Wybieram czyste drewno, bez toksycznych powłok, a desek z odzysku używam tylko wtedy, gdy nie malowano ich szkodliwą farbą ani nie nasączono nieznanym preparatem. Skrzynię przykrywam pokrywą lub daszkiem, by ograniczyć nadmiar deszczu i przesychanie. Dzięki temu kompost pozostaje <strong>wilgotny jak wyciśnięta gąbka</strong>, <i>przewiewny</i> i bez nieprzyjemnego zapachu.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Wskazówka: po ulewnym deszczu sprawdź, czy wokół kompostownika nie tworzą się kałuże — stojąca woda ogranicza dopływ tlenu i może powodować gnicie oraz nieprzyjemny zapach.</p></div><h2>Montaż konstrukcji: szczeliny wentylacyjne, otwierany front i zabezpieczenie drewna</h2><figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Kompostowanie odpadów" src="https://jutrobezsmogu.pl/uploads/Kompostowanie-odpadow-32d5955c42.webp"/></figure><p>Drewniany kompostownik ustawiam bezpośrednio na gruncie i zostawiam między deskami kilkucentymetrowe szczeliny. Dzięki nim <strong>powietrze krąży, a nadmiar wilgoci odpływa</strong>. Na dnie układam około dziesięciocentymetrową warstwę gałązek, która poprawia drenaż i ułatwia dżdżownicom oraz mikroorganizmom dostęp z gleby.</p>
<p>Przednią ściankę wykonuję jako otwieraną lub wyjmowaną: dolne deski wsuwam w prowadnice albo mocuję całą klapę na zawiasach. Ułatwia to dokładanie odpadów, przerzucanie pryzmy i wybieranie dojrzałego kompostu od dołu. Skrzynia o bokach długości około metra i wysokości bliskiej 90 cm zapewnia wygodną pracę łopatą i widłami, a <strong>prosta pokrywa chroni zawartość przed ulewnym deszczem i zwierzętami</strong>.</p>
<h3>Zdrowy kompost bez przykrych zapachów i zbędnego wysiłku</h3>
<p>Drewno zabezpieczam przed montażem, gdyż później trudno dotrzeć do krawędzi i połączeń. Usuwam starą farbę i lakier, szlifuję deski, a następnie nakładam pokost lniany lub preparat do drewna ogrodowego, który nie zanieczyści kompostu. <strong>Nie używam elementów nasączonych nieznanymi chemikaliami</strong>, zwłaszcza z palet. Co sezon sprawdzam stan desek i wkrętów oraz drożność szczelin.</p>
<p>Po złożeniu kompostownika układam na przemian wilgotne resztki warzyw i owoców oraz suche liście, słomę lub drobne gałązki. Jeśli pryzma nieprzyjemnie pachnie, rozluźniam ją i dodaję suchy materiał; gdy przesycha — delikatnie podlewam. Otwierany front ułatwia kontrolę dolnych warstw, a przewiewne ścianki wspierają rozkład.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Wskazówka: Zamiast impregnować deski od środka, zabezpiecz tylko ich zewnętrzne powierzchnie preparatem bezpiecznym dla ogrodu — ograniczysz kontakt kompostu z powłoką, a jednocześnie spowolnisz niszczenie drewna.</p></div><h2>Co kompostować, aby uzyskać wartościowy nawóz do ogrodu</h2><div class="article-special-block" data-special-block="header"><p>Kompostuj zdrowe odpady roślinne z kuchni i ogrodu. Mieszaj różne składniki, układaj je naprzemiennie i rozdrabniaj, aby przyspieszyć rozkład.</p>
<ul>
<li><strong>Resztki warzyw i owoców</strong> – dodawaj obierki, ogryzki i inne surowe części roślin. Większe kawałki pokrój, by szybciej się rozłożyły.</li>
<li><strong>Fusy i skorupki</strong> – kompostuj fusy po kawie i herbacie, pokruszone, suche skorupki jaj oraz resztki ziół.</li>
<li><strong>Skoszona trawa i zdrowe rośliny</strong> – nadają się trawa, przekwitłe kwiaty, przycięte pędy i chwasty bez nasion. Przeplataj świeżą trawę suchym materiałem, aby zapobiec jej zbiciu i gniciu.</li>
<li><strong>Liście, słoma i siano</strong> – te suche materiały „brunatne” poprawiają strukturę pryzmy. Unikaj liści dębu, orzecha i olchy, ponieważ mogą rozkładać się wolniej lub niekorzystnie wpływać na kompost.</li>
<li><strong>Drobne gałązki, kora, trociny i wióry</strong> – dodawaj je w małych, rozdrobnionych porcjach. Ponadto gałązki na dnie pryzmy utworzą warstwę drenażową i poprawią przepływ powietrza.</li>
<li><strong>Papier i tektura</strong> – kompostuj niezadrukowane kartony, ręczniki papierowe i chusteczki, porwane na kawałki. Nie dodawaj mocno zadrukowanego papieru ani kartonów z chemicznymi powłokami.</li>
<li><strong>Popiół drzewny i muł z oczka wodnego</strong> – dodaj niewielką ilość czystego popiołu drzewnego lub mułu. Nie używaj popiołu z węgla.</li>
</ul></div>]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Prosty dyfuzor do oczyszczalni – zrób go samodzielnie i obniż koszty instalacji]]></title>
      <link>https://jutrobezsmogu.pl/prosty-dyfuzor-do-oczyszczalni-zrob-go-samodzielnie-i-obniz-koszty-instalacji</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/prosty-dyfuzor-do-oczyszczalni-zrob-go-samodzielnie-i-obniz-koszty-instalacji</guid>
      <pubDate>Sat, 14 Nov 2026 10:55:40 GMT</pubDate>
      <dc:creator><![CDATA[Julia Wanat]]></dc:creator>
      <category><![CDATA[Oczyszczanie]]></category>
      <description><![CDATA[Prosty dyfuzor do oczyszczalni wykonasz z łatwo dostępnych materiałów. Zobacz instrukcję montażu, dobór elementów i sposoby na niższy koszt instalacji.]]></description>
      <content:encoded><![CDATA[<p>Prosty dyfuzor do oczyszczalni możesz wykonać samodzielnie, korzystając z łatwo dostępnych materiałów i podstawowych narzędzi. W tym artykule pokażę, jak przygotować taką konstrukcję krok po kroku, na co zwrócić uwagę podczas montażu i jak uniknąć typowych błędów. Dzięki temu sprawdzisz, czy własnoręcznie wykonany dyfuzor pomoże obniżyć koszty instalacji bez rezygnacji z jej prawidłowego działania.</p><div class="article-summary" style="background-color: #ecf9f3; border: 3px solid #46C288; padding: 20px; border-radius: 12px;"><b style="margin-bottom:2rem;display:block;">W skrócie:</b><ul>
<li>Dyfuzor dostarcza tlen mikroorganizmom i wspiera biologiczne oczyszczanie ścieków.</li>
<li>Konstrukcję trzeba dopasować do dmuchawy, oczyszczalni i zaleceń producenta.</li>
<li>Używaj materiałów odpornych na wilgoć, korozję i kontakt ze ściekami.</li>
<li>Przed montażem sprawdź szczelność połączeń i równomierność napowietrzania.</li>
<li>Regularnie kontroluj i czyść membranę oraz otwory dyfuzora.</li>
<li>Nie wchodź do zbiornika; uruchomienie i testy wykonuj bezpiecznie, zgodnie z instrukcją.</li>
<li>Oszczędności zależą od warunków działki, kosztów eksploatacji i ewentualnego dofinansowania.</li>
</ul></div><p>Dyfuzor napowietrzający rozprasza powietrze w wodzie na <strong>drobne pęcherzyki</strong>. Powietrze z dmuchawy przepływa rurą do membrany lub porowatego elementu, który je rozbija. Drobniejsze pęcherzyki mają większą łączną powierzchnię, dlatego dłużej unoszą się w ściekach i skuteczniej przekazują im tlen.</p>
<p>Dyfuzory zwykle montuje się przy dnie komory napowietrzania, dzięki czemu pęcherzyki unoszą się przez całą warstwę cieczy. Powietrze miesza wodę, a mikroorganizmy zyskują lepszy dostęp do tlenu i zanieczyszczeń organicznych. Tlen wspiera bakterie, które rozkładają te związki.</p>
<h3>Tlen napędza mikroorganizmy i poprawia jakość oczyszczonej wody</h3>
<p>Podczas biologicznego oczyszczania ścieków tlen wspiera utlenianie zanieczyszczeń i nitryfikację, czyli przemianę amoniaku w azotyny, a następnie azotany. <strong>Niedobór tlenu osłabia aktywność mikroorganizmów</strong> i obniża skuteczność oczyszczania, natomiast jego nadmiar zwiększa zużycie energii. Dlatego dopływ powietrza dostosowuje się do obciążenia i potrzeb komory; zależnie od technologii stężenie tlenu rozpuszczonego często utrzymuje się na poziomie około 1–3 mg/l.</p>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Przydomowa oczyszczalnia ścieków" src="https://jutrobezsmogu.pl/uploads/Przydomowa-oczyszczalnia-sciekow-bcae7e8161.webp"/></figure><p>Na skuteczność dyfuzora wpływają wielkość pęcherzyków, głębokość montażu, przepływ powietrza i stan membrany. Choć drobne pęcherzyki mogą poprawiać transfer tlenu, osad i kamień z czasem ograniczają pracę urządzenia, dlatego <strong>trzeba je kontrolować i czyścić</strong>. Sprawny dyfuzor równomiernie napowietrza ścieki, stabilizuje pracę osadu czynnego i pomaga uzyskać lepszą jakość oczyszczonej wody.</p><div class="article-special-block" data-special-block="pre-h2"><h3>Jak samodzielnie wykonać dyfuzor do oczyszczalni</h3>
<p>Dobierz elementy, zbuduj dyfuzor i sprawdź, czy równomiernie napowietrza ścieki.</p>
<ol>
<li><strong>Dopasuj konstrukcję do oczyszczalni.</strong> Sprawdź wymagany przepływ powietrza, wydajność dmuchawy i głębokość montażu. Zachowaj wymaganą średnicę przewodu, aby nie ograniczyć napowietrzania.</li>
<li><strong>Przygotuj odporną, perforowaną rurę.</strong> Wybierz materiał przeznaczony do kontaktu ze ściekami i wykonaj drobne, równomiernie rozmieszczone otwory. Zbyt duże lub nierówne otwory powodują nierówny przepływ i duże pęcherzyki.</li>
<li><strong>Podłącz przewód powietrzny.</strong> Zamocuj rurę do szczelnego króćca i zabezpiecz połączenie przed rozszczelnieniem. Jeśli potrzebujesz obciążenia, wybierz materiał odporny na korozję i ścieki.</li>
<li><strong>Sprawdź szczelność i pęcherzyki.</strong> Przed montażem uruchom dyfuzor w wodzie. Skontroluj połączenia, a następnie sprawdź, czy powietrze wydostaje się równomiernie na całej długości.</li>
<li><strong>Zamontuj dyfuzor i kontroluj jego działanie.</strong> Umieść go w wyznaczonej strefie, nie blokując przepływu ścieków. Obserwuj napowietrzanie i regularnie sprawdzaj otwory pod kątem osadu. Stosuj domowe rozwiązanie tylko wtedy, gdy spełnia wymagania producenta oczyszczalni.</li>
</ol></div><h2>Jakie materiały przygotować do samodzielnej budowy dyfuzora?</h2><figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Napowietrzanie ścieków" src="https://jutrobezsmogu.pl/uploads/Napowietrzanie-sciekow-2d5eab9bd8.webp"/></figure><p>Najpierw przygotowuję korpus, który rozprasza światło albo dźwięk — zależnie od rodzaju dyfuzora. Do fotograficznego wybieram lekką ramkę z listewek, rur PVC lub drutu o średnicy <strong>5–8 mm</strong>. Jako powierzchnię rozpraszającą wykorzystuję białą tkaninę, kalkę techniczną, matową folię albo mleczną płytę z tworzywa o grubości 2–4 mm. Dyfuzor zapachowy wymaga natomiast niewielkiego szklanego naczynia, olejku i patyczków rattanowych.</p>
<p>Materiały dobieram do rozmiaru i miejsca użytkowania. Ramka 60 × 60 cm sprawdzi się podczas fotografowania, a większa, na przykład <strong>90 × 120 cm</strong>, zapewni szerszą powierzchnię miękkiego światła. Do łączenia elementów przygotowuję kątowniki, śruby, opaski zaciskowe albo mocny klej; w wersji przenośnej przydadzą się również zawiasy lub składane łączniki. Przed zakupem sprawdzam wagę materiałów, ich odporność na ciepło oraz łatwość czyszczenia.</p>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Montaż dyfuzora krok po kroku" src="https://jutrobezsmogu.pl/uploads/Montaz-dyfuzora-krok-po-kroku-863d462482.webp"/></figure><p>Osłonę mocuję klipsami, taśmą tekstylną, rzepami lub gumkami, a jej krawędzie wykańczam lamówką, by tkanina się nie strzępiła. Jeśli dyfuzor ma działać przy lampie, wybieram materiał przeznaczony do kontaktu ze źródłem światła i zachowuję <strong>odstęp od żarówki</strong>. Przy mocnej lampie LED podczas prób kontroluję temperaturę. Przygotowuję też miarkę, nożyczki, nóż do tworzyw, wiertarkę, papier ścierny i rękawice ochronne.</p>
<h3>Stwórz dyfuzor po swojemu — od drewna po rattanowe patyczki</h3>
<p>Do dyfuzora akustycznego szykuję panele z drewna, sklejki lub listew oraz wypełnienie z wełny mineralnej albo pianki akustycznej. Grubość panelu i odstępy między elementami wpływają na efekt, dlatego planuję układ na papierze i sprawdzam wymiary ściany. Wełnę osłaniam przewiewną tkaniną, a do montażu dobieram wkręty, kołki odpowiednie do podłoża i kątowniki. Podczas cięcia pylących materiałów zakładam maskę i okulary.</p>
<p>Do prostego dyfuzora zapachowego wybieram szklaną butelkę o pojemności 100–200 ml, bazę do olejków lub olej roślinny, kilka–kilkanaście patyczków rattanowych i lejek. Patyczki powinny wystawać 10–20 cm ponad naczynie; zmieniając ich liczbę, reguluję intensywność zapachu. Przygotowuję również etykietę z nazwą mieszanki i datą, by łatwiej kontrolować termin uzupełnienia płynu.</p>
<p>Na wykończenie przygotowuję papier ścierny o gradacji 120–240, farbę lub lakier odpowiedni do podłoża oraz miękką ściereczkę do usuwania pyłu. Przed złożeniem sprawdzam stabilność i równość elementów, a także usuwam ostre krawędzie. Dzięki temu dopasowuję dyfuzor do swoich potrzeb i unikam zbędnych zakupów oraz poprawek.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Wskazówka: do dyfuzora w oczyszczalni wybieraj materiały odporne na wilgoć, korozję i kontakt ze ściekami — elementy przeznaczone do lamp, fotografii lub aromaterapii nie muszą nadawać się do napowietrzania.</p></div><h2>Montaż krok po kroku: jak wykonać dyfuzor do przydomowej oczyszczalni?</h2><p>Sprawdzam instrukcję oczyszczalni i dobieram dyfuzor do modelu oraz wydajności dmuchawy. Przygotowuję dyfuzor membranowy, przewód powietrzny, opaskę zaciskową i klucz, po czym odłączam zasilanie dmuchawy. Jeśli zbiornik jest zamknięty, zapewniam wentylację i nie wchodzę do środka — mogą się tam gromadzić niebezpieczne gazy.</p>
<p>Najpierw lokalizuję króciec doprowadzający powietrze, a następnie sprawdzam przewód pod kątem pęknięć, zagięć i zatorów. Mocuję go do dyfuzora, zaciskam opaskę i ustawiam element stabilnie na dnie komory, zgodnie z instrukcją. Membrana nie może dotykać ścian ani osadu, a przewód nie powinien naprężać połączenia. Nie przerabiam zbiornika ani instalacji, ponieważ szczelność i prawidłowy przepływ powietrza wspierają pracę bakterii tlenowych.</p>
<h3>Równomierne bąbelki i stabilna praca bez przykrych zapachów</h3>
<p>Po zamocowaniu dyfuzora uruchamiam dmuchawę i sprawdzam, czy bąbelki równomiernie unoszą się nad membraną. Nierówne napowietrzanie, syczenie lub brak bąbelków mogą oznaczać nieszczelność, zatkaną membranę albo awarię dmuchawy. W takiej sytuacji wyłączam urządzenie i kontroluję połączenia. Nie zwiększam ciśnienia na chybił trafił, bo mogłoby to uszkodzić dyfuzor lub zakłócić pracę oczyszczalni.</p>
<figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Samodzielna budowa dyfuzora" src="https://jutrobezsmogu.pl/uploads/Samodzielna-budowa-dyfuzora-85efeb5bfd.webp"/></figure><p>Na koniec sprawdzam, czy przewód jest stabilny, a dyfuzor pozostaje zanurzony i nie przesuwa się podczas pracy. Zapisuję datę montażu i model części, by zaplanować przeglądy. Czyszczę lub wymieniam membranę zgodnie z instrukcją producenta i jej stanem. Sprawny dyfuzor wspiera tlenowe oczyszczanie ścieków, ogranicza ryzyko przykrych zapachów i pomaga utrzymać stabilną pracę przydomowej oczyszczalni.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Wskazówka: Przed montażem sprawdź zalecane przez producenta ciśnienie robocze i wydajność dmuchawy — źle dobrany dyfuzor może napowietrzać nierównomiernie, nawet jeśli wszystkie połączenia są szczelne.</p></div><h2>Ile można zaoszczędzić i jak bezpiecznie przetestować instalację?</h2><div class="article-special-block" data-special-block="header"><p>Poznaj sposoby na obniżenie kosztów przydomowej oczyszczalni oraz bezpieczne zasady jej uruchamiania i kontroli.</p>
<ul>
<li><strong>Porównaj koszty w dłuższej perspektywie.</strong> Biologiczna oczyszczalnia z montażem kosztuje około 15–19 tys. zł, a jej eksploatacja — około 500 zł rocznie. Tymczasem wywóz nieczystości z szamba może kosztować 4–6 tys. zł rocznie, więc inwestycja może zwrócić się po 2–3 latach. Ostateczne koszty zależą od warunków działki i liczby mieszkańców.</li>
<li><strong>Sprawdź możliwość dofinansowania.</strong> Gminy i Wojewódzkie Fundusze Ochrony Środowiska i Gospodarki Wodnej mogą dofinansować biologiczne oczyszczalnie spełniające wymagane normy. Zwykle nie obejmują dotacjami tradycyjnych szamb ani prostych oczyszczalni drenażowych. Dlatego przed zakupem sprawdź lokalne zasady i wymagane dokumenty.</li>
<li><strong>Dopasuj rozwiązanie do działki.</strong> Badania geotechniczne określą rodzaj gruntu i poziom wód gruntowych, a także pomogą dobrać sposób odprowadzania oczyszczonej wody. W trudnych warunkach rozważ rozsączanie w nasypie lub instalację z pompą. Z kolei odprowadzanie wody do cieków wymaga spełnienia przepisów. Dobry dobór ogranicza ryzyko kosztownych przeróbek.</li>
<li><strong>Testuj instalację po prawidłowym montażu.</strong> Uruchomienie i kontrolę przeprowadź zgodnie z instrukcją producenta, najlepiej z instalatorem. Sprawdź szczelność zbiornika i połączeń, działanie napowietrzania i odpływu oraz to, czy nie ma wycieków, nietypowych dźwięków ani uciążliwego zapachu. Nigdy nie wchodź do zbiornika, ponieważ mogą gromadzić się w nim niebezpieczne gazy.</li>
<li><strong>Zapewnij oczyszczalni odpowiednie warunki pracy.</strong> Nie wlewaj do kanalizacji chloru ani silnych środków dezynfekujących, bo mogą zaburzyć pracę mikroorganizmów. Zamiast nich wybieraj łagodniejsze lub ekologiczne preparaty. Ponadto regularnie kontroluj system i zlecaj usuwanie osadu zgodnie z instrukcją oraz lokalnymi wymaganiami.</li>
</ul></div><div class="article-qa">]]></content:encoded>
    </item>
    <item>
      <title><![CDATA[Czy agawa może zimować na dworze? Skuteczna ochrona przed mrozem]]></title>
      <link>https://jutrobezsmogu.pl/czy-agawa-moze-zimowac-na-dworze-skuteczna-ochrona-przed-mrozem</link>
      <guid isPermaLink="true">https://jutrobezsmogu.pl/czy-agawa-moze-zimowac-na-dworze-skuteczna-ochrona-przed-mrozem</guid>
      <pubDate>Sat, 14 Nov 2026 10:55:24 GMT</pubDate>
      <dc:creator><![CDATA[Julia Wanat]]></dc:creator>
      <category><![CDATA[Zimowanie]]></category>
      <description><![CDATA[Czy agawa może zimować na dworze? Sprawdzone sposoby ochrony przed mrozem i zabezpieczenia rośliny pomogą jej bezpiecznie przetrwać nawet zimę.]]></description>
      <content:encoded><![CDATA[<p>Czy agawa może zimować na dworze? To zależy przede wszystkim od gatunku, lokalnych warunków i skutecznej ochrony przed mrozem. W artykule wyjaśniam, które agawy mają szansę przetrwać zimę w ogrodzie, jak przygotować je na niskie temperatury i czego unikać, by nie zaszkodzić roślinie. Podpowiadam też, kiedy bezpieczniej przenieść agawę do chłodnego, jasnego pomieszczenia.</p><p>Przed wyborem agawy do ogrodu sprawdzam jej nazwę gatunkową i <strong>minimalną temperaturę zimowania</strong>, ponieważ mrozoodporność zależy od gatunku oraz warunków uprawy. Odporne agawy znoszą krótkie spadki temperatury do około –15°C, a agawa parry’ego (<i>Agave parryi</i>) — nawet w okolice –20°C. To wartości orientacyjne: wilgotna gleba i zimny wiatr mogą uszkodzić roślinę szybciej niż sam mróz.</p>
<p>Znaczenie ma również pochodzenie agawy. Gatunki z suchych, wyżej położonych terenów Meksyku i południowo-zachodnich Stanów Zjednoczonych zwykle lepiej znoszą chłód niż rośliny z obszarów tropikalnych. Szukam okazów o zwartej rozecie i sztywnych, grubych liściach, a następnie porównuję wiarygodne opisy, ponieważ podobne odmiany mogą różnić się mrozoodpornością o kilka stopni.</p>
<h3>Mróz jej niestraszny, jeśli korzenie pozostaną suche</h3>
<p>Do odporniejszych gatunków należą agawa parry’ego, agawa havardiana (<i>Agave havardiana</i>) i agawa neomexicana (<i>Agave neomexicana</i>). W zależności od stanowiska znoszą krótkie mrozy rzędu –15 do –20°C. Chłód toleruje także agawa montana (<i>Agave montana</i>), choć jej wymagania warto sprawdzić dla konkretnej odmiany. Na etykiecie upewniam się, że podana temperatura dotyczy rośliny rosnącej w gruncie — <strong>korzenie agawy w donicy przemarzają łatwiej</strong>.</p>
<p>Nawet mrozoodporną agawę sadzę w pełnym słońcu i <strong>przepuszczalnej glebie</strong>, najlepiej na lekkim wzniesieniu. Żwir lub gruboziarnisty piasek ograniczają ryzyko gnicia korzeni podczas zimowych opadów. Przed zakupem porównuję lokalne minima temperatur z deklarowaną odpornością gatunku i zostawiam zapas co najmniej 3–5°C. Dzięki temu oceniam, czy roślina przezimuje w ogrodzie bez dodatkowej osłony.</p><div class="article-special-block" data-special-block="pre-h2"><h3>Jak przygotować agawę do zimowania na zewnątrz</h3>
<p>Zimuj agawę w gruncie tylko wtedy, gdy gatunek znosi mróz, a stanowisko i osłona chronią go przed wilgocią oraz chłodem.</p>
<ol>
<li><strong>Sprawdź odporność gatunku.</strong> Ustal, jakie temperatury znosi agawa. Jeśli źle toleruje mróz, przenieś ją do jasnego, chłodnego pomieszczenia — osłona nie zagwarantuje jej przetrwania na zewnątrz.</li>
<li><strong>Zapewnij suche podłoże i odpływ wody.</strong> Ogranicz podlewanie przed zimą i usuń liście zalegające wokół rośliny. Jeśli ziemia zatrzymuje wilgoć, osłoń ją przed deszczem i śniegiem, ale nie blokuj odpływu.</li>
<li><strong>Osłoń roślinę przed opadami.</strong> Nad agawą zamontuj daszek z przezroczystego materiału i pozostaw otwarte boki, aby zapewnić przewiew. Nie owijaj szczelnie liści folią, bo skraplająca się wilgoć sprzyja gniciu.</li>
<li><strong>Chroń przed silnym mrozem.</strong> Gdy prognoza zapowiada duży spadek temperatury, okryj agawę agrowłókniną, a jej podstawę zabezpiecz suchym materiałem. Podczas odwilży zdejmij osłonę lub ją rozchyl.</li>
<li><strong>Kontroluj agawę zimą.</strong> Regularnie sprawdzaj, czy pod osłoną nie gromadzi się woda i czy liście nie miękną. Jeśli mróz długo się utrzymuje albo pojawią się oznaki gnicia, przenieś roślinę do jasnego, chłodnego miejsca.</li>
</ol></div><table>
<thead>
<tr>
<th>Temat</th>
<th>Wartości i wskazówki</th>
</tr>
</thead>
<tbody>
<tr>
<td>Stanowisko</td>
<td>6–8 godz. słońca; ekspozycja S lub SW; osłona od wiatru</td>
</tr>
<tr>
<td>Gatunki do gruntu</td>
<td><i>A. parryi</i>: do −20°C; <i>A. neomexicana</i>: do −26°C; tylko sucho i z drenażem</td>
</tr>
<tr>
<td>Drenaż</td>
<td>Grunt: 30–60 cm; doniczka: warstwa 3–5 cm</td>
</tr>
<tr>
<td>Osłona zimowa</td>
<td>Daszek nad rozetą; 10–15 cm żwiru u podstawy; agrowłóknina poniżej −10°C</td>
</tr>
<tr>
<td>Wilgoć</td>
<td>Ochrona przed deszczem i mokrym śniegiem; bez szczelnej folii</td>
</tr>
<tr>
<td>Przeniesienie do domu</td>
<td>Przed pierwszym przymrozkiem; zwykle koniec IX–początek X</td>
</tr>
<tr>
<td>Zimowanie w pomieszczeniu</td>
<td>5–10°C; podlewanie co 3–5 tyg., po całkowitym przeschnięciu podłoża</td>
</tr>
</tbody>
</table><h2>Które stanowisko najlepiej chroni agawę przed zimowym chłodem</h2><p>Agawę przed zimnem najlepiej chroni słoneczne, ciepłe i osłonięte od wiatru miejsce, na przykład przy południowej ścianie domu, pod okapem lub w jasnym, nieogrzewanym ogrodzie zimowym. Wybieram stanowisko, na którym roślina ma co najmniej 6 godzin światła dziennie, a nagrzana ściana oddaje ciepło nocą. Sprawdza się też podwyższona rabata z przepuszczalną ziemią, ponieważ woda nie zalega wtedy przy korzeniach.</p>
<p>Równie ważna jak temperatura jest wilgoć: większość agaw źle znosi mróz w mokrym podłożu. Dlatego sadzę je w mieszance z dużą ilością żwiru lub grysu i jesienią ograniczam podlewanie. Roślinę w donicy ustawiam pod osłoną przed deszczem, a pojemnik stawiam na drewnianej podkładce, by odizolować korzenie od zimnego podłoża. Gdy zapowiadają przymrozki, osłaniam liście agrowłókniną, lecz w cieplejsze dni ją zdejmuję, aby zapewnić przewiew.</p>
<h3>Słońce i sprawny odpływ wody pomagają agawie przetrwać mrozy</h3>
<p>Mrozoodporność agaw zależy od gatunku i odmiany. Niektóre znoszą krótkie spadki temperatury poniżej −10°C, a inne wymagają zimowania w temperaturze około 5–10°C. Przed posadzeniem sprawdzam zalecenia dla konkretnej rośliny. W chłodniejszych regionach wybieram donicę, którą jesienią przenoszę do jasnego i suchego pomieszczenia.</p>
<p>Unikam cienia, zagłębień terenu i miejsc wystawionych na północny wiatr, bo mróz utrzymuje się tam dłużej, a ziemia wolniej wysycha. Najlepsze warunki zapewniają agawie pełne słońce, osłona od wiatru, sprawny drenaż i zabezpieczenie dobrane do gatunku. Dzięki temu łatwiej uniknąć uszkodzeń liści i gnicia korzeni.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0"><strong>Wskazówka:</strong> Zimą osłona z agrowłókniny powinna chronić agawę przed mrozem, ale nie zatrzymywać wilgoci — po opadach warto ją przewietrzyć, by ograniczyć ryzyko gnicia liści i korzeni.</p></div><h2>Jak zabezpieczyć agawę przed mrozem i wilgocią</h2><figure style="text-align:center;"><img decoding="async" loading="lazy" alt="Zimowanie agawy na dworze" src="https://jutrobezsmogu.pl/uploads/Zimowanie-agawy-na-dworze-b4cb7b3422.webp"/></figure><p>Agawę chronię zimą przede wszystkim przed połączeniem mrozu i mokrej ziemi, które często szkodzi jej bardziej niż sam chłód. Jesienią ograniczam podlewanie, a po przeschnięciu podłoża całkiem je wstrzymuję. Wybieram miejsce osłonięte od deszczu i silnego wiatru, najlepiej przy południowej ścianie budynku. Donicę stawiam na podkładkach, by woda swobodnie odpływała, i udrażniam odpływ.</p>
<p>Przed przymrozkami usuwam z rozety suche liście i zanieczyszczenia, ale pozostawiam zdrowe części. U podstawy rozsypuję 3–5 cm żwiru, który ogranicza gromadzenie wilgoci, a donicę owijam jutą lub matą słomianą. Samą roślinę okrywam jedną lub dwiema warstwami przewiewnej włókniny. Unikam szczelnej folii, ponieważ zatrzymuje wodę i sprzyja gniciu.</p>
<h3>Ochrona, która pomoże agawie przetrwać zimę bez gnicia</h3>
<p>Gdy prognoza zapowiada temperaturę poniżej 0°C, dokładam osłonę. Podczas łagodniejszej pogody rozluźniam ją, aby powietrze docierało do rozety. Agawy w donicach najlepiej przenieść do jasnego, chłodnego pomieszczenia o temperaturze około 5–10°C. Ustawiam je z dala od kaloryfera i podlewam oszczędnie — tylko tyle, by bryła korzeniowa całkowicie nie wyschła.</p>
<p>Wiosną zdejmuję osłony stopniowo, a nie jednego dnia. Najpierw odsłaniam agawę na kilka godzin, najlepiej w suchy, pochmurny dzień, po czym przez 7–10 dni wydłużam czas bez okrycia. Następnie sprawdzam nasadę liści i korzenie. Miękkie, ciemne fragmenty usuwam czystym narzędziem, a podlewanie wznawiam dopiero po przeschnięciu podłoża. Dzięki temu ograniczam ryzyko gnicia.</p><div class="article-funfact-block" style="background-color: #ecf9f3; color: black; margin: 10px 0px 15px 0px; padding: 15px; border-radius: 12px;"><p style="margin-bottom:0">Ciekawostka: agawie zimą często bardziej zagraża wilgoć niż sam mróz — mokre podłoże ogranicza dostęp powietrza do korzeni i sprzyja ich gniciu.</p></div><h2>Kiedy przenieść agawę do domu na czas zimy</h2><div class="article-special-block" data-special-block="header"><figure style="text-align:center;margin:1em 0;"><img decoding="async" loading="lazy" alt="Odporne na mróz gatunki agawy" src="https://jutrobezsmogu.pl/uploads/Odporne-na-mroz-gatunki-agawy-1a110ebd36.webp"/></figure><p>Termin wniesienia agawy zależy od jej odmiany i temperatury na zewnątrz. Uwzględnij te wskazówki:</p>
<ul>
<li><strong>Reaguj na chłodne noce:</strong> Wnieś agawę, gdy nocą temperatura spada do 5–10°C. Wrażliwe odmiany przenieś wcześniej.</li>
<li><strong>Sprawdź odporność odmiany:</strong> Niektóre agawy znoszą lekki mróz, inne uszkadza już temperatura bliska 0°C. Jeśli nie znasz odporności rośliny, wybierz wcześniejszy termin.</li>
<li><strong>Nie czekaj na przymrozki:</strong> Mróz może uszkodzić liście i stożek wzrostu, dlatego wnieś roślinę przed prognozowanym spadkiem temperatury poniżej zera.</li>
<li><strong>Przygotuj agawę:</strong> Oczyść donicę i liście, sprawdź roślinę pod kątem szkodników, a podlewanie stopniowo ogranicz.</li>
<li><strong>Wybierz jasne, chłodne miejsce:</strong> Zimą ustaw agawę w jasnym pomieszczeniu o umiarkowanej temperaturze, z dala od gorących grzejników.</li>
</ul></div>]]></content:encoded>
    </item>
  </channel>
</rss>
