{"id":299,"date":"2024-11-08T08:36:52","date_gmt":"2024-11-08T07:36:52","guid":{"rendered":"https:\/\/ckkmip.pl\/?page_id=299"},"modified":"2026-03-25T14:20:55","modified_gmt":"2026-03-25T13:20:55","slug":"blog-tsr","status":"publish","type":"page","link":"https:\/\/ckkmip.pl\/en\/blog-tsr\/","title":{"rendered":"TSR Blog"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"299\" class=\"elementor elementor-299\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-eddd2fd e-con-full e-flex e-con e-parent\" data-id=\"eddd2fd\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e1d8753 elementor-widget elementor-widget-html\" data-id=\"e1d8753\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\n\/* ============================================================\n   CKKMIP \u2013 Strefa Wiedzy | WordPress REST API\n   Scoped: #ckk-blog | v1.0\n   ============================================================ *\/\n\n#ckk-blog *, #ckk-blog *::before, #ckk-blog *::after {\n    box-sizing: border-box; margin: 0; padding: 0;\n}\n\n#ckk-blog {\n    --blue:     #39a8d3;\n    --teal:     #37a591;\n    --dark:     #1e2d3a;\n    --mist:     #f4f9fc;\n    --pale:     #e8f6fb;\n    --border:   #cce9f5;\n    --ink:      #1e2d3a;\n    --soft:     #4a5568;\n    --white:    #ffffff;\n    --r:        14px;\n    --shadow:   0 6px 28px rgba(30,45,58,.09);\n    --shadow-h: 0 14px 44px rgba(30,45,58,.14);\n\n    font-family: 'Lato', sans-serif;\n    background: var(--white);\n    color: var(--ink);\n    line-height: 1.7;\n}\n\n\/* \u2500\u2500 LAYOUT \u2500\u2500 *\/\n#ckk-blog .container {\n    max-width: 1160px;\n    margin: 0 auto;\n    padding: 0 32px;\n}\n\n#ckk-blog .section {\n    padding: 88px 0;\n}\n\n\/* \u2500\u2500 NAG\u0141\u00d3WEK SEKCJI \u2500\u2500 *\/\n#ckk-blog .section-head {\n    display: flex;\n    align-items: flex-end;\n    justify-content: space-between;\n    gap: 32px;\n    margin-bottom: 52px;\n    flex-wrap: wrap;\n}\n\n#ckk-blog .label {\n    font-size: .72rem;\n    font-weight: 700;\n    letter-spacing: .13em;\n    text-transform: uppercase;\n    color: var(--blue);\n    margin-bottom: 10px;\n}\n\n#ckk-blog .section-title {\n    font-size: clamp(1.8rem, 3.5vw, 2.5rem);\n    font-weight: 800;\n    line-height: 1.15;\n    color: var(--ink);\n}\n\n#ckk-blog .section-title em {\n    font-style: italic;\n    color: var(--teal);\n}\n\n#ckk-blog .section-desc {\n    font-size: .95rem;\n    color: var(--soft);\n    max-width: 480px;\n    line-height: 1.7;\n    margin-top: 8px;\n}\n\n#ckk-blog .head-right {\n    flex-shrink: 0;\n}\n\n\/* \u2500\u2500 CONTROLS \u2500\u2500 *\/\n#ckk-blog .controls {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    margin-bottom: 36px;\n    flex-wrap: wrap;\n}\n\n#ckk-blog .search-wrap {\n    position: relative;\n    flex: 1;\n    min-width: 220px;\n    max-width: 360px;\n}\n\n#ckk-blog .search-wrap input {\n    width: 100%;\n    padding: 10px 16px 10px 40px;\n    border: 1px solid var(--border);\n    border-radius: 50px;\n    font-family: 'Lato', sans-serif;\n    font-size: .9rem;\n    color: var(--ink);\n    background: var(--mist);\n    outline: none;\n    transition: border-color .2s, box-shadow .2s;\n}\n#ckk-blog .search-wrap input:focus {\n    border-color: var(--blue);\n    box-shadow: 0 0 0 3px rgba(57,168,211,.12);\n    background: var(--white);\n}\n\n#ckk-blog .search-icon {\n    position: absolute;\n    left: 14px;\n    top: 50%;\n    transform: translateY(-50%);\n    color: var(--blue);\n    font-size: .9rem;\n    pointer-events: none;\n}\n\n#ckk-blog .per-page-select {\n    padding: 10px 16px;\n    border: 1px solid var(--border);\n    border-radius: 50px;\n    font-family: 'Lato', sans-serif;\n    font-size: .88rem;\n    color: var(--ink);\n    background: var(--mist);\n    outline: none;\n    cursor: pointer;\n    transition: border-color .2s;\n}\n#ckk-blog .per-page-select:focus { border-color: var(--blue); }\n\n\/* \u2500\u2500 GRID WPIS\u00d3W \u2500\u2500 *\/\n#ckk-blog .posts-grid {\n    display: grid;\n    grid-template-columns: repeat(3, 1fr);\n    gap: 26px;\n    min-height: 300px;\n}\n\n\/* \u2500\u2500 KARTA WPISU \u2500\u2500 *\/\n#ckk-blog .post-card {\n    background: var(--white);\n    border-radius: var(--r);\n    box-shadow: var(--shadow);\n    overflow: hidden;\n    display: flex;\n    flex-direction: column;\n    transition: transform .25s, box-shadow .25s;\n    text-decoration: none;\n    color: inherit;\n    border: 1px solid rgba(204,233,245,.6);\n}\n\n#ckk-blog .post-card:hover {\n    transform: translateY(-5px);\n    box-shadow: var(--shadow-h);\n}\n\n#ckk-blog .post-thumb {\n    position: relative;\n    aspect-ratio: 16\/9;\n    overflow: hidden;\n    background: linear-gradient(135deg, var(--pale), #e0f0f8);\n    flex-shrink: 0;\n}\n\n#ckk-blog .post-thumb img {\n    width: 100%;\n    height: 100%;\n    object-fit: cover;\n    display: block;\n    transition: transform .45s ease;\n}\n#ckk-blog .post-card:hover .post-thumb img { transform: scale(1.05); }\n\n#ckk-blog .thumb-placeholder {\n    width: 100%;\n    height: 100%;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    background: linear-gradient(135deg, var(--pale) 0%, #d5eef8 100%);\n    font-size: 2.4rem;\n    opacity: .45;\n}\n\n#ckk-blog .post-cat {\n    position: absolute;\n    top: 12px;\n    left: 14px;\n    background: var(--blue);\n    color: white;\n    font-size: .68rem;\n    font-weight: 700;\n    letter-spacing: .1em;\n    text-transform: uppercase;\n    padding: 4px 11px;\n    border-radius: 50px;\n}\n\n\/* \u2500\u2500 TRE\u015a\u0106 KARTY \u2500\u2500 *\/\n#ckk-blog .post-body {\n    padding: 22px 22px 20px;\n    flex: 1;\n    display: flex;\n    flex-direction: column;\n    gap: 10px;\n}\n\n#ckk-blog .post-meta {\n    display: flex;\n    align-items: center;\n    gap: 12px;\n    font-size: .75rem;\n    color: var(--soft);\n}\n\n#ckk-blog .post-meta-dot {\n    width: 3px; height: 3px;\n    border-radius: 50%;\n    background: var(--border);\n    flex-shrink: 0;\n}\n\n#ckk-blog .post-title {\n    font-size: 1.02rem;\n    font-weight: 700;\n    color: var(--ink);\n    line-height: 1.38;\n    display: -webkit-box;\n    -webkit-line-clamp: 3;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    transition: color .2s;\n}\n#ckk-blog .post-card:hover .post-title { color: var(--blue); }\n\n#ckk-blog .post-excerpt {\n    font-size: .84rem;\n    color: var(--soft);\n    line-height: 1.7;\n    display: -webkit-box;\n    -webkit-line-clamp: 3;\n    -webkit-box-orient: vertical;\n    overflow: hidden;\n    flex: 1;\n}\n\n#ckk-blog .post-footer {\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    padding: 14px 22px;\n    border-top: 1px solid var(--border);\n    background: var(--mist);\n    font-size: .8rem;\n    color: var(--blue);\n    font-weight: 700;\n    letter-spacing: .03em;\n    transition: background .2s;\n}\n#ckk-blog .post-card:hover .post-footer { background: var(--pale); }\n\n#ckk-blog .post-arrow {\n    width: 28px; height: 28px;\n    border-radius: 50%;\n    background: var(--blue);\n    color: white;\n    display: flex; align-items: center; justify-content: center;\n    font-size: .82rem;\n    transition: background .2s, transform .2s;\n    flex-shrink: 0;\n}\n#ckk-blog .post-card:hover .post-arrow {\n    background: var(--teal);\n    transform: translateX(3px);\n}\n\n\/* \u2500\u2500 STANY: \u0141ADOWANIE \/ B\u0141\u0104D \/ PUSTY \u2500\u2500 *\/\n#ckk-blog .state-box {\n    grid-column: 1 \/ -1;\n    display: flex;\n    flex-direction: column;\n    align-items: center;\n    justify-content: center;\n    padding: 60px 20px;\n    gap: 16px;\n    color: var(--soft);\n    text-align: center;\n}\n\n#ckk-blog .spinner {\n    width: 44px; height: 44px;\n    border: 3px solid var(--border);\n    border-top-color: var(--blue);\n    border-radius: 50%;\n    animation: spin .8s linear infinite;\n}\n\n@keyframes spin { to { transform: rotate(360deg); } }\n\n#ckk-blog .state-icon { font-size: 2.8rem; opacity: .4; }\n#ckk-blog .state-text { font-size: .95rem; }\n#ckk-blog .state-sub  { font-size: .82rem; color: var(--border); }\n\n\/* \u2500\u2500 PAGINACJA \u2500\u2500 *\/\n#ckk-blog .pagination {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    gap: 6px;\n    margin-top: 44px;\n    flex-wrap: wrap;\n}\n\n#ckk-blog .page-btn {\n    min-width: 40px; height: 40px;\n    border-radius: 10px;\n    border: 1px solid var(--border);\n    background: var(--white);\n    color: var(--ink);\n    font-family: 'Lato', sans-serif;\n    font-size: .88rem;\n    font-weight: 600;\n    cursor: pointer;\n    display: flex; align-items: center; justify-content: center;\n    padding: 0 10px;\n    transition: all .2s;\n}\n#ckk-blog .page-btn:hover   { border-color: var(--blue); color: var(--blue); background: var(--pale); }\n#ckk-blog .page-btn.active  { background: var(--blue); border-color: var(--blue); color: white; }\n#ckk-blog .page-btn.ellipsis{ border: none; background: none; cursor: default; color: var(--soft); }\n#ckk-blog .page-btn:disabled{ opacity: .35; cursor: not-allowed; }\n\n#ckk-blog .page-info {\n    font-size: .8rem;\n    color: var(--soft);\n    text-align: center;\n    margin-top: 14px;\n}\n\n\/* \u2500\u2500 CTA STRIP \u2500\u2500 *\/\n#ckk-blog .blog-cta {\n    margin-top: 56px;\n    background: linear-gradient(135deg, var(--dark), #253649);\n    border-radius: var(--r);\n    padding: 44px 52px;\n    display: flex;\n    align-items: center;\n    justify-content: space-between;\n    gap: 32px;\n    flex-wrap: wrap;\n}\n\n#ckk-blog .blog-cta h3 {\n    font-size: 1.4rem;\n    font-weight: 700;\n    color: white;\n    margin-bottom: 6px;\n}\n\n#ckk-blog .blog-cta p {\n    font-size: .9rem;\n    color: rgba(255,255,255,.55);\n    line-height: 1.6;\n    max-width: 460px;\n}\n\n#ckk-blog .btn-primary {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 13px 28px;\n    border-radius: 50px;\n    font-family: 'Lato', sans-serif;\n    font-weight: 700;\n    font-size: .93rem;\n    text-decoration: none;\n    background: linear-gradient(135deg, var(--blue), var(--teal));\n    color: white;\n    box-shadow: 0 6px 18px rgba(57,168,211,.3);\n    transition: transform .2s, box-shadow .2s;\n    white-space: nowrap;\n    flex-shrink: 0;\n}\n#ckk-blog .btn-primary:hover { transform: translateY(-2px); box-shadow: 0 10px 26px rgba(57,168,211,.42); }\n\n\/* \u2500\u2500 RESPONSIVE \u2500\u2500 *\/\n@media (max-width: 900px) {\n    #ckk-blog .posts-grid { grid-template-columns: repeat(2, 1fr); }\n    #ckk-blog .blog-cta   { padding: 36px 32px; }\n}\n\n@media (max-width: 580px) {\n    #ckk-blog .container  { padding: 0 18px; }\n    #ckk-blog .section    { padding: 60px 0; }\n    #ckk-blog .posts-grid { grid-template-columns: 1fr; }\n    #ckk-blog .section-head { flex-direction: column; align-items: flex-start; gap: 20px; }\n    #ckk-blog .blog-cta   { flex-direction: column; text-align: center; }\n    #ckk-blog .blog-cta p { max-width: 100%; }\n}\n\n\/* \u2500\u2500 ANIMACJA WEJ\u015aCIA KART \u2500\u2500 *\/\n@keyframes cardIn {\n    from { opacity: 0; transform: translateY(18px); }\n    to   { opacity: 1; transform: translateY(0); }\n}\n\n#ckk-blog .post-card {\n    animation: cardIn .4s ease both;\n}\n<\/style>\n\n<div id=\"ckk-blog\">\n<section class=\"section\">\n    <div class=\"container\">\n\n        <!-- NAG\u0141\u00d3WEK -->\n        <div class=\"section-head\">\n            <div>\n                <div class=\"label\">Strefa wiedzy<\/div>\n                <h2 class=\"section-title\">Najnowsze <em>wpisy na blogu<\/em><\/h2>\n                <p class=\"section-desc\">Praktyczna wiedza, aktualno\u015bci i wskaz\u00f3wki dla terapeut\u00f3w pracuj\u0105cych w nurcie TSR.<\/p>\n            <\/div>\n            <div class=\"head-right\">\n                <a href=\"https:\/\/ckkmip.pl\/blog\/\" class=\"btn-primary\">\n                    Wszystkie artyku\u0142y \u2192\n                <\/a>\n            <\/div>\n        <\/div>\n\n        <!-- CONTROLS: SZUKAJ + PER PAGE -->\n        <div class=\"controls\">\n            <div class=\"search-wrap\">\n                <span class=\"search-icon\">\ud83d\udd0d<\/span>\n                <input type=\"text\" id=\"ckk-search\" placeholder=\"Szukaj wpis\u00f3w...\" autocomplete=\"off\">\n            <\/div>\n            <select class=\"per-page-select\" id=\"ckk-per-page\">\n                <option value=\"6\">6 wpis\u00f3w<\/option>\n                <option value=\"9\" selected>9 wpis\u00f3w<\/option>\n                <option value=\"12\">12 wpis\u00f3w<\/option>\n            <\/select>\n        <\/div>\n\n        <!-- GRID -->\n        <div class=\"posts-grid\" id=\"ckk-grid\">\n            <div class=\"state-box\">\n                <div class=\"spinner\"><\/div>\n                <div class=\"state-text\">Pobieranie wpis\u00f3w\u2026<\/div>\n            <\/div>\n        <\/div>\n\n        <!-- PAGINACJA -->\n        <div class=\"pagination\" id=\"ckk-pagination\"><\/div>\n        <div class=\"page-info\" id=\"ckk-page-info\"><\/div>\n\n        <!-- CTA STRIP -->\n        <div class=\"blog-cta\">\n            <div>\n                <h3>Chcesz dowiedzie\u0107 si\u0119 wi\u0119cej o TSR?<\/h3>\n                <p>Sprawd\u017a pe\u0142ne archiwum artyku\u0142\u00f3w, poradnik\u00f3w i materia\u0142\u00f3w edukacyjnych przygotowanych przez trener\u00f3w CKKMIP.<\/p>\n            <\/div>\n            <a href=\"https:\/\/ckkmip.pl\/blog\/\" class=\"btn-primary\">\n                Przejd\u017a do blogu \u2192\n            <\/a>\n        <\/div>\n\n    <\/div>\n<\/section>\n<\/div>\n\n<script>\n(function () {\n    \/* \u2500\u2500\u2500 CONFIG \u2500\u2500\u2500 *\/\n    var API      = 'https:\/\/ckkmip.pl\/wp-json\/wp\/v2\/posts';\n    var SITE     = 'https:\/\/ckkmip.pl';\n    var FALLBACK = '\ud83d\udcf0'; \/* emoji gdy brak miniatury *\/\n\n    \/* \u2500\u2500\u2500 STATE \u2500\u2500\u2500 *\/\n    var state = {\n        page:     1,\n        perPage:  9,\n        search:   '',\n        total:    0,\n        pages:    0,\n        loading:  false\n    };\n\n    \/* \u2500\u2500\u2500 DOM \u2500\u2500\u2500 *\/\n    var grid     = document.getElementById('ckk-grid');\n    var pagEl    = document.getElementById('ckk-pagination');\n    var infoEl   = document.getElementById('ckk-page-info');\n    var searchEl = document.getElementById('ckk-search');\n    var ppEl     = document.getElementById('ckk-per-page');\n\n    \/* \u2500\u2500\u2500 FETCH \u2500\u2500\u2500 *\/\n    function fetchPosts() {\n        if (state.loading) return;\n        state.loading = true;\n        showLoader();\n\n        var url = API\n            + '?_embed'\n            + '&per_page=' + state.perPage\n            + '&page='     + state.page\n            + (state.search ? '&search=' + encodeURIComponent(state.search) : '');\n\n        fetch(url)\n            .then(function (r) {\n                state.total = parseInt(r.headers.get('X-WP-Total') || '0', 10);\n                state.pages = parseInt(r.headers.get('X-WP-TotalPages') || '1', 10);\n                return r.json();\n            })\n            .then(function (posts) {\n                state.loading = false;\n                renderPosts(posts);\n                renderPagination();\n                renderInfo();\n            })\n            .catch(function (err) {\n                state.loading = false;\n                showError();\n                console.error('CKKMIP Blog API:', err);\n            });\n    }\n\n    \/* \u2500\u2500\u2500 RENDER: LOADER \u2500\u2500\u2500 *\/\n    function showLoader() {\n        grid.innerHTML =\n            '<div class=\"state-box\">'\n            + '<div class=\"spinner\"><\/div>'\n            + '<div class=\"state-text\">Pobieranie wpis\u00f3w\u2026<\/div>'\n            + '<\/div>';\n        pagEl.innerHTML = '';\n        infoEl.textContent = '';\n    }\n\n    \/* \u2500\u2500\u2500 RENDER: B\u0141\u0104D \u2500\u2500\u2500 *\/\n    function showError() {\n        grid.innerHTML =\n            '<div class=\"state-box\">'\n            + '<div class=\"state-icon\">\u26a0\ufe0f<\/div>'\n            + '<div class=\"state-text\">Nie uda\u0142o si\u0119 pobra\u0107 wpis\u00f3w.<\/div>'\n            + '<div class=\"state-sub\">Sprawd\u017a po\u0142\u0105czenie lub od\u015bwie\u017c stron\u0119.<\/div>'\n            + '<\/div>';\n    }\n\n    \/* \u2500\u2500\u2500 RENDER: BRAK WYNIK\u00d3W \u2500\u2500\u2500 *\/\n    function showEmpty() {\n        grid.innerHTML =\n            '<div class=\"state-box\">'\n            + '<div class=\"state-icon\">\ud83d\udd0d<\/div>'\n            + '<div class=\"state-text\">Brak wynik\u00f3w dla frazy \u201e' + escHtml(state.search) + '\"<\/div>'\n            + '<div class=\"state-sub\">Spr\u00f3buj innego s\u0142owa kluczowego.<\/div>'\n            + '<\/div>';\n        pagEl.innerHTML = '';\n        infoEl.textContent = '';\n    }\n\n    \/* \u2500\u2500\u2500 RENDER: WPISY \u2500\u2500\u2500 *\/\n    function renderPosts(posts) {\n        if (!posts || !posts.length) { showEmpty(); return; }\n\n        grid.innerHTML = '';\n\n        posts.forEach(function (post, i) {\n            var thumb   = getThumb(post);\n            var cat     = getCat(post);\n            var date    = formatDate(post.date);\n            var excerpt = stripHtml(post.excerpt && post.excerpt.rendered ? post.excerpt.rendered : '');\n            var title   = stripHtml(post.title && post.title.rendered ? post.title.rendered : '');\n            var author  = getAuthor(post);\n            var link    = post.link || (SITE + '\/');\n            var readMin = readTime(post);\n\n            var card = document.createElement('a');\n            card.className   = 'post-card'; card.setAttribute('data-no-translation','');\n            card.href        = link;\n            card.target      = '_blank';\n            card.rel         = 'noopener';\n            card.style.animationDelay = (i * 0.06) + 's';\n\n            card.innerHTML =\n                \/* MINIATURA *\/\n                '<div class=\"post-thumb\">'\n                + (thumb\n                    ? '<img decoding=\"async\" src=\"' + thumb + '\" alt=\"' + escAttr(title) + '\" loading=\"lazy\" onerror=\"this.parentElement.innerHTML=\\'<div class=&quot;thumb-placeholder&quot;>' + FALLBACK + '<\/div>\\'\">'\n                    : '<div class=\"thumb-placeholder\">' + FALLBACK + '<\/div>')\n                + (cat ? '<span class=\"post-cat\">' + escHtml(cat) + '<\/span>' : '')\n                + '<\/div>'\n\n                \/* TRE\u015a\u0106 *\/\n                + '<div class=\"post-body\">'\n                    + '<div class=\"post-meta\">'\n                        + '<span>' + date + '<\/span>'\n                        + (author ? '<span class=\"post-meta-dot\"><\/span><span>' + escHtml(author) + '<\/span>' : '')\n                        + '<span class=\"post-meta-dot\"><\/span>'\n                        + '<span>' + readMin + ' min czytania<\/span>'\n                    + '<\/div>'\n                    + '<div class=\"post-title\">' + escHtml(title) + '<\/div>'\n                    + (excerpt ? '<div class=\"post-excerpt\">' + escHtml(excerpt) + '<\/div>' : '')\n                + '<\/div>'\n\n                \/* FOOTER *\/\n                + '<div class=\"post-footer\">'\n                    + '<span>Czytaj artyku\u0142<\/span>'\n                    + '<span class=\"post-arrow\">\u203a<\/span>'\n                + '<\/div>';\n\n            grid.appendChild(card);\n        });\n    }\n\n    \/* \u2500\u2500\u2500 RENDER: PAGINACJA \u2500\u2500\u2500 *\/\n    function renderPagination() {\n        pagEl.innerHTML = '';\n        if (state.pages <= 1) return;\n\n        function btn(label, page, disabled, active, ellipsis) {\n            var b = document.createElement('button');\n            b.className = 'page-btn' + (active ? ' active' : '') + (ellipsis ? ' ellipsis' : '');\n            b.textContent = label;\n            if (disabled || ellipsis) b.disabled = true;\n            if (!disabled && !ellipsis) {\n                b.addEventListener('click', function () {\n                    state.page = page;\n                    fetchPosts();\n                    scrollToGrid();\n                });\n            }\n            pagEl.appendChild(b);\n        }\n\n        \/* Wstecz *\/\n        btn('\u2039 Wstecz', state.page - 1, state.page === 1);\n\n        \/* Numery stron z elipsami *\/\n        var range = buildRange(state.page, state.pages);\n        range.forEach(function (p) {\n            if (p === '\u2026') btn('\u2026', 0, true, false, true);\n            else            btn(p, p, false, p === state.page);\n        });\n\n        \/* Dalej *\/\n        btn('Dalej \u203a', state.page + 1, state.page === state.pages);\n    }\n\n    function buildRange(cur, total) {\n        if (total <= 7) return range(1, total);\n        if (cur <= 4)   return range(1, 5).concat(['\u2026', total]);\n        if (cur >= total - 3) return [1, '\u2026'].concat(range(total - 4, total));\n        return [1, '\u2026'].concat(range(cur - 1, cur + 1)).concat(['\u2026', total]);\n    }\n\n    function range(a, b) {\n        var arr = [];\n        for (var i = a; i <= b; i++) arr.push(i);\n        return arr;\n    }\n\n    \/* \u2500\u2500\u2500 RENDER: INFO \u2500\u2500\u2500 *\/\n    function renderInfo() {\n        var from = (state.page - 1) * state.perPage + 1;\n        var to   = Math.min(state.page * state.perPage, state.total);\n        infoEl.textContent = 'Wy\u015bwietlam ' + from + '\u2013' + to + ' z ' + state.total + ' wpis\u00f3w';\n    }\n\n    \/* \u2500\u2500\u2500 HELPERS \u2500\u2500\u2500 *\/\n    function getThumb(post) {\n        try {\n            var emb = post._embedded;\n            if (emb && emb['wp:featuredmedia'] && emb['wp:featuredmedia'][0]) {\n                var med = emb['wp:featuredmedia'][0];\n                \/* preferuj rozmiar medium_large lub pe\u0142ny *\/\n                var sizes = med.media_details && med.media_details.sizes;\n                if (sizes) {\n                    var s = sizes['medium_large'] || sizes['large'] || sizes['medium'] || sizes['full'];\n                    if (s) return s.source_url;\n                }\n                return med.source_url || null;\n            }\n        } catch(e) {}\n        return null;\n    }\n\n    function getCat(post) {\n        try {\n            var terms = post._embedded['wp:term'];\n            if (terms) {\n                for (var i = 0; i < terms.length; i++) {\n                    if (terms[i][0] && terms[i][0].name) return terms[i][0].name;\n                }\n            }\n        } catch(e) {}\n        return '';\n    }\n\n    function getAuthor(post) {\n        try {\n            var authors = post._embedded && post._embedded.author;\n            if (authors && authors[0] && authors[0].name) return authors[0].name;\n        } catch(e) {}\n        return '';\n    }\n\n    function formatDate(str) {\n        if (!str) return '';\n        var d = new Date(str);\n        return d.toLocaleDateString('pl-PL', { year: 'numeric', month: 'long', day: 'numeric' });\n    }\n\n    function stripHtml(html) {\n        return html.replace(\/<[^>]*>\/g, '').replace(\/&[a-z#0-9]+;\/gi, function(m) {\n            var e = { '&amp;':'&','&lt;':'<','&gt;':'>','&quot;':'\"','&#039;':\"'\",'&nbsp;':' ' };\n            return e[m] || m;\n        }).trim();\n    }\n\n    function escHtml(s) {\n        return String(s)\n            .replace(\/&\/g,'&amp;').replace(\/<\/g,'&lt;')\n            .replace(\/>\/g,'&gt;').replace(\/\"\/g,'&quot;');\n    }\n\n    function escAttr(s) {\n        return escHtml(s).replace(\/'\/g,'&#039;');\n    }\n\n    function readTime(post) {\n        var text = '';\n        if (post.content && post.content.rendered) text = stripHtml(post.content.rendered);\n        var words = text.split(\/\\s+\/).filter(Boolean).length;\n        return Math.max(1, Math.round(words \/ 200));\n    }\n\n    function scrollToGrid() {\n        var el = document.getElementById('ckk-blog');\n        if (el) el.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n\n    \/* \u2500\u2500\u2500 EVENTS \u2500\u2500\u2500 *\/\n    var searchTimer;\n    searchEl.addEventListener('input', function () {\n        clearTimeout(searchTimer);\n        searchTimer = setTimeout(function () {\n            state.search = searchEl.value.trim();\n            state.page   = 1;\n            fetchPosts();\n        }, 420);\n    });\n\n    ppEl.addEventListener('change', function () {\n        state.perPage = parseInt(ppEl.value, 10);\n        state.page    = 1;\n        fetchPosts();\n    });\n\n    \/* \u2500\u2500\u2500 START \u2500\u2500\u2500 *\/\n    fetchPosts();\n\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Knowledge Zone The latest blog entries Practical knowledge, news and tips for therapists working in the TSR trend. All articles \u2192 \ud83d\udd0d 6 entries9 entries12 entries Downloading entries... Do you want to<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-299","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>TSR Blog \u2013 CKKMIP<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ckkmip.pl\/en\/blog-tsr\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"TSR Blog \u2013 CKKMIP\" \/>\n<meta property=\"og:description\" content=\"Strefa wiedzy Najnowsze wpisy na blogu Praktyczna wiedza, aktualno\u015bci i wskaz\u00f3wki dla terapeut\u00f3w pracuj\u0105cych w nurcie TSR. Wszystkie artyku\u0142y \u2192 \ud83d\udd0d 6 wpis\u00f3w9 wpis\u00f3w12 wpis\u00f3w Pobieranie wpis\u00f3w\u2026 Chcesz dowiedzie\u0107 si\u0119 wi\u0119cej o TSR? Sprawd\u017a pe\u0142ne archiwum artyku\u0142\u00f3w, poradnik\u00f3w i materia\u0142\u00f3w edukacyjnych przygotowanych przez trener\u00f3w CKKMIP. Przejd\u017a do blogu \u2192\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ckkmip.pl\/en\/blog-tsr\/\" \/>\n<meta property=\"og:site_name\" content=\"CKKMIP\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-25T13:20:55+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"18 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ckkmip.pl\/en\/blog-tsr\/\",\"url\":\"https:\/\/ckkmip.pl\/en\/blog-tsr\/\",\"name\":\"Blog TSR - CKKMIP\",\"isPartOf\":{\"@id\":\"https:\/\/ckkmip.pl\/#website\"},\"datePublished\":\"2024-11-08T07:36:52+00:00\",\"dateModified\":\"2026-03-25T13:20:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ckkmip.pl\/en\/blog-tsr\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ckkmip.pl\/en\/blog-tsr\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ckkmip.pl\/en\/blog-tsr\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/ckkmip.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog TSR\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ckkmip.pl\/#website\",\"url\":\"https:\/\/ckkmip.pl\/\",\"name\":\"CKKMIP\",\"description\":\"Szkolenia TSR\",\"publisher\":{\"@id\":\"https:\/\/ckkmip.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ckkmip.pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ckkmip.pl\/#organization\",\"name\":\"CKKMIP\",\"url\":\"https:\/\/ckkmip.pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/ckkmip.pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ckkmip.pl\/wp-content\/uploads\/2024\/01\/296100640_579807133669653_3195914079451505221_n.jpg\",\"contentUrl\":\"https:\/\/ckkmip.pl\/wp-content\/uploads\/2024\/01\/296100640_579807133669653_3195914079451505221_n.jpg\",\"width\":1300,\"height\":1560,\"caption\":\"CKKMIP\"},\"image\":{\"@id\":\"https:\/\/ckkmip.pl\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"TSR Blog \u2013 CKKMIP","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ckkmip.pl\/en\/blog-tsr\/","og_locale":"en_GB","og_type":"article","og_title":"TSR Blog \u2013 CKKMIP","og_description":"Strefa wiedzy Najnowsze wpisy na blogu Praktyczna wiedza, aktualno\u015bci i wskaz\u00f3wki dla terapeut\u00f3w pracuj\u0105cych w nurcie TSR. Wszystkie artyku\u0142y \u2192 \ud83d\udd0d 6 wpis\u00f3w9 wpis\u00f3w12 wpis\u00f3w Pobieranie wpis\u00f3w\u2026 Chcesz dowiedzie\u0107 si\u0119 wi\u0119cej o TSR? Sprawd\u017a pe\u0142ne archiwum artyku\u0142\u00f3w, poradnik\u00f3w i materia\u0142\u00f3w edukacyjnych przygotowanych przez trener\u00f3w CKKMIP. Przejd\u017a do blogu \u2192","og_url":"https:\/\/ckkmip.pl\/en\/blog-tsr\/","og_site_name":"CKKMIP","article_modified_time":"2026-03-25T13:20:55+00:00","twitter_card":"summary_large_image","twitter_misc":{"Estimated reading time":"18 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/ckkmip.pl\/en\/blog-tsr\/","url":"https:\/\/ckkmip.pl\/en\/blog-tsr\/","name":"TSR Blog \u2013 CKKMIP","isPartOf":{"@id":"https:\/\/ckkmip.pl\/#website"},"datePublished":"2024-11-08T07:36:52+00:00","dateModified":"2026-03-25T13:20:55+00:00","breadcrumb":{"@id":"https:\/\/ckkmip.pl\/en\/blog-tsr\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ckkmip.pl\/en\/blog-tsr\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ckkmip.pl\/en\/blog-tsr\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/ckkmip.pl\/"},{"@type":"ListItem","position":2,"name":"Blog TSR"}]},{"@type":"WebSite","@id":"https:\/\/ckkmip.pl\/#website","url":"https:\/\/ckkmip.pl\/","name":"CKKMIP","description":"TSR trainings","publisher":{"@id":"https:\/\/ckkmip.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ckkmip.pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/ckkmip.pl\/#organization","name":"CKKMIP","url":"https:\/\/ckkmip.pl\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/ckkmip.pl\/#\/schema\/logo\/image\/","url":"https:\/\/ckkmip.pl\/wp-content\/uploads\/2024\/01\/296100640_579807133669653_3195914079451505221_n.jpg","contentUrl":"https:\/\/ckkmip.pl\/wp-content\/uploads\/2024\/01\/296100640_579807133669653_3195914079451505221_n.jpg","width":1300,"height":1560,"caption":"CKKMIP"},"image":{"@id":"https:\/\/ckkmip.pl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/pages\/299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/comments?post=299"}],"version-history":[{"count":10,"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/pages\/299\/revisions"}],"predecessor-version":[{"id":1018,"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/pages\/299\/revisions\/1018"}],"wp:attachment":[{"href":"https:\/\/ckkmip.pl\/en\/wp-json\/wp\/v2\/media?parent=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}