{"product_id":"real-estate-calculator","title":"Real Estate Calculator","description":"\u003cstyle\u003e\n.rec-calculator {\n  --ink: #0f172a;\n  --muted: #475569;\n  --border: #e2e8f0;\n  --surface: #ffffff;\n  --tint: #f8fafc;\n  --primary: #1d4ed8;\n  --accent: #c2410c;\n  --accent-hover: #9a3412;\n  --chart-1: #1e40af;\n  --chart-2: #0d9488;\n  --chart-3: #7c3aed;\n  --chart-4: #be185d;\n  --chart-5: #334155;\n  width: 100%;\n  max-width: 1200px;\n  margin: 0 auto;\n  color: var(--ink);\n  background: var(--surface);\n  font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n  font-size: 15px;\n  line-height: 1.55;\n  container-type: inline-size;\n  font-variant-numeric: tabular-nums;\n}\n.rec-calculator,\n.rec-calculator *,\n.rec-calculator *::before,\n.rec-calculator *::after {\n  box-sizing: border-box;\n}\n.rec-calculator [class^=\"rec-\"],\n.rec-calculator [class*=\" rec-\"] {\n  min-width: 0;\n}\n.rec-calculator h2,\n.rec-calculator h3,\n.rec-calculator p {\n  margin-top: 0;\n}\n.rec-calculator h2 {\n  margin-bottom: 8px;\n  font-size: 24px;\n  line-height: 1.25;\n  font-weight: 700;\n  letter-spacing: -0.02em;\n}\n.rec-calculator h3 {\n  margin-bottom: 12px;\n  font-size: 18px;\n  line-height: 1.35;\n  font-weight: 650;\n  letter-spacing: -0.01em;\n}\n.rec-calculator a {\n  color: var(--primary);\n  text-decoration-thickness: 1px;\n  text-underline-offset: 2px;\n}\n.rec-calculator a:hover {\n  text-decoration-thickness: 2px;\n}\n.rec-calculator button,\n.rec-calculator input,\n.rec-calculator select {\n  font: inherit;\n}\n.rec-calculator button,\n.rec-calculator input,\n.rec-calculator select,\n.rec-calculator summary,\n.rec-calculator a {\n  -webkit-tap-highlight-color: transparent;\n}\n.rec-header {\n  padding: 24px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);\n}\n.rec-subtitle {\n  max-width: 760px;\n  margin-bottom: 16px;\n  color: var(--muted);\n}\n.rec-pills {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  min-width: 0;\n}\n.rec-pill {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  min-width: 0;\n  padding: 6px 10px;\n  border: 1px solid var(--border);\n  border-radius: 999px;\n  background: var(--surface);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-pill strong {\n  color: var(--ink);\n  font-weight: 700;\n}\n.rec-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  padding: 16px 0;\n  min-width: 0;\n}\n.rec-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  min-height: 44px;\n  padding: 12px 18px;\n  border: 1px solid transparent;\n  border-radius: 6px;\n  cursor: pointer;\n  font-size: 15px;\n  font-weight: 650;\n  line-height: 1;\n  white-space: nowrap;\n  transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;\n}\n.rec-button:hover {\n  box-shadow: 0 2px 5px rgba(15, 23, 42, 0.14);\n  transform: translateY(-1px);\n}\n.rec-button:active {\n  transform: translateY(0);\n}\n.rec-button:focus-visible,\n.rec-calculator input:focus-visible,\n.rec-calculator select:focus-visible,\n.rec-calculator summary:focus-visible,\n.rec-calculator a:focus-visible {\n  outline: 3px solid rgba(29, 78, 216, 0.42);\n  outline-offset: 2px;\n}\n.rec-button-primary {\n  color: #ffffff;\n  background: var(--accent);\n  border-color: var(--accent);\n}\n.rec-button-primary:hover {\n  background: var(--accent-hover);\n  border-color: var(--accent-hover);\n}\n.rec-button-secondary {\n  color: var(--ink);\n  background: var(--surface);\n  border-color: #cbd5e1;\n}\n.rec-button-icon {\n  width: 18px;\n  height: 18px;\n  flex: 0 0 auto;\n}\n.rec-workspace {\n  display: grid;\n  grid-template-columns: 1fr;\n  gap: 24px;\n  min-width: 0;\n}\n.rec-panel,\n.rec-card,\n.rec-chart-card,\n.rec-table-card,\n.rec-advanced,\n.rec-education {\n  min-width: 0;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.06);\n}\n.rec-panel,\n.rec-card,\n.rec-chart-card,\n.rec-table-card,\n.rec-education {\n  padding: 24px;\n}\n.rec-section + .rec-section {\n  margin-top: 24px;\n  padding-top: 24px;\n  border-top: 1px solid var(--border);\n}\n.rec-section-heading {\n  display: flex;\n  align-items: baseline;\n  justify-content: flex-start;\n  gap: 12px;\n  min-width: 0;\n}\n.rec-section-heading p {\n  margin-bottom: 12px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-form-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n  gap: 16px;\n  min-width: 0;\n}\n.rec-field,\n.rec-switch-field {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n  min-width: 0;\n}\n.rec-label-text,\n.rec-group-label {\n  color: var(--ink);\n  font-size: 14px;\n  font-weight: 600;\n  line-height: 1.35;\n}\n.rec-control {\n  width: 100%;\n  min-width: 0;\n  height: 44px;\n  padding: 9px 12px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  color: var(--ink);\n  background: var(--surface);\n  font-size: 15px;\n  line-height: 1.3;\n  box-shadow: inset 0 1px 1px rgba(15, 23, 42, 0.03);\n}\n.rec-control:hover {\n  border-color: #94a3b8;\n}\n.rec-control:disabled {\n  color: #64748b;\n  background: #f1f5f9;\n  cursor: not-allowed;\n}\n.rec-helper {\n  min-height: 40px;\n  margin: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.45;\n}\n.rec-error {\n  display: none;\n  margin-top: -4px;\n  color: #b91c1c;\n  font-size: 13px;\n  font-weight: 600;\n}\n.rec-error[data-visible=\"true\"] {\n  display: block;\n}\n.rec-switch-row {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n  min-height: 44px;\n  padding: 9px 12px;\n  border: 1px solid #cbd5e1;\n  border-radius: 6px;\n  background: var(--surface);\n  cursor: pointer;\n}\n.rec-switch-row input {\n  width: 20px;\n  height: 20px;\n  margin: 0;\n  accent-color: var(--primary);\n  flex: 0 0 auto;\n}\n.rec-switch-copy {\n  display: flex;\n  flex-direction: column;\n  gap: 2px;\n  min-width: 0;\n}\n.rec-switch-copy strong {\n  font-size: 14px;\n  font-weight: 650;\n}\n.rec-switch-copy span {\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-results-panel {\n  background: var(--tint);\n}\n.rec-primary-result {\n  padding: 20px;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  background: #eff6ff;\n}\n.rec-primary-kicker {\n  margin-bottom: 4px;\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 650;\n  text-transform: uppercase;\n  letter-spacing: 0.06em;\n}\n.rec-primary-value {\n  margin-bottom: 4px;\n  color: var(--ink);\n  font-size: 30px;\n  line-height: 1.2;\n  font-weight: 700;\n  letter-spacing: -0.025em;\n  overflow-wrap: anywhere;\n}\n.rec-primary-detail {\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-result-grid {\n  display: grid;\n  grid-template-columns: repeat(2, minmax(0, 1fr));\n  gap: 12px;\n  margin-top: 16px;\n  min-width: 0;\n}\n.rec-result-card {\n  min-width: 0;\n  padding: 16px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n}\n.rec-result-label {\n  display: block;\n  margin-bottom: 4px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 600;\n}\n.rec-result-value {\n  display: block;\n  color: var(--ink);\n  font-size: 20px;\n  line-height: 1.3;\n  font-weight: 700;\n  overflow-wrap: anywhere;\n}\n.rec-result-note {\n  margin: 16px 0 0;\n  padding: 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--surface);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-live {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n.rec-breakdown,\n.rec-chart,\n.rec-table,\n.rec-advanced,\n.rec-education {\n  margin-top: 24px;\n}\n.rec-chart-intro {\n  max-width: 760px;\n  margin-bottom: 16px;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-chart-cluster {\n  display: grid;\n  grid-template-columns: 1fr;\n  justify-items: center;\n  align-items: center;\n  gap: 20px;\n  width: 100%;\n  max-width: 780px;\n  margin: 0 auto;\n  min-width: 0;\n}\n.rec-chart-visual {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  width: 100%;\n  min-width: 0;\n}\n.rec-donut-svg {\n  display: block;\n  width: min(100%, 320px);\n  height: auto;\n  aspect-ratio: 1 \/ 1;\n}\n.rec-line-svg {\n  display: block;\n  width: 100%;\n  max-width: 900px;\n  height: auto;\n  aspect-ratio: 800 \/ 330;\n}\n.rec-chart-legend {\n  display: grid;\n  gap: 10px;\n  width: 100%;\n  max-width: 430px;\n  min-width: 0;\n}\n.rec-legend-row {\n  display: grid;\n  grid-template-columns: 12px minmax(0, max-content) max-content max-content;\n  align-items: center;\n  justify-content: start;\n  column-gap: 12px;\n  row-gap: 4px;\n  min-width: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-legend-swatch {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n}\n.rec-legend-name {\n  color: var(--ink);\n  font-weight: 600;\n  overflow-wrap: anywhere;\n}\n.rec-legend-value,\n.rec-legend-percent {\n  color: var(--ink);\n  font-weight: 650;\n  white-space: nowrap;\n}\n.rec-chart-caption {\n  width: 100%;\n  max-width: 900px;\n  margin: 16px auto 0;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-chart-empty {\n  display: none;\n  width: 100%;\n  max-width: 560px;\n  margin: 8px auto 0;\n  padding: 12px;\n  border: 1px dashed #94a3b8;\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  text-align: center;\n  font-size: 13px;\n  font-weight: 600;\n}\n.rec-chart-empty[data-visible=\"true\"] {\n  display: block;\n}\n.rec-chart-card.rec-safe-stack .rec-chart-cluster {\n  grid-template-columns: 1fr;\n  row-gap: 24px;\n  max-width: 700px;\n}\n.rec-chart-card.rec-safe-stack .rec-chart-caption {\n  margin-top: 20px;\n}\n.rec-chart-card.rec-safe-stack .rec-chart-legend {\n  max-width: 520px;\n}\n.rec-chart-table {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  white-space: nowrap;\n  border: 0;\n}\n.rec-table-header {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: flex-end;\n  justify-content: space-between;\n  gap: 12px;\n  min-width: 0;\n}\n.rec-table-header-copy {\n  min-width: 0;\n}\n.rec-table-control {\n  display: flex;\n  flex-direction: column;\n  gap: 6px;\n  min-width: 180px;\n}\n.rec-table-control .rec-control {\n  height: 40px;\n}\n.rec-table-wrap {\n  width: 100%;\n  margin-top: 16px;\n  overflow-x: auto;\n  overflow-y: visible;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--surface);\n}\n.rec-table-wrap table {\n  width: 100%;\n  min-width: 1180px;\n  border-collapse: collapse;\n  font-variant-numeric: tabular-nums;\n}\n.rec-table-wrap th,\n.rec-table-wrap td {\n  padding: 10px 12px;\n  border-bottom: 1px solid var(--border);\n  text-align: right;\n  white-space: nowrap;\n  font-size: 13px;\n}\n.rec-table-wrap th {\n  color: #ffffff;\n  background: var(--ink);\n  font-weight: 650;\n}\n.rec-table-wrap th:first-child,\n.rec-table-wrap td:first-child {\n  text-align: left;\n}\n.rec-table-wrap tbody tr:nth-child(even) {\n  background: var(--tint);\n}\n.rec-table-wrap tfoot td {\n  color: var(--ink);\n  background: #e2e8f0;\n  font-weight: 700;\n  border-bottom: 0;\n}\n.rec-table-note {\n  margin-top: 16px;\n  padding: 10px 12px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.rec-table-card.rec-safe-table-stack .rec-table-wrap {\n  margin-bottom: 0;\n}\n.rec-table-card.rec-safe-table-stack .rec-table-note {\n  margin-top: 20px;\n}\n.rec-advanced {\n  padding: 0;\n  overflow: visible;\n}\n.rec-advanced summary {\n  display: flex;\n  align-items: center;\n  justify-content: flex-start;\n  gap: 10px;\n  min-height: 52px;\n  padding: 14px 20px;\n  cursor: pointer;\n  color: var(--ink);\n  font-size: 15px;\n  font-weight: 650;\n}\n.rec-advanced summary::marker {\n  color: var(--primary);\n}\n.rec-advanced-content {\n  padding: 0 20px 20px;\n}\n.rec-education {\n  max-width: 100%;\n}\n.rec-education-copy {\n  max-width: 900px;\n}\n.rec-education h3 {\n  margin-top: 28px;\n}\n.rec-education p,\n.rec-education li {\n  color: #334155;\n}\n.rec-education ul {\n  margin: 0 0 16px;\n  padding-left: 22px;\n}\n.rec-education li + li {\n  margin-top: 8px;\n}\n.rec-disclaimer {\n  margin-top: 24px;\n  padding: 12px;\n  border-left: 4px solid var(--primary);\n  background: #eff6ff;\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 600;\n}\n.rec-numeric {\n  font-variant-numeric: tabular-nums;\n}\n@container (min-width: 640px) {\n  .rec-chart-cluster {\n    grid-template-columns: minmax(260px, 320px) minmax(280px, max-content);\n    justify-content: center;\n    justify-items: stretch;\n    column-gap: 24px;\n  }\n  .rec-breakdown .rec-chart-cluster {\n    align-items: end;\n  }\n  .rec-line-cluster {\n    grid-template-columns: 1fr;\n    max-width: 900px;\n  }\n  .rec-line-cluster .rec-chart-legend {\n    grid-template-columns: repeat(3, max-content);\n    justify-content: center;\n    max-width: 900px;\n    column-gap: 24px;\n  }\n  .rec-line-cluster .rec-legend-row {\n    grid-template-columns: 12px max-content max-content;\n  }\n  .rec-line-cluster .rec-legend-percent {\n    display: none;\n  }\n}\n@container (min-width: 900px) {\n  .rec-workspace {\n    grid-template-columns: minmax(0, 1.16fr) minmax(340px, 0.84fr);\n    align-items: start;\n  }\n}\n@container (max-width: 639px) {\n  .rec-header,\n  .rec-panel,\n  .rec-card,\n  .rec-chart-card,\n  .rec-table-card,\n  .rec-education {\n    padding: 16px;\n  }\n  .rec-form-grid,\n  .rec-result-grid {\n    grid-template-columns: 1fr;\n  }\n  .rec-helper {\n    min-height: 0;\n  }\n  .rec-legend-row {\n    grid-template-columns: 12px minmax(0, max-content) max-content;\n  }\n  .rec-legend-percent {\n    grid-column: 2 \/ 4;\n    padding-left: 0;\n  }\n  .rec-toolbar {\n    align-items: stretch;\n  }\n  .rec-button {\n    flex: 1 1 auto;\n  }\n  .rec-button-primary {\n    flex-basis: 100%;\n  }\n  .rec-table-header {\n    align-items: stretch;\n  }\n  .rec-table-control {\n    width: 100%;\n  }\n}\n@media (max-width: 639px) {\n  .rec-calculator .rec-header,\n  .rec-calculator .rec-panel,\n  .rec-calculator .rec-card,\n  .rec-calculator .rec-chart-card,\n  .rec-calculator .rec-table-card,\n  .rec-calculator .rec-education {\n    padding: 16px;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"rec-calculator\" data-calculator-root\u003e\n  \u003csection class=\"rec-header\"\u003e\n    \u003ch2\u003eReal Estate Investment Calculator\u003c\/h2\u003e\n    \u003cp class=\"rec-subtitle\"\u003eModel a rental property from acquisition through sale, including mortgage amortization, operating cash flow, appreciation, equity growth, and annualized return.\u003c\/p\u003e\n    \u003cdiv class=\"rec-pills\" aria-label=\"Live investment summary\"\u003e\n      \u003cspan class=\"rec-pill\"\u003eMonthly mortgage \u003cstrong data-out=\"pillMortgage\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"rec-pill\"\u003eYear-one cash flow \u003cstrong data-out=\"pillCashFlow\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"rec-pill\"\u003eCap rate \u003cstrong data-out=\"pillCapRate\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"rec-pill\"\u003eProjected IRR \u003cstrong data-out=\"pillIrr\"\u003e—\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003cdiv class=\"rec-toolbar\" aria-label=\"Calculator actions\"\u003e\n    \u003cbutton class=\"rec-button rec-button-primary\" type=\"button\" data-action=\"download\"\u003e\n      \u003csvg class=\"rec-button-icon\" viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath fill=\"currentColor\" d=\"M11 3a1 1 0 0 1 2 0v9.59l2.3-2.3a1 1 0 1 1 1.4 1.42l-4 4a1 1 0 0 1-1.4 0l-4-4a1 1 0 1 1 1.4-1.42l2.3 2.3V3ZM5 18a1 1 0 0 1 1 1v1h12v-1a1 1 0 1 1 2 0v2a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1v-2a1 1 0 0 1 1-1Z\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n      \u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"rec-button rec-button-secondary\" type=\"button\" data-action=\"reset\"\u003eReset\u003c\/button\u003e\n  \u003c\/div\u003e\n\n  \u003cdiv class=\"rec-workspace\"\u003e\n    \u003csection class=\"rec-panel rec-inputs-panel\" aria-labelledby=\"rec-inputs-heading\"\u003e\n      \u003ch3 id=\"rec-inputs-heading\"\u003eProperty assumptions\u003c\/h3\u003e\n\n      \u003cdiv class=\"rec-section\"\u003e\n        \u003cdiv class=\"rec-section-heading\"\u003e\n          \u003ch3\u003ePurchase and financing\u003c\/h3\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"rec-form-grid\"\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003ePurchase price\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$136,000.00\" data-field=\"purchasePrice\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eContract price before closing costs or repairs.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"purchasePrice\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-switch-field\"\u003e\n            \u003cspan class=\"rec-group-label\"\u003eFinancing\u003c\/span\u003e\n            \u003cspan class=\"rec-switch-row\"\u003e\n              \u003cinput type=\"checkbox\" checked data-field=\"useLoan\" data-kind=\"boolean\"\u003e\n              \u003cspan class=\"rec-switch-copy\"\u003e\u003cstrong\u003eUse a mortgage\u003c\/strong\u003e\u003cspan\u003eTurn off for an all-cash purchase.\u003c\/span\u003e\u003c\/span\u003e\n            \u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eDown payment\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"25.00%\" data-field=\"downPayment\" data-kind=\"percent\" data-min=\"0\" data-max=\"100\" data-finance-only\u003e\n            \u003cspan class=\"rec-helper\"\u003eShare of purchase price paid at closing.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"downPayment\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eMortgage interest rate\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"4.50%\" data-field=\"interestRate\" data-kind=\"percent\" data-min=\"0\" data-max=\"100\" data-finance-only\u003e\n            \u003cspan class=\"rec-helper\"\u003eNominal annual fixed rate.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"interestRate\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eLoan term\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"number\" inputmode=\"numeric\" min=\"0\" max=\"50\" step=\"1\" value=\"30\" data-field=\"loanTerm\" data-kind=\"integer\" data-min=\"0\" data-max=\"50\" data-finance-only\u003e\n            \u003cspan class=\"rec-helper\"\u003eYears over which the mortgage amortizes.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"loanTerm\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eClosing costs\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$3,000.00\" data-field=\"closingCosts\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eUpfront lender, legal, title, and transaction costs.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"closingCosts\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"rec-section\"\u003e\n        \u003cdiv class=\"rec-section-heading\"\u003e\n          \u003ch3\u003eIncome\u003c\/h3\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"rec-form-grid\"\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eMonthly rent\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$1,200.00\" data-field=\"monthlyRent\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eScheduled rent before vacancy and management.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"monthlyRent\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eOther monthly income\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$0.00\" data-field=\"otherMonthlyIncome\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eParking, storage, laundry, or similar income.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"otherMonthlyIncome\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eVacancy rate\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"5.00%\" data-field=\"vacancyRate\" data-kind=\"percent\" data-min=\"0\" data-max=\"100\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eExpected share of scheduled income not collected.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"vacancyRate\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eManagement fee\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"0.00%\" data-field=\"managementFee\" data-kind=\"percent\" data-min=\"0\" data-max=\"100\"\u003e\n            \u003cspan class=\"rec-helper\"\u003ePercentage of collected rent paid to management.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"managementFee\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"rec-section\"\u003e\n        \u003cdiv class=\"rec-section-heading\"\u003e\n          \u003ch3\u003eAnnual operating expenses\u003c\/h3\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"rec-form-grid\"\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eProperty tax\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$1,500.00\" data-field=\"propertyTax\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eAnnual real estate tax paid by the owner.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"propertyTax\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eInsurance\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$800.00\" data-field=\"insurance\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eAnnual property and landlord insurance.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"insurance\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eHOA fees\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$0.00\" data-field=\"hoa\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eAnnual association or common-area fees.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"hoa\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eMaintenance\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$1,000.00\" data-field=\"maintenance\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eRoutine repairs, servicing, and upkeep.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"maintenance\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eOther operating costs\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$200.00\" data-field=\"otherCosts\" data-kind=\"currency\" data-min=\"0\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eUtilities, licenses, accounting, or reserves.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"otherCosts\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n\n      \u003cdiv class=\"rec-section\"\u003e\n        \u003cdiv class=\"rec-section-heading\"\u003e\n          \u003ch3\u003eExit assumptions\u003c\/h3\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"rec-form-grid\"\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eHolding period\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"number\" inputmode=\"numeric\" min=\"0\" max=\"50\" step=\"1\" value=\"20\" data-field=\"holdingPeriod\" data-kind=\"integer\" data-min=\"0\" data-max=\"50\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eNumber of years before the modeled sale.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"holdingPeriod\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eAnnual appreciation\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"appreciation\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eAnnual change in property value; negative values model decline.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"appreciation\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eSelling costs\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"8.00%\" data-field=\"sellingCosts\" data-kind=\"percent\" data-min=\"0\" data-max=\"100\"\u003e\n            \u003cspan class=\"rec-helper\"\u003eBroker, legal, transfer, and closing costs as a share of sale price.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"sellingCosts\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-switch-field\"\u003e\n            \u003cspan class=\"rec-group-label\"\u003eSale price method\u003c\/span\u003e\n            \u003cspan class=\"rec-switch-row\"\u003e\n              \u003cinput type=\"checkbox\" data-field=\"knowSellPrice\" data-kind=\"boolean\"\u003e\n              \u003cspan class=\"rec-switch-copy\"\u003e\u003cstrong\u003eUse a known sale price\u003c\/strong\u003e\u003cspan\u003eOtherwise the model applies annual appreciation.\u003c\/span\u003e\u003c\/span\u003e\n            \u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eKnown sale price\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$200,000.00\" data-field=\"sellPrice\" data-kind=\"currency\" data-min=\"0\" data-sell-only disabled\u003e\n            \u003cspan class=\"rec-helper\"\u003eExpected gross sale price at the end of the holding period.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"sellPrice\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003caside class=\"rec-panel rec-results-panel\" aria-labelledby=\"rec-results-heading\"\u003e\n      \u003ch3 id=\"rec-results-heading\"\u003eLive results\u003c\/h3\u003e\n      \u003cdiv class=\"rec-primary-result\"\u003e\n        \u003cdiv class=\"rec-primary-kicker\"\u003eAnnualized return (IRR)\u003c\/div\u003e\n        \u003cdiv class=\"rec-primary-value\" data-out=\"primaryIrr\"\u003e—\u003c\/div\u003e\n        \u003cp class=\"rec-primary-detail\" data-out=\"primaryDetail\"\u003eEnter assumptions to calculate the projected return.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"rec-result-grid\"\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eTotal profit at sale\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"totalProfit\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eTotal cash-on-cash return\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"totalCoc\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eYear-one cash flow\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"yearOneCashFlow\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eYear-one cap rate\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"capRate\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eMonthly mortgage\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"monthlyMortgage\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eInitial cash required\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"initialCash\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eTotal rental income\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"totalIncome\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-result-card\"\u003e\n\u003cspan class=\"rec-result-label\"\u003eNet sale proceeds\u003c\/span\u003e\u003cstrong class=\"rec-result-value\" data-out=\"saleProceeds\"\u003e—\u003c\/strong\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"rec-result-note\" data-out=\"interpretation\"\u003eThe model updates as assumptions change.\u003c\/p\u003e\n      \u003cdiv class=\"rec-live\" aria-live=\"polite\" data-live\u003e\u003c\/div\u003e\n    \u003c\/aside\u003e\n  \u003c\/div\u003e\n\n  \u003cdetails class=\"rec-advanced\"\u003e\n    \u003csummary\u003eAdvanced growth and repair assumptions\u003c\/summary\u003e\n    \u003cdiv class=\"rec-advanced-content\"\u003e\n      \u003cdiv class=\"rec-section\"\u003e\n        \u003cdiv class=\"rec-section-heading\"\u003e\u003ch3\u003eRepairs and starting value\u003c\/h3\u003e\u003c\/div\u003e\n        \u003cdiv class=\"rec-form-grid\"\u003e\n          \u003clabel class=\"rec-switch-field\"\u003e\n            \u003cspan class=\"rec-group-label\"\u003eRenovation\u003c\/span\u003e\n            \u003cspan class=\"rec-switch-row\"\u003e\n              \u003cinput type=\"checkbox\" data-field=\"needRepairs\" data-kind=\"boolean\"\u003e\n              \u003cspan class=\"rec-switch-copy\"\u003e\u003cstrong\u003eInclude initial repairs\u003c\/strong\u003e\u003cspan\u003eAdd repair cash and use an after-repair starting value.\u003c\/span\u003e\u003c\/span\u003e\n            \u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eRepair cost\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$10,000.00\" data-field=\"repairCost\" data-kind=\"currency\" data-min=\"0\" data-repair-only disabled\u003e\n            \u003cspan class=\"rec-helper\"\u003eUpfront renovation cash paid before operations.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"repairCost\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\n            \u003cspan class=\"rec-label-text\"\u003eValue after repairs\u003c\/span\u003e\n            \u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"$150,000.00\" data-field=\"afterRepairValue\" data-kind=\"currency\" data-min=\"0\" data-repair-only disabled\u003e\n            \u003cspan class=\"rec-helper\"\u003eEstimated market value immediately after renovations.\u003c\/span\u003e\n            \u003cspan class=\"rec-error\" data-error-for=\"afterRepairValue\"\u003e\u003c\/span\u003e\n          \u003c\/label\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"rec-section\"\u003e\n        \u003cdiv class=\"rec-section-heading\"\u003e\n\u003ch3\u003eAnnual growth rates\u003c\/h3\u003e\n\u003cp\u003eApplied once per year from year two onward.\u003c\/p\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"rec-form-grid\"\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eRent growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"rentGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in monthly rent.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"rentGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eOther income growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"otherIncomeGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in other property income.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"otherIncomeGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eProperty tax growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"taxGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in property tax.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"taxGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eInsurance growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"insuranceGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in insurance cost.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"insuranceGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eHOA growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"hoaGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in association fees.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"hoaGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eMaintenance growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\" data-field=\"maintenanceGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in routine upkeep.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"maintenanceGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n          \u003clabel class=\"rec-field\"\u003e\u003cspan class=\"rec-label-text\"\u003eOther cost growth\u003c\/span\u003e\u003cinput class=\"rec-control rec-numeric\" type=\"text\" inputmode=\"decimal\" value=\"3.00%\n\" data-field=\"otherCostGrowth\" data-kind=\"percent\" data-min=\"-99\" data-max=\"100\"\u003e\u003cspan class=\"rec-helper\"\u003eAnnual change in other operating costs.\u003c\/span\u003e\u003cspan class=\"rec-error\" data-error-for=\"otherCostGrowth\"\u003e\u003c\/span\u003e\u003c\/label\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n  \u003c\/details\u003e\n\n  \u003csection class=\"rec-breakdown rec-chart-card\" data-chart-card=\"breakdown\" aria-labelledby=\"rec-breakdown-heading\"\u003e\n    \u003ch3 id=\"rec-breakdown-heading\"\u003eFirst-year cash outflow breakdown\u003c\/h3\u003e\n    \u003cp class=\"rec-chart-intro\" data-out=\"breakdownIntro\"\u003eMortgage, vacancy, and operating costs are combined to show where first-year cash outflow goes.\u003c\/p\u003e\n    \u003cdiv class=\"rec-chart-cluster\" data-chart-cluster\u003e\n      \u003cdiv class=\"rec-chart-visual\" data-chart-visual\u003e\n        \u003csvg class=\"rec-donut-svg\" viewbox=\"0 0 300 300\" role=\"img\" aria-label=\"First-year cash outflow breakdown\" data-chart-svg=\"donut\"\u003e\u003c\/svg\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"rec-chart-legend\" data-chart-legend=\"donut\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"rec-chart-empty\" data-chart-empty=\"donut\"\u003eEnter values above to see the breakdown.\u003c\/div\u003e\n    \u003cdiv class=\"rec-chart-caption\" data-chart-caption=\"donut\"\u003eThe chart uses the same values shown in the projection table and Excel export.\u003c\/div\u003e\n    \u003cdiv class=\"rec-chart-table\" data-chart-table=\"donut\"\u003e\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"rec-chart rec-chart-card\" data-chart-card=\"equity\" aria-labelledby=\"rec-equity-heading\"\u003e\n    \u003ch3 id=\"rec-equity-heading\"\u003eProperty value, debt, and equity over time\u003c\/h3\u003e\n    \u003cp class=\"rec-chart-intro\"\u003eThe projection combines annual property appreciation with the mortgage amortization schedule. Equity equals projected property value less the remaining loan balance.\u003c\/p\u003e\n    \u003cdiv class=\"rec-chart-cluster rec-line-cluster\" data-chart-cluster\u003e\n      \u003cdiv class=\"rec-chart-visual\" data-chart-visual\u003e\n        \u003csvg class=\"rec-line-svg\" viewbox=\"0 0 800 330\" role=\"img\" aria-label=\"Projected property value, loan balance, and equity by year\" data-chart-svg=\"equity\"\u003e\u003c\/svg\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"rec-chart-legend\" data-chart-legend=\"equity\"\u003e\u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"rec-chart-empty\" data-chart-empty=\"equity\"\u003eEnter a purchase price and holding period to see the projection.\u003c\/div\u003e\n    \u003cdiv class=\"rec-chart-caption\" data-chart-caption=\"equity\"\u003eProjected values will appear after valid assumptions are entered.\u003c\/div\u003e\n    \u003cdiv class=\"rec-chart-table\" data-chart-table=\"equity\"\u003e\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"rec-table rec-table-card\" data-table-card aria-labelledby=\"rec-table-heading\"\u003e\n    \u003cdiv class=\"rec-table-header\"\u003e\n      \u003cdiv class=\"rec-table-header-copy\"\u003e\n        \u003ch3 id=\"rec-table-heading\"\u003eAnnual investment projection\u003c\/h3\u003e\n        \u003cp class=\"rec-chart-intro\"\u003eReview income, expenses, debt reduction, equity, and the return available if the property were sold at each year-end.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003clabel class=\"rec-table-control\"\u003e\n        \u003cspan class=\"rec-label-text\"\u003eRows shown\u003c\/span\u003e\n        \u003cselect class=\"rec-control\" data-table-mode\u003e\n          \u003coption value=\"all\"\u003eEvery year\u003c\/option\u003e\n          \u003coption value=\"key\"\u003eKey years\u003c\/option\u003e\n        \u003c\/select\u003e\n      \u003c\/label\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"rec-table-wrap\" data-table-wrap\u003e\n      \u003ctable\u003e\n        \u003cthead\u003e\n          \u003ctr\u003e\n            \u003cth scope=\"col\"\u003eYear\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eEffective income\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eMortgage\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eOperating expenses\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eCash flow\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eProperty value\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eLoan balance\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eEquity\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eNet sale proceeds\u003c\/th\u003e\n            \u003cth scope=\"col\"\u003eIRR if sold\u003c\/th\u003e\n          \u003c\/tr\u003e\n        \u003c\/thead\u003e\n        \u003ctbody data-table-body\u003e\u003c\/tbody\u003e\n        \u003ctfoot data-table-foot\u003e\u003c\/tfoot\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"rec-table-note\" data-table-note\u003eThe final year cash flow includes net sale proceeds after selling costs and repayment of the remaining mortgage balance.\u003c\/div\u003e\n  \u003c\/section\u003e\n\n  \u003csection class=\"rec-education\" aria-labelledby=\"rec-education-heading\"\u003e\n    \u003cdiv class=\"rec-education-copy\"\u003e\n      \u003ch2 id=\"rec-education-heading\"\u003eHow to use the real estate investment model\u003c\/h2\u003e\n      \u003cp\u003eThis calculator estimates the economics of purchasing, operating, and eventually selling a rental property. It separates operating performance from financing so you can see how rent, vacancy, expenses, mortgage terms, appreciation, and selling costs interact. The output is a planning model rather than a valuation opinion: real transactions can include taxes, lender reserves, capital expenditures, lease-up costs, irregular repairs, and local legal requirements that are not predictable from a single set of assumptions.\u003c\/p\u003e\n\n      \u003ch3\u003ePurchase and financing inputs\u003c\/h3\u003e\n      \u003cp\u003e\u003cstrong\u003ePurchase price\u003c\/strong\u003e is the contract price of the property. Enter the asset price before closing costs and repairs. A higher price increases the cash required, loan amount, and denominator used for the cap rate. \u003cstrong\u003eUse a mortgage\u003c\/strong\u003e determines whether the purchase is financed. When financing is disabled, the full purchase price becomes part of initial cash and mortgage payments and loan balances become zero.\u003c\/p\u003e\n      \u003cp\u003e\u003cstrong\u003eDown payment\u003c\/strong\u003e is entered as a percentage of purchase price. A larger down payment lowers the loan and monthly debt service but increases upfront cash, which can reduce cash-on-cash return even when annual cash flow improves. \u003cstrong\u003eMortgage interest rate\u003c\/strong\u003e is the nominal annual rate used to calculate a level monthly payment. \u003cstrong\u003eLoan term\u003c\/strong\u003e is the amortization period in years. Longer terms usually reduce the payment but slow principal reduction and can increase total interest. \u003cstrong\u003eClosing costs\u003c\/strong\u003e are paid upfront and should include lender, legal, title, inspection, transfer, and other transaction charges that are not financed. The U.S. Consumer Financial Protection Bureau provides practical guidance on comparing mortgage terms and closing disclosures through its \u003ca href=\"https:\/\/www.consumerfinance.gov\/owning-a-home\/\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ehome-buying resources\u003c\/a\u003e.\u003c\/p\u003e\n\n      \u003ch3\u003eIncome and vacancy assumptions\u003c\/h3\u003e\n      \u003cp\u003e\u003cstrong\u003eMonthly rent\u003c\/strong\u003e is scheduled rent before vacancy. Use a supportable market amount rather than the highest advertised rent. \u003cstrong\u003eOther monthly income\u003c\/strong\u003e can include parking, storage, laundry, utility reimbursements, or similar recurring revenue. \u003cstrong\u003eVacancy rate\u003c\/strong\u003e reduces scheduled income to reflect vacant periods and uncollected rent. A higher vacancy rate lowers effective income, NOI, cash flow, cap rate, and IRR. \u003cstrong\u003eManagement fee\u003c\/strong\u003e is modeled as a percentage of income remaining after vacancy. Set it to zero only when self-management is realistic and the owner does not want to assign an economic cost to that work.\u003c\/p\u003e\n      \u003cp\u003eThe advanced \u003cstrong\u003erent growth\u003c\/strong\u003e and \u003cstrong\u003eother income growth\u003c\/strong\u003e inputs apply from year two onward. Positive growth compounds, so small changes become material over long holding periods. Negative values can model rent pressure or planned concessions, but the calculator prevents growth below negative 99% to avoid impossible sign reversals.\u003c\/p\u003e\n\n      \u003ch3\u003eOperating expenses and repairs\u003c\/h3\u003e\n      \u003cp\u003e\u003cstrong\u003eProperty tax, insurance, HOA fees, maintenance, and other operating costs\u003c\/strong\u003e are annual amounts. They are deducted before mortgage payments when calculating net operating income. Maintenance should cover routine upkeep; major replacements such as roofs, HVAC systems, or structural work may require a separate capital expenditure reserve. Each category has its own advanced growth rate because taxes, insurance, association fees, and maintenance do not always rise at the same pace.\u003c\/p\u003e\n      \u003cp\u003eEnable \u003cstrong\u003einitial repairs\u003c\/strong\u003e when renovation cash is required before normal operations. Repair cost increases initial cash invested. Value after repairs becomes the starting property value for appreciation, while the mortgage remains based on purchase price unless the financing structure itself funds renovation. For U.S. rental-property tax concepts, recordkeeping, depreciation, and expense categories, consult \u003ca href=\"https:\/\/www.irs.gov\/publications\/p527\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eIRS Publication 527\u003c\/a\u003e. Tax treatment varies by jurisdiction and individual circumstances.\u003c\/p\u003e\n\n      \u003ch3\u003eExit assumptions\u003c\/h3\u003e\n      \u003cp\u003e\u003cstrong\u003eHolding period\u003c\/strong\u003e controls the number of annual projection rows and the modeled sale year. \u003cstrong\u003eAnnual appreciation\u003c\/strong\u003e compounds the starting property value when a known sale price is not supplied. Appreciation can be negative. \u003cstrong\u003eSelling costs\u003c\/strong\u003e are deducted as a percentage of gross sale price and commonly include brokerage, legal, transfer, staging, and closing charges. Enable \u003cstrong\u003eknown sale price\u003c\/strong\u003e when you have a specific exit estimate; otherwise the model uses appreciation. Net sale proceeds equal sale price minus selling costs and the remaining loan balance. Housing counselors approved by the U.S. Department of Housing and Urban Development can provide independent education on purchase and financing decisions; see the \u003ca href=\"https:\/\/www.hud.gov\/counseling\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eHUD counseling directory\u003c\/a\u003e.\u003c\/p\u003e\n\n      \u003ch3\u003eUnderstanding the results\u003c\/h3\u003e\n      \u003cp\u003e\u003cstrong\u003eAnnualized return (IRR)\u003c\/strong\u003e is the discount rate that sets the net present value of initial cash, annual operating cash flows, and final sale proceeds to zero. It accounts for timing, unlike a simple profit percentage. A positive IRR indicates that modeled inflows exceed the initial investment on a time-adjusted basis; a negative IRR indicates that the sequence of modeled cash flows does not recover the investment at a positive annual rate.\u003c\/p\u003e\n      \u003cp\u003e\u003cstrong\u003eTotal profit at sale\u003c\/strong\u003e is cumulative effective rental income plus final net sale proceeds, less mortgage payments, operating expenses, and initial cash. \u003cstrong\u003eTotal cash-on-cash return\u003c\/strong\u003e divides that profit by initial cash invested; it is cumulative, not annualized. \u003cstrong\u003eYear-one cash flow\u003c\/strong\u003e is effective income less operating expenses and mortgage payments. \u003cstrong\u003eCap rate\u003c\/strong\u003e divides first-year NOI by the starting property value and excludes financing, making it useful for comparing operating yield across properties. \u003cstrong\u003eMonthly mortgage\u003c\/strong\u003e is principal and interest only. \u003cstrong\u003eInitial cash required\u003c\/strong\u003e includes down payment or full cash purchase, closing costs, and enabled repairs.\u003c\/p\u003e\n\n      \u003ch3\u003eReading the charts and projection table\u003c\/h3\u003e\n      \u003cp\u003eThe outflow donut shows how first-year mortgage payments, vacancy loss, management, and operating expense categories share total cash outflow. Categories with zero values are omitted; when more than five categories are active, smaller items are combined into Other. The equity chart shows projected property value, remaining loan balance, and equity. Equity can grow through appreciation and principal repayment, but it can also decline when property value falls.\u003c\/p\u003e\n      \u003cp\u003eThe annual table is the audit trail. Effective income is scheduled rent after vacancy and management. Operating expenses exclude mortgage payments. Cash flow is NOI less debt service, except the final year also includes net sale proceeds. Property value follows the selected appreciation or known-sale assumption, loan balance follows the amortization schedule, and “IRR if sold” recalculates the annualized return for a hypothetical sale at each year-end. Use the “Key years” option for a concise view without changing the underlying calculations or Excel export.\u003c\/p\u003e\n\n      \u003ch3\u003ePractical interpretation and common mistakes\u003c\/h3\u003e\n      \u003cul\u003e\n        \u003cli\u003eStress-test vacancy, maintenance, insurance, and exit price rather than relying on one optimistic case.\u003c\/li\u003e\n        \u003cli\u003eDo not confuse cap rate with cash-on-cash return: cap rate ignores financing, while cash-on-cash depends heavily on leverage and upfront cash.\u003c\/li\u003e\n        \u003cli\u003eInclude realistic selling costs and remaining debt; gross property value is not the cash received at exit.\u003c\/li\u003e\n        \u003cli\u003eSeparate routine operating expenses from irregular capital improvements, and keep source records for each assumption.\u003c\/li\u003e\n        \u003cli\u003eCompare the calculator output with lender documents, local market evidence, professional inspections, and qualified legal and tax advice. Fannie Mae’s \u003ca href=\"https:\/\/www.fanniemae.com\/education\" target=\"_blank\" rel=\"noopener noreferrer\"\u003econsumer education materials\u003c\/a\u003e provide additional background on mortgage readiness and homeownership.\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cp class=\"rec-disclaimer\"\u003eThis calculator provides a general financial projection. It is not personalized investment, lending, legal, accounting, or tax advice, and it does not guarantee property performance or financing approval.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909483569395,"sku":"real-estate-calculator","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/real-estate-calculator.webp?v=1783935431","url":"https:\/\/financialmodelslab.com\/products\/real-estate-calculator","provider":"Financial Models Lab","version":"1.0","type":"link"}