{"id":65759,"date":"2026-07-20T10:06:34","date_gmt":"2026-07-20T08:06:34","guid":{"rendered":"https:\/\/muaytax.com\/?page_id=65759"},"modified":"2026-08-11T07:28:41","modified_gmt":"2026-08-11T05:28:41","slug":"simulador-de-hipoteca","status":"publish","type":"page","link":"https:\/\/muaytax.com\/es\/calculadoras\/simulador-de-hipoteca\/","title":{"rendered":"Simulador de hipoteca"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"65759\" class=\"elementor elementor-65759\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c1f2c70 e-flex e-con-boxed e-con e-parent\" data-id=\"c1f2c70\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c92c135 elementor-widget elementor-widget-html\" data-id=\"c92c135\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<meta charset=\"UTF-8\">\n<section class=\"mtx-calculator\" data-calculator-id=\"calculadora-hipotecas\" data-version=\"v26.6\" data-calculator-version=\"v26.6\" data-ui-version=\"3.8\" data-muay-v2=\"\" data-muay-v3=\"\" data-scale-version=\"compact-v26.1\">\n  <style data-mt-ui=\"v3.8\">\n    \/* Correcci\u00f3n 2026-08-10: stepper m\u00f3vil con objetivo t\u00e1ctil m\u00ednimo de 44 px. *\/\n    .mtx-calculator{--mtx-navy:#031549;--mtx-green:#007a47;--mtx-green-dark:#00643a;--mtx-green-soft:#d9ffee;--mtx-border:#e5ecf7;--mtx-muted:#5b6380;--mtx-bg:#f5f8fc;--mtx-danger:#b42318;--mtx-warning:#8a5a00;box-sizing:border-box;width:100%;font-family:Poppins,Tahoma,Geneva,Verdana,sans-serif;color:var(--mtx-navy);max-width:1100px;margin:0 auto;padding:18px 12px;overflow-x:hidden;font-size:16px}\n    .mtx-calculator,.mtx-calculator *{font-family:Poppins,Tahoma,Geneva,Verdana,sans-serif!important}\n    .mtx-calculator *{box-sizing:border-box}\n    .mt-tool-hero{text-align:center;margin:0 auto 22px;max-width:900px;padding:18px 0 20px}\n    .mt-tool-hero h1{font-size:clamp(1.8rem,3.4vw,2.6rem);line-height:1.16;margin:0 0 14px;font-weight:800;letter-spacing:0;color:var(--mtx-navy)}\n    .mt-tool-hero h1 span{color:var(--mtx-green)}\n    .mt-tool-hero p{font-size:1.05rem;line-height:1.65;margin:0;color:var(--mtx-navy)}\n    .mtx-stepper{display:grid;grid-template-columns:repeat(var(--steps),1fr);gap:6px;border:1px solid var(--mtx-border);border-radius:14px;padding:6px;margin:0 0 18px;background:#fff;scroll-margin-top:72px}\n    .mtx-step-dot{appearance:none;border:0;background:transparent;min-height:46px;border-radius:10px;display:grid;place-items:center;cursor:pointer}\n    .mtx-step-dot span{width:30px;height:30px;border-radius:999px;border:2px solid #e0e9f6;background:#fff;color:#5b6380;display:grid;place-items:center;font-size:.95rem;font-weight:800;line-height:1}\n    .mtx-step-dot.is-active,.mtx-step-dot.is-complete{background:var(--mtx-green-soft)}\n    .mtx-step-dot.is-active span,.mtx-step-dot.is-complete span{border-color:var(--mtx-green);background:#fff;color:var(--mtx-navy)}\n    .mtx-step-dot:focus-visible{outline:2px solid var(--mtx-green);outline-offset:2px}\n    .mtx-panel{border:1px solid var(--mtx-border);border-radius:14px;background:#fff;padding:clamp(18px,3vw,28px);box-shadow:0 12px 32px rgba(0,27,91,.05)}\n    .mtx-step{display:none}\n    .mtx-step.is-active{display:block}\n    .mtx-step h2{font-size:clamp(1.3rem,2.3vw,1.65rem);line-height:1.25;margin:0 0 10px;font-weight:800;letter-spacing:0;color:var(--mtx-navy)}\n    .mtx-step-intro{font-size:.95rem;line-height:1.6;color:var(--mtx-muted);margin:0 0 22px}\n    .mtx-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}\n    .mtx-field{display:grid;gap:8px;min-width:0}\n    .mtx-fieldset{min-width:0;border:0;margin:0;padding:0}\n    .mtx-label,.mtx-legend{font-size:.98rem;font-weight:800;color:var(--mtx-navy)}\n    .mtx-legend{display:block;margin:0 0 8px}\n    .mtx-help{font-size:.84rem;color:var(--mtx-muted);line-height:1.5}\n    .mtx-input{width:100%;min-height:52px;border:1px solid #cfd9e8;border-radius:12px;padding:0 14px;font:600 1rem\/1 Poppins,Tahoma,Geneva,Verdana,sans-serif;color:var(--mtx-navy);background:#fff}\n    .mtx-input:focus{outline:2px solid var(--mtx-green);outline-offset:2px;border-color:var(--mtx-green)}\n    .mtx-input-wrap{position:relative;min-width:0}\n    .mtx-input-wrap .mtx-input{padding-right:54px}\n    .mtx-suffix{position:absolute;top:50%;right:14px;transform:translateY(-50%);font-size:.78rem;font-weight:800;color:var(--mtx-muted);pointer-events:none}\n    .mtx-options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:12px}\n    .mtx-card{position:relative;display:block;border:2px solid var(--mtx-border);border-radius:12px;background:#fff;padding:14px 16px;min-height:82px;cursor:pointer;transition:border-color .18s ease,background-color .18s ease,transform .18s ease}\n    .mtx-card:hover{transform:translateY(-1px);border-color:var(--mtx-green)}\n    .mtx-card:focus-within{outline:2px solid var(--mtx-green);outline-offset:2px}\n    .mtx-card input{position:absolute;inline-size:1px;block-size:1px;opacity:0;pointer-events:none}\n    .mtx-card:has(input:checked){border-color:var(--mtx-green)!important;background:var(--mtx-green-soft)!important}\n    .mtx-card-title{display:block;font-size:.94rem;line-height:1.35;font-weight:800;margin-bottom:5px;color:var(--mtx-navy)}\n    .mtx-card-text{display:block;font-size:.8rem;line-height:1.5;color:var(--mtx-muted);font-weight:500}\n    .mtx-rate-group{display:none}\n    .mtx-rate-group.is-visible{display:block}\n    .mtx-info{display:grid;gap:5px;margin:14px 0 0;padding:14px 16px;border:1px solid var(--mtx-border);border-radius:12px;background:var(--mtx-bg);color:var(--mtx-navy)}\n    .mtx-info strong{font-size:.98rem;line-height:1.35}\n    .mtx-info span{font-size:.84rem;line-height:1.5;color:var(--mtx-muted)}\n    .mtx-result{display:none;margin-top:20px;border-radius:14px;background:var(--mtx-bg);padding:18px;color:var(--mtx-navy)}\n    .mtx-result.is-visible{display:block}\n    .mtx-result-main{display:grid;gap:7px;margin-bottom:16px;padding:16px;border-radius:12px;background:#fff;border:1px solid var(--mtx-border)}\n    .mtx-result-main.is-ready{border-color:var(--mtx-green);background:var(--mtx-green-soft)}\n    .mtx-result-main.is-warning{border-color:#f8dfaa;background:#fff8ea}\n    .mtx-result-main.is-danger{border-color:#ffd3d9;background:#fff6f7}\n    .mtx-result-kicker{font-size:13px;font-weight:800;text-transform:uppercase;color:var(--mtx-muted);letter-spacing:0}\n    .mtx-result-title{font-size:clamp(1.25rem,2.4vw,1.6rem);font-weight:800;line-height:1.18;color:var(--mtx-navy)}\n    .mtx-result-copy{font-size:.92rem;line-height:1.55;color:var(--mtx-muted);margin:0}\n    .mtx-kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}\n    .mtx-kpi{display:grid;gap:6px;min-width:0;padding:14px;border:1px solid var(--mtx-border);border-radius:12px;background:#fff}\n    .mtx-kpi span{font-size:.76rem;text-transform:uppercase;font-weight:800;color:var(--mtx-muted);line-height:1.25}\n    .mtx-kpi strong{font-size:clamp(1.08rem,2vw,1.42rem);line-height:1.15;color:var(--mtx-navy);overflow-wrap:anywhere}\n    .mtx-kpi strong.is-green{color:var(--mtx-green)}\n    .mtx-breakdown{overflow:hidden;border:1px solid var(--mtx-border);border-radius:14px;background:#fff}\n    .mtx-breakdown-row{display:flex;justify-content:space-between;gap:16px;padding:11px 14px;border-bottom:1px solid var(--mtx-border);font-size:.92rem;line-height:1.4;color:var(--mtx-navy)}\n    .mtx-breakdown-row:last-child{border-bottom:0}\n    .mtx-breakdown-row strong{text-align:right;font-weight:800;color:var(--mtx-navy);overflow-wrap:anywhere}\n    .mtx-alerts{display:grid;gap:10px;margin-top:18px}\n    .mtx-alert{padding:11px 13px;border-radius:10px;border:1px solid var(--mtx-border);background:#fff;color:var(--mtx-muted);font-size:.88rem;line-height:1.45}\n    .mtx-alert.is-warning{border-color:#f8dfaa;background:#fff8ea;color:var(--mtx-warning)}\n    .mtx-alert.is-danger{border-color:#ffd3d9;background:#fff6f7;color:var(--mtx-danger)}\n    .mtx-actions{display:flex;align-items:center;gap:12px;margin-top:22px}\n    .mtx-actions .mtx-spacer{flex:1}\n    .mtx-btn{appearance:none;border:1px solid var(--mtx-border);border-radius:12px;min-height:48px;padding:0 18px;font:800 .95rem\/1 Poppins,Tahoma,Geneva,Verdana,sans-serif;cursor:pointer;background:#fff;color:var(--mtx-navy)}\n    .mtx-btn:focus-visible{outline:2px solid var(--mtx-green);outline-offset:2px}\n    .mtx-btn-primary{border-color:var(--mtx-green);background:var(--mtx-green);color:#fff}.mtx-btn-primary:hover{border-color:var(--mtx-green-dark);background:var(--mtx-green-dark)}\n    .mtx-btn[hidden]{display:none}\n    @media (max-width:900px){.mtx-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}\n    @media (max-width:760px){.mtx-calculator{padding:14px 10px}.mt-tool-hero{padding:14px 0 18px}.mt-tool-hero h1{font-size:1.8rem}.mt-tool-hero p{font-size:.95rem;line-height:1.55}.mtx-stepper{gap:4px;padding:5px}.mtx-step-dot{min-height:44px}.mtx-step-dot span{width:28px;height:28px;font-size:.9rem}.mtx-panel{padding:18px 14px}.mtx-grid,.mtx-options,.mtx-kpi-grid{grid-template-columns:1fr}.mtx-actions{display:grid;grid-template-columns:1fr}.mtx-actions .mtx-spacer{display:none}.mtx-btn{width:100%}.mtx-next{order:2}.mtx-back{order:1}.mtx-reset{order:3}.mtx-breakdown-row{display:grid}.mtx-breakdown-row strong{text-align:left}}\n    @media (prefers-reduced-motion:reduce){.mtx-calculator *{scroll-behavior:auto!important;transition-duration:0s!important;animation-duration:0s!important}}\n  <\/style>\n<style data-mt-scale=\"compact-v26.1\">\n:where([data-muay-v3]) {\n  font-size: 14px !important;\n  line-height: 1.45 !important;\n}\n\n:where(.mt-tool-hero) {\n  display: flex !important;\n  flex-direction: column !important;\n  align-items: center !important;\n  width: 100% !important;\n  padding: 16px 0 20px !important;\n  text-align: center !important;\n}\n\n:where(.mt-tool-hero) h1 {\n  width: 100% !important;\n  max-width: 980px !important;\n  margin: 0 0 10px !important;\n  color: #031549 !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: clamp(24.8px, 2.6vw, 31.5px) !important;\n  font-weight: 800 !important;\n  line-height: 1.16 !important;\n  letter-spacing: 0 !important;\n  text-align: center !important;\n  text-transform: none !important;\n}\n\n:where(.mt-tool-hero) h1 span {\n  color: #007a47 !important;\n}\n\n:where(.mt-tool-hero) p {\n  width: 100% !important;\n  max-width: 780px !important;\n  margin: 0 !important;\n  color: #031549 !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: 14.4px !important;\n  font-weight: 400 !important;\n  line-height: 1.55 !important;\n  text-align: center !important;\n}\n\n[data-muay-v3][data-muay-v3] .mt-tool-hero h1 {\n  font-size: clamp(24.8px, 2.6vw, 31.5px) !important;\n}\n\n:where([data-muay-v3]) :is(.calc-nav-row,.rc-nav-row,.gp-nav-row,.autemp-actions,.mtvat-foot,.mtaz-foot,.calc-foot,.rap-actions) > :only-child {\n  margin-left: auto !important;\n}\n\n:where([data-muay-v3]) :is(.calc-nav-row,.rc-nav-row,.gp-nav-row,.autemp-actions,.mtvat-foot,.mtaz-foot,.calc-foot,.rap-actions) > :is(button,a):last-child {\n  margin-left: auto !important;\n}\n\n:where([data-muay-v3]) :is(.autemp-actions,.rap-actions) > :is(#autemp-next,#autemp-reset,#rap-next-btn,#rap-restart-btn) {\n  margin-left: auto !important;\n}\n\n:where([data-muay-v3]) :is(.calc-nav-row,.rc-nav-row,.gp-nav-row,.autemp-actions,.mtvat-foot,.mtaz-foot,.calc-foot,.rap-actions) > :is(button,a) :is(svg,[data-icon],[aria-hidden=\"true\"]) {\n  display: none !important;\n}\n\n:where([data-muay-v3]) .gp-prefixed {\n  padding-left: 46px !important;\n}\n\n:where([data-muay-v3]),\n:where([data-muay-v3]) * {\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n}\n\n:where([data-muay-v3]) :is(.calc-panel-title,.rc-panel-title,.gp-panel-title,.gp-question-title,.mtvat-question-title,.mtaz-question-title,.rap-question-title,.autemp-panel h2,.mtx-step h2,.mtx-panel h2) {\n  margin-top: 0 !important;\n  color: #031549 !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: clamp(18.88px, 2vw, 19.6px) !important;\n  font-weight: 800 !important;\n  line-height: 1.25 !important;\n  letter-spacing: 0 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-panel-subtitle,.rc-panel-subtitle,.gp-help,.mtvat-help,.mtaz-help,.rap-question > p,.autemp-panel-lead,.mtx-step-intro,.mtx-help) {\n  color: #5b6380 !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: 13.44px !important;\n  font-weight: 400 !important;\n  line-height: 1.5 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-choices,.rc-choices,.gp-source-list,.gp-mode-grid,.mtvat-options,.mtaz-options,.rap-options,.calc-ops-grid,.calc-countries-grid,.calc-radio-grid,.mtx-options) {\n  gap: 8px !important;\n}\n\n:where([data-muay-v3]) :is(.calc-choice,.rc-choice,.gp-choice,.gp-source-check,.gp-mode-btn,.gp-switch-card,.mtvat-option,.mtaz-option,.rap-option,.calc-op-card,.calc-radio-card,.calc-country-card,.calc-toggle-row,.calc-radio-pill label,.mtx-card) {\n  box-sizing: border-box !important;\n  position: relative !important;\n  min-height: 58px !important;\n  padding: 11px 12px !important;\n  border: 2px solid #e5ecf7 !important;\n  border-radius: 8px !important;\n  background: #fff !important;\n  color: #031549 !important;\n  cursor: pointer !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: 14.08px !important;\n  font-weight: 700 !important;\n  line-height: 1.35 !important;\n  text-align: left !important;\n  box-shadow: none !important;\n  transition: border-color .18s, background-color .18s, color .18s, transform .12s !important;\n}\n\n:where([data-muay-v3]) :is(.calc-choice,.rc-choice,.gp-choice,.gp-source-check,.gp-mode-btn,.gp-switch-card,.mtvat-option,.mtaz-option,.rap-option,.calc-op-card,.calc-radio-card,.calc-country-card,.calc-toggle-row,.calc-radio-pill label,.mtx-card):hover {\n  border-color: #007a47 !important;\n  background: #f3fdf8 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-choice,.rc-choice,.gp-choice,.gp-source-check,.gp-mode-btn,.gp-switch-card,.mtvat-option,.mtaz-option,.rap-option,.calc-op-card,.calc-radio-card,.calc-country-card,.calc-toggle-row,.calc-radio-pill label,.mtx-card):is(.selected,.is-selected,.is-on,.active,.on),\n:where([data-muay-v3]) :is(.gp-source-check,.gp-switch-card,.calc-op-card,.calc-radio-card,.calc-country-card,.calc-toggle-row,.mtx-card):has(input:checked),\n:where([data-muay-v3]) .calc-radio-pill input:checked + label {\n  border-color: #007a47 !important;\n  background: #d9ffee !important;\n  color: #031549 !important;\n}\n\n:where([data-muay-v3]) :is(.mtvat-marker,.mtaz-marker,.rap-marker) {\n  display: none !important;\n}\n\n:where([data-muay-v3]) :is(.calc-country-card,.calc-radio-card,.gp-source-check,.gp-switch-card,.calc-toggle-row,.rc-choice-check,.calc-op-card) :is(input[type=\"checkbox\"],input[type=\"radio\"]) {\n  position: absolute !important;\n  inset: 0 !important;\n  width: 100% !important;\n  height: 100% !important;\n  margin: 0 !important;\n  opacity: 0 !important;\n  cursor: pointer !important;\n}\n\n:where([data-muay-v3]) .mtvat-option {\n  grid-template-columns: 1fr !important;\n}\n\n:where([data-muay-v3]) .mtaz-option {\n  grid-template-columns: 1fr !important;\n}\n\n:where([data-muay-v3]) .mtaz-option.has-icon {\n  grid-template-columns: 32px 1fr !important;\n}\n\n:where([data-muay-v3]) .rap-option {\n  grid-template-columns: 30px 1fr !important;\n}\n\n:where([data-muay-v3]) :is(.calc-choice strong,.gp-mode-title,.gp-source-title,.gp-switch-title,.mtvat-opt-title,.mtaz-opt-text,.rap-option strong,.calc-op-name,.calc-country-name,.calc-radio-card strong,.calc-toggle-row .tl,.mtx-card-title) {\n  color: #031549 !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: 14.08px !important;\n  font-weight: 800 !important;\n  line-height: 1.35 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-choice span,.gp-mode-desc,.gp-source-desc,.gp-switch-desc,.mtvat-opt-detail,.rap-option .detail,.calc-country-vat,.calc-radio-card span,.calc-toggle-row .ts,.mtx-card-text) {\n  color: #5b6380 !important;\n  font-family: Poppins, Tahoma, Geneva, Verdana, sans-serif !important;\n  font-size: 11.84px !important;\n  font-weight: 500 !important;\n  line-height: 1.5 !important;\n}\n\n[data-muay-v3][data-muay-v3] :is(.calc-step-num,.rc-step-num,.gp-step-num,.mtvat-step-num,.mtaz-step-num,.rap-step-num,.autemp-step > span,.mtx-step-dot span) {\n  width: 24px !important;\n  height: 24px !important;\n  min-width: 24px !important;\n  min-height: 24px !important;\n  max-width: 24px !important;\n  max-height: 24px !important;\n  flex: 0 0 24px !important;\n  aspect-ratio: 1 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-panel,.rc-panel,.gp-panel,.mtvat-question,.mtaz-question,.rap-question,.autemp-panel,.mtx-panel) {\n  padding: 16px 14px !important;\n}\n\n:where([data-muay-v3]) :is(.calc-label,.rc-label,.gp-label,.mtvat-label,.mtaz-label,.rap-label,.autemp-field label,.mtx-label,.mtx-legend) {\n  font-size: 14.4px !important;\n  line-height: 1.3 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-input,.calc-select,.rc-input,.rc-select,.gp-input,.gp-select,.mtvat-input,.mtvat-select,.mtaz-input,.mtaz-select,.rap-input,.rap-select,.autemp-field input,.autemp-field select,.mtx-input,.mtx-select) {\n  min-height: 44px !important;\n  height: 44px !important;\n  padding-top: 0 !important;\n  padding-bottom: 0 !important;\n  border-radius: 8px !important;\n  font-size: 14.72px !important;\n  line-height: 1.2 !important;\n}\n\n:where([data-muay-v3]) :is(.calc-btn,.rc-btn,.gp-btn,.mtvat-btn,.mtaz-btn,.rap-btn,.autemp-btn,.mtx-btn,.hs-button) {\n  min-height: 44px !important;\n  padding: 0 16px !important;\n  border-radius: 8px !important;\n  font-size: 14.4px !important;\n  line-height: 1.1 !important;\n}\n\n@media (max-width: 520px) {\n  :where(.mt-tool-hero) {\n    padding: 12px 0 16px !important;\n  }\n\n  :where(.mt-tool-hero) h1 {\n    font-size: 24.8px !important;\n  }\n\n  [data-muay-v3][data-muay-v3] .mt-tool-hero h1 {\n    font-size: 24.8px !important;\n  }\n\n  :where(.mt-tool-hero) p {\n    font-size: 14.4px !important;\n    line-height: 1.55 !important;\n  }\n\n  :where([data-muay-v3]) :is(.calc-panel-title,.rc-panel-title,.gp-panel-title,.gp-question-title,.mtvat-question-title,.mtaz-question-title,.rap-question-title,.autemp-panel h2,.mtx-step h2,.mtx-panel h2) {\n    font-size: 18.88px !important;\n  }\n\n  :where([data-muay-v3]) :is(.calc-choice,.rc-choice,.gp-choice,.gp-source-check,.gp-mode-btn,.gp-switch-card,.mtvat-option,.mtaz-option,.rap-option,.calc-op-card,.calc-radio-card,.calc-country-card,.calc-toggle-row,.calc-radio-pill label,.mtx-card) {\n    min-height: 58px !important;\n    padding: 10px 11px !important;\n  }\n}\n<\/style>\n\n  <div class=\"mt-tool-hero\">\n    <h1>Calculadora de <span>hipotecas<\/span><\/h1>\n    <p>Estima la cuota mensual de una hipoteca fija o variable con el importe, plazo y tipo de inter\u00e9s que quieras comparar.<\/p>\n  <\/div>\n  <nav class=\"mtx-stepper\" style=\"--steps:4\" role=\"tablist\" aria-label=\"Pasos de la calculadora\">\n    <button class=\"mtx-step-dot is-active\" id=\"mtx-tab-1\" type=\"button\" role=\"tab\" data-step-target=\"1\" aria-selected=\"true\" aria-controls=\"mtx-step-1\" aria-current=\"step\" aria-label=\"Paso 1: Tipo de hipoteca\"><span>1<\/span><\/button>\n    <button class=\"mtx-step-dot\" id=\"mtx-tab-2\" type=\"button\" role=\"tab\" data-step-target=\"2\" aria-selected=\"false\" aria-controls=\"mtx-step-2\" aria-label=\"Paso 2: Importe y plazo\"><span>2<\/span><\/button>\n    <button class=\"mtx-step-dot\" id=\"mtx-tab-3\" type=\"button\" role=\"tab\" data-step-target=\"3\" aria-selected=\"false\" aria-controls=\"mtx-step-3\" aria-label=\"Paso 3: Tipo y costes\"><span>3<\/span><\/button>\n    <button class=\"mtx-step-dot\" id=\"mtx-tab-4\" type=\"button\" role=\"tab\" data-step-target=\"4\" aria-selected=\"false\" aria-controls=\"mtx-step-4\" aria-label=\"Paso 4: Resultado\"><span>4<\/span><\/button>\n  <\/nav>\n  <form class=\"mtx-panel\" data-mtx-form novalidate>\n    <section class=\"mtx-step is-active\" id=\"mtx-step-1\" role=\"tabpanel\" aria-labelledby=\"mtx-tab-1\" data-step=\"1\">\n      <h2>Paso 1 \u00b7 Tipo de hipoteca<\/h2>\n      <p class=\"mtx-step-intro\">Selecciona si quieres calcular una cuota con tipo fijo o con Euribor m\u00e1s diferencial.<\/p>\n      <fieldset class=\"mtx-fieldset\">\n        <legend class=\"mtx-legend\">Modalidad<\/legend>\n        <div class=\"mtx-options\">\n          <label class=\"mtx-card\">\n            <input type=\"radio\" name=\"tipo\" value=\"fija\" checked>\n            <span class=\"mtx-card-title\">Hipoteca fija<\/span>\n            <span class=\"mtx-card-text\">Usa un \u00fanico tipo nominal anual durante todo el plazo.<\/span>\n          <\/label>\n          <label class=\"mtx-card\">\n            <input type=\"radio\" name=\"tipo\" value=\"variable\">\n            <span class=\"mtx-card-title\">Hipoteca variable<\/span>\n            <span class=\"mtx-card-text\">Suma Euribor y diferencial para estimar la cuota del periodo revisado.<\/span>\n          <\/label>\n        <\/div>\n      <\/fieldset>\n    <\/section>\n    <section class=\"mtx-step\" id=\"mtx-step-2\" role=\"tabpanel\" aria-labelledby=\"mtx-tab-2\" data-step=\"2\">\n      <h2>Paso 2 \u00b7 Importe y plazo<\/h2>\n      <p class=\"mtx-step-intro\">Introduce el capital pendiente o pr\u00e9stamo inicial y el plazo total que quieres simular.<\/p>\n      <div class=\"mtx-grid\">\n        <label class=\"mtx-field\" for=\"mtx-importe\">\n          <span class=\"mtx-label\">Importe del pr\u00e9stamo<\/span>\n          <span class=\"mtx-input-wrap\">\n            <input class=\"mtx-input\" id=\"mtx-importe\" type=\"text\" inputmode=\"decimal\" name=\"importe\" placeholder=\"Ej. 180000\">\n            <span class=\"mtx-suffix\">EUR<\/span>\n          <\/span>\n          <span class=\"mtx-help\">Puedes escribir importes con coma o punto decimal.<\/span>\n        <\/label>\n        <label class=\"mtx-field\" for=\"mtx-plazo\">\n          <span class=\"mtx-label\">Plazo<\/span>\n          <span class=\"mtx-input-wrap\">\n            <input class=\"mtx-input\" id=\"mtx-plazo\" type=\"text\" inputmode=\"decimal\" name=\"plazo\" value=\"30\">\n            <span class=\"mtx-suffix\">a\u00f1os<\/span>\n          <\/span>\n          <span class=\"mtx-help\">Rango usado para la estimaci\u00f3n: de 1 a 40 a\u00f1os.<\/span>\n        <\/label>\n        <label class=\"mtx-field\" for=\"mtx-comision-apertura\">\n          <span class=\"mtx-label\">Comisi\u00f3n de apertura<\/span>\n          <span class=\"mtx-input-wrap\">\n            <input class=\"mtx-input\" id=\"mtx-comision-apertura\" type=\"text\" inputmode=\"decimal\" name=\"comisionApertura\" value=\"0\" aria-describedby=\"mtx-comision-help\">\n            <span class=\"mtx-suffix\">%<\/span>\n          <\/span>\n          <span class=\"mtx-help\" id=\"mtx-comision-help\">Porcentaje cobrado al inicio sobre el capital.<\/span>\n        <\/label>\n        <label class=\"mtx-field\" for=\"mtx-costes-iniciales\">\n          <span class=\"mtx-label\">Otros costes iniciales<\/span>\n          <span class=\"mtx-input-wrap\">\n            <input class=\"mtx-input\" id=\"mtx-costes-iniciales\" type=\"text\" inputmode=\"decimal\" name=\"costesIniciales\" value=\"0\" aria-describedby=\"mtx-costes-help\">\n            <span class=\"mtx-suffix\">EUR<\/span>\n          <\/span>\n          <span class=\"mtx-help\" id=\"mtx-costes-help\">Incluye solo costes que quieras incorporar a la comparaci\u00f3n.<\/span>\n        <\/label>\n        <label class=\"mtx-field\" for=\"mtx-amortizacion\">\n          <span class=\"mtx-label\">Amortizaci\u00f3n anticipada opcional<\/span>\n          <span class=\"mtx-input-wrap\">\n            <input class=\"mtx-input\" id=\"mtx-amortizacion\" type=\"text\" inputmode=\"decimal\" name=\"amortizacion\" value=\"0\" aria-describedby=\"mtx-amortizacion-help\">\n            <span class=\"mtx-suffix\">EUR<\/span>\n          <\/span>\n          <span class=\"mtx-help\" id=\"mtx-amortizacion-help\">Compara reducir cuota manteniendo plazo o reducir plazo manteniendo la cuota actual.<\/span>\n        <\/label>\n      <\/div>\n    <\/section>\n    <section class=\"mtx-step\" id=\"mtx-step-3\" role=\"tabpanel\" aria-labelledby=\"mtx-tab-3\" data-step=\"3\">\n      <h2>Paso 3 \u00b7 Tipo de inter\u00e9s<\/h2>\n      <p class=\"mtx-step-intro\">Indica el tipo aplicable. La calculadora no trae el Euribor actualizado: introduce el dato que quieras simular.<\/p>\n      <div class=\"mtx-rate-group is-visible\" data-rate-mode=\"fija\">\n        <label class=\"mtx-field\" for=\"mtx-interes\">\n          <span class=\"mtx-label\">Tipo nominal anual<\/span>\n          <span class=\"mtx-input-wrap\">\n            <input class=\"mtx-input\" id=\"mtx-interes\" type=\"text\" inputmode=\"decimal\" name=\"interes\" placeholder=\"Ej. 3,25\">\n            <span class=\"mtx-suffix\">%<\/span>\n          <\/span>\n          <span class=\"mtx-help\">Introduce el tipo fijo pactado o el tipo que quieras comparar.<\/span>\n        <\/label>\n      <\/div>\n      <div class=\"mtx-rate-group\" data-rate-mode=\"variable\">\n        <div class=\"mtx-grid\">\n          <label class=\"mtx-field\" for=\"mtx-euribor\">\n            <span class=\"mtx-label\">Euribor<\/span>\n            <span class=\"mtx-input-wrap\">\n              <input class=\"mtx-input\" id=\"mtx-euribor\" type=\"text\" inputmode=\"decimal\" name=\"euribor\" placeholder=\"Ej. 3,50\">\n              <span class=\"mtx-suffix\">%<\/span>\n            <\/span>\n            <span class=\"mtx-help\">Puede ser negativo si est\u00e1s simulando un escenario hist\u00f3rico.<\/span>\n          <\/label>\n          <label class=\"mtx-field\" for=\"mtx-diferencial\">\n            <span class=\"mtx-label\">Diferencial<\/span>\n            <span class=\"mtx-input-wrap\">\n              <input class=\"mtx-input\" id=\"mtx-diferencial\" type=\"text\" inputmode=\"decimal\" name=\"diferencial\" placeholder=\"Ej. 1,00\">\n              <span class=\"mtx-suffix\">%<\/span>\n            <\/span>\n            <span class=\"mtx-help\">Diferencial anual que suma el banco al Euribor.<\/span>\n          <\/label>\n        <\/div>\n      <\/div>\n      <div class=\"mtx-info\" aria-label=\"Alcance del c\u00e1lculo\">\n        <strong>Cuota y TAE indicativa<\/strong>\n        <span>La TAE se aproxima con los costes iniciales introducidos. No incluye seguros, productos vinculados, impuestos ni costes peri\u00f3dicos no informados.<\/span>\n      <\/div>\n    <\/section>\n    <section class=\"mtx-step\" id=\"mtx-step-4\" role=\"tabpanel\" aria-labelledby=\"mtx-tab-4\" data-step=\"4\">\n      <h2>Paso 4 \u00b7 Resultado<\/h2>\n      <p class=\"mtx-step-intro\">La cuota se calcula con sistema franc\u00e9s de amortizaci\u00f3n, habitual en hipotecas con cuota constante.<\/p>\n      <div class=\"mtx-result is-visible\" aria-live=\"polite\" aria-atomic=\"true\">\n        <div class=\"mtx-result-main\" id=\"mtx-verdict-box\">\n          <span class=\"mtx-result-kicker\" id=\"mtx-verdict-kicker\">Estimaci\u00f3n inicial<\/span>\n          <strong class=\"mtx-result-title\" id=\"mtx-verdict-title\">Introduce el importe y el tipo de inter\u00e9s para calcular la cuota.<\/strong>\n          <p class=\"mtx-result-copy\" id=\"mtx-verdict-copy\">La calculadora mostrar\u00e1 cuota mensual, total pagado e intereses estimados.<\/p>\n        <\/div>\n        <div class=\"mtx-kpi-grid\">\n          <div class=\"mtx-kpi\">\n            <span>Cuota mensual<\/span>\n            <strong class=\"is-green\" id=\"mtx-cuota\">0,00 \u20ac<\/strong>\n          <\/div>\n          <div class=\"mtx-kpi\">\n            <span>Total pagado<\/span>\n            <strong id=\"mtx-total\">0,00 \u20ac<\/strong>\n          <\/div>\n          <div class=\"mtx-kpi\">\n            <span>Intereses<\/span>\n            <strong id=\"mtx-intereses\">0,00 \u20ac<\/strong>\n          <\/div>\n          <div class=\"mtx-kpi\">\n            <span>Tipo aplicado<\/span>\n            <strong id=\"mtx-tipo-aplicado\">0,00%<\/strong>\n          <\/div>\n          <div class=\"mtx-kpi\">\n            <span>TAE indicativa<\/span>\n            <strong id=\"mtx-tae\">0,00%<\/strong>\n          <\/div>\n          <div class=\"mtx-kpi\">\n            <span>Cuota si el tipo sube +1 punto<\/span>\n            <strong id=\"mtx-stress-1\">0,00 \u20ac<\/strong>\n          <\/div>\n          <div class=\"mtx-kpi\">\n            <span>Cuota si el tipo sube +2 puntos<\/span>\n            <strong id=\"mtx-stress-2\">0,00 \u20ac<\/strong>\n          <\/div>\n        <\/div>\n        <div class=\"mtx-amortization-box\" id=\"mtx-amortization-box\" aria-live=\"polite\">\n          <div class=\"mtx-amortization-title\">Comparador de amortizaci\u00f3n anticipada<\/div>\n          <p id=\"mtx-amortization-copy\">Introduce un importe de amortizaci\u00f3n para comparar cuota, plazo y ahorro financiero.<\/p>\n          <div class=\"mtx-amortization-grid\">\n            <div class=\"mtx-kpi\"><span>Nueva cuota \u00b7 mismo plazo<\/span><strong id=\"mtx-amort-new-payment\">0,00 \u20ac<\/strong><\/div>\n            <div class=\"mtx-kpi\"><span>Nuevo plazo \u00b7 misma cuota<\/span><strong id=\"mtx-amort-new-term\">\u2014<\/strong><\/div>\n            <div class=\"mtx-kpi\"><span>Ahorro \u00b7 mismo plazo<\/span><strong id=\"mtx-amort-saving\">0,00 \u20ac<\/strong><\/div>\n            <div class=\"mtx-kpi\"><span>Capital tras amortizar<\/span><strong id=\"mtx-amort-principal\">0,00 \u20ac<\/strong><\/div>\n          <\/div>\n        <\/div>\n        <div class=\"mtx-breakdown\">\n          <div class=\"mtx-breakdown-row\"><span>Modalidad<\/span><strong id=\"mtx-res-modalidad\">Hipoteca fija<\/strong><\/div>\n          <div class=\"mtx-breakdown-row\"><span>Importe usado<\/span><strong id=\"mtx-res-importe\">0,00 \u20ac<\/strong><\/div>\n          <div class=\"mtx-breakdown-row\"><span>Plazo usado<\/span><strong id=\"mtx-res-plazo\">30 a\u00f1os<\/strong><\/div>\n          <div class=\"mtx-breakdown-row\"><span>Costes iniciales incluidos<\/span><strong id=\"mtx-res-costes\">0,00 \u20ac<\/strong><\/div>\n          <div class=\"mtx-breakdown-row\"><span>F\u00f3rmula aplicada<\/span><strong id=\"mtx-res-formula\">Pendiente de datos<\/strong><\/div>\n        <\/div>\n        <div class=\"mtx-alerts\" id=\"mtx-alerts\"><\/div>\n      <\/div>\n    <\/section>\n    <div class=\"mtx-actions\">\n      <button class=\"mtx-btn mtx-back\" type=\"button\" hidden>Anterior<\/button>\n      <span class=\"mtx-spacer\"><\/span>\n      <button class=\"mtx-btn mtx-btn-primary mtx-next\" type=\"button\">Siguiente<\/button>\n      <button class=\"mtx-btn mtx-reset\" type=\"reset\" hidden>Reiniciar<\/button>\n    <\/div>\n  <\/form>\n  <style data-mt-component=\"hipotecas-amortizacion-v26.6\">\n    .mtx-amortization-box{margin-top:16px;padding:16px;border:1px solid var(--mtx-border);border-radius:12px;background:var(--mtx-bg)}.mtx-amortization-title{margin-bottom:5px;color:var(--mtx-navy);font-size:15px;font-weight:800}.mtx-amortization-box p{margin:0 0 12px;color:var(--mtx-muted);font-size:13px;line-height:1.55}.mtx-amortization-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}@media(max-width:760px){.mtx-amortization-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:430px){.mtx-amortization-grid{grid-template-columns:1fr}}\n  <\/style>\n  <script>\n    (() => {\n      \/\/ Correcci\u00f3n 2026-08-03: costes iniciales, TAE indicativa, escenarios de estr\u00e9s y sem\u00e1ntica del stepper.\n      const root = document.currentScript.closest(\".mtx-calculator\");\n      const steps = [...root.querySelectorAll(\"[data-step]\")];\n      const dots = [...root.querySelectorAll(\"[data-step-target]\")];\n      const back = root.querySelector(\".mtx-back\");\n      const next = root.querySelector(\".mtx-next\");\n      const reset = root.querySelector(\".mtx-reset\");\n      const form = root.querySelector(\"[data-mtx-form]\");\n      let current = 1;\n      const max = steps.length;\n      const money = new Intl.NumberFormat(\"es-ES\", { style: \"currency\", currency: \"EUR\", minimumFractionDigits: 2, maximumFractionDigits: 2 });\n      const pct = new Intl.NumberFormat(\"es-ES\", { minimumFractionDigits: 2, maximumFractionDigits: 2 });\n      const els = {\n        importe: root.querySelector(\"#mtx-importe\"),\n        plazo: root.querySelector(\"#mtx-plazo\"),\n        comisionApertura: root.querySelector(\"#mtx-comision-apertura\"),\n        costesIniciales: root.querySelector(\"#mtx-costes-iniciales\"),\n        interes: root.querySelector(\"#mtx-interes\"),\n        euribor: root.querySelector(\"#mtx-euribor\"),\n        diferencial: root.querySelector(\"#mtx-diferencial\"),\n        rateGroups: [...root.querySelectorAll(\"[data-rate-mode]\")],\n        verdictBox: root.querySelector(\"#mtx-verdict-box\"),\n        verdictKicker: root.querySelector(\"#mtx-verdict-kicker\"),\n        verdictTitle: root.querySelector(\"#mtx-verdict-title\"),\n        verdictCopy: root.querySelector(\"#mtx-verdict-copy\"),\n        cuota: root.querySelector(\"#mtx-cuota\"),\n        total: root.querySelector(\"#mtx-total\"),\n        intereses: root.querySelector(\"#mtx-intereses\"),\n        tipoAplicado: root.querySelector(\"#mtx-tipo-aplicado\"),\n        tae: root.querySelector(\"#mtx-tae\"),\n        stress1: root.querySelector(\"#mtx-stress-1\"),\n        stress2: root.querySelector(\"#mtx-stress-2\"),\n        modalidad: root.querySelector(\"#mtx-res-modalidad\"),\n        importeRes: root.querySelector(\"#mtx-res-importe\"),\n        plazoRes: root.querySelector(\"#mtx-res-plazo\"),\n        costesRes: root.querySelector(\"#mtx-res-costes\"),\n        formula: root.querySelector(\"#mtx-res-formula\"),\n        alerts: root.querySelector(\"#mtx-alerts\")\n      };\n      const selected = name => root.querySelector(`input[name=\"${name}\"]:checked`)?.value || \"\";\n\n      \/\/ Navegacion entre pasos y scroll al inicio de la pregunta activa.\n      const prefersReducedMotion = () => typeof matchMedia === \"function\" && matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n      const focusStep = () => {\n        const stepper = root.querySelector(\".mtx-stepper\");\n        if (!stepper || typeof stepper.scrollIntoView !== \"function\") return;\n        stepper.scrollIntoView({ block: \"start\", behavior: prefersReducedMotion() ? \"auto\" : \"smooth\" });\n      };\n      const paint = () => {\n        steps.forEach(step => step.classList.toggle(\"is-active\", Number(step.dataset.step) === current));\n        dots.forEach(dot => {\n          const n = Number(dot.dataset.stepTarget);\n          dot.classList.toggle(\"is-active\", n === current);\n          dot.classList.toggle(\"is-complete\", n < current);\n          dot.toggleAttribute(\"aria-current\", n === current);\n          dot.setAttribute(\"aria-selected\", String(n === current));\n        });\n        back.hidden = current === 1;\n        next.hidden = current === max;\n        reset.hidden = current !== max;\n      };\n      const go = n => {\n        current = Math.min(max, Math.max(1, n));\n        paint();\n        focusStep();\n      };\n\n      \/\/ Captura y normalizacion de inputs numericos con coma o punto decimal.\n      const parseLocale = input => {\n        const original = String(input?.value || \"\").trim();\n        if (!original) return { empty: true, value: 0, negative: false };\n        let raw = original.replace(\/[^\\d,.-]\/g, \"\");\n        const negative = raw.startsWith(\"-\") || Number(raw.replace(\",\", \".\")) < 0;\n        const comma = (raw.match(\/,\/g) || []).length;\n        const dot = (raw.match(\/\\.\/g) || []).length;\n        if (comma && dot) {\n          const decimal = raw.lastIndexOf(\",\") > raw.lastIndexOf(\".\") ? \",\" : \".\";\n          const thousand = decimal === \",\" ? \".\" : \",\";\n          raw = raw.split(thousand).join(\"\").replace(decimal, \".\");\n        } else if (comma) {\n          raw = raw.replace(\/\\.\/g, \"\").replace(\",\", \".\");\n        } else if (dot > 1) {\n          raw = raw.replace(\/\\.\/g, \"\");\n        } else if (dot === 1) {\n          const parts = raw.split(\".\");\n          if (parts[1] && parts[1].length === 3 && parts[0].length <= 3) raw = raw.replace(\".\", \"\");\n        }\n        const parsed = Number(raw);\n        return { empty: false, value: Number.isFinite(parsed) ? parsed : 0, negative };\n      };\n      const clamp = (value, min, maxValue) => Math.min(maxValue, Math.max(min, value));\n      const fmtPct = value => `${pct.format(value * 100)}%`;\n\n      const paymentFor = (principal, annualRate, months) => {\n        const monthlyRate = annualRate \/ 12;\n        if (monthlyRate === 0) return principal \/ months;\n        const factor = Math.pow(1 + monthlyRate, months);\n        return principal * monthlyRate * factor \/ (factor - 1);\n      };\n\n      const indicativeTae = (netProceeds, monthlyPayment, months) => {\n        if (netProceeds <= 0 || monthlyPayment <= 0 || months <= 0) return 0;\n        const pv = rate => monthlyPayment * (1 - Math.pow(1 + rate, -months)) \/ rate;\n        if (monthlyPayment * months <= netProceeds) return 0;\n        let low = 0;\n        let high = 1;\n        for (let i = 0; i < 90; i += 1) {\n          const mid = (low + high) \/ 2;\n          if (pv(mid) > netProceeds) low = mid;\n          else high = mid;\n        }\n        return Math.pow(1 + (low + high) \/ 2, 12) - 1;\n      };\n\n      \/\/ Calculo principal de cuota hipotecaria con sistema frances.\n      const calculate = () => {\n        const alerts = [];\n        const tipo = selected(\"tipo\") || \"fija\";\n        const importeRaw = parseLocale(els.importe);\n        const plazoRaw = parseLocale(els.plazo);\n        const comisionRaw = parseLocale(els.comisionApertura);\n        const costesRaw = parseLocale(els.costesIniciales);\n        let principal = importeRaw.value;\n        let plazo = plazoRaw.empty ? 30 : plazoRaw.value;\n        if (importeRaw.empty) return { valid: false, tipo, message: \"Introduce el importe del pr\u00e9stamo.\", alerts };\n        if (importeRaw.negative) return { valid: false, tipo, message: \"El importe no puede ser negativo.\", alerts };\n        if (principal <= 0) return { valid: false, tipo, message: \"El importe debe ser mayor que 0.\", alerts };\n        if (plazoRaw.empty || plazo <= 0) return { valid: false, tipo, message: \"El plazo debe estar entre 1 y 40 a\u00f1os.\", alerts };\n        if (plazoRaw.negative) return { valid: false, tipo, message: \"El plazo no puede ser negativo.\", alerts };\n        if (comisionRaw.negative || costesRaw.negative) return { valid: false, tipo, message: \"Las comisiones y costes iniciales no pueden ser negativos.\", alerts };\n        if (principal > 5000000) {\n          principal = 5000000;\n          alerts.push({ type: \"warning\", text: \"El importe se ha limitado a 5.000.000 \u20ac para mantener la simulaci\u00f3n en un rango razonable.\" });\n        }\n        if (plazo < 1 || plazo > 40) {\n          plazo = clamp(plazo, 1, 40);\n          alerts.push({ type: \"warning\", text: \"El plazo se ha ajustado al rango permitido de 1 a 40 a\u00f1os.\" });\n        }\n        let annualRatePercent = 0;\n        let rateLabel = \"\";\n        if (tipo === \"fija\") {\n          const rateRaw = parseLocale(els.interes);\n          if (rateRaw.empty) return { valid: false, tipo, message: \"Introduce el tipo nominal anual de la hipoteca fija.\", alerts };\n          annualRatePercent = rateRaw.value;\n          rateLabel = `Tipo fijo ${pct.format(annualRatePercent)}%`;\n          if (rateRaw.negative || annualRatePercent < 0) {\n            annualRatePercent = 0;\n            alerts.push({ type: \"warning\", text: \"El tipo fijo negativo se ha tratado como 0% para evitar una cuota negativa.\" });\n          }\n        } else {\n          const euriborRaw = parseLocale(els.euribor);\n          const diferencialRaw = parseLocale(els.diferencial);\n          if (euriborRaw.empty) return { valid: false, tipo, message: \"Introduce el Euribor que quieres simular.\", alerts };\n          if (diferencialRaw.empty) return { valid: false, tipo, message: \"Introduce el diferencial de la hipoteca variable.\", alerts };\n          let diferencial = diferencialRaw.value;\n          if (diferencialRaw.negative || diferencial < 0) {\n            diferencial = 0;\n            alerts.push({ type: \"warning\", text: \"El diferencial negativo se ha tratado como 0%.\" });\n          }\n          if (diferencial > 10) {\n            diferencial = 10;\n            alerts.push({ type: \"warning\", text: \"El diferencial se ha limitado al 10%.\" });\n          }\n          annualRatePercent = euriborRaw.value + diferencial;\n          rateLabel = `Euribor ${pct.format(euriborRaw.value)}% + diferencial ${pct.format(diferencial)}%`;\n          if (annualRatePercent < 0) {\n            annualRatePercent = 0;\n            alerts.push({ type: \"warning\", text: \"La suma de Euribor y diferencial es negativa; se ha tratado como 0%.\" });\n          }\n        }\n        if (annualRatePercent > 25) {\n          annualRatePercent = 25;\n          alerts.push({ type: \"warning\", text: \"El tipo anual se ha limitado al 25% para evitar escenarios extremos.\" });\n        }\n        const annualRate = annualRatePercent \/ 100;\n        const months = Math.max(1, Math.round(plazo * 12));\n        const comisionPercent = clamp(comisionRaw.value, 0, 10);\n        if (comisionRaw.value > 10) alerts.push({ type: \"warning\", text: \"La comisi\u00f3n de apertura se ha limitado al 10%.\" });\n        const costes = principal * comisionPercent \/ 100 + costesRaw.value;\n        const netProceeds = principal - costes;\n        if (netProceeds <= 0) return { valid: false, tipo, message: \"Los costes iniciales no pueden igualar o superar el capital recibido.\", alerts };\n        const cuota = paymentFor(principal, annualRate, months);\n        const totalCuotas = cuota * months;\n        const total = totalCuotas + costes;\n        const intereses = Math.max(0, totalCuotas - principal);\n        const tae = indicativeTae(netProceeds, cuota, months);\n        const stress1 = paymentFor(principal, annualRate + 0.01, months);\n        const stress2 = paymentFor(principal, annualRate + 0.02, months);\n        if (annualRate === 0) alerts.push({ type: \"warning\", text: \"Con tipo 0%, la cuota se calcula dividiendo el importe entre los meses del plazo.\" });\n        alerts.push({ type: \"warning\", text: \"La TAE es indicativa: solo incorpora la comisi\u00f3n y los costes iniciales introducidos.\" });\n        return { valid: true, tipo, principal, plazo, months, cuota, total, totalCuotas, intereses, annualRate, rateLabel, comisionPercent, costes, netProceeds, tae, stress1, stress2, alerts };\n      };\n\n      \/\/ Renderizado de resultados y manejo de casos limite sin NaN ni Infinity.\n      const render = () => {\n        const tipo = selected(\"tipo\") || \"fija\";\n        els.rateGroups.forEach(group => group.classList.toggle(\"is-visible\", group.dataset.rateMode === tipo));\n        const result = calculate();\n        els.verdictBox.className = \"mtx-result-main\";\n        els.modalidad.textContent = tipo === \"fija\" ? \"Hipoteca fija\" : \"Hipoteca variable\";\n        if (!result.valid) {\n          els.verdictBox.classList.add(\"is-danger\");\n          els.verdictKicker.textContent = \"Faltan datos\";\n          els.verdictTitle.textContent = result.message;\n          els.verdictCopy.textContent = \"Completa los campos necesarios y la estimaci\u00f3n se actualizar\u00e1 al momento.\";\n          els.cuota.textContent = money.format(0);\n          els.total.textContent = money.format(0);\n          els.intereses.textContent = money.format(0);\n          els.tipoAplicado.textContent = fmtPct(0);\n          els.tae.textContent = fmtPct(0);\n          els.stress1.textContent = money.format(0);\n          els.stress2.textContent = money.format(0);\n          els.importeRes.textContent = money.format(0);\n          els.plazoRes.textContent = \"Pendiente\";\n          els.costesRes.textContent = money.format(0);\n          els.formula.textContent = \"Pendiente de datos\";\n          els.alerts.innerHTML = result.alerts.map(item => `<div class=\"mtx-alert is-${item.type}\">${item.text}<\/div>`).join(\"\");\n          return;\n        }\n        els.verdictBox.classList.add(result.alerts.length ? \"is-warning\" : \"is-ready\");\n        els.verdictKicker.textContent = \"Cuota estimada\";\n        els.verdictTitle.textContent = `${money.format(result.cuota)} al mes`;\n        els.verdictCopy.textContent = tipo === \"fija\" ? \"Estimaci\u00f3n con tipo fijo anual durante todo el plazo y costes iniciales informados.\" : \"Estimaci\u00f3n del periodo revisado con el Euribor, diferencial y costes introducidos.\";\n        els.cuota.textContent = money.format(result.cuota);\n        els.total.textContent = money.format(result.total);\n        els.intereses.textContent = money.format(result.intereses);\n        els.tipoAplicado.textContent = fmtPct(result.annualRate);\n        els.tae.textContent = fmtPct(result.tae);\n        els.stress1.textContent = money.format(result.stress1);\n        els.stress2.textContent = money.format(result.stress2);\n        els.importeRes.textContent = money.format(result.principal);\n        els.plazoRes.textContent = `${pct.format(result.plazo).replace(\",00\", \"\")} a\u00f1os (${result.months} meses)`;\n        els.costesRes.textContent = money.format(result.costes);\n        els.formula.textContent = result.annualRate === 0 ? \"Capital \/ meses\" : \"Cuota francesa mensual\";\n        els.alerts.innerHTML = result.alerts.map(item => `<div class=\"mtx-alert is-${item.type}\">${item.text}<\/div>`).join(\"\");\n      };\n\n      back.addEventListener(\"click\", () => go(current - 1));\n      next.addEventListener(\"click\", () => go(current + 1));\n      reset.addEventListener(\"click\", () => {\n        setTimeout(() => {\n          root.querySelector('input[name=\"tipo\"][value=\"fija\"]').checked = true;\n          els.plazo.value = \"30\";\n          els.comisionApertura.value = \"0\";\n          els.costesIniciales.value = \"0\";\n          render();\n          go(1);\n        }, 0);\n      });\n      dots.forEach(dot => dot.addEventListener(\"click\", () => go(Number(dot.dataset.stepTarget))));\n      form.addEventListener(\"input\", render);\n      form.addEventListener(\"change\", render);\n      paint();\n      render();\n      window.MTHipotecas2026 = { paymentFor, indicativeTae };\n    })();\n  <\/script>\n  <script>\n    (() => {\n      \"use strict\";\n      \/* Mejora 2026-08-10: comparador de amortizaci\u00f3n anticipada con cuota o plazo constante. *\/\n      const root = document.querySelector('.mtx-calculator[data-calculator-version=\"v26.6\"]');\n      if (!root || root.dataset.mtxAmortizationReady === \"1\") return;\n      root.dataset.mtxAmortizationReady = \"1\";\n      const form = root.querySelector(\"[data-mtx-form]\");\n      const money = new Intl.NumberFormat(\"es-ES\", { style: \"currency\", currency: \"EUR\" });\n      const output = {\n        copy: root.querySelector(\"#mtx-amortization-copy\"),\n        payment: root.querySelector(\"#mtx-amort-new-payment\"),\n        term: root.querySelector(\"#mtx-amort-new-term\"),\n        saving: root.querySelector(\"#mtx-amort-saving\"),\n        principal: root.querySelector(\"#mtx-amort-principal\")\n      };\n\n      const parseLocale = value => {\n        let raw = String(value || \"\").trim().replace(\/[^0-9,.-]\/g, \"\");\n        if (raw.includes(\",\") && raw.includes(\".\")) raw = raw.replace(\/\\.\/g, \"\").replace(\",\", \".\");\n        else if (raw.includes(\",\")) raw = raw.replace(\",\", \".\");\n        const parsed = Number(raw);\n        return Number.isFinite(parsed) ? parsed : 0;\n      };\n\n      const formatTerm = months => {\n        const rounded = Math.max(0, Math.ceil(months));\n        const years = Math.floor(rounded \/ 12);\n        const rest = rounded % 12;\n        if (!years) return `${rest} meses`;\n        if (!rest) return `${years} a\u00f1os`;\n        return `${years} a\u00f1os y ${rest} meses`;\n      };\n\n      const monthsForPayment = (principal, monthlyRate, payment) => {\n        if (principal <= 0 || payment <= 0) return 0;\n        if (monthlyRate === 0) return principal \/ payment;\n        if (payment <= principal * monthlyRate) return Infinity;\n        return -Math.log(1 - principal * monthlyRate \/ payment) \/ Math.log(1 + monthlyRate);\n      };\n\n      const renderAmortization = () => {\n        if (!window.MTHipotecas2026) return;\n        const principal = Math.max(0, parseLocale(root.querySelector(\"#mtx-importe\").value));\n        const years = Math.max(1, Math.min(40, parseLocale(root.querySelector(\"#mtx-plazo\").value) || 30));\n        const amortization = Math.max(0, parseLocale(root.querySelector(\"#mtx-amortizacion\").value));\n        const variable = root.querySelector('input[name=\"tipo\"][value=\"variable\"]').checked;\n        const annualPercent = variable ? parseLocale(root.querySelector(\"#mtx-euribor\").value) + parseLocale(root.querySelector(\"#mtx-diferencial\").value) : parseLocale(root.querySelector(\"#mtx-interes\").value);\n        const annualRate = Math.max(0, Math.min(100, annualPercent)) \/ 100;\n        const months = Math.round(years * 12);\n        if (principal <= 0 || amortization <= 0 || amortization >= principal || months <= 0) {\n          output.copy.textContent = amortization >= principal && principal > 0 ? \"La amortizaci\u00f3n debe ser inferior al capital pendiente.\" : \"Introduce un importe de amortizaci\u00f3n para comparar cuota, plazo y ahorro financiero.\";\n          output.payment.textContent = money.format(0);\n          output.term.textContent = \"\u2014\";\n          output.saving.textContent = money.format(0);\n          output.principal.textContent = money.format(Math.max(0, principal - Math.min(principal, amortization)));\n          return;\n        }\n        const originalPayment = window.MTHipotecas2026.paymentFor(principal, annualRate, months);\n        const newPrincipal = principal - amortization;\n        const newPayment = window.MTHipotecas2026.paymentFor(newPrincipal, annualRate, months);\n        const newMonths = monthsForPayment(newPrincipal, annualRate \/ 12, originalPayment);\n        const savingKeepTerm = Math.max(0, originalPayment * months - (amortization + newPayment * months));\n        output.copy.textContent = \"Comparaci\u00f3n inmediata tras amortizar, con pagos mensuales y sistema franc\u00e9s. No descuenta una posible comisi\u00f3n de reembolso anticipado.\";\n        output.payment.textContent = money.format(newPayment);\n        output.term.textContent = Number.isFinite(newMonths) ? formatTerm(newMonths) : \"Cuota insuficiente\";\n        output.saving.textContent = money.format(savingKeepTerm);\n        output.principal.textContent = money.format(newPrincipal);\n      };\n\n      form.addEventListener(\"input\", renderAmortization);\n      form.addEventListener(\"change\", renderAmortization);\n      root.querySelector(\".mtx-reset\").addEventListener(\"click\", () => {\n        setTimeout(() => {\n          root.querySelector(\"#mtx-amortizacion\").value = \"0\";\n          renderAmortization();\n        }, 0);\n      });\n      renderAmortization();\n      window.MTHipotecas2026.amortizationMonths = monthsForPayment;\n    })();\n  <\/script>\n<\/section>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9f65203 e-flex e-con-boxed e-con e-parent\" data-id=\"9f65203\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2ea9078 elementor-widget elementor-widget-text-editor\" data-id=\"2ea9078\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<h2>C\u00f3mo funciona el simulador de hipoteca<\/h2><div>Solamente tienes que seguir estos 4 pasos:<\/div>\n<ol>\n<li class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Tipo de hipoteca. <\/strong>Elige si simulas una hipoteca fija o una hipoteca variable. La fija usa un \u00fanico tipo durante todo el plazo; la variable combina Eur\u00edbor y diferencial.<br><\/li>\n<li class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong style=\"font-size: 16px;\">Importe y plazo. <\/strong>Indica el capital pendiente o el pr\u00e9stamo inicial, y el plazo total en a\u00f1os. El simulador admite de 1 a 40 a\u00f1os.<br><\/li>\n<li class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong style=\"font-size: 16px;\">Tipo de inter\u00e9s. <\/strong>Introduce el tipo nominal anual: el tipo fijo pactado, o el que quieras comparar. Si es variable, a\u00f1ade el Eur\u00edbor y el diferencial por separado.<br><\/li>\n<li class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong style=\"font-size: 16px;\">Resultado. <\/strong>El simulador aplica el sistema franc\u00e9s de amortizaci\u00f3n y devuelve la cuota mensual, el total pagado y los intereses.<\/li>\n<\/ol>\n<h3>C\u00f3mo interpretar el resultado<\/h3>\n<p>La cuota mensual responde a la pregunta inmediata: si puedes pagarla o no. Como referencia de prudencia, suele recomendarse que no supere el 30-35 % de los ingresos netos del hogar.<\/p>\n<p>No es una norma legal, sino un criterio de riesgo que las entidades aplican de forma orientativa al valorar una concesi\u00f3n.<\/p>\n<p>Los intereses totales responden a otra pregunta distinta: cu\u00e1nto te cuesta el pr\u00e9stamo. Y ah\u00ed es donde el plazo lo decide casi todo.<\/p>\n<ul>\n<li><strong>Plazo largo<\/strong> \u2192 cuota m\u00e1s baja, m\u00e1s intereses en total.<\/li>\n<li><strong>Plazo corto<\/strong> \u2192 cuota m\u00e1s alta, menos intereses en total.<\/li>\n<\/ul>\n<p>No hay una opci\u00f3n mejor. Depende de tu capacidad de pago mensual y, sobre todo, de la estabilidad de tus ingresos.<br>Si facturas de forma irregular, una cuota m\u00e1s baja con plazo largo puede ser m\u00e1s prudente aunque salga m\u00e1s cara.<\/p>\n<h2>Qu\u00e9 tipos de hipoteca puedes simular<\/h2>\n<p>En Espa\u00f1a conviven tres modalidades. Cambia c\u00f3mo se fija el tipo de inter\u00e9s y, con ello, cu\u00e1nta certeza tienes sobre lo que pagar\u00e1s dentro de diez a\u00f1os.<\/p>\n<ul>\n<li><strong>Hipoteca fija.<\/strong> Un \u00fanico tipo nominal durante toda la vida del pr\u00e9stamo. La cuota no se mueve ni un euro, pase lo que pase con los tipos de inter\u00e9s. Pagas previsibilidad, y el precio de salida acostumbra a ser m\u00e1s alto que el inicial de una variable.<br><br><\/li>\n<li><strong>Hipoteca variable.&nbsp;<\/strong>El tipo se compone de un \u00edndice de referencia, habitualmente el Eur\u00edbor, m\u00e1s un diferencial fijo que aplica el banco.<br><br><u>Tipo aplicable = Eur\u00edbor + diferencial<\/u><br><br>El diferencial no cambia nunca: queda fijado en la escritura. El Eur\u00edbor s\u00ed, y es lo que hace que tu cuota suba o baje en cada revisi\u00f3n.<br><br><\/li>\n<li><b>Hipoteca mixta.&nbsp;<\/b>Un periodo inicial a tipo fijo, habitualmente los primeros a\u00f1os, y el resto a tipo variable. Cada vez m\u00e1s presente en la oferta bancaria.<\/li>\n<\/ul>\n<p>Ning\u00fan tipo es mejor que otro por s\u00ed mismo. La elecci\u00f3n depende de tu tolerancia al riesgo y del margen que tenga tu presupuesto para absorber una subida.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ac54393 elementor-widget elementor-widget-heading\" data-id=\"ac54393\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Preguntas frecuentes sobre el simulador de hipoteca <\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d783d9b elementor-widget elementor-widget-accordion\" data-id=\"d783d9b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"accordion.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion\">\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2251\" class=\"elementor-tab-title\" data-tab=\"1\" role=\"button\" aria-controls=\"elementor-tab-content-2251\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"icon icon-down-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"icon icon-up-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u00bfCu\u00e1nto dinero me puede prestar el banco?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2251\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"1\" role=\"region\" aria-labelledby=\"elementor-tab-title-2251\"><p>Las entidades suelen financiar en torno al 80 % del valor de tasaci\u00f3n o de compra, el menor de los dos. Ese porcentaje se conoce como LTV o ratio pr\u00e9stamo-valor.<\/p><p>El 20 % restante sale de tus ahorros, m\u00e1s los gastos e impuestos de la operaci\u00f3n. Como referencia, conviene tener disponible alrededor del 30 % del precio de la vivienda.<\/p><p>Adem\u00e1s valoran tu capacidad de endeudamiento: que la suma de todas tus cuotas no supere aproximadamente el 35 % de tus ingresos netos. Son criterios orientativos y cada entidad aplica su propia pol\u00edtica.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2252\" class=\"elementor-tab-title\" data-tab=\"2\" role=\"button\" aria-controls=\"elementor-tab-content-2252\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"icon icon-down-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"icon icon-up-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u00bfQu\u00e9 diferencia hay entre el TIN y la TAE?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2252\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"2\" role=\"region\" aria-labelledby=\"elementor-tab-title-2252\">El TIN es el tipo nominal: el porcentaje que aplica el banco sobre el capital pendiente. Es el dato que usa este simulador para calcular la cuota.\n\nLa TAE incorpora adem\u00e1s las comisiones, los gastos y el plazo de la operaci\u00f3n. Refleja el coste efectivo del pr\u00e9stamo y es la cifra que permite comparar ofertas de forma homog\u00e9nea.\n\nUna hipoteca puede tener un TIN muy atractivo y una TAE alta si lleva asociadas comisiones o productos vinculados. Compara siempre por TAE.<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2253\" class=\"elementor-tab-title\" data-tab=\"3\" role=\"button\" aria-controls=\"elementor-tab-content-2253\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"icon icon-down-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"icon icon-up-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u00bfCada cu\u00e1nto se revisa una hipoteca variable y cu\u00e1nto puede subir la cuota?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2253\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"3\" role=\"region\" aria-labelledby=\"elementor-tab-title-2253\">La revisi\u00f3n es peri\u00f3dica y su frecuencia consta en la escritura: lo habitual es cada seis o doce meses. En esa fecha se toma el Eur\u00edbor vigente, se le suma tu diferencial y se recalcula la cuota para el periodo siguiente.\n\nNo existe ning\u00fan l\u00edmite legal general a la subida, salvo que tu escritura incluya un techo pactado. La cuota puede subir tanto como suba el \u00edndice de referencia.\n\nPor eso conviene simular escenarios con el Eur\u00edbor bastante por encima del actual antes de decidirte por una variable.<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-accordion-item\">\n\t\t\t\t\t<div id=\"elementor-tab-title-2254\" class=\"elementor-tab-title\" data-tab=\"4\" role=\"button\" aria-controls=\"elementor-tab-content-2254\" aria-expanded=\"false\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon elementor-accordion-icon-right\" aria-hidden=\"true\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-closed\"><i class=\"icon icon-down-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t<span class=\"elementor-accordion-icon-opened\"><i class=\"icon icon-up-arrow1\"><\/i><\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-accordion-title\" tabindex=\"0\">\u00bfQu\u00e9 gastos e impuestos pago adem\u00e1s de la cuota?<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div id=\"elementor-tab-content-2254\" class=\"elementor-tab-content elementor-clearfix\" data-tab=\"4\" role=\"region\" aria-labelledby=\"elementor-tab-title-2254\"><p>Desde la Ley 5\/2019, de 15 de marzo, reguladora de los contratos de cr\u00e9dito inmobiliario, el reparto de gastos de formalizaci\u00f3n del pr\u00e9stamo est\u00e1 fijado por ley y no admite pacto en contra.<\/p><ul><li><strong>Paga el banco:<\/strong> notar\u00eda de la escritura del pr\u00e9stamo, Registro de la Propiedad, gestor\u00eda y el Impuesto de Actos Jur\u00eddicos Documentados del pr\u00e9stamo.<br \/><br \/><\/li><li><strong>Pagas t\u00fa:<\/strong> la tasaci\u00f3n del inmueble, las copias de escritura que solicites y la comisi\u00f3n de apertura si est\u00e1 pactada.<\/li><\/ul><p>Aparte van los impuestos de la compraventa, que siempre corresponden al comprador: ITP en vivienda de segunda mano, o IVA m\u00e1s AJD en obra nueva. Los tipos los fija cada comunidad aut\u00f3noma, as\u00ed que conviene comprobar el vigente en la tuya.<\/p><\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t<script type=\"application\/ld+json\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"\\u00bfCu\\u00e1nto dinero me puede prestar el banco?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p>Las entidades suelen financiar en torno al 80 % del valor de tasaci\\u00f3n o de compra, el menor de los dos. Ese porcentaje se conoce como LTV o ratio pr\\u00e9stamo-valor.<\\\/p><p>El 20 % restante sale de tus ahorros, m\\u00e1s los gastos e impuestos de la operaci\\u00f3n. Como referencia, conviene tener disponible alrededor del 30 % del precio de la vivienda.<\\\/p><p>Adem\\u00e1s valoran tu capacidad de endeudamiento: que la suma de todas tus cuotas no supere aproximadamente el 35 % de tus ingresos netos. Son criterios orientativos y cada entidad aplica su propia pol\\u00edtica.<\\\/p>\"}},{\"@type\":\"Question\",\"name\":\"\\u00bfQu\\u00e9 diferencia hay entre el TIN y la TAE?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"El TIN es el tipo nominal: el porcentaje que aplica el banco sobre el capital pendiente. Es el dato que usa este simulador para calcular la cuota.\\n\\nLa TAE incorpora adem\\u00e1s las comisiones, los gastos y el plazo de la operaci\\u00f3n. Refleja el coste efectivo del pr\\u00e9stamo y es la cifra que permite comparar ofertas de forma homog\\u00e9nea.\\n\\nUna hipoteca puede tener un TIN muy atractivo y una TAE alta si lleva asociadas comisiones o productos vinculados. Compara siempre por TAE.\"}},{\"@type\":\"Question\",\"name\":\"\\u00bfCada cu\\u00e1nto se revisa una hipoteca variable y cu\\u00e1nto puede subir la cuota?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"La revisi\\u00f3n es peri\\u00f3dica y su frecuencia consta en la escritura: lo habitual es cada seis o doce meses. En esa fecha se toma el Eur\\u00edbor vigente, se le suma tu diferencial y se recalcula la cuota para el periodo siguiente.\\n\\nNo existe ning\\u00fan l\\u00edmite legal general a la subida, salvo que tu escritura incluya un techo pactado. La cuota puede subir tanto como suba el \\u00edndice de referencia.\\n\\nPor eso conviene simular escenarios con el Eur\\u00edbor bastante por encima del actual antes de decidirte por una variable.\"}},{\"@type\":\"Question\",\"name\":\"\\u00bfQu\\u00e9 gastos e impuestos pago adem\\u00e1s de la cuota?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"<p>Desde la Ley 5\\\/2019, de 15 de marzo, reguladora de los contratos de cr\\u00e9dito inmobiliario, el reparto de gastos de formalizaci\\u00f3n del pr\\u00e9stamo est\\u00e1 fijado por ley y no admite pacto en contra.<\\\/p><ul><li><strong>Paga el banco:<\\\/strong> notar\\u00eda de la escritura del pr\\u00e9stamo, Registro de la Propiedad, gestor\\u00eda y el Impuesto de Actos Jur\\u00eddicos Documentados del pr\\u00e9stamo.<br \\\/><br \\\/><\\\/li><li><strong>Pagas t\\u00fa:<\\\/strong> la tasaci\\u00f3n del inmueble, las copias de escritura que solicites y la comisi\\u00f3n de apertura si est\\u00e1 pactada.<\\\/li><\\\/ul><p>Aparte van los impuestos de la compraventa, que siempre corresponden al comprador: ITP en vivienda de segunda mano, o IVA m\\u00e1s AJD en obra nueva. Los tipos los fija cada comunidad aut\\u00f3noma, as\\u00ed que conviene comprobar el vigente en la tuya.<\\\/p>\"}}]}<\/script>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Calculadora de hipotecas Estima la cuota mensual de una hipoteca fija o variable con el importe, plazo y tipo de [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"parent":1713,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"tramite":[],"class_list":["post-65759","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/pages\/65759","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/comments?post=65759"}],"version-history":[{"count":42,"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/pages\/65759\/revisions"}],"predecessor-version":[{"id":66699,"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/pages\/65759\/revisions\/66699"}],"up":[{"embeddable":true,"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/pages\/1713"}],"wp:attachment":[{"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/media?parent=65759"}],"wp:term":[{"taxonomy":"tramite","embeddable":true,"href":"https:\/\/muaytax.com\/es\/wp-json\/wp\/v2\/tramite?post=65759"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}