{"id":87944,"date":"2026-10-19T16:16:40","date_gmt":"2026-10-19T16:16:40","guid":{"rendered":"https:\/\/dgshape.com\/?page_id=87944"},"modified":"2026-10-19T16:34:05","modified_gmt":"2026-10-19T16:34:05","slug":"roi-calculator","status":"publish","type":"page","link":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/","title":{"rendered":"ROI Calculator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"87944\" class=\"elementor elementor-87944\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6231474 e-con-full e-flex e-con e-parent\" data-id=\"6231474\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-47b0e26 elementor-widget elementor-widget-html\" data-id=\"47b0e26\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n    \r\n    .roi-simulator-page,\r\n.roi-simulator-page * {\r\n  box-sizing: border-box;\r\n  margin: 0;\r\n  padding: 0;\r\n}\r\n.roi-simulator-page {\r\n  padding: 0 20px;\r\n}\r\n.roi-simulator-page__wrapper {\r\n  max-width: 840px;\r\n  margin: 0 auto;\r\n  padding: 40px 0 195px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-body {\r\n  display: flex;\r\n  gap: calc(30 \/ 840 * 100%);\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-body {\r\n    flex-direction: column;\r\n    gap: 0;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form {\r\n  width: calc(380 \/ 840 * 100%);\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-summary {\r\n  width: calc(430 \/ 840 * 100%);\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-summary {\r\n    width: 100%;\r\n  }\r\n}\r\n\r\n.roi-simulator-page #summary-after-calculate {\r\n  display: none;\r\n}\r\n\r\n.roi-simulator-page{\r\n  font-family: \"Lato\", sans-serif;\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n  line-height: 20px;\r\n}\r\n\r\n.roi-simulator-page .mb-none{\r\n  display: block;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .mb-none{\r\n    display: none;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .pc-none{\r\n  display: none;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .pc-none{\r\n    display: block;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-page__wrapper h1{\r\n  font-size: 36px;\r\n  font-weight: 600;\r\n  color: #0073CD;\r\n  margin-bottom: 24px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-page__wrapper h1{\r\n    font-size: 28px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form section{\r\n  background: #F5F5F5;\r\n  padding: 20px;\r\n  margin-bottom: 12px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form section{\r\n    margin-bottom: 20px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form__title{\r\n  font-size: 24px;\r\n  font-weight: 900;\r\n  line-height: 28px;\r\n  color: #0073CD;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form__title-mini{\r\n  font-size: 16px;\r\n  font-weight: 900;\r\n  line-height: 20px;\r\n  color: #0073CD;\r\n  margin-bottom: 12px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form section h3{\r\n  font-size: 16px;\r\n  font-weight: 600;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form__flex-box{\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.roi-simulator-page #select-currency{\r\n  width: 96px;\r\n  background: #F5F5F5;\r\n  border: 1px solid #000;\r\n  border-radius: 0;\r\n  margin-left: 20px;\r\n  padding-left: 8px;\r\n  height: 20px;\r\n  font-size: 12px;\r\n  -webkit-appearance: none;\r\n  appearance: none;\r\n  background-image: url(https:\/\/dgshape.com\/wp-content\/uploads\/india\/2026\/10\/arrow-bottom-black.png);\r\n  background-position: right 6.9px center;\r\n  background-repeat: no-repeat;\r\n  background-size: 8.7px 4.9px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page #select-currency{\r\n    height: 28px;\r\n    font-size: 14px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page section input{\r\n  background: #F5F5F5;\r\n  border-radius: 0;\r\n  font-size: 12px;\r\n  text-align: right;\r\n  padding: 2px 8px;\r\n  line-height: 1;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page section input{\r\n    font-size: 16px;\r\n    padding: 4px 8px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-error-message  {\r\n  color: #FF4949;\r\n  font-size: 8px;\r\n  line-height: 1.3;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan .roi-error-message,.roi-simulator-page .roi-simulator-form-sales-milling-cost .roi-error-message,.roi-simulator-page .roi-simulator-form-sales-loan .roi-error-message{\r\n  width: 100%;\r\n  text-align: right;\r\n  margin-top: 2px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-investment-cost{\r\n  display: flex;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-investment-cost{\r\n    justify-content: space-between;\r\n    gap: 34px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-investment-cost-box{\r\n  width: 49%;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-investment-cost-box .roi-error-message  {\r\n  width: 100%;\r\n  padding-top: 2px;\r\n  padding-left: 28px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-investment-cost-box label{\r\n  width: 100%;\r\n  margin-bottom: 5px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-investment-cost-box label{\r\n    margin-bottom: 6px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-investment-cost-box [data-currency]{\r\n  margin-left: 14px;\r\n  margin-right: 2px;\r\n}\r\n\r\n\r\n.roi-simulator-page .roi-simulator-form-investment-cost-box input{\r\n  width: 80px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-investment-cost-box input{\r\n    width: 77%;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-link_button{\r\n  background: #fff;\r\n  color: #0073CD;\r\n  padding: 4px 30px 4px 12px;\r\n  border: 1px solid #0073CD;\r\n  position: relative;\r\n  margin-top: 10px;\r\n  display: inline-block;\r\n  font-size: 14px;\r\n  line-height: 1;\r\n  transition: all .3s;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-link_button{\r\n    margin-top: 8px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-link_button:hover{\r\n  background: #E2F2FF;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-link_button::after{\r\n  content: \"\";\r\n  display: block;\r\n  width: 5px;\r\n  height: 9px;\r\n  background: url(https:\/\/dgshape.com\/wp-content\/uploads\/india\/2026\/10\/arrow-right-blue.png) no-repeat center center \/ cover;\r\n  position: absolute;\r\n  top: 50%;\r\n  right: 14.9px;\r\n  translate: 0 -50%;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-total{\r\n  margin-top: 19px;\r\n  padding-top: 12px;\r\n  border-top: 1px solid #053998;\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  align-items: flex-end;\r\n  gap: 12px;\r\n}\r\n\r\n.roi-simulator-page #total-initial-investment,.roi-simulator-page #total-sales,.roi-simulator-page #total-material-cost,.roi-simulator-page #total-labor-cost,.roi-simulator-page #total-milling-cost,.roi-simulator-page #monthly-loan-payment{\r\n  font-size: 20px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan{\r\n  border-left: 2px solid #0073CD;\r\n  padding-left: 8px;\r\n  margin-bottom: 12px;\r\n  margin-left: 4px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan-top{\r\n  margin-top: 8px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-plan-top{\r\n    margin-top: 2px;\r\n    margin-bottom: 8px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan-bottom{\r\n  margin-bottom: 0;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-plan-bottom{\r\n    margin-bottom: 20px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan>div{\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-bottom: 8px;\r\n  align-items: center;\r\n  flex-wrap: wrap;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-plan>div{\r\n    margin-bottom: 4px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan-price{\r\n  text-align: right;\r\n  padding-right: 20px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-plan-price{\r\n    width: 39%;\r\n    display: flex;\r\n    justify-content: flex-end;\r\n    gap: 4px;\r\n    align-items: center;\r\n  }\r\n}\r\n\r\n@media screen and (max-width: 860px) {\r\n  .roi-simulator-form-sales-plan label[for=\"input-glass-ceramics-price\"]{\r\n    display: flex;\r\n    flex-direction: column;\r\n  }\r\n}\r\n\r\n.roi-simulator-page label[for=\"input-glass-ceramics-price\"] span{\r\n  font-size: 8px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-plan div input{\r\n  width: 68px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-plan div input{\r\n    width: 90px;\r\n  }\r\n  .roi-simulator-page .roi-simulator-form-sales-plan .roi-simulator-form-sales-plan-price input,.roi-simulator-page .roi-simulator-form-sales-plan .roi-simulator-form-sales-plan-price input {\r\n    width: 90px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost-box{\r\n  padding-right: 20px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost .roi-error-message{\r\n  width: 100%;\r\n}\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost>div{\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-bottom: 14px;\r\n  align-items: center;\r\n  flex-wrap: wrap;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-milling-cost>div{\r\n    margin-bottom: 4px;\r\n  }\r\n  .roi-simulator-page .roi-simulator-form-sales-milling-cost .roi-simulator-form-sales-milling-cost-mb-margin{\r\n    margin-bottom: 8px;\r\n  }\r\n  .roi-simulator-page .roi-simulator-form-sales-milling-cost .roi-simulator-form-sales-milling-cost-sp-wrap{\r\n    position: relative;\r\n    align-items: flex-start;\r\n  }\r\n  .roi-simulator-page .roi-simulator-form-sales-milling-cost-sp-wrap .roi-error-message{\r\n    position: absolute;\r\n    right: 0;\r\n    bottom: 7px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost>div:nth-last-of-type(1){\r\n  margin-bottom: 0;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost>div input{\r\n  width: 68px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-milling-cost>div input{\r\n    width: 80px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page label span{\r\n  font-size: 12px;\r\n  margin-left: 4px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page label span{\r\n    margin-left: 0;\r\n  }\r\n}\r\n\r\n.roi-simulator-page label[for=\"input-material-cost-glass\"]{\r\n  position: relative;\r\n}\r\n@media screen and (max-width: 850px) {\r\n  .roi-simulator-page label[for=\"input-material-cost-glass\"]{\r\n    display: flex;\r\n    flex-direction: column;\r\n    margin-bottom: 0;\r\n  }\r\n  .roi-simulator-page label[for=\"input-material-cost-glass\"] br{\r\n    display: none;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .input-material-cost-glass-mini{\r\n  font-size: 8px;\r\n  margin-left: 0;\r\n  position: absolute;\r\n  left: 0;\r\n  bottom: -10px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost-total{\r\n  flex-wrap: wrap;\r\n  margin-bottom: 0;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost-total>div{\r\n  width: 100%;\r\n  display: flex;\r\n  justify-content: flex-end;\r\n  align-items: flex-end;\r\n  gap: 12px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form .roi-simulator-form-sales-loan{\r\n  margin-bottom: 27px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form .roi-simulator-form-sales-loan{\r\n    margin-bottom: 20px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan>div{\r\n  display: flex;\r\n  justify-content: space-between;\r\n  margin-bottom: 13px;\r\n  align-items: center;\r\n  flex-wrap: wrap;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-loan>div{\r\n    margin-bottom: 8px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan>div:nth-last-of-type(1){\r\n  margin-bottom: 0;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-box{\r\n  padding-right: 13px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-second-box{\r\n  padding-right: 0;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-second-box #input-annual-interest-rate+span{\r\n  font-size: 12px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan div input{\r\n  width: 80px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-loan div #input-down-payment{\r\n    width: 100px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-button span{\r\n  margin-left: 0;\r\n  font-size: 16px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-button label {\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 10px;\r\n  cursor: pointer;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-button input[type=\"checkbox\"] {\r\n  appearance: none;\r\n  -webkit-appearance: none;\r\n  width: 36px;\r\n  height: 20px;\r\n  background-color: #ccc;\r\n  border-radius: 24px;\r\n  position: relative;\r\n  cursor: pointer;\r\n  transition: background-color 0.25s ease;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-button input[type=\"checkbox\"]::before {\r\n  content: \"\";\r\n  width: 16px;\r\n  height: 16px;\r\n  background-color: #fff;\r\n  border-radius: 50%;\r\n  position: absolute;\r\n  top: 2px;\r\n  left: 2px;\r\n  transition: transform 0.25s ease;\r\n  box-shadow: 0 1px 3px rgba(0,0,0,0.3);\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-button input[type=\"checkbox\"]:checked {\r\n  background-color: #0073CD;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-loan-button input[type=\"checkbox\"]:checked::before {\r\n  transform: translateX(16px);\r\n}\r\n\r\n\r\n.roi-simulator-page #button-calculate{\r\n  width: 100%;\r\n  background: #0073CD;\r\n  color:#fff;\r\n  font-size: 24px;\r\n  padding: 30px 0;\r\n  border: none;\r\n  border-radius: 0;\r\n  line-height: 0.667;\r\n  margin-bottom: 11px;\r\n}\r\n.roi-simulator-page #button-calculate:hover{\r\n  background: #065FA4;\r\n  color:#fff;\r\n}\r\n.roi-simulator-page #button-calculate.roi-error{\r\n  background: #99A9B0;\r\n  pointer-events: none;\r\n  cursor: not-allowed;\r\n}\r\n\r\n.roi-simulator-page #button-reset{\r\n  width: 100%;\r\n  color: #0073CD;\r\n  border: 2px solid #0073CD;\r\n  border-radius: 0;\r\n  padding: 12px 0;\r\n  line-height: 1;\r\n  font-weight: 600;\r\n}\r\n\r\n.roi-simulator-page #button-reset:hover,.roi-simulator-page #button-reset:focus{\r\n  background: #0073CD;\r\n  color: #fff;\r\n}\r\n\r\n\r\n\r\n\r\n.roi-simulator-page .roi-simulator-summary{\r\n  background: #E2F2FF;\r\n  padding: 20px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-summary{\r\n    margin-top: 40px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-summary-title{\r\n  font-size: 24px;\r\n  font-weight: 900;\r\n  line-height: 28px;\r\n  color: #0073CD;\r\n  margin-bottom: 20px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-summary-title{\r\n    margin-bottom: 24px;\r\n    text-align: center;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-summary-title-before{\r\n  text-align: center;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-summary-title-after{\r\n  text-align: left;\r\n}\r\n\r\n.roi-simulator-page #summary-before-calculate{\r\n  text-align: center;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-first{\r\n  background: #fff;\r\n  padding: 24px 12px;\r\n  margin-bottom: 20px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-first{\r\n    padding: 15px 12px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-chart{\r\n  background: #fff;\r\n  padding: 6px 12px 0px 0px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-top{\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 14px;\r\n  padding-bottom: 16px;\r\n  border-bottom: 1px solid #053998;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-top{\r\n    margin-bottom: 10px;\r\n    padding-bottom: 6px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-payback-period{\r\n  padding-top: 2px;\r\n  padding-bottom: 12px;\r\n  margin-bottom: 20px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-payback-period{\r\n    padding-bottom: 4px;\r\n    margin-bottom: 15px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-top #summary-initial-cost,.roi-simulator-page .summary-after-calculate-top #summary-payback-period{\r\n  font-size: 28px;\r\n}\r\n\r\n.roi-simulator-page .dollar-box{\r\n  display: flex;\r\n  align-items: center;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-initial-cost span[data-currency]{\r\n  font-size: 20px;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom{\r\n  padding: 8px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-bottom{\r\n    padding: 12px 8px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dl{\r\n  display: flex;\r\n  justify-content: space-between;\r\n  align-items: center;\r\n  margin-bottom: 16px;\r\n  flex-wrap: wrap;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dl:nth-last-of-type(1){\r\n  margin-bottom: 0;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dt{\r\n  width: auto;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-bottom dt{\r\n    width: calc(100% - 40% - 26px);\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dd{\r\n  line-height: 20px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-bottom dd{\r\n    width: auto;\r\n    justify-content: flex-end;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dd{\r\n  font-size: 20px;\r\n  position: relative;\r\n  padding-left: 32px;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-bottom dd{\r\n    padding-left: 22px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dd::after{\r\n  content: \"\";\r\n  display: block;\r\n  width: 24px;\r\n  height: 1px;\r\n  background: #333;\r\n  position: absolute;\r\n  top: 50%;\r\n  left: 0px;\r\n  translate: 0 -50%;\r\n}\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .summary-after-calculate-bottom dd::after{\r\n    width: 16px;\r\n    height: 1px;\r\n    left: 0;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-bottom dd span[data-currency]{\r\n  font-size: 16px;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-blue{\r\n  background: #E2F2FF;\r\n  padding-bottom: 20px;\r\n  margin-bottom: 8px;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-red{\r\n  background: #FFEFEF;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-last{\r\n  margin-top: 20px;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-last h3{\r\n  font-size: 12px;\r\n  margin-bottom: 20px;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-last__button{\r\n  display: block;\r\n  font-size: 24px;\r\n  color: #053998;\r\n  background: #95E03D;\r\n  border-radius: 0;\r\n  padding: 32px 0;\r\n  text-align: center;\r\n  line-height: 0.667;\r\n  transition: all .3s;\r\n}\r\n\r\n.roi-simulator-page .summary-after-calculate-last__button:hover{\r\n  background: #71B323;\r\n  color: #fff;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-unit{\r\n  display: flex;\r\n  align-items: center;\r\n  gap: 2px;\r\n  padding-right: 0;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-unit-pcs{\r\n  font-size: 12px;\r\n}\r\n\r\n.roi-simulator-page span[data-currency]{\r\n  font-size: 12px;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost>.roi-simulator-form-toggle {\r\n  margin: 16px 0 12px;\r\n  display: block;\r\n  background: #FFFFFF;\r\n  padding: 2px 12px;\r\n  width: calc(100% - 20px);\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-toggle__button {\r\n  display: inline-flex;\r\n  align-items: center;\r\n  gap: 6px;\r\n  background: none;\r\n  border: none;\r\n  padding: 0;\r\n  cursor: pointer;\r\n  font-weight: 500;\r\n  background: transparent;\r\n  color: #0073CD;\r\n  font-size: 12px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-toggle__button:hover,.roi-simulator-page .roi-simulator-form-toggle__button:focus{\r\n  background: transparent;\r\n  color: #0073CD;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-toggle__arrow {\r\n  display: inline-block;\r\n  transition: transform 0.3s ease;\r\n  rotate: 90deg;\r\n  width: 4.7px;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-toggle.is-open .roi-simulator-form-toggle__arrow {\r\n  transform: rotate(180deg);\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-toggle__content {\r\n  height: 0;\r\n  overflow: hidden;\r\n  transition: height 0.3s ease, margin-bottom 0.3s ease;\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-toggle__content-inner {\r\n  font-size: 12px;\r\n  line-height: 14px;\r\n}\r\n\r\n\r\n@media screen and (max-width: 768px) {\r\n  .roi-simulator-page .roi-simulator-form-sales-milling-cost .u-mb-22{\r\n    margin-bottom: 22px;\r\n  }\r\n}\r\n\r\n.roi-simulator-page .roi-simulator-form-sales-milling-cost>.u-d-nn{\r\n  display: none;\r\n}\r\n<\/style>\r\n\r\n <div class=\"roi-simulator-page\">\r\n    <div class=\"roi-simulator-page__wrapper\">\r\n      <h1>DWX Series ROI Simulator<\/h1>\r\n      <div class=\"roi-simulator-body\">\r\n        <form class=\"roi-simulator-form\" id=\"roi-simulator-form\">\r\n            <section class=\"roi-simulator-form__flex-box\">\r\n                <h2 class=\"roi-simulator-form__title\">Currency<\/h2>\r\n                <select id=\"select-currency\" aria-label=\"Currency\">\r\n                    <option value=\"\u20b9\" selected>INR (\u20b9)<\/option>\r\n                <\/select>\r\n            <\/section>\r\n\r\n            <section>\r\n                <h2 class=\"roi-simulator-form__title-mini\">Initial Investment Costs<\/h2>\r\n                <div class=\"roi-simulator-form-investment-cost\">\r\n                  <div class=\"roi-simulator-form-investment-cost-box\">\r\n                      <label for=\"input-dwx-price\">DWX Price*<\/label>\r\n                      <span data-currency>\u20b9<\/span>\r\n                      <input id=\"input-dwx-price\" type=\"text\" value=\"\" aria-label=\"DWX Price\" required data-max=\"10000000\" data-min=\"0\">\r\n                      <p class=\"roi-error-message\" data-required=\"input-dwx-price\" style=\"display: none;\">*This field is required.<\/p>\r\n                      <p class=\"roi-error-message\" data-max-min=\"input-dwx-price\" style=\"display: none;\">*Please enter a value between<br class=\"mb-none\"> 0 and 10,000,000<\/p>\r\n                  <\/div>\r\n                  <div class=\"roi-simulator-form-investment-cost-box\">\r\n                      <label for=\"input-other-expenses\">Other Expenses<\/label>\r\n                      <span data-currency>\u20b9<\/span>\r\n                      <input id=\"input-other-expenses\" type=\"text\" value=\"\" aria-label=\"Other Expences\" data-max=\"10000000\" data-min=\"0\">\r\n                      <p class=\"roi-error-message\" data-max-min=\"input-other-expenses\" style=\"display: none;\">*Please enter a value between<br class=\"mb-none\"> 0 and 10,000,000<\/p>\r\n                  <\/div>\r\n                <\/div>\r\n                <a href=\"https:\/\/dgshape.com\/request-a-quote\/\" class=\"roi-simulator-form-link_button\" target=\"_blank\">If you need a quote, click here<\/a>\r\n                <div class=\"roi-simulator-form-total\">\r\n                  <p>Total<\/p>\r\n                  <p class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"total-initial-investment\"><\/span><\/p>\r\n                <\/div>\r\n            <\/section>\r\n\r\n            <section>\r\n                <h2 class=\"roi-simulator-form__title-mini\">Monthly Sales Plan<\/h2>\r\n                <h3>Sales Price \/ Unit*<\/h3>\r\n                <p class=\"roi-error-message\" id=\"sales-price-error-message\" style=\"display: none;\">*At least two fields are required: Zirconia\/Units to Sell or Glass Ceramics\/Units to Sell.<\/p>\r\n                <div class=\"roi-simulator-form-sales-plan roi-simulator-form-sales-plan-top\">\r\n                  <div>\r\n                      <label for=\"input-zirconia-price\">Zirconia<\/label>\r\n                      <div class=\"roi-simulator-form-sales-plan-price\">\r\n                        <span data-currency>\u20b9<\/span>\r\n                        <input id=\"input-zirconia-price\" type=\"text\" value=\"\" aria-label=\"Zirconia\" data-max=\"1000000\" data-min=\"0\">\r\n                      <\/div>\r\n                      <p class=\"roi-error-message\" data-max-min=\"input-zirconia-price\" style=\"display: none;\">*Please enter a value between 0 and 1,000,000<\/p>\r\n                  <\/div>\r\n                  <div>\r\n                      <label for=\"input-zirconia-units\">Units to Sell<\/label>\r\n                      <div class=\"roi-simulator-form-sales-plan-price roi-simulator-form-sales-unit\">\r\n                        <input id=\"input-zirconia-units\" type=\"text\" value=\"\" aria-label=\"Units to Sell\" data-max=\"100000\" data-min=\"0\">\r\n                        <span class=\"roi-simulator-form-sales-unit-pcs\">pcs<\/span>\r\n                      <\/div>\r\n                      <p class=\"roi-error-message\" data-max-min=\"input-zirconia-units\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                  <\/div>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-sales-plan roi-simulator-form-sales-plan-bottom\">\r\n                  <div class=\"roi-simulator-form-sales-plan-bottom-glass-ceramics\">\r\n                      <label for=\"input-glass-ceramics-price\">Glass Ceramics<span>*Only for wet milling machine<\/span><\/label>\r\n                      <div class=\"roi-simulator-form-sales-plan-price\">\r\n                        <span data-currency>\u20b9<\/span>\r\n                        <input id=\"input-glass-ceramics-price\" type=\"text\" value=\"\" aria-label=\"Glass Ceramics\" data-max=\"1000000\" data-min=\"0\">\r\n                      <\/div>\r\n                      <p class=\"roi-error-message\" data-max-min=\"input-glass-ceramics-price\" style=\"display: none;\">*Please enter a value between 0 and 1,000,000<\/p>\r\n                  <\/div>\r\n                  <div>\r\n                      <label for=\"input-glass-ceramics-units\">Units to Sell<\/label>\r\n                      <div class=\"roi-simulator-form-sales-plan-price roi-simulator-form-sales-unit\">\r\n                        <input id=\"input-glass-ceramics-units\" type=\"text\" value=\"\" aria-label=\"Units to Sell\" data-max=\"100000\" data-min=\"0\">\r\n                        <span class=\"roi-simulator-form-sales-unit-pcs\">pcs<\/span>\r\n                      <\/div>\r\n                      <p class=\"roi-error-message\" data-max-min=\"input-glass-ceramics-units\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                  <\/div>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-total\">\r\n                  <p>Total Sales<\/p>\r\n                  <p class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"total-sales\"><\/span><\/p>\r\n                <\/div>\r\n            <\/section>\r\n\r\n            <section class=\"roi-simulator-form-sales-milling-cost\">\r\n                <h2 class=\"roi-simulator-form__title-mini\">Monthly In-house Milling Costs<\/h2>\r\n                <div>\r\n                    <label for=\"input-material-cost-zirconia\">Material Cost \/ Unit<br class=\"pc-none\"><span>(Zirconia)<\/span><\/label>\r\n                    <div class=\"roi-simulator-form-sales-milling-cost-box\">\r\n                      <span data-currency>\u20b9<\/span>\r\n                      <input id=\"input-material-cost-zirconia\" type=\"text\" value=\"\" aria-label=\"Material Cost \/ Unit\" data-max=\"100000\" data-min=\"0\">\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-material-cost-zirconia\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-toggle is-open\">\r\n                  <button type=\"button\" class=\"roi-simulator-form-toggle__button\">\r\n                    <span class=\"roi-simulator-form-toggle__text\">Details<\/span>\r\n                    <span class=\"roi-simulator-form-toggle__arrow\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dgshape.com\/wp-content\/uploads\/india\/2026\/10\/arrow-right-blue.png\" alt=\"\" width=\"8\" height=\"4\" loading=\"lazy\"><\/span>\r\n                  <\/button>\r\n\r\n                  <div class=\"roi-simulator-form-toggle__content\">\r\n                    <div class=\"roi-simulator-form-toggle__content-inner\">\r\n                      Assuming that 1 zirconia disc costs \u20b9100 and you produce 20 dental prostheses, the cost would be \u20b95 (\u20b9100 \/ 20 pieces).\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n                <div class=\"u-mb-22\">\r\n                    <label for=\"input-units-to-mill-zirconia\">Units to Mill<span>(Zirconia)<\/span><\/label>\r\n                    <div class=\"roi-simulator-form-sales-milling-cost-box roi-simulator-form-sales-unit\">\r\n                      <input id=\"input-units-to-mill-zirconia\" type=\"text\" value=\"\" aria-label=\"Units to Mill\" data-max=\"100000\" data-min=\"0\">\r\n                      <span class=\"roi-simulator-form-sales-unit-pcs\">pcs<\/span>\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-units-to-mill-zirconia\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-sales-milling-cost-sp-wrap\">\r\n                    <label for=\"input-material-cost-glass\">Material Cost \/ Unit<span>(Glass Ceramics)<\/span><br><span class=\"input-material-cost-glass-mini\">*Only for wet milling machine<\/span><\/label>\r\n                    <div class=\"roi-simulator-form-sales-milling-cost-box\">\r\n                      <span data-currency>\u20b9<\/span>\r\n                      <input id=\"input-material-cost-glass\" type=\"text\" value=\"\" aria-label=\"Material Cost \/ Unit\" data-max=\"100000\" data-min=\"0\">\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-material-cost-glass\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-toggle\">\r\n                  <button type=\"button\" class=\"roi-simulator-form-toggle__button\">\r\n                    <span class=\"roi-simulator-form-toggle__text\">Details<\/span>\r\n                    <span class=\"roi-simulator-form-toggle__arrow\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/dgshape.com\/wp-content\/uploads\/india\/2026\/10\/arrow-right-blue.png\" alt=\"\" width=\"8\" height=\"4\" loading=\"lazy\"><\/span>\r\n                  <\/button>\r\n\r\n                  <div class=\"roi-simulator-form-toggle__content\">\r\n                    <div class=\"roi-simulator-form-toggle__content-inner\">\r\n                      Assuming that 1 package of glass ceramics materials costs \u20b9100 and it contains 5 blocks, the cost would be \u20b920 (\u20b9100 \/ 5 blocks).\r\n                    <\/div>\r\n                  <\/div>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-sales-milling-cost-mb-margin u-mb-22\">\r\n                    <label for=\"input-units-to-mill-glass\">Units to Mill<span>(Glass Ceramics)<\/span><\/label>\r\n                    <div class=\"roi-simulator-form-sales-milling-cost-box roi-simulator-form-sales-unit\">\r\n                      <input id=\"input-units-to-mill-glass\" type=\"text\" value=\"\" aria-label=\"Units to Mill\" data-max=\"100000\" data-min=\"0\">\r\n                      <span class=\"roi-simulator-form-sales-unit-pcs\">pcs<\/span>\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-units-to-mill-glass\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-sales-milling-cost-mb-margin\">\r\n                    <label for=\"input-labor-cost\">Labor Cost \/ 1 Hour<\/label>\r\n                    <div class=\"roi-simulator-form-sales-milling-cost-box\">\r\n                      <span data-currency>\u20b9<\/span>\r\n                      <input id=\"input-labor-cost\" type=\"text\" value=\"\" aria-label=\"Labor Cost \/ 1 Hour\" data-max=\"100000\" data-min=\"0\">\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-labor-cost\" style=\"display: none;\">*Please enter a value between 0 and 100,000<\/p>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-total roi-simulator-form-sales-milling-cost-total\">\r\n                  <div>\r\n                  <p>Total Material Cost<\/p>\r\n                  <p class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"total-material-cost\"><\/span><\/p>\r\n                <\/div>\r\n                <div>\r\n                  <p>Total Labor Cost<\/p>\r\n                  <p class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"total-labor-cost\"><\/span><\/p>\r\n                <\/div>\r\n                <div>\r\n                  <p>Total In-house Milling Cost<\/p>\r\n                  <p class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"total-milling-cost\"><\/span><\/p>\r\n                <\/div>\r\n                <\/div>\r\n            <\/section>\r\n\r\n            <section class=\"roi-simulator-form-sales-loan\">\r\n                <h2 class=\"roi-simulator-form__title-mini\">Loan<\/h2>\r\n                <div class=\"roi-simulator-form-sales-loan-button\">\r\n                  <label>\r\n                      <span>Use Loan<\/span>\r\n                      <input id=\"input-use-loan\" type=\"checkbox\" checked>\r\n                  <\/label>\r\n                <\/div>\r\n                <div>\r\n                    <label for=\"input-down-payment\">Down Payment<\/label>\r\n                    <div class=\"roi-simulator-form-sales-loan-box\">\r\n                      <span data-currency>\u20b9<\/span>\r\n                      <input id=\"input-down-payment\" type=\"text\" value=\"\" aria-label=\"Down Payment\" data-max=\"10000000\" data-min=\"0\">\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-down-payment\" style=\"display: none;\">*Please enter a value between 0 and 10,000,000<\/p>\r\n                <\/div>\r\n                <div>\r\n                    <label for=\"input-annual-interest-rate\">Annual Interest Rate<\/label>\r\n                    <div class=\"roi-simulator-form-sales-loan-box roi-simulator-form-sales-loan-second-box\">\r\n                      <input id=\"input-annual-interest-rate\" type=\"text\" value=\"\" aria-label=\"Annual Interest Rate\" data-max=\"50\" data-min=\"0\">\r\n                      <span>%<\/span>\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-annual-interest-rate\" style=\"display: none;\">*Please enter a value between 0 and 50<\/p>\r\n                <\/div>\r\n                <div>\r\n                    <label for=\"input-repayment-period\">Repayment Period (Months)<\/label>\r\n                    <div class=\"roi-simulator-form-sales-loan-box\">\r\n                      <input id=\"input-repayment-period\" type=\"text\" value=\"\" aria-label=\"Repayment Period (Month)\" data-max=\"240\" data-min=\"0\">\r\n                    <\/div>\r\n                    <p class=\"roi-error-message\" data-max-min=\"input-repayment-period\" style=\"display: none;\">*Please enter a value between 0 and 240<\/p>\r\n                <\/div>\r\n                <div class=\"roi-simulator-form-total\">\r\n                  <p>Monthly Loan Payment<\/p>\r\n                  <p class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"monthly-loan-payment\"><\/span><\/p>\r\n                <\/div>\r\n            <\/section>\r\n\r\n            <button id=\"button-calculate\" type=\"button\" class=\"roi-error\">Check the results<\/button>\r\n            <button id=\"button-reset\" type=\"reset\">RESET<\/button>\r\n        <\/form>\r\n        <div class=\"roi-simulator-summary\" id=\"summary-wrapper\">\r\n          <h2 class=\"roi-simulator-summary-title\">Summary<\/h2>\r\n          <div id=\"summary-before-calculate\">Enter a number and check the result<\/div>\r\n          <div id=\"summary-after-calculate\">\r\n            <section class=\"summary-after-calculate-first\">\r\n              <dl class=\"summary-after-calculate-top summary-after-calculate-initial-cost\">\r\n                <dt>Initial cost<\/dt>\r\n                <dd class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"summary-initial-cost\"><\/span><\/dd>\r\n              <\/dl>\r\n              <dl class=\"summary-after-calculate-top summary-after-calculate-payback-period\">\r\n                <dt>Payback Period<\/dt>\r\n                <dd><span id=\"summary-payback-period\"><\/span>months<\/dd>\r\n              <\/dl>\r\n              <div class=\"summary-after-calculate-bottom summary-after-calculate-blue\">\r\n                <dl id=\"summary-monthly-profit-during-repaying-loan-wrapper\">\r\n                  <dt>Monthly profit during<br>repaying loan<\/dt>\r\n                  <dd class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"summary-monthly-profit-during-repaying-loan\"><\/span><\/dd>\r\n                <\/dl>\r\n                <dl>\r\n                  <dt id=\"summary-monthly-profit-title\">\r\n                    <span data-use-loan=\"true\">Monthly profit<\/span>\r\n                    <span data-use-loan=\"false\">Monthly profit without loan<\/span>\r\n                  <\/dt>\r\n                  <dd class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"summary-monthly-profit-without-loan\"><\/span><\/dd>\r\n                <\/dl>\r\n                <dl>\r\n                  <dt>Monthly Total Sales<\/dt>\r\n                  <dd class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"summary-monthly-total-sales\"><\/span><\/dd>\r\n                <\/dl>\r\n              <\/div>\r\n              <div class=\"summary-after-calculate-bottom summary-after-calculate-red\">\r\n                <dl>\r\n                  <dt>Monthly In-house Milling Cost<\/dt>\r\n                  <dd class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"summary-monthly-milling-cost\"><\/span><\/dd>\r\n                <\/dl>\r\n                <dl>\r\n                  <dt>Monthly Loan Payment<\/dt>\r\n                  <dd class=\"dollar-box\"><span data-currency>\u20b9<\/span><span id=\"summary-monthly-loan-payment\"><\/span><\/dd>\r\n                <\/dl>\r\n              <\/div>\r\n            <\/section>\r\n            <section class=\"summary-after-calculate-chart\">\r\n              <div id=\"chart-section\"><\/div>\r\n            <\/section>\r\n            <section class=\"summary-after-calculate-last\">\r\n              <h3>The results are only a guideline and may vary depending on the laws, tax systems, and financial systems of each country or region.<\/h3>\r\n              <a href=\"https:\/\/dgshape.com\/request-a-quote\/\" class=\"summary-after-calculate-last__button\" target=\"_blank\">Please contact us here<\/a>\r\n            <\/section>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n  \r\n  <script>\r\n    \/\/   App js \r\n    \r\n    \/**\r\n * \u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u30fc\u4ee5\u5916\u306e\u51e6\u7406\u306eJS\r\n *\/\r\n\r\naddEventListener('DOMContentLoaded', () => {\r\n\r\n  (() => {\r\n    document.querySelectorAll('.roi-simulator-form-toggle').forEach(toggle => {\r\n      const button = toggle.querySelector('.roi-simulator-form-toggle__button');\r\n      const content = toggle.querySelector('.roi-simulator-form-toggle__content');\r\n      const inner = toggle.querySelector('.roi-simulator-form-toggle__content-inner');\r\n\r\n      \/\/ \u521d\u671f\u72b6\u614b\r\n      if (toggle.classList.contains('is-open')) {\r\n        content.style.height = inner.scrollHeight + 'px';\r\n        content.style.marginBottom = '10px';\r\n      } else {\r\n        content.style.height = '0';\r\n        content.style.marginBottom = '0';\r\n      }\r\n\r\n      button.addEventListener('click', () => {\r\n        const isOpen = toggle.classList.contains('is-open');\r\n\r\n        if (isOpen) {\r\n          \/\/ \u9589\u3058\u308b\r\n          content.style.height = inner.scrollHeight + 'px';\r\n          content.style.marginBottom = '10px';\r\n          requestAnimationFrame(() => {\r\n            content.style.height = '0';\r\n            content.style.marginBottom = '0';\r\n          });\r\n          toggle.classList.remove('is-open');\r\n        } else {\r\n          \/\/ \u958b\u304f\r\n          content.style.height = inner.scrollHeight + 'px';\r\n          content.style.marginBottom = '10px';\r\n          toggle.classList.add('is-open');\r\n        }\r\n      });\r\n    });\r\n  })();\r\n\r\n});\r\n\r\n\r\n\/\/ Simulator js \r\n\r\n\/**\r\n * \u30b7\u30df\u30e5\u30ec\u30fc\u30bf\u30fc\u306b\u95a2\u3059\u308b\u51e6\u7406\u306eJS\r\n *\/\r\n\r\naddEventListener('DOMContentLoaded', () => {\r\n\r\n  \/\/ \u753b\u9762\u5e45\u304c768\u672a\u6e80\u304b\u30c1\u30a7\u30c3\u30af\r\n  const IS_MOBILE = window.innerWidth < 768;\r\n\r\n  \/\/ \u5165\u529b\u6b04\u306e\u80cc\u666f\u8272\r\n  const INPUT_BACKGROUND_COLOR_NORMAL = '#F5F5F5';\r\n  const INPUT_BACKGROUND_COLOR_ERROR = '#FFEFEF';\r\n\r\n  \/\/ \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8fd4\u6e08\u671f\u9593\uff08\u6708\uff09\r\n  const REPAYMENT_PERIOD_MONTH_DEFAULT = 36;\r\n\r\n  \/\/ Sales Price\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u521d\u56de\u5165\u529b\u30d5\u30e9\u30b0\uff08\u521d\u56de\u5165\u529b\u6642\u306e\u307f\u30c1\u30a7\u30c3\u30af\u3057\u306a\u3044\uff09\r\n  \/\/ \uff08\u3053\u306e\u5165\u529b\u6b04\u306f\u30bb\u30c3\u30c8\u3067\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u305f\u3081\u3001\u6700\u521d\u306e1\u3064\u76ee\u3092\u5165\u529b\u3057\u305f\u3089\u5fc5\u305a\u30a8\u30e9\u30fc\u306b\u306a\u308b\u305f\u3081\uff09\r\n  let isFirstSalesPriceInput = true;\r\n\r\n  \/\/ Unit\u7cfb\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u9023\u52d5\u51e6\u7406\u4e2d\u30d5\u30e9\u30b0\uff08\u7121\u9650\u30eb\u30fc\u30d7\u9632\u6b62\uff09\r\n  let isSyncingZirconia = false;\r\n  let isSyncingGlass = false;\r\n\r\n  \/\/ ====================================================================================================================================\r\n  \/\/ \u8981\u7d20\u306e\u53d6\u5f97\r\n  \/\/ ====================================================================================================================================\r\n\r\n  \/\/ \u30d5\u30a9\u30fc\u30e0\r\n  const roiSimulatorForm = document.getElementById('roi-simulator-form');\r\n  const allInputs = roiSimulatorForm.querySelectorAll('input[type=\"text\"]');\r\n\r\n  \/\/ \u901a\u8ca8\u9078\u629e\r\n  const selectCurrency = document.getElementById('select-currency'); \/\/ \u30bb\u30ec\u30af\u30c8\u30dc\u30c3\u30af\u30b9\r\n  const currencyLabels = document.querySelectorAll('[data-currency]'); \/\/ \u901a\u8ca8\u30e9\u30d9\u30eb\r\n\r\n  \/\/ \u5165\u529b\u7cfb\r\n  const inputDwxPrice = document.getElementById('input-dwx-price');\r\n  const inputOtherExpenses = document.getElementById('input-other-expenses');\r\n  const inputZirconiaPrice = document.getElementById('input-zirconia-price');\r\n  const inputZirconiaUnits = document.getElementById('input-zirconia-units');\r\n  const inputGlassCeramicsPrice = document.getElementById('input-glass-ceramics-price');\r\n  const inputGlassCeramicsUnits = document.getElementById('input-glass-ceramics-units');\r\n  const inputMaterialCostZirconia = document.getElementById('input-material-cost-zirconia');\r\n  const inputUnitsToMillZirconia = document.getElementById('input-units-to-mill-zirconia');\r\n  const inputMaterialCostGlass = document.getElementById('input-material-cost-glass');\r\n  const inputUnitsToMillGlass = document.getElementById('input-units-to-mill-glass');\r\n  const inputLaborCost = document.getElementById('input-labor-cost');\r\n  const inputUseLoan = document.getElementById('input-use-loan');\r\n  const inputDownPayment = document.getElementById('input-down-payment');\r\n  const inputAnnualInterestRate = document.getElementById('input-annual-interest-rate');\r\n  const inputRepaymentPeriod = document.getElementById('input-repayment-period');\r\n\r\n  \/\/ \u30dc\u30bf\u30f3\u7cfb\r\n  const buttonCalculate = document.getElementById('button-calculate');\r\n  const buttonReset = document.getElementById('button-reset');\r\n\r\n  \/\/ \u7d50\u679c\u8868\u793a\u8981\u7d20\uff08\u30d5\u30a9\u30fc\u30e0\u5185\uff09\r\n  const totalInitialInvestment = document.getElementById('total-initial-investment');\r\n  const totalSales = document.getElementById('total-sales');\r\n  const totalMaterialCost = document.getElementById('total-material-cost');\r\n  const totalLaborCost = document.getElementById('total-labor-cost');\r\n  const totalMillingCost = document.getElementById('total-milling-cost');\r\n  const monthlyLoanPayment = document.getElementById('monthly-loan-payment');\r\n\r\n  \/\/ \u7d50\u679c\u8868\u793a\u8981\u7d20\uff08Summary\u30bb\u30af\u30b7\u30e7\u30f3\uff09\r\n  const summaryWrapper = document.getElementById('summary-wrapper');\r\n  const summaryBeforeCalculate = document.getElementById('summary-before-calculate');\r\n  const summaryAfterCalculate = document.getElementById('summary-after-calculate');\r\n  const summaryInitialCost = document.getElementById('summary-initial-cost');\r\n  const summaryPaybackPeriod = document.getElementById('summary-payback-period');\r\n  const summaryMonthlyProfitDuringRepayingLoan = document.getElementById('summary-monthly-profit-during-repaying-loan');\r\n  const summaryMonthlyProfitDuringRepayingLoanWrapper = document.getElementById('summary-monthly-profit-during-repaying-loan-wrapper');\r\n  const summaryMonthlyProfitWithoutLoan = document.getElementById('summary-monthly-profit-without-loan');\r\n  const summaryMonthlyTotalSales = document.getElementById('summary-monthly-total-sales');\r\n  const summaryMonthlyMillingCost = document.getElementById('summary-monthly-milling-cost');\r\n  const summaryMonthlyLoanPayment = document.getElementById('summary-monthly-loan-payment');\r\n  const summaryTitle = document.querySelector('.roi-simulator-summary-title');\r\n  const summaryMonthlyProfitTitle = document.getElementById('summary-monthly-profit-title');\r\n  const summaryMonthlyProfitTitleWithLoan = summaryMonthlyProfitTitle?.querySelector('[data-use-loan=\"true\"]');\r\n  const summaryMonthlyProfitTitleWithoutLoan = summaryMonthlyProfitTitle?.querySelector('[data-use-loan=\"false\"]');\r\n\r\n  \/\/ \u30b0\u30e9\u30d5\r\n  const chartSection = document.getElementById('chart-section');\r\n\r\n  \/\/ ====================================================================================================================================\r\n  \/\/ \u5404\u7a2e\u51e6\u7406\u306e\u5b9a\u7fa9\uff08\u95a2\u6570\u5b9a\u7fa9\uff09\r\n  \/\/ ====================================================================================================================================\r\n\r\n  \/**\r\n   * \u5168\u89d2\u6570\u5b57\u3092\u534a\u89d2\u306b\u5909\u63db\r\n   *\/\r\n  const convertFullWidthToHalfWidth = (str) => {\r\n    return str.replace(\/[\uff10-\uff19]\/g, (s) => {\r\n      return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);\r\n    });\r\n  };\r\n\r\n  \/**\r\n   * \u6570\u5024\u306e\u307f\u3092\u62bd\u51fa\uff08\u5c0f\u6570\u70b9\u542b\u3080\uff09\r\n   *\/\r\n  const extractNumbers = (str) => {\r\n    \/\/ \u5168\u89d2\u3092\u534a\u89d2\u306b\u5909\u63db\r\n    const halfWidth = convertFullWidthToHalfWidth(str);\r\n    \/\/ \u6570\u5024\u3068\u5c0f\u6570\u70b9\u306e\u307f\u3092\u62bd\u51fa\r\n    let numeric = halfWidth.replace(\/[^\\d.]\/g, '');\r\n    \/\/ \u6700\u521d\u306e\u5c0f\u6570\u70b9\u306e\u307f\u3092\u6b8b\u3057\u3001\u305d\u308c\u4ee5\u964d\u306e\u5c0f\u6570\u70b9\u306f\u524a\u9664\r\n    const firstDotIndex = numeric.indexOf('.');\r\n    if (firstDotIndex !== -1) {\r\n      const beforeDot = numeric.substring(0, firstDotIndex + 1);\r\n      const afterDot = numeric.substring(firstDotIndex + 1).replace(\/\\.\/g, '');\r\n      numeric = beforeDot + afterDot;\r\n    }\r\n    \/\/ \u5148\u982d\u304c\u5c0f\u6570\u70b9\u3067\u59cb\u307e\u308b\u5834\u5408\u30010\u3092\u5148\u982d\u306b\u8ffd\u52a0\r\n    if (numeric.startsWith('.')) {\r\n      numeric = '0' + numeric;\r\n    }\r\n    \/\/ \u5148\u982d\u304c0\u3067\u59cb\u307e\u308a\u3001\u305d\u306e\u5f8c\u306b\u6570\u5b57\u304c\u7d9a\u304f\u5834\u5408\uff08\u4f8b: \"01\", \"02\"\uff09\u3001\u5165\u529b\u3092\u7121\u8996\u3057\u30660\u306e\u307e\u307e\u306b\u3059\u308b\r\n    \/\/ \u305f\u3060\u3057 \"0.\" \u3084 \"0\" \u5358\u4f53\u306f\u8a31\u53ef\r\n    if (numeric.length > 1 && numeric.startsWith('0') && numeric[1] !== '.') {\r\n      numeric = '0';\r\n    }\r\n    return numeric;\r\n  };\r\n\r\n  \/**\r\n   * \u30ab\u30f3\u30de\u3092\u524a\u9664\u3057\u3066\u6570\u5024\u6587\u5b57\u5217\u3092\u8fd4\u3059\r\n   *\/\r\n  const removeCommas = (str) => {\r\n    return str.replace(\/,\/g, '');\r\n  };\r\n\r\n  \/**\r\n   * \u6570\u5024\u6587\u5b57\u5217\u306b\u30ab\u30f3\u30de\u3092\u8ffd\u52a0\r\n   *\/\r\n  const addCommas = (str) => {\r\n    \/\/ \u30ab\u30f3\u30de\u3092\u524a\u9664\r\n    const withoutCommas = removeCommas(str);\r\n    \/\/ \u5c0f\u6570\u70b9\u3067\u5206\u5272\r\n    const parts = withoutCommas.split('.');\r\n    \/\/ \u6574\u6570\u90e8\u5206\u306b\u30ab\u30f3\u30de\u3092\u8ffd\u52a0\r\n    parts[0] = parts[0].replace(\/\\B(?=(\\d{3})+(?!\\d))\/g, ',');\r\n    \/\/ \u7d50\u5408\u3057\u3066\u8fd4\u3059\r\n    return parts.join('.');\r\n  };\r\n\r\n  \/**\r\n   * \u73fe\u5728\u306e\u901a\u8ca8\u3092\u53cd\u6620\r\n   *\/\r\n  const reflectCurrentCurrency = () => {\r\n    const selectedCurrency = selectCurrency.value;\r\n    currencyLabels.forEach(label => {\r\n      label.textContent = selectedCurrency;\r\n    });\r\n  };\r\n\r\n  \/**\r\n   * Initial Investment Cost \u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateTotalInitialInvestment = () => {\r\n    \/\/ \u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\uff1a\u95a2\u9023\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u8a08\u7b97\u3092\u30b9\u30ad\u30c3\u30d7\r\n    if (hasErrorForInputs([inputDwxPrice, inputOtherExpenses])) {\r\n      return;\r\n    }\r\n    const dwxPrice = Number(removeCommas(inputDwxPrice.value)) || 0;\r\n    const otherExpenses = Number(removeCommas(inputOtherExpenses.value)) || 0;\r\n    const total = dwxPrice + otherExpenses;\r\n    totalInitialInvestment.textContent = total.toLocaleString('en-IN');\r\n    \/\/ Monthly Loan Payment\u3082\u518d\u8a08\u7b97\r\n    calculateMonthlyLoanPayment();\r\n  };\r\n\r\n  \/**\r\n   * Monthly Sales Plan \u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateTotalMonthlySalesPlan = () => {\r\n    \/\/ \u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\uff1aSales Price\u30bb\u30c3\u30c8\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u307e\u305f\u306f\u95a2\u9023\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u8a08\u7b97\u3092\u30b9\u30ad\u30c3\u30d7\r\n    const salesPriceErrorMessage = document.getElementById('sales-price-error-message');\r\n    const hasSalesPriceError = salesPriceErrorMessage && salesPriceErrorMessage.style.display === 'block';\r\n    if (hasSalesPriceError || hasErrorForInputs([inputZirconiaPrice, inputZirconiaUnits, inputGlassCeramicsPrice, inputGlassCeramicsUnits])) {\r\n      return;\r\n    }\r\n    const zirconiaPrice = Number(removeCommas(inputZirconiaPrice.value)) || 0;\r\n    const zirconiaUnits = Number(removeCommas(inputZirconiaUnits.value)) || 0;\r\n    const glassCeramicsPrice = Number(removeCommas(inputGlassCeramicsPrice.value)) || 0;\r\n    const glassCeramicsUnits = Number(removeCommas(inputGlassCeramicsUnits.value)) || 0;\r\n    const total = (zirconiaPrice * zirconiaUnits) + (glassCeramicsPrice * glassCeramicsUnits);\r\n    totalSales.textContent = total.toLocaleString('en-IN');\r\n  };\r\n\r\n  \/**\r\n   * Total Material Cost \u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateTotalMaterialCost = () => {\r\n    \/\/ \u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\uff1a\u95a2\u9023\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u8a08\u7b97\u3092\u30b9\u30ad\u30c3\u30d7\r\n    if (hasErrorForInputs([inputMaterialCostZirconia, inputUnitsToMillZirconia, inputMaterialCostGlass, inputUnitsToMillGlass])) {\r\n      return;\r\n    }\r\n    const materialCostZirconia = Number(removeCommas(inputMaterialCostZirconia.value)) || 0;\r\n    const unitsToMillZirconia = Number(removeCommas(inputUnitsToMillZirconia.value)) || 0;\r\n    const materialCostGlass = Number(removeCommas(inputMaterialCostGlass.value)) || 0;\r\n    const unitsToMillGlass = Number(removeCommas(inputUnitsToMillGlass.value)) || 0;\r\n    const total = (materialCostZirconia * unitsToMillZirconia) + (materialCostGlass * unitsToMillGlass);\r\n    totalMaterialCost.textContent = total.toLocaleString('en-IN');\r\n    \/\/ Total In-house Milling Cost\u3082\u518d\u8a08\u7b97\r\n    calculateTotalMillingCost();\r\n  };\r\n\r\n  \/**\r\n   * Total Labor Cost \u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateTotalLaborCost = () => {\r\n    \/\/ \u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\uff1a\u95a2\u9023\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u8a08\u7b97\u3092\u30b9\u30ad\u30c3\u30d7\r\n    if (hasErrorForInputs([inputLaborCost, inputUnitsToMillZirconia, inputUnitsToMillGlass])) {\r\n      return;\r\n    }\r\n    const laborCost = Number(removeCommas(inputLaborCost.value)) || 0;\r\n    const unitsToMillZirconia = Number(removeCommas(inputUnitsToMillZirconia.value)) || 0;\r\n    const unitsToMillGlass = Number(removeCommas(inputUnitsToMillGlass.value)) || 0;\r\n    const total = laborCost * (unitsToMillZirconia + unitsToMillGlass) * 2;\r\n    totalLaborCost.textContent = total.toLocaleString('en-IN');\r\n    \/\/ Total In-house Milling Cost\u3082\u518d\u8a08\u7b97\r\n    calculateTotalMillingCost();\r\n  };\r\n\r\n  \/**\r\n   * Total In-house Milling Cost \u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateTotalMillingCost = () => {\r\n    \/\/ \u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\uff1a\u95a2\u9023\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u8a08\u7b97\u3092\u30b9\u30ad\u30c3\u30d7\r\n    if (hasErrorForInputs([inputMaterialCostZirconia, inputUnitsToMillZirconia, inputMaterialCostGlass, inputUnitsToMillGlass, inputLaborCost])) {\r\n      return;\r\n    }\r\n    const materialCost = Number(removeCommas(totalMaterialCost.textContent)) || 0;\r\n    const laborCost = Number(removeCommas(totalLaborCost.textContent)) || 0;\r\n    const total = materialCost + laborCost;\r\n    totalMillingCost.textContent = total.toLocaleString('en-IN');\r\n  };\r\n\r\n  \/**\r\n   * Monthly Loan Payment \u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateMonthlyLoanPayment = () => {\r\n    \/\/ \u30ed\u30fc\u30f3\u3092\u4f7f\u7528\u3057\u306a\u3044\u5834\u5408\u306f0\u3092\u8fd4\u3059\r\n    if (!inputUseLoan.checked) {\r\n      monthlyLoanPayment.textContent = '0';\r\n      return;\r\n    }\r\n    \/\/ \u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\uff1a\u95a2\u9023\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u8a08\u7b97\u3092\u30b9\u30ad\u30c3\u30d7\r\n    if (hasErrorForInputs([inputDwxPrice, inputOtherExpenses, inputDownPayment, inputAnnualInterestRate, inputRepaymentPeriod])) {\r\n      return;\r\n    }\r\n    const initialInvestment = Number(removeCommas(totalInitialInvestment.textContent)) || 0;\r\n    const downPayment = Number(removeCommas(inputDownPayment.value)) || 0;\r\n    const loanAmount = initialInvestment - downPayment; \/\/ \u30ed\u30fc\u30f3\u91d1\u984d = \u521d\u671f\u6295\u8cc7\u984d - \u982d\u91d1\r\n    const annualInterestRate = Number(removeCommas(inputAnnualInterestRate.value)) || 0;\r\n    const repaymentPeriodMonthInputValue = Number(removeCommas(inputRepaymentPeriod.value)) || 0;\r\n    const repaymentPeriodMonth = repaymentPeriodMonthInputValue > 0 ? repaymentPeriodMonthInputValue : REPAYMENT_PERIOD_MONTH_DEFAULT;\r\n\r\n    if (loanAmount <= 0 || annualInterestRate <= 0 || repaymentPeriodMonth <= 0) {\r\n      monthlyLoanPayment.textContent = '0';\r\n      return;\r\n    }\r\n    \/\/ \u5e74\u5229\u3092\u6708\u5229\u306b\u5909\u63db\r\n    \/\/   Math.round(...) \u2192 \u5c0f\u6570\u70b9\u7b2c2\u4f4d\u307e\u3067\u56db\u6368\u4e94\u5165\r\n    \/\/   \/ 100 \/ 100 \u2192     \u6700\u521d\u306e\/100\u3067%\u306b\u5909\u63db\u3057\u3066\u3001\u6b21\u306e\/100\u3067\u8a08\u7b97\u7528\u306e\u6570\u5024\u306b\u5909\u63db\r\n    const monthlyInterestRate = Math.round(annualInterestRate \/ 12 * 100) \/ 100 \/ 100;\r\n    const getMonthlyLoanPaymentValue = () => {\r\n      const value1_1 = (initialInvestment - downPayment) * monthlyInterestRate;\r\n      const value1_2 = (1 + monthlyInterestRate) ** repaymentPeriodMonth;\r\n      const value1 = value1_1 * value1_2;\r\n      const value2 = ((1 + monthlyInterestRate) ** repaymentPeriodMonth) - 1;\r\n      return value1 \/ value2;\r\n    }\r\n    const monthlyLoanPaymentValue = getMonthlyLoanPaymentValue();\r\n    monthlyLoanPayment.textContent = Math.round(monthlyLoanPaymentValue).toLocaleString('en-IN');\r\n  };\r\n\r\n  \/**\r\n   * Use Loan \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u306b\u5fdc\u3058\u3066\u30ed\u30fc\u30f3\u95a2\u9023\u5165\u529b\u6b04\u306e\u6709\u52b9\/\u7121\u52b9\u3092\u5207\u308a\u66ff\u3048\r\n   *\/\r\n  const toggleLoanInputsDisabled = () => {\r\n    const isEnabled = inputUseLoan.checked;\r\n    inputDownPayment.disabled = !isEnabled;\r\n    inputAnnualInterestRate.disabled = !isEnabled;\r\n    inputRepaymentPeriod.disabled = !isEnabled;\r\n    \/\/ \u7121\u52b9\u5316\u3055\u308c\u305f\u5834\u5408\u306f\u8a08\u7b97\u3092\u5b9f\u884c\r\n    calculateMonthlyLoanPayment();\r\n  };\r\n\r\n  \/**\r\n   * Summary\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u8a08\u7b97\r\n   *\/\r\n  const calculateSummary = () => {\r\n    \/\/ summary-monthly-total-sales = total-sales\r\n    const totalSalesValue = Number(removeCommas(totalSales.textContent)) || 0;\r\n    summaryMonthlyTotalSales.textContent = totalSalesValue.toLocaleString('en-IN');\r\n\r\n    \/\/ summary-monthly-milling-cost = total-milling-cost\r\n    const totalMillingCostValue = Number(removeCommas(totalMillingCost.textContent)) || 0;\r\n    summaryMonthlyMillingCost.textContent = totalMillingCostValue.toLocaleString('en-IN');\r\n\r\n    \/\/ summary-monthly-loan-payment = monthly-loan-payment\r\n    const monthlyLoanPaymentValue = Number(removeCommas(monthlyLoanPayment.textContent)) || 0;\r\n    summaryMonthlyLoanPayment.textContent = monthlyLoanPaymentValue.toLocaleString('en-IN');\r\n\r\n    \/\/ summary-monthly-profit-during-repaying-loan = summary-monthly-total-sales - summary-monthly-loan-payment\r\n    const monthlyProfitWithLoan = (totalSalesValue - totalMillingCostValue) - monthlyLoanPaymentValue;\r\n    summaryMonthlyProfitDuringRepayingLoan.textContent = monthlyProfitWithLoan.toLocaleString('en-IN');\r\n\r\n    \/\/ summary-monthly-profit-without-loan = summary-monthly-total-sales - summary-monthly-milling-cost\r\n    const monthlyProfitWithoutLoan = totalSalesValue - totalMillingCostValue;\r\n    summaryMonthlyProfitWithoutLoan.textContent = monthlyProfitWithoutLoan.toLocaleString('en-IN');\r\n\r\n    \/\/ summary-monthly-profit-title\u306e\u8868\u793a\/\u975e\u8868\u793a\u3092\u5207\u308a\u66ff\u3048\r\n    if (summaryMonthlyProfitTitleWithLoan) {\r\n      summaryMonthlyProfitTitleWithLoan.style.display = inputUseLoan.checked ? 'inline' : 'none';\r\n    }\r\n    if (summaryMonthlyProfitTitleWithoutLoan) {\r\n      summaryMonthlyProfitTitleWithoutLoan.style.display = inputUseLoan.checked ? 'none' : 'inline';\r\n    }\r\n\r\n    \/\/ summary-monthly-profit-during-repaying-loan-wrapper\u306e\u8868\u793a\/\u975e\u8868\u793a\u3092\u5207\u308a\u66ff\u3048\r\n    if (summaryMonthlyProfitDuringRepayingLoanWrapper) {\r\n      summaryMonthlyProfitDuringRepayingLoanWrapper.style.display = inputUseLoan.checked ? 'flex' : 'none';\r\n    }\r\n\r\n    \/\/ summary-initial-cost\r\n    \/\/ \u30ed\u30fc\u30f3\u304cON\u306e\u3068\u304d\u306finput-down-payment\u3001OFF\u306e\u3068\u304d\u306ftotal-initial-investment\u3092\u8868\u793a\r\n    let summaryInitialCostValue = 0;\r\n    if (inputUseLoan.checked) {\r\n      \/\/ \u30ed\u30fc\u30f3\u304cON\u306e\u3068\u304d\u306f\u982d\u91d1\u3092\u8868\u793a\r\n      summaryInitialCostValue = Number(removeCommas(inputDownPayment.value)) || 0;\r\n    } else {\r\n      \/\/ \u30ed\u30fc\u30f3\u304cOFF\u306e\u3068\u304d\u306f\u521d\u671f\u6295\u8cc7\u984d\u3092\u8868\u793a\r\n      summaryInitialCostValue = Number(removeCommas(totalInitialInvestment.textContent)) || 0;\r\n    }\r\n    summaryInitialCost.textContent = summaryInitialCostValue.toLocaleString('en-IN');\r\n\r\n    \/\/ summary-payback-period\u306e\u8a08\u7b97\u7528\u306b\u521d\u671f\u6295\u8cc7\u984d\u3092\u53d6\u5f97\r\n    const initialInvestmentValue = Number(removeCommas(totalInitialInvestment.textContent)) || 0;\r\n\r\n    \/\/ summary-payback-period\r\n    let paybackPeriod = 0;\r\n    if (inputUseLoan.checked) {\r\n      \/\/ \u30ed\u30fc\u30f3\u306b\u30c1\u30a7\u30c3\u30af\u304c\u5165\u3063\u3066\u308b\u306a\u3089: total-initial-investment \/ summary-monthly-profit-during-repaying-loan\r\n      if (monthlyProfitWithLoan > 0) {\r\n        paybackPeriod = initialInvestmentValue \/ monthlyProfitWithLoan;\r\n      }\r\n    } else {\r\n      \/\/ \u30ed\u30fc\u30f3\u306b\u30c1\u30a7\u30c3\u30af\u304c\u5165\u3063\u3066\u3044\u306a\u3044\u306a\u3089: total-initial-investment \/ summary-monthly-profit-without-loan\r\n      if (monthlyProfitWithoutLoan > 0) {\r\n        paybackPeriod = initialInvestmentValue \/ monthlyProfitWithoutLoan;\r\n      }\r\n    }\r\n    summaryPaybackPeriod.textContent = paybackPeriod.toFixed(1);\r\n  };\r\n\r\n  \/**\r\n   * Summary\u8868\u793a\u3092\u5207\u308a\u66ff\u3048\r\n   *\/\r\n  const showSummaryBeforeCalculate = () => {\r\n    summaryBeforeCalculate.style.display = 'block';\r\n    summaryAfterCalculate.style.display = 'none';\r\n    summaryTitle.classList.add('roi-simulator-summary-title-before');\r\n    summaryTitle.classList.remove('roi-simulator-summary-title-after');\r\n  };\r\n  const showSummaryAfterCalculate = () => {\r\n    summaryBeforeCalculate.style.display = 'none';\r\n    summaryAfterCalculate.style.display = 'block';\r\n    summaryTitle.classList.remove('roi-simulator-summary-title-before');\r\n    summaryTitle.classList.add('roi-simulator-summary-title-after');\r\n  };\r\n\r\n  \/**\r\n   * \u7279\u5b9a\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u95a2\u9023\u3059\u308b\u30a8\u30e9\u30fc\u304c\u3042\u308b\u304b\u3069\u3046\u304b\u3092\u30c1\u30a7\u30c3\u30af\r\n   * @param {Array<HTMLElement>} inputs - \u30c1\u30a7\u30c3\u30af\u3059\u308b\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u914d\u5217\r\n   * @returns {boolean} \u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408true\r\n   *\/\r\n  const hasErrorForInputs = (inputs) => {\r\n    for (const input of inputs) {\r\n      \/\/ required\u5c5e\u6027\u306e\u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\r\n      if (input.hasAttribute('required')) {\r\n        const inputId = input.id;\r\n        const errorMessage = document.querySelector(`[data-required=\"${inputId}\"]`);\r\n        if (errorMessage && errorMessage.style.display === 'block') {\r\n          return true;\r\n        }\r\n      }\r\n      \/\/ data-max\u3068data-min\u306e\u30a8\u30e9\u30fc\u30c1\u30a7\u30c3\u30af\r\n      if (input.hasAttribute('data-max') && input.hasAttribute('data-min')) {\r\n        const inputId = input.id;\r\n        const errorMessage = document.querySelector(`[data-max-min=\"${inputId}\"]`);\r\n        if (errorMessage && errorMessage.style.display === 'block') {\r\n          return true;\r\n        }\r\n      }\r\n    }\r\n    return false;\r\n  };\r\n\r\n  \/**\r\n   * \u30a8\u30e9\u30fc\u6570\u3092\u30ab\u30a6\u30f3\u30c8\u3057\u3001\u8a08\u7b97\u30dc\u30bf\u30f3\u306b\u30af\u30e9\u30b9\u3092\u4ed8\u4e0e\/\u524a\u9664\r\n   *\/\r\n  const toggleButtonCalculateClass = () => {\r\n    let errorCount = 0;\r\n\r\n    \/\/ .roi-error-message\u8981\u7d20\u3092\u53d6\u5f97\u3057\u3066\u3001\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30a8\u30e9\u30fc\u3092\u30ab\u30a6\u30f3\u30c8\r\n    const errorMessages = document.querySelectorAll('.roi-error-message');\r\n    errorMessages.forEach(msg => {\r\n      if (msg.style.display === 'block') {\r\n        errorCount++;\r\n      }\r\n    });\r\n\r\n    \/\/ \u30dc\u30bf\u30f3\u306b\u30af\u30e9\u30b9\u3092\u4ed8\u4e0e\/\u524a\u9664\r\n    if (errorCount > 0) {\r\n      buttonCalculate.classList.add('roi-error');\r\n    } else {\r\n      buttonCalculate.classList.remove('roi-error');\r\n    }\r\n  };\r\n\r\n  \/**\r\n   * \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u8868\u793a\/\u975e\u8868\u793a\u3092\u5236\u5fa1\uff08\u5229\u7528\u7b87\u6240\u4f8b\uff1a#input-dwx-price\uff09\r\n   * @param {HTMLElement} input - \u5165\u529b\u8981\u7d20\r\n   * @param {boolean} showError - \u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u304b\u3069\u3046\u304b\r\n   *\/\r\n  const toggleErrorMessage = (input, showError) => {\r\n    if (input.hasAttribute('required')) {\r\n      const inputId = input.id;\r\n      const errorMessage = document.querySelector(`[data-required=\"${inputId}\"]`);\r\n      if (errorMessage) {\r\n        errorMessage.style.display = showError ? 'block' : 'none';\r\n        input.style.background = showError ? INPUT_BACKGROUND_COLOR_ERROR : INPUT_BACKGROUND_COLOR_NORMAL;\r\n        toggleButtonCalculateClass();\r\n      }\r\n    }\r\n  };\r\n\r\n  \/**\r\n   * data-max\u3068data-min\u306e\u7bc4\u56f2\u30c1\u30a7\u30c3\u30af\r\n   * @param {HTMLElement} input - \u5165\u529b\u8981\u7d20\r\n   * @returns {boolean} \u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408true\r\n   *\/\r\n  const validateMaxMin = (input) => {\r\n    if (!input.hasAttribute('data-max') || !input.hasAttribute('data-min')) {\r\n      return false;\r\n    }\r\n    const value = input.value;\r\n    const hasValue = value && value.trim() !== '';\r\n    \/\/ \u5024\u304c\u7a7a\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\u306a\u3057\uff08required\u5c5e\u6027\u3067\u30c1\u30a7\u30c3\u30af\u3059\u308b\u305f\u3081\uff09\r\n    if (!hasValue) {\r\n      return false;\r\n    }\r\n    const numericValue = Number(removeCommas(value));\r\n    const maxValue = Number(input.getAttribute('data-max'));\r\n    const minValue = Number(input.getAttribute('data-min'));\r\n    \/\/ \u7bc4\u56f2\u5916\u306e\u5834\u5408\u30a8\u30e9\u30fc\r\n    return numericValue < minValue || numericValue > maxValue;\r\n  };\r\n\r\n  \/**\r\n   * data-max\u3068data-min\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u8868\u793a\/\u975e\u8868\u793a\u3092\u5236\u5fa1\r\n   * @param {HTMLElement} input - \u5165\u529b\u8981\u7d20\r\n   * @param {boolean} showError - \u30a8\u30e9\u30fc\u3092\u8868\u793a\u3059\u308b\u304b\u3069\u3046\u304b\r\n   *\/\r\n  const toggleMaxMinErrorMessage = (input, showError) => {\r\n    if (input.hasAttribute('data-max') && input.hasAttribute('data-min')) {\r\n      const inputId = input.id;\r\n      const errorMessage = document.querySelector(`[data-max-min=\"${inputId}\"]`);\r\n      if (errorMessage) {\r\n        errorMessage.style.display = showError ? 'block' : 'none';\r\n        input.style.background = showError ? INPUT_BACKGROUND_COLOR_ERROR : INPUT_BACKGROUND_COLOR_NORMAL;\r\n        toggleButtonCalculateClass();\r\n      }\r\n    }\r\n  };\r\n\r\n  \/**\r\n   * Sales Price\u30bb\u30c3\u30c8\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n   * Zirconia\u3068Glass Ceramics\u306e\u30bb\u30c3\u30c8\u3067\u3001price\u3068units\u306f\u4e21\u65b9\u5165\u529b\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\r\n   * \u3069\u3061\u3089\u304b\u306e\u30bb\u30c3\u30c8\u304c\u5b8c\u5168\u306b\u5165\u529b\u3055\u308c\u3066\u3044\u308c\u3070OK\r\n   * @returns {boolean} \u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408true\r\n   *\/\r\n  const validateSalesPriceSets = () => {\r\n    \/\/ \u521d\u56de\u5165\u529b\u6642\u306e\u307f\u30c1\u30a7\u30c3\u30af\u3057\u306a\u3044\r\n    if (isFirstSalesPriceInput) {\r\n      return false;\r\n    }\r\n\r\n    \/\/ Zirconia\u30bb\u30c3\u30c8\u306e\u30c1\u30a7\u30c3\u30af\uff1a\u4e21\u65b9\u5165\u529b\u3055\u308c\u3066\u3044\u308b\u3001\u307e\u305f\u306f\u4e21\u65b9\u3068\u3082\u7a7a\r\n    const zirconiaPriceHasValue = inputZirconiaPrice.value && inputZirconiaPrice.value.trim() !== '';\r\n    const zirconiaUnitsHasValue = inputZirconiaUnits.value && inputZirconiaUnits.value.trim() !== '';\r\n    const zirconiaSetValid = (zirconiaPriceHasValue && zirconiaUnitsHasValue) || (!zirconiaPriceHasValue && !zirconiaUnitsHasValue);\r\n\r\n    \/\/ Glass Ceramics\u30bb\u30c3\u30c8\u306e\u30c1\u30a7\u30c3\u30af\uff1a\u4e21\u65b9\u5165\u529b\u3055\u308c\u3066\u3044\u308b\u3001\u307e\u305f\u306f\u4e21\u65b9\u3068\u3082\u7a7a\r\n    const glassPriceHasValue = inputGlassCeramicsPrice.value && inputGlassCeramicsPrice.value.trim() !== '';\r\n    const glassUnitsHasValue = inputGlassCeramicsUnits.value && inputGlassCeramicsUnits.value.trim() !== '';\r\n    const glassSetValid = (glassPriceHasValue && glassUnitsHasValue) || (!glassPriceHasValue && !glassUnitsHasValue);\r\n\r\n    \/\/ \u3069\u3061\u3089\u304b\u306e\u30bb\u30c3\u30c8\u304c\u5b8c\u5168\u306b\u5165\u529b\u3055\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308b\r\n    const hasValidSet = (zirconiaPriceHasValue && zirconiaUnitsHasValue) || (glassPriceHasValue && glassUnitsHasValue);\r\n\r\n    \/\/ \u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\uff1a\u30bb\u30c3\u30c8\u304c\u7121\u52b9\u3001\u307e\u305f\u306f\u6709\u52b9\u306a\u30bb\u30c3\u30c8\u304c\u306a\u3044\r\n    const hasError = !zirconiaSetValid || !glassSetValid || !hasValidSet;\r\n\r\n    const errorMessage = document.getElementById('sales-price-error-message');\r\n    if (errorMessage) {\r\n      errorMessage.style.display = hasError ? 'block' : 'none';\r\n      toggleButtonCalculateClass();\r\n\r\n      \/\/ \u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u3001\u8a72\u5f53\u3059\u308binput\u306e\u80cc\u666f\u8272\u3092\u5909\u66f4\r\n      if (hasError) {\r\n        if (!zirconiaSetValid) {\r\n          inputZirconiaPrice.style.background = INPUT_BACKGROUND_COLOR_ERROR;\r\n          inputZirconiaUnits.style.background = INPUT_BACKGROUND_COLOR_ERROR;\r\n        }\r\n        if (!glassSetValid) {\r\n          inputGlassCeramicsPrice.style.background = INPUT_BACKGROUND_COLOR_ERROR;\r\n          inputGlassCeramicsUnits.style.background = INPUT_BACKGROUND_COLOR_ERROR;\r\n        }\r\n      } else {\r\n        \/\/ \u30a8\u30e9\u30fc\u304c\u306a\u3044\u5834\u5408\u3001\u80cc\u666f\u8272\u3092\u30ea\u30bb\u30c3\u30c8\r\n        inputZirconiaPrice.style.background = '';\r\n        inputZirconiaUnits.style.background = '';\r\n        inputGlassCeramicsPrice.style.background = '';\r\n        inputGlassCeramicsUnits.style.background = '';\r\n      }\r\n    }\r\n\r\n    return hasError;\r\n  };\r\n\r\n\r\n\r\n\r\n\r\n  \/\/ ********************************************************************\r\n  \/\/ *****************************************************\r\n  \/\/ *****************************************\r\n  \/\/ \u3053\u3053\u304b\u3089\u30b0\u30e9\u30d5\u95a2\u9023\u306e\u51e6\u7406\r\n\r\n  \/**\r\n   * x\u8ef8\u306e\u30e1\u30e2\u30ea\u9593\u9694\u3092\u53d6\u5f97\uff08\u8868\u793a\u3059\u308b\u6700\u5927\u6708\u6570\u306b\u5fdc\u3058\u3066\u5909\u52d5\uff09\r\n   * @param {number} maxMonths - \u8868\u793a\u3059\u308b\u6700\u5927\u6708\u6570\r\n   * @returns {number} \u30e1\u30e2\u30ea\u9593\u9694\uff08\u6708\u5358\u4f4d\uff09\r\n   *\/\r\n  const getXAxisTickInterval = (maxMonths) => {\r\n    const maxTicks = 10; \/\/ \u30e1\u30e2\u30ea\u6570\u306e\u4e0a\u9650\r\n    \/\/ \u30e1\u30e2\u30ea\u6570 = Math.floor(maxMonths \/ interval) + 1 <= maxTicks\r\n    \/\/ Math.floor(maxMonths \/ interval) <= maxTicks - 1\r\n    \/\/ maxMonths \/ interval <= maxTicks - 1\r\n    \/\/ interval >= maxMonths \/ (maxTicks - 1)\r\n    const minInterval = maxMonths \/ (maxTicks - 1);\r\n\r\n    if (maxMonths <= 12) {\r\n      \/\/ 12\u30f6\u6708\u4ee5\u4e0b\u306e\u5834\u5408\u30011\u30f6\u6708\u3054\u3068\u3092\u512a\u5148\uff08\u305f\u3060\u3057\u4e0a\u9650\u3092\u8d85\u3048\u306a\u3044\u3088\u3046\u306b\uff09\r\n      const interval = Math.ceil(minInterval);\r\n      return Math.max(1, interval);\r\n    } else if (maxMonths <= 59) {\r\n      \/\/ 59\u30f6\u6708\u4ee5\u4e0b\u306e\u5834\u5408\u30013\u306e\u500d\u6570\u3067\u5207\u308a\u4e0a\u3052\r\n      return Math.ceil(minInterval \/ 3) * 3;\r\n    } else if (maxMonths <= 119) {\r\n      \/\/ 119\u30f6\u6708\u4ee5\u4e0b\u306e\u5834\u5408\u30016\u306e\u500d\u6570\u3067\u5207\u308a\u4e0a\u3052\r\n      return Math.ceil(minInterval \/ 6) * 6;\r\n    } else {\r\n      \/\/ 120\u30f6\u6708\u4ee5\u4e0a\u306e\u5834\u5408\u300112\u306e\u500d\u6570\u3067\u5207\u308a\u4e0a\u3052\uff08\u5e74\u5358\u4f4d\uff09\r\n      return Math.ceil(minInterval \/ 12) * 12;\r\n    }\r\n  };\r\n\r\n  \/**\r\n   * x\u8ef8\u306e\u30e9\u30d9\u30eb\u3092\u751f\u6210\r\n   * @param {number} maxMonths - \u8868\u793a\u3059\u308b\u6700\u5927\u6708\u6570\r\n   * @returns {Array<string>} x\u8ef8\u306e\u30e9\u30d9\u30eb\u914d\u5217\r\n   *\/\r\n  const generateXAxisLabels = (maxMonths) => {\r\n    const interval = getXAxisTickInterval(maxMonths);\r\n    const labels = [];\r\n    const tickValues = [];\r\n    \/\/ 0\u30f6\u6708\u304b\u3089\u958b\u59cb\u3057\u3066\u3001\u9593\u9694\u3054\u3068\u306b\u30e9\u30d9\u30eb\u3092\u751f\u6210\r\n    \/\/ \u9593\u9694\u304c12\u306e\u500d\u6570\u306e\u5834\u5408\u306f\u5e74\u5358\u4f4d\u3067\u8868\u793a\r\n    const isYearInterval = interval % 12 === 0 && interval >= 12;\r\n    for (let month = 0; month <= maxMonths; month += interval) {\r\n      tickValues.push(month);\r\n      if (isYearInterval) {\r\n        \/\/ \u5e74\u5358\u4f4d\u306e\u5834\u5408\r\n        const years = Math.floor(month \/ 12);\r\n        labels.push(`${years} years`);\r\n      } else {\r\n        \/\/ \u6708\u5358\u4f4d\u306e\u5834\u5408\r\n        labels.push(`${month} months`);\r\n      }\r\n    }\r\n    return labels;\r\n  };\r\n\r\n  \/**\r\n   * x\u8ef8\u306e\u8a2d\u5b9a\u3092\u8a08\u7b97\r\n   * @returns {Object} x\u8ef8\u306e\u8a2d\u5b9a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\r\n   *\/\r\n  const calculateXAxisConfig = () => {\r\n    \/\/ \u5229\u76ca\u306e\u7d2f\u7a4d\u304c0\u306b\u306a\u308b\u6708\uff08Payback Period\uff09\u3092\u53d6\u5f97\r\n    const paybackPeriod = parseFloat(summaryPaybackPeriod.textContent) || 0;\r\n\r\n    \/\/ \u7d2f\u7a4d\u5229\u76ca\u304c\u521d\u671f\u6295\u8cc7\u984d\u3092\u4e0a\u56de\u308b\u6708\u3092\u8a08\u7b97\r\n    const initialCost = Number(removeCommas(totalInitialInvestment.textContent)) || 0;\r\n    const monthlySales = Number(removeCommas(summaryMonthlyTotalSales.textContent)) || 0;\r\n    const monthlyCost = Number(removeCommas(summaryMonthlyMillingCost.textContent)) || 0;\r\n    const monthlyLoanPayment = Number(removeCommas(summaryMonthlyLoanPayment.textContent)) || 0;\r\n    const repaymentPeriodInput = Number(removeCommas(inputRepaymentPeriod.value)) || 0;\r\n    const repaymentPeriod = repaymentPeriodInput > 0 ? repaymentPeriodInput : REPAYMENT_PERIOD_MONTH_DEFAULT;\r\n    const useLoan = inputUseLoan.checked;\r\n\r\n    let cumulativeProfit = -initialCost;\r\n    let monthWhenExceedsInitialCost = null;\r\n\r\n    \/\/ \u7d2f\u7a4d\u5229\u76ca\u304c\u521d\u671f\u6295\u8cc7\u984d\u3092\u4e0a\u56de\u308b\u6708\u3092\u898b\u3064\u3051\u308b\uff08\u6700\u59271000\u30f6\u6708\u307e\u3067\u691c\u7d22\uff09\r\n    for (let month = 0; month <= 1000; month++) {\r\n      if (month === 0) {\r\n        cumulativeProfit = -initialCost;\r\n      } else {\r\n        let monthlyProfit = monthlySales - monthlyCost;\r\n        if (useLoan && month >= 1 && month <= repaymentPeriod) {\r\n          monthlyProfit -= monthlyLoanPayment;\r\n        }\r\n        cumulativeProfit += monthlyProfit;\r\n      }\r\n\r\n      \/\/ \u7d2f\u7a4d\u5229\u76ca\u304c\u521d\u671f\u6295\u8cc7\u984d\u3092\u4e0a\u56de\u3063\u305f\u5834\u5408\r\n      if (cumulativeProfit > initialCost) {\r\n        monthWhenExceedsInitialCost = month;\r\n        break;\r\n      }\r\n    }\r\n\r\n    \/\/ x\u8ef8\u306e\u6700\u5927\u5024\uff1a\u7d2f\u7a4d\u5229\u76ca\u304c\u521d\u671f\u6295\u8cc7\u984d\u3092\u4e0a\u56de\u308b\u6708\u304c\u3042\u308b\u5834\u5408\u306f\u305d\u306e\u6708\u3001\u306a\u3044\u5834\u5408\u306fPayback Period + 12\u30f6\u6708\r\n    let maxMonths;\r\n    if (monthWhenExceedsInitialCost !== null) {\r\n      maxMonths = monthWhenExceedsInitialCost;\r\n    } else {\r\n      maxMonths = Math.ceil(paybackPeriod) + 12;\r\n    }\r\n\r\n    \/\/ \u30e1\u30e2\u30ea\u9593\u9694\u3092\u53d6\u5f97\r\n    const tickInterval = getXAxisTickInterval(maxMonths);\r\n    \/\/ x\u8ef8\u306e\u30e9\u30d9\u30eb\u3092\u751f\u6210\r\n    const labels = generateXAxisLabels(maxMonths);\r\n    return {\r\n      maxMonths: maxMonths,\r\n      tickInterval: tickInterval,\r\n      labels: labels,\r\n      paybackPeriod: paybackPeriod\r\n    };\r\n  };\r\n\r\n  \/**\r\n   * y\u8ef8\u306e\u30e9\u30d9\u30eb\u3092\u751f\u6210\uff08\u6700\u5c0f\u5024\u30010\u3001\u6700\u5927\u5024\u306e3\u3064\u306e\u307f\uff09\r\n   * @param {number} minValue - y\u8ef8\u306e\u6700\u5c0f\u5024\uff08\u30de\u30a4\u30ca\u30b9\u5024\uff09\r\n   * @param {number} maxValue - y\u8ef8\u306e\u6700\u5927\u5024\uff08\u30d7\u30e9\u30b9\u5024\uff09\r\n   * @returns {Array<string>} y\u8ef8\u306e\u30e9\u30d9\u30eb\u914d\u5217\r\n   *\/\r\n  const generateYAxisLabels = (minValue, maxValue) => {\r\n    const labels = [];\r\n    \/\/ \u6700\u5c0f\u5024\u30010\u3001\u6700\u5927\u5024\u306e3\u3064\u306e\u307f\r\n    labels.push(minValue.toLocaleString('en-IN'));\r\n    labels.push(0);\r\n    labels.push(maxValue.toLocaleString('en-IN'));\r\n    return labels;\r\n  };\r\n\r\n  \/**\r\n   * \u30b0\u30e9\u30d5\u3092\u8868\u793a\r\n   *\/\r\n  const displayChart = () => {\r\n    const xAxisConfig = calculateXAxisConfig();\r\n\r\n    \/\/ \u307e\u305a\u7d2f\u7a4d\u5229\u76ca\u306e\u6700\u5c0f\u5024\u3092\u8a08\u7b97\u3059\u308b\u305f\u3081\u306b\u3001\u3059\u3079\u3066\u306e\u6708\u306e\u7d2f\u7a4d\u5229\u76ca\u3092\u8a08\u7b97\r\n    const initialCost = Number(removeCommas(totalInitialInvestment.textContent)) || 0;\r\n    const monthlySales = Number(removeCommas(summaryMonthlyTotalSales.textContent)) || 0;\r\n    const monthlyCost = Number(removeCommas(summaryMonthlyMillingCost.textContent)) || 0;\r\n    const monthlyLoanPayment = Number(removeCommas(summaryMonthlyLoanPayment.textContent)) || 0;\r\n    const repaymentPeriodInput = Number(removeCommas(inputRepaymentPeriod.value)) || 0;\r\n    const repaymentPeriod = repaymentPeriodInput > 0 ? repaymentPeriodInput : REPAYMENT_PERIOD_MONTH_DEFAULT;\r\n    const useLoan = inputUseLoan.checked;\r\n    const maxMonths = xAxisConfig.maxMonths;\r\n\r\n    \/\/ \u7d2f\u7a4d\u5229\u76ca\u306e\u6700\u5c0f\u5024\u3092\u8a08\u7b97\r\n    let cumulativeProfit = -initialCost;\r\n    let minCumulativeProfit = cumulativeProfit;\r\n    for (let month = 0; month <= maxMonths; month++) {\r\n      if (month === 0) {\r\n        cumulativeProfit = -initialCost;\r\n      } else {\r\n        let monthlyProfit = monthlySales - monthlyCost;\r\n        if (useLoan && month >= 1 && month <= repaymentPeriod) {\r\n          monthlyProfit -= monthlyLoanPayment;\r\n        }\r\n        cumulativeProfit += monthlyProfit;\r\n      }\r\n      if (cumulativeProfit < minCumulativeProfit) {\r\n        minCumulativeProfit = cumulativeProfit;\r\n      }\r\n    }\r\n\r\n    \/\/ y\u8ef8\u306e\u8a2d\u5b9a\uff1a\u6700\u5c0f\u5024\u306f\u7d2f\u7a4d\u5229\u76ca\u306e\u6700\u5c0f\u5024\u3001\u6700\u5927\u5024\u306f\u6700\u5c0f\u5024\u306e\u7d76\u5bfe\u5024\uff08\u5bfe\u79f0\uff09\r\n    const yAxisMinValue = minCumulativeProfit;\r\n    const yAxisMaxValue = Math.abs(minCumulativeProfit);\r\n    const yAxisLabels = generateYAxisLabels(yAxisMinValue, yAxisMaxValue);\r\n    const yAxisConfig = {\r\n      minValue: yAxisMinValue,\r\n      maxValue: yAxisMaxValue,\r\n      labels: yAxisLabels,\r\n      initialCost: initialCost\r\n    };\r\n\r\n    \/\/ \u30b0\u30e9\u30d5\u306e\u30b5\u30a4\u30ba\u8a2d\u5b9a\r\n    const chartWidth = chartSection.clientWidth;\r\n    const chartHeight = 400;\r\n\r\n    \/\/ \u521d\u671f\u6295\u8cc7\u984d\u306e\u6841\u6570\u306b\u5fdc\u3058\u3066\u30b0\u30e9\u30d5\u306e\u5de6\u5074\u306e\u4f59\u767d\u3092\u52d5\u7684\u306b\u8a08\u7b97\uff085\u6841\u306770px\u3092\u57fa\u6e96\uff09\r\n    const getLeftMargin = () => {\r\n      const initialCost = yAxisConfig.initialCost;\r\n      const digitCount = initialCost > 0 ? Math.floor(Math.log10(Math.abs(initialCost))) + 1 : 1;\r\n      if (IS_MOBILE) {\r\n        \/\/ \u30e2\u30d0\u30a4\u30eb\u3067\u306f\u30e9\u30d9\u30eb\u3092\u56de\u8ee2\u3055\u305b\u308b\u306e\u3067\u3001\u6841\u6570\u306f\u8003\u616e\u3057\u306a\u304f\u3066\u3044\u3044\uff08\u6a2a\u5e45\u304c\u6841\u6570\u306b\u5fdc\u3058\u3066\u5909\u308f\u3089\u306a\u3044\u304b\u3089\uff09\r\n        return 20;\r\n      } else {\r\n        \/\/ 5\u6841\u306770px\u306b\u306a\u308b\u3088\u3046\u306b\u8a08\u7b97: leftMargin = 50 + (\u6841\u6570 - 3) * 10\uff08\u6700\u5c0f\u5024\u306f40px\u3001\u6700\u5927\u5024\u306f\u5236\u9650\u306a\u3057\uff09\r\n        return Math.max(40, 50 + (digitCount - 3) * 10);\r\n      }\r\n    };\r\n    const leftMargin = getLeftMargin();\r\n    const bottomMargin = 50; \/\/ x\u8ef8\u30e9\u30d9\u30eb\u306e\u30b9\u30da\u30fc\u30b9\r\n    const topMargin = 20;\r\n    const rightMargin = 20;\r\n    const graphWidth = chartWidth - leftMargin - rightMargin;\r\n    const graphHeight = chartHeight - topMargin - bottomMargin;\r\n\r\n    \/\/ x\u8ef8\u306e0\u5730\u70b9\u306e\u4f4d\u7f6e\uff08\u30b0\u30e9\u30d5\u30a8\u30ea\u30a2\u5185\u3067\u306e\u4f4d\u7f6e\uff09\r\n    const xAxisZeroX = leftMargin;\r\n    const tickInterval = xAxisConfig.tickInterval;\r\n    \/\/ \u9593\u9694\u304c12\u306e\u500d\u6570\u306e\u5834\u5408\u306f\u5e74\u5358\u4f4d\u3067\u8868\u793a\r\n    const xAxisLabelType = (tickInterval % 12 === 0 && tickInterval >= 12) ? 'Year' : 'Month';\r\n\r\n    \/\/ SVG\u8981\u7d20\u3092\u4f5c\u6210\r\n    let svg = `\r\n      <svg width=\"${chartWidth}\" height=\"${chartHeight}\">\r\n        <!-- \u30b0\u30ea\u30c3\u30c9\u7dda -->\r\n    `;\r\n\r\n    \/\/ x\u8ef8\u306e0\u5730\u70b9\u304b\u3089\u4e0a\u306b\u5411\u304b\u3063\u3066\u7e26\u7dda\u3092\u5f15\u304f\r\n    svg += `<line x1=\"${xAxisZeroX}\" y1=\"${topMargin}\" x2=\"${xAxisZeroX}\" y2=\"${topMargin + graphHeight}\" stroke=\"#D9D9D9\" stroke-width=\"1\"\/>`;\r\n\r\n    \/\/ y\u8ef8\u306e3\u3064\u306e\u30e1\u30e2\u30ea\u304b\u3089\u53f3\u306b\u5411\u304b\u3063\u3066\u6a2a\u7dda\u3092\u5f15\u304f\r\n    const yValues = [yAxisConfig.minValue, 0, yAxisConfig.maxValue];\r\n    yValues.forEach((value) => {\r\n      \/\/ y\u8ef8\u306e\u5024\u304b\u3089\u30b0\u30e9\u30d5\u5185\u306ey\u5ea7\u6a19\u3092\u8a08\u7b97\r\n      const ratio = (value - yAxisConfig.minValue) \/ (yAxisConfig.maxValue - yAxisConfig.minValue);\r\n      const y = topMargin + graphHeight - (ratio * graphHeight);\r\n      \/\/ \u53f3\u7aef\u307e\u3067\u7dda\u3092\u5f15\u304f\r\n      svg += `<line x1=\"${leftMargin}\" y1=\"${y}\" x2=\"${leftMargin + graphWidth}\" y2=\"${y}\" stroke=\"#D9D9D9\" stroke-width=\"1\"\/>`;\r\n    });\r\n\r\n    \/\/ y\u8ef8\u306e\u30e1\u30e2\u30ea\u30e9\u30d9\u30eb\uff08\u5de6\u5074\uff09\r\n    yValues.forEach((value, index) => {\r\n      const ratio = (value - yAxisConfig.minValue) \/ (yAxisConfig.maxValue - yAxisConfig.minValue);\r\n      let y = topMargin + graphHeight - (ratio * graphHeight);\r\n      const label = yAxisConfig.labels[index];\r\n\r\n      if (IS_MOBILE && value !== 0) {\r\n        \/\/ \u30e2\u30d0\u30a4\u30eb\u6642\u306f0\u4ee5\u5916\u306e\u30e9\u30d9\u30eb\u309290\u5ea6\u56de\u8ee2\r\n        if (value === yAxisConfig.minValue) {\r\n          \/\/ \u30de\u30a4\u30ca\u30b9\u306e\u5024\u30e9\u30d9\u30eb\uff1a\u6700\u5927\u6841\u6570\u306e\u6570\u5b57\u304cx\u8ef8\u306e\u6a2a\u7dda\u306e\u4f4d\u7f6e\u306b\u6765\u308b\u3088\u3046\u306b\u8abf\u6574\r\n          \/\/ x\u8ef8\u306e\u6a2a\u7dda\u306e\u4f4d\u7f6e\u306f topMargin + graphHeight\r\n          \/\/ \u30e9\u30d9\u30eb\u304b\u3089\u6700\u5927\u6841\u6570\u306e\u6570\u5b57\uff08\u6700\u521d\u306e\u6570\u5b57\uff09\u306e\u4f4d\u7f6e\u3092\u8a08\u7b97\r\n          \/\/ \u30e9\u30d9\u30eb\u306f \"-100,000\" \u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u3001\u6700\u5927\u6841\u6570\u306e\u6570\u5b57\u306f \"-\" \u306e\u6b21\u306e\u6587\u5b57\r\n          const firstDigitIndex = label.search(\/\\d\/); \/\/ \u6700\u521d\u306e\u6570\u5b57\u306e\u30a4\u30f3\u30c7\u30c3\u30af\u30b9\r\n          const xAxisY = topMargin + graphHeight; \/\/ x\u8ef8\u306e\u6a2a\u7dda\u306e\u4f4d\u7f6e\r\n          \/\/ \u56de\u8ee2\u306e\u4e2d\u5fc3\u70b9\u3092\u6700\u5927\u6841\u6570\u306e\u6570\u5b57\u306e\u4f4d\u7f6e\u306b\u8a2d\u5b9a\r\n          \/\/ text-anchor=\"start\"\u306b\u3057\u3066\u3001\u6700\u5927\u6841\u6570\u306e\u6570\u5b57\u304c\u56de\u8ee2\u306e\u4e2d\u5fc3\u70b9\u306b\u6765\u308b\u3088\u3046\u306b\u3059\u308b\r\n          \/\/ \u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba10px\u3001\u6587\u5b57\u9593\u9694\u3092\u8003\u616e\uff08\u7d046px\uff09\r\n          const rotationCenterX = leftMargin - 5;\r\n          const rotationCenterY = xAxisY;\r\n          \/\/ \u30c6\u30ad\u30b9\u30c8\u306e\u4f4d\u7f6e\u3092\u8abf\u6574\uff08\u6700\u5927\u6841\u6570\u306e\u6570\u5b57\u304c\u56de\u8ee2\u306e\u4e2d\u5fc3\u70b9\u306b\u6765\u308b\u3088\u3046\u306b\uff09\r\n          const textX = rotationCenterX - firstDigitIndex * 6; \/\/ \u5de6\u306b\u79fb\u52d5\r\n          svg += `<text x=\"${textX}\" y=\"${rotationCenterY}\" text-anchor=\"start\" font-size=\"10px\" fill=\"#000\" transform=\"rotate(-90 ${rotationCenterX} ${rotationCenterY})\">${label}<\/text>`;\r\n        } else {\r\n          \/\/ \u30d7\u30e9\u30b9\u306e\u5024\u30e9\u30d9\u30eb\uff1a\u901a\u5e38\u306e\u51e6\u7406\r\n          svg += `<text x=\"${leftMargin - 5}\" y=\"${y + 4}\" text-anchor=\"end\" font-size=\"10px\" fill=\"#000\" transform=\"rotate(-90 ${leftMargin - 5} ${y + 4})\">${label}<\/text>`;\r\n        }\r\n      } else {\r\n        \/\/ \u901a\u5e38\u6642\u307e\u305f\u306f0\u306e\u30e9\u30d9\u30eb\r\n        \/\/ \u30de\u30a4\u30ca\u30b9\u306e\u5024\u30e9\u30d9\u30eb\u306f\u4e0a\u306b\u79fb\u52d5\r\n        if (value === yAxisConfig.minValue) {\r\n          y = y - 5;\r\n        }\r\n        svg += `<text x=\"${leftMargin - 10}\" y=\"${y + 4}\" text-anchor=\"end\" font-size=\"10px\" fill=\"#000\">${label}<\/text>`;\r\n      }\r\n    });\r\n\r\n    \/\/ x\u8ef8\u306e\u30e1\u30e2\u30ea\u30e9\u30d9\u30eb\uff08\u4e0b\u5074\uff09\r\n    \/\/ 0\u30f6\u6708\u304b\u3089maxMonths\u307e\u3067\u3001tickInterval\u3054\u3068\u306b\u30e9\u30d9\u30eb\u3092\u8868\u793a\r\n    \/\/ \u9593\u9694\u304c12\u306e\u500d\u6570\u306e\u5834\u5408\u306f\u5e74\u5358\u4f4d\u3067\u8868\u793a\r\n    const isYearTickInterval = tickInterval % 12 === 0 && tickInterval >= 12;\r\n    for (let month = 0; month <= maxMonths; month += tickInterval) {\r\n      const ratio = month \/ maxMonths;\r\n      const x = leftMargin + (ratio * graphWidth);\r\n      let label = '';\r\n      if (isYearTickInterval) {\r\n        const years = Math.floor(month \/ 12);\r\n        label = `${years}`;\r\n      } else {\r\n        label = `${month}`;\r\n      }\r\n      svg += `<text x=\"${x}\" y=\"${topMargin + graphHeight + 20}\" text-anchor=\"middle\" font-size=\"10px\" fill=\"#000\">${label}<\/text>`;\r\n    }\r\n\r\n    \/\/ x\u8ef8\u306e\u30e9\u30d9\u30eb\uff08Month or Year\uff09\r\n    svg += `<text x=\"${leftMargin + graphWidth \/ 2}\" y=\"${topMargin + graphHeight + 40}\" text-anchor=\"middle\" font-size=\"10px\" fill=\"#000\">${xAxisLabelType}<\/text>`;\r\n\r\n    \/\/ \u8a08\u7b97\u7d50\u679c\u3092\u3082\u3068\u306b\u3059\u3079\u3066\u306e\u6708\u306e\u7d2f\u7a4d\u5229\u76ca\u3092\u8a08\u7b97\u3057\u3066\u70b9\u3092\u914d\u7f6e\r\n    const pointSize = 4; \/\/ \u70b9\u306e\u30b5\u30a4\u30ba\uff08\u534a\u5f84\uff09\r\n    const pointColor = '#0073CD';\r\n\r\n    \/\/ 0\u30f6\u6708\u76ee\u304b\u3089maxMonths\u307e\u3067\u3001\u3059\u3079\u3066\u306e\u6708\u306e\u7d2f\u7a4d\u5229\u76ca\u3092\u8a08\u7b97\u3057\u3066\u5ea7\u6a19\u3092\u53d6\u5f97\r\n    cumulativeProfit = -initialCost; \/\/ 0\u30f6\u6708\u76ee\u306e\u7d2f\u7a4d\u5229\u76ca\uff08\u521d\u671f\u6295\u8cc7\u984d\u306e\u30de\u30a4\u30ca\u30b9\u5024\uff09\r\n    const points = []; \/\/ \u70b9\u306e\u5ea7\u6a19\u3092\u4fdd\u5b58\u3059\u308b\u914d\u5217\r\n    for (let month = 0; month <= maxMonths; month++) {\r\n      if (month === 0) {\r\n        \/\/ 0\u30f6\u6708\u76ee\u306f\u521d\u671f\u6295\u8cc7\u984d\u306e\u30de\u30a4\u30ca\u30b9\u5024\r\n        cumulativeProfit = -initialCost;\r\n      } else {\r\n        \/\/ \u6708\u6b21\u5229\u76ca\u3092\u8a08\u7b97\r\n        let monthlyProfit = monthlySales - monthlyCost;\r\n        \/\/ \u30ed\u30fc\u30f3\u304c\u3042\u308b\u5834\u5408\u3001\u8fd4\u6e08\u671f\u9593\u4e2d\uff081\u30f6\u6708\u76ee\u304b\u3089repaymentPeriod\u30f6\u6708\u76ee\u307e\u3067\uff09\u306f\u30ed\u30fc\u30f3\u8fd4\u6e08\u984d\u3092\u5dee\u3057\u5f15\u304f\r\n        const isInRepaymentPeriod = useLoan && month >= 1 && month <= repaymentPeriod;\r\n        if (isInRepaymentPeriod) {\r\n          monthlyProfit -= monthlyLoanPayment;\r\n        }\r\n        \/\/ \u7d2f\u7a4d\u5229\u76ca\u3092\u66f4\u65b0\r\n        cumulativeProfit += monthlyProfit;\r\n      }\r\n      \/\/ \u70b9\u306e\u5ea7\u6a19\u3092\u8a08\u7b97\r\n      const x = leftMargin + (month \/ maxMonths) * graphWidth;\r\n      const ratio = (cumulativeProfit - yAxisConfig.minValue) \/ (yAxisConfig.maxValue - yAxisConfig.minValue);\r\n      const y = topMargin + graphHeight - (ratio * graphHeight);\r\n      \/\/ \u5ea7\u6a19\u3092\u914d\u5217\u306b\u4fdd\u5b58\r\n      points.push({ x, y });\r\n    }\r\n    \/\/ \u70b9\u3068\u70b9\u3092\u7dda\u3067\u7e4b\u3050\r\n    const linePoints = points.map(p => `${p.x},${p.y}`).join(' ');\r\n    svg += `<polyline points=\"${linePoints}\" fill=\"none\" stroke=\"${pointColor}\" stroke-width=\"2\"\/>`;\r\n    \/\/ \u5404\u70b9\u3092\u914d\u7f6e\uff08\u5c06\u6765\u7528\u306b\u4eca\u306f\u900f\u660e\u306b\uff09\r\n    points.forEach(point => {\r\n      svg += `<circle cx=\"${point.x}\" cy=\"${point.y}\" r=\"${pointSize}\" fill=\"${pointColor}\" style=\"opacity: 0;\"\/>`;\r\n    });\r\n\r\n    \/\/ \u30b0\u30e9\u30d5\u306e\u4e0a\u90e8\u306b\u9577\u65b9\u5f62\u3092\u914d\u7f6e\uff08\u7dda\u3088\u308a\u4e0a\u306b\u914d\u7f6e\u3057\u3066\u7dda\u304c\u306f\u307f\u51fa\u305f\u90e8\u5206\u3092\u96a0\u3059\uff09\r\n    svg += `<rect x=\"${leftMargin - 1}\" y=\"-1\" width=\"${graphWidth + 1}\" height=\"${topMargin}\" fill=\"#fff\"\/>`;\r\n    svg += `\r\n      <\/svg>\r\n    `;\r\n    chartSection.innerHTML = svg;\r\n  };\r\n\r\n  \/\/ \u3053\u3053\u307e\u3067\u30b0\u30e9\u30d5\u95a2\u9023\u306e\u51e6\u7406\r\n  \/\/ *****************************************\r\n  \/\/ *****************************************************\r\n  \/\/ ********************************************************************\r\n\r\n\r\n\r\n\r\n\r\n  \/\/ ====================================================================================================================================\r\n  \/\/ \u30a4\u30d9\u30f3\u30c8\u30cf\u30f3\u30c9\u30e9\u30fc\r\n  \/\/ ====================================================================================================================================\r\n\r\n  \/**\r\n   * \u753b\u9762\u8aad\u8fbc\u6642\r\n   *\/\r\n  (() => {\r\n    reflectCurrentCurrency();\r\n    calculateTotalInitialInvestment();\r\n    calculateTotalMonthlySalesPlan();\r\n    calculateTotalMaterialCost();\r\n    calculateTotalLaborCost();\r\n    calculateTotalMillingCost();\r\n    calculateMonthlyLoanPayment();\r\n    toggleLoanInputsDisabled();\r\n    showSummaryBeforeCalculate();\r\n  })();\r\n\r\n  \/**\r\n   * \u901a\u8ca8\u9078\u629e\u6642\r\n   *\/\r\n  selectCurrency.addEventListener('change', (e) => {\r\n    reflectCurrentCurrency();\r\n  });\r\n\r\n  \/**\r\n   * Input\u5165\u529b\u6642\r\n   *\/\r\n  allInputs.forEach(input => {\r\n    \/\/ \u30d5\u30a9\u30fc\u30ab\u30b9\u6642\uff1a\u30ab\u30f3\u30de\u3092\u524a\u9664\r\n    input.addEventListener('focus', (e) => {\r\n      const value = e.target.value;\r\n      e.target.value = removeCommas(value);\r\n    });\r\n\r\n    \/\/ \u5165\u529b\u6642\uff1a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u975e\u8868\u793a\u306b\u3059\u308b\r\n    input.addEventListener('input', (e) => {\r\n      const value = e.target.value;\r\n      const hasValue = value && value.trim() !== '';\r\n      if (hasValue) {\r\n        toggleErrorMessage(input, false);\r\n        \/\/ data-max\u3068data-min\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3082\u975e\u8868\u793a\u306b\u3059\u308b\r\n        toggleMaxMinErrorMessage(input, false);\r\n      }\r\n\r\n      \/\/ \u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u9023\u52d5\u51e6\u7406\r\n      \/\/ - input-zirconia-units \u3068 input-units-to-mill-zirconia \u3092\u9023\u52d5\r\n      if (input === inputZirconiaUnits && !isSyncingZirconia) {\r\n        isSyncingZirconia = true;\r\n        inputUnitsToMillZirconia.value = value;\r\n        isSyncingZirconia = false;\r\n      } else if (input === inputUnitsToMillZirconia && !isSyncingZirconia) {\r\n        isSyncingZirconia = true;\r\n        inputZirconiaUnits.value = value;\r\n        isSyncingZirconia = false;\r\n      }\r\n      \/\/ - input-glass-ceramics-units \u3068 input-units-to-mill-glass \u3092\u9023\u52d5\r\n      if (input === inputGlassCeramicsUnits && !isSyncingGlass) {\r\n        isSyncingGlass = true;\r\n        inputUnitsToMillGlass.value = value;\r\n        isSyncingGlass = false;\r\n      } else if (input === inputUnitsToMillGlass && !isSyncingGlass) {\r\n        isSyncingGlass = true;\r\n        inputGlassCeramicsUnits.value = value;\r\n        isSyncingGlass = false;\r\n      }\r\n\r\n      \/\/ Sales Price\u30bb\u30c3\u30c8\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\uff08\u5165\u529b\u6642\uff09\r\n      if (input === inputZirconiaPrice || input === inputZirconiaUnits || input === inputGlassCeramicsPrice || input === inputGlassCeramicsUnits) {\r\n        validateSalesPriceSets();\r\n      }\r\n    });\r\n\r\n    \/\/ \u30d5\u30a9\u30fc\u30ab\u30b9\u30a2\u30a6\u30c8\u6642\uff1a\u6570\u5024\u306e\u307f\u8a31\u53ef\u3001\u5168\u89d2\u3092\u534a\u89d2\u306b\u5909\u63db\u3001\u30ab\u30f3\u30de\u3092\u8ffd\u52a0\u3001\u518d\u8a08\u7b97\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n    input.addEventListener('blur', (e) => {\r\n      const value = e.target.value;\r\n      const hasValue = value && value.trim() !== '';\r\n\r\n      if (hasValue) {\r\n        \/\/ \u6570\u5024\u306e\u307f\u8a31\u53ef\u3001\u5168\u89d2\u3092\u534a\u89d2\u306b\u5909\u63db\r\n        const numericValue = extractNumbers(value);\r\n        e.target.value = numericValue;\r\n        \/\/ \u30ab\u30f3\u30de\u3092\u8ffd\u52a0\r\n        if (numericValue && numericValue.trim() !== '') {\r\n          e.target.value = addCommas(numericValue);\r\n        }\r\n      }\r\n\r\n      \/\/ \u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u9023\u52d5\u51e6\u7406\uff08blur\u6642\uff1a\u30ab\u30f3\u30de\u4ed8\u304d\u306e\u5024\u3092\u540c\u671f\uff09\r\n      \/\/ - input-zirconia-units \u3068 input-units-to-mill-zirconia \u3092\u9023\u52d5\r\n      if (input === inputZirconiaUnits && !isSyncingZirconia) {\r\n        isSyncingZirconia = true;\r\n        const finalValue = e.target.value;\r\n        if (finalValue && finalValue.trim() !== '') {\r\n          inputUnitsToMillZirconia.value = finalValue;\r\n        }\r\n        isSyncingZirconia = false;\r\n      } else if (input === inputUnitsToMillZirconia && !isSyncingZirconia) {\r\n        isSyncingZirconia = true;\r\n        const finalValue = e.target.value;\r\n        if (finalValue && finalValue.trim() !== '') {\r\n          inputZirconiaUnits.value = finalValue;\r\n        }\r\n        isSyncingZirconia = false;\r\n      }\r\n      \/\/ - input-glass-ceramics-units \u3068 input-units-to-mill-glass \u3092\u9023\u52d5\r\n      if (input === inputGlassCeramicsUnits && !isSyncingGlass) {\r\n        isSyncingGlass = true;\r\n        const finalValue = e.target.value;\r\n        if (finalValue && finalValue.trim() !== '') {\r\n          inputUnitsToMillGlass.value = finalValue;\r\n        }\r\n        isSyncingGlass = false;\r\n      } else if (input === inputUnitsToMillGlass && !isSyncingGlass) {\r\n        isSyncingGlass = true;\r\n        const finalValue = e.target.value;\r\n        if (finalValue && finalValue.trim() !== '') {\r\n          inputGlassCeramicsUnits.value = finalValue;\r\n        }\r\n        isSyncingGlass = false;\r\n      }\r\n\r\n      \/\/ required\u5c5e\u6027\u304c\u3042\u308b\u5834\u5408\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n      if (input.hasAttribute('required')) {\r\n        const finalValue = e.target.value;\r\n        const finalHasValue = finalValue && finalValue.trim() !== '';\r\n        const numericValue = finalHasValue ? Number(removeCommas(finalValue)) : 0;\r\n        const showError = !finalHasValue || numericValue === 0;\r\n        toggleErrorMessage(input, showError);\r\n      }\r\n\r\n      \/\/ data-max\u3068data-min\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n      if (input.hasAttribute('data-max') && input.hasAttribute('data-min')) {\r\n        const hasError = validateMaxMin(input);\r\n        toggleMaxMinErrorMessage(input, hasError);\r\n      }\r\n\r\n      \/\/ Initial Investment Cost \u95a2\u9023\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5909\u66f4\u3055\u308c\u305f\u3089\u518d\u8a08\u7b97\r\n      if (input === inputDwxPrice || input === inputOtherExpenses) {\r\n        calculateTotalInitialInvestment();\r\n      }\r\n\r\n      \/\/ Monthly Sales Plan \u95a2\u9023\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5909\u66f4\u3055\u308c\u305f\u3089\u518d\u8a08\u7b97\r\n      if (input === inputZirconiaPrice || input === inputZirconiaUnits || input === inputGlassCeramicsPrice || input === inputGlassCeramicsUnits) {\r\n        \/\/ Sales Price\u30bb\u30c3\u30c8\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n        validateSalesPriceSets();\r\n        \/\/ \u521d\u56de\u5165\u529b\u30d5\u30e9\u30b0\u3092\u66f4\u65b0\uff08\u5024\u304c\u5165\u529b\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u3001\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u5f8c\u306b\u66f4\u65b0\uff09\r\n        if (hasValue && isFirstSalesPriceInput) {\r\n          isFirstSalesPriceInput = false;\r\n        }\r\n        \/\/ \u8a08\u7b97\r\n        calculateTotalMonthlySalesPlan();\r\n      }\r\n\r\n      \/\/ Total Material Cost \u95a2\u9023\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5909\u66f4\u3055\u308c\u305f\u3089\u518d\u8a08\u7b97\r\n      if (input === inputMaterialCostZirconia || input === inputUnitsToMillZirconia || input === inputMaterialCostGlass || input === inputUnitsToMillGlass) {\r\n        calculateTotalMaterialCost();\r\n      }\r\n\r\n      \/\/ Total Labor Cost \u95a2\u9023\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5909\u66f4\u3055\u308c\u305f\u3089\u518d\u8a08\u7b97\r\n      if (input === inputLaborCost || input === inputUnitsToMillZirconia || input === inputUnitsToMillGlass) {\r\n        calculateTotalLaborCost();\r\n      }\r\n\r\n      \/\/ Monthly Loan Payment \u95a2\u9023\u306e\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5909\u66f4\u3055\u308c\u305f\u3089\u518d\u8a08\u7b97\r\n      if (input === inputDownPayment || input === inputAnnualInterestRate || input === inputRepaymentPeriod) {\r\n        calculateMonthlyLoanPayment();\r\n      }\r\n    });\r\n  });\r\n\r\n  \/**\r\n   * Use Loan \u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u5909\u66f4\u6642\r\n   *\/\r\n  inputUseLoan.addEventListener('change', () => {\r\n    toggleLoanInputsDisabled();\r\n  });\r\n\r\n  \/**\r\n   * \u8a08\u7b97\u30dc\u30bf\u30f3\u62bc\u4e0b\u6642\r\n   *\/\r\n  buttonCalculate.addEventListener('click', (e) => {\r\n    e.preventDefault();\r\n\r\n    \/\/ \u3059\u3079\u3066\u306erequired\u5c5e\u6027\u304c\u3042\u308binput\u3092\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n    let hasError = false;\r\n    allInputs.forEach(input => {\r\n      if (input.hasAttribute('required')) {\r\n        const value = input.value;\r\n        const hasValue = value && value.trim() !== '';\r\n        const numericValue = hasValue ? Number(removeCommas(value)) : 0;\r\n        const showError = !hasValue || numericValue === 0;\r\n        toggleErrorMessage(input, showError);\r\n        if (showError) {\r\n          hasError = true;\r\n        }\r\n      }\r\n    });\r\n\r\n    \/\/ Sales Price\u30bb\u30c3\u30c8\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\uff08\u8a08\u7b97\u30dc\u30bf\u30f3\u62bc\u4e0b\u6642\u306f\u5e38\u306b\u30c1\u30a7\u30c3\u30af\uff09\r\n    isFirstSalesPriceInput = false; \/\/ \u8a08\u7b97\u30dc\u30bf\u30f3\u62bc\u4e0b\u6642\u306f\u521d\u56de\u30d5\u30e9\u30b0\u3092\u7121\u52b9\u5316\r\n    const salesPriceError = validateSalesPriceSets();\r\n    if (salesPriceError) {\r\n      hasError = true;\r\n    }\r\n\r\n    \/\/ data-max\u3068data-min\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\r\n    allInputs.forEach(input => {\r\n      if (input.hasAttribute('data-max') && input.hasAttribute('data-min')) {\r\n        const maxMinError = validateMaxMin(input);\r\n        toggleMaxMinErrorMessage(input, maxMinError);\r\n        if (maxMinError) {\r\n          hasError = true;\r\n        }\r\n      }\r\n    });\r\n\r\n    \/\/ \u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u51e6\u7406\u3092\u4e2d\u65ad\u3057\u3001\u6700\u521d\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306b\u30b9\u30af\u30ed\u30fc\u30eb\r\n    if (hasError) {\r\n      \/\/ \u3059\u3079\u3066\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97\r\n      const errorMessages = document.querySelectorAll('.roi-error-message');\r\n      \/\/ \u6700\u521d\u306b\u8868\u793a\u3055\u308c\u3066\u3044\u308b\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u898b\u3064\u3051\u308b\r\n      for (const errorMsg of errorMessages) {\r\n        if (errorMsg.style.display === 'block') {\r\n          errorMsg.scrollIntoView({ behavior: 'smooth', block: 'center' });\r\n          break;\r\n        }\r\n      }\r\n      return;\r\n    }\r\n\r\n    calculateSummary();\r\n    showSummaryAfterCalculate();\r\n    displayChart();\r\n\r\n    \/\/ summaryWrapper\u306b\u30b9\u30af\u30ed\u30fc\u30eb\r\n    if (summaryWrapper) {\r\n      summaryWrapper.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n    }\r\n  });\r\n\r\n  \/**\r\n   * RESET\u30dc\u30bf\u30f3\u62bc\u4e0b\u6642\r\n   *\/\r\n  buttonReset.addEventListener('click', () => {\r\n    \/\/ \u8a08\u7b97\u7d50\u679c\u3092\u30af\u30ea\u30a2\r\n    totalInitialInvestment.textContent = '0';\r\n    totalSales.textContent = '0';\r\n    totalMaterialCost.textContent = '0';\r\n    totalLaborCost.textContent = '0';\r\n    totalMillingCost.textContent = '0';\r\n    monthlyLoanPayment.textContent = '0';\r\n\r\n    \/\/ Summary\u30bb\u30af\u30b7\u30e7\u30f3\u306e\u8a08\u7b97\u7d50\u679c\u3092\u30af\u30ea\u30a2\r\n    summaryInitialCost.textContent = '0';\r\n    summaryPaybackPeriod.textContent = '0.0';\r\n    summaryMonthlyProfitDuringRepayingLoan.textContent = '0';\r\n    summaryMonthlyProfitWithoutLoan.textContent = '0';\r\n    summaryMonthlyTotalSales.textContent = '0';\r\n    summaryMonthlyMillingCost.textContent = '0';\r\n    summaryMonthlyLoanPayment.textContent = '0';\r\n\r\n    \/\/ \u30b0\u30e9\u30d5\u3092\u30af\u30ea\u30a2\r\n    if (chartSection) {\r\n      chartSection.innerHTML = '';\r\n    }\r\n\r\n    \/\/ \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u975e\u8868\u793a\r\n    const errorMessages = document.querySelectorAll('.roi-error-message');\r\n    errorMessages.forEach(msg => {\r\n      msg.style.display = 'none';\r\n    });\r\n\r\n    \/\/ \u5165\u529b\u6b04\u306e\u80cc\u666f\u8272\u3092\u30ea\u30bb\u30c3\u30c8\r\n    allInputs.forEach(input => {\r\n      input.style.background = '';\r\n    });\r\n\r\n    \/\/ \u521d\u56de\u5165\u529b\u30d5\u30e9\u30b0\u3092\u30ea\u30bb\u30c3\u30c8\r\n    isFirstSalesPriceInput = true;\r\n\r\n    \/\/ Summary\u8868\u793a\u3092\u521d\u671f\u72b6\u614b\u306b\u623b\u3059\r\n    showSummaryBeforeCalculate();\r\n\r\n    \/\/ \u30d5\u30a9\u30fc\u30e0\u30ea\u30bb\u30c3\u30c8\u5f8c\u306b\u901a\u8ca8\u8868\u793a\u3092\u66f4\u65b0\uff08\u6b21\u306e\u30a4\u30d9\u30f3\u30c8\u30eb\u30fc\u30d7\u3067\u5b9f\u884c\uff09\r\n    setTimeout(() => {\r\n      reflectCurrentCurrency();\r\n    }, 0);\r\n  });\r\n\r\n});\r\n\r\n\r\n  <\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two [&hellip;]<\/p>\n","protected":false},"author":23,"featured_media":0,"parent":85085,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-87944","page","type-page","status-publish","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"google-site-verification\" content=\"Eodkz-nqydu_Mnxtc81Q6rbKIHsq2jmAaqHbwxWt99U\" \/>\n\t<meta name=\"msvalidate.01\" content=\"D2995FD42F502D07257424BCCFC4E9CF\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"DGSHAPE - Empowering People To Shape The Future\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"ROI Calculator - DGSHAPE\" \/>\n\t\t<meta property=\"og:description\" content=\"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png\" \/>\n\t\t<meta property=\"og:image:width\" content=\"218\" \/>\n\t\t<meta property=\"og:image:height\" content=\"47\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-10-19T16:16:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-10-19T16:34:05+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/rolanddgshapeeurope\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"ROI Calculator - DGSHAPE\" \/>\n\t\t<meta name=\"twitter:description\" content=\"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/dgshape.com\\\/india\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#listItem\",\"name\":\"ROI Calculator\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#listItem\",\"position\":2,\"name\":\"ROI Calculator\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/#listItem\",\"name\":\"Home\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/#organization\",\"name\":\"DGSHAPE A Roland DG Group Company\",\"description\":\"Believing that its technologies and know-how related to 3D milling could contribute to improving the workflow of dental laboratories, Roland DG entered the market in 2010. In 2017, Roland DG transferred its 3D business to a newly-established, wholly-owned subsidiary, DGSHAPE Corporation, to dedicate more time, energy, and staff solely toward the development of innovative dental and other 3D solutions. Today, DGSHAPE continues to expand its customer base by offering solutions to dental laboratories all over the world. Going forward, the company intends to extend the scope of its business to include dental clinics.\",\"url\":\"https:\\\/\\\/dgshape.com\\\/india\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/dgshape.com\\\/wp-content\\\/uploads\\\/2025\\\/06\\\/cropped-dgshapelogo.png\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#organizationLogo\",\"width\":218,\"height\":47},\"image\":{\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/rolanddgshapeeurope\",\"https:\\\/\\\/www.instagram.com\\\/dgshapeeurope\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/dgshapeemea\\\/\"]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#webpage\",\"url\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/\",\"name\":\"ROI Calculator - DGSHAPE\",\"description\":\"DWX Series ROI Simulator Currency INR (\\u20b9) Initial Investment Costs DWX Price* \\u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \\u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \\u20b9 Monthly Sales Plan Sales Price \\\/ Unit* *At least two\",\"inLanguage\":\"en-In\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/homepage\\\/roi-calculator\\\/#breadcrumblist\"},\"datePublished\":\"2026-10-19T16:16:40+00:00\",\"dateModified\":\"2026-10-19T16:34:05+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/#website\",\"url\":\"https:\\\/\\\/dgshape.com\\\/india\\\/\",\"name\":\"DGSHAPE - Dental Milling Machines\",\"alternateName\":\"DGSHAPE\",\"description\":\"Empowering People To Shape The Future\",\"inLanguage\":\"en-In\",\"publisher\":{\"@id\":\"https:\\\/\\\/dgshape.com\\\/india\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<script type=\"text\/javascript\">\n\t\t\t(function(c,l,a,r,i,t,y){\n\t\t\tc[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};t=l.createElement(r);t.async=1;\n\t\t\tt.src=\"https:\/\/www.clarity.ms\/tag\/\"+i+\"?ref=aioseo\";y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);\n\t\t})(window, document, \"clarity\", \"script\", \"nfnfkxhewy\");\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"ROI Calculator - DGSHAPE","description":"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two","canonical_url":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"Eodkz-nqydu_Mnxtc81Q6rbKIHsq2jmAaqHbwxWt99U","msvalidate.01":"D2995FD42F502D07257424BCCFC4E9CF","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/dgshape.com\/india\/#listItem","position":1,"name":"Home","item":"https:\/\/dgshape.com\/india\/","nextItem":{"@type":"ListItem","@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#listItem","name":"ROI Calculator"}},{"@type":"ListItem","@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#listItem","position":2,"name":"ROI Calculator","previousItem":{"@type":"ListItem","@id":"https:\/\/dgshape.com\/india\/#listItem","name":"Home"}}]},{"@type":"Organization","@id":"https:\/\/dgshape.com\/india\/#organization","name":"DGSHAPE A Roland DG Group Company","description":"Believing that its technologies and know-how related to 3D milling could contribute to improving the workflow of dental laboratories, Roland DG entered the market in 2010. In 2017, Roland DG transferred its 3D business to a newly-established, wholly-owned subsidiary, DGSHAPE Corporation, to dedicate more time, energy, and staff solely toward the development of innovative dental and other 3D solutions. Today, DGSHAPE continues to expand its customer base by offering solutions to dental laboratories all over the world. Going forward, the company intends to extend the scope of its business to include dental clinics.","url":"https:\/\/dgshape.com\/india\/","logo":{"@type":"ImageObject","url":"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png","@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#organizationLogo","width":218,"height":47},"image":{"@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/rolanddgshapeeurope","https:\/\/www.instagram.com\/dgshapeeurope\/","https:\/\/www.linkedin.com\/company\/dgshapeemea\/"]},{"@type":"WebPage","@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#webpage","url":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/","name":"ROI Calculator - DGSHAPE","description":"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two","inLanguage":"en-In","isPartOf":{"@id":"https:\/\/dgshape.com\/india\/#website"},"breadcrumb":{"@id":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/#breadcrumblist"},"datePublished":"2026-10-19T16:16:40+00:00","dateModified":"2026-10-19T16:34:05+00:00"},{"@type":"WebSite","@id":"https:\/\/dgshape.com\/india\/#website","url":"https:\/\/dgshape.com\/india\/","name":"DGSHAPE - Dental Milling Machines","alternateName":"DGSHAPE","description":"Empowering People To Shape The Future","inLanguage":"en-In","publisher":{"@id":"https:\/\/dgshape.com\/india\/#organization"}}]},"og:locale":"en_US","og:site_name":"DGSHAPE - Empowering People To Shape The Future","og:type":"article","og:title":"ROI Calculator - DGSHAPE","og:description":"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two","og:url":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/","og:image":"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png","og:image:secure_url":"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png","og:image:width":218,"og:image:height":47,"article:published_time":"2026-10-19T16:16:40+00:00","article:modified_time":"2026-10-19T16:34:05+00:00","article:publisher":"https:\/\/www.facebook.com\/rolanddgshapeeurope","twitter:card":"summary_large_image","twitter:title":"ROI Calculator - DGSHAPE","twitter:description":"DWX Series ROI Simulator Currency INR (\u20b9) Initial Investment Costs DWX Price* \u20b9 *This field is required. *Please enter a value between 0 and 10,000,000 Other Expenses \u20b9 *Please enter a value between 0 and 10,000,000 If you need a quote, click here Total \u20b9 Monthly Sales Plan Sales Price \/ Unit* *At least two","twitter:image":"https:\/\/dgshape.com\/wp-content\/uploads\/2025\/06\/cropped-dgshapelogo.png"},"aioseo_meta_data":{"post_id":"87944","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"WebPage","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-10-19 16:16:41","updated":"2026-10-19 22:49:17","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/dgshape.com\/india\/\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tROI Calculator\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/dgshape.com\/india\/"},{"label":"ROI Calculator","link":"https:\/\/dgshape.com\/india\/homepage\/roi-calculator\/"}],"_links":{"self":[{"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/pages\/87944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/users\/23"}],"replies":[{"embeddable":true,"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/comments?post=87944"}],"version-history":[{"count":5,"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/pages\/87944\/revisions"}],"predecessor-version":[{"id":87958,"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/pages\/87944\/revisions\/87958"}],"up":[{"embeddable":true,"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/pages\/85085"}],"wp:attachment":[{"href":"https:\/\/dgshape.com\/india\/wp-json\/wp\/v2\/media?parent=87944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}