{"id":399,"date":"2026-07-19T22:03:46","date_gmt":"2026-07-19T20:03:46","guid":{"rendered":"https:\/\/jacekhoroszko.com\/?page_id=399"},"modified":"2026-07-19T23:15:43","modified_gmt":"2026-07-19T21:15:43","slug":"kalkulator-zycie-z-kapitalu","status":"publish","type":"page","link":"http:\/\/jacekhoroszko.com\/index.php\/kalkulator-zycie-z-kapitalu\/","title":{"rendered":"Kalkulator \u017bycie z Kapita\u0142u"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"399\" class=\"elementor elementor-399\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f49f818 e-con-full e-flex e-con e-parent\" data-id=\"f49f818\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d662bf4 elementor-widget elementor-widget-html\" data-id=\"d662bf4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\n     Kalkulator \u017bycie z Kapita\u0142u \u2014 Jacek Horoszko Investment Partner\n     Wklej CA\u0141\u0104 zawarto\u015b\u0107 tego pliku do bloku \"Niestandardowy HTML\"\n     (Custom HTML) w edytorze WordPress.\n     ============================================================ -->\n<div id=\"jhip-kapital-calculator\">\n  <div class=\"jhip-kz-header\">\n    <h2>\u017bycie z Kapita\u0142u<\/h2>\n    <p>Sprawd\u017a, na ile lat starczy Ci zgromadzony kapita\u0142 przy regularnych wyp\u0142atach<\/p>\n  <\/div>\n\n  <div class=\"eme-form-card\">\n    <div class=\"su-section-label\" style=\"margin-top:0\">Parametry<\/div>\n    <div class=\"eme-form-grid\">\n      <div class=\"su-field\">\n        <span class=\"su-field-label\">Zgromadzony kapita\u0142<\/span>\n        <div class=\"su-money-wrap\"><input id=\"kz-kapital\" class=\"su-money-input\" type=\"number\" min=\"0\" value=\"600000\"><span class=\"su-money-suffix\">PLN<\/span><\/div>\n      <\/div>\n      <div class=\"su-field\">\n        <span class=\"su-field-label\">Miesi\u0119czna wyp\u0142ata<\/span>\n        <div class=\"su-money-wrap\"><input id=\"kz-wyplata\" class=\"su-money-input\" type=\"number\" min=\"0\" value=\"5000\"><span class=\"su-money-suffix\">PLN<\/span><\/div>\n      <\/div>\n    <\/div>\n    <div class=\"eme-form-grid\">\n      <div class=\"su-field\">\n        <span class=\"su-field-label\">Oprocentowanie (%\/rok)<\/span>\n        <input id=\"kz-oproc\" class=\"su-text-input\" type=\"number\" min=\"0\" step=\"0.1\" value=\"7\">\n      <\/div>\n      <div class=\"su-field\">\n        <span class=\"su-field-label\">Indeksacja wyp\u0142aty rocznie (%)<\/span>\n        <input id=\"kz-indeksacja\" class=\"su-text-input\" type=\"number\" min=\"0\" step=\"0.1\" value=\"3\" disabled>\n      <\/div>\n    <\/div>\n    <div class=\"eme-checkbox-row\">\n      <label><input type=\"checkbox\" id=\"kz-index-chk\" onchange=\"JhipKapital.toggleIndeksacja()\"> Zwi\u0119kszaj corocznie wyp\u0142at\u0119 o powy\u017cszy procent (indeksacja)<\/label>\n    <\/div>\n    <div class=\"eme-checkbox-row\">\n      <label><input type=\"checkbox\" id=\"kz-podatek\"> Uwzgl\u0119dnij podatek Belki (19%)<\/label>\n    <\/div>\n    <div id=\"kz-error\" class=\"ik-limit-note\" style=\"color:#F3A3AC;margin-top:8px;display:none\"><\/div>\n    <div style=\"text-align:right;margin-top:16px\">\n      <button class=\"tool-btn\" onclick=\"JhipKapital.oblicz()\">Oblicz wynik \u2192<\/button>\n    <\/div>\n  <\/div>\n\n  <div id=\"kz-results\" style=\"display:none\">\n    <div class=\"ik-payout-hero\">\n      <div class=\"ik-payout-hero-label\">\ud83d\udcc6 Kapita\u0142 wystarczy na<\/div>\n      <div class=\"ik-payout-hero-val\" id=\"kz-out-okres\">\u2014<\/div>\n      <div class=\"ik-payout-hero-row\">\n        <span id=\"kz-out-summary\"><\/span>\n      <\/div>\n    <\/div>\n    <div class=\"eme-result-cards\">\n      <div class=\"eme-result-card\" style=\"border-top-color:var(--gold)\">\n        <div class=\"eme-result-label\">\u0141\u0105czna suma wyp\u0142at<\/div>\n        <div class=\"eme-result-val\" id=\"kz-out-suma\">\u2014<\/div>\n        <div class=\"eme-result-sub\">przez ca\u0142y okres wyp\u0142at<\/div>\n      <\/div>\n      <div class=\"eme-result-card\" style=\"border-top-color:var(--growth)\">\n        <div class=\"eme-result-label\">Ostatnia miesi\u0119czna wyp\u0142ata<\/div>\n        <div class=\"eme-result-val\" id=\"kz-out-ostatnia\">\u2014<\/div>\n        <div class=\"eme-result-sub\" id=\"kz-out-ostatnia-sub\">w ostatnim roku wyp\u0142at<\/div>\n      <\/div>\n      <div class=\"eme-result-card\" style=\"border-top-color:var(--muted)\">\n        <div class=\"eme-result-label\">Kapita\u0142 wyczerpie si\u0119 w<\/div>\n        <div class=\"eme-result-val\" id=\"kz-out-rok\">\u2014<\/div>\n        <div class=\"eme-result-sub\">przy dzisiejszej dacie startu<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"su-section-label\" style=\"margin-top:0\">Saldo kapita\u0142u w czasie<\/div>\n    <div id=\"kz-chart\"><\/div>\n\n    <div class=\"kap-actionbar\" style=\"margin-top:18px\">\n      <button class=\"kap-btn-genpdf\" onclick=\"JhipKapital.openEmailForm()\">\u2709 Wy\u015blij na e-mail<\/button>\n    <\/div>\n    <div id=\"kz-email-panel\" style=\"display:none;background:var(--surface);border:1px solid var(--border-soft);border-radius:10px;padding:14px 16px;margin-bottom:14px\">\n      <div style=\"display:flex;gap:8px;flex-wrap:wrap;align-items:center\">\n        <input id=\"kz-email-name\" type=\"text\" class=\"su-text-input\" placeholder=\"Imi\u0119\" style=\"max-width:160px\" onkeydown=\"if(event.key==='Enter'){JhipKapital.sendResultEmail()}\">\n        <input id=\"kz-email-phone\" type=\"tel\" class=\"su-text-input\" placeholder=\"Telefon\" style=\"max-width:160px\" onkeydown=\"if(event.key==='Enter'){JhipKapital.sendResultEmail()}\">\n        <input id=\"kz-email-input\" type=\"email\" class=\"su-text-input\" placeholder=\"twoj@email.pl\" style=\"max-width:220px\" onkeydown=\"if(event.key==='Enter'){JhipKapital.sendResultEmail()}\">\n        <button id=\"kz-email-send-btn\" class=\"tool-btn\" onclick=\"JhipKapital.sendResultEmail()\">Wy\u015blij<\/button>\n        <button class=\"tool-btn\" style=\"background:transparent;color:var(--muted);border:1px solid var(--border)\" onclick=\"JhipKapital.closeEmailForm()\">Anuluj<\/button>\n      <\/div>\n      <div id=\"kz-email-status\" style=\"font-size:11px;margin-top:8px\"><\/div>\n    <\/div>\n\n    <div class=\"ik-limit-note\" style=\"margin-top:4px\">Wyliczenie ma charakter pogl\u0105dowy i nie stanowi porady inwestycyjnej ani podatkowej. Zak\u0142ada sta\u0142\u0105, niezmienn\u0105 w czasie stop\u0119 zwrotu oraz regularne, comiesi\u0119czne wyp\u0142aty a\u017c do wyczerpania kapita\u0142u.<\/div>\n  <\/div>\n<\/div>\n\n<style>\n  #jhip-kapital-calculator, #jhip-kapital-calculator *, #jhip-kapital-calculator *::before, #jhip-kapital-calculator *::after {\n    box-sizing: border-box;\n  }\n  #jhip-kapital-calculator {\n    --navy:#0F152E; --surface:#1A2442; --surface2:#222E54; --gold:#D3AF37; --red:#A11927; --white:#fff;\n    --text:#F4F5F9; --muted:#9AA6C4; --border:rgba(255,255,255,0.14); --border-soft:rgba(255,255,255,0.08);\n    --growth:#3FBF9F;\n    --shadow:0 8px 24px rgba(0,0,0,0.35);\n    font-family: system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;\n    font-size: 13px; line-height: 1.4; color: var(--text);\n    max-width: 780px; margin: 0 auto;\n    background: var(--navy); border: 1px solid var(--border-soft); border-radius: 18px;\n    padding: 22px 24px 26px; box-shadow: var(--shadow);\n  }\n  #jhip-kapital-calculator button { font-family: inherit; }\n  #jhip-kapital-calculator .jhip-kz-header { margin-bottom: 16px; }\n  #jhip-kapital-calculator .jhip-kz-header h2 { font-size: 21px; font-weight: 700; font-family: Georgia,serif; color: #fff; margin: 0 0 4px; }\n  #jhip-kapital-calculator .jhip-kz-header p { font-size: 12px; color: var(--muted); margin: 0; }\n\n  #jhip-kapital-calculator .su-section-label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.09em; color: var(--muted); margin: 20px 0 10px; }\n  #jhip-kapital-calculator .su-section-label:first-of-type { margin-top: 0; }\n  #jhip-kapital-calculator .su-field { margin-bottom: 9px; min-width: 0; }\n  #jhip-kapital-calculator .su-field-label { display: block; font-size: 9px; font-weight: 600; text-transform: uppercase; letter-spacing: 0.07em; color: var(--muted); margin-bottom: 4px; }\n  #jhip-kapital-calculator .su-text-input { width: 100%; padding: 9px 11px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 13px; color: var(--text); background: var(--surface2); font-family: inherit; outline: none; }\n  #jhip-kapital-calculator .su-text-input:focus { border-color: var(--gold); }\n  #jhip-kapital-calculator .su-text-input:disabled { opacity: 0.45; cursor: not-allowed; }\n  #jhip-kapital-calculator .su-money-wrap { position: relative; }\n  #jhip-kapital-calculator .su-money-input { width: 100%; padding: 8px 32px 8px 10px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 13px; color: var(--text); background: var(--surface2); font-family: inherit; outline: none; }\n  #jhip-kapital-calculator .su-money-input:focus { border-color: var(--gold); }\n  #jhip-kapital-calculator .su-money-suffix { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); font-size: 10px; color: var(--muted); pointer-events: none; }\n  #jhip-kapital-calculator .eme-form-card { background: var(--surface); border-radius: 12px; border: 1px solid var(--border-soft); padding: 18px 20px; margin-bottom: 14px; }\n  #jhip-kapital-calculator .eme-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 16px; }\n  #jhip-kapital-calculator .eme-checkbox-row { display: flex; align-items: center; gap: 8px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }\n  #jhip-kapital-calculator .eme-checkbox-row label { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--text); font-weight: 600; cursor: pointer; }\n  #jhip-kapital-calculator .tool-btn { padding: 9px 18px; border-radius: 20px; border: none; background: var(--gold); color: var(--navy); font-size: 12px; font-weight: 700; cursor: pointer; }\n  #jhip-kapital-calculator .tool-btn:hover { opacity: 0.86; }\n  #jhip-kapital-calculator .kap-actionbar { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; align-items: center; }\n  #jhip-kapital-calculator .kap-btn-genpdf { background: var(--gold); border: none; border-radius: 8px; padding: 8px 18px; font-size: 13px; font-weight: 700; color: var(--navy); cursor: pointer; }\n  #jhip-kapital-calculator .ik-limit-note { font-size: 11px; color: var(--muted); margin-top: 4px; }\n  #jhip-kapital-calculator .ik-limit-note strong { color: #fff; }\n  #jhip-kapital-calculator .ik-payout-hero { background: var(--surface2); border-radius: 14px; border-top: 4px solid var(--gold); padding: 24px 28px; margin-bottom: 18px; color: #fff; }\n  #jhip-kapital-calculator .ik-payout-hero-label { font-size: 13px; color: rgba(255,255,255,0.7); font-weight: 600; margin-bottom: 6px; }\n  #jhip-kapital-calculator .ik-payout-hero-val { font-size: 34px; font-weight: 900; letter-spacing: -0.02em; line-height: 1.1; }\n  #jhip-kapital-calculator .ik-payout-hero-row { display: flex; gap: 24px; flex-wrap: wrap; margin-top: 14px; font-size: 12px; color: rgba(255,255,255,0.75); }\n  #jhip-kapital-calculator .eme-result-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(190px,1fr)); gap: 12px; margin-bottom: 20px; }\n  #jhip-kapital-calculator .eme-result-card { background: var(--surface); border-radius: 12px; border: 1px solid var(--border-soft); border-top: 4px solid; padding: 14px 16px; }\n  #jhip-kapital-calculator .eme-result-label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); margin-bottom: 6px; }\n  #jhip-kapital-calculator .eme-result-val { font-size: 20px; font-weight: 900; color: #fff; }\n  #jhip-kapital-calculator .eme-result-sub { font-size: 11px; color: var(--muted); margin-top: 4px; }\n  #jhip-kapital-calculator #kz-chart { background: var(--surface); border: 1px solid var(--border-soft); border-radius: 12px; padding: 14px 16px 6px; margin-bottom: 8px; }\n\n  @media (max-width: 560px) {\n    #jhip-kapital-calculator { padding: 16px; }\n    #jhip-kapital-calculator .eme-form-grid { grid-template-columns: 1fr; }\n    #jhip-kapital-calculator .ik-payout-hero-val { font-size: 26px; }\n  }\n<\/style>\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/@emailjs\/browser@4\/dist\/email.min.js\"><\/script>\n<script>\n(function () {\n  const esc = s => String(s).replace(\/&\/g, '&amp;').replace(\/<\/g, '&lt;').replace(\/>\/g, '&gt;');\n  const fmtPLN = v => new Intl.NumberFormat('pl-PL', { style: 'currency', currency: 'PLN', maximumFractionDigits: 0 }).format(Math.round(v || 0));\n  const fmtAxis = v => {\n    const n = Math.abs(v);\n    if (n >= 1e6) return (v \/ 1e6).toFixed(1).replace('.', ',') + ' mln';\n    if (n >= 1e3) return (v \/ 1e3).toFixed(0) + ' tys.';\n    return String(Math.round(v));\n  };\n\n  \/\/ \u2500\u2500 EmailJS (to samo konto\/szablon co pozosta\u0142e kalkulatory) \u2500\u2500\n  const EMAILJS_PUBLIC_KEY  = 'lKDuaTSIkMgu12jLj';\n  const EMAILJS_SERVICE_ID  = 'service_cs1bt29';\n  const EMAILJS_TEMPLATE_ID = 'template_06apygu';\n  const KZ_LOGO_URL  = 'https:\/\/jacekhoroszko.com\/wp-content\/uploads\/2026\/07\/logo-email.png';\n  const KZ_PHOTO_URL = 'https:\/\/jacekhoroszko.com\/wp-content\/uploads\/2026\/07\/photo-email.jpg';\n  const JHIP_LEAD_EMAIL = 'jacek.horoszko@phinance.pl';\n\n  const CAP_MONTHS = 1200; \/\/ bezpiecznik: maks. 100 lat symulacji\n  let lastResult = null;\n\n  function toggleIndeksacja() {\n    document.getElementById('kz-indeksacja').disabled = !document.getElementById('kz-index-chk').checked;\n  }\n\n  \/\/ Odmiana polskich liczebnik\u00f3w (rok\/lata\/lat, miesi\u0105c\/miesi\u0105ce\/miesi\u0119cy)\n  function plForm(n, one, few, many) {\n    if (n === 1) return one;\n    const m10 = n % 10, m100 = n % 100;\n    if (m10 >= 2 && m10 <= 4 && !(m100 >= 12 && m100 <= 14)) return few;\n    return many;\n  }\n  function fmtYearsMonths(totalMonths) {\n    const years = Math.floor(totalMonths \/ 12);\n    const months = totalMonths % 12;\n    const yLabel = plForm(years, 'rok', 'lata', 'lat');\n    if (months === 0) return `${years} ${yLabel}`;\n    const mLabel = plForm(months, 'miesi\u0105c', 'miesi\u0105ce', 'miesi\u0119cy');\n    return `${years} ${yLabel} i ${months} ${mLabel}`;\n  }\n\n  \/\/ \u2500\u2500 Silnik symulacji (odtworzony i zweryfikowany na bazie czytosieoplaca.pl\/zycie-z-kapitalu.html) \u2500\u2500\n  function simulate(kapital, wyplata0, oproc, podatek, indeksuj, indeksacjaPct) {\n    const rate = (oproc \/ 100) * (podatek ? 0.81 : 1);\n    const r = rate \/ 12;\n    let c = kapital, w = wyplata0, months = 0, totalWithdrawn = 0;\n    const yearly = [{ year: 0, balance: kapital }];\n    while (c - w >= 0 && months < CAP_MONTHS) {\n      c = (c - w) * (1 + r);\n      totalWithdrawn += w;\n      months++;\n      if (indeksuj && months % 12 === 0) w = w * (1 + indeksacjaPct \/ 100);\n      if (months % 12 === 0) yearly.push({ year: months \/ 12, balance: Math.max(0, c) });\n    }\n    const depleted = months < CAP_MONTHS;\n    if (depleted) yearly.push({ year: months \/ 12, balance: 0 });\n    return { months, totalWithdrawn, finalWithdrawal: w, depleted, yearly, kapital, wyplata0 };\n  }\n\n  function calc() {\n    const kapital = parseFloat(document.getElementById('kz-kapital').value);\n    const wyplata = parseFloat(document.getElementById('kz-wyplata').value);\n    const oproc = parseFloat(document.getElementById('kz-oproc').value);\n    const indeksuj = document.getElementById('kz-index-chk').checked;\n    const indeksacja = parseFloat(document.getElementById('kz-indeksacja').value) || 0;\n    const podatek = document.getElementById('kz-podatek').checked;\n    const errEl = document.getElementById('kz-error');\n    if (!kapital || kapital <= 0 || isNaN(kapital)) { errEl.textContent = 'Podaj poprawny zgromadzony kapita\u0142.'; errEl.style.display = 'block'; return null; }\n    if (!wyplata || wyplata <= 0 || isNaN(wyplata)) { errEl.textContent = 'Podaj poprawn\u0105 miesi\u0119czn\u0105 wyp\u0142at\u0119.'; errEl.style.display = 'block'; return null; }\n    if (!oproc || oproc < 0 || isNaN(oproc)) { errEl.textContent = 'Podaj poprawne oprocentowanie.'; errEl.style.display = 'block'; return null; }\n    if (wyplata > kapital) { errEl.textContent = 'Miesi\u0119czna wyp\u0142ata nie mo\u017ce przekracza\u0107 zgromadzonego kapita\u0142u.'; errEl.style.display = 'block'; return null; }\n    errEl.style.display = 'none';\n    const sim = simulate(kapital, wyplata, oproc, podatek, indeksuj, indeksacja);\n    return { kapital, wyplata, oproc, indeksuj, indeksacja, podatek, ...sim };\n  }\n\n  function buildChartSVG(yearly) {\n    const W = 700, H = 200, padL = 52, padR = 10, padT = 14, padB = 26;\n    const plotW = W - padL - padR, plotH = H - padT - padB;\n    const n = yearly.length;\n    if (n < 2) return '';\n    const maxVal = Math.max(1, ...yearly.map(d => d.balance));\n    const maxYear = yearly[n - 1].year;\n    const x = y => padL + (y \/ maxYear) * plotW;\n    const y = v => padT + plotH - (v \/ maxVal) * plotH;\n    const gridN = 4, gridParts = [];\n    for (let g = 0; g <= gridN; g++) {\n      const v = maxVal * g \/ gridN, gy = y(v);\n      gridParts.push(`<line x1=\"${padL}\" y1=\"${gy.toFixed(1)}\" x2=\"${W - padR}\" y2=\"${gy.toFixed(1)}\" stroke=\"rgba(255,255,255,0.08)\" stroke-width=\"1\"\/>`);\n      gridParts.push(`<text x=\"${padL - 6}\" y=\"${(gy + 3).toFixed(1)}\" font-size=\"9\" fill=\"#9AA6C4\" text-anchor=\"end\" font-family=\"system-ui,-apple-system,sans-serif\">${fmtAxis(v)}<\/text>`);\n    }\n    const xStep = Math.max(1, Math.ceil(maxYear \/ 8));\n    const xLabelParts = [];\n    for (let yr = 0; yr <= maxYear; yr += xStep) xLabelParts.push(`<text x=\"${x(yr).toFixed(1)}\" y=\"${H - 6}\" font-size=\"9\" fill=\"#9AA6C4\" text-anchor=\"middle\" font-family=\"system-ui,-apple-system,sans-serif\">${Math.round(yr)}r.<\/text>`);\n    const areaPath = `M${x(0).toFixed(1)},${y(0).toFixed(1)} ` + yearly.map(d => `L${x(d.year).toFixed(1)},${y(d.balance).toFixed(1)}`).join(' ') + ` L${x(maxYear).toFixed(1)},${y(0).toFixed(1)} Z`;\n    const linePath = yearly.map((d, i) => `${i === 0 ? 'M' : 'L'}${x(d.year).toFixed(1)},${y(d.balance).toFixed(1)}`).join(' ');\n    const axisLine = `<line x1=\"${padL}\" y1=\"${(padT + plotH).toFixed(1)}\" x2=\"${W - padR}\" y2=\"${(padT + plotH).toFixed(1)}\" stroke=\"rgba(255,255,255,0.16)\" stroke-width=\"1\"\/>`;\n    return `<svg width=\"100%\" height=\"${H}\" viewBox=\"0 0 ${W} ${H}\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"display:block\">\n      ${gridParts.join('')}${axisLine}\n      <path d=\"${areaPath}\" fill=\"#D3AF37\" fill-opacity=\"0.14\" stroke=\"none\"\/>\n      <path d=\"${linePath}\" fill=\"none\" stroke=\"#D3AF37\" stroke-width=\"2.5\" stroke-linejoin=\"round\" stroke-linecap=\"round\"\/>\n      ${xLabelParts.join('')}\n    <\/svg>`;\n  }\n\n  function oblicz() {\n    const r = calc();\n    if (!r) { document.getElementById('kz-results').style.display = 'none'; return; }\n    lastResult = r;\n    if (r.depleted) {\n      document.getElementById('kz-out-okres').textContent = fmtYearsMonths(r.months);\n      document.getElementById('kz-out-summary').innerHTML = `Przy wyp\u0142acie <strong>${fmtPLN(r.wyplata)}<\/strong>\/mies.${r.indeksuj ? ` (indeksowanej o ${r.indeksacja}% rocznie)` : ''} i oprocentowaniu <strong>${r.oproc}%<\/strong>${r.podatek ? ' (po uwzgl\u0119dnieniu podatku Belki)' : ''} kapita\u0142 wyczerpie si\u0119 po ${fmtYearsMonths(r.months)}.`;\n    } else {\n      document.getElementById('kz-out-okres').textContent = `ponad ${Math.floor(CAP_MONTHS \/ 12)} lat`;\n      document.getElementById('kz-out-summary').innerHTML = `Przy tych parametrach odsetki pokrywaj\u0105 wyp\u0142aty \u2014 kapita\u0142 praktycznie si\u0119 nie wyczerpuje w rozs\u0105dnym horyzoncie czasowym (symulacja ograniczona do ${Math.floor(CAP_MONTHS \/ 12)} lat).`;\n    }\n    document.getElementById('kz-out-suma').textContent = fmtPLN(r.totalWithdrawn);\n    document.getElementById('kz-out-ostatnia').textContent = fmtPLN(r.finalWithdrawal);\n    document.getElementById('kz-out-ostatnia-sub').textContent = r.indeksuj ? 'po uwzgl\u0119dnieniu indeksacji' : 'wyp\u0142ata pozostaje sta\u0142a';\n    const startYear = new Date().getFullYear();\n    document.getElementById('kz-out-rok').textContent = r.depleted ? String(startYear + Math.ceil(r.months \/ 12)) : `po ${startYear + Math.floor(CAP_MONTHS \/ 12)}`;\n    document.getElementById('kz-chart').innerHTML = buildChartSVG(r.yearly);\n    document.getElementById('kz-results').style.display = 'block';\n  }\n\n  \/\/ \u2500\u2500 E-mail \u2500\u2500\n  function emailjsReady() {\n    return typeof window.emailjs !== 'undefined' && EMAILJS_PUBLIC_KEY.indexOf('TWOJ_') !== 0;\n  }\n  function buildEmailHTML(r) {\n    const date = new Date().toLocaleDateString('pl-PL', { day: 'numeric', month: 'long', year: 'numeric' });\n    const row = (label, val, color) => `<tr><td bgcolor=\"#ffffff\" style=\"background-color:#ffffff;padding:7px 0;border-bottom:1px solid #EEEEEE;color:#6B7280;font-size:13px\">${label}<\/td><td bgcolor=\"#ffffff\" style=\"background-color:#ffffff;padding:7px 0;border-bottom:1px solid #EEEEEE;text-align:right;font-weight:700;font-size:13px;color:${color || '#0F152E'}\">${val}<\/td><\/tr>`;\n    const rows = row('Zgromadzony kapita\u0142', fmtPLN(r.kapital))\n      + row('Miesi\u0119czna wyp\u0142ata (start)', fmtPLN(r.wyplata))\n      + row('Oprocentowanie', `${r.oproc}%`)\n      + row('Indeksacja wyp\u0142aty', r.indeksuj ? `${r.indeksacja}% rocznie` : 'brak')\n      + row('Podatek Belki uwzgl\u0119dniony', r.podatek ? 'Tak' : 'Nie')\n      + row('Kapita\u0142 wystarczy na', r.depleted ? fmtYearsMonths(r.months) : `ponad ${Math.floor(CAP_MONTHS \/ 12)} lat`, '#D3AF37')\n      + row('\u0141\u0105czna suma wyp\u0142at', fmtPLN(r.totalWithdrawn))\n      + row('Ostatnia miesi\u0119czna wyp\u0142ata', fmtPLN(r.finalWithdrawal));\n    return `<div style=\"font-family:Arial,Helvetica,sans-serif;max-width:600px;margin:0 auto;background:#ffffff\">\n      <table role=\"presentation\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#0F152E;border-radius:10px 10px 0 0\">\n        <tr>\n          <td style=\"padding:20px 12px 20px 26px;width:56px\" valign=\"middle\"><img decoding=\"async\" src=\"${KZ_LOGO_URL}\" width=\"44\" alt=\"\" style=\"display:block;width:44px;height:auto\"><\/td>\n          <td style=\"padding:22px 26px 22px 0\" valign=\"middle\">\n            <div style=\"color:#9AA6C4;font-size:10px;letter-spacing:.09em;text-transform:uppercase;margin-bottom:4px\">Jacek Horoszko Investment Partner<\/div>\n            <div style=\"color:#ffffff;font-size:20px;font-weight:700\">Analiza: \u017bycie z kapita\u0142u<\/div>\n            <div style=\"color:#9AA6C4;font-size:11px;margin-top:4px\">Sporz\u0105dzono: ${date}<\/div>\n          <\/td>\n        <\/tr>\n      <\/table>\n      <div bgcolor=\"#ffffff\" style=\"background-color:#ffffff;border:1px solid #E5E7EB;border-top:none;border-radius:0 0 10px 10px;padding:22px 26px\">\n        <table bgcolor=\"#ffffff\" style=\"width:100%;border-collapse:collapse;background-color:#ffffff\">${rows}<\/table>\n        <div bgcolor=\"#ffffff\" style=\"background-color:#ffffff;margin-top:20px;font-size:10px;color:#9CA3AF;line-height:1.6\">Wyliczenie sporz\u0105dzone przy u\u017cyciu Kalkulatora \u017bycie z Kapita\u0142u Jacek Horoszko Investment Partner. Dane maj\u0105 charakter pogl\u0105dowy i nie stanowi\u0105 porady inwestycyjnej ani podatkowej.<\/div>\n        <table role=\"presentation\" bgcolor=\"#ffffff\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-top:16px;padding-top:14px;border-top:1px solid #E5E7EB;width:100%;background-color:#ffffff\">\n          <tr>\n            <td bgcolor=\"#ffffff\" style=\"background-color:#ffffff;width:56px\" valign=\"top\"><img decoding=\"async\" src=\"${KZ_PHOTO_URL}\" width=\"48\" alt=\"\" style=\"display:block;width:48px;height:auto;border-radius:8px\"><\/td>\n            <td bgcolor=\"#ffffff\" style=\"background-color:#ffffff\" valign=\"top\">\n              <div style=\"color:#0F152E;font-size:13px;font-weight:700\">Jacek Horoszko<\/div>\n              <div style=\"color:#9CA3AF;font-size:11px\">Investment Partner \u00b7 www.jacekhoroszko.pl<\/div>\n              <div style=\"color:#9CA3AF;font-size:11px\">694 526 704 \u00b7 jacek.horoszko@phinance.pl<\/div>\n            <\/td>\n          <\/tr>\n        <\/table>\n      <\/div>\n    <\/div>`;\n  }\n  function buildLeadEmailHTML(r, lead) {\n    const row = (label, val) => `<tr><td bgcolor=\"#ffffff\" style=\"background-color:#ffffff;padding:7px 0;border-bottom:1px solid #EEEEEE;color:#6B7280;font-size:13px\">${label}<\/td><td bgcolor=\"#ffffff\" style=\"background-color:#ffffff;padding:7px 0;border-bottom:1px solid #EEEEEE;text-align:right;font-weight:700;font-size:13px;color:#0F152E\">${val}<\/td><\/tr>`;\n    const rows = row('Imi\u0119', esc(lead.imie))\n      + row('E-mail', esc(lead.email))\n      + row('Telefon', esc(lead.telefon))\n      + row('Zgromadzony kapita\u0142', fmtPLN(r.kapital))\n      + row('Kapita\u0142 wystarczy na', r.depleted ? fmtYearsMonths(r.months) : `ponad ${Math.floor(CAP_MONTHS \/ 12)} lat`);\n    return `<div style=\"font-family:Arial,Helvetica,sans-serif;max-width:600px;margin:0 auto;background:#ffffff\">\n      <div style=\"background:#0F152E;padding:18px 24px;border-radius:10px 10px 0 0\">\n        <div style=\"color:#9AA6C4;font-size:10px;letter-spacing:.09em;text-transform:uppercase\">Kalkulator \u017bycie z Kapita\u0142u \u2014 jacekhoroszko.com<\/div>\n        <div style=\"color:#ffffff;font-size:18px;font-weight:700;margin-top:4px\">Nowe zg\u0142oszenie od klienta<\/div>\n      <\/div>\n      <div bgcolor=\"#ffffff\" style=\"background-color:#ffffff;border:1px solid #E5E7EB;border-top:none;border-radius:0 0 10px 10px;padding:20px 24px\">\n        <table bgcolor=\"#ffffff\" style=\"width:100%;border-collapse:collapse;background-color:#ffffff\">${rows}<\/table>\n      <\/div>\n    <\/div>`;\n  }\n  function openEmailForm() { document.getElementById('kz-email-panel').style.display = 'block'; }\n  function closeEmailForm() { document.getElementById('kz-email-panel').style.display = 'none'; }\n\n  function sendResultEmail() {\n    const imie = document.getElementById('kz-email-name').value.trim();\n    const telefon = document.getElementById('kz-email-phone').value.trim();\n    const email = document.getElementById('kz-email-input').value.trim();\n    const statusEl = document.getElementById('kz-email-status');\n    const btn = document.getElementById('kz-email-send-btn');\n    const emailRe = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n    const phoneRe = \/^[0-9+()\\s-]{6,20}$\/;\n    if (!imie) { statusEl.textContent = 'Podaj imi\u0119.'; statusEl.style.color = '#F3A3AC'; return; }\n    if (!phoneRe.test(telefon)) { statusEl.textContent = 'Podaj poprawny numer telefonu.'; statusEl.style.color = '#F3A3AC'; return; }\n    if (!emailRe.test(email)) { statusEl.textContent = 'Podaj poprawny adres e-mail.'; statusEl.style.color = '#F3A3AC'; return; }\n    if (!lastResult) { statusEl.textContent = 'Najpierw kliknij \"Oblicz wynik\".'; statusEl.style.color = '#F3A3AC'; return; }\n    if (!emailjsReady()) { statusEl.textContent = 'Wysy\u0142ka e-mail nie jest jeszcze skonfigurowana.'; statusEl.style.color = '#F3A3AC'; return; }\n    btn.disabled = true; btn.textContent = 'Wysy\u0142anie\u2026'; statusEl.textContent = '';\n    const clientSend = emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, {\n      to_email: email,\n      subject: `${imie}, oto Twoja analiza \u201e\u017bycie z kapita\u0142u\u201d \u2014 Jacek Horoszko Investment Partner`,\n      summary_html: buildEmailHTML(lastResult),\n    }, { publicKey: EMAILJS_PUBLIC_KEY });\n    const leadSend = emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, {\n      to_email: JHIP_LEAD_EMAIL,\n      subject: `Nowe zg\u0142oszenie z kalkulatora \u017bycie z kapita\u0142u \u2014 ${imie}`,\n      summary_html: buildLeadEmailHTML(lastResult, { imie, telefon, email }),\n    }, { publicKey: EMAILJS_PUBLIC_KEY });\n    Promise.all([clientSend, leadSend]).then(function () {\n      statusEl.textContent = '\u2713 Wys\u0142ano! Sprawd\u017a skrzynk\u0119 ' + esc(email) + '.';\n      statusEl.style.color = '#8FD19E'; btn.disabled = false; btn.textContent = 'Wy\u015blij';\n    }, function (err) {\n      statusEl.textContent = 'Nie uda\u0142o si\u0119 wys\u0142a\u0107. Spr\u00f3buj ponownie.';\n      statusEl.style.color = '#F3A3AC'; btn.disabled = false; btn.textContent = 'Wy\u015blij';\n      console.error('EmailJS error:', err);\n    });\n  }\n\n  window.JhipKapital = { oblicz, toggleIndeksacja, openEmailForm, closeEmailForm, sendResultEmail };\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6879ec8 elementor-widget elementor-widget-spacer\" data-id=\"6879ec8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\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>\u017bycie z Kapita\u0142u Sprawd\u017a, na ile lat starczy Ci zgromadzony kapita\u0142 przy regularnych wyp\u0142atach Parametry Zgromadzony kapita\u0142 PLN Miesi\u0119czna wyp\u0142ata PLN Oprocentowanie (%\/rok) Indeksacja wyp\u0142aty rocznie (%) Zwi\u0119kszaj corocznie wyp\u0142at\u0119 o powy\u017cszy procent (indeksacja) Uwzgl\u0119dnij podatek Belki (19%) Oblicz wynik \u2192 \ud83d\udcc6 Kapita\u0142 wystarczy na \u2014 \u0141\u0105czna suma wyp\u0142at \u2014 przez ca\u0142y okres wyp\u0142at Ostatnia [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-399","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages\/399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/comments?post=399"}],"version-history":[{"count":9,"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages\/399\/revisions"}],"predecessor-version":[{"id":483,"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages\/399\/revisions\/483"}],"wp:attachment":[{"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/media?parent=399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}