{"id":2,"date":"2024-03-05T08:00:39","date_gmt":"2024-03-05T07:00:39","guid":{"rendered":"https:\/\/www.fincap.sk\/?page_id=2"},"modified":"2026-03-23T21:42:34","modified_gmt":"2026-03-23T20:42:34","slug":"homepage","status":"publish","type":"page","link":"https:\/\/www.fincap.sk\/","title":{"rendered":""},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2\" class=\"elementor elementor-2\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1bd6cbcc e-con-full e-flex e-con e-parent\" data-id=\"1bd6cbcc\" data-element_type=\"container\" data-settings=\"{&quot;content_width&quot;:&quot;full&quot;}\" data-core-v316-plus=\"true\">\n\t\t\t\t<div class=\"elementor-element elementor-element-110638e elementor-widget__width-initial elementor-widget elementor-widget-html\" data-id=\"110638e\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"fincap-widget\">\n  <style>\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700;800&family=DM+Serif+Display:ital@0;1&display=swap');\n\n    #fincap-widget{\n      --bg:#f4efe8;\n      --card:#fcfbf8;\n      --text:#3d2a1f;\n      --muted:#6a625b;\n      --line:#e8ddd0;\n      --coffee:#7a4b27;\n      --coffee-dark:#5f381b;\n      --coffee-soft:#f5ede4;\n      --coffee-soft-2:#f8f2eb;\n      --coffee-border:#e7d9ca;\n      --shadow:0 12px 32px rgba(73,49,30,.10);\n      --green:#2f8a4b;\n      --red:#c84b4b;\n      --deposit:#b8aea2;\n      font-family:\"Inter\",system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;\n      color:var(--text);\n      max-width:920px;\n      margin:0 auto;\n    }\n\n    #fincap-widget *{box-sizing:border-box}\n\n    #fincap-widget .fc-card{\n      background:var(--card);\n      border:1px solid rgba(122,75,39,.08);\n      border-radius:30px;\n      box-shadow:var(--shadow);\n      overflow:hidden;\n    }\n\n    #fincap-widget .fc-header{\n      text-align:center;\n      padding:14px 18px 10px;\n      background:transparent;\n    }\n\n    #fincap-widget .fc-title{\n      margin:0;\n      font-family:\"DM Serif Display\", Georgia, \"Times New Roman\", serif;\n      font-size:31px;\n      line-height:1.05;\n      font-weight:400;\n      color:#332219;\n      letter-spacing:-0.01em;\n    }\n\n    #fincap-widget .fc-subtitle{\n      margin:8px 0 0;\n      font-size:16px;\n      color:#5a5149;\n      font-weight:500;\n    }\n\n    #fincap-widget .fc-section{\n      padding:26px 32px 20px;\n    }\n\n    #fincap-widget .fc-controls{\n      display:grid;\n      grid-template-columns:1fr;\n      gap:12px;\n      margin-bottom:12px;\n    }\n\n    #fincap-widget .fc-field{\n      display:grid;\n      grid-template-columns:280px minmax(0, 1fr);\n      align-items:center;\n      column-gap:18px;\n      min-width:0;\n    }\n\n    #fincap-widget .fc-field label{\n      white-space:nowrap;\n      font-size:15px;\n      font-weight:500;\n      color:#45372d;\n      min-width:0;\n      text-align:left;\n    }\n\n    #fincap-widget input,\n    #fincap-widget select,\n    #fincap-widget button{\n      font:inherit;\n    }\n\n    #fincap-widget .fc-input,\n    #fincap-widget .fc-select{\n      width:100%;\n      min-width:0;\n      height:42px;\n      border:1px solid #ddd2c5;\n      border-radius:13px;\n      background:#fbf8f4;\n      color:#372d27;\n      padding:0 14px;\n      outline:none;\n      box-shadow:inset 0 1px 0 rgba(255,255,255,.65);\n    }\n\n    #fincap-widget .fc-input:focus,\n    #fincap-widget .fc-select:focus{\n      border-color:#c8af95;\n      box-shadow:0 0 0 3px rgba(122,75,39,.10);\n    }\n\n    #fincap-widget .fc-investments{\n      display:grid;\n      gap:10px;\n      margin-bottom:6px;\n    }\n\n    #fincap-widget .fc-investment-row{\n      display:grid;\n      grid-template-columns:1fr;\n      gap:8px;\n    }\n\n    #fincap-widget .fc-investment-inner{\n      display:grid;\n      grid-template-columns:1fr auto;\n      gap:10px;\n      align-items:center;\n    }\n\n    #fincap-widget .fc-add-row{\n      display:flex;\n      justify-content:flex-start;\n      padding-left:298px;\n    }\n\n    #fincap-widget .fc-add-btn{\n      display:inline-flex;\n      align-items:center;\n      gap:8px;\n      background:none;\n      border:none;\n      color:#8f857c;\n      font-weight:700;\n      cursor:pointer;\n      padding:0;\n      font-size:16px;\n    }\n\n    #fincap-widget .fc-add-btn .plus{\n      font-size:26px;\n      line-height:1;\n      margin-top:-2px;\n    }\n\n    #fincap-widget .fc-remove-btn{\n      height:42px;\n      padding:0 12px;\n      border-radius:12px;\n      border:1px solid #e2d6ca;\n      background:#fff7f1;\n      color:#7b4b27;\n      cursor:pointer;\n      font-weight:700;\n    }\n\n    #fincap-widget .fc-options{\n      display:flex;\n      flex-wrap:wrap;\n      gap:14px;\n      align-items:center;\n      margin:20px 0 18px;\n      padding:10px 0;\n      padding-left:298px;\n    }\n\n    #fincap-widget .fc-check{\n      display:flex;\n      align-items:center;\n      gap:8px;\n      font-size:14px;\n      color:#4e443b;\n      font-weight:600;\n    }\n\n    #fincap-widget .fc-check input{\n      width:16px;\n      height:16px;\n      accent-color:#7a4b27;\n    }\n\n    #fincap-widget .fc-chart-wrap{\n      margin-top:14px;\n      width:100%;\n      overflow:hidden;\n      border-radius:18px;\n    }\n\n    #fincap-widget canvas{\n      width:100%;\n      height:320px;\n      display:block;\n    }\n\n    #fincap-widget .fc-results-title{\n      margin:18px 0 12px;\n      font-size:18px;\n      font-weight:800;\n      color:#432d1e;\n      text-align:center;\n    }\n\n    #fincap-widget .fc-result-cards{\n      display:grid;\n      grid-template-columns:repeat(auto-fit,minmax(230px,1fr));\n      gap:14px;\n      margin-top:0;\n    }\n\n    #fincap-widget .fc-result-card{\n      border-radius:16px;\n      border:1px solid var(--coffee-border);\n      padding:16px 16px 14px;\n      text-align:center;\n      background:var(--coffee-soft-2);\n    }\n\n    #fincap-widget .fc-result-card h4{\n      margin:0 0 8px;\n      font-size:16px;\n      font-weight:800;\n      line-height:1.25;\n    }\n\n    #fincap-widget .fc-value-today{\n      font-size:24px;\n      font-weight:800;\n      line-height:1.1;\n      margin-bottom:8px;\n      color:#3c2a1e;\n    }\n\n    #fincap-widget .fc-profit{\n      font-size:15px;\n      font-weight:800;\n      margin-bottom:8px;\n    }\n\n    #fincap-widget .fc-profit.positive,\n    #fincap-widget .fc-pa.positive{\n      color:var(--green);\n    }\n\n    #fincap-widget .fc-profit.negative,\n    #fincap-widget .fc-pa.negative{\n      color:var(--red);\n    }\n\n    #fincap-widget .fc-pa{\n      font-size:15px;\n      font-weight:800;\n      margin-bottom:8px;\n    }\n\n    #fincap-widget .fc-contrib{\n      font-size:14px;\n      line-height:1.45;\n      margin-bottom:6px;\n      color:#5c5148;\n    }\n\n    #fincap-widget .fc-fee{\n      font-size:14px;\n      line-height:1.45;\n      margin-top:2px;\n    }\n\n    #fincap-widget .fc-fee strong,\n    #fincap-widget .fc-contrib strong{\n      font-weight:700;\n      color:#574d45;\n    }\n\n    #fincap-widget .fc-fee .fee-negative{\n      color:var(--red);\n      font-weight:800;\n    }\n\n    #fincap-widget .fc-note{\n      margin-top:14px;\n      display:flex;\n      gap:8px;\n      font-size:14px;\n      color:#5d554d;\n      line-height:1.45;\n    }\n\n    #fincap-widget .fc-divider{\n      background:#f8f5f0;\n      border-top:1px solid var(--line);\n      border-bottom:1px solid var(--line);\n      padding:26px 32px 20px;\n    }\n\n    #fincap-widget .fc-dd-title{\n      text-align:center;\n      margin:0 0 18px;\n      font-size:18px;\n      font-weight:800;\n      color:#432d1e;\n    }\n\n    #fincap-widget .fc-dd-grid{\n      display:grid;\n      grid-template-columns:repeat(auto-fit,minmax(210px,1fr));\n      gap:12px;\n      text-align:center;\n    }\n\n    #fincap-widget .fc-dd-item{\n      background:var(--coffee-soft-2);\n      border:1px solid var(--coffee-border);\n      border-radius:16px;\n      padding:16px 14px;\n    }\n\n    #fincap-widget .fc-dd-item h5{\n      margin:0 0 10px;\n      font-size:16px;\n      font-weight:800;\n    }\n\n    #fincap-widget .fc-pill{\n      display:inline-block;\n      min-width:80px;\n      padding:8px 16px;\n      border-radius:999px;\n      color:#fff;\n      font-weight:800;\n      font-size:17px;\n      margin-bottom:0;\n      background:#b28a68;\n    }\n\n    #fincap-widget .fc-mid{\n      text-align:center;\n      padding:20px 28px 10px;\n      border-top:1px solid #e8ddd1;\n    }\n\n    #fincap-widget .fc-mid strong{\n      display:block;\n      font-size:18px;\n      margin-bottom:8px;\n      color:#4b2f1d;\n    }\n\n    #fincap-widget .fc-mid p{\n      margin:0;\n      font-size:15px;\n      color:#5d554d;\n      line-height:1.5;\n    }\n\n    #fincap-widget .fc-sim{\n      margin:18px 32px 20px;\n      padding:22px;\n      border-radius:18px;\n      border:1px solid #ead8ba;\n      background:linear-gradient(180deg,#f7ecd9 0%,#f4e6cf 100%);\n      box-shadow:0 10px 18px rgba(133,97,43,.08);\n    }\n\n    #fincap-widget .fc-sim h3{\n      margin:0 0 10px;\n      text-align:center;\n      font-size:18px;\n      font-weight:800;\n      color:#4a2e1b;\n    }\n\n    #fincap-widget .fc-sim p{\n      margin:0 0 16px;\n      font-size:15px;\n      line-height:1.5;\n      color:#564c43;\n    }\n\n    #fincap-widget .fc-sim-row{\n      display:grid;\n      grid-template-columns:1.5fr .85fr;\n      gap:14px;\n      align-items:center;\n    }\n\n    #fincap-widget .fc-sim-btn{\n      height:46px;\n      border:none;\n      border-radius:12px;\n      background:linear-gradient(180deg,#8a5a31 0%,#724720 100%);\n      color:#fff;\n      font-weight:800;\n      cursor:pointer;\n      box-shadow:0 8px 14px rgba(97,58,25,.18);\n    }\n\n    #fincap-widget .fc-tags{\n      margin-top:16px;\n      display:flex;\n      gap:10px;\n      flex-wrap:wrap;\n      justify-content:center;\n    }\n\n    #fincap-widget .fc-tag{\n      padding:8px 14px;\n      border-radius:999px;\n      background:rgba(255,255,255,.55);\n      border:1px solid rgba(140,112,76,.12);\n      color:#47392c;\n      font-size:14px;\n      font-weight:600;\n    }\n\n    #fincap-widget .fc-footer{\n      text-align:center;\n      padding:4px 28px 28px;\n      color:#4f443b;\n      font-size:15px;\n    }\n\n    @media (max-width:760px){\n      #fincap-widget .fc-sim-row{\n        grid-template-columns:1fr;\n      }\n\n      #fincap-widget .fc-investment-inner{\n        grid-template-columns:1fr;\n      }\n\n      #fincap-widget .fc-field{\n        display:flex;\n        flex-direction:column;\n        align-items:flex-start;\n        gap:8px;\n      }\n\n      #fincap-widget .fc-field label{\n        min-width:0;\n      }\n\n      #fincap-widget .fc-add-row,\n      #fincap-widget .fc-options{\n        padding-left:0;\n      }\n\n      #fincap-widget .fc-section,\n      #fincap-widget .fc-divider{\n        padding-left:18px;\n        padding-right:18px;\n      }\n\n      #fincap-widget .fc-sim{\n        margin-left:18px;\n        margin-right:18px;\n      }\n\n      #fincap-widget .fc-title{\n        font-size:28px;\n      }\n\n      #fincap-widget .fc-subtitle{\n        font-size:15px;\n      }\n\n      #fincap-widget canvas{\n        height:290px;\n      }\n    }\n  <\/style>\n\n  <div class=\"fc-header\">\n    <h2 class=\"fc-title\">FinCap \u2013 finan\u010dn\u00e9 kapu\u010d\u00edno<\/h2>\n    <div class=\"fc-subtitle\">Ak\u00fd v\u00fdnos dosiahli invest\u00edcie, ktor\u00e9 si zvol\u00ed\u0161?<\/div>\n  <\/div>\n\n  <div class=\"fc-card\">\n    <div class=\"fc-section\">\n      <div class=\"fc-controls\">\n        <div class=\"fc-field\">\n          <label for=\"fc-amount\">Vstupn\u00e1 invest\u00edcia:<\/label>\n          <input id=\"fc-amount\" class=\"fc-input\" type=\"text\" value=\"10 000 \u20ac\">\n        <\/div>\n\n        <div class=\"fc-field\">\n          <label for=\"fc-start-year\">Za\u010diatok investovania:<\/label>\n          <select id=\"fc-start-year\" class=\"fc-select\"><\/select>\n        <\/div>\n\n        <div class=\"fc-field\">\n          <label for=\"fc-monthly\">Pravideln\u00e1 mesa\u010dn\u00e1 invest\u00edcia:<\/label>\n          <input id=\"fc-monthly\" class=\"fc-input\" type=\"text\" value=\"100 \u20ac\">\n        <\/div>\n      <\/div>\n\n      <div class=\"fc-investments\" id=\"fc-investments\"><\/div>\n\n      <div class=\"fc-options\">\n        <label class=\"fc-check\">\n          <input type=\"checkbox\" id=\"fc-inflation-toggle\">\n          <span>V\u00fdnos o\u010disten\u00fd o infl\u00e1ciu<\/span>\n        <\/label>\n      <\/div>\n\n      <div class=\"fc-chart-wrap\">\n        <canvas id=\"fc-chart\" width=\"860\" height=\"320\"><\/canvas>\n      <\/div>\n\n      <div class=\"fc-results-title\">Tvoja invest\u00edcia by dosiahla dnes hodnotu:<\/div>\n      <div class=\"fc-result-cards\" id=\"fc-results\"><\/div>\n\n      <div class=\"fc-note\">\n        <div>\u24d8<\/div>\n        <div>Graf nie je investi\u010dn\u00e9 odpor\u00fa\u010danie, ide o ilustr\u00e1ciu v\u00fdkonnosti na z\u00e1klade modelov\u00fdch historick\u00fdch d\u00e1t.<\/div>\n      <\/div>\n    <\/div>\n\n    <div class=\"fc-divider\">\n      <h3 class=\"fc-dd-title\">Najv\u00e4\u010d\u0161ie prepady za zvolen\u00e9 obdobie<\/h3>\n      <div class=\"fc-dd-grid\" id=\"fc-drawdowns\"><\/div>\n\n      <div class=\"fc-mid\">\n        <strong>Minul\u00e1 v\u00fdkonnos\u0165 nie je z\u00e1rukou bud\u00facich v\u00fdnosov.<\/strong>\n        <p>No hist\u00f3ria n\u00e1m d\u00e1va dobr\u00fa predstavu o tom, \u010do je mo\u017en\u00e9 o\u010dak\u00e1va\u0165 \u2013 aj \u010do vydr\u017ea\u0165.<\/p>\n      <\/div>\n    <\/div>\n\n    <div class=\"fc-sim\">\n      <h3>\ud83d\uddbc\ufe0f Simul\u00e1cia mojej invest\u00edcie<\/h3>\n      <p>Vyber invest\u00edciu a zisti, ako by sa zhodnotila pri jednorazovej invest\u00edcii alebo pravidelnom investovan\u00ed (DCA).<\/p>\n\n      <div class=\"fc-sim-row\">\n        <select id=\"fc-sim-asset\" class=\"fc-select\"><\/select>\n        <button id=\"fc-run-sim\" class=\"fc-sim-btn\" type=\"button\">Spusti\u0165 simul\u00e1ciu \u2192<\/button>\n      <\/div>\n\n      <div class=\"fc-tags\">\n        <span class=\"fc-tag\">\u2713 Zoh\u013eadnenie poplatkov<\/span>\n        <span class=\"fc-tag\">\u2713 DCA aj jednorazovo<\/span>\n        <span class=\"fc-tag\">\u2713 Okam\u017eit\u00fd graf a v\u00fdsledky<\/span>\n      <\/div>\n    <\/div>\n\n    <div class=\"fc-footer\">\u2615 Finan\u010dn\u00e9 rozhodnutia s nadh\u013eadom. Bez em\u00f3ci\u00ed. Na z\u00e1klade d\u00e1t.<\/div>\n  <\/div>\n\n  <script>\n    (function(){\n      const assets = {\n        sp500: {\n          name: \"iShares ETF S&P 500\",\n          color: \"#6cb889\",\n          fee: 0.0015,\n          points: {\n            2014:100, 2015:103, 2016:112, 2017:125, 2018:120, 2019:145,\n            2020:138, 2021:182, 2022:150, 2023:172, 2024:195, 2025:215\n          }\n        },\n        tatra: {\n          name: \"Tatra Banka Fond\",\n          color: \"#9ca2a8\",\n          fee: 0.012,\n          points: {\n            2014:100, 2015:102, 2016:106, 2017:110, 2018:109, 2019:116,\n            2020:108, 2021:121, 2022:118, 2023:126, 2024:136, 2025:148\n          }\n        },\n        bitcoin: {\n          name: \"Bitcoin\",\n          color: \"#d39a53\",\n          fee: 0.004,\n          points: {\n            2014:100, 2015:120, 2016:185, 2017:290, 2018:175, 2019:240,\n            2020:210, 2021:430, 2022:200, 2023:285, 2024:470, 2025:505\n          }\n        },\n        msciworld: {\n          name: \"MSCI World ETF\",\n          color: \"#7e9bc2\",\n          fee: 0.002,\n          points: {\n            2014:100, 2015:101, 2016:108, 2017:121, 2018:116, 2019:136,\n            2020:130, 2021:164, 2022:140, 2023:156, 2024:176, 2025:192\n          }\n        },\n        slsp: {\n          name: \"SLSP Fond\",\n          color: \"#a98573\",\n          fee: 0.011,\n          points: {\n            2014:100, 2015:101, 2016:105, 2017:111, 2018:110, 2019:117,\n            2020:111, 2021:124, 2022:119, 2023:128, 2024:138, 2025:150\n          }\n        }\n      };\n\n      const inflationRates = {\n        2014:0.001, 2015:0.001, 2016:0.003, 2017:0.013, 2018:0.025, 2019:0.028,\n        2020:0.019, 2021:0.032, 2022:0.126, 2023:0.109, 2024:0.038, 2025:0.030\n      };\n\n      const amountInput = document.getElementById(\"fc-amount\");\n      const monthlyInput = document.getElementById(\"fc-monthly\");\n      const startYearSelect = document.getElementById(\"fc-start-year\");\n      const simAsset = document.getElementById(\"fc-sim-asset\");\n      const investmentsWrap = document.getElementById(\"fc-investments\");\n      const resultsWrap = document.getElementById(\"fc-results\");\n      const drawdownsWrap = document.getElementById(\"fc-drawdowns\");\n      const inflationToggle = document.getElementById(\"fc-inflation-toggle\");\n      const canvas = document.getElementById(\"fc-chart\");\n      const ctx = canvas.getContext(\"2d\");\n      const runSimBtn = document.getElementById(\"fc-run-sim\");\n\n      const years = [];\n      for(let y=2014; y<=2025; y++) years.push(y);\n\n      const investmentSelects = [];\n\n      function fillSelect(select, includePlaceholder=false){\n        select.innerHTML = \"\";\n        if(includePlaceholder){\n          const opt = document.createElement(\"option\");\n          opt.value = \"\";\n          opt.textContent = \"Vyber investi\u010dn\u00fd n\u00e1stroj...\";\n          select.appendChild(opt);\n        }\n        Object.entries(assets).forEach(([key, asset])=>{\n          const opt = document.createElement(\"option\");\n          opt.value = key;\n          opt.textContent = asset.name;\n          select.appendChild(opt);\n        });\n      }\n\n      years.slice(1).forEach(y=>{\n        const opt = document.createElement(\"option\");\n        opt.value = y;\n        opt.textContent = \"od \" + y;\n        startYearSelect.appendChild(opt);\n      });\n\n      fillSelect(simAsset, true);\n\n      startYearSelect.value = \"2015\";\n      simAsset.value = \"\";\n\n      function formatEUR(value){\n        return new Intl.NumberFormat(\"sk-SK\", {\n          style:\"currency\",\n          currency:\"EUR\",\n          maximumFractionDigits:0\n        }).format(Math.abs(value));\n      }\n\n      function formatPlainEUR(value){\n        return new Intl.NumberFormat(\"sk-SK\", {\n          style:\"currency\",\n          currency:\"EUR\",\n          maximumFractionDigits:0\n        }).format(value);\n      }\n\n      function formatProfitEUR(value){\n        const sign = value >= 0 ? \"+\" : \"\u2212\";\n        return sign + \" \" + formatEUR(value);\n      }\n\n      function formatSignedPct(value){\n        const sign = value >= 0 ? \"+\" : \"\u2212\";\n        return sign + \" \" + Math.abs(value).toFixed(2).replace(\".\", \",\") + \" % p.a.\";\n      }\n\n      function formatDrawdownPct(value){\n        const sign = value >= 0 ? \"+\" : \"\u2212\";\n        return sign + \" \" + Math.abs(value).toFixed(0).replace(\".\", \",\") + \" %\";\n      }\n\n      function parseAmount(value){\n        const cleaned = String(value).replace(\/[^\\d,.-]\/g,\"\").replace(\",\",\".\");\n        const num = parseFloat(cleaned);\n        return isNaN(num) ? 0 : num;\n      }\n\n      function formatMoneyInput(input){\n        const num = parseAmount(input.value);\n        input.value = num > 0 ? new Intl.NumberFormat(\"sk-SK\").format(Math.round(num)) + \" \u20ac\" : \"\";\n      }\n\n      amountInput.addEventListener(\"blur\", ()=>{\n        if(amountInput.value.trim() !== \"\") formatMoneyInput(amountInput);\n        updateAll();\n      });\n\n      monthlyInput.addEventListener(\"blur\", ()=>{\n        if(monthlyInput.value.trim() !== \"\") formatMoneyInput(monthlyInput);\n        updateAll();\n      });\n\n      amountInput.addEventListener(\"input\", updateAll);\n      monthlyInput.addEventListener(\"input\", updateAll);\n      startYearSelect.addEventListener(\"change\", updateAll);\n      inflationToggle.addEventListener(\"change\", updateAll);\n\n      function easeInOut(t){\n        return (1 - Math.cos(Math.PI * t)) \/ 2;\n      }\n\n      function buildMonthlySeries(pointMap){\n        const arr = [];\n        for(let i = 0; i < years.length - 1; i++){\n          const y1 = years[i];\n          const y2 = years[i + 1];\n          const v1 = pointMap[y1];\n          const v2 = pointMap[y2];\n          const months = 12;\n          const prevYear = years[Math.max(0, i - 1)];\n          const nextYear = years[Math.min(years.length - 1, i + 2)];\n          const driftBefore = v1 - pointMap[prevYear];\n          const driftAfter = pointMap[nextYear] - v2;\n\n          for(let m = 0; m < months; m++){\n            const t = m \/ months;\n            const base = v1 + (v2 - v1) * easeInOut(t);\n            const micro1 = Math.sin((i * 12 + m) \/ 1.7) * 0.028;\n            const micro2 = Math.cos((i * 12 + m) \/ 2.9) * 0.018;\n            const trendShape = Math.sin(t * Math.PI) * ((driftAfter - driftBefore) \/ Math.max(v1, 1)) * 0.055;\n            const shaped = base * (1 + micro1 + micro2 + trendShape);\n            arr.push(shaped);\n          }\n        }\n        arr.push(pointMap[2025]);\n        return arr;\n      }\n\n      const monthlySeries = {};\n      Object.keys(assets).forEach(key=>{\n        monthlySeries[key] = buildMonthlySeries(assets[key].points);\n      });\n\n      function buildMonthlyInflationIndex(){\n        const arr = [];\n        let cumulative = 1;\n        for(let i = 0; i < years.length - 1; i++){\n          const year = years[i];\n          const annual = inflationRates[year] || 0.02;\n          const monthly = Math.pow(1 + annual, 1 \/ 12);\n          for(let m = 0; m < 12; m++){\n            cumulative *= monthly;\n            arr.push(cumulative);\n          }\n        }\n        const annual = inflationRates[2025] || 0.02;\n        const monthly = Math.pow(1 + annual, 1 \/ 12);\n        cumulative *= monthly;\n        arr.push(cumulative);\n        return arr;\n      }\n\n      const inflationIndex = buildMonthlyInflationIndex();\n\n      function getStartIndex(){\n        const startYear = parseInt(startYearSelect.value, 10);\n        return (startYear - 2014) * 12;\n      }\n\n      function getSelectedAssetKeys(){\n        const keys = [];\n        investmentSelects.forEach(sel=>{\n          if(sel.value && assets[sel.value] && !keys.includes(sel.value)){\n            keys.push(sel.value);\n          }\n        });\n        return keys;\n      }\n\n      function createInvestmentRow(defaultValue, removable){\n        const row = document.createElement(\"div\");\n        row.className = \"fc-investment-row\";\n\n        const inner = document.createElement(\"div\");\n        inner.className = \"fc-investment-inner\";\n\n        const field = document.createElement(\"div\");\n        field.className = \"fc-field\";\n\n        const label = document.createElement(\"label\");\n        label.textContent = \"Typ invest\u00edcie:\";\n\n        const select = document.createElement(\"select\");\n        select.className = \"fc-select\";\n        fillSelect(select);\n        select.value = defaultValue;\n\n        field.appendChild(label);\n        field.appendChild(select);\n        inner.appendChild(field);\n\n        if(removable){\n          const removeBtn = document.createElement(\"button\");\n          removeBtn.type = \"button\";\n          removeBtn.className = \"fc-remove-btn\";\n          removeBtn.textContent = \"Odstr\u00e1ni\u0165\";\n          inner.appendChild(removeBtn);\n\n          removeBtn.addEventListener(\"click\", ()=>{\n            const idx = investmentSelects.indexOf(select);\n            if(idx > -1) investmentSelects.splice(idx,1);\n            row.remove();\n            renderAddButton();\n            updateAll();\n          });\n        } else {\n          const spacer = document.createElement(\"div\");\n          spacer.style.display = \"none\";\n          inner.appendChild(spacer);\n        }\n\n        row.appendChild(inner);\n        investmentsWrap.appendChild(row);\n        investmentSelects.push(select);\n\n        select.addEventListener(\"change\", updateAll);\n      }\n\n      function renderAddButton(){\n        const old = document.getElementById(\"fc-add-row\");\n        if(old) old.remove();\n\n        const addRow = document.createElement(\"div\");\n        addRow.className = \"fc-add-row\";\n        addRow.id = \"fc-add-row\";\n\n        const btn = document.createElement(\"button\");\n        btn.className = \"fc-add-btn\";\n        btn.type = \"button\";\n        btn.innerHTML = '<span class=\"plus\">+<\/span><span>Prida\u0165 \u010fal\u0161iu<\/span>';\n\n        btn.addEventListener(\"click\", ()=>{\n          if(investmentSelects.length < 5){\n            const defaultOrder = [\"bitcoin\", \"tatra\", \"msciworld\", \"slsp\"];\n            const nextValue = defaultOrder[Math.max(0, investmentSelects.length - 1)] || \"bitcoin\";\n            createInvestmentRow(nextValue, true);\n            renderAddButton();\n            updateAll();\n          }\n        });\n\n        addRow.appendChild(btn);\n        investmentsWrap.appendChild(addRow);\n      }\n\n      function getInflationFactor(startIndex, currentIndex){\n        const startInfl = inflationIndex[startIndex] || 1;\n        const curInfl = inflationIndex[currentIndex] || 1;\n        return curInfl \/ startInfl;\n      }\n\n      function calculateInvestment(assetKey, initialAmount, monthlyAmount){\n        const asset = assets[assetKey];\n        const data = monthlySeries[assetKey];\n        const startIndex = getStartIndex();\n        const startVal = data[startIndex];\n        const endVal = data[data.length - 1];\n        const monthsHeld = data.length - 1 - startIndex;\n        const yearsHeld = monthsHeld \/ 12;\n\n        let gross = initialAmount * (endVal \/ startVal);\n        let totalContributed = initialAmount;\n\n        for(let i = startIndex + 1; i < data.length; i++){\n          gross += monthlyAmount * (endVal \/ data[i]);\n          totalContributed += monthlyAmount;\n        }\n\n        const feeApprox = gross * asset.fee * Math.max(1, yearsHeld * 0.9);\n        let finalValue = Math.max(0, gross - feeApprox);\n\n        if(inflationToggle.checked){\n          finalValue = finalValue \/ getInflationFactor(startIndex, data.length - 1);\n        }\n\n        const profit = finalValue - totalContributed;\n        const annualized = yearsHeld > 0 && totalContributed > 0\n          ? ((Math.pow(finalValue \/ totalContributed, 1 \/ yearsHeld) - 1) * 100)\n          : 0;\n\n        return {\n          finalValue,\n          fee: feeApprox,\n          totalContributed,\n          profit,\n          annualized\n        };\n      }\n\n      function calculateContributionLine(initialAmount, monthlyAmount){\n        const startIndex = getStartIndex();\n        const length = monthlySeries[getSelectedAssetKeys()[0] || \"sp500\"].slice(startIndex).length;\n        const values = [];\n        let total = initialAmount;\n\n        for(let i = 0; i < length; i++){\n          if(i === 0){\n            total = initialAmount;\n          } else {\n            total += monthlyAmount;\n          }\n\n          let val = total;\n          if(inflationToggle.checked){\n            val = val \/ getInflationFactor(startIndex, startIndex + i);\n          }\n          values.push(val);\n        }\n        return values;\n      }\n\n      function calculateDrawdown(assetKey){\n        const startIndex = getStartIndex();\n        const raw = monthlySeries[assetKey].slice(startIndex);\n\n        const data = raw.map((v, i)=>{\n          const absoluteIndex = startIndex + i;\n          let value = v;\n          if(inflationToggle.checked){\n            value = value \/ getInflationFactor(startIndex, absoluteIndex);\n          }\n          return value;\n        });\n\n        let peak = data[0];\n        let worst = 0;\n\n        data.forEach((v)=>{\n          if(v > peak){\n            peak = v;\n          }\n          const dd = (v \/ peak) - 1;\n          if(dd < worst){\n            worst = dd;\n          }\n        });\n\n        return {\n          pct: worst * 100\n        };\n      }\n\n      function renderResults(){\n        const initialAmount = parseAmount(amountInput.value) || 10000;\n        const monthlyAmount = parseAmount(monthlyInput.value) || 100;\n        const selected = getSelectedAssetKeys();\n        resultsWrap.innerHTML = \"\";\n\n        selected.forEach((key)=>{\n          const res = calculateInvestment(key, initialAmount, monthlyAmount);\n          const signClass = res.profit >= 0 ? \"positive\" : \"negative\";\n\n          const card = document.createElement(\"div\");\n          card.className = \"fc-result-card\";\n          card.innerHTML = `\n            <h4>${assets[key].name}<\/h4>\n            <div class=\"fc-value-today\">${formatPlainEUR(res.finalValue)}<\/div>\n            <div class=\"fc-profit ${signClass}\">${formatProfitEUR(res.profit)}<\/div>\n            <div class=\"fc-pa ${signClass}\">${formatSignedPct(res.annualized)}<\/div>\n            <div class=\"fc-contrib\"><strong>V\u00fd\u0161ka vkladov:<\/strong> ${formatPlainEUR(res.totalContributed)}<\/div>\n            <div class=\"fc-fee\">\n              <strong>V\u00fd\u0161ka poplatkov:<\/strong>\n              <span class=\"fee-negative\"> \u2212${formatEUR(res.fee)}<\/span>\n            <\/div>\n          `;\n          resultsWrap.appendChild(card);\n        });\n      }\n\n      function renderDrawdowns(){\n        const selected = getSelectedAssetKeys();\n        drawdownsWrap.innerHTML = \"\";\n\n        selected.forEach((key)=>{\n          const dd = calculateDrawdown(key);\n\n          const item = document.createElement(\"div\");\n          item.className = \"fc-dd-item\";\n          item.innerHTML = `\n            <h5>${assets[key].name}<\/h5>\n            <div class=\"fc-pill\">${formatDrawdownPct(dd.pct)}<\/div>\n          `;\n          drawdownsWrap.appendChild(item);\n        });\n      }\n\n      function niceStep(maxValue){\n        if(maxValue <= 10000) return 10000;\n        if(maxValue <= 20000) return 10000;\n        if(maxValue <= 50000) return 10000;\n        if(maxValue <= 100000) return 20000;\n        if(maxValue <= 200000) return 50000;\n        return 100000;\n      }\n\n      function drawElegantLine(points, tension = 0.14){\n        if(points.length < 2) return;\n        ctx.beginPath();\n        ctx.moveTo(points[0].x, points[0].y);\n\n        for(let i = 0; i < points.length - 1; i++){\n          const p0 = points[i === 0 ? i : i - 1];\n          const p1 = points[i];\n          const p2 = points[i + 1];\n          const p3 = points[i + 2 < points.length ? i + 2 : i + 1];\n\n          const cp1x = p1.x + (p2.x - p0.x) * tension;\n          const cp1y = p1.y + (p2.y - p0.y) * tension;\n          const cp2x = p2.x - (p3.x - p1.x) * tension;\n          const cp2y = p2.y - (p3.y - p1.y) * tension;\n\n          ctx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, p2.x, p2.y);\n        }\n        ctx.stroke();\n      }\n\n      function drawSimpleLine(points){\n        if(points.length < 2) return;\n        ctx.beginPath();\n        ctx.moveTo(points[0].x, points[0].y);\n        for(let i = 1; i < points.length; i++){\n          ctx.lineTo(points[i].x, points[i].y);\n        }\n        ctx.stroke();\n      }\n\n      function drawChart(){\n        const dpr = window.devicePixelRatio || 1;\n        const rect = canvas.getBoundingClientRect();\n        const width = Math.round(rect.width || 860);\n        const height = 320;\n\n        canvas.width = width * dpr;\n        canvas.height = height * dpr;\n        ctx.setTransform(dpr,0,0,dpr,0,0);\n        ctx.clearRect(0,0,width,height);\n\n        const pad = {top:18,right:24,bottom:36,left:82};\n        const chartW = width - pad.left - pad.right;\n        const chartH = height - pad.top - pad.bottom;\n\n        const selected = getSelectedAssetKeys();\n        const initialAmount = parseAmount(amountInput.value) || 10000;\n        const monthlyAmount = parseAmount(monthlyInput.value) || 100;\n        const startIndex = getStartIndex();\n\n        const transformed = selected.map(key=>{\n          const series = monthlySeries[key].slice(startIndex);\n          const startVal = series[0];\n          const monthsHeld = series.length - 1;\n          const yearsHeld = monthsHeld \/ 12;\n\n          const values = series.map((v, i)=>{\n            let gross = initialAmount * (v \/ startVal);\n\n            for(let j = 1; j <= i; j++){\n              gross += monthlyAmount * (v \/ series[j]);\n            }\n\n            const feeRatio = assets[key].fee * Math.max(1, yearsHeld * 0.9) * (((v \/ startVal) * 0.15) + 0.85);\n            let value = Math.max(0, gross - gross * feeRatio);\n\n            if(inflationToggle.checked){\n              value = value \/ getInflationFactor(startIndex, startIndex + i);\n            }\n\n            return value;\n          });\n\n          return { key, values };\n        });\n\n        if(!transformed.length) return;\n\n        const contributionValues = calculateContributionLine(initialAmount, monthlyAmount);\n\n        const allVals = transformed.flatMap(s=>s.values).concat(contributionValues);\n        let minVal = 0;\n        let maxVal = Math.max(...allVals);\n\n        const step = niceStep(maxVal);\n        maxVal = Math.ceil(maxVal \/ step) * step;\n        if(maxVal < 10000) maxVal = 10000;\n\n        function x(i, len){\n          return pad.left + (i \/ (len - 1)) * chartW;\n        }\n\n        function y(v){\n          return pad.top + chartH - ((v - minVal) \/ (maxVal - minVal)) * chartH;\n        }\n\n        ctx.strokeStyle = \"#eadfd4\";\n        ctx.lineWidth = 1;\n        ctx.setLineDash([3,5]);\n\n        const yTicks = [];\n        for(let v = step; v <= maxVal; v += step){\n          yTicks.push(v);\n        }\n\n        yTicks.forEach(v=>{\n          const yy = y(v);\n          ctx.beginPath();\n          ctx.moveTo(pad.left, yy);\n          ctx.lineTo(width - pad.right, yy);\n          ctx.stroke();\n        });\n\n        ctx.setLineDash([]);\n\n        ctx.strokeStyle = \"#c8beb4\";\n        ctx.lineWidth = 1.2;\n        ctx.beginPath();\n        ctx.moveTo(pad.left, pad.top + chartH);\n        ctx.lineTo(width - pad.right, pad.top + chartH);\n        ctx.stroke();\n\n        ctx.fillStyle = \"#6b625a\";\n        ctx.font = \"13px Inter, sans-serif\";\n        ctx.textAlign = \"right\";\n        ctx.textBaseline = \"middle\";\n\n        yTicks.forEach(v=>{\n          const yy = y(v);\n          const label = new Intl.NumberFormat(\"sk-SK\", {maximumFractionDigits:0}).format(v) + \" \u20ac\";\n          ctx.fillText(label, pad.left - 10, yy);\n        });\n\n        ctx.textAlign = \"center\";\n        ctx.textBaseline = \"top\";\n        const startYear = parseInt(startYearSelect.value, 10);\n        const len = transformed[0].values.length;\n\n        for(let yr = startYear; yr <= 2025; yr++){\n          const idx = Math.min(len - 1, (yr - startYear) * 12);\n          let xx = x(idx, len);\n          if(yr === 2025) xx = Math.min(xx - 6, width - pad.right - 6);\n          ctx.fillText(String(yr), xx, height - 24);\n        }\n\n        const depositPoints = contributionValues.map((v, i)=>({\n          x: x(i, contributionValues.length),\n          y: y(v)\n        }));\n\n        ctx.strokeStyle = getComputedStyle(document.documentElement).getPropertyValue('--deposit') || '#b8aea2';\n        ctx.lineWidth = 1.2;\n        ctx.setLineDash([4,4]);\n        drawSimpleLine(depositPoints);\n        ctx.setLineDash([]);\n\n        transformed.forEach((seriesObj)=>{\n          const color = assets[seriesObj.key].color;\n          const points = seriesObj.values.map((v, i)=>({\n            x: x(i, seriesObj.values.length),\n            y: y(v)\n          }));\n\n          const grad = ctx.createLinearGradient(0, pad.top, 0, pad.top + chartH);\n          const rgb = color.startsWith('#')\n            ? {\n                r: parseInt(color.slice(1,3),16),\n                g: parseInt(color.slice(3,5),16),\n                b: parseInt(color.slice(5,7),16)\n              }\n            : {r:108,g:184,b:137};\n\n          ctx.beginPath();\n          ctx.moveTo(points[0].x, pad.top + chartH);\n          points.forEach((p,i)=>{\n            if(i===0) ctx.lineTo(p.x,p.y);\n            else ctx.lineTo(p.x,p.y);\n          });\n          ctx.lineTo(points[points.length - 1].x, pad.top + chartH);\n          ctx.closePath();\n          grad.addColorStop(0, `rgba(${rgb.r},${rgb.g},${rgb.b},0.18)`);\n          grad.addColorStop(1, `rgba(${rgb.r},${rgb.g},${rgb.b},0.02)`);\n          ctx.fillStyle = grad;\n          ctx.fill();\n\n          ctx.strokeStyle = color;\n          ctx.lineWidth = 3.2;\n          ctx.lineCap = \"round\";\n          ctx.lineJoin = \"round\";\n          drawElegantLine(points, 0.14);\n\n          const last = points[points.length - 1];\n          ctx.fillStyle = color;\n          ctx.beginPath();\n          ctx.arc(last.x, last.y, 3.5, 0, Math.PI * 2);\n          ctx.fill();\n        });\n      }\n\n      function updateAll(){\n        renderResults();\n        renderDrawdowns();\n        drawChart();\n      }\n\n      runSimBtn.addEventListener(\"click\", ()=>{\n        const val = simAsset.value;\n        if(!val) return;\n\n        if(!investmentSelects.some(s=>s.value === val)){\n          if(investmentSelects.length < 5){\n            createInvestmentRow(val, investmentSelects.length > 0);\n            renderAddButton();\n          } else {\n            investmentSelects[investmentSelects.length - 1].value = val;\n          }\n          updateAll();\n        }\n\n        document.getElementById(\"fincap-widget\").scrollIntoView({behavior:\"smooth\", block:\"start\"});\n      });\n\n      window.addEventListener(\"resize\", drawChart);\n\n      createInvestmentRow(\"sp500\", false);\n      renderAddButton();\n      formatMoneyInput(amountInput);\n      formatMoneyInput(monthlyInput);\n      updateAll();\n    })();\n  <\/script>\n<\/div>\t\t<\/div>\n\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>FinCap \u2013 finan\u010dn\u00e9 kapu\u010d\u00edno Ak\u00fd v\u00fdnos dosiahli invest\u00edcie, ktor\u00e9 si zvol\u00ed\u0161? Vstupn\u00e1 invest\u00edcia: Za\u010diatok investovania: Pravideln\u00e1 mesa\u010dn\u00e1 invest\u00edcia: V\u00fdnos o\u010disten\u00fd o infl\u00e1ciu Tvoja invest\u00edcia by dosiahla dnes hodnotu: \u24d8 Graf nie je investi\u010dn\u00e9 odpor\u00fa\u010danie, ide o ilustr\u00e1ciu v\u00fdkonnosti na z\u00e1klade modelov\u00fdch historick\u00fdch d\u00e1t. Najv\u00e4\u010d\u0161ie prepady za zvolen\u00e9 obdobie Minul\u00e1 v\u00fdkonnos\u0165 nie je z\u00e1rukou bud\u00facich v\u00fdnosov. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-2","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.fincap.sk\/index.php?rest_route=\/wp\/v2\/pages\/2","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fincap.sk\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.fincap.sk\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.fincap.sk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fincap.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2"}],"version-history":[{"count":141,"href":"https:\/\/www.fincap.sk\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions"}],"predecessor-version":[{"id":168,"href":"https:\/\/www.fincap.sk\/index.php?rest_route=\/wp\/v2\/pages\/2\/revisions\/168"}],"wp:attachment":[{"href":"https:\/\/www.fincap.sk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}