{"id":289,"date":"2026-02-17T12:17:42","date_gmt":"2026-02-17T11:17:42","guid":{"rendered":"http:\/\/192.168.2.10\/?page_id=289"},"modified":"2026-05-08T13:16:30","modified_gmt":"2026-05-08T11:16:30","slug":"samorzad-powiatu-zyrardowskiego","status":"publish","type":"page","link":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/samorzad-powiatu-zyrardowskiego\/","title":{"rendered":"Samorz\u0105d Powiatu \u017byrardowskiego"},"content":{"rendered":"    <section class=\"photo-gallery-section gallery-block-custom caption-below gallery-6a0630b8934f9\" \n             style=\"background-color: #f5f7fa;\"\n             >\n        <div class=\"gallery-container\">\n                        <div class=\"section-header\">\n                                    <h2 style=\"color: #14357a;\">ZARZ\u0104D POWIATU \u017bYRARDOWSKIEGO<\/h2>\n                                            <\/div>\n                        \n            <div class=\"photo-gallery-grid\" style=\"grid-template-columns: repeat(3, 1fr); gap: 25px;\" data-columns=\"3\" data-spacing=\"25\">\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/05\/A.Wilk-v2.png\" alt=\"ANDRZEJ WILK\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">ANDRZEJ WILK<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Starosta Powiatu \u017byrardowskiego<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/05\/Pani-Ewa-2-scaled.jpg\" alt=\"EWA SPRINGER-KAKIET\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">EWA SPRINGER-KAKIET<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Wicestarosta Powiatu \u017byrardowskiego<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Blazej.jpg\" alt=\"B\u0141A\u017bEJ ZAWADZKI\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">B\u0141A\u017bEJ ZAWADZKI<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Cz\u0142onek Zarz\u0105du (etatowy)<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/05\/B.Sznajder-2-scaled.jpg\" alt=\"BEATA SZNAJDER\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">BEATA SZNAJDER<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Cz\u0142onek Zarz\u0105du (nieetatowy)<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/herb1.png\" alt=\"Powiat \u017byrardowski\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">Powiat \u017byrardowski<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/05\/M.Staniak-2-scaled.jpg\" alt=\"MICHA\u0141 STANIAK\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">MICHA\u0141 STANIAK<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Cz\u0142onek Zarz\u0105du (nieetatowy)<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    .gallery-block-custom .gallery-container {\n        max-width: 1400px;\n        margin: 0 auto;\n        padding: 80px 20px;\n    }\n    \n    .gallery-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .gallery-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .gallery-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .gallery-block-custom .photo-gallery-grid {\n        display: grid;\n    }\n    \n    .gallery-block-custom .gallery-item {\n        position: relative;\n        overflow: hidden;\n        border-radius: 12px;\n        box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease;\n    }\n    \n    .gallery-block-custom .gallery-item:hover {\n        transform: translateY(-5px);\n    }\n    \n    .gallery-block-custom .gallery-image-wrapper {\n        position: relative;\n        width: 100%;\n        overflow: hidden;\n    }\n    \n    .gallery-block-custom .gallery-image-wrapper img {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n    \n    .gallery-block-custom .gallery-caption-below {\n        padding: 12px 16px;\n        background: #fff;\n        font-size: 0.95rem;\n        text-align: center;\n    }\n    \n    .gallery-block-custom .gallery-caption-below .gallery-caption,\n    .gallery-block-custom .gallery-overlay .gallery-caption {\n        display: block;\n        text-align: center;\n        width: 100%;\n    }\n    \n    .gallery-block-custom .gallery-sub-caption {\n        display: block;\n        text-align: center;\n        width: 100%;\n        font-size: 0.85rem;\n        font-weight: 400;\n        text-transform: none !important;\n        margin-top: 4px;\n    }\n    \n    .gallery-block-custom .gallery-overlay {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background: rgba(30, 60, 114, 0.9);\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        opacity: 0;\n        transition: opacity 0.3s ease;\n    }\n    \n    .gallery-block-custom .gallery-item:hover .gallery-overlay {\n        opacity: 1;\n    }\n    \n    .gallery-block-custom .gallery-caption {\n        color: white;\n        font-size: 1.1rem;\n        font-weight: 600;\n        padding: 0 20px;\n        text-align: center;\n    }\n    \n    .gallery-block-custom .gallery-arrow {\n        color: white;\n        font-size: 2rem;\n        margin-top: 15px;\n    }\n    \n    @media (max-width: 768px) {\n        .gallery-block-custom .photo-gallery-grid {\n            display: block !important;\n            grid-template-columns: 1fr !important;\n        }\n        \n        .gallery-block-custom .gallery-item {\n            width: 100% !important;\n            margin-bottom: 20px;\n        }\n        \n        .gallery-block-custom .gallery-item:last-child {\n            margin-bottom: 0;\n        }\n        \n        .gallery-block-custom .gallery-container {\n            padding-left: 10px !important;\n            padding-right: 10px !important;\n        }\n        \n        .gallery-block-custom.photo-gallery-section {\n            padding: 30px 0 !important;\n        }\n    }\n    <\/style>\n    \n        \n    \n\n    <section class=\"photo-gallery-section gallery-block-custom caption-below gallery-6a0630b8935c1\" \n             style=\"background-color: #f5f7fa;\"\n             >\n        <div class=\"gallery-container\">\n                        <div class=\"section-header\">\n                                    <h2 style=\"color: #14357a;\">SKARBNIK POWIATU \u017bYRARDOWSKIEGO<\/h2>\n                                            <\/div>\n                        \n            <div class=\"photo-gallery-grid gallery-centered\" style=\"display: flex; flex-wrap: wrap; justify-content: center; gap: 25px;\" data-columns=\"3\" data-spacing=\"25\">\n                                    <div class=\"gallery-item\" \n                         style=\"width: calc((100% - 50px) \/ 3);\"                         >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 280px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Pani-Skarbnik-scaled.jpg\" alt=\"BO\u017bENA KOT\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">BO\u017bENA KOT<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    .gallery-block-custom .gallery-container {\n        max-width: 1400px;\n        margin: 0 auto;\n        padding: 80px 20px;\n    }\n    \n    .gallery-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .gallery-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .gallery-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .gallery-block-custom .photo-gallery-grid {\n        display: grid;\n    }\n    \n    .gallery-block-custom .gallery-item {\n        position: relative;\n        overflow: hidden;\n        border-radius: 12px;\n        box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease;\n    }\n    \n    .gallery-block-custom .gallery-item:hover {\n        transform: translateY(-5px);\n    }\n    \n    .gallery-block-custom .gallery-image-wrapper {\n        position: relative;\n        width: 100%;\n        overflow: hidden;\n    }\n    \n    .gallery-block-custom .gallery-image-wrapper img {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n    \n    .gallery-block-custom .gallery-caption-below {\n        padding: 12px 16px;\n        background: #fff;\n        font-size: 0.95rem;\n        text-align: center;\n    }\n    \n    .gallery-block-custom .gallery-caption-below .gallery-caption,\n    .gallery-block-custom .gallery-overlay .gallery-caption {\n        display: block;\n        text-align: center;\n        width: 100%;\n    }\n    \n    .gallery-block-custom .gallery-sub-caption {\n        display: block;\n        text-align: center;\n        width: 100%;\n        font-size: 0.85rem;\n        font-weight: 400;\n        text-transform: none !important;\n        margin-top: 4px;\n    }\n    \n    .gallery-block-custom .gallery-overlay {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background: rgba(30, 60, 114, 0.9);\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        opacity: 0;\n        transition: opacity 0.3s ease;\n    }\n    \n    .gallery-block-custom .gallery-item:hover .gallery-overlay {\n        opacity: 1;\n    }\n    \n    .gallery-block-custom .gallery-caption {\n        color: white;\n        font-size: 1.1rem;\n        font-weight: 600;\n        padding: 0 20px;\n        text-align: center;\n    }\n    \n    .gallery-block-custom .gallery-arrow {\n        color: white;\n        font-size: 2rem;\n        margin-top: 15px;\n    }\n    \n    @media (max-width: 768px) {\n        .gallery-block-custom .photo-gallery-grid {\n            display: block !important;\n            grid-template-columns: 1fr !important;\n        }\n        \n        .gallery-block-custom .gallery-item {\n            width: 100% !important;\n            margin-bottom: 20px;\n        }\n        \n        .gallery-block-custom .gallery-item:last-child {\n            margin-bottom: 0;\n        }\n        \n        .gallery-block-custom .gallery-container {\n            padding-left: 10px !important;\n            padding-right: 10px !important;\n        }\n        \n        .gallery-block-custom.photo-gallery-section {\n            padding: 30px 0 !important;\n        }\n    }\n    <\/style>\n    \n        \n    \n\n    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        <div class=\"section-header\">\n                                    <h2 style=\"color: #14357a;\">DZIA\u0141ALNO\u015a\u0106 ZARZ\u0104DU POWIATU \u017bYRARDOWSKIEGO W 2025 R.<\/h2>\n                                            <\/div>\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: #14357a;\">posiedze\u0144 zarz\u0105du<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"37\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #14357a;\">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: #14357a;\">podj\u0119tych uchwa\u0142<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"135\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #14357a;\">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    <section class=\"photo-gallery-section gallery-block-custom caption-below gallery-6a0630b893670\" \n             style=\"background-color: #f5f7fa;\"\n             >\n        <div class=\"gallery-container\">\n                        <div class=\"section-header\">\n                                    <h2 style=\"color: #14357a;\">RADA POWIATU \u017bYRARDOWSKIEGO VII KADENCJI<\/h2>\n                                            <\/div>\n                        \n            <div class=\"photo-gallery-grid\" style=\"grid-template-columns: repeat(3, 1fr); gap: 30px;\" data-columns=\"3\" data-spacing=\"30\">\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/B.Rusinowska-scaled.jpg\" alt=\"BEATA RUSINOWSKA\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">BEATA RUSINOWSKA<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Przewodnicz\u0105ca Rady Powiatu \u017byrardowskiego<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/R.Janiszewski-scaled.jpg\" alt=\"ROBERT JANISZEWSKI\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">ROBERT JANISZEWSKI<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Wiceprzewodnicz\u0105cy Rady Powiatu \u017byrardowskiego<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item\" \n                                                  >\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/W.Szustakiewicz-scaled.jpg\" alt=\"WOJCIECH SZUSTAKIEWICZ\" loading=\"lazy\" style=\"object-fit: contain;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #14357a;\">WOJCIECH SZUSTAKIEWICZ<\/span>\n                                                                            <span class=\"gallery-sub-caption\" style=\"color: #14357a;\">Wiceprzewodnicz\u0105cy Rady Powiatu \u017byrardowskiego<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    .gallery-block-custom .gallery-container {\n        max-width: 1400px;\n        margin: 0 auto;\n        padding: 80px 20px;\n    }\n    \n    .gallery-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .gallery-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .gallery-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .gallery-block-custom .photo-gallery-grid {\n        display: grid;\n    }\n    \n    .gallery-block-custom .gallery-item {\n        position: relative;\n        overflow: hidden;\n        border-radius: 12px;\n        box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease;\n    }\n    \n    .gallery-block-custom .gallery-item:hover {\n        transform: translateY(-5px);\n    }\n    \n    .gallery-block-custom .gallery-image-wrapper {\n        position: relative;\n        width: 100%;\n        overflow: hidden;\n    }\n    \n    .gallery-block-custom .gallery-image-wrapper img {\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n    }\n    \n    .gallery-block-custom .gallery-caption-below {\n        padding: 12px 16px;\n        background: #fff;\n        font-size: 0.95rem;\n        text-align: center;\n    }\n    \n    .gallery-block-custom .gallery-caption-below .gallery-caption,\n    .gallery-block-custom .gallery-overlay .gallery-caption {\n        display: block;\n        text-align: center;\n        width: 100%;\n    }\n    \n    .gallery-block-custom .gallery-sub-caption {\n        display: block;\n        text-align: center;\n        width: 100%;\n        font-size: 0.85rem;\n        font-weight: 400;\n        text-transform: none !important;\n        margin-top: 4px;\n    }\n    \n    .gallery-block-custom .gallery-overlay {\n        position: absolute;\n        top: 0;\n        left: 0;\n        right: 0;\n        bottom: 0;\n        background: rgba(30, 60, 114, 0.9);\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n        opacity: 0;\n        transition: opacity 0.3s ease;\n    }\n    \n    .gallery-block-custom .gallery-item:hover .gallery-overlay {\n        opacity: 1;\n    }\n    \n    .gallery-block-custom .gallery-caption {\n        color: white;\n        font-size: 1.1rem;\n        font-weight: 600;\n        padding: 0 20px;\n        text-align: center;\n    }\n    \n    .gallery-block-custom .gallery-arrow {\n        color: white;\n        font-size: 2rem;\n        margin-top: 15px;\n    }\n    \n    @media (max-width: 768px) {\n        .gallery-block-custom .photo-gallery-grid {\n            display: block !important;\n            grid-template-columns: 1fr !important;\n        }\n        \n        .gallery-block-custom .gallery-item {\n            width: 100% !important;\n            margin-bottom: 20px;\n        }\n        \n        .gallery-block-custom .gallery-item:last-child {\n            margin-bottom: 0;\n        }\n        \n        .gallery-block-custom .gallery-container {\n            padding-left: 10px !important;\n            padding-right: 10px !important;\n        }\n        \n        .gallery-block-custom.photo-gallery-section {\n            padding: 30px 0 !important;\n        }\n    }\n    <\/style>\n    \n        \n    \n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" data-id=\"995\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m-1024x683.png\" alt=\"Rada Powiatu \u017byrardowskiego VII Kadencji\" class=\"wp-image-995\" srcset=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m-1024x683.png 1024w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m-300x200.png 300w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m-768x512.png 768w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m-1536x1024.png 1536w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m-600x400.png 600w, https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/04\/Starostwo-1-Radni-m.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-c7f224296a94d6bf4d311c9ce0929130\" style=\"color:#14357a;line-height:2\">RADNI RADY POWIATU \u017bYRARDOWSKIEGO <br>VII KADENCJI 2024-2029<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#1e3c72;color:#1e3c72\"\/>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Beata Rusinowska<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Wojciech Szustakiewicz<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Robert Janiszewski<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Zdzis\u0142aw Banasiak<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Jacek Czubak<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Krzysztof Dziwisz<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Stanis\u0142aw Kaniszewsk<\/strong>i<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-center is-layout-flow wp-block-column-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Andrzej Ko\u017abia\u0142<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Dariusz Mitrowski<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Bo\u017cena Moskal<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Jerzy Nazi\u0119b\u0142o<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Krzysztof Rdest<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Zbigniew Rokicki<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Ewa Springer-Kakiet<\/strong><\/li>\n<\/ul>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-vertically-aligned-top is-layout-flow wp-block-column-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Micha\u0142 Staniak<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Klaudiusz Stusi\u0144ski<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Beata Sznajder<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Andrzej Wilk<\/strong><\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>B\u0142a\u017cej Zawadzki<\/strong><\/li>\n<\/ul>\n<\/div>\n<\/div>\n\n\n\n<hr class=\"wp-block-separator has-text-color has-alpha-channel-opacity has-background\" style=\"background-color:#1e3c72;color:#1e3c72\"\/>\n\n\n    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        <div class=\"section-header\">\n                                    <h2 style=\"color: #14357a;\">DZIA\u0141ALNO\u015a\u0106 RADY POWIATU W 2025 R.<\/h2>\n                                            <\/div>\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: #14357a;\">podj\u0119tych uchwa\u0142<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"79\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #14357a;\">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: #14357a;\">interpelacje \/ zapytania<\/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: #14357a;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\">zg\u0142oszone  do Starosty Powiatu \u017byrardowskiego<\/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<h5 class=\"wp-block-heading has-white-color has-text-color has-background has-link-color wp-elements-c8f505fd10d85d6182c52f39c6f7629b\" style=\"background-color:#14357a;line-height:2\">CZYTAJ DALEJ:<br><strong><br>&#8211; <span style=\"text-decoration: underline;\"><a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/uchwaly-rady-powiatu\/\">Wykaz Uchwa\u0142 Rady Powiatu \u017byrardowskiego podj\u0119tych w 2025 r.<\/a> <\/span><br>&#8211; <span style=\"text-decoration: underline;\"><a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/uchwaly-zarzadu-powiatu\/\">Wykaz Uchwa\u0142 Zarz\u0105du Powiatu \u017byrardowskiego podj\u0119tych w 2025 r.<\/a><\/span><br><a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/zarzadzenia-starosty-zyrardowskiego\/\">&#8211;<\/a> <span style=\"text-decoration: underline;\"><a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/zarzadzenia-starosty-zyrardowskiego\/\">Wykaz Zarz\u0105dze\u0144 Starosty Powiatu \u017byrardowskiego wydanych w 2025 r.<\/a><\/span><br><a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/czlonkostwo-powiatu-w-zwiazkach-i-stowarzyszeniach\/\">&#8211;<\/a> <span style=\"text-decoration: underline;\"><a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/czlonkostwo-powiatu-w-zwiazkach-i-stowarzyszeniach\/\">Cz\u0142onkostwo Powiatu \u017byrardowskiego w zwi\u0105zkach i stowarzyszeniach<\/a><\/span><\/strong><br><\/h5>\n","protected":false},"excerpt":{"rendered":"<p>RADNI RADY POWIATU \u017bYRARDOWSKIEGO VII KADENCJI 2024-2029 CZYTAJ DALEJ:&#8211; Wykaz Uchwa\u0142 Rady Powiatu \u017byrardowskiego podj\u0119tych w 2025 r. &#8211; Wykaz Uchwa\u0142 Zarz\u0105du Powiatu \u017byrardowskiego podj\u0119tych w 2025 r.&#8211; Wykaz Zarz\u0105dze\u0144&#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-289","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/289","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=289"}],"version-history":[{"count":96,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/289\/revisions"}],"predecessor-version":[{"id":2503,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/289\/revisions\/2503"}],"wp:attachment":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/media?parent=289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}