{"id":7,"date":"2026-03-19T11:00:39","date_gmt":"2026-03-19T11:00:39","guid":{"rendered":"http:\/\/datino.pl\/?page_id=7"},"modified":"2026-03-19T13:50:25","modified_gmt":"2026-03-19T13:50:25","slug":"terminy","status":"publish","type":"page","link":"https:\/\/datino.pl\/","title":{"rendered":"Terminy"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1.png\" alt=\"\" class=\"wp-image-20\" style=\"width:645px;height:auto\" srcset=\"https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1.png 512w, https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1-300x300.png 300w, https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1-150x150.png 150w, https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1-270x270.png 270w, https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1-192x192.png 192w, https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1-180x180.png 180w, https:\/\/datino.pl\/wp-content\/uploads\/2026\/03\/cropped-datino-caly-scaled-1-32x32.png 32w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n        <div class=\"dt-auth\" data-ajax-url=\"https:\/\/datino.pl\/wp-admin\/admin-ajax.php\" data-nonce=\"777a3bbd9c\">\n            <div class=\"dt-app-header\">\n                <h2>Datino<\/h2>\n                <p>Logowanie i do\u0142\u0105czenie do rodziny<\/p>\n            <\/div>\n\n            <div class=\"dt-auth-card\">\n                <h3>Zaloguj si\u0119<\/h3>\n                <form class=\"dt-login-form\">\n                    <input type=\"text\" name=\"login\" placeholder=\"Imi\u0119\" required>\n                    <input type=\"password\" name=\"password\" placeholder=\"Has\u0142o\" required>\n                    <button type=\"submit\">Wejd\u017a<\/button>\n                <\/form>\n            <\/div>\n\n            <div class=\"dt-auth-card\">\n                <h3>Do\u0142\u0105cz do rodziny<\/h3>\n                <form class=\"dt-register-form\">\n                    <input type=\"text\" name=\"display_name\" placeholder=\"Imi\u0119\" required maxlength=\"60\">\n                    <input type=\"password\" name=\"password\" placeholder=\"Has\u0142o\" required minlength=\"8\">\n                    <input type=\"text\" name=\"family_code\" placeholder=\"Kod rodziny\" required maxlength=\"20\" style=\"text-transform:uppercase\">\n                    <button type=\"submit\">Za\u0142\u00f3\u017c konto i do\u0142\u0105cz<\/button>\n                <\/form>\n                            <\/div>\n\n            <div class=\"dt-auth-msg\" hidden><\/div>\n        <\/div>\n        <style>\n            .dt-auth,.dt-app{max-width:680px;margin:0 auto;padding:14px;font-family:inherit}\n            .dt-app-header{padding:8px 2px 16px}\n            .dt-app-header h2{margin:0;font-size:28px;line-height:1.1}\n            .dt-app-header p{margin:6px 0 0;color:#666}\n            .dt-auth-card{background:#fff;border:1px solid #e6e6e6;border-radius:18px;padding:16px;margin-bottom:14px;box-shadow:0 4px 14px rgba(0,0,0,.05)}\n            .dt-auth-card h3{margin:0 0 12px;font-size:18px}\n            .dt-auth-card form{display:grid;gap:10px}\n            .dt-auth-card input,.dt-auth-card button{width:100%;box-sizing:border-box;border-radius:14px;padding:14px;border:1px solid #d9d9d9;font-size:16px}\n            .dt-auth-card button{background:#111;color:#fff;font-weight:700;border:0}\n            .dt-auth-help{margin:10px 2px 0;color:#666;font-size:14px}\n            .dt-auth-msg{border-radius:14px;padding:12px 14px;font-size:15px;margin-top:8px;background:#fff5d6;border:1px solid #eed58e}\n        <\/style>\n        <script>\n            (function(){\n                const wrap = document.currentScript.previousElementSibling.previousElementSibling;\n                if(!wrap || !wrap.classList.contains('dt-auth')) return;\n                const ajaxUrl = wrap.dataset.ajaxUrl;\n                const nonce = wrap.dataset.nonce;\n                const msg = wrap.querySelector('.dt-auth-msg');\n\n                function showMsg(text, ok){\n                    msg.hidden = false;\n                    msg.textContent = text;\n                    msg.style.background = ok ? '#eefcf1' : '#fff5d6';\n                    msg.style.borderColor = ok ? '#8fd19e' : '#eed58e';\n                }\n\n                async function send(form, action){\n                    const fd = new FormData(form);\n                    fd.append('action', action);\n                    fd.append('nonce', nonce);\n                    const btn = form.querySelector('button');\n                    const original = btn.textContent;\n                    btn.disabled = true;\n                    btn.textContent = 'Chwila...';\n                    try {\n                        const res = await fetch(ajaxUrl, {method:'POST', body:fd, credentials:'same-origin'});\n                        const data = await res.json();\n                        if(!data.success){\n                            showMsg(data.data && data.data.message ? data.data.message : 'Co\u015b posz\u0142o nie tak.', false);\n                            return;\n                        }\n                        if(data.data && data.data.message){\n                            showMsg(data.data.message, true);\n                        }\n                        window.location.reload();\n                    } catch(e){\n                        showMsg('B\u0142\u0105d po\u0142\u0105czenia.', false);\n                    } finally {\n                        btn.disabled = false;\n                        btn.textContent = original;\n                    }\n                }\n\n                wrap.querySelector('.dt-login-form').addEventListener('submit', function(e){\n                    e.preventDefault();\n                    send(this, 'dt_front_login');\n                });\n\n                wrap.querySelector('.dt-register-form').addEventListener('submit', function(e){\n                    e.preventDefault();\n                    this.querySelector('[name=\"family_code\"]').value = this.querySelector('[name=\"family_code\"]').value.toUpperCase().trim();\n                    send(this, 'dt_register_join');\n                });\n            })();\n        <\/script>\n        \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-no-title","meta":{"footnotes":""},"class_list":["post-7","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/datino.pl\/index.php?rest_route=\/wp\/v2\/pages\/7","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datino.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/datino.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/datino.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datino.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7"}],"version-history":[{"count":5,"href":"https:\/\/datino.pl\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions"}],"predecessor-version":[{"id":42,"href":"https:\/\/datino.pl\/index.php?rest_route=\/wp\/v2\/pages\/7\/revisions\/42"}],"wp:attachment":[{"href":"https:\/\/datino.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}