{"id":398,"date":"2026-07-19T22:03:42","date_gmt":"2026-07-19T20:03:42","guid":{"rendered":"https:\/\/jacekhoroszko.com\/?page_id=398"},"modified":"2026-07-19T23:15:26","modified_gmt":"2026-07-19T21:15:26","slug":"kalkulator-ike-ikze","status":"publish","type":"page","link":"http:\/\/jacekhoroszko.com\/index.php\/kalkulator-ike-ikze\/","title":{"rendered":"Kalkulator IKE\/IKZE"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"398\" class=\"elementor elementor-398\">\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-8b8fbe6 elementor-widget elementor-widget-html\" data-id=\"8b8fbe6\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============================================================\n     Kalkulator IKE \/ IKZE \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-ike-calculator\">\n  <div class=\"jhip-ik-header\">\n    <h2>Kalkulator IKE \/ IKZE<\/h2>\n    <p>Konto emerytalne \u2014 kapita\u0142, ulga podatkowa, podatek przy wyp\u0142acie<\/p>\n  <\/div>\n  <div class=\"jhip-ik-tabs\" id=\"jhip-ik-tabs\"><\/div>\n  <div class=\"jhip-ik-content\" id=\"jhip-ik-content\"><\/div>\n<\/div>\n\n<style>\n  #jhip-ike-calculator, #jhip-ike-calculator *, #jhip-ike-calculator *::before, #jhip-ike-calculator *::after {\n    box-sizing: border-box;\n  }\n  #jhip-ike-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    --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: 900px; 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-ike-calculator button { font-family: inherit; }\n\n  \/* \u2014 nag\u0142\u00f3wek \u2014 *\/\n  #jhip-ike-calculator .jhip-ik-header { margin-bottom: 16px; }\n  #jhip-ike-calculator .jhip-ik-header h2 { font-size: 21px; font-weight: 700; font-family: Georgia,serif; color: #fff; margin: 0 0 4px; }\n  #jhip-ike-calculator .jhip-ik-header p { font-size: 12px; color: var(--muted); margin: 0; }\n\n  \/* \u2014 zak\u0142adki + karta tre\u015bci \u2014 *\/\n  #jhip-ike-calculator .jhip-ik-tabs { display: flex; gap: 2px; flex-wrap: wrap; background: transparent; border: none; border-bottom: 1px solid var(--border); border-radius: 0; padding: 0 2px; }\n  #jhip-ike-calculator .jhip-ik-content { background: transparent; border: none; border-radius: 0; padding: 20px 2px 6px; }\n  #jhip-ike-calculator .kap-tab-btn { padding: 11px 16px; border: none; background: none; cursor: pointer; font-size: 12px; font-weight: 700; color: var(--muted); border-bottom: 2.5px solid transparent; }\n  #jhip-ike-calculator .kap-tab-btn.active { color: #fff; border-bottom-color: var(--gold); }\n\n  \/* \u2014 pola formularza (wsp\u00f3lne ze stylem aplikacji) \u2014 *\/\n  #jhip-ike-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-ike-calculator .su-section-label:first-of-type { margin-top: 0; }\n  #jhip-ike-calculator .su-field { margin-bottom: 9px; min-width: 0; }\n  #jhip-ike-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-ike-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-ike-calculator .su-text-input:focus { border-color: var(--gold); }\n  #jhip-ike-calculator .su-money-wrap { position: relative; }\n  #jhip-ike-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-ike-calculator .su-money-input:focus { border-color: var(--gold); }\n  #jhip-ike-calculator .su-money-suffix { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); font-size: 10px; color: var(--muted); pointer-events: none; }\n  #jhip-ike-calculator .kap-select { width: 100%; padding: 7px 9px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 12px; font-weight: 600; color: var(--text); background: var(--surface2); outline: none; font-family: inherit; cursor: pointer; }\n  #jhip-ike-calculator .kap-select:focus { border-color: var(--gold); }\n  #jhip-ike-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-ike-calculator .tool-btn:hover { opacity: 0.86; }\n  #jhip-ike-calculator .kap-actionbar { display: flex; gap: 8px; margin-bottom: 16px; flex-wrap: wrap; align-items: center; }\n  #jhip-ike-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\n  #jhip-ike-calculator .eme-form-card { background: var(--surface); border-radius: 12px; border: 1px solid var(--border-soft); padding: 18px 20px; margin-bottom: 14px; }\n  #jhip-ike-calculator .eme-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 16px; }\n  #jhip-ike-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-ike-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-ike-calculator .eme-result-cards { display: grid; grid-template-columns: repeat(auto-fit,minmax(210px,1fr)); gap: 12px; margin-bottom: 14px; }\n  #jhip-ike-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-ike-calculator .eme-result-label { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--muted); margin-bottom: 6px; }\n  #jhip-ike-calculator .eme-result-val { font-size: 20px; font-weight: 900; color: #fff; }\n  #jhip-ike-calculator .eme-result-sub { font-size: 11px; color: var(--muted); margin-top: 4px; }\n  #jhip-ike-calculator .eme-savings-box { background: var(--surface2); border-radius: 12px; padding: 16px 20px; color: #fff; display: flex; gap: 14px; flex-wrap: wrap; justify-content: space-between; align-items: center; }\n  #jhip-ike-calculator .eme-savings-chip { background: rgba(255,255,255,0.07); border-radius: 8px; padding: 10px 16px; border-left: 3px solid var(--gold); min-width: 190px; }\n  #jhip-ike-calculator .eme-savings-chip-label { font-size: 11px; color: rgba(255,255,255,0.65); margin-bottom: 3px; }\n  #jhip-ike-calculator .eme-savings-chip-val { font-size: 17px; font-weight: 800; }\n\n  \/* \u2014 specyficzne dla IKE\/IKZE \u2014 *\/\n  #jhip-ike-calculator .ik-wrap { max-width: 880px; margin: 0 auto; }\n  #jhip-ike-calculator .ik-type-toggle { display: flex; gap: 8px; margin-bottom: 14px; }\n  #jhip-ike-calculator .ik-type-btn { flex: 1; min-width: 0; padding: 13px 16px; border-radius: 12px; border: 2px solid var(--border); background: var(--surface); color: var(--text); cursor: pointer; text-align: center; transition: all 0.15s; }\n  #jhip-ike-calculator .ik-type-btn.active { border-color: var(--gold); background: rgba(211,175,55,0.16); }\n  #jhip-ike-calculator .ik-type-btn-title { font-weight: 700; font-size: 14px; }\n  #jhip-ike-calculator .ik-limit-note { font-size: 11px; color: var(--muted); margin-top: 4px; }\n  #jhip-ike-calculator .ik-limit-note strong { color: #fff; }\n  #jhip-ike-calculator .ik-eligible-banner { border-radius: 10px; padding: 10px 14px; font-size: 12px; line-height: 1.5; margin-bottom: 14px; }\n  #jhip-ike-calculator .ik-eligible-banner.ok { background: rgba(255,255,255,0.06); border: 1px solid rgba(255,255,255,0.18); color: var(--text); }\n  #jhip-ike-calculator .ik-eligible-banner.bad { background: rgba(161,25,39,0.22); border: 1px solid rgba(161,25,39,0.55); color: #fff; }\n  #jhip-ike-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-ike-calculator .ik-payout-hero-label { font-size: 13px; color: rgba(255,255,255,0.7); font-weight: 600; margin-bottom: 6px; }\n  #jhip-ike-calculator .ik-payout-hero-val { font-size: 40px; font-weight: 900; letter-spacing: -0.02em; line-height: 1.1; }\n  #jhip-ike-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-ike-calculator .ik-payout-hero-row strong { color: #fff; }\n\n  @media (max-width: 560px) {\n    #jhip-ike-calculator { padding: 16px; }\n    #jhip-ike-calculator .ik-type-toggle { flex-direction: column; }\n    #jhip-ike-calculator .eme-form-grid { grid-template-columns: 1fr; }\n    #jhip-ike-calculator .ik-payout-hero-val { font-size: 30px; }\n    #jhip-ike-calculator .eme-savings-box { flex-direction: column; align-items: stretch; }\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  \/\/ \u2500\u2500 Pomocnicze formatery \u2500\u2500\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 fmtR = v => `${Number(v || 0).toFixed(2).replace('.', ',')}%`;\n  const kapFV = (S, C, rPA, months) => {\n    if (months <= 0) return S;\n    const r = Math.pow(1 + rPA \/ 100, 1 \/ 12) - 1;\n    if (r < 1e-12) return S + C * months;\n    return S * Math.pow(1 + r, months) + C * (Math.pow(1 + r, months) - 1) \/ r;\n  };\n  function emeFormaLabel(s) {\n    if (s.forma === 'zlecenie') return 'Umowa zlecenia';\n    if (s.forma === 'jdg') {\n      if (s.formaOpodatkowania === 'ryczalt') return 'JDG \u2014 rycza\u0142t';\n      if (s.formaOpodatkowania === 'liniowy') return 'JDG \u2014 podatek liniowy';\n      return 'JDG \u2014 zasady og\u00f3lne';\n    }\n    return 'Umowa o prac\u0119';\n  }\n  \/\/ \u2500\u2500 Wysy\u0142ka wyniku na e-mail (EmailJS \u2014 patrz instrukcja konfiguracji) \u2500\u2500\n  \/\/ Uzupe\u0142nij po za\u0142o\u017ceniu konta na emailjs.com i pod\u0142\u0105czeniu skrzynki Gmail\/iCloud\n  \/\/ jako \"Email Service\" (Public Key, Service ID, Template ID z panelu EmailJS).\n  const EMAILJS_PUBLIC_KEY  = 'lKDuaTSIkMgu12jLj';\n  const EMAILJS_SERVICE_ID  = 'service_cs1bt29';\n  const EMAILJS_TEMPLATE_ID = 'template_06apygu';\n  const JHIP_LOGO_DATAURI  = 'https:\/\/jacekhoroszko.com\/wp-content\/uploads\/2026\/07\/logo-email.png';\n  const JHIP_PHOTO_DATAURI = 'https:\/\/jacekhoroszko.com\/wp-content\/uploads\/2026\/07\/photo-email.jpg';\n\n  \/\/ \u2500\u2500 Limity, stan i silnik oblicze\u0144 (IKE \/ IKZE) \u2500\u2500\n  const IK_LIMIT_IKE = 28260;\n  const IK_LIMIT_IKZE_STD = 11304;\n  const IK_LIMIT_IKZE_JDG = 16956;\n  const IK_PIT_THRESHOLD = 120000;\n  const IK_RYCZALT_RATES = [2, 3, 5.5, 8.5, 10, 12, 14, 15, 17];\n\n  const state = {\n    tab: 'config',\n    typ: 'ike', \/\/ 'ike' | 'ikze'\n    wiek: 35,\n    forma: 'uop',\n    formaOpodatkowania: 'ogolne',\n    ryczaltStawka: 8.5,\n    drugiProg: false,\n    wplataOkres: 'roczna', \/\/ 'roczna' | 'miesieczna'\n    wplataRoczna: 10000,\n    wplataMiesieczna: 500,\n    oprocentowanie: 6,\n    wiekWyplaty: 60,\n    sposobWyplaty: 'jednorazowo', \/\/ 'jednorazowo' | 'raty'\n    lataRat: 10,\n  };\n\n  function effectiveLimit(s) {\n    if (s.typ === 'ike') return IK_LIMIT_IKE;\n    return s.forma === 'jdg' ? IK_LIMIT_IKZE_JDG : IK_LIMIT_IKZE_STD;\n  }\n  function annualWplata(s) {\n    if (s.wplataOkres === 'miesieczna') return (Number(s.wplataMiesieczna) || 0) * 12;\n    return Number(s.wplataRoczna) || 0;\n  }\n  function clampWplataToLimit(s) {\n    const limit = effectiveLimit(s);\n    if (annualWplata(s) > limit) {\n      if (s.wplataOkres === 'miesieczna') s.wplataMiesieczna = limit \/ 12;\n      else s.wplataRoczna = limit;\n    }\n  }\n  function reliefRate(s) {\n    if (s.forma === 'jdg' && s.formaOpodatkowania === 'liniowy') return 19;\n    if (s.forma === 'jdg' && s.formaOpodatkowania === 'ryczalt') return Number(s.ryczaltStawka) || 0;\n    return s.drugiProg ? 32 : 12;\n  }\n  function annuityPMT(PV, rPA, months) {\n    if (months <= 0 || PV <= 0) return 0;\n    const r = Math.pow(1 + rPA \/ 100, 1 \/ 12) - 1;\n    if (r < 1e-12) return PV \/ months;\n    return PV * r \/ (1 - Math.pow(1 + r, -months));\n  }\n  function minWiekWyplaty(s) {\n    const minAge = s.typ === 'ike' ? 60 : 65;\n    return Math.max(minAge, Number(s.wiek) || 0);\n  }\n\n  function calc(s) {\n    const typ = s.typ === 'ikze' ? 'ikze' : 'ike';\n    const limit = effectiveLimit(s);\n    const annualContrib = Math.max(0, Math.min(limit, annualWplata(s)));\n    const monthlyContrib = annualContrib \/ 12;\n    const wiek = Math.max(0, Number(s.wiek) || 0);\n    const wiekWyplaty = Math.max(wiek, Number(s.wiekWyplaty) || 0);\n    const lata = Math.max(0, wiekWyplaty - wiek);\n    const months = Math.round(lata * 12);\n    const rate = Number(s.oprocentowanie) || 0;\n\n    const fv = months > 0 ? kapFV(0, monthlyContrib, rate, months) : 0;\n    const sumaWplat = annualContrib * lata;\n    const zysk = Math.max(0, fv - sumaWplat);\n    const podatekZaoszczedzony = zysk * 0.19;\n\n    const minAge = typ === 'ike' ? 60 : 65;\n    const eligible = wiekWyplaty >= minAge && lata >= 5;\n\n    let lumpTax, lumpNet;\n    if (typ === 'ike') {\n      lumpTax = eligible ? 0 : zysk * 0.19;\n      lumpNet = fv - lumpTax;\n    } else {\n      if (eligible) {\n        lumpTax = fv * 0.10;\n        lumpNet = fv * 0.90;\n      } else {\n        lumpTax = fv <= IK_PIT_THRESHOLD ? fv * 0.12 : IK_PIT_THRESHOLD * 0.12 + (fv - IK_PIT_THRESHOLD) * 0.32;\n        lumpNet = fv - lumpTax;\n      }\n    }\n\n    const lataRat = Math.max(0, Number(s.lataRat) || 0);\n    const ratyMonths = Math.round(lataRat * 12);\n    const pmtGross = ratyMonths > 0 ? annuityPMT(fv, rate, ratyMonths) : 0;\n    const netRatio = fv > 0 ? lumpNet \/ fv : 1;\n    const pmtNet = pmtGross * netRatio;\n    const totalNetRaty = pmtNet * ratyMonths;\n\n    const relRate = typ === 'ikze' ? reliefRate(s) : 0;\n    const reliefAnnual = typ === 'ikze' ? annualContrib * relRate \/ 100 : 0;\n    const reliefTotal = reliefAnnual * lata;\n\n    return {\n      typ, limit, annualContrib, monthlyContrib, wiek, wiekWyplaty, lata, months, rate,\n      fv, sumaWplat, zysk, podatekZaoszczedzony, minAge, eligible,\n      lumpTax, lumpNet, lataRat, ratyMonths, pmtGross, pmtNet, totalNetRaty,\n      reliefRate: relRate, reliefAnnual, reliefTotal,\n      forma: s.forma, formaOpodatkowania: s.formaOpodatkowania, formaLabel: emeFormaLabel(s),\n      sposobWyplaty: s.sposobWyplaty\n    };\n  }\n\n  \/\/ \u2500\u2500 Nawigacja i render \u2500\u2500\n  function renderTabs() {\n    document.getElementById('jhip-ik-tabs').innerHTML = `\n      <button class=\"kap-tab-btn ${state.tab === 'config' ? 'active' : ''}\" onclick=\"JhipIK.setTab('config')\">\u2699 Konfiguracja<\/button>\n      <button class=\"kap-tab-btn ${state.tab === 'results' ? 'active' : ''}\" onclick=\"JhipIK.setTab('results')\">\ud83d\udcc8 Wyniki<\/button>\n    `;\n  }\n  function renderContentOnly() {\n    document.getElementById('jhip-ik-content').innerHTML = state.tab === 'config' ? renderConfig() : renderResults();\n  }\n  function render() { renderTabs(); renderContentOnly(); }\n\n  function setTab(t) { state.tab = t; render(); }\n  function upd(key, val) {\n    state[key] = val;\n    if (key === 'typ' || key === 'forma') {\n      clampWplataToLimit(state);\n    }\n    if (key === 'typ' || key === 'wiek') {\n      const floor = minWiekWyplaty(state);\n      if (Number(state.wiekWyplaty) < floor) state.wiekWyplaty = floor;\n    }\n    renderContentOnly();\n  }\n  \/\/ Twardy limit pola wp\u0142aty \u2014 nie pozwala wprowadzi\u0107 warto\u015bci, kt\u00f3rej odpowiednik roczny przekracza limit ustawowy.\n  function updSkladka(val) {\n    const kwota = Math.max(0, Number(val) || 0);\n    if (state.wplataOkres === 'miesieczna') state.wplataMiesieczna = kwota;\n    else state.wplataRoczna = kwota;\n    clampWplataToLimit(state);\n    renderContentOnly();\n  }\n  \/\/ Prze\u0142\u0105cznik okresu wp\u0142aty (miesi\u0119czna \/ roczna) \u2014 ka\u017cda jednostka pami\u0119ta w\u0142asn\u0105, niezale\u017cnie wpisan\u0105 kwot\u0119.\n  function updWplataOkres(okres) {\n    state.wplataOkres = okres;\n    clampWplataToLimit(state);\n    renderContentOnly();\n  }\n  \/\/ Twardy dolny limit pola wieku wyp\u0142aty \u2014 nie pozwala wprowadzi\u0107 warto\u015bci ni\u017cszej ni\u017c minimalny wiek\n  \/\/ uprawniaj\u0105cy do preferencyjnego rozliczenia (60 lat IKE \/ 65 lat IKZE) ani ni\u017cszej ni\u017c wiek dzisiejszy.\n  function updWiekWyplaty(val) {\n    const floor = minWiekWyplaty(state);\n    state.wiekWyplaty = Math.max(floor, parseInt(val) || 0);\n    renderContentOnly();\n  }\n\n  function renderConfig() {\n    clampWplataToLimit(state);\n    const limit = effectiveLimit(state);\n    const isIkze = state.typ === 'ikze';\n    const showRyczalt = isIkze && state.forma === 'jdg' && state.formaOpodatkowania === 'ryczalt';\n    const showDrugiProg = isIkze && !(state.forma === 'jdg' && (state.formaOpodatkowania === 'liniowy' || state.formaOpodatkowania === 'ryczalt'));\n    return `<div class=\"ik-wrap\">\n      <div class=\"ik-type-toggle\">\n        <button class=\"ik-type-btn ${state.typ === 'ike' ? 'active' : ''}\" onclick=\"JhipIK.upd('typ','ike')\">\n          <div class=\"ik-type-btn-title\">IKE<\/div>\n        <\/button>\n        <button class=\"ik-type-btn ${state.typ === 'ikze' ? 'active' : ''}\" onclick=\"JhipIK.upd('typ','ikze')\">\n          <div class=\"ik-type-btn-title\">IKZE<\/div>\n        <\/button>\n      <\/div>\n\n      <div class=\"eme-form-card\">\n        <div class=\"eme-form-grid\">\n          <div class=\"su-field\">\n            <span class=\"su-field-label\">Wiek dzi\u015b (lata)<\/span>\n            <input class=\"su-text-input\" type=\"number\" min=\"0\" max=\"100\" value=\"${state.wiek}\" onchange=\"JhipIK.upd('wiek',Math.max(0,parseInt(this.value)||0))\">\n          <\/div>\n          <div class=\"su-field\">\n            <span class=\"su-field-label\">Wiek wyp\u0142aty (lata)<\/span>\n            <input class=\"su-text-input\" type=\"number\" min=\"${minWiekWyplaty(state)}\" max=\"100\" value=\"${state.wiekWyplaty}\" onchange=\"JhipIK.updWiekWyplaty(this.value)\">\n            <div class=\"ik-limit-note\">Minimalnie <strong>${minWiekWyplaty(state)} lat<\/strong> \u2014 warunek preferencyjnego rozliczenia ${state.typ === 'ike' ? 'IKE' : 'IKZE'}<\/div>\n          <\/div>\n        <\/div>\n        ${isIkze ? `\n        <div class=\"su-section-label\">Forma dochod\u00f3w (ulga podatkowa IKZE)<\/div>\n        <div class=\"eme-form-grid\">\n          <div class=\"su-field\">\n            <span class=\"su-field-label\">Forma dochod\u00f3w<\/span>\n            <select class=\"kap-select\" onchange=\"JhipIK.upd('forma',this.value)\">\n              <option value=\"uop\" ${state.forma === 'uop' ? 'selected' : ''}>Umowa o prac\u0119 (UoP)<\/option>\n              <option value=\"zlecenie\" ${state.forma === 'zlecenie' ? 'selected' : ''}>Umowa zlecenia<\/option>\n              <option value=\"jdg\" ${state.forma === 'jdg' ? 'selected' : ''}>Jednoosobowa dzia\u0142alno\u015b\u0107 (JDG)<\/option>\n            <\/select>\n          <\/div>\n          ${state.forma === 'jdg' ? `<div class=\"su-field\">\n            <span class=\"su-field-label\">Forma opodatkowania (JDG)<\/span>\n            <select class=\"kap-select\" onchange=\"JhipIK.upd('formaOpodatkowania',this.value)\">\n              <option value=\"ogolne\" ${state.formaOpodatkowania === 'ogolne' ? 'selected' : ''}>Zasady og\u00f3lne<\/option>\n              <option value=\"liniowy\" ${state.formaOpodatkowania === 'liniowy' ? 'selected' : ''}>Podatek liniowy<\/option>\n              <option value=\"ryczalt\" ${state.formaOpodatkowania === 'ryczalt' ? 'selected' : ''}>Rycza\u0142t<\/option>\n            <\/select>\n          <\/div>` : ''}\n          ${showRyczalt ? `<div class=\"su-field\">\n            <span class=\"su-field-label\">Stawka rycza\u0142tu (%)<\/span>\n            <select class=\"kap-select\" onchange=\"JhipIK.upd('ryczaltStawka',parseFloat(this.value))\">\n              ${IK_RYCZALT_RATES.map(rt => `<option value=\"${rt}\" ${Number(state.ryczaltStawka) === rt ? 'selected' : ''}>${String(rt).replace('.', ',')}%<\/option>`).join('')}\n            <\/select>\n          <\/div>` : ''}\n        <\/div>\n        ${showDrugiProg ? `<div class=\"eme-checkbox-row\">\n          <label><input type=\"checkbox\" ${state.drugiProg ? 'checked' : ''} onchange=\"JhipIK.upd('drugiProg',this.checked)\"> Klient p\u0142aci podatek w drugim progu (32%)<\/label>\n        <\/div>` : ''}\n        ` : ''}\n        <div class=\"su-section-label\">Wp\u0142ata<\/div>\n        <div class=\"eme-form-grid\">\n          <div class=\"su-field\">\n            <div style=\"display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px\">\n              <span class=\"su-field-label\" style=\"margin-bottom:0\">Wp\u0142ata (PLN)<\/span>\n              <div style=\"display:flex;gap:4px\">\n                <button type=\"button\" onclick=\"JhipIK.updWplataOkres('miesieczna')\" style=\"padding:3px 9px;border-radius:6px;border:1.5px solid ${state.wplataOkres === 'miesieczna' ? 'var(--gold)' : 'var(--border)'};background:${state.wplataOkres === 'miesieczna' ? 'rgba(211,175,55,0.16)' : 'transparent'};color:${state.wplataOkres === 'miesieczna' ? '#fff' : 'var(--muted)'};font-size:9px;font-weight:700;cursor:pointer\">Miesi\u0119cznie<\/button>\n                <button type=\"button\" onclick=\"JhipIK.updWplataOkres('roczna')\" style=\"padding:3px 9px;border-radius:6px;border:1.5px solid ${state.wplataOkres === 'roczna' ? 'var(--gold)' : 'var(--border)'};background:${state.wplataOkres === 'roczna' ? 'rgba(211,175,55,0.16)' : 'transparent'};color:${state.wplataOkres === 'roczna' ? '#fff' : 'var(--muted)'};font-size:9px;font-weight:700;cursor:pointer\">Rocznie<\/button>\n              <\/div>\n            <\/div>\n            <div class=\"su-money-wrap\"><input class=\"su-money-input\" type=\"number\" min=\"0\" max=\"${state.wplataOkres === 'miesieczna' ? (limit \/ 12).toFixed(2) : limit}\" value=\"${Math.round((Number(state.wplataOkres === 'miesieczna' ? state.wplataMiesieczna : state.wplataRoczna) || 0) * 100) \/ 100}\" onchange=\"JhipIK.updSkladka(this.value)\"><span class=\"su-money-suffix\">PLN<\/span><\/div>\n            <div class=\"ik-limit-note\">Maksymalnie <strong>${state.wplataOkres === 'miesieczna' ? fmtPLN(limit \/ 12) : fmtPLN(limit)}<\/strong>${state.wplataOkres === 'miesieczna' ? '\/mies.' : '\/rok'} dla ${state.typ === 'ike' ? 'IKE' : (state.forma === 'jdg' ? 'IKZE \u2014 JDG' : 'IKZE')} (limit roczny ${fmtPLN(limit)})<\/div>\n          <\/div>\n          <div class=\"su-field\">\n            <span class=\"su-field-label\">Oprocentowanie \/ stopa zwrotu (%\/rok)<\/span>\n            <input class=\"su-text-input\" type=\"number\" min=\"0\" max=\"30\" step=\"0.1\" value=\"${state.oprocentowanie}\" onchange=\"JhipIK.upd('oprocentowanie',Math.max(0,parseFloat(this.value)||0))\">\n          <\/div>\n        <\/div>\n        <div class=\"su-section-label\">Wyp\u0142ata<\/div>\n        <div class=\"eme-form-grid\">\n          <div class=\"su-field\">\n            <span class=\"su-field-label\">Spos\u00f3b wyp\u0142aty<\/span>\n            <select class=\"kap-select\" onchange=\"JhipIK.upd('sposobWyplaty',this.value)\">\n              <option value=\"jednorazowo\" ${state.sposobWyplaty === 'jednorazowo' ? 'selected' : ''}>Jednorazowo<\/option>\n              <option value=\"raty\" ${state.sposobWyplaty === 'raty' ? 'selected' : ''}>W ratach<\/option>\n            <\/select>\n          <\/div>\n          ${state.sposobWyplaty === 'raty' ? `<div class=\"su-field\">\n            <span class=\"su-field-label\">Liczba lat wyp\u0142aty rat<\/span>\n            <input class=\"su-text-input\" type=\"number\" min=\"1\" max=\"40\" value=\"${state.lataRat}\" onchange=\"JhipIK.upd('lataRat',Math.max(1,parseInt(this.value)||1))\">\n          <\/div>` : ''}\n        <\/div>\n      <\/div>\n      <div style=\"text-align:right\">\n        <button class=\"tool-btn\" onclick=\"JhipIK.setTab('results')\">Przejd\u017a do wynik\u00f3w \u2192<\/button>\n      <\/div>\n    <\/div>`;\n  }\n\n  function renderResults() {\n    const r = calc(state);\n    const isIke = r.typ === 'ike';\n    return `<div class=\"ik-wrap\">\n      <div class=\"kap-actionbar\">\n        <button class=\"kap-btn-genpdf\" onclick=\"JhipIK.openEmailForm()\">\u2709 Wy\u015blij na e-mail<\/button>\n      <\/div>\n      <div id=\"jhip-ik-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=\"jhip-ik-email-name\" type=\"text\" class=\"su-text-input\" placeholder=\"Imi\u0119\" style=\"max-width:160px\" onkeydown=\"if(event.key==='Enter'){JhipIK.sendResultEmail()}\">\n          <input id=\"jhip-ik-email-phone\" type=\"tel\" class=\"su-text-input\" placeholder=\"Telefon\" style=\"max-width:160px\" onkeydown=\"if(event.key==='Enter'){JhipIK.sendResultEmail()}\">\n          <input id=\"jhip-ik-email-input\" type=\"email\" class=\"su-text-input\" placeholder=\"twoj@email.pl\" style=\"max-width:220px\" onkeydown=\"if(event.key==='Enter'){JhipIK.sendResultEmail()}\">\n          <button id=\"jhip-ik-email-send-btn\" class=\"tool-btn\" onclick=\"JhipIK.sendResultEmail()\">Wy\u015blij<\/button>\n          <button class=\"tool-btn\" style=\"background:transparent;color:var(--muted);border:1px solid var(--border)\" onclick=\"JhipIK.closeEmailForm()\">Anuluj<\/button>\n        <\/div>\n        <div id=\"jhip-ik-email-status\" style=\"font-size:11px;margin-top:8px\"><\/div>\n      <\/div>\n      <div class=\"ik-eligible-banner ${r.eligible ? 'ok' : 'bad'}\">\n        ${r.eligible\n          ? `\u2713 Przy wyp\u0142acie w wieku ${r.wiekWyplaty} lat (po ${r.lata} latach wp\u0142at) spe\u0142nione s\u0105 warunki preferencyjnego rozliczenia ${isIke ? 'IKE' : 'IKZE'} (min. wiek ${r.minAge} lat, wp\u0142aty w min. 5 latach kalendarzowych).`\n          : `\u26a0 Wyp\u0142ata w wieku ${r.wiekWyplaty} lat nie spe\u0142nia warunk\u00f3w preferencyjnego rozliczenia ${isIke ? 'IKE' : 'IKZE'} (wymagany wiek min. ${r.minAge} lat oraz wp\u0142aty w min. 5 latach) \u2014 poni\u017cej rozliczenie jako \u201ezwrot\u201d.`}\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\">Kapita\u0142 na koncie (nominalnie)<\/div>\n          <div class=\"eme-result-val\">${fmtPLN(r.fv)}<\/div>\n          <div class=\"eme-result-sub\">wp\u0142aty: ${fmtPLN(r.sumaWplat)} \u00b7 zysk: ${fmtPLN(r.zysk)}<\/div>\n        <\/div>\n        <div class=\"eme-result-card\" style=\"border-top-color:var(--growth)\">\n          <div class=\"eme-result-label\">Zaoszcz\u0119dzony podatek od zysk\u00f3w (Belka)<\/div>\n          <div class=\"eme-result-val\">${fmtPLN(r.podatekZaoszczedzony)}<\/div>\n          <div class=\"eme-result-sub\">19% od zysku kapita\u0142owego \u2014 nie pobierane na ${isIke ? 'IKE' : 'IKZE'}<\/div>\n        <\/div>\n        ${!isIke ? `<div class=\"eme-result-card\" style=\"border-top-color:var(--gold)\">\n          <div class=\"eme-result-label\">Ulga podatkowa (\u0142\u0105cznie przez ${r.lata} lat)<\/div>\n          <div class=\"eme-result-val\">${fmtPLN(r.reliefTotal)}<\/div>\n          <div class=\"eme-result-sub\">${esc(r.formaLabel)} \u00b7 stawka ulgi ${fmtR(r.reliefRate)} \u00b7 rocznie ${fmtPLN(r.reliefAnnual)}<\/div>\n        <\/div>` : ''}\n      <\/div>\n\n      <div class=\"su-section-label\" style=\"margin-top:0\">Wyp\u0142ata jednorazowo<\/div>\n      <div class=\"ik-payout-hero\">\n        <div class=\"ik-payout-hero-label\">\ud83d\udcb0 \u015arodki do wyp\u0142aty (netto)<\/div>\n        <div class=\"ik-payout-hero-val\">${fmtPLN(r.lumpNet)}<\/div>\n        <div class=\"ik-payout-hero-row\">\n          <span>Podatek przy wyp\u0142acie: <strong>${fmtPLN(r.lumpTax)}<\/strong> (${r.eligible ? (isIke ? 'zwolnienie z podatku' : '10% od ca\u0142ej wyp\u0142aty') : 'rozliczenie jako zwrot \u2014 skala podatkowa'})<\/span>\n        <\/div>\n      <\/div>\n\n      ${state.sposobWyplaty === 'raty' ? `\n      <div class=\"su-section-label\">Wyp\u0142ata w ratach<\/div>\n      <div class=\"eme-savings-box\" style=\"margin-bottom:18px\">\n        <div style=\"font-size:12px;color:rgba(255,255,255,0.65)\">Rata miesi\u0119czna netto przez ${r.lataRat} lat (kapita\u0142 nadal pracuje przy ${fmtR(r.rate)}\/rok):<\/div>\n        <div style=\"display:flex;gap:10px;flex-wrap:wrap\">\n          <div class=\"eme-savings-chip\">\n            <div class=\"eme-savings-chip-label\">\ud83d\udcb5 Rata netto \/ mies.<\/div>\n            <div class=\"eme-savings-chip-val\">${fmtPLN(r.pmtNet)}<\/div>\n          <\/div>\n          <div class=\"eme-savings-chip\" style=\"border-left-color:var(--muted)\">\n            <div class=\"eme-savings-chip-label\">\u03a3 wyp\u0142acone netto \u0142\u0105cznie<\/div>\n            <div class=\"eme-savings-chip-val\">${fmtPLN(r.totalNetRaty)}<\/div>\n          <\/div>\n        <\/div>\n      <\/div>` : ''}\n    <\/div>`;\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\n  function buildEmailHTML(r) {\n    const date = new Date().toLocaleDateString('pl-PL', { day: 'numeric', month: 'long', year: 'numeric' });\n    const isIke = r.typ === 'ike';\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    let rows = row(`Wp\u0142ata roczna (limit ${fmtPLN(r.limit)})`, fmtPLN(r.annualContrib))\n      + row(`Suma wp\u0142at przez ${r.lata} lat`, fmtPLN(r.sumaWplat))\n      + row('Kapita\u0142 na koncie (nominalnie)', fmtPLN(r.fv), '#D3AF37')\n      + row('Zaoszcz\u0119dzony podatek od zysk\u00f3w (Belka, 19%)', fmtPLN(r.podatekZaoszczedzony));\n    if (!isIke) rows += row(`Ulga podatkowa \u0142\u0105cznie (stawka ${fmtR(r.reliefRate)})`, fmtPLN(r.reliefTotal), '#D3AF37');\n    rows += row('Podatek przy wyp\u0142acie jednorazowej', fmtPLN(r.lumpTax), '#A11927');\n    rows += row('Wyp\u0142ata jednorazowo netto', fmtPLN(r.lumpNet));\n    if (r.sposobWyplaty === 'raty') {\n      rows += row(`Rata netto \/ mies. przez ${r.lataRat} lat`, fmtPLN(r.pmtNet));\n      rows += row('\u03a3 wyp\u0142acone netto \u0142\u0105cznie (raty)', fmtPLN(r.totalNetRaty));\n    }\n    const banner = r.eligible\n      ? `Wyp\u0142ata w wieku ${r.wiekWyplaty} lat spe\u0142nia warunki preferencyjnego rozliczenia ${isIke ? 'IKE' : 'IKZE'} (min. wiek ${r.minAge} lat, wp\u0142aty w min. 5 latach kalendarzowych).`\n      : `Wyp\u0142ata w wieku ${r.wiekWyplaty} lat NIE spe\u0142nia warunk\u00f3w preferencyjnego rozliczenia ${isIke ? 'IKE' : 'IKZE'} (wymagany wiek min. ${r.minAge} lat oraz wp\u0142aty w min. 5 latach) \u2014 rozliczenie jako \u201ezwrot\u201d.`;\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=\"${JHIP_LOGO_DATAURI}\" 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 konta ${isIke ? 'IKE' : 'IKZE'}<\/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:${r.eligible ? '#EEF0F5' : '#FBEAEC'};margin-top:16px;padding:12px 14px;border-radius:8px;color:${r.eligible ? '#0F152E' : '#A11927'};font-size:12px;line-height:1.6\">${banner}<\/div>\n        <div bgcolor=\"#ffffff\" style=\"background-color:#ffffff;margin-top:20px;font-size:10px;color:#9CA3AF;line-height:1.6\">Analiza sporz\u0105dzona przy u\u017cyciu Kalkulatora IKE\/IKZE Jacek Horoszko Investment Partner. Limity wp\u0142at i zasady opodatkowania na podstawie aktualnych przepis\u00f3w. Dane maj\u0105 charakter pogl\u0105dowy i nie stanowi\u0105 porady inwestycyjnej, podatkowej ani oferty w rozumieniu przepis\u00f3w prawa.<\/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=\"${JHIP_PHOTO_DATAURI}\" 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\n  function buildLeadEmailHTML(r, lead) {\n    const isIke = r.typ === 'ike';\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('Wiek', `${r.wiek} lat`)\n      + row('Wp\u0142ata roczna', fmtPLN(r.annualContrib))\n      + row('Typ konta', isIke ? 'IKE' : 'IKZE');\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 IKE\/IKZE \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\n  function openEmailForm() {\n    const panel = document.getElementById('jhip-ik-email-panel');\n    if (panel) panel.style.display = 'block';\n  }\n  function closeEmailForm() {\n    const panel = document.getElementById('jhip-ik-email-panel');\n    if (panel) panel.style.display = 'none';\n  }\n\n  const JHIP_LEAD_EMAIL = 'jacek.horoszko@phinance.pl';\n\n  function sendResultEmail() {\n    const nameInput = document.getElementById('jhip-ik-email-name');\n    const phoneInput = document.getElementById('jhip-ik-email-phone');\n    const input = document.getElementById('jhip-ik-email-input');\n    const statusEl = document.getElementById('jhip-ik-email-status');\n    const btn = document.getElementById('jhip-ik-email-send-btn');\n    const imie = (nameInput.value || '').trim();\n    const telefon = (phoneInput.value || '').trim();\n    const email = (input.value || '').trim();\n    const emailRe = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/;\n    const phoneRe = \/^[0-9+()\\s-]{6,20}$\/;\n    if (!imie) {\n      statusEl.textContent = 'Podaj imi\u0119.';\n      statusEl.style.color = '#F3A3AC';\n      return;\n    }\n    if (!phoneRe.test(telefon)) {\n      statusEl.textContent = 'Podaj poprawny numer telefonu.';\n      statusEl.style.color = '#F3A3AC';\n      return;\n    }\n    if (!emailRe.test(email)) {\n      statusEl.textContent = 'Podaj poprawny adres e-mail.';\n      statusEl.style.color = '#F3A3AC';\n      return;\n    }\n    if (!emailjsReady()) {\n      statusEl.textContent = 'Wysy\u0142ka e-mail nie jest jeszcze skonfigurowana (uzupe\u0142nij klucze EmailJS w kodzie).';\n      statusEl.style.color = '#F3A3AC';\n      return;\n    }\n    const r = calc(state);\n    const isIke = r.typ === 'ike';\n    btn.disabled = true;\n    btn.textContent = 'Wysy\u0142anie\u2026';\n    statusEl.textContent = '';\n\n    const clientSend = emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, {\n      to_email: email,\n      subject: `${imie}, oto Twoja analiza ${isIke ? 'IKE' : 'IKZE'} \u2014 Jacek Horoszko Investment Partner`,\n      summary_html: buildEmailHTML(r),\n    }, { publicKey: EMAILJS_PUBLIC_KEY });\n\n    const leadSend = emailjs.send(EMAILJS_SERVICE_ID, EMAILJS_TEMPLATE_ID, {\n      to_email: JHIP_LEAD_EMAIL,\n      subject: `Nowe zg\u0142oszenie z kalkulatora ${isIke ? 'IKE' : 'IKZE'} \u2014 ${imie}`,\n      summary_html: buildLeadEmailHTML(r, { imie, telefon, email }),\n    }, { publicKey: EMAILJS_PUBLIC_KEY });\n\n    Promise.all([clientSend, leadSend]).then(function () {\n      statusEl.textContent = '\u2713 Wys\u0142ano! Sprawd\u017a skrzynk\u0119 ' + esc(email) + '.';\n      statusEl.style.color = '#8FD19E';\n      btn.disabled = false;\n      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';\n      btn.disabled = false;\n      btn.textContent = 'Wy\u015blij';\n      console.error('EmailJS error:', err);\n    });\n  }\n\n  \/\/ \u2500\u2500 Inicjalizacja \u2500\u2500\n  window.JhipIK = { setTab, upd, updSkladka, updWplataOkres, updWiekWyplaty, openEmailForm, closeEmailForm, sendResultEmail };\n\n  function init() {\n    if (!document.getElementById('jhip-ik-tabs')) return;\n    render();\n  }\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c1401e3 elementor-widget elementor-widget-spacer\" data-id=\"c1401e3\" 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>Kalkulator IKE \/ IKZE Konto emerytalne \u2014 kapita\u0142, ulga podatkowa, podatek przy wyp\u0142acie<\/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-398","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages\/398","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=398"}],"version-history":[{"count":12,"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages\/398\/revisions"}],"predecessor-version":[{"id":480,"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/pages\/398\/revisions\/480"}],"wp:attachment":[{"href":"http:\/\/jacekhoroszko.com\/index.php\/wp-json\/wp\/v2\/media?parent=398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}