{"id":261,"date":"2026-04-01T17:05:36","date_gmt":"2026-04-01T15:05:36","guid":{"rendered":"https:\/\/sadzimylasy.org\/?page_id=261"},"modified":"2026-04-08T15:37:07","modified_gmt":"2026-04-08T13:37:07","slug":"mapa","status":"publish","type":"page","link":"https:\/\/sadzimylasy.org\/index.php\/mapa\/","title":{"rendered":"mapa"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"261\" class=\"elementor elementor-261\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2905ccf e-flex e-con-boxed e-con e-parent\" data-id=\"2905ccf\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-261b47f elementor-widget elementor-widget-html\" data-id=\"261b47f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"pl\">\n<head>\n  <meta charset=\"UTF-8\" \/>\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, viewport-fit=cover\" \/>\n  <title>Gdzie rosn\u0105 nasze drzewa \u2014 Sadzimy Lasy<\/title>\n\n  <!-- Leaflet -->\n  <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" \/>\n  <script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\"><\/script>\n\n  <!-- MarkerCluster -->\n  <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/MarkerCluster.css\" \/>\n  <link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/MarkerCluster.Default.css\" \/>\n  <script src=\"https:\/\/unpkg.com\/leaflet.markercluster@1.5.3\/dist\/leaflet.markercluster.js\"><\/script>\n\n  <!-- Google Fonts -->\n  <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n  <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Manrope:wght@300;400;600;700;800&display=swap\" rel=\"stylesheet\" \/>\n\n  <style>\n    \/* \u2500\u2500\u2500 Reset & Base \u2500\u2500\u2500 *\/\n    *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n\n    :root {\n      --green-primary:  #3a8018;\n      --green-mid:      #4a9e1e;\n      --green-light:    #7ec850;\n      --green-pale:     #c8f09a;\n      --green-ultra:    #e8f8d4;\n      --dark-bg:        #0b1f08;\n      --dark-bg2:       #0d2b0a;\n      --light-bg:       #f4f1ec;\n      --white:          #ffffff;\n      --text-dark:      #1a2a14;\n      --text-mid:       #3d5a2e;\n      --shadow:         0 4px 24px rgba(0,0,0,0.18);\n      --radius:         14px;\n      --font:           'Manrope', 'Segoe UI', Arial, sans-serif;\n    }\n\n    body {\n      font-family: var(--font);\n      background: var(--light-bg);\n      color: var(--text-dark);\n    }\n\n    \/* \u2500\u2500\u2500 Section wrapper \u2500\u2500\u2500 *\/\n    .map-section {\n      background: var(--dark-bg);\n      padding: 56px 24px 64px;\n      position: relative;\n      overflow: hidden;\n      width: 100vw;\n      left: 50%;\n      right: 50%;\n      margin-left: -50vw;\n      margin-right: -50vw;\n    }\n\n    \/* \u2500\u2500\u2500 Background canvas \u2500\u2500\u2500 *\/\n    #bg-canvas {\n      position: absolute;\n      inset: 0;\n      width: 100%;\n      height: 100%;\n      pointer-events: none;\n      z-index: 0;\n    }\n\n    \/* decorative leafy bg *\/\n    .map-section::before {\n      content: '';\n      position: absolute;\n      inset: 0;\n      background:\n        radial-gradient(ellipse 70% 60% at 10% 20%, rgba(58,128,24,0.18) 0%, transparent 60%),\n        radial-gradient(ellipse 50% 40% at 90% 80%, rgba(126,200,80,0.12) 0%, transparent 60%);\n      pointer-events: none;\n    }\n\n    \/* \u2500\u2500\u2500 Header \u2500\u2500\u2500 *\/\n    .map-header {\n      text-align: center;\n      margin-bottom: 24px;\n      position: relative;\n      z-index: 2;\n    }\n\n    .map-header .badge {\n      display: inline-flex;\n      align-items: center;\n      gap: 7px;\n      background: rgba(58,128,24,0.25);\n      border: 1px solid rgba(126,200,80,0.35);\n      color: var(--green-pale);\n      font-size: 11px;\n      font-weight: 700;\n      letter-spacing: 1.6px;\n      text-transform: uppercase;\n      padding: 5px 14px;\n      border-radius: 99px;\n      margin-bottom: 16px;\n    }\n\n    .map-header h2 {\n      font-size: clamp(1.8rem, 4vw, 3rem);\n      font-weight: 800;\n      color: var(--white);\n      line-height: 1.2;\n      margin-bottom: 12px;\n    }\n\n    .map-header h2 span {\n      color: var(--green-light);\n    }\n\n    .map-header p {\n      color: rgba(255,255,255,0.65);\n      font-size: 1.05rem;\n      font-weight: 300;\n      max-width: 600px;\n      margin: 0 auto;\n    }\n\n    \/* \u2500\u2500\u2500 Event notice \u2500\u2500\u2500 *\/\n    .event-note {\n      max-width: 760px;\n      margin: 0 auto 28px;\n      position: relative;\n      z-index: 2;\n      background: linear-gradient(135deg, rgba(58,128,24,0.22), rgba(126,200,80,0.12));\n      border: 1px solid rgba(126,200,80,0.3);\n      border-radius: 16px;\n      padding: 14px 18px;\n      color: var(--white);\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 10px;\n      text-align: center;\n      box-shadow: 0 8px 24px rgba(0,0,0,0.2);\n      backdrop-filter: blur(8px);\n    }\n\n    .event-note .event-note-icon {\n      font-size: 1.2rem;\n      flex-shrink: 0;\n    }\n\n    .event-note strong {\n      color: var(--green-pale);\n      font-weight: 800;\n    }\n\n    .event-note span {\n      color: rgba(255,255,255,0.88);\n      font-size: 0.95rem;\n      line-height: 1.45;\n    }\n\n    \/* \u2500\u2500\u2500 Stats bar \u2500\u2500\u2500 *\/\n    .stats-bar {\n      display: flex;\n      justify-content: center;\n      gap: 12px;\n      flex-wrap: wrap;\n      margin-bottom: 28px;\n      position: relative;\n      z-index: 2;\n    }\n\n    .stat-chip {\n      background: rgba(255,255,255,0.07);\n      border: 1px solid rgba(126,200,80,0.25);\n      border-radius: 99px;\n      padding: 9px 20px;\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      color: var(--white);\n      font-size: 0.88rem;\n      font-weight: 600;\n      transition: background 0.25s, transform 0.2s;\n      cursor: default;\n    }\n\n    .stat-chip:hover {\n      background: rgba(58,128,24,0.3);\n      transform: translateY(-2px);\n    }\n\n    .stat-chip .val {\n      font-size: 1.15rem;\n      font-weight: 800;\n      color: var(--green-pale);\n    }\n\n    .stat-chip .ico {\n      font-size: 1.1rem;\n    }\n\n    \/* \u2500\u2500\u2500 Filters \u2500\u2500\u2500 *\/\n    .filter-bar {\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      gap: 8px;\n      flex-wrap: wrap;\n      margin-bottom: 20px;\n      position: relative;\n      z-index: 2;\n    }\n\n    .filter-label {\n      color: rgba(255,255,255,0.55);\n      font-size: 0.8rem;\n      font-weight: 600;\n      letter-spacing: 1px;\n      text-transform: uppercase;\n      margin-right: 4px;\n    }\n\n    .filter-btn {\n      background: rgba(255,255,255,0.06);\n      border: 1px solid rgba(126,200,80,0.2);\n      color: rgba(255,255,255,0.75);\n      font-family: var(--font);\n      font-size: 0.82rem;\n      font-weight: 600;\n      padding: 6px 14px;\n      border-radius: 99px;\n      cursor: pointer;\n      transition: all 0.2s;\n    }\n\n    .filter-btn:hover {\n      background: rgba(58,128,24,0.35);\n      border-color: var(--green-light);\n      color: var(--white);\n    }\n\n    .filter-btn.active {\n      background: var(--green-primary);\n      border-color: var(--green-light);\n      color: var(--white);\n      box-shadow: 0 0 12px rgba(58,128,24,0.5);\n    }\n\n    \/* \u2500\u2500\u2500 Map container \u2500\u2500\u2500 *\/\n    .map-wrap {\n      position: relative;\n      z-index: 2;\n      border-radius: var(--radius);\n      overflow: hidden;\n      box-shadow: var(--shadow), 0 0 0 1px rgba(126,200,80,0.15);\n      max-width: 1100px;\n      margin: 0 auto;\n    }\n\n    #map {\n      height: 580px;\n      width: 100%;\n      background: #1a2e14;\n    }\n\n    \/* \u2500\u2500\u2500 Legend \u2500\u2500\u2500 *\/\n    .map-legend {\n      position: absolute;\n      bottom: 32px;\n      right: 16px;\n      z-index: 1000;\n      background: rgba(11,31,8,0.92);\n      border: 1px solid rgba(126,200,80,0.25);\n      border-radius: 12px;\n      padding: 14px 16px;\n      color: var(--white);\n      font-size: 0.78rem;\n      backdrop-filter: blur(8px);\n      min-width: 155px;\n    }\n\n    .map-legend h4 {\n      font-size: 0.75rem;\n      font-weight: 700;\n      letter-spacing: 1px;\n      text-transform: uppercase;\n      color: var(--green-pale);\n      margin-bottom: 10px;\n    }\n\n    .legend-row {\n      display: flex;\n      align-items: center;\n      gap: 8px;\n      margin-bottom: 7px;\n    }\n\n    .legend-dot {\n      width: 12px;\n      height: 12px;\n      border-radius: 50%;\n      flex-shrink: 0;\n      border: 2px solid rgba(255,255,255,0.25);\n    }\n\n    .legend-sizes {\n      display: flex;\n      align-items: center;\n      gap: 6px;\n      flex-wrap: wrap;\n      margin-top: 6px;\n    }\n\n    .legend-size-item {\n      display: flex;\n      flex-direction: column;\n      align-items: center;\n      gap: 3px;\n      font-size: 0.7rem;\n      color: rgba(255,255,255,0.6);\n    }\n\n    .legend-size-circle {\n      background: rgba(126,200,80,0.5);\n      border: 2px solid var(--green-light);\n      border-radius: 50%;\n    }\n\n    \/* \u2500\u2500\u2500 Popup styles \u2500\u2500\u2500 *\/\n    .leaflet-popup-content-wrapper {\n      background: var(--dark-bg2);\n      border: 1px solid rgba(126,200,80,0.3);\n      border-radius: 12px;\n      box-shadow: 0 8px 32px rgba(0,0,0,0.4);\n      color: var(--white);\n      padding: 0;\n      overflow: hidden;\n    }\n\n    .leaflet-popup-tip {\n      background: var(--dark-bg2);\n    }\n\n    .leaflet-popup-content {\n      margin: 0;\n    }\n\n    .popup-inner {\n      padding: 14px 16px;\n      min-width: 200px;\n      max-width: 260px;\n    }\n\n    .popup-tree {\n      font-size: 1.6rem;\n      display: block;\n      text-align: center;\n      margin-bottom: 6px;\n    }\n\n    .popup-count {\n      display: flex;\n      align-items: center;\n      justify-content: center;\n      gap: 6px;\n      font-size: 1.3rem;\n      font-weight: 800;\n      color: var(--green-pale);\n      margin-bottom: 8px;\n    }\n\n    .popup-count span { font-size: 0.8rem; font-weight: 500; color: rgba(255,255,255,0.6); }\n\n    .popup-address {\n      font-size: 0.82rem;\n      color: rgba(255,255,255,0.8);\n      line-height: 1.45;\n      text-align: center;\n      margin-bottom: 6px;\n    }\n\n    .popup-date {\n      text-align: center;\n      font-size: 0.74rem;\n      color: rgba(200,240,154,0.65);\n      font-weight: 600;\n    }\n\n    \/* \u2500\u2500\u2500 Cluster customization \u2500\u2500\u2500 *\/\n    .marker-cluster-small,\n    .marker-cluster-medium,\n    .marker-cluster-large {\n      background-clip: padding-box;\n    }\n\n    .marker-cluster-small { background-color: rgba(58,128,24,0.4); }\n    .marker-cluster-small div { background-color: rgba(58,128,24,0.85); color: #fff; font-weight: 700; font-family: var(--font); }\n    .marker-cluster-medium { background-color: rgba(74,158,30,0.4); }\n    .marker-cluster-medium div { background-color: rgba(74,158,30,0.85); color: #fff; font-weight: 700; font-family: var(--font); }\n    .marker-cluster-large { background-color: rgba(126,200,80,0.4); }\n    .marker-cluster-large div { background-color: rgba(126,200,80,0.85); color: #1a2a14; font-weight: 700; font-family: var(--font); }\n\n    \/* \u2500\u2500\u2500 Animations \u2500\u2500\u2500 *\/\n    @keyframes fadeUp {\n      from { opacity: 0; transform: translateY(24px); }\n      to   { opacity: 1; transform: translateY(0); }\n    }\n\n    @keyframes counterUp {\n      from { opacity: 0; transform: scale(0.7); }\n      to   { opacity: 1; transform: scale(1); }\n    }\n\n    @keyframes pulse-ring {\n      0%   { transform: scale(0.8); opacity: 0.8; }\n      70%  { transform: scale(1.6); opacity: 0; }\n      100% { transform: scale(1.6); opacity: 0; }\n    }\n\n    .map-header { animation: fadeUp 0.7s ease both; }\n    .event-note { animation: fadeUp 0.7s 0.1s ease both; }\n    .stats-bar  { animation: fadeUp 0.7s 0.15s ease both; }\n    .filter-bar { animation: fadeUp 0.7s 0.25s ease both; }\n    .map-wrap   { animation: fadeUp 0.7s 0.35s ease both; }\n\n    \/* \u2500\u2500\u2500 Animated counter \u2500\u2500\u2500 *\/\n    .val[data-count] { display: inline-block; }\n\n    \/* \u2500\u2500\u2500 Leaflet control overrides \u2500\u2500\u2500 *\/\n    .leaflet-control-zoom a {\n      background: rgba(11,31,8,0.92) !important;\n      color: var(--green-pale) !important;\n      border-color: rgba(126,200,80,0.3) !important;\n      font-weight: 700;\n    }\n\n    .leaflet-control-zoom a:hover {\n      background: var(--green-primary) !important;\n      color: #fff !important;\n    }\n\n    .leaflet-control-attribution {\n      background: rgba(11,31,8,0.7) !important;\n      color: rgba(255,255,255,0.4) !important;\n      font-size: 10px;\n    }\n\n    .leaflet-control-attribution a { color: rgba(200,240,154,0.6) !important; }\n\n    \/* \u2500\u2500\u2500 Active stats chip highlight \u2500\u2500\u2500 *\/\n    .stat-chip.highlight {\n      background: rgba(58,128,24,0.3);\n      border-color: rgba(126,200,80,0.5);\n      animation: counterUp 0.5s ease;\n    }\n\n    \/* \u2500\u2500\u2500 RESPONSIVE \/ MOBILE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n\n    \/* Tablet *\/\n    @media (max-width: 900px) {\n      .map-section { padding: 40px 16px 48px; }\n      .map-header h2 { font-size: 2rem; }\n      .stats-bar { gap: 8px; }\n      .stat-chip { padding: 7px 14px; font-size: 0.82rem; }\n      #map { height: 500px; }\n    }\n\n    \/* Mobile *\/\n    @media (max-width: 600px) {\n      .map-section { padding: 28px 12px 36px; }\n\n      .map-header { margin-bottom: 18px; }\n      .map-header .badge { font-size: 10px; padding: 4px 12px; }\n      .map-header h2 { font-size: 1.6rem; margin-bottom: 8px; }\n      .map-header p { font-size: 0.9rem; }\n\n      .event-note {\n        margin-bottom: 18px;\n        padding: 12px 14px;\n        border-radius: 14px;\n      }\n\n      .event-note span {\n        font-size: 0.88rem;\n      }\n\n      \/* Stats \u2014 wrap gracefully, full-ish width chips *\/\n      .stats-bar {\n        gap: 6px;\n        margin-bottom: 16px;\n      }\n      .stat-chip {\n        padding: 7px 13px;\n        font-size: 0.8rem;\n        flex: 1 1 auto;\n        min-width: 130px;\n        justify-content: center;\n      }\n      .stat-chip .val { font-size: 1rem; }\n\n      \/* Filters \u2014 horizontal scroll, no wrap *\/\n      .filter-bar {\n        flex-wrap: nowrap;\n        overflow-x: auto;\n        justify-content: flex-start;\n        padding-bottom: 6px;\n        -webkit-overflow-scrolling: touch;\n        scrollbar-width: none;\n        gap: 6px;\n        margin-bottom: 14px;\n      }\n      .filter-bar::-webkit-scrollbar { display: none; }\n      .filter-label { display: none; }\n      .filter-btn {\n        flex-shrink: 0;\n        font-size: 0.8rem;\n        padding: 7px 13px;\n        white-space: nowrap;\n      }\n\n      \/* Map \u2014 taller on mobile, touch friendly *\/\n      #map {\n        height: calc(100svh - 80px);\n        min-height: 380px;\n        max-height: 560px;\n        touch-action: pan-y;\n      }\n\n      \/* Legenda \u2014 mniejsza, bardziej z boku *\/\n      .map-legend {\n        bottom: 12px;\n        right: 8px;\n        padding: 10px 12px;\n        font-size: 0.72rem;\n        min-width: 130px;\n      }\n      .map-legend h4 { font-size: 0.68rem; margin-bottom: 7px; }\n      .legend-dot { width: 10px; height: 10px; }\n\n      \/* Popup \u2014 pe\u0142na szeroko\u015b\u0107 na dole *\/\n      .leaflet-popup-content-wrapper {\n        border-radius: 16px 16px 4px 4px !important;\n      }\n      .popup-inner { padding: 4px 2px; }\n      .popup-count { font-size: 1.3rem; }\n      .popup-address { font-size: 0.8rem; }\n\n      \/* Zoom controls \u2014 wi\u0119ksze dla palca *\/\n      .leaflet-control-zoom a {\n        width: 36px !important;\n        height: 36px !important;\n        line-height: 36px !important;\n        font-size: 18px !important;\n      }\n    }\n\n    \/* Bardzo ma\u0142e ekrany *\/\n    @media (max-width: 380px) {\n      .map-header h2 { font-size: 1.35rem; }\n      #map { max-height: 460px; }\n      .stat-chip { min-width: 110px; font-size: 0.75rem; }\n    }\n  <\/style>\n<\/head>\n<body>\n\n<section class=\"map-section\">\n\n  <canvas id=\"bg-canvas\"><\/canvas>\n\n  <!-- Header -->\n  <div class=\"map-header\">\n    <div class=\"badge\">\ud83c\udf31 Sadzonki 2023 \u2013 dzi\u015b<\/div>\n    <h2>Gdzie rosn\u0105 <span>nasze drzewa<\/span>?<\/h2>\n    <p>Interaktywna mapa wszystkich dostaw sadzonek zrealizowanych przez Fundacj\u0119 od 2023 roku do 1 kwietnia 2026&nbsp;\u2014 kliknij w pin, aby zobaczy\u0107 szczeg\u00f3\u0142y.<\/p>\n  <\/div>\n\n  <!-- Event info box -->\n  <div class=\"event-note\">\n    <div class=\"event-note-icon\">\ud83c\udf89<\/div>\n    <span><strong>5000 dodatkowych sadzonek<\/strong> zosta\u0142o rozdanych podczas event\u00f3w i akcji specjalnych.<\/span>\n  <\/div>\n\n  <!-- Stats -->\n  <div class=\"stats-bar\">\n    <div class=\"stat-chip\">\n      <span class=\"ico\">\ud83c\udf33<\/span>\n      <span>Sadzonek \u0142\u0105cznie:&nbsp;<span class=\"val\" id=\"cntTrees\" data-target=\"5613\">0<\/span><\/span>\n    <\/div>\n    <div class=\"stat-chip\">\n      <span class=\"ico\">\ud83c\udfaa<\/span>\n      <span>Rozdane na eventach:&nbsp;<span class=\"val\" id=\"cntEvents\" data-target=\"5000\">0<\/span><\/span>\n    <\/div>\n    <div class=\"stat-chip\">\n      <span class=\"ico\">\ud83d\udccd<\/span>\n      <span>Lokalizacji:&nbsp;<span class=\"val\" id=\"cntPlaces\" data-target=\"131\">0<\/span><\/span>\n    <\/div>\n    <div class=\"stat-chip\">\n      <span class=\"ico\">\ud83d\udcc5<\/span>\n      <span>Dni dostaw:&nbsp;<span class=\"val\" id=\"cntDays\" data-target=\"32\">0<\/span><\/span>\n    <\/div>\n    <div class=\"stat-chip\" id=\"filterInfo\" style=\"display:none\">\n      <span class=\"ico\">\ud83d\udd0e<\/span>\n      <span>Filtr aktywny:&nbsp;<span class=\"val\" id=\"filterLabel\">\u2014<\/span><\/span>\n    <\/div>\n  <\/div>\n\n  <!-- Filters -->\n  <div class=\"filter-bar\">\n    <span class=\"filter-label\">Filtruj:<\/span>\n    <button class=\"filter-btn active\" data-filter=\"all\">Wszystkie<\/button>\n    <button class=\"filter-btn\" data-filter=\"2023-11\">Listopad 2023<\/button>\n    <button class=\"filter-btn\" data-filter=\"2023-12\">Grudzie\u0144 2023<\/button>\n    <button class=\"filter-btn\" data-filter=\"small\">1\u20133 sadzonki<\/button>\n    <button class=\"filter-btn\" data-filter=\"medium\">4\u20137 sadzonek<\/button>\n    <button class=\"filter-btn\" data-filter=\"large\">8+ sadzonek<\/button>\n  <\/div>\n\n  <!-- Map -->\n  <div class=\"map-wrap\">\n    <div id=\"map\"><\/div>\n    <div class=\"map-legend\">\n      <h4>\ud83c\udf3f Legenda<\/h4>\n      <div class=\"legend-row\">\n        <div class=\"legend-dot\" style=\"background:#7ec850\"><\/div>\n        <span>1\u20133 sadzonki<\/span>\n      <\/div>\n      <div class=\"legend-row\">\n        <div class=\"legend-dot\" style=\"background:#4a9e1e\"><\/div>\n        <span>4\u20137 sadzonek<\/span>\n      <\/div>\n      <div class=\"legend-row\">\n        <div class=\"legend-dot\" style=\"background:#c8f09a; border-color:#7ec850\"><\/div>\n        <span>8+ sadzonek<\/span>\n      <\/div>\n      <div style=\"margin-top:10px; color:rgba(255,255,255,0.45); font-size:0.72rem\">\n        Rozmiar pinu = liczba sadzonek\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<script>\n\/\/ \u2500\u2500\u2500 DATA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst DATA = [{\"date\": \"2023-11-06\", \"address\": \"ul. Ogrodowa 1k 55-010 Kotowice\", \"count\": 2, \"lat\": 50.992118, \"lon\": 16.9812}, {\"date\": \"2023-11-06\", \"address\": \"NADOLICE WILKIE UL FIOLOWA 4\", \"count\": 5, \"lat\": 51.083942, \"lon\": 17.236459}, {\"date\": \"2023-11-06\", \"address\": \"ul. Kopernika 5 D\u0142ugo\u0142\u0119ka\", \"count\": 2, \"lat\": 51.174026, \"lon\": 17.193493}, {\"date\": \"2023-11-06\", \"address\": \"WROCLAWSKA 82 KAMIENIEC WROCLAWSKI\", \"count\": 2, \"lat\": 51.076426, \"lon\": 17.171615}, {\"date\": \"2023-11-06\", \"address\": \"Zaj\u0105czk\u00f3w 8a, 55-120\", \"count\": 10, \"lat\": 51.171166, \"lon\": 16.627819}, {\"date\": \"2023-11-07\", \"address\": \"Szczodre ul. Trzebnicka 11\", \"count\": 2, \"lat\": 51.193517, \"lon\": 17.182338}, {\"date\": \"2023-11-08\", \"address\": \"\u017cernicka 116 wroc\u0142aw\", \"count\": 2, \"lat\": 51.0843, \"lon\": 17.0082}, {\"date\": \"2023-11-08\", \"address\": \"turecka 14 wroc\u0142aw\", \"count\": 4, \"lat\": 51.1063, \"lon\": 16.9638}, {\"date\": \"2023-11-09\", \"address\": \"55-050 Sulistrowiczki ul.Stormowa 9\", \"count\": 10, \"lat\": 50.845055, \"lon\": 16.727647}, {\"date\": \"2023-11-09\", \"address\": \"Jaksonowice 25 g.D\u0142ugo\u0142\u0119ka\", \"count\": 4, \"lat\": 51.174244, \"lon\": 17.190812}, {\"date\": \"2023-11-09\", \"address\": \"wroc\u0142aw 52-211 I\u0142\u0142akowicz\u00f3wny 13a\", \"count\": 4, \"lat\": 51.1072, \"lon\": 17.0334}, {\"date\": \"2023-11-10\", \"address\": \"55-050 Sulistrowiczki ul. Stroma 9\", \"count\": 7, \"lat\": 50.845415, \"lon\": 16.725912}, {\"date\": \"2023-11-10\", \"address\": \"ul. Starod\u0119bowa 60a Wroc\u0142aw\", \"count\": 10, \"lat\": 51.1399, \"lon\": 16.9989}, {\"date\": \"2023-11-10\", \"address\": \"Trzmielowa 6, 52-200 Wysoka\", \"count\": 3, \"lat\": 51.1073, \"lon\": 17.2301}, {\"date\": \"2023-11-10\", \"address\": \"Bielany Wroc\u0142awskie 55-040, Filmowa 8\", \"count\": 2, \"lat\": 51.040332, \"lon\": 16.969093}, {\"date\": \"2023-11-13\", \"address\": \"Zygmunta Sierakowskiego 61, 51-678 Wroc\u0142aw\", \"count\": 2, \"lat\": 51.1472, \"lon\": 17.0812}, {\"date\": \"2023-11-13\", \"address\": \"Dobroszyce ul Owocowa 3\", \"count\": 2, \"lat\": 51.265649, \"lon\": 17.347242}, {\"date\": \"2023-11-13\", \"address\": \"ul. Marcinkowicka 11, Stanowice 55-200\", \"count\": 3, \"lat\": 50.971036, \"lon\": 17.254908}, {\"date\": \"2023-11-13\", \"address\": \"Szyman\u00f3w, ul. Letnia 3\", \"count\": 2, \"lat\": 51.151288, \"lon\": 17.050174}, {\"date\": \"2023-11-14\", \"address\": \"ul. Wroc\u0142awska 68, Kie\u0142cz\u00f3w\", \"count\": 2, \"lat\": 51.140938, \"lon\": 17.179397}, {\"date\": \"2023-11-14\", \"address\": \"Kie\u0142cz\u00f3w ul. Polna 29\", \"count\": 3, \"lat\": 51.140466, \"lon\": 17.17727}, {\"date\": \"2023-11-15\", \"address\": \"ul. K\u0142odzka 6 Bielany Wroc\u0142awskie\", \"count\": 4, \"lat\": 51.038473, \"lon\": 16.967836}, {\"date\": \"2023-11-15\", \"address\": \"ul S\u0142owackiego 14 Mirk\u00f3w\", \"count\": 1, \"lat\": 51.109339, \"lon\": 17.162031}, {\"date\": \"2023-11-15\", \"address\": \"Siechnice ul Bzowa 4\", \"count\": 3, \"lat\": 51.031191, \"lon\": 17.149839}, {\"date\": \"2023-11-15\", \"address\": \"55-020 \u017b\u00f3rawina ul. Kolejowa 14\", \"count\": 7, \"lat\": 50.980497, \"lon\": 17.040405}, {\"date\": \"2023-11-15\", \"address\": \"ul Krzywoustego 108\/3 Wroc\u0142aw\", \"count\": 2, \"lat\": 51.1318, \"lon\": 17.0591}, {\"date\": \"2023-11-15\", \"address\": \"Ul. Kminkowa 5  55-080 Krzept\u00f3w\", \"count\": 2, \"lat\": 51.090101, \"lon\": 16.887247}, {\"date\": \"2023-11-16\", \"address\": \"Ligota Ma\u0142a 73d, 56-400\", \"count\": 2, \"lat\": 51.057344, \"lon\": 17.428937}, {\"date\": \"2023-11-16\", \"address\": \"ul. Jelcza\u0144ska 15 Wroc\u0142aw\", \"count\": 3, \"lat\": 51.0934, \"lon\": 17.1021}, {\"date\": \"2023-11-16\", \"address\": \"Przedmie\u015bcie O\u0142awskie, ul. Brzeska 4\/4\", \"count\": 2, \"lat\": 51.0996, \"lon\": 17.0462}, {\"date\": \"2023-11-16\", \"address\": \"ul. Stawowa 1 Piecowice\", \"count\": 4, \"lat\": 51.145669, \"lon\": 17.21816}, {\"date\": \"2023-11-16\", \"address\": \"ul. Familijna 16 Wilczyce\", \"count\": 2, \"lat\": 51.129, \"lon\": 17.1536}, {\"date\": \"2023-11-16\", \"address\": \"WROC\u0141AW 54-101  UL BI\u0141GORAJSKA 16\", \"count\": 2, \"lat\": 51.1226, \"lon\": 17.0098}, {\"date\": \"2023-11-16\", \"address\": \"Kobylniki 4a 55-300\", \"count\": 4, \"lat\": 51.204487, \"lon\": 16.671728}, {\"date\": \"2023-11-16\", \"address\": \"ul. Kolejowa 3c Radwanice przy aptece\", \"count\": 3, \"lat\": 51.056036, \"lon\": 17.105533}, {\"date\": \"2023-11-16\", \"address\": \"ul. D\u0142uga 8a Wroblowice\", \"count\": 12, \"lat\": 51.126333, \"lon\": 16.941472}, {\"date\": \"2023-11-16\", \"address\": \"ul. Okr\u0119\u017cna 12a Byk\u00f3w\", \"count\": 3, \"lat\": 51.168029, \"lon\": 17.189559}, {\"date\": \"2023-11-17\", \"address\": \"Ksi\u0105\u017ce Ma\u0142e ul. Opolska 11-19 firma top plas\", \"count\": 5, \"lat\": 51.128266, \"lon\": 16.972083}, {\"date\": \"2023-11-17\", \"address\": \"Mroz\u00f3w 55-330 ul. Konwaliowa 4\", \"count\": 2, \"lat\": 51.189044, \"lon\": 16.789235}, {\"date\": \"2023-11-17\", \"address\": \"Gajk\u00f3w ul. Janowicka 14\", \"count\": 2, \"lat\": 51.027595, \"lon\": 17.307487}, {\"date\": \"2023-11-17\", \"address\": \"\u015broda \u015bl\u0105ska ogrodnicza 10 a\", \"count\": 10, \"lat\": 51.164079, \"lon\": 16.593301}, {\"date\": \"2023-11-20\", \"address\": \"Opor\u00f3w ul. Petra\u017cyckiego 49\", \"count\": 5, \"lat\": 51.085554, \"lon\": 17.040191}, {\"date\": \"2023-11-20\", \"address\": \"ul. Makowa 7b Krzyk\u00f3w 55-003\", \"count\": 1, \"lat\": 51.089998, \"lon\": 17.051677}, {\"date\": \"2023-11-20\", \"address\": \"ul. G\u0142owna 10 Mi\u0142oszyce k. Jelcza\", \"count\": 4, \"lat\": 51.057593, \"lon\": 17.224738}, {\"date\": \"2023-11-20\", \"address\": \"Gajk\u00f3w ul. Weso\u0142a 1\", \"count\": 1, \"lat\": 51.027073, \"lon\": 17.306688}, {\"date\": \"2023-11-20\", \"address\": \"ul. Akacjowa 58 Kie\u0142cz\u00f3w\", \"count\": 1, \"lat\": 51.138682, \"lon\": 17.179597}, {\"date\": \"2023-11-20\", \"address\": \"Kie\u0142cz\u00f3w, OGRODOWA 25A\", \"count\": 1, \"lat\": 51.140729, \"lon\": 17.178776}, {\"date\": \"2023-11-20\", \"address\": \"\u0141osice 14\/2 k. D\u0142ugo\u0142\u0119ki\", \"count\": 3, \"lat\": 51.172007, \"lon\": 17.192312}, {\"date\": \"2023-11-21\", \"address\": \"KAMIENIEC  WROCLAWSKI UL CICHY KACIK 7\", \"count\": 3, \"lat\": 51.076737, \"lon\": 17.173384}, {\"date\": \"2023-11-21\", \"address\": \"S\u0142\u0105czno 36, 56-300 S\u0142\u0105czno\", \"count\": 2, \"lat\": 51.168613, \"lon\": 17.443543}, {\"date\": \"2023-11-21\", \"address\": \"ul. Bukowa 19a Kie\u0142cz\u00f3w\", \"count\": 2, \"lat\": 51.138387, \"lon\": 17.17997}, {\"date\": \"2023-11-21\", \"address\": \"Kowie\u0144ska 20, 51-351 Wroc\u0142aw\", \"count\": 4, \"lat\": 51.1228, \"lon\": 17.0712}, {\"date\": \"2023-11-21\", \"address\": \"Jerzman\u00f3w, ul. Jarno\u0142towska 24c\", \"count\": 2, \"lat\": 51.1326, \"lon\": 17.445864}, {\"date\": \"2023-11-21\", \"address\": \"ul. Sportowa 35\/3 Piecowice na przeciwko gorzelni\", \"count\": 2, \"lat\": 51.143035, \"lon\": 17.217339}, {\"date\": \"2023-11-22\", \"address\": \"58- 124 Marcinowice, ul. Parkowa 10\", \"count\": 12, \"lat\": 50.891561, \"lon\": 16.761215}, {\"date\": \"2023-11-22\", \"address\": \"Ole\u015bniczka 8, 55-093\", \"count\": 5, \"lat\": 51.146428, \"lon\": 17.227654}, {\"date\": \"2023-11-22\", \"address\": \"Mi\u0142oszyce, ul Konopnickiej 10\", \"count\": 10, \"lat\": 51.056102, \"lon\": 17.223415}, {\"date\": \"2023-11-22\", \"address\": \"Pe\u0142cznica 3, K\u0105ty Wroc\u0142awskie\", \"count\": 3, \"lat\": 51.0248, \"lon\": 16.7513}, {\"date\": \"2023-11-22\", \"address\": \"15 Jarz\u0119binowa  55-003 Krzyk\u00f3w\", \"count\": 1, \"lat\": 51.089695, \"lon\": 17.053356}, {\"date\": \"2023-11-23\", \"address\": \"Stary \u015alesz\u00f3w ul. Ogrodowa 17\", \"count\": 3, \"lat\": 51.097527, \"lon\": 17.245511}, {\"date\": \"2023-11-23\", \"address\": \"Gaj ul. Tomaszowska 10\/3\", \"count\": 4, \"lat\": 51.075488, \"lon\": 17.053258}, {\"date\": \"2023-11-23\", \"address\": \"Zakrzyce 55-330 ul. Polna 16\", \"count\": 8, \"lat\": 51.167536, \"lon\": 16.733421}, {\"date\": \"2023-11-23\", \"address\": \"Nadolice Wielkie ul. Szamargdowa 18\", \"count\": 6, \"lat\": 51.084479, \"lon\": 17.237966}, {\"date\": \"2023-11-23\", \"address\": \"Stab\u0142owice, ul. G\u00f3recka 114 A\", \"count\": 5, \"lat\": 51.125758, \"lon\": 16.941416}, {\"date\": \"2023-11-23\", \"address\": \"\u015aroda \u015al\u0105ska ul. Mi\u0142a 2\", \"count\": 10, \"lat\": 51.165031, \"lon\": 16.595577}, {\"date\": \"2023-11-24\", \"address\": \"O\u0142awa 55-200 ul. Zapolskiej 5\", \"count\": 10, \"lat\": 50.949123, \"lon\": 17.292132}, {\"date\": \"2023-11-24\", \"address\": \"Kamieniec Wroc\u0142awski ul. \u0141\u0105kowa 43\", \"count\": 4, \"lat\": 51.076383, \"lon\": 17.175055}, {\"date\": \"2023-11-24\", \"address\": \"ul. Akacjowa 55h Kie\u0142cz\u00f3w\", \"count\": 3, \"lat\": 51.13861, \"lon\": 17.179031}, {\"date\": \"2023-11-24\", \"address\": \"Turecka 13  54-403 Wroc\u0142aw\", \"count\": 2, \"lat\": 51.1063, \"lon\": 16.9638}, {\"date\": \"2023-11-27\", \"address\": \"ul. Osiedle 5, W\u0119gry 46-023\", \"count\": 10, \"lat\": 50.740198, \"lon\": 17.974314}, {\"date\": \"2023-11-27\", \"address\": \"\u017berniki Wroc\u0142awskie ul. Strzeli\u0144ska 14\", \"count\": 10, \"lat\": 51.021626, \"lon\": 16.979899}, {\"date\": \"2023-11-27\", \"address\": \"Brzezia \u0141\u0105ka ul. Ko\u015bcielna 14\", \"count\": 5, \"lat\": 51.064395, \"lon\": 17.20289}, {\"date\": \"2023-11-27\", \"address\": \"Wilkszyn, ul. B\u0142otna 1\", \"count\": 7, \"lat\": 51.168969, \"lon\": 16.781147}, {\"date\": \"2023-11-27\", \"address\": \"Kamieniec Wroc\u0142awski ul. Podwale 6 B\", \"count\": 7, \"lat\": 51.075367, \"lon\": 17.174187}, {\"date\": \"2023-11-27\", \"address\": \"Ma\u015blice ul. Kozia 69\/3\", \"count\": 4, \"lat\": 51.126903, \"lon\": 16.971747}, {\"date\": \"2023-11-28\", \"address\": \"ul. Ogrodowa 1k 55-010 Kotowice\", \"count\": 2, \"lat\": 50.993185, \"lon\": 16.9837}, {\"date\": \"2023-11-28\", \"address\": \"ul. Wroc\u0142awska 6a 55-200 Marcinkowice\", \"count\": 8, \"lat\": 50.961714, \"lon\": 17.28147}, {\"date\": \"2023-11-28\", \"address\": \"UL. Jerzego Badury 8, Wroc\u0142aw\", \"count\": 3, \"lat\": 51.0831, \"lon\": 16.9903}, {\"date\": \"2023-11-28\", \"address\": \"JAWORZYNA \u015aL\u0104SKA 58-140, UL.\u015aWIDNICKA 22A\", \"count\": 10, \"lat\": 50.856614, \"lon\": 16.477853}, {\"date\": \"2023-11-28\", \"address\": \"Pisarzowice ul. Kolejowa 11\", \"count\": 10, \"lat\": 51.17779, \"lon\": 16.607181}, {\"date\": \"2023-11-28\", \"address\": \"Wroc\u0142aw ul. Cieplicka 29\", \"count\": 5, \"lat\": 51.0929, \"lon\": 16.9658}, {\"date\": \"2023-11-28\", \"address\": \"Pruszowice ul. Wroc\u0142awska 16\", \"count\": 5, \"lat\": 51.142287, \"lon\": 17.023522}, {\"date\": \"2023-11-28\", \"address\": \"Kamieniec Wroc\u0142awski ul. Wroc\u0142awska 147\", \"count\": 3, \"lat\": 51.076328, \"lon\": 17.171551}, {\"date\": \"2023-11-29\", \"address\": \"Mi\u0142oszyce, ul. Orzeszkowej 1\", \"count\": 10, \"lat\": 51.055314, \"lon\": 17.225376}, {\"date\": \"2023-11-29\", \"address\": \"Nowiny 55-040, ul. S\u0142oneczna 2\", \"count\": 7, \"lat\": 51.017443, \"lon\": 16.885429}, {\"date\": \"2023-11-29\", \"address\": \"Pr\u0119\u017cyce 2, 55-330\", \"count\": 5, \"lat\": 51.184907, \"lon\": 16.715584}, {\"date\": \"2023-11-29\", \"address\": \"Mi\u0142oszyce, ul. Orzeszkowej 1 (2)\", \"count\": 10, \"lat\": 51.056018, \"lon\": 17.225838}, {\"date\": \"2023-11-29\", \"address\": \"Paw\u0142owice ul. Przedwio\u015bnie 75\", \"count\": 3, \"lat\": 51.149022, \"lon\": 17.024062}, {\"date\": \"2023-11-29\", \"address\": \"Kryniczno ul. Wiosenna 8\", \"count\": 4, \"lat\": 51.200691, \"lon\": 17.127824}, {\"date\": \"2023-11-30\", \"address\": \"Jaworzyna \u015al\u0105ska ul. \u015awidnicka 22A\", \"count\": 10, \"lat\": 50.856871, \"lon\": 16.477368}, {\"date\": \"2023-11-30\", \"address\": \"Proszk\u00f3w 76\", \"count\": 3, \"lat\": 51.162887, \"lon\": 16.641493}, {\"date\": \"2023-11-30\", \"address\": \"\u017berniki Wielkie ul. Lipowa 8\", \"count\": 5, \"lat\": 51.023152, \"lon\": 16.978094}, {\"date\": \"2023-11-30\", \"address\": \"Kamie\u0144 ul. Bursztynowa 47A\", \"count\": 2, \"lat\": 51.103308, \"lon\": 17.023257}, {\"date\": \"2023-12-01\", \"address\": \"Su\u0142\u00f3w ul. Szkolna 8\", \"count\": 10, \"lat\": 51.547185, \"lon\": 17.230395}, {\"date\": \"2023-12-01\", \"address\": \"Mokry Dw\u00f3r ul. Cmentarna 1\", \"count\": 5, \"lat\": 51.077371, \"lon\": 17.006694}, {\"date\": \"2023-12-01\", \"address\": \"Wilkszyn, ul. B\u0142otna 1 (2)\", \"count\": 8, \"lat\": 51.168966, \"lon\": 16.781414}, {\"date\": \"2023-12-01\", \"address\": \"Nadolice Wielkie ul. Stawowa 15\", \"count\": 2, \"lat\": 51.084172, \"lon\": 17.237362}, {\"date\": \"2023-12-01\", \"address\": \"Kamie\u0144 ul. Szafirowa 11\/1\", \"count\": 1, \"lat\": 51.103429, \"lon\": 17.025345}, {\"date\": \"2023-12-01\", \"address\": \"Kar\u0142owice ul. Przybyszewskiego 29\", \"count\": 2, \"lat\": 51.152651, \"lon\": 17.059602}, {\"date\": \"2023-12-01\", \"address\": \"D\u0142ugo\u0142\u0119ka ul. Wroc\u0142awska 28\", \"count\": 3, \"lat\": 51.174814, \"lon\": 17.19413}, {\"date\": \"2023-12-04\", \"address\": \"\u015awidnica, Plac Ludowy 5\", \"count\": 12, \"lat\": 50.847407, \"lon\": 16.489205}, {\"date\": \"2023-12-04\", \"address\": \"K\u0105ty Wroc\u0142awskie ul. Ro\u015blinna 9\", \"count\": 10, \"lat\": 51.0346, \"lon\": 16.7669}, {\"date\": \"2023-12-04\", \"address\": \"Rak\u00f3w 47 (gm. D\u0142ugo\u0142\u0119ka)\", \"count\": 2, \"lat\": 51.159357, \"lon\": 17.217455}, {\"date\": \"2023-12-04\", \"address\": \"Szyman\u00f3w ul. Polna 4\", \"count\": 4, \"lat\": 51.150003, \"lon\": 17.047935}, {\"date\": \"2023-12-04\", \"address\": \"Wszech\u015bwi\u0119te 16\/4\", \"count\": 2, \"lat\": 51.071037, \"lon\": 17.442741}, {\"date\": \"2023-12-05\", \"address\": \"Wilczyce ul. Polna 13\", \"count\": 4, \"lat\": 51.129313, \"lon\": 17.153678}, {\"date\": \"2023-12-05\", \"address\": \"Marcinkowice ul. S\u0142oneczna 7\", \"count\": 10, \"lat\": 50.961765, \"lon\": 17.281092}, {\"date\": \"2023-12-05\", \"address\": \"Brzezia \u0141\u0105ka ul. Wroc\u0142awska 47\", \"count\": 10, \"lat\": 51.066472, \"lon\": 17.203382}, {\"date\": \"2023-12-06\", \"address\": \"\u015aliwice ul. Jod\u0142owa 11\", \"count\": 4, \"lat\": 51.165467, \"lon\": 17.201174}, {\"date\": \"2023-12-06\", \"address\": \"Piszkawa 3\", \"count\": 5, \"lat\": 51.049564, \"lon\": 17.419487}, {\"date\": \"2023-12-07\", \"address\": \"\u0141agiewniki \u2014 Sienice 21\", \"count\": 10, \"lat\": 50.749206, \"lon\": 16.844517}, {\"date\": \"2023-12-07\", \"address\": \"Pietrzykowice 15\/1\", \"count\": 5, \"lat\": 51.049527, \"lon\": 16.919092}, {\"date\": \"2023-12-07\", \"address\": \"Jeszkowice ul. Wojnowicka 6\", \"count\": 5, \"lat\": 51.113971, \"lon\": 17.187237}, {\"date\": \"2023-12-07\", \"address\": \"Pasikurowice ul. Energetyczna 10\", \"count\": 5, \"lat\": 51.178609, \"lon\": 17.258211}, {\"date\": \"2023-12-08\", \"address\": \"Widawa ul. Grawerska 3a\", \"count\": 2, \"lat\": 51.179272, \"lon\": 17.023743}, {\"date\": \"2023-12-08\", \"address\": \"Wroc\u0142aw \u2014 Psie Pole ul. Zaj\u0105czkowska 35A\", \"count\": 5, \"lat\": 51.14904, \"lon\": 17.073443}, {\"date\": \"2023-12-08\", \"address\": \"Psary ul. G\u0142\u00f3wna 35\", \"count\": 5, \"lat\": 51.047485, \"lon\": 17.064901}, {\"date\": \"2023-12-08\", \"address\": \"Wilkszyn ul. Zielone Wzg\u00f3rze 1\", \"count\": 5, \"lat\": 51.168406, \"lon\": 16.78078}, {\"date\": \"2023-12-12\", \"address\": \"Brzezia \u0141\u0105ka ul. Olchowa 12\", \"count\": 1, \"lat\": 51.066271, \"lon\": 17.200385}, {\"date\": \"2023-12-12\", \"address\": \"Ligota Ma\u0142a 21b\", \"count\": 5, \"lat\": 51.057184, \"lon\": 17.428978}, {\"date\": \"2023-12-12\", \"address\": \"Wroc\u0142aw ul. Norweska 14\", \"count\": 4, \"lat\": 51.1581, \"lon\": 17.0384}, {\"date\": \"2023-12-12\", \"address\": \"Wroc\u0142aw ul. Orzeszkowej 67\/4\", \"count\": 2, \"lat\": 51.0897, \"lon\": 17.0274}, {\"date\": \"2023-12-12\", \"address\": \"Byk\u00f3w ul. Wroc\u0142awska 7C\", \"count\": 2, \"lat\": 51.166013, \"lon\": 17.191165}, {\"date\": \"2023-12-12\", \"address\": \"Brzezia \u0141\u0105ka ul. Wroc\u0142awska 47 (2)\", \"count\": 5, \"lat\": 51.064316, \"lon\": 17.200983}, {\"date\": \"2023-12-15\", \"address\": \"\u0141agiewniki \u2014 Sienice 21 (2)\", \"count\": 10, \"lat\": 50.748315, \"lon\": 16.8434}, {\"date\": \"2023-12-15\", \"address\": \"Kie\u0142cz\u00f3w ul. Modrzewiowa 16\", \"count\": 5, \"lat\": 51.139301, \"lon\": 17.180095}, {\"date\": \"2023-12-18\", \"address\": \"Wroc\u0142aw ul. Mokra 10\", \"count\": 5, \"lat\": 51.0973, \"lon\": 17.0519}, {\"date\": \"2023-12-19\", \"address\": \"Gajk\u00f3w ul. Weso\u0142a 1 (2)\", \"count\": 1, \"lat\": 51.029795, \"lon\": 17.310484}, {\"date\": \"2023-12-27\", \"address\": \"Wroc\u0142aw ul. \u017beglarska 4\", \"count\": 5, \"lat\": 51.0892, \"lon\": 16.984}, {\"date\": \"2023-12-28\", \"address\": \"Kobylniki 4a\", \"count\": 8, \"lat\": 51.204596, \"lon\": 16.675333}, {\"date\": \"2024-01-02\", \"address\": \"Brzezia \u0141\u0105ka ul. Kr\u0119ta 1\", \"count\": 1, \"lat\": 51.066243, \"lon\": 17.202917}];\n\n\/\/ \u2500\u2500\u2500 TOTALS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst EXTRA_EVENT_SEEDLINGS = 5000;\nconst MAP_TOTAL_SEEDLINGS = DATA.reduce((sum, item) => sum + item.count, 0);\nconst GRAND_TOTAL_SEEDLINGS = MAP_TOTAL_SEEDLINGS + EXTRA_EVENT_SEEDLINGS;\n\n\/\/ \u2500\u2500\u2500 MAP INIT \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst map = L.map('map', {\n  zoomControl: true,\n  attributionControl: true,\n  tap: true,\n  tapTolerance: 15,\n  touchZoom: true,\n  bounceAtZoomLimits: false,\n}).setView([51.08, 17.0], 9);\n\n\/\/ On mobile move zoom control to bottom-right (away from fingers)\nif (window.innerWidth <= 600) {\n  map.zoomControl.remove();\n  L.control.zoom({ position: 'bottomright' }).addTo(map);\n}\n\n\/\/ Tile layer \u2014 CartoDB dark\nL.tileLayer('https:\/\/server.arcgisonline.com\/ArcGIS\/rest\/services\/Canvas\/World_Dark_Gray_Base\/MapServer\/tile\/{z}\/{y}\/{x}', {\n  attribution: '&copy; <a href=\"https:\/\/www.esri.com\/\">Esri<\/a>, HERE, Garmin, \u00a9 OpenStreetMap contributors',\n  maxZoom: 16\n}).addTo(map);\n\n\/\/ \u2500\u2500\u2500 MARKER FACTORY \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction getColor(count) {\n  if (count >= 8)  return '#c8f09a';\n  if (count >= 4)  return '#4a9e1e';\n  return '#7ec850';\n}\n\nfunction getSize(count) {\n  if (count >= 10) return 22;\n  if (count >= 7)  return 18;\n  if (count >= 4)  return 15;\n  return 11;\n}\n\nfunction createIcon(count) {\n  const color = getColor(count);\n  const size  = getSize(count);\n  const emoji = count >= 8 ? '\ud83c\udf33' : count >= 4 ? '\ud83c\udf32' : '\ud83c\udf31';\n  return L.divIcon({\n    className: '',\n    html: `\n      <div style=\"\n        position:relative;\n        width:${size*2}px; height:${size*2}px;\n        display:flex; align-items:center; justify-content:center;\n      \">\n        <div style=\"\n          position:absolute; inset:0; border-radius:50%;\n          background:${color}; opacity:0.18;\n          animation: pulse-ring 2s ease-out infinite;\n        \"><\/div>\n        <div style=\"\n          width:${size}px; height:${size}px; border-radius:50%;\n          background:${color};\n          border:2px solid rgba(255,255,255,0.55);\n          box-shadow:0 2px 8px rgba(0,0,0,0.45);\n          display:flex; align-items:center; justify-content:center;\n          font-size:${Math.max(8, size*0.6)}px;\n          transition: transform 0.2s;\n          cursor:pointer;\n        \">${count >= 4 ? emoji : ''}<\/div>\n      <\/div>`,\n    iconSize:   [size*2, size*2],\n    iconAnchor: [size, size],\n    popupAnchor:[0, -(size+4)],\n  });\n}\n\nfunction odmienSadzonki(n) {\n  if (n === 1) return '1 sadzonka';\n  if (n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20)) return n + ' sadzonki';\n  return n + ' sadzonek';\n}\n\nfunction formatDate(d) {\n  const [y, m, day] = d.split('-');\n  const months = ['','sty','lut','mar','kwi','maj','cze','lip','sie','wrz','pa\u017a','lis','gru'];\n  return `${parseInt(day)} ${months[parseInt(m)]} ${y}`;\n}\n\nfunction buildPopup(d) {\n  const [num, ...rest] = odmienSadzonki(d.count).split(' ');\n  return `<div class=\"popup-inner\">\n    <span class=\"popup-tree\">${d.count>=8?'\ud83c\udf33':d.count>=4?'\ud83c\udf32':'\ud83c\udf31'}<\/span>\n    <div class=\"popup-count\">${num} <span>${rest.join(' ')}<\/span><\/div>\n    <div class=\"popup-address\">${d.address}<\/div>\n    <div class=\"popup-date\">\ud83d\udcc5 ${formatDate(d.date)}<\/div>\n  <\/div>`;\n}\n\n\/\/ \u2500\u2500\u2500 CLUSTER LAYER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nlet clusterGroup = L.markerClusterGroup({\n  maxClusterRadius: 50,\n  spiderfyOnMaxZoom: true,\n  showCoverageOnHover: false,\n  zoomToBoundsOnClick: true,\n  iconCreateFunction: function(cluster) {\n    const count = cluster.getChildCount();\n    let cls = count < 10 ? 'small' : count < 30 ? 'medium' : 'large';\n    return L.divIcon({\n      html: `<div><span>${count}<\/span><\/div>`,\n      className: `marker-cluster marker-cluster-${cls}`,\n      iconSize: L.point(40, 40)\n    });\n  }\n});\n\nlet allMarkers = [];\n\nfunction buildMarkers(items) {\n  allMarkers.forEach(m => clusterGroup.removeLayer(m));\n  allMarkers = [];\n  clusterGroup.clearLayers();\n\n  items.forEach((d, i) => {\n    const marker = L.marker([d.lat, d.lon], {\n      icon: createIcon(d.count),\n      title: d.address,\n    });\n    marker.bindPopup(buildPopup(d), { maxWidth: 280, className: '' });\n\n    marker.on('add', function() {\n      const el = this.getElement();\n      if (el) {\n        el.style.opacity = '0';\n        el.style.transform = 'scale(0.3)';\n        el.style.transition = `opacity 0.4s ${i*4}ms, transform 0.4s ${i*4}ms`;\n        requestAnimationFrame(() => {\n          el.style.opacity = '1';\n          el.style.transform = 'scale(1)';\n        });\n      }\n    });\n\n    allMarkers.push(marker);\n    clusterGroup.addLayer(marker);\n  });\n\n  map.addLayer(clusterGroup);\n}\n\n\/\/ \u2500\u2500\u2500 GEOCODING FIX \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst BAD_INDICES = new Set([6,7,10,12,13,15,25,28,29,31,32,51,57,68,77,80,120,121,126,128,128]);\n\nasync function geocodeAddress(address) {\n  const q = encodeURIComponent(address + ', Polska');\n  const url = `https:\/\/nominatim.openstreetmap.org\/search?q=${q}&format=json&limit=1&countrycodes=pl&accept-language=pl`;\n  try {\n    const res = await fetch(url, {headers: {'User-Agent': 'SadzimyLasy\/1.0'}});\n    const data = await res.json();\n    if (data && data[0]) {\n      return { lat: parseFloat(data[0].lat), lon: parseFloat(data[0].lon) };\n    }\n  } catch(e) {}\n  return null;\n}\n\nbuildMarkers(DATA);\n\nasync function fixCoordsInBackground() {\n  const mapWrap = document.querySelector('.map-wrap');\n  const loader = document.createElement('div');\n  loader.id = 'geocode-loader';\n  loader.style.cssText = `position:absolute;top:12px;left:50%;transform:translateX(-50%);\n    background:rgba(11,31,8,0.88);border:1px solid rgba(126,200,80,0.35);\n    color:#c8f09a;font-family:var(--font);font-size:0.75rem;font-weight:600;\n    padding:6px 16px;border-radius:99px;z-index:2000;pointer-events:none;\n    backdrop-filter:blur(8px);opacity:0.85;`;\n  loader.textContent = '\ud83c\udf31 Weryfikowanie lokalizacji\u2026';\n  mapWrap.appendChild(loader);\n\n  let fixed = 0;\n  for (let i = 0; i < DATA.length; i++) {\n    if (!BAD_INDICES.has(i)) continue;\n    const result = await geocodeAddress(DATA[i].address);\n    if (result) {\n      DATA[i].lat = result.lat;\n      DATA[i].lon = result.lon;\n      fixed++;\n      const activeFilter = document.querySelector('.filter-btn.active');\n      if (!activeFilter || activeFilter.dataset.filter === 'all') {\n        buildMarkers(DATA);\n      }\n    }\n    loader.textContent = `\ud83c\udf31 Weryfikowanie\u2026 ${fixed}\/${BAD_INDICES.size}`;\n    await new Promise(r => setTimeout(r, 1100));\n  }\n\n  loader.textContent = `\u2705 Zaktualizowano ${fixed} lokalizacji`;\n  setTimeout(() => loader.remove(), 2500);\n}\n\nfixCoordsInBackground();\n\n\/\/ \u2500\u2500\u2500 FILTERS \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst filterBtns = document.querySelectorAll('.filter-btn');\nconst filterInfo = document.getElementById('filterInfo');\nconst filterLabel = document.getElementById('filterLabel');\n\nfilterBtns.forEach(btn => {\n  btn.addEventListener('click', () => {\n    filterBtns.forEach(b => b.classList.remove('active'));\n    btn.classList.add('active');\n\n    const f = btn.dataset.filter;\n    let filtered;\n    let labelText = '';\n\n    if (f === 'all') {\n      filtered = DATA;\n      filterInfo.style.display = 'none';\n    } else if (f.startsWith('20')) {\n      filtered = DATA.filter(d => d.date.startsWith(f));\n      const monthNames = {'2023-11':'Listopad 2023','2023-12':'Grudzie\u0144 2023'};\n      labelText = monthNames[f] || f;\n      filterInfo.style.display = 'flex';\n      filterLabel.textContent = labelText;\n    } else if (f === 'small') {\n      filtered = DATA.filter(d => d.count <= 3);\n      filterInfo.style.display = 'flex';\n      filterLabel.textContent = '1\u20133 sadzonki';\n    } else if (f === 'medium') {\n      filtered = DATA.filter(d => d.count >= 4 && d.count <= 7);\n      filterInfo.style.display = 'flex';\n      filterLabel.textContent = '4\u20137 sadzonek';\n    } else if (f === 'large') {\n      filtered = DATA.filter(d => d.count >= 8);\n      filterInfo.style.display = 'flex';\n      filterLabel.textContent = '8+ sadzonek';\n    }\n\n    buildMarkers(filtered);\n\n    \/\/ Update counters\n    const filteredMapTotal = filtered.reduce((s, d) => s + d.count, 0);\n    animateCount('cntTrees', filteredMapTotal + EXTRA_EVENT_SEEDLINGS);\n    animateCount('cntEvents', EXTRA_EVENT_SEEDLINGS);\n    animateCount('cntPlaces', filtered.length);\n    const uniqueDates = new Set(filtered.map(d => d.date)).size;\n    animateCount('cntDays', uniqueDates);\n  });\n});\n\n\/\/ \u2500\u2500\u2500 ANIMATED COUNTER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nfunction animateCount(id, target) {\n  const el = document.getElementById(id);\n  if (!el) return;\n  const start = parseInt(el.textContent) || 0;\n  const duration = 700;\n  const startTime = performance.now();\n  function step(now) {\n    const progress = Math.min((now - startTime) \/ duration, 1);\n    const ease = 1 - Math.pow(1 - progress, 3);\n    el.textContent = Math.round(start + (target - start) * ease);\n    if (progress < 1) requestAnimationFrame(step);\n  }\n  requestAnimationFrame(step);\n}\n\n\/\/ Initial counter animation on load\nwindow.addEventListener('load', () => {\n  setTimeout(() => {\n    animateCount('cntTrees', GRAND_TOTAL_SEEDLINGS);\n    animateCount('cntEvents', EXTRA_EVENT_SEEDLINGS);\n    animateCount('cntPlaces', 131);\n    animateCount('cntDays', 32);\n  }, 600);\n});\n\n\/\/ \u2500\u2500\u2500 PULSE KEYFRAME INJECTION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nconst style = document.createElement('style');\nstyle.textContent = `\n  @keyframes pulse-ring {\n    0%   { transform: scale(0.9); opacity:0.6; }\n    80%  { transform: scale(1.8); opacity:0; }\n    100% { opacity:0; }\n  }\n`;\ndocument.head.appendChild(style);\n\n\/\/ \u2500\u2500\u2500 BACKGROUND CANVAS ANIMATION \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n(function() {\n  const canvas = document.getElementById('bg-canvas');\n  const ctx = canvas.getContext('2d');\n  let W, H;\n\n  function resize() {\n    const s = canvas.parentElement;\n    W = canvas.width  = s.offsetWidth;\n    H = canvas.height = s.offsetHeight;\n  }\n  window.addEventListener('resize', resize);\n  resize();\n\n  const COLORS = ['#3a8018','#4a9e1e','#7ec850','#c8f09a','#2a6010','#5ab828'];\n\n  function makeLeaf() {\n    return {\n      x: Math.random() * W,\n      y: -60 - Math.random() * H * 0.3,\n      size: 14 + Math.random() * 28,\n      angle: Math.random() * Math.PI * 2,\n      vAngle: (Math.random() - 0.5) * 0.025,\n      vx: (Math.random() - 0.5) * 1.2,\n      vy: 0.6 + Math.random() * 1.1,\n      wobble: Math.random() * Math.PI * 2,\n      wobbleAmp: 0.6 + Math.random() * 1.4,\n      wobbleSpeed: 0.02 + Math.random() * 0.03,\n      alpha: 0.18 + Math.random() * 0.45,\n      color: COLORS[Math.floor(Math.random() * COLORS.length)],\n      type: Math.floor(Math.random() * 3),\n    };\n  }\n\n  function drawLeaf(l) {\n    ctx.save();\n    ctx.translate(l.x, l.y);\n    ctx.rotate(l.angle);\n    ctx.globalAlpha = l.alpha;\n\n    const s = l.size;\n    ctx.beginPath();\n    if (l.type === 0) {\n      ctx.moveTo(0, -s);\n      ctx.bezierCurveTo(s*0.8, -s*0.4, s*0.8, s*0.4, 0, s*0.9);\n      ctx.bezierCurveTo(-s*0.8, s*0.4, -s*0.8, -s*0.4, 0, -s);\n    } else if (l.type === 1) {\n      ctx.moveTo(0, -s*1.2);\n      ctx.bezierCurveTo(s*0.5, -s*0.3, s*0.5, s*0.5, 0, s*1.1);\n      ctx.bezierCurveTo(-s*0.5, s*0.5, -s*0.5, -s*0.3, 0, -s*1.2);\n    } else {\n      ctx.moveTo(0, -s);\n      ctx.bezierCurveTo(s*0.6, -s*0.7, s*0.9, -s*0.1, s*0.7, s*0.3);\n      ctx.bezierCurveTo(s*0.9, s*0.5, s*0.4, s*0.9, 0, s);\n      ctx.bezierCurveTo(-s*0.4, s*0.9, -s*0.9, s*0.5, -s*0.7, s*0.3);\n      ctx.bezierCurveTo(-s*0.9, -s*0.1, -s*0.6, -s*0.7, 0, -s);\n    }\n    ctx.fillStyle = l.color;\n    ctx.fill();\n\n    ctx.beginPath();\n    ctx.moveTo(0, -s * 0.85);\n    ctx.lineTo(0, s * 0.85);\n    ctx.strokeStyle = 'rgba(255,255,255,0.22)';\n    ctx.lineWidth = s * 0.06;\n    ctx.stroke();\n\n    ctx.shadowColor = l.color;\n    ctx.shadowBlur = s * 0.5;\n    ctx.globalAlpha = l.alpha * 0.3;\n    ctx.fill();\n\n    ctx.restore();\n  }\n\n  function makeOrb() {\n    return {\n      x: Math.random() * W,\n      y: Math.random() * H,\n      r: 30 + Math.random() * 80,\n      alpha: 0.04 + Math.random() * 0.10,\n      vx: (Math.random() - 0.5) * 0.3,\n      vy: (Math.random() - 0.5) * 0.2,\n      phase: Math.random() * Math.PI * 2,\n      speed: 0.005 + Math.random() * 0.012,\n      color: COLORS[Math.floor(Math.random() * COLORS.length)],\n    };\n  }\n\n  function makeSparkle() {\n    return {\n      x: Math.random() * W,\n      y: Math.random() * H,\n      r: 1.5 + Math.random() * 3,\n      phase: Math.random() * Math.PI * 2,\n      speed: 0.02 + Math.random() * 0.05,\n      baseAlpha: 0.15 + Math.random() * 0.5,\n      color: COLORS[Math.floor(Math.random() * COLORS.length)],\n    };\n  }\n\n  const LEAF_COUNT    = 28;\n  const ORB_COUNT     = 10;\n  const SPARKLE_COUNT = 55;\n\n  const leaves   = Array.from({length: LEAF_COUNT},    makeLeaf);\n  const orbs     = Array.from({length: ORB_COUNT},     makeOrb);\n  const sparkles = Array.from({length: SPARKLE_COUNT}, makeSparkle);\n\n  function animate() {\n    ctx.clearRect(0, 0, W, H);\n\n    const t = performance.now() \/ 1000;\n\n    orbs.forEach(o => {\n      o.x += o.vx;\n      o.y += o.vy;\n      if (o.x < -120) o.x = W + 120;\n      if (o.x > W + 120) o.x = -120;\n      if (o.y < -120) o.y = H + 120;\n      if (o.y > H + 120) o.y = -120;\n\n      const pulse = 0.7 + 0.3 * Math.sin(t * o.speed * 60 + o.phase);\n      const grad = ctx.createRadialGradient(o.x, o.y, 0, o.x, o.y, o.r * pulse);\n      grad.addColorStop(0, o.color + 'cc');\n      grad.addColorStop(0.5, o.color + '44');\n      grad.addColorStop(1, o.color + '00');\n      ctx.globalAlpha = o.alpha;\n      ctx.fillStyle = grad;\n      ctx.beginPath();\n      ctx.arc(o.x, o.y, o.r * pulse, 0, Math.PI * 2);\n      ctx.fill();\n    });\n    ctx.globalAlpha = 1;\n\n    sparkles.forEach(s => {\n      const a = s.baseAlpha * (0.4 + 0.6 * Math.sin(t * s.speed * 60 + s.phase));\n      ctx.globalAlpha = a;\n      ctx.fillStyle = s.color;\n      ctx.shadowColor = s.color;\n      ctx.shadowBlur = s.r * 3;\n      ctx.beginPath();\n      ctx.arc(s.x, s.y, s.r, 0, Math.PI * 2);\n      ctx.fill();\n      ctx.shadowBlur = 0;\n    });\n    ctx.globalAlpha = 1;\n\n    leaves.forEach(l => {\n      l.wobble += l.wobbleSpeed;\n      l.x += l.vx + Math.sin(l.wobble) * l.wobbleAmp;\n      l.y += l.vy;\n      l.angle += l.vAngle;\n\n      if (l.y > H + 60) {\n        Object.assign(l, makeLeaf());\n        l.y = -60;\n      }\n      if (l.x > W + 60) l.x = -60;\n      if (l.x < -60) l.x = W + 60;\n\n      drawLeaf(l);\n    });\n    ctx.globalAlpha = 1;\n\n    requestAnimationFrame(animate);\n  }\n\n  animate();\n})();\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Gdzie rosn\u0105 nasze drzewa \u2014 Sadzimy Lasy \ud83c\udf31 Sadzonki 2023 \u2013 dzi\u015b Gdzie rosn\u0105 nasze drzewa? Interaktywna mapa wszystkich dostaw sadzonek zrealizowanych przez Fundacj\u0119 od 2023 roku do 1 kwietnia 2026&nbsp;\u2014 kliknij w pin, aby zobaczy\u0107 szczeg\u00f3\u0142y. \ud83c\udf89 5000 dodatkowych sadzonek zosta\u0142o rozdanych podczas event\u00f3w i akcji specjalnych. \ud83c\udf33 Sadzonek \u0142\u0105cznie:&nbsp;0 \ud83c\udfaa Rozdane na eventach:&nbsp;0 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-261","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/pages\/261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/comments?post=261"}],"version-history":[{"count":16,"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/pages\/261\/revisions"}],"predecessor-version":[{"id":344,"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/pages\/261\/revisions\/344"}],"wp:attachment":[{"href":"https:\/\/sadzimylasy.org\/index.php\/wp-json\/wp\/v2\/media?parent=261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}