{"id":542,"date":"2026-04-24T13:32:36","date_gmt":"2026-04-24T11:32:36","guid":{"rendered":"http:\/\/192.168.2.11\/?page_id=542"},"modified":"2026-05-13T15:08:05","modified_gmt":"2026-05-13T13:08:05","slug":"edukacja-publiczna","status":"publish","type":"page","link":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/edukacja-publiczna\/","title":{"rendered":"Edukacja publiczna"},"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;\">WYDATKI O\u015aWIATOWE W 2025 R.<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"75304756\"\n                                  data-suffix=\",48 z\u0142\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    \n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-38fd2ec60f03d6574db46e5f2ef4117d\" style=\"color:#14357a\">W 2025 r. Powiat \u017byrardowski by\u0142 organem prowadz\u0105cym dla:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Liceum Og\u00f3lnokszta\u0142c\u0105cego im. Czes\u0142awa Ta\u0144skiego w Puszczy Maria\u0144skiej,<\/li>\n\n\n\n<li>Liceum Og\u00f3lnokszta\u0142c\u0105cego im. Szarych Szereg\u00f3w w Mszczonowie,<\/li>\n\n\n\n<li>Liceum Og\u00f3lnokszta\u0142c\u0105cego Szko\u0142y Mistrzostwa Sportowego w Kolarstwie w \u017byrardowie,<\/li>\n\n\n\n<li>Zespo\u0142u Szk\u00f3\u0142 nr 1 w \u017byrardowie,<\/li>\n\n\n\n<li>Zespo\u0142u Szk\u00f3\u0142 nr 2 w \u017byrardowie,<\/li>\n\n\n\n<li>Zespo\u0142u Szk\u00f3\u0142 nr 3 im. Marii Sk\u0142odowskiej \u2013 Curie w Wiskitkach,<\/li>\n\n\n\n<li>Zespo\u0142u Szk\u00f3\u0142 w Mszczonowie,<\/li>\n\n\n\n<li>Specjalnego O\u015brodka Szkolno \u2013 Wychowawczego im. Marii Grzegorzewskiej w \u017byrardowie,<\/li>\n\n\n\n<li>M\u0142odzie\u017cowego Domu Kultury w \u017byrardowie,<\/li>\n\n\n\n<li>&nbsp;Poradni Psychologiczno \u2013 Pedagogicznej w \u017byrardowie.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-2637305fecc0c6c69b2c81da625a5665\" style=\"color:#14357a\">oraz organem dotuj\u0105cym dla:<\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Liceum Og\u00f3lnokszta\u0142c\u0105cego dla Doros\u0142ych \u201eHorn\u201d,<\/li>\n\n\n\n<li>ATUT Szko\u0142y Policealnej w \u017byrardowie,<\/li>\n\n\n\n<li>ATUT Liceum Og\u00f3lnokszta\u0142c\u0105cego dla Doros\u0142ych w \u017byrardowie,<\/li>\n\n\n\n<li>Policealnej Szko\u0142y przy Collegium Masoviense,<\/li>\n\n\n\n<li>Niepublicznej Poradni Psychologiczno \u2013 Pedagogicznej \u201eKropka\u201d w \u017byrardowie,<\/li>\n\n\n\n<li>Niepublicznej Poradni Psychologiczno \u2013 Pedagogicznej \u201eHarmonia\u201d w \u017byrardowie,<\/li>\n\n\n\n<li>Szko\u0142y Policealnej AS w \u017byrardowie.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-f12b445c46cf534367afa370479b1dd6\" style=\"color:#14357a\"><strong>Zatrudni<\/strong><strong>enie kadry pedagogicznej oraz pracownik\u00f3w administracji i obs\u0142ugi w roku szkolnym 2024\/2025 (etaty)<\/strong><\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th><strong>Wyszczeg\u00f3lnienie*<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>K<\/strong>adra pedagogiczna<\/th><th class=\"has-text-align-center\" data-align=\"center\">Kadra administracji i obs\u0142ugi<\/th><th class=\"has-text-align-center\" data-align=\"center\">Zatrudnienie \u0142\u0105cznie<\/th><\/tr><\/thead><tbody><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 1 w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">49,17<\/td><td class=\"has-text-align-center\" data-align=\"center\">17,71<\/td><td class=\"has-text-align-center\" data-align=\"center\">66,88<\/td><\/tr><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 2 w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">37,59<\/td><td class=\"has-text-align-center\" data-align=\"center\">9,32<\/td><td class=\"has-text-align-center\" data-align=\"center\">46,91<\/td><\/tr><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 3 w Wiskitkach<\/td><td class=\"has-text-align-center\" data-align=\"center\">32,36<\/td><td class=\"has-text-align-center\" data-align=\"center\">6,86<\/td><td class=\"has-text-align-center\" data-align=\"center\">39,22<\/td><\/tr><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 w Mszczonowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">32,71<\/td><td class=\"has-text-align-center\" data-align=\"center\">4,34<\/td><td class=\"has-text-align-center\" data-align=\"center\">37,05<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Szarych Szereg\u00f3w w Mszczonowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">14,71<\/td><td class=\"has-text-align-center\" data-align=\"center\">5<\/td><td class=\"has-text-align-center\" data-align=\"center\">19,71<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Czes\u0142awa Ta\u0144skiego w Puszczy Maria\u0144skiej<\/td><td class=\"has-text-align-center\" data-align=\"center\">18,23<\/td><td class=\"has-text-align-center\" data-align=\"center\">6,5<\/td><td class=\"has-text-align-center\" data-align=\"center\">24,73<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce Szko\u0142a Mistrzostwa Sportowego w Kolarstwie w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">9,12<\/td><td class=\"has-text-align-center\" data-align=\"center\">6<\/td><td class=\"has-text-align-center\" data-align=\"center\">15,12<\/td><\/tr><tr><td>Specjalny O\u015brodek Szkolno &#8211; Wychowawczy im. Marii Grzegorzewskiej w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">91,99<\/td><td class=\"has-text-align-center\" data-align=\"center\">29,98<\/td><td class=\"has-text-align-center\" data-align=\"center\">121,97<\/td><\/tr><tr><td>M\u0142odzie\u017cowy Dom Kultury w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">10,51<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,71<\/td><td class=\"has-text-align-center\" data-align=\"center\">14,22<\/td><\/tr><tr><td>Poradnia Psychologiczno &#8211; Pedagogiczna w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">15,46<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">17,46<\/td><\/tr><tr><td><strong>RAZEM<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>311,85<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>91,42<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>403,27<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\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: #1e3c72;\">W roku szkolnym 2024\/2025 w plac\u00f3wkach o\u015bwiatowych prowadzonych przez Powiat zatrudnionych by\u0142o:<\/h2>\n                                            <\/div>\n                        \n            <div class=\"stats-grid stats-grid-3\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">Os\u00f3b \u0142\u0105cznie<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"493\"\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;\">na 403,27 etatach<\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">Nauczycieli<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"380\"\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;\">na 311,85 etatach<\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">Pracownik\u00f3w administracji i obs\u0142ugi<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"113\"\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;\">na 91,42 etatach<\/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<h4 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-c400f8b9e2ab109f2c7198a30b682544\" style=\"color:#14357a\"><strong>Liczba etat\u00f3w wg stopnia awansu zawodowego<\/strong><\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained\">\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th><strong>Nazwa szko\u0142y*<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\" colspan=\"2\"><strong>Pocz\u0105tkuj\u0105cy<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\" colspan=\"2\"><strong>Mianowani<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\" colspan=\"2\"><strong>Dyplomowani<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\" colspan=\"2\"><strong>Prowadz\u0105cy zaj. nieb\u0119d\u0105cy nauczycielami i nieposiadaj\u0105cy stopnia awansu zawodowego<\/strong><\/th><\/tr><tr><th><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>osoby<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>etaty<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>osoby<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>etaty<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>osoby<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>etaty<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>osoby<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>etaty<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 1 w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">8<\/td><td class=\"has-text-align-center\" data-align=\"center\">7,44<\/td><td class=\"has-text-align-center\" data-align=\"center\">16<\/td><td class=\"has-text-align-center\" data-align=\"center\">14,83<\/td><td class=\"has-text-align-center\" data-align=\"center\">29<\/td><td class=\"has-text-align-center\" data-align=\"center\">26,9<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><\/tr><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 2 w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">6<\/td><td class=\"has-text-align-center\" data-align=\"center\">5,62<\/td><td class=\"has-text-align-center\" data-align=\"center\">8<\/td><td class=\"has-text-align-center\" data-align=\"center\">6,68<\/td><td class=\"has-text-align-center\" data-align=\"center\">28<\/td><td class=\"has-text-align-center\" data-align=\"center\">25,29<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><\/tr><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 3 w Wiskitkach<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,39<\/td><td class=\"has-text-align-center\" data-align=\"center\">10<\/td><td class=\"has-text-align-center\" data-align=\"center\">9,26<\/td><td class=\"has-text-align-center\" data-align=\"center\">29<\/td><td class=\"has-text-align-center\" data-align=\"center\">20,71<\/td><td class=\"has-text-align-center\" data-align=\"center\">7<\/td><td class=\"has-text-align-center\" data-align=\"center\">5,31<\/td><\/tr><tr><td>Zesp\u00f3\u0142 Szk\u00f3\u0142 w Mszczonowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">6<\/td><td class=\"has-text-align-center\" data-align=\"center\">4,63<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,56<\/td><td class=\"has-text-align-center\" data-align=\"center\">32<\/td><td class=\"has-text-align-center\" data-align=\"center\">25,52<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Szarych Szereg\u00f3w w Mszczonowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,83<\/td><td class=\"has-text-align-center\" data-align=\"center\">5<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,61<\/td><td class=\"has-text-align-center\" data-align=\"center\">15<\/td><td class=\"has-text-align-center\" data-align=\"center\">10,27<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,33<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Czes\u0142awa Ta\u0144skiego w Puszczy Maria\u0144skiej<\/td><td class=\"has-text-align-center\" data-align=\"center\">4<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,82<\/td><td class=\"has-text-align-center\" data-align=\"center\">6<\/td><td class=\"has-text-align-center\" data-align=\"center\">4,11<\/td><td class=\"has-text-align-center\" data-align=\"center\">12<\/td><td class=\"has-text-align-center\" data-align=\"center\">11,3<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce Szko\u0142a Mistrzostwa Sportowego w Kolarstwie w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,12<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,48<\/td><td class=\"has-text-align-center\" data-align=\"center\">13<\/td><td class=\"has-text-align-center\" data-align=\"center\">5,52<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><\/tr><tr><td>Specjalny O\u015brodek Szkolno &#8211; Wychowawczy im. Marii Grzegorzewskiej w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">17<\/td><td class=\"has-text-align-center\" data-align=\"center\">16,5<\/td><td class=\"has-text-align-center\" data-align=\"center\">21<\/td><td class=\"has-text-align-center\" data-align=\"center\">18,6<\/td><td class=\"has-text-align-center\" data-align=\"center\">62<\/td><td class=\"has-text-align-center\" data-align=\"center\">56,89<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,5<\/td><\/tr><tr><td>M\u0142odzie\u017cowy Dom Kultury w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,65<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,5<\/td><td class=\"has-text-align-center\" data-align=\"center\">14<\/td><td class=\"has-text-align-center\" data-align=\"center\">8,36<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><\/tr><tr><td>Poradnia Psychologiczno &#8211; Pedagogiczna w \u017byrardowie<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,21<\/td><td class=\"has-text-align-center\" data-align=\"center\">8<\/td><td class=\"has-text-align-center\" data-align=\"center\">5,3<\/td><td class=\"has-text-align-center\" data-align=\"center\">10<\/td><td class=\"has-text-align-center\" data-align=\"center\">7,95<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;<\/td><\/tr><tr><td><strong>RAZEM<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>53<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>44,21<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>83<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>68,93<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>244<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>198,71<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>15<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>12,14<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div><\/div>\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: #1e3c72;\">W roku szkolnym 2024\/2025 liczba nauczycieli wg stopnia awansu zawodowego<\/h2>\n                                            <\/div>\n                        \n            <div class=\"stats-grid stats-grid-4\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">nauczyciele pocz\u0105tkuj\u0105cy<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"53\"\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;\">OSOBY<\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">nauczyciele mianowani<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"83\"\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;\">OSOBY<\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">nauczyciele dyplomowani<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"244\"\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;\">OSOBY<\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">prowadz\u0105cy zaj\u0119cia<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"15\"\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;\">OS\u00d3B nieb\u0119d\u0105cych nauczycielami i nieposiadaj\u0105cych stopnia awansu zawodowego<\/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>W okresie od dnia 1 wrze\u015bnia 2024 roku do dnia 31 sierpnia 2025 r. przeprowadzono osiem post\u0119powa\u0144 egzaminacyjnych na stopie\u0144 nauczyciela mianowanego.<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-abdccdeb658502dd8ef97d72b9c01d17\" style=\"color:#14357a\">Komisje egzaminacyjne zosta\u0142y powo\u0142ane dla:<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>trzech nauczycieli ze Specjalnego O\u015brodka Szkolno \u2013 Wychowawczego im. Marii Grzegorzewskiej<br>w \u017byrardowie,<\/li>\n\n\n\n<li>dw\u00f3ch nauczycieli z Zespo\u0142u Szk\u00f3\u0142 nr 2 w \u017byrardowie,<\/li>\n\n\n\n<li>dw\u00f3ch nauczycieli z Zespo\u0142u Szk\u00f3\u0142 nr 3 im. Marii Sk\u0142odowskiej \u2013 Curie w Wiskitkach,<\/li>\n\n\n\n<li>jednego nauczyciela z Zespo\u0142u Szk\u00f3\u0142 w Mszczonowie.<\/li>\n<\/ul>\n\n\n\n<p>Wszyscy nauczyciele przyst\u0119puj\u0105cy do egzaminu uzyskali stopie\u0144 nauczyciela mianowanego.<\/p>\n\n\n\n<p>W roku szkolnym 2024\/2025 na mocy prawa, b\u0119d\u0105c nauczycielem akademickim posiadaj\u0105cym stopie\u0144 naukowy i co najmniej 5-letni okres pracy w szkole wy\u017cszej, stopie\u0144 nauczyciela mianowanego zosta\u0142 nadany nauczycielowi z Zespo\u0142u Szk\u00f3\u0142 nr 2 w \u017byrardowie.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-3172bbc2b40bdca805505a109972d6b4\" style=\"color:#14357a\"><strong>Stan organizacyjny szk\u00f3\u0142 i plac\u00f3wek o\u015bwiatowych w roku szkolnym 2024\/2025 (wg typ\u00f3w szk\u00f3\u0142)<\/strong><\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th><strong>Nazwa szko\u0142y*<\/strong><\/th><th><strong>Typy szko\u0142y<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Liczba uczni\u00f3w<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Liczba oddzia\u0142\u00f3w<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 1 w \u017byrardowie<\/strong><\/td><td><strong>zesp\u00f3\u0142 szk\u00f3\u0142<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>917<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>35<\/strong><\/td><\/tr><tr><td>Technikum w Zespole Szk\u00f3\u0142 nr 1 w \u017byrardowie<\/td><td>technikum<\/td><td class=\"has-text-align-center\" data-align=\"center\">725<\/td><td class=\"has-text-align-center\" data-align=\"center\">28<\/td><\/tr><tr><td>Bran\u017cowa szko\u0142a I stopnia w Zespole Szk\u00f3\u0142 nr 1 w \u017byrardowie<\/td><td>bran\u017cowa szko\u0142a I stopnia<\/td><td class=\"has-text-align-center\" data-align=\"center\">192<\/td><td class=\"has-text-align-center\" data-align=\"center\">7<\/td><\/tr><tr><td><strong>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 2 w \u017byrardowie<\/strong><\/td><td><strong>zesp\u00f3\u0142 szk\u00f3\u0142<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>373<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>18<\/strong><\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Karola Dittricha w Zespole Szk\u00f3\u0142 nr 2 w \u017byrardowie<\/td><td>liceum og\u00f3lnokszta\u0142c\u0105ce<\/td><td class=\"has-text-align-center\" data-align=\"center\">178<\/td><td class=\"has-text-align-center\" data-align=\"center\">8<\/td><\/tr><tr><td>Technikum im. Karola Dittricha w Zespole Szk\u00f3\u0142 nr 2 w \u017byrardowie<\/td><td>technikum<\/td><td class=\"has-text-align-center\" data-align=\"center\">142<\/td><td class=\"has-text-align-center\" data-align=\"center\">7<\/td><\/tr><tr><td>Bran\u017cowa szko\u0142a I stopnia im. Karola Dittricha w Zespole Szk\u00f3\u0142 nr 2 w \u017byrardowie<\/td><td>bran\u017cowa szko\u0142a I stopnia<\/td><td class=\"has-text-align-center\" data-align=\"center\">53<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><\/tr><tr><td><strong>Zesp\u00f3\u0142 Szk\u00f3\u0142 nr 3 im. Marii Sk\u0142odwskiej-Curie w Wiskitkach<\/strong><\/td><td><strong>zesp\u00f3\u0142 szk\u00f3\u0142<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>349<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>21<\/strong><\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Marii Sk\u0142odwskiej-Curie w Wiskitkach<\/td><td>liceum og\u00f3lnokszta\u0142c\u0105ce<\/td><td class=\"has-text-align-center\" data-align=\"center\">116<\/td><td class=\"has-text-align-center\" data-align=\"center\">6<\/td><\/tr><tr><td>Technikum im. Marii Sk\u0142odowskiej-Curie w Wiskitkach<\/td><td>technikum<\/td><td class=\"has-text-align-center\" data-align=\"center\">233<\/td><td class=\"has-text-align-center\" data-align=\"center\">15<\/td><\/tr><tr><td><strong>Zespo\u0142 Szk\u00f3\u0142 w Mszczonowie<\/strong><\/td><td><strong>zesp\u00f3\u0142 szk\u00f3\u0142<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>352<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>17<\/strong><\/td><\/tr><tr><td>Technikum w Mszczonowie<\/td><td>technikum<\/td><td class=\"has-text-align-center\" data-align=\"center\">234<\/td><td class=\"has-text-align-center\" data-align=\"center\">12<\/td><\/tr><tr><td>Bran\u017cowa Szko\u0142a I stopnia w Mszczonowie<\/td><td>bran\u017cowa szko\u0142a I stopnia<\/td><td class=\"has-text-align-center\" data-align=\"center\">118<\/td><td class=\"has-text-align-center\" data-align=\"center\">5<\/td><\/tr><tr><td><strong>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Szarych Szereg\u00f3w w Mszczonowie<\/strong><\/td><td><strong>liceum og\u00f3lnokszta\u0142c\u0105ce<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>174<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>8<\/strong><\/td><\/tr><tr><td><strong>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Czes\u0142awa Ta\u0144skiego w Puszczy Maria\u0144skiej<\/strong><\/td><td><strong>liceum og\u00f3lnokszta\u0142c\u0105ce<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>286<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>10<\/strong><\/td><\/tr><tr><td><strong>Liceum Og\u00f3lnokszta\u0142c\u0105ce Szko\u0142a Mistrzostwa Sportowego w Kolarstwie w \u017byrardowie<\/strong><\/td><td><strong>liceum og\u00f3lnokszta\u0142c\u0105ce<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>23<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>4<\/strong><\/td><\/tr><tr><td><strong>Specjalny O\u015brodek Szkolno &#8211; Wychowawczy im. Marii Grzegorzewskiej w \u017byrardowie<\/strong><\/td><td><strong>&nbsp;<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>173<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>61<\/strong><\/td><\/tr><tr><td>Specjalna bran\u017cowa szko\u0142a I stopnia w Specjalnym O\u015brodku Szkolno &#8211; Wychowawczym w \u017byrardowie<\/td><td>bran\u017cowa szko\u0142a I stopnia<\/td><td class=\"has-text-align-center\" data-align=\"center\">47<\/td><td class=\"has-text-align-center\" data-align=\"center\">7<\/td><\/tr><tr><td>Szko\u0142a Specjalna Przysposabiaj\u0105ca do Pracy w Specjalnym O\u015brodku Szkolno &#8211; Wychowawczym w \u017byrardowie<\/td><td>szko\u0142a specjalna przysposabiaj\u0105ca do pracy<\/td><td class=\"has-text-align-center\" data-align=\"center\">32<\/td><td class=\"has-text-align-center\" data-align=\"center\">20<\/td><\/tr><tr><td>Szko\u0142a Podstawowa Specjalna w w Specjalnym O\u015brodku Szkolno &#8211; Wychowawczym w \u017byrardowie<\/td><td>szko\u0142a podstawowa<\/td><td class=\"has-text-align-center\" data-align=\"center\">82<\/td><td class=\"has-text-align-center\" data-align=\"center\">31<\/td><\/tr><tr><td>Przedszkole Specjalne w Specjalnym O\u015brodku Szkolno &#8211; Wychowawczym w \u017byrardowie<\/td><td>przedszkole<\/td><td class=\"has-text-align-center\" data-align=\"center\">12<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><\/tr><tr><td colspan=\"2\"><strong>RAZEM<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>2 647<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>174<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-4f08d2ee6e09c5a49c9e3fe58d2e4451\" style=\"color:#14357a\"><strong>Dzia\u0142ania na rzecz uczni\u00f3w ze specjalnymi potrzebami edukacyjnymi<\/strong><\/h4>\n\n\n\n<p>W ka\u017cdej ze szk\u00f3\u0142 uczniowie ze specjalnymi potrzebami otrzymuj\u0105 wsparcie przewidziane przepisami prawa. W ka\u017cdym przypadku realizowane s\u0105 zaj\u0119cia dodatkowe wynikaj\u0105ce ze wskaza\u0144 zawartych w orzeczeniach czy opiniach. W miar\u0119 potrzeb, szko\u0142y zapewniaj\u0105 pomoc specjalist\u00f3w i organizuj\u0105 wymagane formy wsparcia oraz metody pracy i terapii. W realizacji wsparcia psychologiczno-pedagogicznego kluczow\u0105 rol\u0119 odgrywa praca i zaanga\u017cowanie Poradni Psychologiczno-Pedagogicznej.&nbsp;<\/p>\n\n\n\n<p>Na uwag\u0119 zas\u0142uguje fakt, \u017ce z ka\u017cdym rokiem zwi\u0119ksza si\u0119 liczba uczni\u00f3w, kt\u00f3rzy potrzebuj\u0105 wsparcia psychologiczno-pedagogicznego, zar\u00f3wno w szko\u0142ach specjalnych jak i og\u00f3lnodost\u0119pnych. Coraz wi\u0119cej uwagi po\u015bwi\u0119ca si\u0119 kszta\u0142ceniu specjalnemu oraz przygotowaniu wyspecjalizowanej kadry do organizowania dla nich wsparcia w szko\u0142ach.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-010a47541b6a8a529f0e87c177ae2368\" style=\"color:#14357a\">PORADNIA PSYCHOLOGICZNO-PEDAGOGICZNA W \u017bYRARDOWIE<\/h2>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-cff062c40a7aed63513d4997225954dd\" style=\"color:#14357a\"><strong>W roku szkolnym 2024\/2025:<\/strong><\/h4>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-214d1a27a878af163f9b719780adda91\" style=\"color:#14357a\">Prowadzona by\u0142a diagnoza i terapia dzieci ze specjalnymi potrzebami, pomoc\u0105 obj\u0119to <strong>1564 dzieci<\/strong> i przeprowadzono <strong>2273 bada\u0144 diagnostycznych<\/strong>:<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>814 diagnoz pedagogicznych,<\/li>\n\n\n\n<li>954 diagnozy psychologiczne,<\/li>\n\n\n\n<li>500 diagnoz logopedycznych,<\/li>\n\n\n\n<li>1 diagnoza Surdopedagogiczna,<\/li>\n\n\n\n<li>&nbsp;4 diagnozy ADOS-2.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-6d2cafb61b2460b25e8aac7e3ff6b0e4\" style=\"color:#14357a\">Testami dla uczni\u00f3w II klas Licealnych w Powiecie \u017byrardowskim APIS \u2013 Z obj\u0119to 343 osoby.<\/h5>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-8ce6cfeef990be401d58484d8e3c1514\" style=\"color:#14357a\">Terapi\u0105 indywidualn\u0105 obj\u0119to 97 dzieci w tym:<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pedagogiczn\u0105 \u2013 30,<\/li>\n\n\n\n<li>psychologiczn\u0105 \u2013 15,<\/li>\n\n\n\n<li>logopedyczn\u0105 \u2013 52.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-e5fada81b1736852f879076f81e08902\" style=\"color:#14357a\">Przeprowadzono: porady i konsultacje:<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dla szkolnych specjalist\u00f3w \u2013 36,<\/li>\n\n\n\n<li>dla rodzic\u00f3w \u2013 119,<\/li>\n\n\n\n<li>konsultacje dyrektora (z rodzicami, dyrektorami, nauczycielami, asystentami) \u2013 178,<\/li>\n\n\n\n<li>indywidualne z doradztwa zawodowego dla uczni\u00f3w i ich rodzic\u00f3w \u2013 10.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-aef71fa15fc52f9ebdb6f0ddc0aa6aed\" style=\"color:#14357a\">W poradni wydano 700 opinii w nast\u0119puj\u0105cych obszarach:<\/h5>\n\n\n\n<ul class=\"wp-block-list\">\n<li>wczesnego wspomagania rozwoju dziecka \u2013 86,<\/li>\n\n\n\n<li>odroczenia spe\u0142niania obowi\u0105zku szkolnego \u2013 47,<\/li>\n\n\n\n<li>specyficznych trudno\u015bci w uczeniu si\u0119 \u2013 163,<\/li>\n\n\n\n<li>dostosowania wymaga\u0144 edukacyjnych wynikaj\u0105cych z programu nauczania do indywidualnych potrzeb edukacyjnych ucznia \u2013 59,<\/li>\n\n\n\n<li>udzielenie zezwolenia na indywidualny program lub tok nauki \u2013 4,<\/li>\n\n\n\n<li>obj\u0119cia dziecka pomoc\u0105 psychologiczno \u2013 pedagogiczn\u0105 w przedszkolu \u2013 82,<\/li>\n\n\n\n<li>obj\u0119cia dziecka pomoc\u0105 psychologiczno \u2013 pedagogiczn\u0105 w szkole \u2013 245,<\/li>\n\n\n\n<li>zwolnienie z nauki drugiego j\u0119zyka \u2013 6,<\/li>\n\n\n\n<li>zindywidualizowanej \u015bcie\u017cki kszta\u0142cenia \u2013 4,<\/li>\n\n\n\n<li>zezwolenia na prac\u0119 zarobkow\u0105 \u2013 3,<\/li>\n\n\n\n<li>przyspieszenie obowi\u0105zku szkolnego \u2013 1.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-425412e566a3bface12d230eb687de60\" style=\"color:#14357a\">Przygotowano i wydano w formie pisemnej 203 informacje z wynik\u00f3w bada\u0144\/obserwacji przeprowadzonych przez psychologa\/logoped\u0119.<\/h5>\n\n\n\n<h5 class=\"wp-block-heading has-text-color has-link-color wp-elements-072def5ad192d44ecd9fb0028a456793\" style=\"color:#14357a\">Wydano 487 orzecze\u0144 dotycz\u0105cych ro\u017cnych rodzaj\u00f3w niepe\u0142nosprawno\u015bci.<\/h5>\n\n\n\n<p>Poradnia Psychologiczno &#8211; Pedagogiczna w \u017byrardowie w roku szkolnym 2024\/2025 przeprowadzi\u0142a spotkania dla szkolnych specjalist\u00f3w: psycholog\u00f3w, pedagog\u00f3w i logoped\u00f3w ze szk\u00f3\u0142 i przedszkoli z terenu powiatu \u017cyrardowskiego w ramach programu \u201eSie\u0107 wsp\u00f3\u0142pracy dla szkolnych specjalist\u00f3w\u201d. <em><\/em><\/p>\n\n\n\n<p>W ramach wsp\u00f3\u0142pracy z uczelniami wy\u017cszymi 10 student\u00f3w zrealizowa\u0142o praktyki w PPP.<\/p>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-3b5d722c717c942138b2b5728185d346\" style=\"color:#14357a\"><strong>SZKO\u0141Y I PLAC\u00d3WKI NIEPUBLICZNE<\/strong><strong><\/strong><\/h2>\n\n\n    <section class=\"animated-stats-section statistics-block-custom\" \n             style=\"background-color: #ffffff; \n                    \">\n        <div class=\"stats-container\">\n                        \n            <div class=\"stats-grid stats-grid-1\">\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">DOTACJE Z BUD\u017bETU DLA SZK\u00d3\u0141 NIEPUBLICZNYCH w 2025 r<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"8643833\"\n                                  data-suffix=\",73 z\u0142\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    \n\n    <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                                                    <p>W roku szkolnym 2024\/2025 do szk\u00f3\u0142 i plac\u00f3wek niepublicznych dotowanych przez Powiat \u017byrardowski <\/p>\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: #1e3c72;\">ucz\u0119szcza\u0142o uczni\u00f3w<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"1897\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                                    <div class=\"stat-box\" style=\"background-color: #f5f7fa;\">\n                        <h3 class=\"stat-title\" style=\"color: #1e3c72;\">w oddzia\u0142ach<\/h3>\n                        <div class=\"stat-number-wrapper\">\n                            <span class=\"stat-number\" \n                                  data-target=\"62\"\n                                  data-suffix=\"\"\n                                  data-separator=\"space\"\n                                  data-decimal-separator=\"comma\"\n                                  style=\"color: #1e3c72;\">0<\/span>\n                        <\/div>\n                        <p class=\"stat-description\" style=\"color: #666666;\"><\/p>\n                    <\/div>\n                            <\/div>\n        <\/div>\n    <\/section>\n    \n    <style>\n    \/* Statistics Block Styles - matches homepage layout *\/\n    .statistics-block-custom {\n        padding: 80px 20px;\n        position: relative;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stats-container {\n        max-width: 1400px;\n        margin: 0 auto;\n    }\n    \n    .statistics-block-custom .section-header {\n        text-align: center;\n        margin-bottom: 60px;\n    }\n    \n    .statistics-block-custom .section-header h2 {\n        font-size: 2.5rem;\n        color: #1e3c72;\n        margin-bottom: 15px;\n    }\n    \n    .statistics-block-custom .section-header p {\n        font-size: 1.2rem;\n        color: #666;\n    }\n    \n    .statistics-block-custom .stats-grid {\n        display: grid;\n        gap: 40px;\n        margin: 0 auto;\n    }\n    \n    \/* 2 blocks *\/\n    .statistics-block-custom .stats-grid-2 {\n        grid-template-columns: repeat(2, minmax(0, 1fr));\n        max-width: 900px;\n    }\n    \n    \/* 3 blocks *\/\n    .statistics-block-custom .stats-grid-3 {\n        grid-template-columns: repeat(3, minmax(0, 1fr));\n        max-width: 1200px;\n    }\n    \n    \/* 4 blocks *\/\n    .statistics-block-custom .stats-grid-4 {\n        grid-template-columns: repeat(4, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    \/* 5 blocks *\/\n    .statistics-block-custom .stats-grid-5 {\n        grid-template-columns: repeat(5, minmax(0, 1fr));\n        max-width: 1400px;\n    }\n    \n    .statistics-block-custom .stat-box {\n        text-align: center;\n        padding: 40px 20px;\n        background: rgba(255, 255, 255, 0.95);\n        border-radius: 12px;\n        box-shadow: 0 4px 20px rgba(0,0,0,0.1);\n        transition: transform 0.3s ease, box-shadow 0.3s ease;\n        min-width: 0;\n        max-width: 100%;\n        overflow: hidden;\n    }\n    \n    .statistics-block-custom .stat-box:hover {\n        transform: translateY(-10px);\n        box-shadow: 0 8px 30px rgba(0,0,0,0.15);\n    }\n    \n    .statistics-block-custom .stat-title {\n        font-size: 1.3rem;\n        color: #1e3c72;\n        font-weight: 600;\n        margin-bottom: 20px;\n        text-transform: uppercase;\n        letter-spacing: 1px;\n        overflow: hidden;\n        max-width: 100%;\n        word-wrap: break-word;\n        overflow-wrap: break-word;\n    }\n    \n    .statistics-block-custom .stat-number-wrapper {\n        margin: 20px 0;\n        overflow: hidden;\n        max-width: 100%;\n    }\n    \n    .statistics-block-custom .stat-number {\n        font-size: 4rem;\n        font-weight: 700;\n        color: #2a5298;\n        display: inline-block;\n        line-height: 1;\n    }\n    \n    .statistics-block-custom .stat-description {\n        font-size: 1rem;\n        color: #666;\n        line-height: 1.6;\n        margin-top: 20px;\n    }\n    \n    \/* Responsive for statistics block *\/\n    @media (max-width: 1200px) {\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(3, minmax(0, 1fr));\n        }\n    }\n    \n    @media (max-width: 968px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: repeat(2, minmax(0, 1fr));\n            gap: 30px;\n        }\n    }\n    \n    @media (max-width: 640px) {\n        .statistics-block-custom .stats-grid-2,\n        .statistics-block-custom .stats-grid-3,\n        .statistics-block-custom .stats-grid-4,\n        .statistics-block-custom .stats-grid-5 {\n            grid-template-columns: minmax(0, 1fr);\n        }\n        \n        .statistics-block-custom .stat-number {\n            font-size: 3rem;\n        }\n        \n        .statistics-block-custom .stat-title {\n            font-size: 1.1rem;\n        }\n        \n        .statistics-block-custom .section-header h2 {\n            font-size: 2rem;\n        }\n    }\n    <\/style>\n    \n        <script>\n    if (!window.statsAnimationLoaded) {\n        window.statsAnimationLoaded = true;\n        \n        \/\/ Calculate the best fitting font size for a number (without applying it)\n        \/\/ Returns the size that makes the number fit, or null if no scaling needed\n        function calculateBestFontSize(element) {\n            const statBox = element.closest('.stat-box');\n            if (!statBox) return null;\n            \n            \/\/ Reset to default size to measure naturally\n            element.style.fontSize = '';\n            element.style.whiteSpace = 'nowrap';\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ Get available width from stat-box\n            const boxStyle = window.getComputedStyle(statBox);\n            const paddingLeft = parseFloat(boxStyle.paddingLeft) || 0;\n            const paddingRight = parseFloat(boxStyle.paddingRight) || 0;\n            const availableWidth = statBox.clientWidth - paddingLeft - paddingRight - 20;\n            \n            if (availableWidth <= 0) return null;\n            \n            \/\/ Current computed font size\n            const computedSize = parseFloat(window.getComputedStyle(element).fontSize);\n            \n            \/\/ Force reflow\n            void element.offsetHeight;\n            \n            \/\/ If fits at default size, return null (no scaling needed)\n            if (element.scrollWidth <= availableWidth) return null;\n            \n            \/\/ Binary search for best size\n            let minSize = 10;\n            let maxSize = computedSize;\n            let bestSize = minSize;\n            \n            while (maxSize - minSize > 0.5) {\n                const testSize = (minSize + maxSize) \/ 2;\n                element.style.fontSize = testSize + 'px';\n                void element.offsetHeight;\n                \n                if (element.scrollWidth <= availableWidth) {\n                    bestSize = testSize;\n                    minSize = testSize;\n                } else {\n                    maxSize = testSize;\n                }\n            }\n            \n            \/\/ Reset to default - we'll apply the synchronized size separately\n            element.style.fontSize = '';\n            void element.offsetHeight;\n            \n            return bestSize;\n        }\n        \n        \/\/ Fit all numbers in a module to the same (smallest needed) font size\n        function fitNumbersInModule(moduleSection) {\n            if (!moduleSection) return;\n            const numbers = moduleSection.querySelectorAll('.stat-number');\n            if (numbers.length === 0) return;\n            \n            \/\/ Calculate required size for each number\n            let smallestSize = null;\n            numbers.forEach(function(numEl) {\n                const size = calculateBestFontSize(numEl);\n                if (size !== null) {\n                    if (smallestSize === null || size < smallestSize) {\n                        smallestSize = size;\n                    }\n                }\n            });\n            \n            \/\/ Apply the smallest size to ALL numbers in this module (or reset if all fit)\n            numbers.forEach(function(numEl) {\n                if (smallestSize !== null) {\n                    numEl.style.fontSize = smallestSize + 'px';\n                } else {\n                    numEl.style.fontSize = '';\n                }\n            });\n        }\n        \n        \/\/ Backward compatible single-element fit function (operates on whole module)\n        function fitNumberToBox(element) {\n            const moduleSection = element.closest('.animated-stats-section');\n            if (moduleSection) {\n                fitNumbersInModule(moduleSection);\n            }\n        }\n        \n        function animateCounter(element, start, end, duration) {\n            const suffix = element.getAttribute('data-suffix') || '';\n            const separator = element.getAttribute('data-separator') || 'space';\n            const decimalSep = element.getAttribute('data-decimal-separator') || 'comma';\n            const decChar = (decimalSep === 'period') ? '.' : ',';\n            const hasDecimal = end.toString().includes('.');\n            const decimalPlaces = hasDecimal ? end.toString().split('.')[1].length : 0;\n            let startTime = null;\n            \n            function formatNumber(num, sep) {\n                const roundedNum = hasDecimal ? num.toFixed(decimalPlaces) : Math.floor(num);\n                const str = roundedNum.toString();\n                \n                \/\/ Rozdziel cz\u0119\u015b\u0107 ca\u0142kowit\u0105 i dziesi\u0119tn\u0105 (\u017ar\u00f3d\u0142o zawsze u\u017cywa kropki)\n                const parts = str.split('.');\n                const intPart = parts[0];\n                const decPart = parts[1] ? decChar + parts[1] : '';\n                \n                if (sep === 'none') {\n                    return intPart + decPart;\n                }\n                \n                \/\/ Wyb\u00f3r separatora tysi\u0119cy - musi by\u0107 r\u00f3\u017cny od separatora dziesi\u0119tnego\n                let thousandsChar = '';\n                if (sep === 'space') thousandsChar = ' ';\n                else if (sep === 'period') thousandsChar = (decChar === '.') ? ' ' : '.';\n                else if (sep === 'comma') thousandsChar = (decChar === ',') ? ' ' : ',';\n                \n                let formatted = '';\n                let count = 0;\n                \n                for (let i = intPart.length - 1; i >= 0; i--) {\n                    if (count === 3) {\n                        formatted = thousandsChar + formatted;\n                        count = 0;\n                    }\n                    formatted = intPart[i] + formatted;\n                    count++;\n                }\n                \n                return formatted + decPart;\n            }\n            \n            function easeOutCubic(t) {\n                return 1 - Math.pow(1 - t, 3);\n            }\n            \n            function animate(currentTime) {\n                if (!startTime) startTime = currentTime;\n                const elapsed = currentTime - startTime;\n                const progress = Math.min(elapsed \/ duration, 1);\n                const easedProgress = easeOutCubic(progress);\n                const current = start + (end - start) * easedProgress;\n                \n                const displayValue = formatNumber(current, separator);\n                element.textContent = displayValue + suffix;\n                \n                if (progress < 1) {\n                    requestAnimationFrame(animate);\n                } else {\n                    \/\/ Final value set - now fit it to the box\n                    fitNumberToBox(element);\n                }\n            }\n            \n            \/\/ Pre-set final value to measure, then start animation\n            element.textContent = formatNumber(end, separator) + suffix;\n            fitNumberToBox(element);\n            element.textContent = formatNumber(start, separator) + suffix;\n            \n            requestAnimationFrame(animate);\n        }\n        \n        function initStatsObserver() {\n            const observerOptions = {\n                threshold: 0.5,\n                rootMargin: '0px'\n            };\n            \n            const observer = new IntersectionObserver((entries) => {\n                entries.forEach(entry => {\n                    if (entry.isIntersecting) {\n                        const statBoxes = entry.target.querySelectorAll('.stat-box');\n                        statBoxes.forEach((box, index) => {\n                            setTimeout(() => {\n                                const numberElement = box.querySelector('.stat-number');\n                                if (numberElement) {\n                                    if (!numberElement.classList.contains(\"animated\")) {\n                                        const targetValue = parseFloat(numberElement.getAttribute('data-target'));\n                                        animateCounter(numberElement, 0, targetValue, 3000);\n                                        numberElement.classList.add('animated');\n                                    }\n                                }\n                            }, index * 200);\n                        });\n                        observer.unobserve(entry.target);\n                    }\n                });\n            }, observerOptions);\n            \n            const statsSections = document.querySelectorAll('.animated-stats-section .stats-grid');\n            statsSections.forEach(section => {\n                observer.observe(section);\n            });\n        }\n        \n        \/\/ Refit all stat numbers (used on resize) - per module so each scales together\n        function refitAllStatNumbers() {\n            const sections = document.querySelectorAll('.animated-stats-section');\n            sections.forEach(function(section) {\n                \/\/ Only refit if at least one number has been animated\n                if (section.querySelector('.stat-number.animated')) {\n                    fitNumbersInModule(section);\n                }\n            });\n        }\n        \n        \/\/ Handle resize events (debounced)\n        let statsResizeTimer;\n        window.addEventListener('resize', function() {\n            clearTimeout(statsResizeTimer);\n            statsResizeTimer = setTimeout(refitAllStatNumbers, 150);\n        });\n        \n        \/\/ Also refit after orientation change (mobile)\n        window.addEventListener('orientationchange', function() {\n            setTimeout(refitAllStatNumbers, 300);\n        });\n        \n        if (document.readyState === 'loading') {\n            document.addEventListener('DOMContentLoaded', initStatsObserver);\n        } else {\n            initStatsObserver();\n        }\n    }\n    <\/script>\n        \n    \n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-c9855b393dbb6f5ceb239685628b91ff\" style=\"color:#14357a\"><strong>Stan organizacyjny szk\u00f3\u0142 i plac\u00f3wek niepublicznych w roku szkolnym 2024\/2025<\/strong><\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Typ szko\u0142y<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Liczba uczni\u00f3w<\/strong><\/th><th class=\"has-text-align-center\" data-align=\"center\"><strong>Liczba oddzia\u0142\u00f3w<\/strong><\/th><\/tr><\/thead><tbody><tr><td><strong>Policealna Szko\u0142a przy Collegium Masoviense w \u017byrardowie<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>szko\u0142a policealna<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>28<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>13<\/strong><\/td><\/tr><tr><td><strong>Liceum Og\u00f3lnokszta\u0142c\u0105ce dla Doros\u0142ych HORN w \u017byrardowie<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>liceum og\u00f3lnokszta\u0142c\u0105ce<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>145<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>4<\/strong><\/td><\/tr><tr><td><strong>ATUT Liceum Og\u00f3lnokszta\u0142c\u0105ce dla Doros\u0142ych w \u017byrardowie<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>liceum og\u00f3lnokszta\u0142c\u0105ce<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>161<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>8<\/strong><\/td><\/tr><tr><td><strong>ATUT Szko\u0142a Policealna w \u017byrardowie<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>szko\u0142a policealna<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>526<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>19<\/strong><\/td><\/tr><tr><td><strong>Szko\u0142a Policealna AS w \u017byrardowie<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>szko\u0142a policealna<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>1037<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>18<\/strong><\/td><\/tr><tr><td colspan=\"2\"><strong>RAZEM NIEPUBLICZNE<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>1 897<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>62<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-align-center has-text-color has-link-color wp-elements-f707d2ce2c24d00afa4d4dc99dfc103f\" style=\"color:#14357a\"><strong>Dotacje z bud\u017cetu Powiatu \u017byrardowskiego w 2025 r.<\/strong><\/h4>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><thead><tr><th><strong>Nazwa jednostki<\/strong><\/th><th class=\"has-text-align-right\" data-align=\"right\"><strong>Kwota przekazanej dotacji<\/strong><\/th><\/tr><\/thead><tbody><tr><td>ATUT Szko\u0142a Policealna w \u017byrardowie<\/td><td class=\"has-text-align-right\" data-align=\"right\">2 752 218,55<\/td><\/tr><tr><td>ATUT Liceum Og\u00f3lnokszta\u0142c\u0105ce dla Doros\u0142ych w \u017byrardowie<\/td><td class=\"has-text-align-right\" data-align=\"right\">102 851,56<\/td><\/tr><tr><td>Szko\u0142a Policealna AS&nbsp;w \u017byrardowie<\/td><td class=\"has-text-align-right\" data-align=\"right\">4 862 538,14<\/td><\/tr><tr><td>Policealna Szko\u0142a przy Collegium Masoviense<\/td><td class=\"has-text-align-right\" data-align=\"right\">287 962,51<\/td><\/tr><tr><td>Liceum Og\u00f3lnokszta\u0142c\u0105ce dla Doros\u0142ych HORN<\/td><td class=\"has-text-align-right\" data-align=\"right\">181 214,49<\/td><\/tr><tr><td>NPPP KROPKA<\/td><td class=\"has-text-align-right\" data-align=\"right\">78 081,92<\/td><\/tr><tr><td>NPPP HU\u015aTAWKA<\/td><td class=\"has-text-align-right\" data-align=\"right\">378 966,56<\/td><\/tr><tr><td><strong>&nbsp;<\/strong><\/td><td class=\"has-text-align-right\" data-align=\"right\"><strong>8 643 833,73<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-99cee664a6f6533b310b6b9e91a37d75\" style=\"color:#14357a\"><strong><u>Mazowiecka Szko\u0142a Przysz\u0142o\u015bci<\/u><\/strong><\/h4>\n\n\n\n<p>W 2025 roku przyst\u0105pili\u015bmy do projektu realizowanego przez Zarz\u0105d Wojew\u00f3dztwa Mazowieckiego pn. \u201eMazowiecka Szko\u0142a Przysz\u0142o\u015bci\u201d.<\/p>\n\n\n\n<p>W projekcie bior\u0105 udzia\u0142: Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Marii Sk\u0142odowskiej \u2013 Curie w Wiskitkach, Liceum Og\u00f3lnokszta\u0142c\u0105ce Szko\u0142y Mistrzostwa Sportowego w Kolarstwie w \u017byrardowie, Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Czes\u0142awa Ta\u0144skiego w Puszczy Maria\u0144skiej oraz Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Szarych Szereg\u00f3w w Mszczonowie. W ramach programu ww. szko\u0142y wyposa\u017cone zostan\u0105 w sprz\u0119t do prowadzenia zaj\u0119\u0107 eksperymentalnych i interdyscyplinarnych, dost\u0119p do aplikacji rozwijaj\u0105cych kompetencje kluczowe oraz spo\u0142eczno \u2013 emocjonalne uczni\u00f3w, \u015brodki finansowe na finansowanie rozwijaj\u0105cych zaj\u0119\u0107 pozalekcyjnych, dost\u0119p do warsztat\u00f3w dla nauczycieli i wycieczek warsztatowych dla uczni\u00f3w.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-03743904f665b105a2e2bd23a2d93fe9\" style=\"color:#14357a\"><strong><u>Zawodowe Mazowsze Przysz\u0142o\u015bci<\/u><\/strong><\/h4>\n\n\n\n<p>W 2025 roku przyst\u0105pili\u015bmy do projektu realizowanego przez Zarz\u0105d Wojew\u00f3dztwa Mazowieckiego pn. \u201eZawodowe Mazowsze Przysz\u0142o\u015bci\u201d<\/p>\n\n\n\n<p>W projekcie bior\u0105 udzia\u0142: Technikum w Zespole Szk\u00f3\u0142 w Mszczonowie, Bran\u017cowa szko\u0142a I Stopnia w Specjalnym O\u015brodku Szkolno-Wychowawczym im. Marii Grzegorzewskiej w \u017byrardowie oraz Technikum w Zespole Szk\u00f3\u0142 Nr 1 w \u017byrardowie. Celem realizowanego projektu jest podniesienie jako\u015bci nauczania poprzez opracowanie i wdro\u017cenie innowacji pedagogicznych umo\u017cliwiaj\u0105cych wzrost wiedzy i umiej\u0119tno\u015bci uczni\u00f3w i nauczycieli m.in. poprzez wyposa\u017cenie szk\u00f3\u0142 obj\u0119tych projektem w nowoczesny sprz\u0119t dydaktyczny oraz organizacj\u0119 sta\u017cy zawodowych.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-063e9d86c587c8d37047cacff0f964e3\" style=\"color:#14357a\"><strong><u>KPO<\/u><\/strong><\/h4>\n\n\n\n<p>Celem inwestycji jest wsparcie cyfryzacji szk\u00f3\u0142, wyr\u00f3wnanie szans edukacyjnych uczni\u00f3w z r\u00f3\u017cnych region\u00f3w kraju oraz zapewnienie uczniom lepszego dost\u0119pu do nowoczesnych technologii. Otrzymany przez szko\u0142y sprz\u0119t komputerowy wykorzystywany b\u0119dzie w procesie nauczania, zar\u00f3wno podczas zaj\u0119\u0107 stacjonarnych jak i w przypadku kszta\u0142cenia na odleg\u0142o\u015b\u0107.<\/p>\n\n\n\n<p>Ministerstwo Cyfryzacji we wsp\u00f3\u0142pracy z Ministerstwem Edukacji Narodowej realizuje zadania finansowane ze \u015brodk\u00f3w Krajowego Planu Odbudowy i Zwi\u0119kszania Odporno\u015bci (KPO).<\/p>\n\n\n\n<h6 class=\"wp-block-heading has-text-color has-link-color wp-elements-bb1a05abf3075d5ea3e4d60683ea18a8\" style=\"color:#14357a\">Do szk\u00f3\u0142 ponadpodstawowych z terenu Powiatu \u017byrardowskiego trafi\u0142o:<\/h6>\n\n\n\n<ul class=\"wp-block-list\">\n<li>13 pracowni,<\/li>\n\n\n\n<li>13 pracowni sztucznej inteligencji,<\/li>\n\n\n\n<li>44 zestawy do nauczania zdalnego,<\/li>\n\n\n\n<li>650 komputer\u00f3w przeno\u015bnych z czego:\n<ul class=\"wp-block-list\">\n<li>362 laptopy,<\/li>\n\n\n\n<li>189 tablet\u00f3w,<\/li>\n\n\n\n<li>99 laptop\u00f3w przegl\u0105darkowych,<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>45 sal \u2013 modernizacja sieci LAN.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-1a3c219264366003c38ab6fd13b6018a\" style=\"color:#14357a\"><strong><u>Dotacja mundurowa<\/u><\/strong><\/h4>\n\n\n\n<p>Liceum Og\u00f3lnokszta\u0142c\u0105ce im. Czes\u0142awa Ta\u0144skiego otrzyma\u0142o dotacj\u0119 w wysoko\u015bci 33 640,00 z\u0142. na zakup pakietu ubiorczego. Pakiety te s\u0105 kupowane w ramach dotacji celowej dla uczni\u00f3w klas pierwszych. Elementy ubioru musz\u0105 spe\u0142nia\u0107 rygorystyczne normy jako\u015bciowe okre\u015blone przez MON.<\/p>\n\n\n\n<h4 class=\"wp-block-heading has-text-color has-link-color wp-elements-589d559711ece251a94350986f1f8176\" style=\"color:#14357a\"><strong><u>Aktywny AS<\/u><\/strong><\/h4>\n\n\n\n<p>Inicjatywa realizowana w ramach Aktywnej Szko\u0142y przy wsparciu Ministerstwa Sportu i Turystyki, maj\u0105ca na celu zwi\u0119kszenie aktywno\u015bci fizycznej dzieci i m\u0142odzie\u017cy poprzez bezp\u0142atne zaj\u0119cia sportowe<\/p>\n\n\n\n<p>Prowadzenie dzia\u0142a\u0144 aktywizacyjnych na terenie obiekt\u00f3w sportowych \u2013 Zesp\u00f3\u0142 Szk\u00f3\u0142 Nr 2 w \u017byrardowie.<\/p>\n\n\n    <section class=\"photo-gallery-section gallery-block-custom caption-below gallery-6a062fa81b3c1 has-lightbox\" \n             style=\"background-color: #f5f7fa;\"\n             data-lightbox-items='[{&quot;image&quot;:&quot;https:\\\/\\\/raport2025.powiat-zyrardowski.pl\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/20251015-IMG_7204-scaled.jpg&quot;,&quot;caption&quot;:&quot;Uroczysto\\u015b\\u0107 z okazji Dnia Edukacji Narodowej&quot;,&quot;subCaption&quot;:&quot;&quot;},{&quot;image&quot;:&quot;https:\\\/\\\/raport2025.powiat-zyrardowski.pl\\\/wp-content\\\/uploads\\\/2026\\\/05\\\/1-2-scaled.jpg&quot;,&quot;caption&quot;:&quot;Najlepsi Absolwenci Powiatu \\u017byrardowskiego&quot;,&quot;subCaption&quot;:&quot;&quot;}]'>\n        <div class=\"gallery-container\">\n                        \n            <div class=\"photo-gallery-grid\" style=\"grid-template-columns: repeat(2, 1fr); gap: 30px;\" data-columns=\"2\" data-spacing=\"30\">\n                                    <div class=\"gallery-item gallery-item-lightbox\" \n                                                  data-lightbox-index=\"0\">\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/05\/20251015-IMG_7204-scaled.jpg\" alt=\"Uroczysto\u015b\u0107 z okazji Dnia Edukacji Narodowej\" loading=\"lazy\" style=\"object-fit: cover;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #0a5d7d;\">Uroczysto\u015b\u0107 z okazji Dnia Edukacji Narodowej<\/span>\n                                                                    <\/div>\n                                                                        <\/div>\n                                    <div class=\"gallery-item gallery-item-lightbox\" \n                                                  data-lightbox-index=\"1\">\n                                                    <div class=\"gallery-image-wrapper\" style=\"height: 250px;\">\n                                <img decoding=\"async\" src=\"https:\/\/raport2025.powiat-zyrardowski.pl\/wp-content\/uploads\/2026\/05\/1-2-scaled.jpg\" alt=\"Najlepsi Absolwenci Powiatu \u017byrardowskiego\" loading=\"lazy\" style=\"object-fit: cover;\">\n                                                            <\/div>\n                                                            <div class=\"gallery-caption-below\">\n                                    <span class=\"gallery-caption\" style=\"color: #0a5d7d;\">Najlepsi Absolwenci 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        <style>\n    \/* Lightbox styles - only applied when enabled *\/\n    .gallery-block-custom.has-lightbox .gallery-item-lightbox {\n        cursor: zoom-in;\n    }\n    \n    .gallery-lightbox-overlay {\n        display: none;\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100vw;\n        height: 100vh;\n        background: rgba(0, 0, 0, 0.92);\n        z-index: 999999;\n        align-items: center;\n        justify-content: center;\n        opacity: 0;\n        transition: opacity 0.25s ease;\n    }\n    \n    .gallery-lightbox-overlay.active {\n        display: flex;\n        opacity: 1;\n    }\n    \n    .gallery-lightbox-content {\n        position: relative;\n        max-width: 92vw;\n        max-height: 88vh;\n        display: flex;\n        flex-direction: column;\n        align-items: center;\n        justify-content: center;\n    }\n    \n    .gallery-lightbox-image-wrapper {\n        max-width: 92vw;\n        max-height: 80vh;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n    }\n    \n    .gallery-lightbox-image {\n        max-width: 92vw;\n        max-height: 80vh;\n        width: auto;\n        height: auto;\n        object-fit: contain;\n        box-shadow: 0 8px 40px rgba(0,0,0,0.5);\n        border-radius: 4px;\n        opacity: 0;\n        transform: scale(0.96);\n        transition: opacity 0.25s ease, transform 0.25s ease;\n    }\n    \n    .gallery-lightbox-image.visible {\n        opacity: 1;\n        transform: scale(1);\n    }\n    \n    .gallery-lightbox-caption {\n        margin-top: 18px;\n        text-align: center;\n        color: #fff;\n        max-width: 92vw;\n    }\n    \n    .gallery-lightbox-caption .lb-caption-main {\n        display: block;\n        font-size: 1.15rem;\n        font-weight: 600;\n    }\n    \n    .gallery-lightbox-caption .lb-caption-sub {\n        display: block;\n        font-size: 0.9rem;\n        font-weight: 400;\n        opacity: 0.85;\n        margin-top: 4px;\n    }\n    \n    .gallery-lightbox-close,\n    .gallery-lightbox-prev,\n    .gallery-lightbox-next {\n        position: absolute;\n        background: rgba(255, 255, 255, 0.12);\n        color: #fff;\n        border: none;\n        cursor: pointer;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        transition: background 0.2s ease, transform 0.2s ease;\n        z-index: 2;\n    }\n    \n    .gallery-lightbox-close:hover,\n    .gallery-lightbox-prev:hover,\n    .gallery-lightbox-next:hover {\n        background: rgba(255, 255, 255, 0.28);\n    }\n    \n    .gallery-lightbox-close {\n        top: -50px;\n        right: 0;\n        width: 44px;\n        height: 44px;\n        border-radius: 50%;\n        font-size: 1.5rem;\n        line-height: 1;\n    }\n    \n    .gallery-lightbox-prev,\n    .gallery-lightbox-next {\n        top: 50%;\n        transform: translateY(-50%);\n        width: 50px;\n        height: 50px;\n        border-radius: 50%;\n        font-size: 1.8rem;\n        line-height: 1;\n    }\n    \n    .gallery-lightbox-prev {\n        left: -70px;\n    }\n    \n    .gallery-lightbox-next {\n        right: -70px;\n    }\n    \n    .gallery-lightbox-prev:hover {\n        transform: translateY(-50%) translateX(-2px);\n    }\n    \n    .gallery-lightbox-next:hover {\n        transform: translateY(-50%) translateX(2px);\n    }\n    \n    .gallery-lightbox-counter {\n        position: absolute;\n        top: -50px;\n        left: 0;\n        color: rgba(255, 255, 255, 0.7);\n        font-size: 0.9rem;\n    }\n    \n    \/* Hide nav buttons when there's only one image *\/\n    .gallery-lightbox-overlay.single-image .gallery-lightbox-prev,\n    .gallery-lightbox-overlay.single-image .gallery-lightbox-next,\n    .gallery-lightbox-overlay.single-image .gallery-lightbox-counter {\n        display: none;\n    }\n    \n    @media (max-width: 768px) {\n        .gallery-lightbox-prev {\n            left: 8px;\n            width: 42px;\n            height: 42px;\n            font-size: 1.4rem;\n        }\n        .gallery-lightbox-next {\n            right: 8px;\n            width: 42px;\n            height: 42px;\n            font-size: 1.4rem;\n        }\n        .gallery-lightbox-close {\n            top: 8px;\n            right: 8px;\n        }\n        .gallery-lightbox-counter {\n            top: 18px;\n            left: 14px;\n        }\n    }\n    <\/style>\n    \n    <script>\n    (function() {\n        const section = document.querySelector('.gallery-6a062fa81b3c1');\n        if (!section || !section.classList.contains('has-lightbox')) return;\n        \n        let items = [];\n        try {\n            items = JSON.parse(section.getAttribute('data-lightbox-items') || '[]');\n        } catch(e) {\n            return;\n        }\n        if (items.length === 0) return;\n        \n        \/\/ Build lightbox overlay (single instance per gallery)\n        const overlay = document.createElement('div');\n        overlay.className = 'gallery-lightbox-overlay';\n        if (items.length === 1) overlay.classList.add('single-image');\n        overlay.innerHTML = '' +\n            '<div class=\"gallery-lightbox-content\">' +\n                '<button type=\"button\" class=\"gallery-lightbox-close\" aria-label=\"Close\">\u00d7<\/button>' +\n                '<div class=\"gallery-lightbox-counter\"><\/div>' +\n                '<button type=\"button\" class=\"gallery-lightbox-prev\" aria-label=\"Previous\">\u2039<\/button>' +\n                '<div class=\"gallery-lightbox-image-wrapper\">' +\n                    '<img class=\"gallery-lightbox-image\" alt=\"\">' +\n                '<\/div>' +\n                '<button type=\"button\" class=\"gallery-lightbox-next\" aria-label=\"Next\">\u203a<\/button>' +\n                '<div class=\"gallery-lightbox-caption\"><\/div>' +\n            '<\/div>';\n        document.body.appendChild(overlay);\n        \n        const imgEl = overlay.querySelector('.gallery-lightbox-image');\n        const captionEl = overlay.querySelector('.gallery-lightbox-caption');\n        const counterEl = overlay.querySelector('.gallery-lightbox-counter');\n        \n        let currentIndex = 0;\n        \n        function showImage(newIndex, direction) {\n            if (newIndex < 0) newIndex = items.length - 1;\n            if (newIndex >= items.length) newIndex = 0;\n            currentIndex = newIndex;\n            const item = items[currentIndex];\n            \n            \/\/ Brief fade animation when changing\n            imgEl.classList.remove('visible');\n            \n            setTimeout(function() {\n                imgEl.src = item.image;\n                imgEl.alt = item.caption || '';\n                \n                let captionHtml = '';\n                if (item.caption) {\n                    captionHtml += '<span class=\"lb-caption-main\"><\/span>';\n                }\n                if (item.subCaption) {\n                    captionHtml += '<span class=\"lb-caption-sub\"><\/span>';\n                }\n                captionEl.innerHTML = captionHtml;\n                if (item.caption) {\n                    captionEl.querySelector('.lb-caption-main').textContent = item.caption;\n                }\n                if (item.subCaption) {\n                    captionEl.querySelector('.lb-caption-sub').textContent = item.subCaption;\n                }\n                \n                counterEl.textContent = (currentIndex + 1) + ' \/ ' + items.length;\n                \n                \/\/ Wait for image load before fading in\n                if (imgEl.complete) {\n                    requestAnimationFrame(function() {\n                        imgEl.classList.add('visible');\n                    });\n                } else {\n                    imgEl.onload = function() {\n                        imgEl.classList.add('visible');\n                    };\n                }\n            }, 150);\n        }\n        \n        function openLightbox(index) {\n            currentIndex = index;\n            overlay.classList.add('active');\n            document.body.style.overflow = 'hidden';\n            showImage(index);\n        }\n        \n        function closeLightbox() {\n            overlay.classList.remove('active');\n            document.body.style.overflow = '';\n            imgEl.classList.remove('visible');\n        }\n        \n        \/\/ Click handlers on gallery items\n        section.querySelectorAll('.gallery-item-lightbox').forEach(function(el) {\n            el.addEventListener('click', function(e) {\n                e.preventDefault();\n                e.stopPropagation();\n                const idx = parseInt(el.getAttribute('data-lightbox-index'), 10);\n                if (!isNaN(idx)) openLightbox(idx);\n            });\n        });\n        \n        \/\/ Lightbox controls\n        overlay.querySelector('.gallery-lightbox-close').addEventListener('click', closeLightbox);\n        overlay.querySelector('.gallery-lightbox-prev').addEventListener('click', function(e) {\n            e.stopPropagation();\n            showImage(currentIndex - 1);\n        });\n        overlay.querySelector('.gallery-lightbox-next').addEventListener('click', function(e) {\n            e.stopPropagation();\n            showImage(currentIndex + 1);\n        });\n        \n        \/\/ Click outside image to close\n        overlay.addEventListener('click', function(e) {\n            if (e.target === overlay) closeLightbox();\n        });\n        \n        \/\/ Keyboard navigation\n        document.addEventListener('keydown', function(e) {\n            if (!overlay.classList.contains('active')) return;\n            if (e.key === 'Escape') closeLightbox();\n            else if (e.key === 'ArrowLeft') showImage(currentIndex - 1);\n            else if (e.key === 'ArrowRight') showImage(currentIndex + 1);\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-bf3d6d5ede77c338af0cb7e80c7bd1e2\" style=\"background-color:#14357a;line-height:2;text-decoration:none\">CZYTAJ DALEJ:<br><br>&#8211; <a href=\"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/egzaminy-w-roku-szkolnym-2024-2025\/\"><strong><span style=\"text-decoration: underline;\">Egzaminy w roku szkolnym 2024\/2025<\/span><\/strong><\/a><\/h5>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W 2025 r. Powiat \u017byrardowski by\u0142 organem prowadz\u0105cym dla: oraz organem dotuj\u0105cym dla: Zatrudnienie kadry pedagogicznej oraz pracownik\u00f3w administracji i obs\u0142ugi w roku szkolnym 2024\/2025 (etaty) Wyszczeg\u00f3lnienie* Kadra pedagogiczna Kadra&#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-542","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/542","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=542"}],"version-history":[{"count":75,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/542\/revisions"}],"predecessor-version":[{"id":3222,"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/pages\/542\/revisions\/3222"}],"wp:attachment":[{"href":"https:\/\/raport2025.powiat-zyrardowski.pl\/index.php\/wp-json\/wp\/v2\/media?parent=542"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}