{"id":1010291,"date":"2026-05-11T18:09:20","date_gmt":"2026-05-11T16:09:20","guid":{"rendered":"https:\/\/ekosphere.me\/plan-b-calculator\/"},"modified":"2026-06-10T19:50:16","modified_gmt":"2026-06-10T17:50:16","slug":"plan-b-calculator","status":"publish","type":"page","link":"https:\/\/ekosphere.me\/en\/plan-b-calculator\/","title":{"rendered":"Plan B calculator"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"1010291\" class=\"elementor elementor-1010291 elementor-1008729\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b5cca8c e-flex e-con-boxed e-con e-parent\" data-id=\"b5cca8c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-54cac42 elementor-widget elementor-widget-html\" data-id=\"54cac42\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"eko-roi-calculator\" id=\"eko20-plan-b-renditerechner\">\r\n  <style>\r\n    #eko20-plan-b-renditerechner{--ek-primary:#00dcff;--ek-secondary:#004f4d;--ek-ink:#0f172a;--ek-muted:#64748b;--ek-soft:#f8fafc;width:100%;margin:0 auto;padding:clamp(22px,4vw,48px);background:#fff;color:var(--ek-ink);font-family:system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif;box-shadow:0 10px 28px rgba(15,23,42,.06)}\r\n    #eko20-plan-b-renditerechner *{box-sizing:border-box;border-radius:0!important}\r\n    #eko20-plan-b-renditerechner h2,#eko20-plan-b-renditerechner h3,#eko20-plan-b-renditerechner h4,#eko20-plan-b-renditerechner p{margin-top:0}\r\n    #eko20-plan-b-renditerechner h2,#eko20-plan-b-renditerechner h3,#eko20-plan-b-renditerechner h4,#eko20-plan-b-renditerechner label,#eko20-plan-b-renditerechner summary,#eko20-plan-b-renditerechner button{text-align:left}\r\n    #eko20-plan-b-renditerechner .eko-roi-eyebrow{display:inline-flex;margin-bottom:12px;padding:8px 12px;background:rgba(0,220,255,.12);color:var(--ek-secondary);font-weight:800;font-size:14px;letter-spacing:.02em}\r\n    #eko20-plan-b-renditerechner h2{font-size:clamp(28px,4vw,44px);line-height:1.08;margin-bottom:14px;letter-spacing:-.03em;color:var(--ek-secondary)}\r\n    #eko20-plan-b-renditerechner .eko-roi-intro{font-size:clamp(17px,2vw,20px);line-height:1.6;color:#334155;margin-bottom:26px;max-width:1180px}\r\n    #eko20-plan-b-renditerechner .eko-section{padding:clamp(18px,3vw,28px);margin-bottom:22px;background:var(--ek-soft);border:0}\r\n    #eko20-plan-b-renditerechner .eko-section h3{font-size:clamp(22px,2.6vw,28px);color:var(--ek-secondary);margin-bottom:14px}\r\n    #eko20-plan-b-renditerechner .eko-help-details{margin:0 0 18px;background:#fff;border:0;box-shadow:inset 6px 0 0 var(--ek-primary),0 6px 18px rgba(15,23,42,.04);overflow:hidden}\r\n    #eko20-plan-b-renditerechner .eko-help-details summary{cursor:pointer;list-style:none;padding:14px 16px;font-weight:800;color:var(--ek-secondary);display:flex;justify-content:space-between;gap:12px}\r\n    #eko20-plan-b-renditerechner .eko-help-details summary::-webkit-details-marker{display:none}\r\n    #eko20-plan-b-renditerechner .eko-help-details summary:after{content:\"+\";display:inline-flex;width:24px;height:24px;align-items:center;justify-content:center;background:rgba(0,220,255,.14);font-weight:900;flex:0 0 auto}\r\n    #eko20-plan-b-renditerechner .eko-help-details[open] summary:after{content:\"-\"}\r\n    #eko20-plan-b-renditerechner .eko-help-details div{padding:0 16px 16px;color:#475569;font-size:14px;line-height:1.6}\r\n    #eko20-plan-b-renditerechner .eko-field-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}\r\n    #eko20-plan-b-renditerechner .eko-field,#eko20-plan-b-renditerechner .eko-range-field{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}\r\n    #eko20-plan-b-renditerechner .eko-field label,#eko20-plan-b-renditerechner .eko-range-field label,#eko20-plan-b-renditerechner .eko-radio-title{font-size:14px;font-weight:800;color:#1e293b}\r\n    #eko20-plan-b-renditerechner .eko-field small,#eko20-plan-b-renditerechner .eko-range-field small,#eko20-plan-b-renditerechner .eko-radio small{color:var(--ek-muted);font-size:13px;line-height:1.4}\r\n    #eko20-plan-b-renditerechner .eko-field input,#eko20-plan-b-renditerechner .eko-field select{width:100%;min-height:46px;padding:10px 12px;border:0;background:#fff;color:var(--ek-ink);font:inherit;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}\r\n    #eko20-plan-b-renditerechner .eko-field input[readonly]{background:#eef2f7;color:#334155;cursor:not-allowed}\r\n    #eko20-plan-b-renditerechner .eko-field input:focus,#eko20-plan-b-renditerechner .eko-field select:focus,#eko20-plan-b-renditerechner .eko-range-field input:focus{outline:3px solid rgba(0,220,255,.32)}\r\n    #eko20-plan-b-renditerechner .eko-scenario-switch,#eko20-plan-b-renditerechner .eko-radio-group,#eko20-plan-b-renditerechner .eko-model-switch{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:0 0 18px}\r\n    #eko20-plan-b-renditerechner .eko-scenario-switch button,#eko20-plan-b-renditerechner .eko-model-switch button,#eko20-plan-b-renditerechner .eko-btn{border:0;background:#fff;color:var(--ek-secondary);padding:12px 14px;font:inherit;font-weight:900;letter-spacing:.04em;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(0,79,77,.18)}\r\n    #eko20-plan-b-renditerechner .eko-scenario-switch button[aria-pressed=\"true\"],#eko20-plan-b-renditerechner .eko-model-switch button[aria-pressed=\"true\"]{background:var(--ek-secondary);color:#fff;box-shadow:none}\r\n    #eko20-plan-b-renditerechner .eko-radio{display:block;background:#fff;padding:14px;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}\r\n    #eko20-plan-b-renditerechner .eko-radio input{margin-right:8px;accent-color:var(--ek-secondary)}\r\n    #eko20-plan-b-renditerechner .eko-radio strong{color:var(--ek-secondary);font-weight:900}\r\n    #eko20-plan-b-renditerechner .eko-range-line{display:grid;grid-template-columns:1fr 110px;gap:12px;align-items:center}\r\n    #eko20-plan-b-renditerechner .eko-range-field input[type=\"range\"]{width:100%;accent-color:var(--ek-secondary)}\r\n    #eko20-plan-b-renditerechner .eko-range-value{min-height:38px;display:inline-flex;align-items:center;justify-content:center;background:#fff;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08);font-weight:900;color:var(--ek-secondary)}\r\n    #eko20-plan-b-renditerechner .eko-platform-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin:10px 0 14px}\r\n    #eko20-plan-b-renditerechner .eko-platform-check{display:block;background:#fff;padding:14px;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08);font-size:14px;line-height:1.45}\r\n    #eko20-plan-b-renditerechner .eko-platform-check input{margin-right:8px;accent-color:var(--ek-secondary)}\r\n    #eko20-plan-b-renditerechner .eko-platform-check strong{color:var(--ek-secondary);font-weight:900}\r\n    #eko20-plan-b-renditerechner .eko-platform-logo{display:flex;align-items:center;justify-content:center;height:44px;margin:0 0 10px}\r\n    #eko20-plan-b-renditerechner .eko-platform-logo img{display:block;max-width:150px;max-height:38px;width:auto;height:auto;object-fit:contain;margin:0 auto}\r\n    #eko20-plan-b-renditerechner .eko-platform-summary{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0 0 12px}\r\n    #eko20-plan-b-renditerechner .eko-platform-summary div{background:#fff;padding:12px;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}\r\n    #eko20-plan-b-renditerechner .eko-platform-summary span{display:block;color:var(--ek-muted);font-size:13px;margin-bottom:6px}\r\n    #eko20-plan-b-renditerechner .eko-platform-summary strong{display:block;color:var(--ek-secondary);font-weight:900}\r\n    #eko20-plan-b-renditerechner [data-scenario=\"worst\"],#eko20-plan-b-renditerechner [data-longrent-scenario=\"worst\"],#eko20-plan-b-renditerechner [data-household-scenario=\"worst\"],#eko20-plan-b-renditerechner [data-value-scenario=\"worst\"]{border-left:5px solid #f97316!important}\r\n    #eko20-plan-b-renditerechner [data-scenario=\"average\"],#eko20-plan-b-renditerechner [data-longrent-scenario=\"average\"],#eko20-plan-b-renditerechner [data-household-scenario=\"average\"],#eko20-plan-b-renditerechner [data-value-scenario=\"average\"]{border-left:5px solid #2563eb!important}\r\n    #eko20-plan-b-renditerechner [data-scenario=\"best\"],#eko20-plan-b-renditerechner [data-longrent-scenario=\"best\"],#eko20-plan-b-renditerechner [data-household-scenario=\"best\"],#eko20-plan-b-renditerechner [data-value-scenario=\"best\"]{border-left:5px solid #16a34a!important}\r\n    #eko20-plan-b-renditerechner [data-scenario=\"worst\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-longrent-scenario=\"worst\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-household-scenario=\"worst\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-value-scenario=\"worst\"][aria-pressed=\"true\"]{background:#f97316!important;color:#fff!important;box-shadow:none!important}\r\n    #eko20-plan-b-renditerechner [data-scenario=\"average\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-longrent-scenario=\"average\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-household-scenario=\"average\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-value-scenario=\"average\"][aria-pressed=\"true\"]{background:#2563eb!important;color:#fff!important;box-shadow:none!important}\r\n    #eko20-plan-b-renditerechner [data-scenario=\"best\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-longrent-scenario=\"best\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-household-scenario=\"best\"][aria-pressed=\"true\"],#eko20-plan-b-renditerechner [data-value-scenario=\"best\"][aria-pressed=\"true\"]{background:#16a34a!important;color:#fff!important;box-shadow:none!important}\r\n    #eko20-plan-b-renditerechner .eko-results .eko-kpi strong,#eko20-plan-b-renditerechner .eko-results .eko-result-list strong{color:#0f172a!important}\r\n    #eko20-plan-b-renditerechner .eko-results .eko-result-list strong.eko-result-worst{color:#f97316!important}\r\n    #eko20-plan-b-renditerechner .eko-results .eko-result-list strong.eko-result-average{color:#2563eb!important}\r\n    #eko20-plan-b-renditerechner .eko-results .eko-result-list strong.eko-result-best{color:#16a34a!important}\r\n    #eko20-plan-b-renditerechner.eko-tone-worst .eko-bar{background:#f97316!important}\r\n    #eko20-plan-b-renditerechner.eko-tone-average .eko-bar{background:#2563eb!important}\r\n    #eko20-plan-b-renditerechner.eko-tone-best .eko-bar{background:#16a34a!important}\r\n    #eko20-plan-b-renditerechner .eko-season-table,#eko20-plan-b-renditerechner .eko-projection-table{width:100%;border-collapse:collapse;margin-bottom:14px;background:#fff;table-layout:fixed}\r\n    #eko20-plan-b-renditerechner .eko-projection-table col,#eko20-plan-b-renditerechner .eko-season-table col{width:25%}\r\n    #eko20-plan-b-renditerechner .eko-season-table th,#eko20-plan-b-renditerechner .eko-season-table td,#eko20-plan-b-renditerechner .eko-projection-table th,#eko20-plan-b-renditerechner .eko-projection-table td{border:0;padding:10px!important;vertical-align:middle;box-shadow:inset 0 -1px 0 rgba(15,23,42,.08);text-align:left!important;text-align-last:left!important;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1;white-space:nowrap}\r\n    #eko20-plan-b-renditerechner .eko-projection-table th:not(:first-child),#eko20-plan-b-renditerechner .eko-projection-table td:not(:first-child),#eko20-plan-b-renditerechner .eko-season-table th:not(:first-child),#eko20-plan-b-renditerechner .eko-season-table td:not(:first-child){text-align:left!important;text-align-last:left!important;padding-left:10px!important;padding-right:10px!important}\r\n    #eko20-plan-b-renditerechner .eko-projection-table td[id],#eko20-plan-b-renditerechner .eko-season-table input{direction:ltr!important;unicode-bidi:isolate!important}\r\n    #eko20-plan-b-renditerechner .eko-season-table th,#eko20-plan-b-renditerechner .eko-projection-table th{font-size:13px;color:var(--ek-muted);font-weight:900;background:#f1f5f9}\r\n    #eko20-plan-b-renditerechner .eko-season-table td:first-child{font-weight:900;color:#1e293b}\r\n    #eko20-plan-b-renditerechner .eko-season-table input{width:100%;min-width:78px;height:40px;border:0;background:#fff;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08);padding:8px;font:inherit;text-align:left!important;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}\r\n    #eko20-plan-b-renditerechner .eko-results{padding:clamp(20px,3vw,32px);background:linear-gradient(135deg,rgba(0,220,255,.08),rgba(0,79,77,.04));border:0;margin-top:24px;box-shadow:inset 0 0 0 1px rgba(0,220,255,.18)}\r\n    #eko20-plan-b-renditerechner .eko-results h3{font-size:clamp(24px,3vw,32px);color:var(--ek-secondary);margin-bottom:18px}\r\n    #eko20-plan-b-renditerechner .eko-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-bottom:18px}\r\n    #eko20-plan-b-renditerechner .eko-kpi{background:#fff;border:0;padding:16px;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08);min-width:0;overflow:hidden}\r\n    #eko20-plan-b-renditerechner .eko-kpi span{display:block;color:var(--ek-muted);font-size:13px;margin-bottom:8px}\r\n    #eko20-plan-b-renditerechner .eko-kpi strong{display:block;font-size:clamp(20px,2.35vw,28px);line-height:1.08;letter-spacing:-.03em;color:var(--ek-secondary);white-space:normal;overflow-wrap:anywhere}\r\n    #eko20-plan-b-renditerechner #eko20-selectedModelResult{font-size:clamp(18px,2vw,24px);letter-spacing:-.02em}\r\n    #eko20-plan-b-renditerechner .eko-compare-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:0 0 18px}\r\n    #eko20-plan-b-renditerechner .eko-compare-card{background:#fff;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08);padding:18px}\r\n    #eko20-plan-b-renditerechner .eko-compare-card h4{margin:0 0 14px;color:var(--ek-secondary);font-size:20px;line-height:1.2}\r\n    #eko20-plan-b-renditerechner .eko-compare-card ul,#eko20-plan-b-renditerechner .eko-result-list{list-style:none!important;margin:0!important;padding:0!important}\r\n    #eko20-plan-b-renditerechner .eko-compare-card li,#eko20-plan-b-renditerechner .eko-result-list li{list-style:none!important}\r\n    #eko20-plan-b-renditerechner .eko-compare-card li::before,#eko20-plan-b-renditerechner .eko-result-list li::before{content:none!important;display:none!important}\r\n    #eko20-plan-b-renditerechner .eko-compare-card li{display:flex;justify-content:space-between;gap:12px;padding:10px 0;box-shadow:inset 0 -1px 0 rgba(15,23,42,.08);font-size:14px;text-align:left}\r\n    #eko20-plan-b-renditerechner .eko-compare-card li:last-child{box-shadow:none}\r\n    #eko20-plan-b-renditerechner .eko-compare-card span{color:#475569}\r\n    #eko20-plan-b-renditerechner .eko-compare-card strong{text-align:right;color:#0f172a}\r\n    #eko20-plan-b-renditerechner .eko-result-list{background:#fff;border:0;overflow:hidden;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}\r\n    #eko20-plan-b-renditerechner .eko-result-list li{display:flex;justify-content:space-between;gap:14px;padding:13px 16px;box-shadow:inset 0 -1px 0 rgba(15,23,42,.08);font-size:15px}\r\n    #eko20-plan-b-renditerechner .eko-result-list li:last-child{box-shadow:none}\r\n    #eko20-plan-b-renditerechner .eko-result-list span:first-child{color:#475569}\r\n    #eko20-plan-b-renditerechner .eko-result-list strong{text-align:right;color:#0f172a}\r\n    #eko20-plan-b-renditerechner .eko-bar-wrap{background:#dbe3ef;height:12px;overflow:hidden;margin:0 0 18px}\r\n    #eko20-plan-b-renditerechner .eko-bar{display:block;height:100%;width:0%;background:linear-gradient(90deg,var(--ek-secondary),var(--ek-primary));transition:width .25s ease}\r\n    #eko20-plan-b-renditerechner .eko-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:18px}\r\n    #eko20-plan-b-renditerechner .eko-btn-primary{background:var(--ek-primary);color:#001316;box-shadow:none}\r\n    #eko20-plan-b-renditerechner .eko-btn-ghost{background:#fff;color:var(--ek-secondary)}\r\n    #eko20-plan-b-renditerechner .eko-btn-whatsapp{display:inline-flex;align-items:center;gap:8px;background:#25D366;color:#fff!important;text-decoration:none;box-shadow:none}\r\n    #eko20-plan-b-renditerechner .eko-btn-whatsapp span{color:#fff!important}\r\n    #eko20-plan-b-renditerechner .eko-btn-whatsapp:hover{background:#128C7E;color:#fff!important;text-decoration:none}\r\n    #eko20-plan-b-renditerechner .eko-btn-whatsapp:hover span{color:#fff!important}\r\n    #eko20-plan-b-renditerechner .eko-btn-whatsapp img{display:block;width:22px;height:22px;object-fit:contain;flex:0 0 auto}\r\n    #eko20-plan-b-renditerechner .eko-disclaimer{margin:16px 0 0;font-size:13px;line-height:1.5;color:var(--ek-muted)}\r\n    #eko20-plan-b-renditerechner .eko-logo-wrap{display:flex;justify-content:flex-start;align-items:center;margin:0 0 22px}\r\n    #eko20-plan-b-renditerechner .eko-logo-wrap img{width:min(260px,70vw);height:auto;display:block}\r\n    #eko20-plan-b-renditerechner .eko-legal-disclaimer{margin-top:18px;padding:16px;background:#fff;color:#475569;font-size:13px;line-height:1.55;text-align:justify;box-shadow:inset 0 0 0 1px rgba(15,23,42,.08)}\r\n    #eko20-plan-b-renditerechner .eko-hidden{display:none!important}\r\n\r\n    \/* Tabellenlayout stabil halten: echte Tabellen, Werte linksb&uuml;ndig *\/\r\n    #eko20-plan-b-renditerechner .eko-projection-table,\r\n    #eko20-plan-b-renditerechner .eko-season-table{display:table!important;width:100%!important;border-collapse:collapse!important;table-layout:fixed!important;background:#fff!important}\r\n    #eko20-plan-b-renditerechner .eko-projection-table thead,\r\n    #eko20-plan-b-renditerechner .eko-season-table thead{display:table-header-group!important}\r\n    #eko20-plan-b-renditerechner .eko-projection-table tbody,\r\n    #eko20-plan-b-renditerechner .eko-season-table tbody{display:table-row-group!important}\r\n    #eko20-plan-b-renditerechner .eko-projection-table tr,\r\n    #eko20-plan-b-renditerechner .eko-season-table tr{display:table-row!important}\r\n    #eko20-plan-b-renditerechner .eko-projection-table th,\r\n    #eko20-plan-b-renditerechner .eko-projection-table td,\r\n    #eko20-plan-b-renditerechner .eko-season-table th,\r\n    #eko20-plan-b-renditerechner .eko-season-table td{display:table-cell!important;text-align:left!important;text-align-last:left!important;vertical-align:middle!important;padding:10px!important;white-space:nowrap!important;font-variant-numeric:tabular-nums!important;font-feature-settings:\"tnum\" 1!important}\r\n    #eko20-plan-b-renditerechner .eko-season-table input{display:block!important;width:100%!important;text-align:left!important;text-align-last:left!important;margin:0!important}\r\n    #eko20-plan-b-renditerechner .eko-projection-table th,\r\n    #eko20-plan-b-renditerechner .eko-projection-table td,\r\n    #eko20-plan-b-renditerechner .eko-season-table th,\r\n    #eko20-plan-b-renditerechner .eko-season-table td,\r\n    #eko20-plan-b-renditerechner .eko-projection-table tbody td,\r\n    #eko20-plan-b-renditerechner .eko-season-table tbody td,\r\n    #eko20-plan-b-renditerechner .eko-season-table input{text-align:left!important;font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\" 1}\r\n    @media(max-width:980px){#eko20-plan-b-renditerechner .eko-field-grid,#eko20-plan-b-renditerechner .eko-kpi-grid,#eko20-plan-b-renditerechner .eko-compare-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}\r\n    @media(max-width:720px){#eko20-plan-b-renditerechner{padding:18px;box-shadow:none}#eko20-plan-b-renditerechner .eko-field-grid,#eko20-plan-b-renditerechner .eko-kpi-grid,#eko20-plan-b-renditerechner .eko-scenario-switch,#eko20-plan-b-renditerechner .eko-radio-group,#eko20-plan-b-renditerechner .eko-model-switch,#eko20-plan-b-renditerechner .eko-compare-grid,#eko20-plan-b-renditerechner .eko-platform-grid,#eko20-plan-b-renditerechner .eko-platform-summary{grid-template-columns:1fr}#eko20-plan-b-renditerechner .eko-result-list li,#eko20-plan-b-renditerechner .eko-compare-card li{display:block}#eko20-plan-b-renditerechner .eko-result-list strong,#eko20-plan-b-renditerechner .eko-compare-card strong{display:block;text-align:left;margin-top:4px}#eko20-plan-b-renditerechner .eko-projection-table,#eko20-plan-b-renditerechner .eko-season-table{display:block!important;overflow-x:auto!important;white-space:nowrap!important}#eko20-plan-b-renditerechner .eko-projection-table thead,#eko20-plan-b-renditerechner .eko-season-table thead{display:table-header-group!important}#eko20-plan-b-renditerechner .eko-projection-table tbody,#eko20-plan-b-renditerechner .eko-season-table tbody{display:table-row-group!important}#eko20-plan-b-renditerechner .eko-projection-table tr,#eko20-plan-b-renditerechner .eko-season-table tr{display:table-row!important}#eko20-plan-b-renditerechner .eko-projection-table th,#eko20-plan-b-renditerechner .eko-projection-table td,#eko20-plan-b-renditerechner .eko-season-table th,#eko20-plan-b-renditerechner .eko-season-table td{display:table-cell!important;min-width:120px!important}}\r\n  <\/style>\r\n\r\n  <div class=\"eko-logo-wrap\">\r\n    <img src=\"https:\/\/benu-vermoegensschutz.de\/wp-content\/uploads\/2024\/08\/benu-vk-logo.svg\" alt=\"BENU asset protection\" loading=\"lazy\" decoding=\"async\">\r\n  <\/div>\r\n\r\n  <span class=\"eko-roi-eyebrow\">Plan B property \/ yield calculator<\/span>\r\n  <h2>Calculate short-term rental, permanent rental and value development as a scenario<\/h2>\r\n  <p class=\"eko-roi-intro\">This calculator evaluates a property as a Plan B property: purchase price, type of purchase, purchase tax, notarized ancillary purchase costs, number of bedrooms, seasonal rental, permanent rental, progressive increase in rental income, household consumption, property management, internet, running costs and increase in value are brought together to form an initial yield picture.<\/p>\r\n\r\n  <div class=\"eko-section\">\r\n    <h3>1. property, purchase price and ancillary purchase costs<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>Note on type of purchase, purchase tax and ancillary purchase costs<\/summary>\r\n      <div>The calculator works with a stored progressive purchase tax scenario for existing properties. The calculator assumes a purchase tax of 0.00 euros for new construction directly from the investor. The actual contract and tax structure must be checked on a property-by-property basis.  <\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-field-grid\">\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-purchasePrice\">Purchase price<\/label>\r\n        <input id=\"eko20-purchasePrice\" autocomplete=\"off\" type=\"text\" value=\"160.000,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Basis for purchase tax, real estate tax, ancillary costs, yield and value development.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-purchaseType\">Type of purchase<\/label>\r\n        <select id=\"eko20-purchaseType\" autocomplete=\"off\" data-eko-input=\"\">\r\n          <option value=\"existing\" selected>Existing property<\/option>\r\n          <option value=\"newbuild\">New build property<\/option>\r\n        <\/select>\r\n        <small>Existing property: Purchase tax is calculated. New build: purchase tax is set to 0.00 euros in the calculator.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-livingArea\">Living space in m&sup2;<\/label>\r\n        <input id=\"eko20-livingArea\" autocomplete=\"off\" type=\"text\" value=\"54,00\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Basis for property management: Living space &times; rate per m&sup2; &times; 12 months.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-bedroomType\">Apartment type \/ bedroom<\/label>\r\n        <select id=\"eko20-bedroomType\" autocomplete=\"off\" data-eko-input=\"\">\r\n          <option value=\"studio\">1-room apartment \/ studio<\/option>\r\n          <option value=\"one\" selected>1 bedroom<\/option>\r\n          <option value=\"two\">2 bedrooms<\/option>\r\n          <option value=\"three\">3 bedrooms<\/option>\r\n        <\/select>\r\n        <small>Influences the standard prices in the seasonal model, because more bed places regularly enable higher overnight prices.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-extraCosts\">One-off notarial \/ technical ancillary purchase costs<\/label>\r\n        <input id=\"eko20-extraCosts\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly>\r\n        <small>One-off acquisition costs. Calculator formula: Notary rate, 21 percent PDV, land register, translation\/interpreter and reserve. Without purchase tax.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-stateTransferTax\">One-off acquisition tax to the state of Montenegro<\/label>\r\n        <input id=\"eko20-stateTransferTax\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly>\r\n        <small>One-off acquisition costs. Calculated progressively for existing properties. For new build properties 0.00 Euro.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-internetMonthly\">Internet \/ month<\/label>\r\n        <input id=\"eko20-internetMonthly\" autocomplete=\"off\" type=\"text\" value=\"20,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Standard assumption: 20.00 euros per month. Treated as apportionable incidental rental costs in the permanent rental model.<\/small>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"eko-section\">\r\n    <h3>2. household consumption: electricity and water<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>Note on electricity, night-time electricity and water<\/summary>\r\n      <div>The calculator uses EUR 0.11 per kWh of daytime electricity as a standard assumption. Night-time electricity is calculated at 50 percent of the daytime electricity price. Water is calculated at 1.20 euros per m&sup3;. In the permanent rental model, electricity, water, waste and internet are treated as apportionable ancillary rental costs and do not reduce the owner's cash flow.   <\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-scenario-switch\" aria-label=\"Verbrauchsszenario ausw&auml;hlen\">\r\n      <button type=\"button\" data-household-scenario=\"worst\" aria-pressed=\"false\">Worst Case<\/button>\r\n      <button type=\"button\" data-household-scenario=\"average\" aria-pressed=\"true\">Average Case<\/button>\r\n      <button type=\"button\" data-household-scenario=\"best\" aria-pressed=\"false\">Best Case<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"eko-radio-title\">Budget assumption<\/div>\r\n    <div class=\"eko-radio-group\" role=\"radiogroup\" aria-label=\"Haushaltsannahme f&uuml;r Strom und Wasser\">\r\n      <label class=\"eko-radio\"><input type=\"radio\" autocomplete=\"off\" name=\"eko20-householdProfile\" value=\"one\" data-eko-input=\"\"> <strong>1 person<\/strong><br><small id=\"eko20-profileOneInfo\">Average case: 120 kWh electricity \/ month, 4 m&sup3; water \/ month.<\/small><\/label>\r\n      <label class=\"eko-radio\"><input type=\"radio\" autocomplete=\"off\" name=\"eko20-householdProfile\" value=\"two\" checked data-eko-input=\"\"> <strong>2 persons<\/strong><br><small id=\"eko20-profileTwoInfo\">Average case: 200 kWh electricity \/ month, 8 m&sup3; water \/ month.<\/small><\/label>\r\n      <label class=\"eko-radio\"><input type=\"radio\" autocomplete=\"off\" name=\"eko20-householdProfile\" value=\"family\" data-eko-input=\"\"> <strong>Family<\/strong><br><small id=\"eko20-profileFamilyInfo\">Average case: 340 kWh electricity \/ month, 14 m&sup3; water \/ month.<\/small><\/label>\r\n    <\/div>\r\n\r\n    <div class=\"eko-field-grid\">\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-dayPowerPrice\">Daily electricity \/ kWh<\/label>\r\n        <input id=\"eko20-dayPowerPrice\" autocomplete=\"off\" type=\"text\" value=\"0,11 &euro;\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Standard: 0.11 Euro per kWh.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-nightPowerShare\">Night-time electricity share of consumption in %<\/label>\r\n        <input id=\"eko20-nightPowerShare\" autocomplete=\"off\" type=\"text\" value=\"20,00%\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Night-time electricity is calculated at 50 percent of the daytime electricity price.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-powerMonthly\">Calculated electricity costs \/ month<\/label>\r\n        <input id=\"eko20-powerMonthly\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly>\r\n        <small>Formula: Consumption &times; day \/ night electricity share &times; respective kWh price.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-waterPrice\">Water price \/ m&sup3;<\/label>\r\n        <input id=\"eko20-waterPrice\" autocomplete=\"off\" type=\"text\" value=\"1,20 &euro;\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Standard: 1.20 Euro per cubic meter.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-waterMonthly\">Calculated water costs \/ month<\/label>\r\n        <input id=\"eko20-waterMonthly\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly>\r\n        <small>Formula: m&sup3; consumption &times; water price.<\/small>\r\n      <\/div>\r\n\r\n      <div class=\"eko-field\">\r\n        <label for=\"eko20-wasteMonthly\">Basic waste costs \/ month<\/label>\r\n        <input id=\"eko20-wasteMonthly\" autocomplete=\"off\" type=\"text\" value=\"4,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\">\r\n        <small>Standard assumption: 4.00 euros per month. Treated as apportionable in the permanent rental model.<\/small>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"eko-section\">\r\n    <h3>3. select rental model<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>First select model, then check scenario<\/summary>\r\n      <div>First select whether the property is to be calculated as a seasonal rental, as a permanent rental or as a comparison of both models. In the seasonal model, the owner pays for electricity, water, waste and internet. In the permanent rental model, these items are treated as apportionable incidental rental costs and do not reduce the owner's cash flow.  <\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-model-switch\" aria-label=\"Vermietungsmodell ausw&auml;hlen\">\r\n      <button type=\"button\" data-rental-model=\"season\" aria-pressed=\"true\">Seasonal model<\/button>\r\n      <button type=\"button\" data-rental-model=\"longrent\" aria-pressed=\"false\">Permanent rental model<\/button>\r\n      <button type=\"button\" data-rental-model=\"compare\" aria-pressed=\"false\">Compare both<\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"eko-section\" id=\"eko20-seasonModelSection\">\r\n    <h3>3 a. Seasonal model with scenario selection<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>Note on the seasonal model<\/summary>\r\n      <div>The year is broken down into high season, low season, off-season and overwintering. The annual turnover is calculated as bed nights &times; occupancy &times; price per bed night. The standard prices are additionally adjusted according to the selected apartment type \/ number of bedrooms. Electricity, water, waste and internet are included in the seasonal model as owner costs.   <\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-scenario-switch\" aria-label=\"Saison-Szenario ausw&auml;hlen\">\r\n      <button type=\"button\" data-scenario=\"worst\" aria-pressed=\"false\">Worst Case<\/button>\r\n      <button type=\"button\" data-scenario=\"average\" aria-pressed=\"true\">Average Case<\/button>\r\n      <button type=\"button\" data-scenario=\"best\" aria-pressed=\"false\">Best Case<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"eko-field-grid\">\r\n      <div class=\"eko-field\"><label for=\"eko20-seasonIncomeGrowthActive\">Active rental income increase p.a.<\/label><input id=\"eko20-seasonIncomeGrowthActive\" autocomplete=\"off\" type=\"text\" value=\"6,00%\" readonly><small>Automatically according to active seasonal scenario.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-seasonRevenueYear1\">Seasonal turnover year 1<\/label><input id=\"eko20-seasonRevenueYear1\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly><small>Calculated from overnight stays, prices and occupancy.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-seasonRevenueYear5\">Seasonal sales year 5<\/label><input id=\"eko20-seasonRevenueYear5\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly><small>Year 5 sales with active revenue growth.<\/small><\/div>\r\n    <\/div>\r\n\r\n    <table class=\"eko-season-table\" aria-label=\"Saisonwerte f&uuml;r Kurzzeitvermietung\">\r\n      <colgroup><col><col><col><col><\/colgroup>\r\n      <thead><tr><th>Season<\/th><th>OVERNIGHT STAY<\/th><th>Price \/ night<\/th><th>Occupancy rate<\/th><\/tr><\/thead>\r\n      <tbody>\r\n        <tr><td>High season<\/td><td><input id=\"eko20-nightsHigh\" autocomplete=\"off\" type=\"text\" value=\"60,00\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-rateHigh\" autocomplete=\"off\" type=\"text\" value=\"70,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-occHigh\" autocomplete=\"off\" type=\"text\" value=\"82,00%\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><\/tr>\r\n        <tr><td>Preseason<\/td><td><input id=\"eko20-nightsPre\" autocomplete=\"off\" type=\"text\" value=\"90,00\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-ratePre\" autocomplete=\"off\" type=\"text\" value=\"52,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-occPre\" autocomplete=\"off\" type=\"text\" value=\"42,00%\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><\/tr>\r\n        <tr><td>Off-season<\/td><td><input id=\"eko20-nightsPost\" autocomplete=\"off\" type=\"text\" value=\"60,00\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-ratePost\" autocomplete=\"off\" type=\"text\" value=\"45,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-occPost\" autocomplete=\"off\" type=\"text\" value=\"32,00%\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><\/tr>\r\n        <tr><td>Wintering<\/td><td><input id=\"eko20-nightsWinter\" autocomplete=\"off\" type=\"text\" value=\"155,00\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-rateWinter\" autocomplete=\"off\" type=\"text\" value=\"28,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><td><input id=\"eko20-occWinter\" autocomplete=\"off\" type=\"text\" value=\"16,00%\" data-eko-input=\"\" inputmode=\"decimal\"><\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n\r\n    <table class=\"eko-projection-table\" aria-label=\"Saisonprojektion\">\r\n      <colgroup><col><col><col><col><\/colgroup>\r\n      <thead><tr><th>Period<\/th><th>Worst Case<\/th><th>Average Case<\/th><th>Best Case<\/th><\/tr><\/thead>\r\n      <tbody>\r\n        <tr><td>5 years<\/td><td id=\"eko20-seasonWorst5\">0,00 &euro;<\/td><td id=\"eko20-seasonAverage5\">0,00 &euro;<\/td><td id=\"eko20-seasonBest5\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>10 years<\/td><td id=\"eko20-seasonWorst10\">0,00 &euro;<\/td><td id=\"eko20-seasonAverage10\">0,00 &euro;<\/td><td id=\"eko20-seasonBest10\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>15 years<\/td><td id=\"eko20-seasonWorst15\">0,00 &euro;<\/td><td id=\"eko20-seasonAverage15\">0,00 &euro;<\/td><td id=\"eko20-seasonBest15\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>20 years<\/td><td id=\"eko20-seasonWorst20\">0,00 &euro;<\/td><td id=\"eko20-seasonAverage20\">0,00 &euro;<\/td><td id=\"eko20-seasonBest20\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>25 years<\/td><td id=\"eko20-seasonWorst25\">0,00 &euro;<\/td><td id=\"eko20-seasonAverage25\">0,00 &euro;<\/td><td id=\"eko20-seasonBest25\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>30 years<\/td><td id=\"eko20-seasonWorst30\">0,00 &euro;<\/td><td id=\"eko20-seasonAverage30\">0,00 &euro;<\/td><td id=\"eko20-seasonBest30\">0,00 &euro;<\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n  <\/div>\r\n\r\n  <div class=\"eko-section eko-hidden\" id=\"eko20-longRentModelSection\">\r\n    <h3>3 c. Permanent rental model with scenario selection<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>Note on the permanent rental model<\/summary>\r\n      <div>The permanent rental model is based on monthly rent, rented months per year and progressive rental income growth p.a. Electricity, water, waste and internet are treated as apportionable ancillary rental costs and do not reduce the owner's cash flow.<\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-scenario-switch\" aria-label=\"Dauermiet-Szenario ausw&auml;hlen\">\r\n      <button type=\"button\" data-longrent-scenario=\"worst\" aria-pressed=\"false\">Worst Case<\/button>\r\n      <button type=\"button\" data-longrent-scenario=\"average\" aria-pressed=\"true\">Average Case<\/button>\r\n      <button type=\"button\" data-longrent-scenario=\"best\" aria-pressed=\"false\">Best Case<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"eko-field-grid\">\r\n      <div class=\"eko-field\"><label for=\"eko20-longRentMonthly\">Permanent rent \/ month<\/label><input id=\"eko20-longRentMonthly\" autocomplete=\"off\" type=\"text\" value=\"450,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\"><small>Monthly net rent as initial value.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-longRentMonths\">Months rented \/ year<\/label><input id=\"eko20-longRentMonths\" autocomplete=\"off\" type=\"text\" value=\"12,00\" data-eko-input=\"\" inputmode=\"decimal\"><small>Standard: 12 months. Vacancies can be mapped over fewer months.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-longRentGrowthActive\">Active rental income increase p.a.<\/label><input id=\"eko20-longRentGrowthActive\" autocomplete=\"off\" type=\"text\" value=\"6,00%\" readonly><small>Automatically according to active long-term rental scenario.<\/small><\/div>\r\n    <\/div>\r\n\r\n    <table class=\"eko-projection-table\" aria-label=\"Dauermietprojektion\">\r\n      <colgroup><col><col><col><col><\/colgroup>\r\n      <thead><tr><th>Period<\/th><th>Worst Case<\/th><th>Average Case<\/th><th>Best Case<\/th><\/tr><\/thead>\r\n      <tbody>\r\n        <tr><td>5 years<\/td><td id=\"eko20-longRentWorst5\">0,00 &euro;<\/td><td id=\"eko20-longRentAverage5\">0,00 &euro;<\/td><td id=\"eko20-longRentBest5\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>10 years<\/td><td id=\"eko20-longRentWorst10\">0,00 &euro;<\/td><td id=\"eko20-longRentAverage10\">0,00 &euro;<\/td><td id=\"eko20-longRentBest10\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>15 years<\/td><td id=\"eko20-longRentWorst15\">0,00 &euro;<\/td><td id=\"eko20-longRentAverage15\">0,00 &euro;<\/td><td id=\"eko20-longRentBest15\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>20 years<\/td><td id=\"eko20-longRentWorst20\">0,00 &euro;<\/td><td id=\"eko20-longRentAverage20\">0,00 &euro;<\/td><td id=\"eko20-longRentBest20\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>25 years<\/td><td id=\"eko20-longRentWorst25\">0,00 &euro;<\/td><td id=\"eko20-longRentAverage25\">0,00 &euro;<\/td><td id=\"eko20-longRentBest25\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>30 years<\/td><td id=\"eko20-longRentWorst30\">0,00 &euro;<\/td><td id=\"eko20-longRentAverage30\">0,00 &euro;<\/td><td id=\"eko20-longRentBest30\">0,00 &euro;<\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n  <\/div>\r\n\r\n  <div class=\"eko-section\">\r\n    <h3>4. fees, administration and reserves<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>Note on ongoing costs and fees<\/summary>\r\n      <div>The running costs are handled depending on the model: In the seasonal model, electricity, water, waste and internet reduce the owner cash flow. In the permanent rental model, these items are reported as apportionable incidental rental costs and are not deducted from the owner cash flow. <\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-field-grid\">\r\n      <div class=\"eko-field\"><label for=\"eko20-propertyManagementPerSqm\">Property management \/ m&sup2; \/ month<\/label><input id=\"eko20-propertyManagementPerSqm\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" data-eko-input=\"\" inputmode=\"decimal\"><small>Formula: Living space &times; rate &times; 12 months.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-propertyManagementMonthly\">Calculated property management \/ month<\/label><input id=\"eko20-propertyManagementMonthly\" autocomplete=\"off\" type=\"text\" value=\"0,00 &euro;\" readonly><small>Automatically from living space and rate per m&sup2;.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-propertyTaxRate\">Annual real estate tax in %<\/label><input id=\"eko20-propertyTaxRate\" autocomplete=\"off\" type=\"text\" value=\"0,25%\" data-eko-input=\"\" inputmode=\"decimal\"><small>Formula: Purchase price &times; tax rate. Current ownership costs.<\/small><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"eko-field\" id=\"eko20-platformFeeSection\">\r\n      <div class=\"eko-radio-title\">Select platform \/ payment fees<\/div>\r\n      <div class=\"eko-platform-grid\" aria-label=\"Plattformgeb&uuml;hren ausw&auml;hlen\">\r\n        <label class=\"eko-platform-check\"><span class=\"eko-platform-logo\"><img src=\"https:\/\/ekosphere.me\/wp-content\/uploads\/2026\/05\/airbnb-logo-e1779459741569.png\" alt=\"Airbnb\" loading=\"lazy\" decoding=\"async\"><\/span><input type=\"checkbox\" autocomplete=\"off\" value=\"airbnb\" data-platform-fee=\"15.5\" data-eko-input=\"\" checked> <strong>Airbnb<\/strong><br><small>15.50 percent as host fee acceptance.<\/small><\/label>\r\n        <label class=\"eko-platform-check\"><span class=\"eko-platform-logo\"><img src=\"https:\/\/ekosphere.me\/wp-content\/uploads\/2026\/05\/booking-logo-e1779450421538.png\" alt=\"Booking.com\" loading=\"lazy\" decoding=\"async\"><\/span><input type=\"checkbox\" autocomplete=\"off\" value=\"booking\" data-platform-fee=\"15\" data-eko-input=\"\"> <strong>Booking.com<\/strong><br><small>15.00 percent as standard commission assumption.<\/small><\/label>\r\n        <label class=\"eko-platform-check\"><span class=\"eko-platform-logo\"><img src=\"https:\/\/ekosphere.me\/wp-content\/uploads\/2026\/05\/expedia-logo-e1779450484250.png\" alt=\"Expedia\" loading=\"lazy\" decoding=\"async\"><\/span><input type=\"checkbox\" autocomplete=\"off\" value=\"expedia\" data-platform-fee=\"18\" data-eko-input=\"\"> <strong>Expedia<\/strong><br><small>18.00 percent as a cautious OTA assumption.<\/small><\/label>\r\n      <\/div>\r\n      <div class=\"eko-platform-summary\">\r\n        <div><span>Selected platform fees<\/span><strong id=\"eko20-selectedPlatformFees\">Airbnb: 15.50%<\/strong><\/div>\r\n        <div><span>Average platform costs<\/span><strong id=\"eko20-platformFeeAverageOut\">15,50%<\/strong><\/div>\r\n      <\/div>\r\n      <small>Platform costs are only recognized as variable deductions in the seasonal model. Several active platforms are calculated as a simple average. <\/small>\r\n    <\/div>\r\n\r\n    <div class=\"eko-range-field\">\r\n      <label for=\"eko20-managementFee\">Administration \/ Support<\/label>\r\n      <div class=\"eko-range-line\"><input id=\"eko20-managementFee\" autocomplete=\"off\" type=\"range\" min=\"0\" max=\"35\" step=\"0.5\" value=\"0\" data-eko-input=\"\"><output class=\"eko-range-value\" id=\"eko20-managementFeeOut\">0,00%<\/output><\/div>\r\n      <small>Standard 0.00 percent. Supervision, handover, coordination, communication and ongoing object organization can be set optionally. <\/small>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"eko-section\">\r\n    <h3>5. increase in value: 5 to 30 years<\/h3>\r\n    <details class=\"eko-help-details\">\r\n      <summary>Note on performance<\/summary>\r\n      <div>The increase in value is pre-filled with worst case 3.00% p.a., average case 6.00% p.a. and best case 9.00% p.a. The values remain editable and are not a forecast or guarantee.<\/div>\r\n    <\/details>\r\n\r\n    <div class=\"eko-scenario-switch\" aria-label=\"Wertsteigerungsszenario ausw&auml;hlen\">\r\n      <button type=\"button\" data-value-scenario=\"worst\" aria-pressed=\"false\">Worst Case<\/button>\r\n      <button type=\"button\" data-value-scenario=\"average\" aria-pressed=\"true\">Average Case<\/button>\r\n      <button type=\"button\" data-value-scenario=\"best\" aria-pressed=\"false\">Best Case<\/button>\r\n    <\/div>\r\n\r\n    <div class=\"eko-field-grid\">\r\n      <div class=\"eko-field\"><label for=\"eko20-appWorst\">Worst case value increase \/ year<\/label><input id=\"eko20-appWorst\" autocomplete=\"off\" type=\"text\" value=\"3,00%\" data-eko-input=\"\" inputmode=\"decimal\"><small>Prefilled, editable.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-appAverage\">Average case value increase \/ year<\/label><input id=\"eko20-appAverage\" autocomplete=\"off\" type=\"text\" value=\"6,00%\" data-eko-input=\"\" inputmode=\"decimal\"><small>Prefilled, editable.<\/small><\/div>\r\n      <div class=\"eko-field\"><label for=\"eko20-appBest\">Best case value increase \/ year<\/label><input id=\"eko20-appBest\" autocomplete=\"off\" type=\"text\" value=\"9,00%\" data-eko-input=\"\" inputmode=\"decimal\"><small>Prefilled, editable.<\/small><\/div>\r\n    <\/div>\r\n\r\n    <table class=\"eko-projection-table\" aria-label=\"Wertsteigerungsszenarien\">\r\n      <colgroup><col><col><col><col><\/colgroup>\r\n      <thead><tr><th>Period<\/th><th>Worst Case<\/th><th>Average Case<\/th><th>Best Case<\/th><\/tr><\/thead>\r\n      <tbody>\r\n        <tr><td>5 years<\/td><td id=\"eko20-valueWorst5\">0,00 &euro;<\/td><td id=\"eko20-valueAverage5\">0,00 &euro;<\/td><td id=\"eko20-valueBest5\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>10 years<\/td><td id=\"eko20-valueWorst10\">0,00 &euro;<\/td><td id=\"eko20-valueAverage10\">0,00 &euro;<\/td><td id=\"eko20-valueBest10\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>15 years<\/td><td id=\"eko20-valueWorst15\">0,00 &euro;<\/td><td id=\"eko20-valueAverage15\">0,00 &euro;<\/td><td id=\"eko20-valueBest15\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>20 years<\/td><td id=\"eko20-valueWorst20\">0,00 &euro;<\/td><td id=\"eko20-valueAverage20\">0,00 &euro;<\/td><td id=\"eko20-valueBest20\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>25 years<\/td><td id=\"eko20-valueWorst25\">0,00 &euro;<\/td><td id=\"eko20-valueAverage25\">0,00 &euro;<\/td><td id=\"eko20-valueBest25\">0,00 &euro;<\/td><\/tr>\r\n        <tr><td>30 years<\/td><td id=\"eko20-valueWorst30\">0,00 &euro;<\/td><td id=\"eko20-valueAverage30\">0,00 &euro;<\/td><td id=\"eko20-valueBest30\">0,00 &euro;<\/td><\/tr>\r\n      <\/tbody>\r\n    <\/table>\r\n  <\/div>\r\n\r\n  <div class=\"eko-results\" aria-label=\"Berechnetes Ergebnis\">\r\n    <h3>Result<\/h3>\r\n\r\n    <div class=\"eko-kpi-grid\">\r\n      <div class=\"eko-kpi\"><span>Selected model<\/span><strong id=\"eko20-selectedModelResult\">Seasonal model<\/strong><\/div>\r\n      <div class=\"eko-kpi\"><span>Gross annual turnover<\/span><strong id=\"eko20-grossRevenue\">0,00 &euro;<\/strong><\/div>\r\n      <div class=\"eko-kpi\"><span>Net cash flow \/ year<\/span><strong id=\"eko20-netCashflow\">0,00 &euro;<\/strong><\/div>\r\n      <div class=\"eko-kpi\"><span>Net rental yield<\/span><strong id=\"eko20-netYield\">0,00%<\/strong><\/div>\r\n      <div class=\"eko-kpi\"><span>Property value after 10 years<\/span><strong id=\"eko20-activeValue10Kpi\">0,00 &euro;<\/strong><\/div>\r\n      <div class=\"eko-kpi\"><span>Overall picture after 10 years<\/span><strong id=\"eko20-activeTotal10Kpi\">0,00 &euro;<\/strong><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"eko-compare-grid eko-hidden\" id=\"eko20-compareResultGrid\">\r\n      <div class=\"eko-compare-card\">\r\n        <h4>Seasonal model<\/h4>\r\n        <ul>\r\n          <li><span>Scenario<\/span><strong id=\"eko20-compareSeasonScenario\">Average Case<\/strong><\/li>\r\n          <li><span>&Uuml;N rented<\/span><strong id=\"eko20-compareSeasonNights\">0.00 OVERNIGHT STAYS<\/strong><\/li>\r\n          <li><span>Gross annual turnover<\/span><strong id=\"eko20-compareSeasonRevenue\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Variable deductions<\/span><strong id=\"eko20-compareSeasonVariable\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Owner fixed costs<\/span><strong id=\"eko20-compareSeasonFixed\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Net cash flow \/ year<\/span><strong id=\"eko20-compareSeasonNet\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Net yield<\/span><strong id=\"eko20-compareSeasonYield\">0,00%<\/strong><\/li>\r\n        <\/ul>\r\n      <\/div>\r\n\r\n      <div class=\"eko-compare-card\">\r\n        <h4>Permanent rental model<\/h4>\r\n        <ul>\r\n          <li><span>Scenario<\/span><strong id=\"eko20-compareLongScenario\">Average Case<\/strong><\/li>\r\n          <li><span>Months rented<\/span><strong id=\"eko20-compareLongMonths\">0.00 months<\/strong><\/li>\r\n          <li><span>Gross annual turnover<\/span><strong id=\"eko20-compareLongRevenue\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Variable deductions<\/span><strong id=\"eko20-compareLongVariable\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Owner fixed costs<\/span><strong id=\"eko20-compareLongFixed\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Apportionable incidental rental costs<\/span><strong id=\"eko20-compareLongPassThrough\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Net cash flow \/ year<\/span><strong id=\"eko20-compareLongNet\">0,00 &euro;<\/strong><\/li>\r\n          <li><span>Net yield<\/span><strong id=\"eko20-compareLongYield\">0,00%<\/strong><\/li>\r\n        <\/ul>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"eko-bar-wrap\" aria-hidden=\"true\"><span class=\"eko-bar\" id=\"eko20-yieldBar\"><\/span><\/div>\r\n\r\n    <ul class=\"eko-result-list\" id=\"eko20-resultList\">\r\n      <li data-result-model=\"season compare\"><span>Active season scenario<\/span><strong id=\"eko20-activeScenario\">Average Case<\/strong><\/li>\r\n      <li data-result-model=\"longrent compare\"><span>Active long-term rental scenario<\/span><strong id=\"eko20-activeLongRentScenario\">Average Case<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Active consumption scenario<\/span><strong id=\"eko20-activeHouseholdScenario\">Average Case<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Active value appreciation scenario<\/span><strong id=\"eko20-activeValueScenario\">Average Case<\/strong><\/li>\r\n      <li data-result-model=\"season compare\"><span>Rented &Uuml;N seasonal model<\/span><strong id=\"eko20-bookedNights\">0.00 OVERNIGHT STAY<\/strong><\/li>\r\n      <li data-result-model=\"season compare\"><span>Annual turnover seasonal model<\/span><strong id=\"eko20-seasonRevenueResult\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"longrent compare\"><span>Annual turnover permanent rental model<\/span><strong id=\"eko20-longRentRevenueResult\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"season compare\"><span>Seasonal model Revenue increase p.a.<\/span><strong id=\"eko20-seasonGrowthResult\">6,00%<\/strong><\/li>\r\n      <li data-result-model=\"longrent compare\"><span>Permanent rental model Revenue increase p.a.<\/span><strong id=\"eko20-longRentGrowthResult\">6,00%<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>One-off purchase tax to the state of Montenegro<\/span><strong id=\"eko20-transferTax\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>One-off notarial \/ technical ancillary purchase costs<\/span><strong id=\"eko20-autoPurchaseCosts\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Total investment incl. one-off ancillary costs<\/span><strong id=\"eko20-totalInvestment\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Electricity \/ year<\/span><strong id=\"eko20-powerYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Water \/ year<\/span><strong id=\"eko20-waterYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Waste \/ year<\/span><strong id=\"eko20-wasteYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Property management \/ year<\/span><strong id=\"eko20-propertyManagementYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Internet \/ year<\/span><strong id=\"eko20-internetYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Annual real estate tax<\/span><strong id=\"eko20-annualPropertyTax\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Owner fixed costs \/ year<\/span><strong id=\"eko20-fixedCostsYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"longrent compare\"><span>Apportionable incidental rental costs \/ year<\/span><strong id=\"eko20-passThroughCostsYearly\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Variable deductions<\/span><strong id=\"eko20-variableCosts\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Amortization with net cash flow<\/span><strong id=\"eko20-payback\">-<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Active appreciation p.a.<\/span><strong id=\"eko20-activeValueGrowthRate\">0,00%<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Property value active scenario after 5 years<\/span><strong id=\"eko20-activeValue5\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Property value active scenario after 10 years<\/span><strong id=\"eko20-activeValue10\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Property value active scenario after 20 years<\/span><strong id=\"eko20-activeValue20\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Property value active scenario after 30 years<\/span><strong id=\"eko20-activeValue30\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Accumulated rental income active model after 10 years<\/span><strong id=\"eko20-activeIncome10\">0,00 &euro;<\/strong><\/li>\r\n      <li data-result-model=\"all\"><span>Overall picture of active model after 10 years<\/span><strong id=\"eko20-activeTotal10\">0,00 &euro;<\/strong><\/li>\r\n    <\/ul>\r\n\r\n    <p class=\"eko-disclaimer\">Note: This calculator is a scenario tool. It does not replace a tax, notarial or legal examination. It does not include financing, personal income tax, specific municipal notices, renovation risks, permit situation, tourist registration obligations and individual structuring.  <\/p>\r\n\r\n    <div class=\"eko-legal-disclaimer\"><strong>Disclaimer:<\/strong> This calculation tool is intended solely as a non-binding guide. All results are based on assumptions, input values and simplified scenarios. There is no guarantee of actual lettability, occupancy, value appreciation, yield, tax treatment, cost level or economic fulfillment. Use is at your own discretion and responsibility. Before making an investment decision, the property, contract, tax consequences, approval situation, administrative costs and market environment must be examined individually.    <\/div>\r\n\r\n    <div class=\"eko-actions\">\r\n      <button type=\"button\" class=\"eko-btn eko-btn-primary\" id=\"eko20-ekoReset\">Reset<\/button>\r\n      <button type=\"button\" class=\"eko-btn eko-btn-ghost\" id=\"eko20-ekoCopy\">Copy result<\/button>\r\n      <a class=\"eko-btn eko-btn-whatsapp\" id=\"eko20-whatsappResult\" href=\"#\" rel=\"noopener noreferrer\" target=\"_blank\" aria-label=\"Renditeergebnis per WhatsApp besprechen\">\r\n        <img loading=\"lazy\" src=\"https:\/\/ekosphere.me\/wp-content\/uploads\/2026\/02\/whatsApp-Chat-Symbol-direct.png\" alt=\"WhatsApp Chat Symbol direct\" aria-hidden=\"true\" width=\"22\" height=\"22\" decoding=\"async\">\r\n        <span>Discuss result via WhatsApp<\/span>\r\n      <\/a> \r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function(){\r\n      const root = document.getElementById('eko20-plan-b-renditerechner');\r\n      if(!root) return;\r\n\r\n      const EURO = String.fromCharCode(8364);\r\n      const DASH = String.fromCharCode(8211);\r\n      const UEN = String.fromCharCode(220) + 'N';\r\n      const M3 = 'm' + String.fromCharCode(179);\r\n      const UMLAGE = 'umlagef' + String.fromCharCode(228) + 'hig';\r\n\r\n      const state = {\r\n        rentalModel:'season',\r\n        seasonScenario:'average',\r\n        longRentScenario:'average',\r\n        householdScenario:'average',\r\n        valueScenario:'average'\r\n      };\r\n\r\n      const labels = {\r\n        season:'Saisonmodell',\r\n        longrent:'Dauermietmodell',\r\n        compare:'Beide vergleichen',\r\n        worst:'Worst Case',\r\n        average:'Average Case',\r\n        best:'Best Case'\r\n      };\r\n\r\n      const incomeGrowth = { worst:0.03, average:0.06, best:0.09 };\r\n\r\n      const bedroomMultipliers = {\r\n        studio:0.85,\r\n        one:1.00,\r\n        two:1.45,\r\n        three:1.80\r\n      };\r\n\r\n      const seasonPresets = {\r\n        worst:{high:[60,58,65],pre:[90,42,28],post:[60,36,22],winter:[155,22,8]},\r\n        average:{high:[60,70,82],pre:[90,52,42],post:[60,45,32],winter:[155,28,16]},\r\n        best:{high:[60,92,92],pre:[90,68,56],post:[60,56,44],winter:[155,36,24]}\r\n      };\r\n\r\n      const longRentPresets = {\r\n        worst:{monthly:360,months:10},\r\n        average:{monthly:450,months:12},\r\n        best:{monthly:600,months:12}\r\n      };\r\n\r\n      const householdProfiles = {\r\n        one:{worst:{power:155,water:5},average:{power:120,water:4},best:{power:95,water:3}},\r\n        two:{worst:{power:260,water:10},average:{power:200,water:8},best:{power:160,water:6}},\r\n        family:{worst:{power:430,water:18},average:{power:340,water:14},best:{power:280,water:11}}\r\n      };\r\n\r\n      const id = name => 'eko20-' + name;\r\n      const byId = name => document.getElementById(id(name));\r\n      const qs = selector => root.querySelector(selector);\r\n      const qsa = selector => Array.from(root.querySelectorAll(selector));\r\n\r\n      function parseLocalizedNumber(raw){\r\n        raw = String(raw || '0')\r\n          .replace(\/\\u00a0\/g,'')\r\n          .replace(\/\\s\/g,'')\r\n          .replace(EURO,'')\r\n          .replace('&euro;','')\r\n          .replace('%','')\r\n          .replace(\/[^\\d,.-]\/g,'');\r\n\r\n        const hasComma = raw.includes(',');\r\n        const hasDot = raw.includes('.');\r\n\r\n        if(hasComma && hasDot){\r\n          raw = raw.replace(\/\\.\/g,'').replace(',','.');\r\n        }else if(hasComma){\r\n          raw = raw.replace(',','.');\r\n        }else if(hasDot && \/^\\d{1,3}(\\.\\d{3})+$\/.test(raw)){\r\n          raw = raw.replace(\/\\.\/g,'');\r\n        }\r\n\r\n        const value = parseFloat(raw);\r\n        return Number.isFinite(value) ? value : 0;\r\n      }\r\n\r\n      function readNumber(name){\r\n        const el = byId(name);\r\n        if(!el) return 0;\r\n        return parseLocalizedNumber(el.value || el.textContent || '0');\r\n      }\r\n\r\n      function writeValue(name,value){\r\n        const el = byId(name);\r\n        if(el) el.value = value;\r\n      }\r\n\r\n      function writeText(name,value){\r\n        const el = byId(name);\r\n        if(el) el.textContent = value;\r\n      }\r\n\r\n      function formatMoney(value){\r\n        const safe = Number.isFinite(value) ? value : 0;\r\n        return safe.toLocaleString('de-DE',{minimumFractionDigits:2,maximumFractionDigits:2}) + ' ' + EURO;\r\n      }\r\n\r\n      function formatNumber(value){\r\n        const safe = Number.isFinite(value) ? value : 0;\r\n        return safe.toLocaleString('de-DE',{minimumFractionDigits:2,maximumFractionDigits:2});\r\n      }\r\n\r\n      function formatPercent(value){\r\n        const safe = Number.isFinite(value) ? value : 0;\r\n        return safe.toLocaleString('de-DE',{minimumFractionDigits:2,maximumFractionDigits:2}) + '%';\r\n      }\r\n\r\n      function writeMoney(name,value){writeText(name,formatMoney(value))}\r\n      function writeInputMoney(name,value){const el = byId(name); if(el) el.value = formatMoney(value)}\r\n\r\n      function getValueGrowth(){\r\n        return {\r\n          worst:readNumber('appWorst') \/ 100,\r\n          average:readNumber('appAverage') \/ 100,\r\n          best:readNumber('appBest') \/ 100\r\n        };\r\n      }\r\n\r\n      function getActiveValueGrowthRate(){\r\n        const growth = getValueGrowth();\r\n        return growth[state.valueScenario] || 0;\r\n      }\r\n\r\n      function calculateFutureValue(baseValue,growthRate,years){\r\n        return baseValue * Math.pow(1 + growthRate, years);\r\n      }\r\n\r\n      function calculateActiveModelRevenue10(seasonRevenue,longRentRevenue){\r\n        if(state.rentalModel === 'longrent') return calculateProgressiveSum(longRentRevenue,incomeGrowth[state.longRentScenario],10);\r\n        if(state.rentalModel === 'compare'){\r\n          const season10 = calculateProgressiveSum(seasonRevenue,incomeGrowth[state.seasonScenario],10);\r\n          const long10 = calculateProgressiveSum(longRentRevenue,incomeGrowth[state.longRentScenario],10);\r\n          return Math.max(season10,long10);\r\n        }\r\n        return calculateProgressiveSum(seasonRevenue,incomeGrowth[state.seasonScenario],10);\r\n      }\r\n\r\n      function setPressed(selector,activeValue){\r\n        qsa(selector).forEach(button=>{\r\n          const value = button.dataset.rentalModel || button.dataset.scenario || button.dataset.longrentScenario || button.dataset.householdScenario || button.dataset.valueScenario;\r\n          button.setAttribute('aria-pressed',value === activeValue ? 'true' : 'false');\r\n        });\r\n      }\r\n\r\n      function getHouseholdProfile(){\r\n        const checked = qs('input[name=\"eko20-householdProfile\"]:checked');\r\n        return checked ? checked.value : 'two';\r\n      }\r\n\r\n      function getPurchaseType(){\r\n        const el = byId('purchaseType');\r\n        return el ? el.value : 'existing';\r\n      }\r\n\r\n      function getBedroomMultiplier(){\r\n        const el = byId('bedroomType');\r\n        const value = el ? el.value : 'one';\r\n        return bedroomMultipliers[value] || 1;\r\n      }\r\n\r\n      function calculateTransferTax(price){\r\n        if(getPurchaseType() === 'newbuild') return 0;\r\n        if(price <= 150000) return price * 0.03;\r\n        if(price <= 500000) return 4500 + ((price - 150000) * 0.05);\r\n        return 22000 + ((price - 500000) * 0.06);\r\n      }\r\n\r\n      function calculatePurchaseCosts(price){\r\n        const notary = Math.max(350,Math.min(1200,price * 0.0035));\r\n        const vat = notary * 0.21;\r\n        const cadastre = 80;\r\n        const translationReserve = 250;\r\n        return notary + vat + cadastre + translationReserve;\r\n      }\r\n\r\n      function calculateSeasonRevenue(){\r\n        const rows = [\r\n          ['nightsHigh','rateHigh','occHigh'],\r\n          ['nightsPre','ratePre','occPre'],\r\n          ['nightsPost','ratePost','occPost'],\r\n          ['nightsWinter','rateWinter','occWinter']\r\n        ];\r\n\r\n        let revenue = 0;\r\n        let bookedNights = 0;\r\n\r\n        rows.forEach(row=>{\r\n          const nights = readNumber(row[0]);\r\n          const rate = readNumber(row[1]);\r\n          const occupancy = readNumber(row[2]) \/ 100;\r\n          const booked = nights * occupancy;\r\n          bookedNights += booked;\r\n          revenue += booked * rate;\r\n        });\r\n\r\n        return {revenue,bookedNights};\r\n      }\r\n\r\n      function calculateLongRentRevenue(){\r\n        return readNumber('longRentMonthly') * readNumber('longRentMonths');\r\n      }\r\n\r\n      function calculateProgressiveSum(firstYearRevenue,growthRate,years){\r\n        let total = 0;\r\n        for(let year = 0; year < years; year++){\r\n          total += firstYearRevenue * Math.pow(1 + growthRate, year);\r\n        }\r\n        return total;\r\n      }\r\n\r\n      function applySeasonPreset(scenario){\r\n        const preset = seasonPresets[scenario];\r\n        if(!preset) return;\r\n        const bedroomFactor = getBedroomMultiplier();\r\n\r\n        writeValue('nightsHigh',formatNumber(preset.high[0]));\r\n        writeValue('rateHigh',formatMoney(preset.high[1] * bedroomFactor));\r\n        writeValue('occHigh',formatPercent(preset.high[2]));\r\n        writeValue('nightsPre',formatNumber(preset.pre[0]));\r\n        writeValue('ratePre',formatMoney(preset.pre[1] * bedroomFactor));\r\n        writeValue('occPre',formatPercent(preset.pre[2]));\r\n        writeValue('nightsPost',formatNumber(preset.post[0]));\r\n        writeValue('ratePost',formatMoney(preset.post[1] * bedroomFactor));\r\n        writeValue('occPost',formatPercent(preset.post[2]));\r\n        writeValue('nightsWinter',formatNumber(preset.winter[0]));\r\n        writeValue('rateWinter',formatMoney(preset.winter[1] * bedroomFactor));\r\n        writeValue('occWinter',formatPercent(preset.winter[2]));\r\n      }\r\n\r\n      function applyLongRentPreset(scenario){\r\n        const preset = longRentPresets[scenario];\r\n        if(!preset) return;\r\n        writeValue('longRentMonthly',formatMoney(preset.monthly));\r\n        writeValue('longRentMonths',formatNumber(preset.months));\r\n      }\r\n\r\n      function updateModelVisibility(){\r\n        const seasonSection = document.getElementById('eko20-seasonModelSection');\r\n        const longRentSection = document.getElementById('eko20-longRentModelSection');\r\n        const compareGrid = byId('compareResultGrid');\r\n        const platformFeeSection = byId('platformFeeSection');\r\n\r\n        if(seasonSection) seasonSection.classList.toggle('eko-hidden',!(state.rentalModel === 'season' || state.rentalModel === 'compare'));\r\n        if(longRentSection) longRentSection.classList.toggle('eko-hidden',!(state.rentalModel === 'longrent' || state.rentalModel === 'compare'));\r\n        if(compareGrid) compareGrid.classList.toggle('eko-hidden',state.rentalModel !== 'compare');\r\n        if(platformFeeSection) platformFeeSection.classList.toggle('eko-hidden',state.rentalModel === 'longrent');\r\n\r\n        setPressed('[data-rental-model]',state.rentalModel);\r\n      }\r\n\r\n      function updateResultRows(){\r\n        qsa('[data-result-model]').forEach(row=>{\r\n          const rule = row.getAttribute('data-result-model') || 'all';\r\n          const show = rule === 'all' || rule.split(' ').includes(state.rentalModel);\r\n          row.classList.toggle('eko-hidden',!show);\r\n        });\r\n      }\r\n\r\n      function getActiveResultTone(){\r\n        if(state.rentalModel === 'longrent') return state.longRentScenario;\r\n        if(state.rentalModel === 'season') return state.seasonScenario;\r\n        return state.valueScenario;\r\n      }\r\n\r\n      function updateResultTone(){\r\n        root.classList.remove('eko-tone-worst','eko-tone-average','eko-tone-best');\r\n        root.classList.add('eko-tone-' + getActiveResultTone());\r\n      }\r\n\r\n      function setResultScenarioTone(name,scenario){\r\n        const el = byId(name);\r\n        if(!el) return;\r\n        el.classList.remove('eko-result-worst','eko-result-average','eko-result-best');\r\n        el.classList.add('eko-result-' + scenario);\r\n      }\r\n\r\n      function updateHouseholdInfo(){\r\n        const scenario = state.householdScenario;\r\n        writeText('profileOneInfo',labels[scenario] + ': ' + householdProfiles.one[scenario].power + ' kWh Strom \/ Monat, ' + householdProfiles.one[scenario].water + ' ' + M3 + ' Wasser \/ Monat.');\r\n        writeText('profileTwoInfo',labels[scenario] + ': ' + householdProfiles.two[scenario].power + ' kWh Strom \/ Monat, ' + householdProfiles.two[scenario].water + ' ' + M3 + ' Wasser \/ Monat.');\r\n        writeText('profileFamilyInfo',labels[scenario] + ': ' + householdProfiles.family[scenario].power + ' kWh Strom \/ Monat, ' + householdProfiles.family[scenario].water + ' ' + M3 + ' Wasser \/ Monat.');\r\n      }\r\n\r\n      function calculateHouseholdCosts(){\r\n        const profile = getHouseholdProfile();\r\n        const scenario = state.householdScenario;\r\n        const data = householdProfiles[profile][scenario];\r\n\r\n        const dayPowerPrice = readNumber('dayPowerPrice');\r\n        const nightShare = Math.min(100,Math.max(0,readNumber('nightPowerShare'))) \/ 100;\r\n        const nightPowerPrice = dayPowerPrice * 0.5;\r\n\r\n        const powerMonthly = (data.power * (1 - nightShare) * dayPowerPrice) + (data.power * nightShare * nightPowerPrice);\r\n        const waterMonthly = data.water * readNumber('waterPrice');\r\n\r\n        writeInputMoney('powerMonthly',powerMonthly);\r\n        writeInputMoney('waterMonthly',waterMonthly);\r\n        updateHouseholdInfo();\r\n\r\n        return {powerMonthly,waterMonthly};\r\n      }\r\n\r\n      function calculateCostBuckets(){\r\n        const household = calculateHouseholdCosts();\r\n        const purchasePrice = readNumber('purchasePrice');\r\n        const livingArea = readNumber('livingArea');\r\n        const propertyManagementMonthly = livingArea * readNumber('propertyManagementPerSqm');\r\n\r\n        writeInputMoney('propertyManagementMonthly',propertyManagementMonthly);\r\n\r\n        const powerYearly = household.powerMonthly * 12;\r\n        const waterYearly = household.waterMonthly * 12;\r\n        const wasteYearly = readNumber('wasteMonthly') * 12;\r\n        const propertyManagementYearly = propertyManagementMonthly * 12;\r\n        const internetYearly = readNumber('internetMonthly') * 12;\r\n        const annualPropertyTax = purchasePrice * (readNumber('propertyTaxRate') \/ 100);\r\n\r\n        const utilityCosts = powerYearly + waterYearly + wasteYearly + internetYearly;\r\n        const ownerBaseCosts = propertyManagementYearly + annualPropertyTax;\r\n        const seasonOwnerCosts = ownerBaseCosts + utilityCosts;\r\n        const longRentOwnerCosts = ownerBaseCosts;\r\n\r\n        return {\r\n          powerYearly,\r\n          waterYearly,\r\n          wasteYearly,\r\n          propertyManagementYearly,\r\n          internetYearly,\r\n          annualPropertyTax,\r\n          utilityCosts,\r\n          ownerBaseCosts,\r\n          seasonOwnerCosts,\r\n          longRentOwnerCosts\r\n        };\r\n      }\r\n\r\n      function readSelectedPlatformFees(){\r\n        const selected = qsa('[data-platform-fee]:checked').map(input=>({\r\n          key:input.value,\r\n          label:input.closest('label') ? input.closest('label').querySelector('strong').textContent : input.value,\r\n          fee:parseLocalizedNumber(input.dataset.platformFee || '0')\r\n        }));\r\n\r\n        const total = selected.reduce((sum,item)=>sum + item.fee,0);\r\n        const average = selected.length ? total \/ selected.length : 0;\r\n        return {selected,average};\r\n      }\r\n\r\n      function calculateNetFromGross(grossRevenue,model,costs){\r\n        const platformFee = model === 'season' ? readSelectedPlatformFees().average \/ 100 : 0;\r\n        const managementFee = readNumber('managementFee') \/ 100;\r\n        const variableCosts = grossRevenue * (platformFee + managementFee);\r\n        const ownerFixedCosts = model === 'longrent' ? costs.longRentOwnerCosts : costs.seasonOwnerCosts;\r\n        const passThroughCosts = model === 'longrent' ? costs.utilityCosts : 0;\r\n        const netCashflow = grossRevenue - variableCosts - ownerFixedCosts;\r\n        return {grossRevenue,variableCosts,ownerFixedCosts,passThroughCosts,netCashflow};\r\n      }\r\n\r\n      function updatePurchaseFields(){\r\n        const purchasePrice = readNumber('purchasePrice');\r\n        const transferTax = calculateTransferTax(purchasePrice);\r\n        const purchaseCosts = calculatePurchaseCosts(purchasePrice);\r\n        const totalInvestment = purchasePrice + transferTax + purchaseCosts;\r\n\r\n        writeInputMoney('extraCosts',purchaseCosts);\r\n        writeInputMoney('stateTransferTax',transferTax);\r\n\r\n        return {purchasePrice,transferTax,purchaseCosts,totalInvestment};\r\n      }\r\n\r\n      function updateProjectionTables(seasonRevenue,longRentRevenue){\r\n        const yearsList = [5,10,15,20,25,30];\r\n        const purchasePrice = readNumber('purchasePrice');\r\n        const valueGrowth = getValueGrowth();\r\n\r\n        yearsList.forEach(years=>{\r\n          writeMoney('seasonWorst' + years,calculateProgressiveSum(seasonRevenue,incomeGrowth.worst,years));\r\n          writeMoney('seasonAverage' + years,calculateProgressiveSum(seasonRevenue,incomeGrowth.average,years));\r\n          writeMoney('seasonBest' + years,calculateProgressiveSum(seasonRevenue,incomeGrowth.best,years));\r\n          writeMoney('longRentWorst' + years,calculateProgressiveSum(longRentRevenue,incomeGrowth.worst,years));\r\n          writeMoney('longRentAverage' + years,calculateProgressiveSum(longRentRevenue,incomeGrowth.average,years));\r\n          writeMoney('longRentBest' + years,calculateProgressiveSum(longRentRevenue,incomeGrowth.best,years));\r\n          writeMoney('valueWorst' + years,purchasePrice * Math.pow(1 + valueGrowth.worst,years));\r\n          writeMoney('valueAverage' + years,purchasePrice * Math.pow(1 + valueGrowth.average,years));\r\n          writeMoney('valueBest' + years,purchasePrice * Math.pow(1 + valueGrowth.best,years));\r\n        });\r\n      }\r\n\r\n      function updateRangeOutputs(){\r\n        const platformFees = readSelectedPlatformFees();\r\n        const effectiveAverage = state.rentalModel === 'longrent' ? 0 : platformFees.average;\r\n        const selectedText = state.rentalModel === 'longrent'\r\n          ? '0,00% im Dauermietmodell'\r\n          : platformFees.selected.length\r\n            ? platformFees.selected.map(item=>item.label + ': ' + formatPercent(item.fee)).join(' \/ ')\r\n            : 'Keine Plattform ausgew&auml;hlt';\r\n\r\n        writeText('selectedPlatformFees',selectedText);\r\n        writeText('platformFeeAverageOut',formatPercent(effectiveAverage));\r\n        writeText('managementFeeOut',formatPercent(readNumber('managementFee')));\r\n      }\r\n\r\n      function updateCompareResult(season,seasonNet,seasonYield,longRentNet,longRentYield){\r\n        writeText('compareSeasonScenario',labels[state.seasonScenario]);\r\n        writeText('compareSeasonNights',formatNumber(season.bookedNights) + ' ' + UEN);\r\n        writeText('compareSeasonRevenue',formatMoney(seasonNet.grossRevenue));\r\n        writeText('compareSeasonVariable',formatMoney(seasonNet.variableCosts));\r\n        writeText('compareSeasonFixed',formatMoney(seasonNet.ownerFixedCosts));\r\n        writeText('compareSeasonNet',formatMoney(seasonNet.netCashflow));\r\n        writeText('compareSeasonYield',formatPercent(seasonYield));\r\n        writeText('compareLongScenario',labels[state.longRentScenario]);\r\n        writeText('compareLongMonths',formatNumber(readNumber('longRentMonths')) + ' Monate');\r\n        writeText('compareLongRevenue',formatMoney(longRentNet.grossRevenue));\r\n        writeText('compareLongVariable',formatMoney(longRentNet.variableCosts));\r\n        writeText('compareLongFixed',formatMoney(longRentNet.ownerFixedCosts));\r\n        writeText('compareLongPassThrough',formatMoney(longRentNet.passThroughCosts));\r\n        writeText('compareLongNet',formatMoney(longRentNet.netCashflow));\r\n        writeText('compareLongYield',formatPercent(longRentYield));\r\n      }\r\n\r\n      function decodeHtmlEntities(value){\r\n        let text = String(value || '');\r\n        const entityMap = {\r\n          '&auml;':'&auml;','&Auml;':'&Auml;','&ouml;':'&ouml;','&Ouml;':'&Ouml;','&uuml;':'&uuml;','&Uuml;':'&Uuml;','&szlig;':'&szlig;',\r\n          '&sup2;':'&sup2;','&sup3;':'&sup3;','&euro;':'&euro;','&amp;':'&','&nbsp;':' ','&quot;':String.fromCharCode(34)\r\n        };\r\n\r\n        for(let i = 0; i < 4; i++){\r\n          Object.keys(entityMap).forEach(entity=>{\r\n            text = text.split(entity).join(entityMap[entity]);\r\n          });\r\n\r\n          const textarea = document.createElement('textarea');\r\n          textarea.innerHTML = text;\r\n          const decoded = textarea.value;\r\n          if(decoded === text) break;\r\n          text = decoded;\r\n        }\r\n\r\n        return text;\r\n      }\r\n\r\n      function cleanForMessage(value){\r\n        return decodeHtmlEntities(String(value || '').trim());\r\n      }\r\n\r\n      function getTextSafe(name){\r\n        const el = byId(name);\r\n        return el ? cleanForMessage(el.textContent || el.value || '') : '';\r\n      }\r\n\r\n      function getInputSafe(name){\r\n        const el = byId(name);\r\n        return el ? cleanForMessage(el.value || el.textContent || '') : '';\r\n      }\r\n\r\n      function getSelectTextSafe(name){\r\n        const el = byId(name);\r\n        if(!el || !el.options || el.selectedIndex < 0) return '';\r\n        return cleanForMessage(el.options[el.selectedIndex].textContent || '');\r\n      }\r\n\r\n      function buildWhatsAppResultMessage(){\r\n        const message = [\r\n          'Guten Tag, ich habe den Plan-B-Renditerechner genutzt und m&ouml;chte mein Ergebnis besprechen.',\r\n          '',\r\n          'Rechenbeispiel:',\r\n          'Ausgew&auml;hltes Modell: ' + getTextSafe('selectedModelResult'),\r\n          'Kaufpreis: ' + getInputSafe('purchasePrice'),\r\n          'Wohnfl&auml;che: ' + getInputSafe('livingArea') + ' m&sup2;',\r\n          'Wohnungstyp \/ Schlafzimmer: ' + getSelectTextSafe('bedroomType'),\r\n          'Jahresumsatz brutto: ' + getTextSafe('grossRevenue'),\r\n          'Netto-Cashflow \/ Jahr: ' + getTextSafe('netCashflow'),\r\n          'Nettorendite Vermietung: ' + getTextSafe('netYield'),\r\n          'Objektwert nach 10 Jahren: ' + getTextSafe('activeValue10Kpi'),\r\n          'Gesamtbild nach 10 Jahren: ' + getTextSafe('activeTotal10Kpi'),\r\n          '',\r\n          'Szenarien:',\r\n          'Saison-Szenario: ' + getTextSafe('activeScenario'),\r\n          'Dauermiet-Szenario: ' + getTextSafe('activeLongRentScenario'),\r\n          'Verbrauchsszenario: ' + getTextSafe('activeHouseholdScenario'),\r\n          'Wertsteigerungsszenario: ' + getTextSafe('activeValueScenario'),\r\n          'Aktive Wertsteigerung p.a.: ' + getTextSafe('activeValueGrowthRate'),\r\n          '',\r\n          'Einnahmen:',\r\n          'Vermietete &Uuml;N Saisonmodell: ' + getTextSafe('bookedNights'),\r\n          'Jahresumsatz Saisonmodell: ' + getTextSafe('seasonRevenueResult'),\r\n          'Jahresumsatz Dauermietmodell: ' + getTextSafe('longRentRevenueResult'),\r\n          'Saisonmodell Einnahmensteigerung p.a.: ' + getTextSafe('seasonGrowthResult'),\r\n          'Dauermietmodell Einnahmensteigerung p.a.: ' + getTextSafe('longRentGrowthResult'),\r\n          '',\r\n          'Einmalige Erwerbskosten:',\r\n          'Erwerbsteuer an Staat Montenegro: ' + getTextSafe('transferTax'),\r\n          'Notarielle \/ technische Kaufnebenkosten: ' + getTextSafe('autoPurchaseCosts'),\r\n          'Gesamtinvestition inkl. einmaliger Nebenkosten: ' + getTextSafe('totalInvestment'),\r\n          '',\r\n          'Laufende Kosten \/ Umlagen:',\r\n          'Strom \/ Jahr: ' + getTextSafe('powerYearly'),\r\n          'Wasser \/ Jahr: ' + getTextSafe('waterYearly'),\r\n          'M&uuml;ll \/ Jahr: ' + getTextSafe('wasteYearly'),\r\n          'Hausverwaltung \/ Jahr: ' + getTextSafe('propertyManagementYearly'),\r\n          'Internet \/ Jahr: ' + getTextSafe('internetYearly'),\r\n          'J&auml;hrliche Immobiliensteuer: ' + getTextSafe('annualPropertyTax'),\r\n          'Eigent&uuml;mer-Fixkosten \/ Jahr: ' + getTextSafe('fixedCostsYearly'),\r\n          'Umlagef&auml;hige Mietnebenkosten \/ Jahr: ' + getTextSafe('passThroughCostsYearly'),\r\n          'Variable Abz&uuml;ge: ' + getTextSafe('variableCosts'),\r\n          '',\r\n          'Amortisation:',\r\n          'Amortisation bei Netto-Cashflow: ' + getTextSafe('payback'),\r\n          '',\r\n          'Wertentwicklung:',\r\n          'Objektwert nach 5 Jahren: ' + getTextSafe('activeValue5'),\r\n          'Objektwert nach 10 Jahren: ' + getTextSafe('activeValue10'),\r\n          'Objektwert nach 20 Jahren: ' + getTextSafe('activeValue20'),\r\n          'Objektwert nach 30 Jahren: ' + getTextSafe('activeValue30'),\r\n          'Kumulierte Mieteinnahmen aktives Modell nach 10 Jahren: ' + getTextSafe('activeIncome10'),\r\n          'Gesamtbild aktives Modell nach 10 Jahren: ' + getTextSafe('activeTotal10'),\r\n          '',\r\n          'Bitte kontaktieren Sie mich zur weiteren Abstimmung.'\r\n        ].join(String.fromCharCode(10));\r\n\r\n        return decodeHtmlEntities(message);\r\n      }\r\n\r\n      function updateWhatsAppResultLink(){\r\n        const link = byId('whatsappResult');\r\n        if(!link) return;\r\n        link.setAttribute('href','#');\r\n      }\r\n\r\n      function updateResult(){\r\n        updateModelVisibility();\r\n        updateResultRows();\r\n        updateRangeOutputs();\r\n        updateResultTone();\r\n\r\n        const purchase = updatePurchaseFields();\r\n        const costs = calculateCostBuckets();\r\n        const season = calculateSeasonRevenue();\r\n        const longRentRevenue = calculateLongRentRevenue();\r\n\r\n        const seasonNet = calculateNetFromGross(season.revenue,'season',costs);\r\n        const longRentNet = calculateNetFromGross(longRentRevenue,'longrent',costs);\r\n\r\n        const seasonYield = purchase.totalInvestment > 0 ? (seasonNet.netCashflow \/ purchase.totalInvestment) * 100 : 0;\r\n        const longRentYield = purchase.totalInvestment > 0 ? (longRentNet.netCashflow \/ purchase.totalInvestment) * 100 : 0;\r\n\r\n        let displayedGross = formatMoney(0);\r\n        let displayedNet = formatMoney(0);\r\n        let displayedYield = formatPercent(0);\r\n        let displayedVariableCosts = formatMoney(0);\r\n        let displayedOwnerFixedCosts = formatMoney(0);\r\n        let paybackBase = 0;\r\n\r\n        if(state.rentalModel === 'season'){\r\n          displayedGross = formatMoney(seasonNet.grossRevenue);\r\n          displayedNet = formatMoney(seasonNet.netCashflow);\r\n          displayedYield = formatPercent(seasonYield);\r\n          displayedVariableCosts = formatMoney(seasonNet.variableCosts);\r\n          displayedOwnerFixedCosts = formatMoney(seasonNet.ownerFixedCosts);\r\n          paybackBase = seasonNet.netCashflow;\r\n        }\r\n\r\n        if(state.rentalModel === 'longrent'){\r\n          displayedGross = formatMoney(longRentNet.grossRevenue);\r\n          displayedNet = formatMoney(longRentNet.netCashflow);\r\n          displayedYield = formatPercent(longRentYield);\r\n          displayedVariableCosts = formatMoney(longRentNet.variableCosts);\r\n          displayedOwnerFixedCosts = formatMoney(longRentNet.ownerFixedCosts);\r\n          paybackBase = longRentNet.netCashflow;\r\n        }\r\n\r\n        if(state.rentalModel === 'compare'){\r\n          displayedGross = formatMoney(seasonNet.grossRevenue) + ' \/ ' + formatMoney(longRentNet.grossRevenue);\r\n          displayedNet = formatMoney(seasonNet.netCashflow) + ' \/ ' + formatMoney(longRentNet.netCashflow);\r\n          displayedYield = formatPercent(seasonYield) + ' \/ ' + formatPercent(longRentYield);\r\n          displayedVariableCosts = formatMoney(seasonNet.variableCosts) + ' \/ ' + formatMoney(longRentNet.variableCosts);\r\n          displayedOwnerFixedCosts = formatMoney(seasonNet.ownerFixedCosts) + ' \/ ' + formatMoney(longRentNet.ownerFixedCosts);\r\n          paybackBase = Math.max(seasonNet.netCashflow,longRentNet.netCashflow);\r\n        }\r\n\r\n        writeText('selectedModelResult',labels[state.rentalModel]);\r\n        writeText('grossRevenue',displayedGross);\r\n        writeText('netCashflow',displayedNet);\r\n        writeText('netYield',displayedYield);\r\n\r\n        const bar = byId('yieldBar');\r\n        if(bar){\r\n          const barValue = state.rentalModel === 'longrent' ? longRentYield : state.rentalModel === 'compare' ? Math.max(seasonYield,longRentYield) : seasonYield;\r\n          bar.style.width = Math.max(0,Math.min(100,barValue * 8)) + '%';\r\n        }\r\n\r\n        writeText('activeScenario',labels[state.seasonScenario]);\r\n        writeText('activeLongRentScenario',labels[state.longRentScenario]);\r\n        writeText('activeHouseholdScenario',labels[state.householdScenario]);\r\n        writeText('activeValueScenario',labels[state.valueScenario]);\r\n        setResultScenarioTone('activeScenario',state.seasonScenario);\r\n        setResultScenarioTone('activeLongRentScenario',state.longRentScenario);\r\n        setResultScenarioTone('activeHouseholdScenario',state.householdScenario);\r\n        setResultScenarioTone('activeValueScenario',state.valueScenario);\r\n        writeText('bookedNights',formatNumber(season.bookedNights) + ' ' + UEN);\r\n\r\n        writeMoney('seasonRevenueResult',season.revenue);\r\n        writeMoney('longRentRevenueResult',longRentRevenue);\r\n        writeText('seasonGrowthResult',formatPercent(incomeGrowth[state.seasonScenario] * 100));\r\n        writeText('longRentGrowthResult',formatPercent(incomeGrowth[state.longRentScenario] * 100));\r\n        writeValue('seasonIncomeGrowthActive',formatPercent(incomeGrowth[state.seasonScenario] * 100));\r\n        writeValue('longRentGrowthActive',formatPercent(incomeGrowth[state.longRentScenario] * 100));\r\n        writeValue('seasonRevenueYear1',formatMoney(season.revenue));\r\n        writeValue('seasonRevenueYear5',formatMoney(season.revenue * Math.pow(1 + incomeGrowth[state.seasonScenario],4)));\r\n        writeMoney('transferTax',purchase.transferTax);\r\n        writeMoney('autoPurchaseCosts',purchase.purchaseCosts);\r\n        writeMoney('totalInvestment',purchase.totalInvestment);\r\n\r\n        if(state.rentalModel === 'longrent'){\r\n          writeText('powerYearly',formatMoney(0) + ' cashflowwirksam \/ ' + formatMoney(costs.powerYearly) + ' ' + UMLAGE);\r\n          writeText('waterYearly',formatMoney(0) + ' cashflowwirksam \/ ' + formatMoney(costs.waterYearly) + ' ' + UMLAGE);\r\n          writeText('wasteYearly',formatMoney(0) + ' cashflowwirksam \/ ' + formatMoney(costs.wasteYearly) + ' ' + UMLAGE);\r\n          writeText('internetYearly',formatMoney(0) + ' cashflowwirksam \/ ' + formatMoney(costs.internetYearly) + ' ' + UMLAGE);\r\n        }else if(state.rentalModel === 'compare'){\r\n          writeText('powerYearly',formatMoney(costs.powerYearly) + ' Saison \/ ' + formatMoney(0) + ' Dauermiete cashflowwirksam');\r\n          writeText('waterYearly',formatMoney(costs.waterYearly) + ' Saison \/ ' + formatMoney(0) + ' Dauermiete cashflowwirksam');\r\n          writeText('wasteYearly',formatMoney(costs.wasteYearly) + ' Saison \/ ' + formatMoney(0) + ' Dauermiete cashflowwirksam');\r\n          writeText('internetYearly',formatMoney(costs.internetYearly) + ' Saison \/ ' + formatMoney(0) + ' Dauermiete cashflowwirksam');\r\n        }else{\r\n          writeMoney('powerYearly',costs.powerYearly);\r\n          writeMoney('waterYearly',costs.waterYearly);\r\n          writeMoney('wasteYearly',costs.wasteYearly);\r\n          writeMoney('internetYearly',costs.internetYearly);\r\n        }\r\n\r\n        writeMoney('propertyManagementYearly',costs.propertyManagementYearly);\r\n        writeMoney('annualPropertyTax',costs.annualPropertyTax);\r\n        writeText('fixedCostsYearly',displayedOwnerFixedCosts);\r\n        writeMoney('passThroughCostsYearly',state.rentalModel === 'season' ? 0 : longRentNet.passThroughCosts);\r\n        writeText('variableCosts',displayedVariableCosts);\r\n        writeText('payback',paybackBase > 0 ? formatNumber(purchase.totalInvestment \/ paybackBase) + ' Jahre' : DASH);\r\n\r\n        const activeValueGrowthRate = getActiveValueGrowthRate();\r\n        const activeValue5 = calculateFutureValue(purchase.purchasePrice,activeValueGrowthRate,5);\r\n        const activeValue10 = calculateFutureValue(purchase.purchasePrice,activeValueGrowthRate,10);\r\n        const activeValue20 = calculateFutureValue(purchase.purchasePrice,activeValueGrowthRate,20);\r\n        const activeValue30 = calculateFutureValue(purchase.purchasePrice,activeValueGrowthRate,30);\r\n        const activeIncome10 = calculateActiveModelRevenue10(season.revenue,longRentRevenue);\r\n        const activeTotal10 = activeValue10 + activeIncome10;\r\n\r\n        writeText('activeValueGrowthRate',formatPercent(activeValueGrowthRate * 100));\r\n        writeMoney('activeValue5',activeValue5);\r\n        writeMoney('activeValue10',activeValue10);\r\n        writeMoney('activeValue20',activeValue20);\r\n        writeMoney('activeValue30',activeValue30);\r\n        writeMoney('activeIncome10',activeIncome10);\r\n        writeMoney('activeTotal10',activeTotal10);\r\n        writeMoney('activeValue10Kpi',activeValue10);\r\n        writeMoney('activeTotal10Kpi',activeTotal10);\r\n\r\n        updateCompareResult(season,seasonNet,seasonYield,longRentNet,longRentYield);\r\n        updateProjectionTables(season.revenue,longRentRevenue);\r\n        try{updateWhatsAppResultLink()}catch(error){}\r\n      }\r\n\r\n      function normalizeMoneyInput(name){\r\n        const el = byId(name);\r\n        if(!el || el.readOnly) return;\r\n        el.value = formatMoney(readNumber(name));\r\n      }\r\n\r\n      function normalizePercentInput(name){\r\n        const el = byId(name);\r\n        if(!el || el.readOnly) return;\r\n        el.value = formatPercent(readNumber(name));\r\n      }\r\n\r\n      function normalizeNumberInput(name){\r\n        const el = byId(name);\r\n        if(!el || el.readOnly) return;\r\n        el.value = formatNumber(readNumber(name));\r\n      }\r\n\r\n      function normalizeEditableField(fullId){\r\n        if(!fullId || !fullId.startsWith('eko20-')) return;\r\n        const name = fullId.replace('eko20-','');\r\n\r\n        const moneyIds = ['purchasePrice','internetMonthly','dayPowerPrice','waterPrice','wasteMonthly','rateHigh','ratePre','ratePost','rateWinter','longRentMonthly','propertyManagementPerSqm'];\r\n        const percentIds = ['nightPowerShare','occHigh','occPre','occPost','occWinter','propertyTaxRate','appWorst','appAverage','appBest'];\r\n        const numberIds = ['livingArea','nightsHigh','nightsPre','nightsPost','nightsWinter','longRentMonths'];\r\n\r\n        if(moneyIds.includes(name)) normalizeMoneyInput(name);\r\n        if(percentIds.includes(name)) normalizePercentInput(name);\r\n        if(numberIds.includes(name)) normalizeNumberInput(name);\r\n      }\r\n\r\n      qsa('[data-rental-model]').forEach(button=>{\r\n        button.addEventListener('click',()=>{\r\n          state.rentalModel = button.dataset.rentalModel;\r\n          updateResult();\r\n        });\r\n      });\r\n\r\n      qsa('[data-scenario]').forEach(button=>{\r\n        button.addEventListener('click',()=>{\r\n          state.seasonScenario = button.dataset.scenario;\r\n          setPressed('[data-scenario]',state.seasonScenario);\r\n          applySeasonPreset(state.seasonScenario);\r\n          updateResult();\r\n        });\r\n      });\r\n\r\n      qsa('[data-longrent-scenario]').forEach(button=>{\r\n        button.addEventListener('click',()=>{\r\n          state.longRentScenario = button.dataset.longrentScenario;\r\n          setPressed('[data-longrent-scenario]',state.longRentScenario);\r\n          applyLongRentPreset(state.longRentScenario);\r\n          updateResult();\r\n        });\r\n      });\r\n\r\n      qsa('[data-household-scenario]').forEach(button=>{\r\n        button.addEventListener('click',()=>{\r\n          state.householdScenario = button.dataset.householdScenario;\r\n          setPressed('[data-household-scenario]',state.householdScenario);\r\n          updateResult();\r\n        });\r\n      });\r\n\r\n      qsa('[data-value-scenario]').forEach(button=>{\r\n        button.addEventListener('click',()=>{\r\n          state.valueScenario = button.dataset.valueScenario;\r\n          setPressed('[data-value-scenario]',state.valueScenario);\r\n          updateResult();\r\n        });\r\n      });\r\n\r\n      const bedroomType = byId('bedroomType');\r\n      if(bedroomType){\r\n        bedroomType.addEventListener('change',()=>{\r\n          applySeasonPreset(state.seasonScenario);\r\n          updateResult();\r\n        });\r\n      }\r\n\r\n      qsa('[data-eko-input]').forEach(input=>{\r\n        input.addEventListener('input',updateResult);\r\n        input.addEventListener('change',updateResult);\r\n        input.addEventListener('blur',()=>{\r\n          normalizeEditableField(input.id);\r\n          updateResult();\r\n        });\r\n      });\r\n\r\n      const resetButton = byId('ekoReset');\r\n      if(resetButton){\r\n        resetButton.addEventListener('click',()=>{\r\n          state.rentalModel = 'season';\r\n          state.seasonScenario = 'average';\r\n          state.longRentScenario = 'average';\r\n          state.householdScenario = 'average';\r\n          state.valueScenario = 'average';\r\n\r\n          writeValue('purchasePrice','160.000,00 &euro;');\r\n          writeValue('livingArea','54,00');\r\n          writeValue('internetMonthly','20,00 &euro;');\r\n          writeValue('dayPowerPrice','0,11 &euro;');\r\n          writeValue('nightPowerShare','20,00%');\r\n          writeValue('waterPrice','1,20 &euro;');\r\n          writeValue('wasteMonthly','4,00 &euro;');\r\n          writeValue('propertyManagementPerSqm','0,00 &euro;');\r\n          writeValue('propertyTaxRate','0,25%');\r\n          writeValue('appWorst','3,00%');\r\n          writeValue('appAverage','6,00%');\r\n          writeValue('appBest','9,00%');\r\n          qsa('[data-platform-fee]').forEach(input=>{input.checked = input.value === 'airbnb'});\r\n          writeValue('managementFee','0');\r\n\r\n          const purchaseType = byId('purchaseType');\r\n          if(purchaseType) purchaseType.value = 'existing';\r\n\r\n          const bedroomType = byId('bedroomType');\r\n          if(bedroomType) bedroomType.value = 'one';\r\n\r\n          const householdTwo = qs('input[name=\"eko20-householdProfile\"][value=\"two\"]');\r\n          if(householdTwo) householdTwo.checked = true;\r\n\r\n          setPressed('[data-scenario]',state.seasonScenario);\r\n          setPressed('[data-longrent-scenario]',state.longRentScenario);\r\n          setPressed('[data-household-scenario]',state.householdScenario);\r\n          setPressed('[data-value-scenario]',state.valueScenario);\r\n          setPressed('[data-rental-model]',state.rentalModel);\r\n\r\n          applySeasonPreset('average');\r\n          applyLongRentPreset('average');\r\n          updateResult();\r\n        });\r\n      }\r\n\r\n      const whatsappButton = byId('whatsappResult');\r\n      if(whatsappButton){\r\n        whatsappButton.addEventListener('click',event=>{\r\n          event.preventDefault();\r\n          const url = 'https:\/\/wa.me\/38230681227?text=' + encodeURIComponent(buildWhatsAppResultMessage());\r\n          window.open(url,'_blank','noopener,noreferrer');\r\n        });\r\n      }\r\n\r\n      const copyButton = byId('ekoCopy');\r\n      if(copyButton){\r\n        copyButton.addEventListener('click',()=>{\r\n          const text = [\r\n            'Plan-B-Renditerechner Ergebnis',\r\n            'Modell: ' + byId('selectedModelResult').textContent,\r\n            'Jahresumsatz brutto: ' + byId('grossRevenue').textContent,\r\n            'Netto-Cashflow \/ Jahr: ' + byId('netCashflow').textContent,\r\n            'Nettorendite: ' + byId('netYield').textContent,\r\n            'Gesamtinvestition: ' + byId('totalInvestment').textContent,\r\n            'Amortisation: ' + byId('payback').textContent\r\n          ].join('\\n');\r\n\r\n          if(navigator.clipboard && navigator.clipboard.writeText){\r\n            navigator.clipboard.writeText(text).then(()=>{copyButton.textContent = 'Kopiert'; setTimeout(()=>copyButton.textContent = 'Ergebnis kopieren',1800)});\r\n          }\r\n        });\r\n      }\r\n\r\n      setPressed('[data-scenario]',state.seasonScenario);\r\n      setPressed('[data-longrent-scenario]',state.longRentScenario);\r\n      setPressed('[data-household-scenario]',state.householdScenario);\r\n      setPressed('[data-value-scenario]',state.valueScenario);\r\n      setPressed('[data-rental-model]',state.rentalModel);\r\n      applySeasonPreset('average');\r\n      applyLongRentPreset('average');\r\n      updateResult();\r\n    })();\r\n  <\/script>\r\n<\/section>\r\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Plan B property \/ yield calculator Calculate short-term rental, permanent rental and value development as a scenario This calculator evaluates a property as a Plan B property: purchase price, type of purchase, purchase tax, notarized ancillary purchase costs, number of bedrooms, seasonal rental, permanent rental, progressive increase in rental income, household consumption, property management, internet, [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":1010152,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1010291","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/pages\/1010291","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/comments?post=1010291"}],"version-history":[{"count":2,"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/pages\/1010291\/revisions"}],"predecessor-version":[{"id":1010295,"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/pages\/1010291\/revisions\/1010295"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/media\/1010152"}],"wp:attachment":[{"href":"https:\/\/ekosphere.me\/en\/wp-json\/wp\/v2\/media?parent=1010291"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}