{"id":2489,"date":"2026-04-12T12:02:26","date_gmt":"2026-04-12T09:02:26","guid":{"rendered":"https:\/\/www.kaksik.ee\/?page_id=2489"},"modified":"2026-04-12T12:02:26","modified_gmt":"2026-04-12T09:02:26","slug":"blogi","status":"publish","type":"page","link":"https:\/\/kaksik.ee\/en\/blogi\/","title":{"rendered":"Blogi"},"content":{"rendered":"<div class=\"brz brz-root__container brz-reset-all brz-root__container-page\" >\n<section id=\"fVA6U5mbGrJV_fVA6U5mbGrJV\" class=\"brz-section brz-css-d-section brz-css-dbafxc\">\n<div class=\"brz-section__content brz-section--boxed brz-css-d-sectionitem-bg brz-css-1mawg1s\" data-brz-custom-id=\"smmuaOhp2jj_\">\n<div class=\"brz-container brz-css-d-sectionitem-container brz-css-1780kc\">\n<div id=\"\" class=\"brz-css-d-wrapper brz-css-1nlbwqx brz-wrapper\">\n<div class=\"brz-embed-code brz-css-d-embedcode brz-css-864qrg\" data-brz-custom-id=\"iJcXjaGGujsc\">\n<div class=\"brz-embed-content\">\n<div><link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display:ital@0;1&amp;family=DM+Sans:wght@300;400;500;600;700&amp;display=swap\" rel=\"stylesheet\">\n<div id=\"kk-blog-wrap\">\n<div id=\"kk-blog-grid\" class=\"kk-blog-grid\">\n<div class=\"kk-blog-loading\">Laen postitusi&#8230;<\/div>\n<\/p><\/div>\n<\/div>\n<style>\n#kk-blog-wrap {\n  max-width: 1100px;\n  margin: 40px auto;\n  padding: 0 20px;\n  font-family: 'DM Sans', system-ui, sans-serif;\n  box-sizing: border-box;\n}\n.kk-blog-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 28px;\n}\n.kk-blog-loading {\n  grid-column: 1 \/ -1;\n  text-align: center;\n  padding: 60px 20px;\n  color: #888;\n  font-size: 14px;\n}\n.kk-blog-card {\n  background: #fff;\n  border: 1.5px solid #f0f0f0;\n  border-top: 3px solid #C63160;\n  border-radius: 8px;\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n  transition: border-color .25s, box-shadow .25s, transform .25s;\n  text-decoration: none;\n  color: inherit;\n}\n.kk-blog-card:hover {\n  border-color: #C63160;\n  box-shadow: 0 6px 24px rgba(198,49,96,0.10);\n  transform: translateY(-3px);\n}\n.kk-blog-card:hover .kk-blog-title { color: #C63160; }\n.kk-blog-card:hover .kk-blog-btn {\n  background: #C63160;\n  color: #fff;\n}\n.kk-blog-img-wrap {\n  width: 100%;\n  aspect-ratio: 16 \/ 10;\n  overflow: hidden;\n  background: #faf8f6;\n}\n.kk-blog-img-wrap img {\n  width: 100%;\n  height: 100%;\n  object-fit: cover;\n  display: block;\n  transition: transform .4s ease;\n}\n.kk-blog-card:hover .kk-blog-img-wrap img { transform: scale(1.05); }\n.kk-blog-img-placeholder {\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(135deg, #faf8f6 0%, #F9E0E8 100%);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  color: #C63160;\n  font-family: 'DM Serif Display', serif;\n  font-size: 32px;\n  font-style: italic;\n  opacity: 0.5;\n}\n.kk-blog-body {\n  padding: 22px 22px 24px;\n  display: flex;\n  flex-direction: column;\n  flex: 1;\n}\n.kk-blog-date {\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: 0.12em;\n  text-transform: uppercase;\n  color: #C63160;\n  margin-bottom: 10px;\n}\n.kk-blog-title {\n  font-family: 'DM Serif Display', serif;\n  font-size: 22px;\n  line-height: 1.25;\n  color: #081b76;\n  margin: 0 0 12px;\n  transition: color .2s;\n}\n.kk-blog-excerpt {\n  font-size: 14px;\n  line-height: 1.6;\n  color: #666;\n  margin: 0 0 18px;\n  flex: 1;\n}\n.kk-blog-btn {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  align-self: flex-start;\n  padding: 9px 18px;\n  border: 1.5px solid #C63160;\n  border-radius: 8px;\n  background: #fff;\n  color: #C63160;\n  font-family: 'DM Sans', sans-serif;\n  font-size: 13px;\n  font-weight: 600;\n  letter-spacing: 0.03em;\n  text-decoration: none;\n  transition: background .2s, color .2s, transform .15s;\n}\n.kk-blog-btn .arrow { transition: transform .2s; }\n.kk-blog-card:hover .kk-blog-btn .arrow { transform: translateX(3px); }\n.kk-blog-error {\n  grid-column: 1 \/ -1;\n  text-align: center;\n  padding: 40px 20px;\n  color: #c0254f;\n  font-size: 14px;\n}\n@media (max-width: 900px) {\n  .kk-blog-grid { grid-template-columns: repeat(2, 1fr); gap: 22px; }\n  .kk-blog-title { font-size: 20px; }\n}\n@media (max-width: 600px) {\n  .kk-blog-grid { grid-template-columns: 1fr; gap: 20px; }\n  #kk-blog-wrap { margin: 24px auto; padding: 0 16px; }\n}\n<\/style>\n<p><script>\n(function () {\n  \/\/ \u2500\u2500 CONFIG \u2500\u2500\n  const POSTS_PER_PAGE = 6;\n  const EXCERPT_WORDS  = 18;\n  const CATEGORY_ID    = null; \/\/ set to a category ID (number) to filter, or null for all<\/p>\n<p>  \/\/ \u2500\u2500 LANG DETECTION \u2500\u2500\n  const LANG = window.location.pathname.startsWith('\/en\/') ? 'en' : 'et';\n  const T = {\n    et: { read: 'Loe edasi', loading: 'Laen postitusi...', error: 'Postituste laadimine eba\u00f5nnestus.', empty: 'Postitusi ei leitud.' },\n    en: { read: 'Read more', loading: 'Loading posts...',  error: 'Failed to load posts.',              empty: 'No posts found.' }\n  }[LANG];<\/p>\n<p>  const months = {\n    et: ['jaanuar','veebruar','m\u00e4rts','aprill','mai','juuni','juuli','august','september','oktoober','november','detsember'],\n    en: ['January','February','March','April','May','June','July','August','September','October','November','December']\n  }[LANG];<\/p>\n<p>  function formatDate(iso) {\n    const d = new Date(iso);\n    return `${d.getDate()}. ${months[d.getMonth()]} ${d.getFullYear()}`;\n  }<\/p>\n<p>  function stripHtml(html) {\n    const tmp = document.createElement('div');\n    tmp.innerHTML = html;\n    return (tmp.textContent || tmp.innerText || '').replace(\/s+\/g, ' ').trim();\n  }<\/p>\n<p>  function truncate(text, words) {\n    const arr = text.split(' ');\n    if (arr.length <= words) return text;\n    return arr.slice(0, words).join(' ') + '\u2026';\n  }\n\n  function escapeHtml(s) {\n    return s.replace(\/[&#038;<>\"']\/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[c]));\n  }<\/p>\n<p>  \/\/ \u2500\u2500 FETCH \u2500\u2500\n  let url = `${window.location.origin}\/wp-json\/wp\/v2\/posts?per_page=${POSTS_PER_PAGE}&_embed=wp:featuredmedia`;\n  if (CATEGORY_ID) url += `&categories=${CATEGORY_ID}`;<\/p>\n<p>  const grid = document.getElementById('kk-blog-grid');<\/p>\n<p>  fetch(url)\n    .then(r => {\n      if (!r.ok) throw new Error('HTTP ' + r.status);\n      return r.json();\n    })\n    .then(posts => {\n      if (!posts.length) {\n        grid.innerHTML = `<\/p>\n<div class=\"kk-blog-error\">${T.empty}<\/div>\n<p>`;\n        return;\n      }<\/p>\n<p>      grid.innerHTML = posts.map(p => {\n        const title    = stripHtml(p.title.rendered);\n        const excerpt  = truncate(stripHtml(p.excerpt.rendered), EXCERPT_WORDS);\n        const date     = formatDate(p.date);\n        const link     = p.link;\n        const media    = p._embedded && p._embedded['wp:featuredmedia'] && p._embedded['wp:featuredmedia'][0];\n        const imgUrl   = media && (media.media_details?.sizes?.medium_large?.source_url || media.source_url);\n        const imgAlt   = media && media.alt_text ? media.alt_text : title;<\/p>\n<p>        const imgBlock = imgUrl\n          ? `<\/p>\n<div class=\"kk-blog-img-wrap\"><img decoding=\"async\" src=\"${escapeHtml(imgUrl)}\" alt=\"${escapeHtml(imgAlt)}\" loading=\"lazy\"><\/div>\n<p>`\n          : `<\/p>\n<div class=\"kk-blog-img-wrap\">\n<div class=\"kk-blog-img-placeholder\">Kaksik<\/div>\n<\/div>\n<p>`;<\/p>\n<p>        return `\n          <a class=\"kk-blog-card\" href=\"${escapeHtml(link)}\">\n            ${imgBlock}<\/p>\n<div class=\"kk-blog-body\">\n<h3 class=\"kk-blog-title\">${escapeHtml(title)}<\/h3>\n<p class=\"kk-blog-excerpt\">${escapeHtml(excerpt)}<\/p>\n<p>              <span class=\"kk-blog-btn\">${T.read} <span class=\"arrow\">\u2192<\/span><\/span>\n            <\/div>\n<p>          <\/a>\n        `;\n      }).join('');\n    })\n    .catch(err => {\n      console.error('Kaksik blog embed:', err);\n      grid.innerHTML = `<\/p>\n<div class=\"kk-blog-error\">${T.error}<\/div>\n<p>`;\n    });\n})();\n<\/script><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section><\/div>\n<p><!-- version:1775984383 --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laen postitusi&#8230;<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"brizy-blank-template.php","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-2489","page","type-page","status-publish","hentry"],"aioseo_notices":[],"brizy_media":[],"_links":{"self":[{"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/pages\/2489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/comments?post=2489"}],"version-history":[{"count":10,"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/pages\/2489\/revisions"}],"predecessor-version":[{"id":2947,"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/pages\/2489\/revisions\/2947"}],"wp:attachment":[{"href":"https:\/\/kaksik.ee\/en\/wp-json\/wp\/v2\/media?parent=2489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}