{"id":287,"date":"2026-02-17T12:17:42","date_gmt":"2026-02-17T11:17:42","guid":{"rendered":"http:\/\/192.168.2.10\/?page_id=287"},"modified":"2026-05-06T16:55:09","modified_gmt":"2026-05-06T14:55:09","slug":"demografia","status":"publish","type":"page","link":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/demografia\/","title":{"rendered":"Demografia"},"content":{"rendered":"    <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;\">Liczba mieszka\u0144c\u00f3w<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"74841\"\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;\">\u0179r\u00f3d\u0142o danych: BDL, stan na 30.06.2025 r.<\/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    <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-2\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">LICZBA URODZE\u0143<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"253\"\n                                  data-suffix=\"\"\n                                  data-separator=\"period\"\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;\">LICZBA ZGON\u00d3W<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"472\"\n                                  data-suffix=\"\"\n                                  data-separator=\"period\"\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 class=\"has-text-align-center\">Spadek liczby ludno\u015bci mo\u017ce wynika\u0107 z kilku czynnik\u00f3w. Jednym z nich jest ujemny przyrost naturalny, czyli przewaga liczby zgon\u00f3w nad liczb\u0105 urodze\u0144. Istotn\u0105 rol\u0119 mo\u017ce r\u00f3wnie\u017c odgrywa\u0107 migracja. Dodatkowo proces starzenia si\u0119 spo\u0142ecze\u0144stwa wp\u0142ywa na stopniowe zmniejszanie liczby ludno\u015bci.<\/p>\n\n\n    <section class=\"bar-chart-section bar-chart-vertical\" id=\"bar-chart-6a062fa899ed2\">\n        <div class=\"bar-chart-container\">\n                        <div class=\"section-header\">\n                                    <h2>Liczba mieszka\u0144c\u00f3w Powiatu w latach<\/h2>\n                                            <\/div>\n                        \n                        \n            <div class=\"bar-chart-wrapper bar-chart-wrapper-vertical\">\n                                    <!-- Vertical Layout -->\n                                            <div class=\"bar-column\" data-index=\"0\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2018<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 100%; background-color: #1e3c72;\"\n                                             data-value=\"75969\"\n                                             data-formatted=\"75 969\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 969<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"bar-column\" data-index=\"1\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2019<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 99.760428595875%; background-color: #1e3c72;\"\n                                             data-value=\"75787\"\n                                             data-formatted=\"75 787\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 787<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"bar-column\" data-index=\"2\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2020<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 99.233898037357%; background-color: #1e3c72;\"\n                                             data-value=\"75387\"\n                                             data-formatted=\"75 387\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 387<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"bar-column\" data-index=\"3\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2021<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 99.835459200463%; background-color: #1e3c72;\"\n                                             data-value=\"75844\"\n                                             data-formatted=\"75 844\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 844<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"bar-column\" data-index=\"4\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2022<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 99.033816425121%; background-color: #1e3c72;\"\n                                             data-value=\"75235\"\n                                             data-formatted=\"75 235\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 235<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"bar-column\" data-index=\"5\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2023<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 99.033816425121%; background-color: #1e3c72;\"\n                                             data-value=\"75235\"\n                                             data-formatted=\"75 235\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 235<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                            <div class=\"bar-column\" data-index=\"6\">\n                            <div class=\"bar-column-label\" style=\"color: #1e3c72;\">2024<\/div>\n                            <div class=\"bar-column-chart\">\n                                                                    <div class=\"bar-vertical-wrapper\">\n                                        <div class=\"bar-vertical-fill\" \n                                             style=\"height: 98.841632771262%; background-color: #1e3c72;\"\n                                             data-value=\"75089\"\n                                             data-formatted=\"75 089\"\n                                             data-label=\"\"\n                                             data-value-index=\"0\">\n                                            <span class=\"bar-value-vertical\" style=\"color: #ffffff;\">75 089<\/span>\n                                        <\/div>\n                                    <\/div>\n                                                            <\/div>\n                        <\/div>\n                                                <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    .bar-chart-section {\n        padding: 80px 20px;\n        background: #f5f7fa;\n    }\n    \n    .bar-chart-container {\n        max-width: 1200px;\n        margin: 0 auto;\n    }\n    \n    .bar-chart-section .section-header {\n        text-align: center;\n        margin-bottom: 40px;\n    }\n    \n    .bar-chart-section .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .bar-chart-section .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n        max-width: 800px;\n        margin: 0 auto;\n    }\n    \n    .chart-legend-top {\n        display: flex;\n        justify-content: center;\n        flex-wrap: wrap;\n        gap: 20px;\n        margin-bottom: 40px;\n        padding: 20px;\n        background: white;\n        border-radius: 8px;\n        box-shadow: 0 2px 10px rgba(0,0,0,0.05);\n    }\n    \n    .legend-item-inline {\n        display: flex;\n        align-items: center;\n        gap: 10px;\n        padding: 8px 12px;\n        border-radius: 6px;\n        transition: background 0.2s ease;\n        cursor: pointer;\n    }\n    \n    .legend-item-inline:hover,\n    .legend-item-inline.active {\n        background: #e8f4f8;\n    }\n    \n    .legend-color-box {\n        width: 24px;\n        height: 24px;\n        border-radius: 4px;\n        display: block;\n    }\n    \n    .legend-text {\n        font-weight: 600;\n        color: #333;\n        font-size: 1rem;\n    }\n    \n    \/* Horizontal Layout *\/\n    .bar-chart-wrapper-horizontal {\n        background: white;\n        border-radius: 12px;\n        padding: 40px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n    }\n    \n    \/* Siatka t\u0142a wykresu - w\u0142\u0105czana opcj\u0105 showGrid *\/\n    .bar-chart-with-grid {\n        position: relative;\n    }\n    \n    \/* Siatka pozioma w uk\u0142adzie horizontal (linie pionowe co 25%) *\/\n    .bar-chart-wrapper-horizontal.bar-chart-with-grid {\n        background-image:\n            linear-gradient(to right, var(--grid-color) 1px, transparent 1px);\n        background-size: 25% 100%;\n        background-position: 40px 0;\n        background-repeat: repeat-x;\n    }\n    \n    \/* Siatka pozioma w uk\u0142adzie vertical i vertical-stacked *\/\n    .bar-chart-wrapper-vertical.bar-chart-with-grid,\n    .bar-chart-wrapper-vertical-stacked.bar-chart-with-grid {\n        background-image:\n            linear-gradient(to top, var(--grid-color) 1px, transparent 1px);\n        background-size: 100% 25%;\n        background-position: 0 -1px;\n        background-repeat: repeat-y;\n    }\n    \n    .bar-item {\n        margin-bottom: 40px;\n        padding-bottom: 40px;\n        border-bottom: 1px solid #e0e0e0;\n    }\n    \n    .bar-item:last-child {\n        margin-bottom: 0;\n        padding-bottom: 0;\n        border-bottom: none;\n    }\n    \n    .bar-label {\n        font-weight: 600;\n        color: #1e3c72;\n        margin-bottom: 10px;\n        font-size: 1.1rem;\n    }\n    \n    .bars-container {\n        display: flex;\n        flex-direction: column;\n        gap: 12px;\n    }\n    \n    .bar-wrapper {\n        position: relative;\n        height: 40px;\n        background: #f0f0f0;\n        border-radius: 6px;\n        overflow: hidden;\n    }\n    \n    .bar-fill {\n        height: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: flex-end;\n        padding-right: 15px;\n        border-radius: 6px;\n        transition: all 0.3s ease;\n        position: relative;\n        cursor: pointer;\n    }\n    \n    .bar-fill:hover {\n        filter: brightness(1.1);\n        transform: scaleX(1.02);\n        transform-origin: left;\n    }\n    \n    .bar-value {\n        color: white;\n        font-weight: 700;\n        font-size: 0.95rem;\n        text-shadow: 0 1px 2px rgba(0,0,0,0.2);\n    }\n    \n    \/* Vertical Layout *\/\n    .bar-chart-wrapper-vertical {\n        background: white;\n        border-radius: 12px;\n        padding: 40px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        display: flex;\n        justify-content: space-evenly;\n        align-items: flex-end;\n        gap: 40px;\n        min-height: 400px;\n        width: 100%;\n    }\n    \n    .bar-column {\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        gap: 15px;\n        flex: 1 1 auto;\n        min-width: 60px;\n        max-width: none;\n    }\n    \n    .bar-column-chart {\n        display: flex;\n        gap: 12px;\n        height: 300px;\n        align-items: flex-end;\n        width: 100%;\n    }\n    \n    .bar-vertical-wrapper {\n        flex: 1;\n        height: 100%;\n        background: #f0f0f0;\n        border-radius: 6px 6px 0 0;\n        display: flex;\n        flex-direction: column;\n        justify-content: flex-end;\n        overflow: hidden;\n    }\n    \n    .bar-vertical-fill {\n        width: 100%;\n        border-radius: 6px 6px 0 0;\n        transition: all 0.3s ease;\n        position: relative;\n        display: flex;\n        align-items: flex-start;\n        justify-content: center;\n        padding-top: 8px;\n        cursor: pointer;\n    }\n    \n    .bar-vertical-fill:hover {\n        filter: brightness(1.1);\n        transform: scaleY(1.02);\n        transform-origin: bottom;\n    }\n    \n    .bar-value-vertical {\n        color: white;\n        font-weight: 700;\n        font-size: 0.85rem;\n        text-shadow: 0 1px 2px rgba(0,0,0,0.2);\n        writing-mode: horizontal-tb;\n    }\n    \n    \/* Vertical Stacked Layout *\/\n    .bar-column-chart-stacked {\n        display: flex !important;\n        flex-direction: column;\n        gap: 0;\n        align-items: stretch;\n        justify-content: flex-start;\n        background: #f0f0f0;\n        border-radius: 6px 6px 0 0;\n        overflow: hidden;\n    }\n    \n    .bar-stacked-segment {\n        width: 100%;\n        transition: all 0.3s ease;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        cursor: pointer;\n        min-height: 2px;\n    }\n    \n    .bar-stacked-segment:hover {\n        filter: brightness(1.1);\n    }\n    \n    .bar-value-stacked {\n        color: white;\n        font-weight: 700;\n        font-size: 0.85rem;\n        text-shadow: 0 1px 2px rgba(0,0,0,0.3);\n    }\n    \n    \/* Stacked layout container needs proper alignment *\/\n    .bar-chart-wrapper-vertical-stacked {\n        display: flex;\n        gap: 40px;\n        align-items: flex-end;\n        height: 400px;\n    }\n    \n    .bar-chart-wrapper-vertical-stacked .bar-column {\n        flex: 1;\n        display: flex;\n        flex-direction: column;\n        justify-content: flex-end;\n        height: 100%;\n    }\n    \n    .bar-chart-wrapper-vertical-stacked .bar-column-label {\n        order: 2;\n        margin-top: 10px;\n        text-align: center;\n    }\n    \n    .bar-chart-wrapper-vertical-stacked .bar-column-chart-stacked {\n        order: 1;\n    }\n    \n    .bar-column-label {\n        font-weight: 600;\n        color: #1e3c72;\n        font-size: 0.95rem;\n        text-align: center;\n        word-break: break-word;\n        max-width: 100%;\n        overflow: hidden;\n        transition: transform 0.3s ease;\n    }\n    \n    \/* Rotate labels if they don't fit (when column is narrow) *\/\n    @media (max-width: 768px) {\n        .bar-column-label {\n            font-size: 0.85rem;\n            text-align: center;\n            word-break: keep-all;\n            white-space: normal;\n            line-height: 1.3;\n            max-width: 100%;\n        }\n    }\n    \n    \/* Also rotate when many columns (8+) make each one narrow *\/\n    .bar-column:has(+ .bar-column + .bar-column + .bar-column + .bar-column + .bar-column + .bar-column + .bar-column) .bar-column-label {\n        writing-mode: vertical-rl;\n        transform: rotate(180deg);\n        text-align: left;\n        max-height: 80px;\n    }\n    \n    @media (max-width: 968px) {\n        .bar-chart-wrapper-vertical,\n        .bar-chart-wrapper-vertical-stacked {\n            overflow-x: auto;\n            overflow-y: hidden;\n            justify-content: flex-start;\n            gap: 15px;\n            padding: 30px 20px;\n            -webkit-overflow-scrolling: touch;\n        }\n        \n        .bar-chart-wrapper-vertical .bar-column,\n        .bar-chart-wrapper-vertical-stacked .bar-column {\n            min-width: 110px;\n            flex: 0 0 auto;\n        }\n    }\n    \n    @media (max-width: 768px) {\n        .chart-legend-top {\n            gap: 15px;\n        }\n        \n        .bar-chart-wrapper-horizontal {\n            padding: 20px;\n        }\n        \n        .bar-label {\n            font-size: 1rem;\n        }\n        \n        .bar-wrapper {\n            height: 35px;\n        }\n        \n        .bar-value {\n            font-size: 0.85rem;\n        }\n        \n        .bar-chart-wrapper-vertical,\n        .bar-chart-wrapper-vertical-stacked {\n            padding: 20px 15px;\n            gap: 12px;\n            overflow-x: auto;\n            overflow-y: hidden;\n            -webkit-overflow-scrolling: touch;\n        }\n        \n        .bar-chart-wrapper-vertical .bar-column,\n        .bar-chart-wrapper-vertical-stacked .bar-column {\n            min-width: 100px;\n            flex: 0 0 auto;\n        }\n        \n        .bar-column-chart {\n            height: 250px;\n        }\n        \n        .bar-column-label {\n            font-size: 0.85rem;\n            line-height: 1.3;\n        }\n    }\n    \n    @media (max-width: 480px) {\n        .bar-chart-wrapper-vertical,\n        .bar-chart-wrapper-vertical-stacked {\n            padding: 15px 10px;\n        }\n        \n        .bar-chart-wrapper-vertical .bar-column,\n        .bar-chart-wrapper-vertical-stacked .bar-column {\n            min-width: 90px;\n        }\n        \n        .bar-column-chart {\n            height: 200px;\n        }\n        \n        .bar-value-vertical {\n            font-size: 0.7rem;\n        }\n        \n        .bar-column-label {\n            font-size: 0.8rem;\n        }\n    }\n    <\/style>\n    \n    <script>\n    (function() {\n        const chartId = 'bar-chart-6a062fa899ed2';\n        const chartSection = document.getElementById(chartId);\n        if (!chartSection) return;\n        \n        const legendItems = chartSection.querySelectorAll('.legend-item-inline');\n        const barFills = chartSection.querySelectorAll('.bar-fill, .bar-vertical-fill, .bar-stacked-segment');\n        \n        \/\/ Najechanie na s\u0142upek - pod\u015bwietla legend\u0119 i ustawia tooltip\n        barFills.forEach(bar => {\n            bar.addEventListener('mouseenter', function() {\n                const valueIndex = this.dataset.valueIndex;\n                const label = this.dataset.label;\n                \n                \/\/ Pod\u015bwietl odpowiedni\u0105 pozycj\u0119 legendy\n                legendItems.forEach(item => {\n                    item.classList.remove('active');\n                    if (item.dataset.valueIndex === valueIndex) {\n                        item.classList.add('active');\n                    }\n                });\n                \n                \/\/ Tooltip: u\u017cyj data-formatted (zawsze zawiera pe\u0142ne formatowanie\n                \/\/ z separatorem dziesi\u0119tnym i jednostk\u0105, nawet gdy <span> nie jest\n                \/\/ wyrenderowany - np. dla bardzo ma\u0142ych segment\u00f3w stacked)\n                const formattedValue = this.dataset.formatted || this.dataset.value;\n                this.setAttribute('title', label + ': ' + formattedValue);\n            });\n            \n            bar.addEventListener('mouseleave', function() {\n                legendItems.forEach(item => item.classList.remove('active'));\n            });\n        });\n        \n        \/\/ Legend hover highlights bars\n        legendItems.forEach(item => {\n            item.addEventListener('mouseenter', function() {\n                const valueIndex = this.dataset.valueIndex;\n                \n                \/\/ Highlight all bars with this value index\n                barFills.forEach(bar => {\n                    if (bar.dataset.valueIndex === valueIndex) {\n                        bar.style.filter = 'brightness(1.2)';\n                    } else {\n                        bar.style.opacity = '0.5';\n                    }\n                });\n            });\n            \n            item.addEventListener('mouseleave', function() {\n                barFills.forEach(bar => {\n                    bar.style.filter = '';\n                    bar.style.opacity = '';\n                });\n            });\n        });\n    })();\n    <\/script>\n    \n    ","protected":false},"excerpt":{"rendered":"<p>Spadek liczby ludno\u015bci mo\u017ce wynika\u0107 z kilku czynnik\u00f3w. Jednym z nich jest ujemny przyrost naturalny, czyli przewaga liczby zgon\u00f3w nad liczb\u0105 urodze\u0144. Istotn\u0105 rol\u0119 mo\u017ce r\u00f3wnie\u017c odgrywa\u0107 migracja. Dodatkowo proces&#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-287","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/287","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=287"}],"version-history":[{"count":12,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/287\/revisions"}],"predecessor-version":[{"id":1929,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/287\/revisions\/1929"}],"wp:attachment":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/media?parent=287"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}