{"product_id":"roi-calculator","title":"Return on Investment (ROI) Calculator","description":"\u003cstyle\u003e\n.roi-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  container-type: inline-size;\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}\n.roi-calculator,\n.roi-calculator *,\n.roi-calculator *::before,\n.roi-calculator *::after {\n  box-sizing: border-box;\n}\n.roi-calculator button,\n.roi-calculator input,\n.roi-calculator select,\n.roi-calculator textarea {\n  font: inherit;\n}\n.roi-calculator button,\n.roi-calculator input,\n.roi-calculator a {\n  -webkit-tap-highlight-color: transparent;\n}\n.roi-calculator h2,\n.roi-calculator h3,\n.roi-calculator p {\n  margin-top: 0;\n}\n.roi-calculator .roi-shell {\n  display: grid;\n  gap: 24px;\n  padding: 24px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--tint);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n}\n.roi-calculator .roi-header {\n  display: grid;\n  gap: 12px;\n  min-width: 0;\n}\n.roi-calculator .roi-header h2 {\n  margin-bottom: 0;\n  font-size: 24px;\n  line-height: 1.25;\n  font-weight: 700;\n  letter-spacing: -.02em;\n}\n.roi-calculator .roi-header-copy {\n  max-width: 760px;\n  margin-bottom: 0;\n  color: var(--muted);\n}\n.roi-calculator .roi-pills {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  min-width: 0;\n}\n.roi-calculator .roi-pill {\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\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  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-pill strong {\n  color: var(--ink);\n  font-weight: 700;\n}\n.roi-calculator .roi-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  gap: 12px;\n  min-width: 0;\n}\n.roi-calculator .roi-button {\n  min-height: 44px;\n  border: 1px solid transparent;\n  border-radius: 6px;\n  padding: 11px 18px;\n  cursor: pointer;\n  font-size: 15px;\n  font-weight: 700;\n  line-height: 1.2;\n  transition: background-color .15s ease, border-color .15s ease, box-shadow .15s ease, transform .15s ease;\n}\n.roi-calculator .roi-button:hover {\n  box-shadow: 0 2px 5px rgba(15, 23, 42, .12);\n}\n.roi-calculator .roi-button:active {\n  transform: translateY(1px);\n}\n.roi-calculator .roi-button:focus-visible,\n.roi-calculator input:focus-visible,\n.roi-calculator select:focus-visible,\n.roi-calculator summary:focus-visible,\n.roi-calculator a:focus-visible {\n  outline: 3px solid rgba(29, 78, 216, .35);\n  outline-offset: 2px;\n}\n.roi-calculator .roi-download {\n  display: inline-flex;\n  align-items: center;\n  gap: 10px;\n  white-space: nowrap;\n  background: var(--accent);\n  color: #ffffff;\n  border-color: var(--accent);\n}\n.roi-calculator .roi-download:hover {\n  background: var(--accent-hover);\n  border-color: var(--accent-hover);\n}\n.roi-calculator .roi-excel-icon {\n  display: inline-grid;\n  place-items: center;\n  width: 27px;\n  height: 22px;\n  border: 1px solid rgba(255, 255, 255, .8);\n  border-radius: 3px;\n  font-size: 13px;\n  font-weight: 800;\n  line-height: 1;\n}\n.roi-calculator .roi-reset {\n  background: var(--surface);\n  color: var(--ink);\n  border-color: #cbd5e1;\n}\n.roi-calculator .roi-workspace {\n  display: grid;\n  gap: 24px;\n  align-items: start;\n  min-width: 0;\n}\n.roi-calculator .roi-workspace \u003e *,\n.roi-calculator .roi-input-grid \u003e *,\n.roi-calculator .roi-results-grid \u003e *,\n.roi-calculator .roi-chart-cluster \u003e *,\n.roi-calculator .roi-time-fields \u003e *,\n.roi-calculator .roi-education-grid \u003e * {\n  min-width: 0;\n}\n.roi-calculator .roi-panel {\n  display: grid;\n  gap: 20px;\n  min-width: 0;\n  padding: 20px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n}\n.roi-calculator .roi-section-head {\n  display: grid;\n  gap: 4px;\n  min-width: 0;\n}\n.roi-calculator .roi-section-head h3 {\n  margin-bottom: 0;\n  font-size: 18px;\n  line-height: 1.35;\n  font-weight: 650;\n}\n.roi-calculator .roi-section-head p {\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.roi-calculator .roi-input-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));\n  gap: 16px;\n  align-items: start;\n  min-width: 0;\n}\n.roi-calculator .roi-field {\n  display: grid;\n  align-content: start;\n  gap: 6px;\n  min-width: 0;\n}\n.roi-calculator .roi-field label,\n.roi-calculator .roi-label {\n  color: var(--ink);\n  font-size: 14px;\n  font-weight: 600;\n}\n.roi-calculator .roi-control {\n  width: 100%;\n  min-height: 44px;\n  border: 1px solid #94a3b8;\n  border-radius: 6px;\n  padding: 10px 12px;\n  background: #ffffff;\n  color: var(--ink);\n  font-size: 15px;\n  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-control:hover {\n  border-color: #64748b;\n}\n.roi-calculator .roi-control[aria-invalid=\"true\"] {\n  border-color: #b91c1c;\n}\n.roi-calculator .roi-helper,\n.roi-calculator .roi-error {\n  min-height: 20px;\n  margin-bottom: 0;\n  font-size: 13px;\n  font-weight: 500;\n  line-height: 1.45;\n}\n.roi-calculator .roi-helper {\n  color: var(--muted);\n}\n.roi-calculator .roi-error {\n  color: #991b1b;\n}\n.roi-calculator .roi-time-choice {\n  display: grid;\n  gap: 8px;\n  min-width: 0;\n  padding: 0;\n  border: 0;\n  margin: 0;\n}\n.roi-calculator .roi-time-choice legend {\n  padding: 0;\n  margin-bottom: 8px;\n  color: var(--ink);\n  font-size: 14px;\n  font-weight: 600;\n}\n.roi-calculator .roi-segmented {\n  display: inline-grid;\n  grid-template-columns: repeat(2, minmax(120px, 1fr));\n  gap: 4px;\n  width: min(100%, 360px);\n  padding: 4px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--tint);\n}\n.roi-calculator .roi-segmented input {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  opacity: 0;\n  clip-path: inset(50%);\n}\n.roi-calculator .roi-segmented label {\n  display: grid;\n  place-items: center;\n  min-height: 38px;\n  padding: 8px 12px;\n  border-radius: 5px;\n  color: var(--muted);\n  cursor: pointer;\n  font-size: 14px;\n  font-weight: 700;\n  text-align: center;\n}\n.roi-calculator .roi-segmented input:checked + label {\n  background: var(--primary);\n  color: #ffffff;\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .12);\n}\n.roi-calculator .roi-segmented input:focus-visible + label {\n  outline: 3px solid rgba(29, 78, 216, .35);\n  outline-offset: 2px;\n}\n.roi-calculator .roi-time-fields {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\n  gap: 16px;\n  min-width: 0;\n}\n.roi-calculator [hidden] {\n  display: none !important;\n}\n.roi-calculator .roi-primary-result {\n  display: grid;\n  gap: 6px;\n  padding: 18px;\n  border: 1px solid #bfdbfe;\n  border-radius: 8px;\n  background: #eff6ff;\n}\n.roi-calculator .roi-primary-label {\n  color: #1e3a8a;\n  font-size: 13px;\n  font-weight: 700;\n  text-transform: uppercase;\n  letter-spacing: .05em;\n}\n.roi-calculator .roi-primary-value {\n  color: var(--ink);\n  font-size: 30px;\n  line-height: 1.1;\n  font-weight: 700;\n  letter-spacing: -.03em;\n  overflow-wrap: anywhere;\n  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-primary-note {\n  margin-bottom: 0;\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n}\n.roi-calculator .roi-results-grid {\n  display: grid;\n  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));\n  gap: 12px;\n  min-width: 0;\n}\n.roi-calculator .roi-result-card {\n  display: grid;\n  align-content: start;\n  gap: 4px;\n  min-width: 0;\n  padding: 14px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n}\n.roi-calculator .roi-result-label {\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 600;\n}\n.roi-calculator .roi-result-value {\n  color: var(--ink);\n  font-size: 20px;\n  line-height: 1.25;\n  font-weight: 700;\n  overflow-wrap: anywhere;\n  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-status {\n  margin-bottom: 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.roi-calculator .roi-breakdown,\n.roi-calculator .roi-table-section,\n.roi-calculator .roi-education {\n  display: grid;\n  gap: 20px;\n  min-width: 0;\n  padding: 20px;\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  background: var(--surface);\n  box-shadow: 0 1px 2px rgba(15, 23, 42, .06);\n}\n.roi-calculator .roi-chart-card {\n  display: grid;\n  gap: 20px;\n  min-width: 0;\n}\n.roi-calculator .roi-chart-cluster {\n  display: grid;\n  justify-content: center;\n  align-items: center;\n  gap: 24px;\n  min-width: 0;\n}\n.roi-calculator .roi-plot-wrap {\n  display: grid;\n  place-items: center;\n  width: min(100%, 320px);\n  aspect-ratio: 1;\n  min-width: 0;\n  margin: 0 auto;\n}\n.roi-calculator .roi-chart-svg {\n  display: block;\n  width: 100%;\n  height: auto;\n  max-width: 320px;\n  overflow: visible;\n}\n.roi-calculator .roi-chart-side {\n  display: grid;\n  align-content: center;\n  gap: 16px;\n  width: min(100%, 420px);\n  min-width: 0;\n}\n.roi-calculator .roi-legend {\n  display: grid;\n  gap: 10px;\n  min-width: 0;\n}\n.roi-calculator .roi-legend-row {\n  display: grid;\n  grid-template-columns: 12px minmax(92px, max-content) max-content max-content;\n  align-items: baseline;\n  justify-content: start;\n  column-gap: 12px;\n  row-gap: 4px;\n  min-width: 0;\n  color: var(--ink);\n  font-size: 13px;\n  font-weight: 600;\n  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-swatch {\n  width: 12px;\n  height: 12px;\n  border-radius: 3px;\n  align-self: center;\n}\n.roi-calculator .roi-legend-amount,\n.roi-calculator .roi-legend-percent {\n  white-space: nowrap;\n}\n.roi-calculator .roi-legend-percent {\n  color: var(--muted);\n}\n.roi-calculator .roi-mini-table,\n.roi-calculator .roi-data-table {\n  width: 100%;\n  border-collapse: collapse;\n  color: var(--ink);\n  font-size: 13px;\n  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-mini-table th,\n.roi-calculator .roi-mini-table td,\n.roi-calculator .roi-data-table th,\n.roi-calculator .roi-data-table td {\n  padding: 10px 12px;\n  border-bottom: 1px solid var(--border);\n  text-align: left;\n  vertical-align: top;\n}\n.roi-calculator .roi-mini-table th,\n.roi-calculator .roi-data-table th {\n  background: var(--tint);\n  color: var(--ink);\n  font-weight: 700;\n}\n.roi-calculator .roi-mini-table td:nth-child(n+2),\n.roi-calculator .roi-mini-table th:nth-child(n+2),\n.roi-calculator .roi-data-table td:last-child,\n.roi-calculator .roi-data-table th:last-child {\n  text-align: right;\n}\n.roi-calculator .roi-chart-empty {\n  display: grid;\n  place-items: center;\n  min-height: 120px;\n  width: min(100%, 520px);\n  margin: 0 auto;\n  padding: 18px;\n  border: 1px dashed #94a3b8;\n  border-radius: 6px;\n  background: var(--tint);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 600;\n  text-align: center;\n}\n.roi-calculator .roi-chart-callout,\n.roi-calculator .roi-table-note {\n  margin-top: 16px;\n  margin-bottom: 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.roi-calculator .roi-chart-card.roi-safe-stack .roi-chart-cluster {\n  grid-template-columns: minmax(0, 1fr);\n  row-gap: 28px;\n}\n.roi-calculator .roi-chart-card.roi-safe-stack .roi-chart-side {\n  margin: 0 auto;\n}\n.roi-calculator .roi-chart-card.roi-safe-stack .roi-chart-callout {\n  margin-top: 20px;\n}\n.roi-calculator .roi-table-overflow {\n  width: 100%;\n  max-width: 100%;\n  overflow-x: auto;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--surface);\n}\n.roi-calculator .roi-data-table {\n  min-width: 650px;\n}\n.roi-calculator .roi-data-table tr:last-child td {\n  border-bottom: 0;\n}\n.roi-calculator .roi-table-section.roi-safe-table-stack .roi-table-note {\n  margin-top: 20px;\n}\n.roi-calculator .roi-education {\n  gap: 24px;\n}\n.roi-calculator .roi-education-grid {\n  display: grid;\n  gap: 24px;\n  min-width: 0;\n}\n.roi-calculator .roi-education-section {\n  min-width: 0;\n}\n.roi-calculator .roi-education h2 {\n  margin-bottom: 0;\n  font-size: 24px;\n  line-height: 1.3;\n  font-weight: 700;\n}\n.roi-calculator .roi-education h3 {\n  margin-bottom: 8px;\n  font-size: 18px;\n  line-height: 1.35;\n  font-weight: 650;\n}\n.roi-calculator .roi-education p {\n  margin-bottom: 12px;\n  color: #334155;\n}\n.roi-calculator .roi-education p:last-child {\n  margin-bottom: 0;\n}\n.roi-calculator .roi-education a {\n  color: #1d4ed8;\n  font-weight: 650;\n  text-decoration-thickness: 1px;\n  text-underline-offset: 2px;\n}\n.roi-calculator .roi-formula {\n  display: block;\n  margin: 12px 0;\n  padding: 12px 14px;\n  border-left: 4px solid var(--primary);\n  border-radius: 0 6px 6px 0;\n  background: #eff6ff;\n  color: var(--ink);\n  font-weight: 700;\n  overflow-wrap: anywhere;\n  font-variant-numeric: tabular-nums;\n}\n.roi-calculator .roi-sr-only {\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@container (min-width: 640px) {\n  .roi-calculator .roi-chart-cluster {\n    grid-template-columns: minmax(260px, 320px) max-content;\n  }\n}\n@container (min-width: 900px) {\n  .roi-calculator .roi-workspace {\n    grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);\n  }\n  .roi-calculator .roi-education-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n}\n@container (max-width: 639px) {\n  .roi-calculator .roi-chart-cluster {\n    grid-template-columns: minmax(0, 1fr);\n    row-gap: 20px;\n  }\n  .roi-calculator .roi-chart-side {\n    margin: 0 auto;\n  }\n  .roi-calculator .roi-legend-row {\n    grid-template-columns: 12px minmax(0, max-content) max-content max-content;\n    column-gap: 8px;\n  }\n}\n@container (max-width: 420px) {\n  .roi-calculator .roi-shell {\n    gap: 20px;\n    padding: 16px;\n  }\n  .roi-calculator .roi-panel,\n  .roi-calculator .roi-breakdown,\n  .roi-calculator .roi-table-section,\n  .roi-calculator .roi-education {\n    padding: 16px;\n  }\n  .roi-calculator .roi-toolbar {\n    align-items: stretch;\n  }\n  .roi-calculator .roi-button {\n    justify-content: center;\n    flex: 1 1 100%;\n    width: 100%;\n  }\n  .roi-calculator .roi-segmented {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n  }\n  .roi-calculator .roi-legend-row {\n    grid-template-columns: 12px minmax(0, 1fr) max-content;\n  }\n  .roi-calculator .roi-legend-percent {\n    grid-column: 2 \/ 4;\n  }\n  .roi-calculator .roi-chart-callout,\n  .roi-calculator .roi-table-note {\n    margin-top: 12px;\n  }\n}\n@media (prefers-reduced-motion: reduce) {\n  .roi-calculator .roi-button {\n    transition: none;\n  }\n}\n\u003c\/style\u003e\n\u003cdiv class=\"roi-calculator\" data-calculator-root\u003e\n  \u003cdiv class=\"roi-shell\"\u003e\n    \u003cheader class=\"roi-header\"\u003e\n      \u003ch2\u003eReturn on Investment Calculator\u003c\/h2\u003e\n      \u003cp class=\"roi-header-copy\"\u003eMeasure investment gain or loss, compare total ROI with a compounded annualized rate, and export the current analysis to a real Excel workbook.\u003c\/p\u003e\n      \u003cdiv class=\"roi-pills\" aria-label=\"Live calculation summary\"\u003e\n        \u003cspan class=\"roi-pill\"\u003eGain\/loss \u003cstrong data-roi-role=\"pill-gain\"\u003e$1,000.00\u003c\/strong\u003e\u003c\/span\u003e\n        \u003cspan class=\"roi-pill\"\u003eROI \u003cstrong data-roi-role=\"pill-roi\"\u003e100.00%\u003c\/strong\u003e\u003c\/span\u003e\n        \u003cspan class=\"roi-pill\"\u003eAnnualized \u003cstrong data-roi-role=\"pill-annualized\"\u003e16.76%\u003c\/strong\u003e\u003c\/span\u003e\n      \u003c\/div\u003e\n    \u003c\/header\u003e\n\n    \u003cdiv class=\"roi-toolbar\" aria-label=\"Calculator actions\"\u003e\n      \u003cbutton class=\"roi-button roi-download\" type=\"button\" data-roi-action=\"download\"\u003e\u003cspan class=\"roi-excel-icon\" aria-hidden=\"true\"\u003eX\u003c\/span\u003e\u003cspan\u003eDownload Excel\u003c\/span\u003e\u003c\/button\u003e\n      \u003cbutton class=\"roi-button roi-reset\" type=\"button\" data-roi-action=\"reset\"\u003eReset\u003c\/button\u003e\n    \u003c\/div\u003e\n\n    \u003cdiv class=\"roi-workspace\"\u003e\n      \u003csection class=\"roi-panel roi-inputs\" aria-labelledby=\"roi-inputs-title\"\u003e\n        \u003cdiv class=\"roi-section-head\"\u003e\n          \u003ch3 id=\"roi-inputs-title\"\u003eInvestment inputs\u003c\/h3\u003e\n          \u003cp\u003eEnter total cost, total proceeds, and the holding period.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-input-grid\"\u003e\n          \u003cdiv class=\"roi-field\"\u003e\n            \u003clabel for=\"roi-invested\"\u003eAmount invested\u003c\/label\u003e\n            \u003cinput class=\"roi-control\" id=\"roi-invested\" data-roi-input=\"invested\" type=\"text\" inputmode=\"decimal\" value=\"$1,000.00\" aria-describedby=\"roi-invested-help roi-invested-error\"\u003e\n            \u003cp class=\"roi-helper\" id=\"roi-invested-help\"\u003eInclude the acquisition cost and any costs you choose to treat as part of the investment.\u003c\/p\u003e\n            \u003cp class=\"roi-error\" id=\"roi-invested-error\" data-roi-error=\"invested\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n\n          \u003cdiv class=\"roi-field\"\u003e\n            \u003clabel for=\"roi-returned\"\u003eAmount returned\u003c\/label\u003e\n            \u003cinput class=\"roi-control\" id=\"roi-returned\" data-roi-input=\"returned\" type=\"text\" inputmode=\"decimal\" value=\"$2,000.00\" aria-describedby=\"roi-returned-help roi-returned-error\"\u003e\n            \u003cp class=\"roi-helper\" id=\"roi-returned-help\"\u003eUse the ending value or proceeds after applying the same cost convention as above.\u003c\/p\u003e\n            \u003cp class=\"roi-error\" id=\"roi-returned-error\" data-roi-error=\"returned\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cfieldset class=\"roi-time-choice\"\u003e\n          \u003clegend\u003eInvestment time\u003c\/legend\u003e\n          \u003cdiv class=\"roi-segmented\"\u003e\n            \u003cinput id=\"roi-mode-dates\" name=\"roi-time-mode\" data-roi-input=\"mode\" type=\"radio\" value=\"dates\" checked\u003e\n            \u003clabel for=\"roi-mode-dates\"\u003eUse dates\u003c\/label\u003e\n            \u003cinput id=\"roi-mode-length\" name=\"roi-time-mode\" data-roi-input=\"mode\" type=\"radio\" value=\"length\"\u003e\n            \u003clabel for=\"roi-mode-length\"\u003eUse length\u003c\/label\u003e\n          \u003c\/div\u003e\n        \u003c\/fieldset\u003e\n\n        \u003cdiv class=\"roi-time-fields\" data-roi-panel=\"dates\"\u003e\n          \u003cdiv class=\"roi-field\"\u003e\n            \u003clabel for=\"roi-start-date\"\u003eFrom\u003c\/label\u003e\n            \u003cinput class=\"roi-control\" id=\"roi-start-date\" data-roi-input=\"startDate\" type=\"date\" value=\"2021-01-01\" aria-describedby=\"roi-start-help roi-start-error\"\u003e\n            \u003cp class=\"roi-helper\" id=\"roi-start-help\"\u003eThe date the investment period begins.\u003c\/p\u003e\n            \u003cp class=\"roi-error\" id=\"roi-start-error\" data-roi-error=\"startDate\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"roi-field\"\u003e\n            \u003clabel for=\"roi-end-date\"\u003eTo\u003c\/label\u003e\n            \u003cinput class=\"roi-control\" id=\"roi-end-date\" data-roi-input=\"endDate\" type=\"date\" value=\"2025-06-22\" aria-describedby=\"roi-end-help roi-end-error\"\u003e\n            \u003cp class=\"roi-helper\" id=\"roi-end-help\"\u003eThe date the investment period ends.\u003c\/p\u003e\n            \u003cp class=\"roi-error\" id=\"roi-end-error\" data-roi-error=\"endDate\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-time-fields\" data-roi-panel=\"length\" hidden\u003e\n          \u003cdiv class=\"roi-field\"\u003e\n            \u003clabel for=\"roi-length\"\u003eInvestment length in years\u003c\/label\u003e\n            \u003cinput class=\"roi-control\" id=\"roi-length\" data-roi-input=\"length\" type=\"text\" inputmode=\"decimal\" value=\"4.474\" aria-describedby=\"roi-length-help roi-length-error\"\u003e\n            \u003cp class=\"roi-helper\" id=\"roi-length-help\"\u003eEnter a positive decimal, such as 1.5 for eighteen months.\u003c\/p\u003e\n            \u003cp class=\"roi-error\" id=\"roi-length-error\" data-roi-error=\"length\"\u003e\u003c\/p\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/section\u003e\n\n      \u003csection class=\"roi-panel roi-results\" aria-labelledby=\"roi-results-title\"\u003e\n        \u003cdiv class=\"roi-section-head\"\u003e\n          \u003ch3 id=\"roi-results-title\"\u003eLive results\u003c\/h3\u003e\n          \u003cp\u003eResults update as soon as an input changes.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-primary-result\"\u003e\n          \u003cspan class=\"roi-primary-label\"\u003eReturn on investment\u003c\/span\u003e\n          \u003cstrong class=\"roi-primary-value\" data-roi-role=\"primary-roi\"\u003e100.00%\u003c\/strong\u003e\n          \u003cp class=\"roi-primary-note\" data-roi-role=\"primary-note\"\u003eThe investment returned twice its original cost.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-results-grid\"\u003e\n          \u003cdiv class=\"roi-result-card\"\u003e\n\u003cspan class=\"roi-result-label\"\u003eInvestment gain\u003c\/span\u003e\u003cstrong class=\"roi-result-value\" data-roi-role=\"gain\"\u003e$1,000.00\u003c\/strong\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"roi-result-card\"\u003e\n\u003cspan class=\"roi-result-label\"\u003eAnnualized ROI\u003c\/span\u003e\u003cstrong class=\"roi-result-value\" data-roi-role=\"annualized\"\u003e16.76%\u003c\/strong\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"roi-result-card\"\u003e\n\u003cspan class=\"roi-result-label\"\u003eInvestment length\u003c\/span\u003e\u003cstrong class=\"roi-result-value\" data-roi-role=\"years\"\u003e4.474 years\u003c\/strong\u003e\n\u003c\/div\u003e\n          \u003cdiv class=\"roi-result-card\"\u003e\n\u003cspan class=\"roi-result-label\"\u003eReturn multiple\u003c\/span\u003e\u003cstrong class=\"roi-result-value\" data-roi-role=\"multiple\"\u003e2.000x\u003c\/strong\u003e\n\u003c\/div\u003e\n        \u003c\/div\u003e\n\n        \u003cp class=\"roi-status\" data-roi-role=\"status\" aria-live=\"polite\"\u003eROI is 100.00%, with a $1,000.00 gain over 4.474 years.\u003c\/p\u003e\n      \u003c\/section\u003e\n    \u003c\/div\u003e\n\n    \u003csection class=\"roi-breakdown\" aria-labelledby=\"roi-breakdown-title\"\u003e\n      \u003cdiv class=\"roi-section-head\"\u003e\n        \u003ch3 id=\"roi-breakdown-title\"\u003eReturn breakdown\u003c\/h3\u003e\n        \u003cp data-roi-role=\"breakdown-subtitle\"\u003eThe ending value consists of the original $1,000.00 invested and $1,000.00 of profit.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roi-chart-card\" data-roi-chart-card\u003e\n        \u003cdiv class=\"roi-chart-cluster\" data-roi-chart-cluster\u003e\n          \u003cdiv class=\"roi-plot-wrap\" data-roi-plot\u003e\u003c\/div\u003e\n          \u003cdiv class=\"roi-chart-side\"\u003e\n            \u003cdiv class=\"roi-legend\" data-roi-legend aria-label=\"Breakdown legend\"\u003e\u003c\/div\u003e\n            \u003cdiv class=\"roi-table-overflow\"\u003e\n              \u003ctable class=\"roi-mini-table\" aria-label=\"Breakdown data table\"\u003e\n                \u003cthead\u003e\u003ctr\u003e\n\u003cth scope=\"col\"\u003eCategory\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eAmount\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eShare\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n                \u003ctbody data-roi-breakdown-body\u003e\u003c\/tbody\u003e\n              \u003c\/table\u003e\n            \u003c\/div\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cp class=\"roi-chart-empty\" data-roi-chart-empty hidden\u003eEnter positive investment values to see the breakdown.\u003c\/p\u003e\n        \u003cp class=\"roi-chart-callout\" data-roi-chart-caption\u003eProfit represents 50.00% of the current ending value. The chart uses the same amounts as the legend, table, and Excel export.\u003c\/p\u003e\n        \u003cp class=\"roi-sr-only\" data-roi-chart-summary\u003e\u003c\/p\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"roi-table-section\" aria-labelledby=\"roi-table-title\"\u003e\n      \u003cdiv class=\"roi-section-head\"\u003e\n        \u003ch3 id=\"roi-table-title\"\u003eCalculation detail\u003c\/h3\u003e\n        \u003cp\u003eA compact audit trail of the current inputs, formulas, and outputs.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roi-table-overflow\" data-roi-table-wrap\u003e\n        \u003ctable class=\"roi-data-table\"\u003e\n          \u003cthead\u003e\u003ctr\u003e\n\u003cth scope=\"col\"\u003eMeasure\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eCalculation basis\u003c\/th\u003e\n\u003cth scope=\"col\"\u003eCurrent value\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n          \u003ctbody data-roi-detail-body\u003e\u003c\/tbody\u003e\n        \u003c\/table\u003e\n      \u003c\/div\u003e\n      \u003cp class=\"roi-table-note\" data-roi-table-note\u003eAnnualized ROI is a compounded rate derived from the start and ending values. It is not the total ROI divided by the number of years.\u003c\/p\u003e\n    \u003c\/section\u003e\n\n    \u003csection class=\"roi-education\" aria-labelledby=\"roi-guide-title\"\u003e\n      \u003cdiv class=\"roi-section-head\"\u003e\n        \u003ch2 id=\"roi-guide-title\"\u003eHow to use and interpret ROI\u003c\/h2\u003e\n        \u003cp\u003eUse the calculator as a consistent comparison framework, then examine risk, timing, fees, taxes, and cash flows separately.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"roi-education-grid\"\u003e\n        \u003cdiv class=\"roi-education-section\"\u003e\n          \u003ch3\u003eWhat this calculator estimates\u003c\/h3\u003e\n          \u003cp\u003eReturn on investment compares the net gain or loss with the amount committed. It answers a focused question: how large was the change in value relative to the investment cost? The result is useful for screening projects, marketing campaigns, acquisitions, equipment purchases, securities, and other decisions that can be reduced to a starting cost and an ending value.\u003c\/p\u003e\n          \u003cspan class=\"roi-formula\"\u003eROI = (Amount returned − Amount invested) ÷ Amount invested × 100%\u003c\/span\u003e\n          \u003cp\u003eA positive result means the amount returned exceeds the amount invested. Zero means the ending value equals the cost. A negative result means part or all of the invested amount was lost. The calculator also reports the dollar gain or loss, the return multiple, and an annualized return so periods of different lengths can be compared on a common one-year basis.\u003c\/p\u003e\n          \u003cp\u003eROI is deliberately simple. It does not identify when intermediate cash flows occurred and it does not adjust automatically for inflation, taxes, financing, or risk. The \u003ca href=\"https:\/\/www.investor.gov\/introduction-investing\/investing-basics\/glossary\/return-investment-roi\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eInvestor.gov ROI glossary\u003c\/a\u003e provides additional context on the metric.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-education-section\"\u003e\n          \u003ch3\u003eEntering the investment amounts\u003c\/h3\u003e\n          \u003cp\u003e\u003cstrong\u003eAmount invested\u003c\/strong\u003e is required and must be greater than zero. Use a consistent definition of cost. For a security, that may include purchase price and transaction fees. For a business initiative, it may include implementation, labor, training, maintenance, and other incremental costs. A higher invested amount lowers ROI when the returned amount is unchanged.\u003c\/p\u003e\n          \u003cp\u003e\u003cstrong\u003eAmount returned\u003c\/strong\u003e is required and may be zero. It should represent the ending value or total proceeds under the same scope used for cost. If dividends, distributions, resale proceeds, or other benefits are included, make that treatment consistent across every scenario being compared. A higher returned amount increases gain, ROI, the return multiple, and—when time is valid—the annualized ROI.\u003c\/p\u003e\n          \u003cp\u003eCommon mistakes include mixing gross revenue with net cost, omitting fees from one option but not another, or counting the original capital as profit. The amount returned should include the value received back; the calculator subtracts the invested amount once to determine gain or loss. The SEC explains how \u003ca href=\"https:\/\/www.sec.gov\/resources-for-investors\/investor-alerts-bulletins\/ib_mutualfundfees\" target=\"_blank\" rel=\"noopener noreferrer\"\u003efees reduce investment returns\u003c\/a\u003e, which is why cost definitions matter.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-education-section\"\u003e\n          \u003ch3\u003eChoosing dates or a length\u003c\/h3\u003e\n          \u003cp\u003e\u003cstrong\u003eUse dates\u003c\/strong\u003e is best when exact start and end dates are known. The calculator counts elapsed days and divides by 365 to obtain a decimal-year holding period. The end date must be later than the start date. Date mode helps prevent rough month-to-year conversions from distorting annualized results.\u003c\/p\u003e\n          \u003cp\u003e\u003cstrong\u003eUse length\u003c\/strong\u003e accepts a positive number of years. Decimals are allowed: 0.5 is six months, 1.25 is fifteen months, and 4.5 is four and a half years. Changing between modes does not reinterpret a displayed label; each mode uses its own actual input. Shorter holding periods produce more extreme annualized rates for the same total ROI, while longer periods spread the same change over more years.\u003c\/p\u003e\n          \u003cp\u003eAnnualization uses compounding: annualized ROI = (amount returned ÷ amount invested)\u003csup\u003e1 ÷ years\u003c\/sup\u003e − 1. This is more comparable than simply dividing total ROI by years. FINRA’s guide to \u003ca href=\"https:\/\/www.finra.org\/investors\/insights\/investment-returns\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ecalculating investment returns\u003c\/a\u003e also explains why a compounded annualized figure is preferable to a simple average.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-education-section\"\u003e\n          \u003ch3\u003eUnderstanding every result\u003c\/h3\u003e\n          \u003cp\u003e\u003cstrong\u003eInvestment gain\u003c\/strong\u003e is amount returned minus amount invested. A positive dollar amount is profit; a negative amount is a loss. \u003cstrong\u003eROI\u003c\/strong\u003e scales that gain or loss by the original cost, making differently sized investments easier to compare. \u003cstrong\u003eReturn multiple\u003c\/strong\u003e is ending value divided by cost: 1.000x is break-even, 2.000x means the ending value is twice the investment, and 0.500x means half the invested value remains.\u003c\/p\u003e\n          \u003cp\u003e\u003cstrong\u003eAnnualized ROI\u003c\/strong\u003e is the constant compounded yearly rate that would transform the invested amount into the returned amount over the selected period. It can be positive, zero, or negative. When the returned amount is zero, the annualized result is −100.00%. When the holding period is missing or invalid, annualized ROI is not calculated.\u003c\/p\u003e\n          \u003cp\u003e\u003cstrong\u003eInvestment length\u003c\/strong\u003e shows the exact decimal years used in annualization. The breakdown chart separates original capital from profit when the investment gained value. In a loss scenario, it separates the remaining returned value from capital lost. The visible legend and breakdown table expose the exact chart amounts and percentages.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-education-section\"\u003e\n          \u003ch3\u003eReading the table and testing assumptions\u003c\/h3\u003e\n          \u003cp\u003eThe calculation detail table is an audit trail rather than a cash-flow schedule. It shows each input, the gain calculation, the return multiple, total ROI, annualized ROI, and the holding period. The Excel download captures the current state at click time, including the same inputs, outputs, breakdown categories, formulas, and explanatory notes.\u003c\/p\u003e\n          \u003cp\u003eTest the model by changing one assumption at a time. Increase the returned amount to see the direct effect on gain and total ROI. Increase the holding period while keeping the values fixed to see annualized ROI decline toward zero. Add omitted costs to the invested amount to understand how sensitive the result is to a more complete cost base. A robust decision usually needs a range of outcomes rather than a single point estimate.\u003c\/p\u003e\n          \u003cp\u003eFor market investments, compare return with the time horizon and the risk taken. FINRA’s overview of \u003ca href=\"https:\/\/www.finra.org\/investors\/investing\/investing-basics\/risk\" target=\"_blank\" rel=\"noopener noreferrer\"\u003einvestment risk\u003c\/a\u003e emphasizes that higher potential return generally comes with higher risk.\u003c\/p\u003e\n        \u003c\/div\u003e\n\n        \u003cdiv class=\"roi-education-section\"\u003e\n          \u003ch3\u003eLimitations and practical cautions\u003c\/h3\u003e\n          \u003cp\u003eSimple ROI assumes one starting outflow and one ending value. It can mislead when there are contributions, withdrawals, dividends paid at different dates, financing payments, or uneven project cash flows. Those situations are better analyzed with time-weighted return, money-weighted return, internal rate of return, net present value, or a full cash-flow model.\u003c\/p\u003e\n          \u003cp\u003eAnnualized ROI does not make two investments equally risky, liquid, or certain. A high percentage based on a very short period may be difficult to repeat. A low but stable return may still fit a particular objective better than a volatile alternative. Inflation can also reduce purchasing-power gains even when nominal ROI is positive.\u003c\/p\u003e\n          \u003cp\u003eUse the same cost and benefit definitions for every option, document assumptions, and distinguish realized results from forecasts. This calculator provides general educational estimates, not personalized investment, tax, accounting, or legal advice.\u003c\/p\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n  \u003c\/div\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909484191987,"sku":"roi-calculator","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/roi-calculator.webp?v=1783935436","url":"https:\/\/financialmodelslab.com\/products\/roi-calculator","provider":"Financial Models Lab","version":"1.0","type":"link"}