{"id":532,"date":"2026-04-24T13:26:56","date_gmt":"2026-04-24T11:26:56","guid":{"rendered":"http:\/\/192.168.2.11\/?page_id=532"},"modified":"2026-05-08T16:01:59","modified_gmt":"2026-05-08T14:01:59","slug":"realizowane-polityki-programy-i-strategie","status":"publish","type":"page","link":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/realizowane-polityki-programy-i-strategie\/","title":{"rendered":"Realizowane polityki, programy i strategie"},"content":{"rendered":"\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f9cf756bbf779a23e535b44015fb8380\" style=\"font-size:15px\">Podsumowanie najwa\u017cniejszych zada\u0144 realizowanych w 2025 r. przez Powiat \u017byrardowski w ramach wdra\u017cania&nbsp;<strong>lokalnych polityk, program\u00f3w oraz strategii<\/strong>.<\/p>\n\n\n\n<p>Spo\u015br\u00f3d licznych uchwa\u0142 Rady Powiatu dotycz\u0105cych kierunk\u00f3w realizacji lokalnych polityk, program\u00f3w i strategii, szczeg\u00f3ln\u0105 uwag\u0119 nale\u017cy po\u015bwi\u0119ci\u0107&nbsp;<strong>Strategii Rozwoju dla Powiatu \u017byrardowskiego na lata 2015-2025<\/strong>. Dokument ten wyznacza g\u0142\u00f3wne cele rozwojowe powiatu.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-2675743c82aa48af54c375527c7e9186\" style=\"font-size:15px\">Znacz\u0105ca cz\u0119\u015b\u0107 dzia\u0142a\u0144 Zarz\u0105du Powiatu w 2025 r. koncentrowa\u0142a si\u0119 na realizacji i wdra\u017caniu przedsi\u0119wzi\u0119\u0107 zaplanowanych w licznych dokumentach o charakterze programowym i strategicznym, w tym programach dedykowanych konkretnym zadaniom w\u0142asnym.<\/p>\n\n\n    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        \n            <div class=\"stats-grid stats-grid-1\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">Dokumenty\u00a0i programy\u00a0strategiczne powiatu realizowane w 2025 r.<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"11\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    \n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-a27b5dcc6daa095557cc1364552517a2\" style=\"color:#14357a\"><strong>w tym:<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        \n            <div class=\"stats-grid stats-grid-3\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">ochrona \u015brodowiska i zr\u00f3wnowa\u017cony transport<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"2\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">Z obszaru pomocy spo\u0142ecznej<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"7\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">o charakterze og\u00f3lnym<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"2\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    <\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-8200a254aea8fa82a37c9059eb6e09ce\" style=\"color:#14357a;font-size:30px\">PROGRAMY O CHARAKTERZE OG\u00d3LNYM<\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-c689e667578119ea2822b8f083d6e382\" style=\"color:#14357a\">STRATEGIA ROZWOJU dla Powiatu \u017byrardowskiego na lata 2015-2025<\/h4>\n\n\n<div class=\"wp-block-image is-style-default wp-duotone-unset-1\">\n<figure class=\"alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/20260215-dji_fly_20260215_144030_0177_1771163834084_photo-Poprawione-Szum-1024x576.jpg\" alt=\"Realizowane polityki, programy, strategie\" class=\"wp-image-846\" style=\"width:400px\" srcset=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/20260215-dji_fly_20260215_144030_0177_1771163834084_photo-Poprawione-Szum-1024x576.jpg 1024w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/20260215-dji_fly_20260215_144030_0177_1771163834084_photo-Poprawione-Szum-300x169.jpg 300w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/20260215-dji_fly_20260215_144030_0177_1771163834084_photo-Poprawione-Szum-768x432.jpg 768w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/20260215-dji_fly_20260215_144030_0177_1771163834084_photo-Poprawione-Szum-1536x864.jpg 1536w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/20260215-dji_fly_20260215_144030_0177_1771163834084_photo-Poprawione-Szum-2048x1152.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/div>\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr X\/57\/15 Rady Powiatu&nbsp;\u017byrardowskiego z dnia 24 wrze\u015bnia 2015 r.&nbsp;<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-2eeacc55ae74e4e2ea4df21431c5c7d2\" style=\"color:#14357a\"><strong>Cel strategiczny:&nbsp;<\/strong><\/h6>\n\n\n\n<p>G\u0142\u00f3wne cele Strategii Rozwoju Powiatu \u017byrardowskiego na lata 2015-2025 to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wzrost konkurencyjno\u015bci gospodarczej powiatu,<\/li>\n\n\n\n<li>poprawa jako\u015bci \u017cycia mieszka\u0144c\u00f3w,<\/li>\n\n\n\n<li>rozw\u00f3j przestrzenny i ochrona \u015brodowiska.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-0bc138ed30c71caa0d5f46e288033ae8\" style=\"color:#14357a\"><strong>Realizacja w 2025 roku<\/strong><\/h6>\n\n\n\n<p style=\"font-size:15px\">Wdra\u017canie Strategii podlega monitoringowi i ewaluacji. Przyj\u0119te w niej cele i kierunki dzia\u0142a\u0144 realizowane s\u0105 na bie\u017c\u0105co.&nbsp;Dzia\u0142ania s\u0142u\u017c\u0105ce realizacji strategii by\u0142y podejmowane m.in. poprzez wykorzystanie \u015brodk\u00f3w zewn\u0119trznych, opisanych na stronie internetowej Powiatu \u017byrardowskiego<strong>. <strong>Link do dokumentu:<\/strong> <\/strong><a href=\"https:\/\/www.powiat-zyrardowski.pl\/plik,1695,strategia-powiatu-zyrardowskiego-na-lata-2015-2025-pdf.pdf\">STRATEGIA ROZWOJU dla Powiatu \u017byrardowskiego na lata 2015-2025<\/a><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-7430d7582c9256cae1166df118298545\" style=\"color:#14357a\"><strong>Roczny Program Wsp\u00f3\u0142pracy Powiatu \u017byrardowskiego z organizacjami pozarz\u0105dowymi oraz podmiotami, o kt\u00f3rych mowa w art. 3 ust. 3 ustawy o dzia\u0142alno\u015bci po\u017cytku publicznego i o wolontariacie na rok 2025<\/strong><\/h4>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-8b69855f64d2e0d293ed08c6922f5116\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr VII\/56\/24 Rady Powiatu \u017byrardowskiego z dnia 27 listopada 2024 r.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Program okre\u015bla formy, zasady oraz zakres wsp\u00f3\u0142pracy organ\u00f3w samorz\u0105dowych powiatu z organizacjami pozarz\u0105dowymi. Formu\u0142uje tak\u017ce zadania priorytetowe, kt\u00f3rych realizacja b\u0119dzie powi\u0105zana z udzielaniem dotacji na finansowanie lub dofinansowanie zada\u0144 powiatu powierzonych do wykonania organizacjom pozarz\u0105dowym. Celem programu jest zwi\u0119kszenie aktywno\u015bci lokalnej spo\u0142eczno\u015bci oraz rozwijanie wsp\u00f3\u0142pracy mi\u0119dzy samorz\u0105dem powiatowym a organizacjami pozarz\u0105dowymi.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-39758582738519f4b4e31089a01485b7\" style=\"color:#14357a\"><strong>Realizacja w 2025&nbsp;r.:<\/strong><\/h6>\n\n\n\n<p>W 2025 r. Zarz\u0105d Powiatu \u017byrardowskiego og\u0142osi\u0142&nbsp;<strong>8 otwartych konkurs\u00f3w ofert&nbsp;<\/strong>na realizacj\u0119 priorytetowych zada\u0144 publicznych,<strong>&nbsp;zawarto 28 um\u00f3w<\/strong>.<\/p>\n\n\n    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        \n            <div class=\"stats-grid stats-grid-1\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">\u0141\u0105czna kwota przekazana na realizacj\u0119 programu wynios\u0142a<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"330000\"\n                                  data-suffix=\",00 z\u0142\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    \n\n\n<p>Szczeg\u00f3\u0142owe informacje o realizacji Programu w 2025 r. przedstawiono w zak\u0142adce&nbsp;<a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wspolpraca-z-organizacjami-pozarzadowymi\/\"><strong>Wsp\u00f3\u0142praca z organizacjami pozarz\u0105dowymi<\/strong><\/a><strong>.<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-0959f8f65ccc5131fb4a9ab189930185\" style=\"color:#14357a;font-size:30px\">PROGRAMY Z&nbsp;OBSZARU POMOCY SPO\u0141ECZNEJ<\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-7e41a112a396f091dbbdfed5c4d9b4b9\" style=\"color:#14357a\">Strategia Rozwi\u0105zywania Problem\u00f3w Spo\u0142ecznych Powiatu \u017byrardowskiego na lata 2021 &#8211; 2026<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a&nbsp;Nr&nbsp;XXXIV\/190\/21&nbsp;Rady Powiatu \u017byrardowskiego z dnia 14 grudnia 2021&nbsp;r.&nbsp;<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Dokument strategiczny ukazuje najwa\u017cniejsze problemy spo\u0142eczne wyst\u0119puj\u0105ce w Powiecie \u017byrardowskim, takie jak bezrobocie, niepe\u0142nosprawno\u015b\u0107, uzale\u017cnienia, ub\u00f3stwo, bezdomno\u015b\u0107, przemoc w rodzinie, przest\u0119pczo\u015b\u0107. <strong>Link do dokumentu: <\/strong><a href=\"https:\/\/www.powiat-zyrardowski.pl\/plik,2290,strategia-rozwiazywania-problemow-spolecznych-powiatu-zyrardowskiego-na-lata-2021-2026-pdf.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">Strategia Rozwi\u0105zywania Problem\u00f3w Spo\u0142ecznych Powiatu \u017byrardowskiego na lata 2021 &#8211; 2026<\/a><\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-646eda3bb6c2ea2feb5452a842370af4\" style=\"color:#14357a\"><strong>Realizacja w 2025 r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>W 2025 r.&nbsp;szeroki zakres zada\u0144 maj\u0105cych na celu realizacj\u0119 Strategii by\u0142 realizowany.<\/p>\n\n\n\n<p>Szczeg\u00f3\u0142owe informacje odno\u015bnie dzia\u0142a\u0144 w obszarze pomocy spo\u0142ecznej przedstawiono w zak\u0142adce Raportu&nbsp;<a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/sprawy-spoleczne\"><strong>Sprawy spo\u0142eczne<\/strong><\/a><strong>.<\/strong><\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-a4d7ec0ba7db0c9030dce5f5dd618b00\" style=\"color:#14357a\">Powiatowy Program Przeciwdzia\u0142ania Przemocy Domowej i Ochrony Os\u00f3b Doznaj\u0105cych Przemocy Domowej w Powiecie \u017byrardowskim na lata 2023 &#8211; 2025&nbsp;<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr LVIII\/301\/23 Rady Powiatu \u017byrardowskiego z dnia 31 pa\u017adziernika 2023 r.&nbsp;<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Powiatowy Program Przeciwdzia\u0142ania Przemocy Domowej i Ochrony Os\u00f3b Doznaj\u0105cych Przemocy Domowej na lata 2023-2025 ma s\u0142u\u017cy\u0107 wytyczeniu kierunk\u00f3w dzia\u0142a\u0144 w obszarach&nbsp;profilaktycznych, interwencyjnych, zabezpieczaj\u0105cych, wspieraj\u0105cych i korekcyjno &#8211; edukacyjnych. Zaplanowane zadania maj\u0105 na celu popraw\u0119 sytuacji rodzin dotkni\u0119tych przemoc\u0105 domow\u0105, a tak\u017ce ochron\u0119 os\u00f3b i rodzin zagro\u017conych przemoc\u0105 domow\u0105. <strong>Link do dokumentu:<\/strong> <a href=\"https:\/\/bip.powiat-zyrardowski.pl\/attachments\/35\/download\" target=\"_blank\" rel=\"noreferrer noopener\">Powiatowy Program Przeciwdzia\u0142ania Przemocy Domowej i Ochrony Os\u00f3b Doznaj\u0105cych Przemocy Domowej w Powiecie \u017byrardowskim na lata 2023 &#8211; 2025&nbsp;<\/a><\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-39758582738519f4b4e31089a01485b7\" style=\"color:#14357a\"><strong>Realizacja w 2025&nbsp;r.:<\/strong><\/h6>\n\n\n\n<p>W 2025 r. realizowano wszystkie zadania w zakresie przeciwdzia\u0142ania przemocy domowej i os\u00f3b doznaj\u0105cych przemocy domowej na terenie Powiatu \u017byrardowskiego.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-1e233f34662de0804a20fee38b32e755\" style=\"color:#14357a\">Powiatowy Program Oddzia\u0142ywa\u0144 Korekcyjno-Edukacyjnych dla Os\u00f3b Stosuj\u0105cych Przemoc Domow\u0105 w Powiecie \u017byrardowskim na lata 2023-2025<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-465ae102f833d0af05308bc6342a2d4f\" style=\"color:#14357a\"><strong>Podstawa prawna:<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr LVIII\/300\/23 Rady Powiatu \u017byrardowskiego z dnia 31 pa\u017adziernika 2023 r.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-12a61dddc860643fdd2848cf6a225476\" style=\"color:#14357a\"><strong>Cel:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Zapobieganie przemocy wobec dzieci w rodzinie poprzez promowanie i wdra\u017canie prawid\u0142owych metod wychowawczych, wzmacnianie kompetencji rodzicielskich oraz rozwijanie systemu wczesnej interwencji i profilaktyki w Powiecie \u017byrardowskim.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-be6fa6f6c3ff2b921e19d4e86740f693\" style=\"color:#14357a\"><strong>Realizacja w 2025 r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>W 2025 r.&nbsp;za\u0142o\u017cenia programu korekcyjno-edukacyjnego dla sprawc\u00f3w przemocy domowej by\u0142y realizowane. Corocznie w zale\u017cno\u015bci od og\u0142oszonych zapyta\u0144 ofertowych na realizacj\u0119 zadania oraz zapotrzebowania gmin Powiatu \u017byrardowskiego, przyjmowane s\u0105 zg\u0142oszenia os\u00f3b do programu.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-bf6b5aad4f1f71e5eaa63df3119b59da\" style=\"color:#14357a\">Program Rozwoju Pieczy Zast\u0119pczej w Powiecie \u017byrardowskim na lata 2025-2027&nbsp;<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-8b69855f64d2e0d293ed08c6922f5116\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr XVIII\/131\/25 Rady Powiatu \u017byrardowskiego z dn. 17 grudnia 2025 r. w sprawie przyj\u0119cia Programu Rozwoju Pieczy Zast\u0119pczej w Powiecie \u017byrardowskim na lata 2025-2027.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>G\u0142\u00f3wnym celem pieczy zast\u0119pczej jest zapewnienie dziecku tymczasowej opieki i wychowania. Umieszczenie dziecka poza rodzin\u0105 naturaln\u0105 jest ostateczno\u015bci\u0105 i stosowane jest tylko w przypadku zagro\u017cenia dobra dziecka. Dziecko przebywa w pieczy zast\u0119pczej do momentu, gdy warunki umo\u017cliwiaj\u0105ce jego powr\u00f3t do rodziny zostan\u0105 spe\u0142nione, albo gdy znajdzie ono nowy dom w rodzinie adopcyjnej. Dla dobra dziecka mo\u017ce by\u0107 konieczne pozostawienie go w d\u0142ugoterminowym \u015brodowisku zast\u0119pczym do czasu, gdy b\u0119dzie ono gotowe do samodzielnego \u017cycia.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-fa0921fbd5aab1b20532221e07ff9e17\" style=\"color:#14357a\"><strong>Realizacja w 2025&nbsp;r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-444ac520e91ed85df67a1d51ce3be79e\" style=\"color:#14357a\"><strong>W 2025 r. realizowane by\u0142y poni\u017csze zadania:&nbsp;<\/strong><\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>tworzenie&nbsp;warunk\u00f3w&nbsp;do&nbsp;powstawania&nbsp;nowych rodzinnych&nbsp;form&nbsp;pieczy&nbsp;zast\u0119pczej poprzez prowadzenie akcji informacyjnej o formach rodzicielstwa zast\u0119pczego oraz szerzenie jego idei,<\/li>\n\n\n\n<li>budowanie pozytywnego wizerunku rodzinnej pieczy zast\u0119pczej,<\/li>\n\n\n\n<li>pozyskiwanie kandydat\u00f3w do pe\u0142nienia funkcji opiekun\u00f3w zast\u0119pczych; prowadzenie kwalifikacji oraz organizowanie&nbsp;szkole\u0144 dla kandydat\u00f3w do pe\u0142nienia funkcji rodziny zast\u0119pczej i prowadzenia RDD.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-5e1723f19d1637f9a7dd3e0471361687\" style=\"color:#14357a\"><strong>Wsparcie i rozw\u00f3j istniej\u0105cego systemu rodzinnej pieczy zast\u0119pczej<\/strong>:&nbsp;<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wsp\u00f3\u0142praca mi\u0119dzyinstytucjonalna w celu realizacji za\u0142o\u017ce\u0144 ustawowych i programowych,<\/li>\n\n\n\n<li>doskonalenie zawodowe kadry realizuj\u0105cej zadania z zakresu pieczy zast\u0119pczej,<\/li>\n\n\n\n<li>wzmacnianie kompetencji wychowawczych istniej\u0105cych rodzin zast\u0119pczych,<\/li>\n\n\n\n<li>wzmocnienie rodzin zast\u0119pczych w wype\u0142nianych funkcjach,<\/li>\n\n\n\n<li>przeciwdzia\u0142anie&nbsp;sytuacjom&nbsp;kryzysowym,<\/li>\n\n\n\n<li>przeciwdzia\u0142anie wypaleniu zawodowemu opiekun\u00f3w zast\u0119pczych; realizacja program\u00f3w\/projekt\u00f3w na rzecz pieczy zast\u0119pczej,<\/li>\n\n\n\n<li>pozyskiwanie wsparcia finansowego z zewn\u0119trznych \u017ar\u00f3de\u0142 na dofinansowywanie r\u00f3\u017cnych inicjatyw.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-c5df9437a6102cf474ecd33145e957bb\" style=\"color:#14357a\"><strong>Wspieranie dzieci umieszczonych w rodzinnych formach pieczy zast\u0119pczej<\/strong>:&nbsp;<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>doskonalenie kompetencji spo\u0142ecznych dzieci umieszczonych w rodzinach zast\u0119pczych i RDD,<\/li>\n\n\n\n<li>wsparcie dzieci w pokonywaniu trudno\u015bci edukacyjnych.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-a5cbc3352118ddd0315327711d462702\" style=\"color:#14357a\"><strong>Wsp\u00f3\u0142praca z rodzicami biologicznymi<\/strong>:&nbsp;<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>utrzymywanie i przywracanie wi\u0119zi rodzinnych,<\/li>\n\n\n\n<li>wspieranie rodzic\u00f3w biologicznych w pracy na rzecz powrotu dziecka do rodziny, regulowanie kwestii finansowych.&nbsp;<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-1413a8a81965d8c4789cbdf4876bc995\" style=\"color:#14357a\"><strong>Wspieranie pe\u0142noletnich wychowank\u00f3w przebywaj\u0105cych w pieczy zast\u0119pczej w procesie usamodzielniania<\/strong>:&nbsp;<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pomoc w starcie w doros\u0142e \u017cycie,&nbsp;<\/li>\n\n\n\n<li>pomoc w zakwaterowaniu i znalezieniu zatrudnienia,<\/li>\n\n\n\n<li>zapewnienie wsparcia finansowego.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-111878911aabdadf29908dfadd669d8a\" style=\"color:#14357a\">Powiatowy Program Dzia\u0142a\u0144 na Rzecz Os\u00f3b Niepe\u0142nosprawnych na lata 2022-2026<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr XLVII\/261\/22 Rady Powiatu \u017byrardowskiego z dnia 29 grudnia 2022 r.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Powiatowy Program Dzia\u0142a\u0144 na Rzecz Os\u00f3b Niepe\u0142nosprawnych jest zgodny z za\u0142o\u017ceniami i celami przyj\u0119tymi w Strategii Rozwi\u0105zywania Problem\u00f3w Spo\u0142ecznych w Powiecie \u017byrardowskim na lata 2021-2026. Diagnoza przeprowadzona na zakresie opracowania Strategii Rozwi\u0105zywania Problem\u00f3w Spo\u0142ecznych by\u0142a podstaw\u0105 opracowania Programu Dzia\u0142a\u0144 na rzecz Os\u00f3b Niepe\u0142nosprawnych. Program jest kontynuacj\u0105 zada\u0144 Programu przyj\u0119tego pod t\u0105 sam\u0105 nazw\u0105 na lata 2017-2021.<\/p>\n\n\n\n<p>Za\u0142o\u017cenia przyj\u0119te przy opracowywaniu Programu by\u0142y nast\u0119puj\u0105ce:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>stworzenie mo\u017cliwo\u015bci jak najlepszej rehabilitacji zawodowej i spo\u0142ecznej os\u00f3b z niepe\u0142nosprawno\u015bciami,<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wyr\u00f3wnanie szans \u017cyciowych os\u00f3b z niepe\u0142nosprawno\u015bciami,<\/li>\n\n\n\n<li>doskonalenie dzia\u0142a\u0144 systemu pomocy skierowanych do os\u00f3b z niepe\u0142nosprawno\u015bciami.<\/li>\n<\/ul>\n\n\n\n<p>Dzia\u0142ania na rzecz os\u00f3b z niepe\u0142nosprawno\u015bciami s\u0105 zadaniem og\u00f3lnospo\u0142ecznym oraz wa\u017cnym elementem polityki pa\u0144stwa, kt\u00f3ra jest skierowana na minimalizowanie skutk\u00f3w niepe\u0142nosprawno\u015bci oraz zaspokajanie potrzeb os\u00f3b niepe\u0142nosprawnych we wszystkich obszarach \u017cycia. Rozpoznanie i zdiagnozowanie potrzeb os\u00f3b z niepe\u0142nosprawno\u015bciami, a tak\u017ce podejmowanie dzia\u0142a\u0144 maj\u0105cych na celu wyeliminowanie przeszk\u00f3d utrudniaj\u0105cych osobom niepe\u0142nosprawnym aktywny udzia\u0142 w \u017cyciu spo\u0142ecznym, zapobie\u00adga marginalizacji i wykluczeniu spo\u0142ecznemu tej grupy os\u00f3b.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-be6fa6f6c3ff2b921e19d4e86740f693\" style=\"color:#14357a\"><strong>Realizacja w 2025 r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Program jest dokumentem wieloletnim przygotowywanym w celu nakre\u015blenia kierunk\u00f3w dzia\u0142ania jednostek organizacyjnych funkcjonuj\u0105cych na terenie Powiatu \u017byrardowskiego, ma charakter otwarty, a stopie\u0144 og\u00f3lno\u015bci zawartych w Programie dzia\u0142a\u0144 zosta\u0142 tak dostosowany, aby umo\u017cliwi\u0107 w przysz\u0142o\u015bci podejmowanie nowych dzia\u0142a\u0144 i inicjatyw oraz w\u0142\u0105czanie na r\u00f3\u017cnych etapach jego realizacji nowych podmiot\u00f3w, realizator\u00f3w, tre\u015bci i zada\u0144.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-3630196d796ba21b3379f54b27174b2f\" style=\"color:#14357a\">Program Pa\u0144stwowego Funduszu Rehabilitacji Os\u00f3b Niepe\u0142nosprawnych &#8222;Aktywny Samorz\u0105d&#8221;&nbsp;<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>UMOWA nr AS3\/000126\/07\/D w sprawie realizacji programu &#8222;Aktywny samorz\u0105d&#8221;, wraz z aneksami zawartymi na 2025 r.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Celem g\u0142\u00f3wnym programu \u201eAktywny samorz\u0105d\u201d jest wyeliminowanie lub zmniejszenie barier ograniczaj\u0105cych uczestnictwo beneficjent\u00f3w programu w \u017cyciu spo\u0142ecznym, zawodowym oraz w dost\u0119pie do edukacji.<\/p>\n\n\n\n<p>Kwota przyznanych w 2025 r. do Powiatu \u015brodk\u00f3w 571 152,00&nbsp;z\u0142 w tym na: modu\u0142 I 268 057,00 z\u0142,&nbsp;Modu\u0142 II&nbsp;268 239,00 z\u0142 pozosta\u0142e \u015brodki na obs\u0142ug\u0119, promocj\u0119 i ewaluacj\u0119 34 856,00 z\u0142.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-be6fa6f6c3ff2b921e19d4e86740f693\" style=\"color:#14357a\"><strong>Realizacja w 2025 r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a8c9f69b9ca48e8e253a48f371a97a59\">Powiatowe Centrum Pomocy Rodziny w \u017byrardowie w 2025 r. realizowa\u0142o program \u201eAktywny Samorz\u0105d\u201d finansowany ze \u015brodk\u00f3w PFRON.&nbsp;<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-03353e9b9de0be9d90aff5cf34b4779b\" style=\"color:#14357a\">Zadania realizowane w ramach programu na rzecz os\u00f3b z niepe\u0142nosprawno\u015bci\u0105 mieszka\u0144c\u00f3w Powiatu \u017byrardowskiego<\/h6>\n\n\n\n<p><strong>Modu\u0142 I<\/strong>&nbsp;\u2013 likwidacja barier utrudniaj\u0105cych aktywizacj\u0119 spo\u0142eczn\u0105 i zawodow\u0105 obejmuje:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Obszar A \u2013&nbsp;likwidacja barier transportowych,<\/li>\n\n\n\n<li>Obszar B \u2013 likwidacja barier w dost\u0119pie do uczestniczenia w spo\u0142ecze\u0144stwie informacyjnym,<\/li>\n\n\n\n<li>Obszar C \u2013 likwidacja barier w poruszaniu si\u0119,<\/li>\n\n\n\n<li>Obszar D \u2013&nbsp;pomoc w utrzymaniu aktywno\u015bci zawodowej poprzez zapewnienie opieki dla osoby zale\u017cnej,<\/li>\n\n\n\n<li>Obszar E \u2013 pomoc w kontynuowaniu rehabilitacji w formie wentylacji domowej.<\/li>\n<\/ul>\n\n\n\n<p><strong>Modu\u0142 II&nbsp;<\/strong>\u2013 pomoc w uzyskaniu wykszta\u0142cenia na poziomie wy\u017cszym. Otrzymane \u015brodki zabezpieczy\u0142y potrzeby os\u00f3b z niepe\u0142nosprawno\u015bci\u0105 wynikaj\u0105c ze z\u0142o\u017conych wniosk\u00f3w, kt\u00f3re spe\u0142nia\u0142y warunki realizacji programu.&nbsp;<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-6678cc574b481f25c238a76cd80796c0\" style=\"color:#14357a\">Zadania dotycz\u0105ce rehabilitacji zawodowej i spo\u0142ecznej realizowane w oparciu o Ustaw\u0119 z dnia 27 sierpnia 1997 r. o rehabilitacji zawodowej i spo\u0142ecznej oraz zatrudnianiu os\u00f3b niepe\u0142nosprawnych<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-465ae102f833d0af05308bc6342a2d4f\" style=\"color:#14357a\"><strong>Podstawa prawna:<\/strong><\/h6>\n\n\n\n<p><a href=\"https:\/\/bip.powiat-zyrardowski.pl\/attachments\/44668\/download\">UCHWA\u0141A NR X\/74\/25 RADY POWIATU \u017bYRARDOWSKIEGO z dnia 20 marca 2025 r. w sprawie okre\u015blenia zada\u0144 i podzia\u0142u \u015brodk\u00f3w Pa\u0144stwowego Funduszu Rehabilitacji Os\u00f3b Niepe\u0142nosprawnych na zadania z zakresu rehabilitacji zawodowej i spo\u0142ecznej oraz szczeg\u00f3\u0142owych zasad ich realizacji w 2025 roku.<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/bip.powiat-zyrardowski.pl\/attachments\/45368\/download\">UCHWA\u0141A NR XV\/113\/25 RADY POWIATU \u017bYRARDOWSKIEGO z dnia 30 wrze\u015bnia 2025 r. w sprawie zmiany Uchwa\u0142y NR X\/74\/25 Rady Powiatu \u017byrardowskiego z dnia 20 marca 2025 roku w sprawie okre\u015blenia zada\u0144 i podzia\u0142u \u015brodk\u00f3w Pa\u0144stwowego Funduszu Rehabilitacji Os\u00f3b Niepe\u0142nosprawnych na zadania z zakresu rehabilitacji zawodowej i spo\u0142ecznej oraz szczeg\u00f3\u0142owych zasad ich realizacji w 2025 roku<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/bip.powiat-zyrardowski.pl\/attachments\/45492\/download\">Uchwa\u0142a nr 227\/LVIII\/25 Zarz\u0105du Powiatu \u017byrardowskiego z dnia 4 listopada 2025 r. w sprawie dokonania przesuni\u0119\u0107 \u015brodk\u00f3w PFRON przypadaj\u0105cych wed\u0142ug algorytmu w 2025 roku na realizacj\u0119 zada\u0144 z zakresu rehabilitacji spo\u0142ecznej.<\/a><\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-cf7a71d32720e0ba08c1677a9587c3b8\" style=\"color:#14357a\"><strong>Cel:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Celem zada\u0144 dotycz\u0105cych rehabilitacji zawodowej i spo\u0142ecznej realizowanych w oparciu o Ustaw\u0119 z dnia 27 sierpnia 1997 r. o rehabilitacji zawodowej i spo\u0142ecznej oraz zatrudnianiu os\u00f3b niepe\u0142nosprawnych jest osi\u0105gni\u0119cie mo\u017cliwie najwy\u017cszego poziomu funkcjonowania os\u00f3b niepe\u0142nosprawnych, poprawa jako\u015bci ich \u017cycia oraz integracja spo\u0142eczna poprzez kompleksowe dzia\u0142ania obejmuj\u0105ce wsparcie w uzyskaniu i utrzymaniu zatrudnienia, poradnictwo zawodowe, szkolenia, a tak\u017ce umo\u017cliwienie pe\u0142nego uczestnictwa w \u017cyciu spo\u0142ecznym.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-547b7e3f40782a26138fcdefde09003b\" style=\"color:#14357a\"><strong>Zadania te maj\u0105 na celu:<\/strong><\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>u\u0142atwienie osobom niepe\u0142nosprawnym uzyskania i utrzymania odpowiedniego zatrudnienia oraz awansu zawodowego poprzez poradnictwo zawodowe, szkolenia i po\u015brednictwo pracy,<\/li>\n\n\n\n<li>realizacj\u0119 dzia\u0142a\u0144 rehabilitacyjnych (organizacyjnych, leczniczych, psychologicznych, technicznych, szkoleniowych, edukacyjnych i spo\u0142ecznych) przy aktywnym udziale os\u00f3b niepe\u0142nosprawnych,<\/li>\n\n\n\n<li>zapewnienie wsparcia w likwidacji barier utrudniaj\u0105cych funkcjonowanie na rynku pracy i w \u017cyciu spo\u0142ecznym,<\/li>\n\n\n\n<li>wspieranie integracji spo\u0142ecznej os\u00f3b niepe\u0142nosprawnych poprzez rehabilitacj\u0119 spo\u0142eczn\u0105, umo\u017cliwiaj\u0105c\u0105 ich pe\u0142ne uczestnictwo w \u017cyciu spo\u0142ecznym,<\/li>\n\n\n\n<li>realizacja tych cel\u00f3w odbywa si\u0119 zgodnie z uchwa\u0142ami Rady i Zarz\u0105du Powiatu \u017byrardowskiego okre\u015blaj\u0105cymi zadania oraz podzia\u0142 \u015brodk\u00f3w Pa\u0144stwowego Funduszu Rehabilitacji Os\u00f3b Niepe\u0142nosprawnych na rok 2025, co zapewnia skuteczne i adekwatne do potrzeb wsparcie os\u00f3b niepe\u0142nosprawnych na terenie powiatu.<\/li>\n<\/ul>\n\n\n    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        \n            <div class=\"stats-grid stats-grid-1\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">\u0141\u0105czna kwota przyznanych dla Powiatu w 2025 r. \u015brodk\u00f3w na realizacj\u0119 zada\u0144 <\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"3239060\"\n                                  data-suffix=\",00 z\u0142\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    \n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-5252ce2747941caeda5656232ed544ef\" style=\"color:#14357a\"><strong>PROGRAMY Z OBSZARU OCHRONY \u015aRODOWISKA I ZR\u00d3WNOWA\u017bONEGO TRANSPORTU<\/strong><\/h2>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-5e6d13279f85df838ef64e91cfea90b8\" style=\"color:#14357a\">Program Ochrony \u015arodowiska dla Powiatu \u017byrardowskiego na lata 2023 \u2013 2026 z perspektyw\u0105 na lata 2027-2030<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr III\/28\/24 Rady Powiatu \u017byrardowskiego z dnia 20 czerwca 2024 r.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ccd5fbb45031efdaac9a720e2e172c61\" style=\"color:#14357a\"><strong>Cel:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>Program jest g\u0142\u00f3wnym dokumentem strategicznym na poziomie gminy wyznaczaj\u0105cym cele ochrony \u015brodowiska, zgodnie z zasad\u0105 zr\u00f3wnowa\u017conego rozwoju, oraz okre\u015blaj\u0105cy kierunki dzia\u0142a\u0144, zmierzaj\u0105ce do osi\u0105gni\u0119cia tych cel\u00f3w.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-03230b6f546fd7a9952c79eb108b3f05\" style=\"color:#14357a\"><strong>Realizacja w 2025&nbsp;r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>W 2025 r. Program by\u0142 realizowany zgodnie z podj\u0119t\u0105 uchwa\u0142\u0105.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-7e59872e286559c7c8a117b61c5f7eb9\" style=\"color:#14357a\">Plan Zr\u00f3wnowa\u017conego Rozwoju Publicznego Transportu Zbiorowego Dla Powiatu&nbsp;\u017byrardowskiego<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-ba06a4d44621100f55f4c82c7d22a503\" style=\"color:#14357a\"><strong>Podstawa prawna:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Uchwa\u0142a Nr III\/29\/24 Rady Powiatu \u017byrardowskiego z dnia 20 czerwca 2024 r.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-cf7a71d32720e0ba08c1677a9587c3b8\" style=\"color:#14357a\"><strong>Cel:&nbsp;<\/strong><\/h6>\n\n\n\n<p>Plan Zr\u00f3wnowa\u017conego Rozwoju Publicznego Transportu Zbiorowego zwanego dalej &#8222;planem transportowy\u201e opracowany zosta\u0142 w celu zapewnienia planowego oraz uwzgl\u0119dniaj\u0105cego oczekiwania spo\u0142eczne procesu rozwoju i organizowania przewoz\u00f3w o charakterze u\u017cyteczno\u015bci publicznej. Plan zr\u00f3wnowa\u017conego rozwoju publicznego transportu zbiorowego przedstawia gwarantowane standardy us\u0142ug publicznego transportu zbiorowego, sposoby jakimi powinno si\u0119 nim&nbsp;zarz\u0105dza\u0107&nbsp;oraz mo\u017cliwo\u015bci rozwoju.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-03230b6f546fd7a9952c79eb108b3f05\" style=\"color:#14357a\"><strong>Realizacja w 2025&nbsp;r.:<\/strong>&nbsp;<\/h6>\n\n\n\n<p>W 2025 r. Program by\u0142 realizowany zgodnie z podj\u0119t\u0105 uchwa\u0142\u0105.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Podsumowanie najwa\u017cniejszych zada\u0144 realizowanych w 2025 r. przez Powiat \u017byrardowski w ramach wdra\u017cania&nbsp;lokalnych polityk, program\u00f3w oraz strategii. Spo\u015br\u00f3d licznych uchwa\u0142 Rady Powiatu dotycz\u0105cych kierunk\u00f3w realizacji lokalnych polityk, program\u00f3w i strategii,&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-532","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/comments?post=532"}],"version-history":[{"count":120,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/532\/revisions"}],"predecessor-version":[{"id":2532,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/532\/revisions\/2532"}],"wp:attachment":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/media?parent=532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}