{"id":37656,"date":"2026-07-11T10:36:28","date_gmt":"2026-07-11T09:36:28","guid":{"rendered":"https:\/\/plexoproperties.com\/?page_id=37656"},"modified":"2026-07-11T16:29:08","modified_gmt":"2026-07-11T15:29:08","slug":"rental-calculator","status":"publish","type":"page","link":"https:\/\/plexoproperties.com\/nl\/rental-calculator\/","title":{"rendered":"Rental calculator"},"content":{"rendered":"\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Rental Return Estimator \u2013 Plexo Properties<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Lora:ital,wght@0,400;0,600;0,700;1,400&#038;family=Inter:wght@300;400;500;600;700&#038;display=swap\" rel=\"stylesheet\">\n<style>\n\n\/* \u2500\u2500\u2500 Reset \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\nbutton { font-family: inherit; cursor: pointer; border: none; background: none; }\ninput, select { font-family: inherit; }\n\n\/* \u2500\u2500\u2500 Root tokens \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n:root {\n  --navy:      #004274;\n  --navy-dark: #153965;\n  --navy-soft: #e8f0f8;\n  --gold:      #C9A84C;\n  --gold-light:#f5edda;\n  --text:      #2e3e49;\n  --text-soft: #6b7f8c;\n  --text-muted:#9aaab5;\n  --bg:        #f8f8f8;\n  --white:     #ffffff;\n  --border:    #dde6ed;\n  --success:   #2e7d52;\n  --radius-sm: 6px;\n  --radius-md: 10px;\n  --radius-lg: 16px;\n  --shadow-sm: 0 1px 4px rgba(0,66,116,.07);\n  --shadow-md: 0 4px 20px rgba(0,66,116,.10);\n  --shadow-lg: 0 8px 40px rgba(0,66,116,.13);\n}\n\n\/* \u2500\u2500\u2500 Wrapper \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-calc {\n  font-family: 'Inter', sans-serif;\n  font-size: 14px;\n  color: var(--text);\n  background: var(--bg);\n  max-width: 780px;\n  margin: 0 auto;\n  padding: 0 0 32px;\n}\n\n\/* \u2500\u2500\u2500 Intro strip \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-intro {\n  padding: 32px 0 24px;\n  text-align: center;\n}\n.pp-intro__eyebrow {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: 2.5px;\n  text-transform: uppercase;\n  color: var(--gold);\n  margin-bottom: 10px;\n}\n.pp-intro__eyebrow::before,\n.pp-intro__eyebrow::after {\n  content: '';\n  display: block;\n  width: 24px;\n  height: 1px;\n  background: var(--gold);\n  opacity: .5;\n}\n.pp-intro__title {\n  font-family: 'Lora', serif;\n  font-size: 30px;\n  font-weight: 700;\n  color: var(--navy-dark);\n  line-height: 1.2;\n  margin-bottom: 10px;\n}\n.pp-intro__sub {\n  font-size: 13px;\n  color: var(--text-soft);\n  font-weight: 300;\n  max-width: 520px;\n  margin: 0 auto;\n  line-height: 1.6;\n}\n\n\/* \u2500\u2500\u2500 Mode toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-mode {\n  display: flex;\n  justify-content: center;\n  margin-bottom: 24px;\n}\n.pp-mode__inner {\n  display: inline-flex;\n  background: var(--white);\n  border: 1px solid var(--border);\n  border-radius: 50px;\n  padding: 4px;\n  box-shadow: var(--shadow-sm);\n}\n.pp-mode__btn {\n  padding: 8px 22px;\n  border-radius: 50px;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: 1px;\n  text-transform: uppercase;\n  color: var(--text-soft);\n  transition: all .2s;\n}\n.pp-mode__btn.active {\n  background: var(--navy);\n  color: var(--white);\n  box-shadow: 0 2px 8px rgba(0,66,116,.25);\n}\n\n\/* \u2500\u2500\u2500 Summary card (results at top) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-summary {\n  background: var(--white);\n  border-radius: var(--radius-lg);\n  box-shadow: var(--shadow-md);\n  padding: 28px 28px 24px;\n  margin-bottom: 16px;\n  border-top: 3px solid var(--gold);\n}\n.pp-summary__header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 20px;\n}\n.pp-summary__label {\n  font-size: 10px;\n  font-weight: 700;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: var(--text-muted);\n}\n.pp-summary__location {\n  font-size: 11px;\n  color: var(--text-soft);\n  font-weight: 500;\n}\n\n\/* Yield meters *\/\n.pp-meters {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 16px;\n  margin-bottom: 24px;\n}\n@media (max-width: 480px) { .pp-meters { grid-template-columns: 1fr; } }\n\n.pp-meter {\n  background: var(--bg);\n  border-radius: var(--radius-md);\n  padding: 18px 20px;\n  position: relative;\n  overflow: hidden;\n}\n.pp-meter::before {\n  content: '';\n  position: absolute;\n  left: 0; top: 0; bottom: 0;\n  width: 3px;\n  background: var(--navy);\n  border-radius: 3px 0 0 3px;\n}\n.pp-meter.gold::before { background: var(--gold); }\n.pp-meter__label {\n  font-size: 9px;\n  font-weight: 700;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  color: var(--text-muted);\n  margin-bottom: 6px;\n}\n.pp-meter__value {\n  font-family: 'Lora', serif;\n  font-size: 36px;\n  font-weight: 700;\n  color: var(--navy);\n  line-height: 1;\n}\n.pp-meter.gold .pp-meter__value { color: var(--gold); }\n.pp-meter__sub {\n  font-size: 10px;\n  color: var(--text-muted);\n  margin-top: 5px;\n}\n\n\/* Yield bar *\/\n.pp-yieldbar {\n  margin-bottom: 20px;\n}\n.pp-yieldbar__track {\n  height: 6px;\n  background: var(--navy-soft);\n  border-radius: 3px;\n  overflow: hidden;\n  margin-bottom: 6px;\n}\n.pp-yieldbar__fill {\n  height: 100%;\n  background: linear-gradient(90deg, var(--navy) 0%, var(--gold) 100%);\n  border-radius: 3px;\n  transition: width .4s ease;\n  min-width: 2px;\n}\n.pp-yieldbar__labels {\n  display: flex;\n  justify-content: space-between;\n  font-size: 9px;\n  color: var(--text-muted);\n  letter-spacing: 1px;\n  text-transform: uppercase;\n}\n\n\/* Breakdown accordion *\/\n.pp-breakdown {\n  border-top: 1px solid var(--border);\n  padding-top: 16px;\n}\n.pp-breakdown__toggle {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  width: 100%;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: 1px;\n  text-transform: uppercase;\n  color: var(--navy);\n  padding: 0;\n  margin-bottom: 0;\n  transition: color .2s;\n}\n.pp-breakdown__toggle:hover { color: var(--gold); }\n.pp-breakdown__arrow {\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: var(--navy-soft);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  transition: transform .25s, background .2s;\n  flex-shrink: 0;\n}\n.pp-breakdown__arrow svg { display: block; }\n.pp-breakdown__toggle.open .pp-breakdown__arrow { transform: rotate(180deg); background: var(--navy); }\n.pp-breakdown__toggle.open .pp-breakdown__arrow svg path { stroke: #fff; }\n\n.pp-breakdown__body {\n  display: none;\n  margin-top: 14px;\n}\n.pp-breakdown__body.open { display: block; }\n\n.pp-breakdown__row {\n  display: flex;\n  justify-content: space-between;\n  align-items: flex-start;\n  padding: 7px 0;\n  border-bottom: 1px solid #f3f6f8;\n  gap: 12px;\n}\n.pp-breakdown__row:last-child { border-bottom: none; }\n.pp-breakdown__row-label { color: var(--text-soft); font-size: 12px; }\n.pp-breakdown__row-sub { font-size: 10px; color: var(--text-muted); margin-top: 1px; }\n.pp-breakdown__row-amount { font-size: 12px; font-weight: 600; color: var(--text); white-space: nowrap; }\n.pp-breakdown__row-amount.neg { color: #b94040; }\n.pp-breakdown__row-amount.pos { color: var(--success); }\n.pp-breakdown__row.divider { border-top: 1px dashed var(--border); margin-top: 4px; padding-top: 11px; }\n.pp-breakdown__row.total .pp-breakdown__row-label { font-weight: 700; color: var(--text); font-size: 12px; }\n.pp-breakdown__row.total .pp-breakdown__row-amount { font-size: 13px; color: var(--navy); }\n.pp-breakdown__row.net {\n  background: var(--navy);\n  border-radius: var(--radius-sm);\n  padding: 10px 14px;\n  margin-top: 8px;\n  border-bottom: none;\n}\n.pp-breakdown__row.net .pp-breakdown__row-label { color: rgba(255,255,255,.75); font-weight: 700; font-size: 12px; }\n.pp-breakdown__row.net .pp-breakdown__row-amount { color: #fff; font-size: 15px; }\n\n\/* \u2500\u2500\u2500 Input cards \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-card {\n  background: var(--white);\n  border-radius: var(--radius-lg);\n  box-shadow: var(--shadow-sm);\n  margin-bottom: 12px;\n  border: 1px solid var(--border);\n  overflow: hidden;\n}\n.pp-card__head {\n  display: flex;\n  align-items: center;\n  gap: 12px;\n  padding: 16px 20px;\n  cursor: pointer;\n  user-select: none;\n  transition: background .15s;\n}\n.pp-card__head:hover { background: #fafcfe; }\n.pp-card__icon {\n  width: 34px;\n  height: 34px;\n  border-radius: var(--radius-sm);\n  background: var(--navy-soft);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-shrink: 0;\n}\n.pp-card__icon svg { display: block; }\n.pp-card__title {\n  font-size: 12px;\n  font-weight: 700;\n  letter-spacing: .5px;\n  text-transform: uppercase;\n  color: var(--navy);\n  flex: 1;\n}\n.pp-card__chevron {\n  width: 16px;\n  height: 16px;\n  color: var(--text-muted);\n  transition: transform .25s;\n  flex-shrink: 0;\n}\n.pp-card.open .pp-card__chevron { transform: rotate(180deg); }\n.pp-card__body {\n  display: none;\n  padding: 4px 20px 20px;\n  border-top: 1px solid var(--border);\n}\n.pp-card.open .pp-card__body { display: block; }\n\n\/* \u2500\u2500\u2500 Fields \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-field { margin-top: 16px; }\n.pp-field__top {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  margin-bottom: 8px;\n}\n.pp-field__label {\n  font-size: 11px;\n  font-weight: 600;\n  text-transform: uppercase;\n  letter-spacing: .5px;\n  color: var(--text-soft);\n}\n.pp-field__val {\n  font-size: 12px;\n  font-weight: 700;\n  color: var(--navy);\n}\n\n\/* Slider *\/\n.pp-slider {\n  -webkit-appearance: none;\n  appearance: none;\n  width: 100%;\n  height: 3px;\n  border-radius: 2px;\n  background: var(--border);\n  outline: none;\n  cursor: pointer;\n}\n.pp-slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 18px;\n  height: 18px;\n  border-radius: 50%;\n  background: var(--white);\n  border: 2px solid var(--navy);\n  box-shadow: 0 1px 4px rgba(0,66,116,.2);\n  cursor: pointer;\n  transition: border-color .15s, transform .1s;\n}\n.pp-slider::-webkit-slider-thumb:hover { border-color: var(--gold); transform: scale(1.15); }\n.pp-slider::-moz-range-thumb {\n  width: 18px; height: 18px; border-radius: 50%;\n  background: var(--white); border: 2px solid var(--navy);\n  cursor: pointer;\n}\n\n\/* Number input *\/\n.pp-input {\n  width: 100%;\n  padding: 9px 12px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-sm);\n  font-size: 13px;\n  font-weight: 500;\n  color: var(--text);\n  background: var(--bg);\n  outline: none;\n  transition: border-color .2s, background .2s;\n}\n.pp-input:focus { border-color: var(--navy); background: var(--white); }\n\n\/* Select *\/\n.pp-select {\n  width: 100%;\n  padding: 9px 36px 9px 12px;\n  border: 1px solid var(--border);\n  border-radius: var(--radius-sm);\n  font-size: 13px;\n  color: var(--text);\n  background: var(--bg) url(\"data:image\/svg+xml,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23004274'\/%3E%3C\/svg%3E\") no-repeat right 12px center;\n  -webkit-appearance: none;\n  appearance: none;\n  outline: none;\n  cursor: pointer;\n  transition: border-color .2s;\n}\n.pp-select:focus { border-color: var(--navy); }\n\n\/* Two-col grid *\/\n.pp-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n@media (max-width: 480px) { .pp-grid2 { grid-template-columns: 1fr; } }\n\n\/* Benchmark pills *\/\n.pp-bench {\n  display: flex;\n  gap: 8px;\n  flex-wrap: wrap;\n  margin-top: 14px;\n}\n.pp-bench__pill {\n  flex: 1;\n  min-width: 60px;\n  background: var(--navy-soft);\n  border-radius: var(--radius-sm);\n  padding: 8px 10px;\n  text-align: center;\n  cursor: pointer;\n  border: 1.5px solid transparent;\n  transition: border-color .15s, background .15s;\n}\n.pp-bench__pill:hover { border-color: var(--navy); }\n.pp-bench__pill.active { border-color: var(--gold); background: var(--gold-light); }\n.pp-bench__pill-val {\n  font-size: 13px;\n  font-weight: 700;\n  color: var(--navy);\n  display: block;\n}\n.pp-bench__pill.active .pp-bench__pill-val { color: var(--gold); }\n.pp-bench__pill-lbl {\n  font-size: 9px;\n  text-transform: uppercase;\n  letter-spacing: 1px;\n  color: var(--text-muted);\n  display: block;\n  margin-top: 2px;\n}\n\n\/* \u2500\u2500\u2500 Tax note \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-taxnote {\n  background: var(--gold-light);\n  border-left: 3px solid var(--gold);\n  border-radius: 0 var(--radius-sm) var(--radius-sm) 0;\n  padding: 12px 16px;\n  font-size: 11px;\n  color: #6b5020;\n  line-height: 1.6;\n  margin-bottom: 16px;\n}\n.pp-taxnote strong { color: #4a3510; }\n\n\/* \u2500\u2500\u2500 CTA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-cta {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  width: 100%;\n  padding: 15px 24px;\n  background: var(--navy);\n  color: var(--white);\n  text-decoration: none;\n  border-radius: var(--radius-md);\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: 2px;\n  text-transform: uppercase;\n  transition: background .2s, transform .1s, box-shadow .2s;\n  box-shadow: 0 4px 16px rgba(0,66,116,.2);\n  margin-bottom: 12px;\n}\n.pp-cta:hover { background: var(--navy-dark); transform: translateY(-1px); box-shadow: 0 6px 20px rgba(0,66,116,.3); }\n.pp-cta__arrow { font-size: 16px; transition: transform .2s; }\n.pp-cta:hover .pp-cta__arrow { transform: translateX(4px); }\n\n\/* \u2500\u2500\u2500 Disclaimer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-disclaimer {\n  text-align: center;\n  font-size: 10px;\n  color: var(--text-muted);\n  line-height: 1.6;\n  padding: 0 8px;\n}\n\n\/* \u2500\u2500\u2500 Responsive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n@media (max-width: 600px) {\n  .pp-intro__title { font-size: 24px; }\n  .pp-summary { padding: 20px 16px 18px; }\n  .pp-card__body { padding: 4px 14px 16px; }\n}\n\n\/* \u2500\u2500\u2500 Mode visibility \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-lt-only { display: none; }\n.pp-st-only { display: block; }\n.pp-calc[data-mode=\"lt\"] .pp-lt-only { display: block; }\n.pp-calc[data-mode=\"lt\"] .pp-st-only { display: none; }\n\n\/* \u2500\u2500\u2500 Larger text for readability (width unchanged) \u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-calc { font-size: 15px; }\n.pp-intro__sub { font-size: 14px; }\n.pp-field__label { font-size: 12px; }\n.pp-field__val { font-size: 13px; }\n.pp-card__title { font-size: 13px; }\n.pp-breakdown__row-label,\n.pp-breakdown__row-amount { font-size: 13px; }\n.pp-breakdown__row-sub,\n.pp-meter__sub { font-size: 11px; }\n.pp-taxnote { font-size: 12px; }\n.pp-disclaimer { font-size: 11px; }\n\n\/* \u2500\u2500\u2500 Lead gate \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-leadgate { display: none; }\n.pp-calc[data-locked=\"true\"] .pp-breakdown__toggle { display: none; }\n.pp-calc[data-locked=\"true\"] #breakdown-body { display: block; }\n.pp-calc[data-locked=\"true\"] #breakdown-rows { filter: blur(6px); pointer-events: none; user-select: none; opacity: .9; }\n.pp-calc[data-locked=\"true\"] .pp-leadgate { display: flex; }\n.pp-leadgate {\n  flex-direction: column; align-items: center; text-align: center; gap: 6px;\n  border: 1px dashed var(--gold); border-radius: var(--radius-md);\n  background: var(--gold-light); padding: 14px 14px 16px; margin-top: 14px;\n}\n.pp-leadgate__lock { width: 30px; height: 30px; border-radius: 50%; background: #fff; display: flex; align-items: center; justify-content: center; box-shadow: var(--shadow-sm); }\n.pp-leadgate__lock svg { width: 14px; height: 14px; }\n.pp-leadgate__title { font-family: 'Lora', serif; font-size: 15px; font-weight: 700; color: var(--navy-dark); }\n.pp-leadgate__text { font-size: 11.5px; color: #6b5020; max-width: 360px; line-height: 1.5; }\n.pp-leadform { width: 100%; max-width: 420px; display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }\n.pp-leadform-row { display: flex; gap: 8px; }\n.pp-leadform-row .pp-leadform-input { flex: 1; min-width: 0; }\n.pp-leadform-input { width: 100%; padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--radius-sm); font-family: inherit; font-size: 13px; color: var(--text); background: #fff; outline: none; transition: border-color .2s; }\n.pp-leadform-input:focus { border-color: var(--navy); }\n.pp-leadform-consent { display: flex; align-items: flex-start; gap: 7px; text-align: left; font-size: 10.5px; color: var(--text-soft); line-height: 1.4; margin-top: 2px; }\n.pp-leadform-consent input { margin-top: 1px; accent-color: var(--navy); }\n.pp-leadform-btn { margin-top: 4px; background: var(--navy); color: #fff; border: none; cursor: pointer; padding: 12px 18px; border-radius: var(--radius-md); font-family: inherit; font-size: 11px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; box-shadow: 0 4px 16px rgba(0,66,116,.2); transition: background .2s, transform .1s; }\n.pp-leadform-btn:hover { background: var(--navy-dark); transform: translateY(-1px); }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"pp-calc\" id=\"ppCalc\" data-mode=\"st\">\n\n  <!-- \u2500\u2500 Intro \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-intro\">\n    <div class=\"pp-intro__eyebrow\" id=\"txt-eyebrow\">Investor Tool<\/div>\n    <h2 class=\"pp-intro__title\" id=\"txt-title\">Rental Return Estimator<\/h2>\n    <p class=\"pp-intro__sub\" id=\"txt-sub\">Estimate your annual rental income and net yield for properties on the Costa del Sol. Based on AirDNA, Airbtics &amp; Idealista data (2024\u20132025).<\/p>\n  <\/div>\n\n  <!-- \u2500\u2500 Mode toggle \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-mode\">\n    <div class=\"pp-mode__inner\">\n      <button class=\"pp-mode__btn active\" id=\"btn-st\" onclick=\"PPRent.switchMode('st')\">Holiday Rental<\/button>\n      <button class=\"pp-mode__btn\" id=\"btn-lt\" onclick=\"PPRent.switchMode('lt')\">Long-term Rental<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Summary card (results) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-summary\">\n    <div class=\"pp-summary__header\">\n      <span class=\"pp-summary__label\" id=\"txt-summary-label\">Estimated Return<\/span>\n      <span class=\"pp-summary__location\" id=\"summary-location\">Mijas \/ La Cala \u00b7 Apartment 2BR<\/span>\n    <\/div>\n\n    <div class=\"pp-meters\">\n      <div class=\"pp-meter\">\n        <div class=\"pp-meter__label\" id=\"txt-gross-label\">Gross Yield<\/div>\n        <div class=\"pp-meter__value\" id=\"kpi-gross\">\u2013<\/div>\n        <div class=\"pp-meter__sub\" id=\"kpi-gross-sub\"><\/div>\n      <\/div>\n      <div class=\"pp-meter gold\">\n        <div class=\"pp-meter__label\" id=\"txt-net-label\">Net Yield (after tax)<\/div>\n        <div class=\"pp-meter__value\" id=\"kpi-net\">\u2013<\/div>\n        <div class=\"pp-meter__sub\" id=\"kpi-net-sub\"><\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Yield bar -->\n    <div class=\"pp-yieldbar\">\n      <div class=\"pp-yieldbar__track\">\n        <div class=\"pp-yieldbar__fill\" id=\"yield-bar\" style=\"width:0%\"><\/div>\n      <\/div>\n      <div class=\"pp-yieldbar__labels\">\n        <span>0%<\/span>\n        <span id=\"txt-bar-mid\">Avg. market ~5%<\/span>\n        <span>15%<\/span>\n      <\/div>\n    <\/div>\n\n    <!-- Breakdown accordion -->\n    <div class=\"pp-breakdown\">\n      <button class=\"pp-breakdown__toggle\" id=\"breakdown-toggle\" onclick=\"PPRent.toggleBreakdown()\">\n        <span id=\"txt-breakdown-btn\">View Full Breakdown<\/span>\n        <span class=\"pp-breakdown__arrow\">\n          <svg width=\"10\" height=\"6\" viewBox=\"0 0 10 6\" fill=\"none\">\n            <path d=\"M1 1l4 4 4-4\" stroke=\"#004274\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\n          <\/svg>\n        <\/span>\n      <\/button>\n      <div class=\"pp-breakdown__body\" id=\"breakdown-body\">\n        <div id=\"breakdown-rows\"><\/div>\n      <\/div>\n      <div class=\"pp-leadgate\" id=\"leadgate\">\n        <div class=\"pp-leadgate__lock\">\n          <svg width=\"17\" height=\"17\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#C9A84C\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg>\n        <\/div>\n        <div class=\"pp-leadgate__title\" id=\"txt-gate-title\">See your full return breakdown<\/div>\n        <div class=\"pp-leadgate__text\" id=\"txt-gate-text\">Enter your details and the complete income, cost and net-yield breakdown unlocks instantly.<\/div>\n        <form class=\"pp-leadform\" id=\"lead-form\" action=\"https:\/\/forms.zohopublic.eu\/Plexoproperties\/form\/StandardLandingpagecontactform\/formperma\/5XK7WCgfktMfEoVcDU579dpcWZb_L_IdrzJqM1sL4N0\/htmlRecords\/submit\" method=\"POST\" target=\"pp-zoho-sink\" accept-charset=\"UTF-8\" enctype=\"multipart\/form-data\">\n          <input type=\"hidden\" name=\"zf_referrer_name\" value=\"\">\n          <input type=\"hidden\" name=\"zf_redirect_url\" value=\"\">\n          <input type=\"hidden\" name=\"zc_gad\" value=\"\">\n          <input type=\"hidden\" name=\"MultiLine\" id=\"lead-source\" value=\"Lead from Plexo Rental Calculator\">\n          <div class=\"pp-leadform-row\">\n            <input class=\"pp-leadform-input\" type=\"text\" name=\"Name_First\" placeholder=\"First name\" required>\n            <input class=\"pp-leadform-input\" type=\"text\" name=\"Name_Last\" placeholder=\"Last name\">\n          <\/div>\n          <input class=\"pp-leadform-input\" type=\"email\" name=\"Email\" placeholder=\"Email address\" required>\n          <input class=\"pp-leadform-input\" type=\"text\" name=\"PhoneNumber_countrycode\" placeholder=\"Phone (optional)\">\n          <label class=\"pp-leadform-consent\"><input type=\"checkbox\" id=\"lead-consent\" required> I agree to be contacted by Plexo Properties about my enquiry.<\/label>\n          <button class=\"pp-leadform-btn\" type=\"submit\">Unlock Full Breakdown \u2192<\/button>\n        <\/form>\n        <iframe name=\"pp-zoho-sink\" id=\"pp-zoho-sink\" title=\"hidden\" style=\"display:none;width:0;height:0;border:0;\"><\/iframe>\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Card 1: Location & Property \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-card open\" id=\"card-location\">\n    <div class=\"pp-card__head\" onclick=\"PPRent.toggleCard('card-location')\">\n      <div class=\"pp-card__icon\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#004274\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <path d=\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0118 0z\"\/><circle cx=\"12\" cy=\"10\" r=\"3\"\/>\n        <\/svg>\n      <\/div>\n      <span class=\"pp-card__title\" id=\"txt-card1\">Location &amp; Property<\/span>\n      <svg class=\"pp-card__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M6 9l6 6 6-6\"\/>\n      <\/svg>\n    <\/div>\n    <div class=\"pp-card__body\">\n      <div class=\"pp-grid2\">\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-lbl-area\">Area<\/span><\/div>\n          <select class=\"pp-select\" id=\"inp-area\" onchange=\"PPRent.onAreaChange()\">\n            <option value=\"marbella\">Marbella<\/option>\n            <option value=\"mijas\" selected>Mijas \/ La Cala<\/option>\n            <option value=\"estepona\">Estepona<\/option>\n            <option value=\"fuengirola\">Fuengirola<\/option>\n            <option value=\"nerja\">Nerja<\/option>\n            <option value=\"benahavis\">Benahav\u00eds<\/option>\n          <\/select>\n        <\/div>\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-lbl-type\">Property Type<\/span><\/div>\n          <select class=\"pp-select\" id=\"inp-type\" onchange=\"PPRent.onTypeChange()\">\n            <option value=\"apt1\">Apartment \u2013 1 BR<\/option>\n            <option value=\"apt2\" selected>Apartment \u2013 2 BR<\/option>\n            <option value=\"town3\">Townhouse \u2013 3 BR<\/option>\n            <option value=\"villa4\">Villa \u2013 4+ BR<\/option>\n          <\/select>\n        <\/div>\n      <\/div>\n      <div class=\"pp-field\">\n        <div class=\"pp-field__top\">\n          <span class=\"pp-field__label\" id=\"txt-lbl-price\">Purchase Price<\/span>\n          <span class=\"pp-field__val\" id=\"val-price\">\u20ac350,000<\/span>\n        <\/div>\n        <input type=\"range\" class=\"pp-slider\" id=\"inp-price\" min=\"100000\" max=\"3000000\" step=\"10000\" value=\"350000\" oninput=\"PPRent.onInput()\">\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Card 2: Rental Settings \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-card open\" id=\"card-rental\">\n    <div class=\"pp-card__head\" onclick=\"PPRent.toggleCard('card-rental')\">\n      <div class=\"pp-card__icon\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#004274\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"\/><path d=\"M16 2v4M8 2v4M3 10h18\"\/>\n        <\/svg>\n      <\/div>\n      <span class=\"pp-card__title\" id=\"txt-card2\">Rental Settings<\/span>\n      <svg class=\"pp-card__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M6 9l6 6 6-6\"\/>\n      <\/svg>\n    <\/div>\n    <div class=\"pp-card__body\">\n\n      <!-- Short-term -->\n      <div class=\"pp-st-only\">\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-bench-title\">Market Rates \u2013 Select a Scenario<\/span><\/div>\n          <div class=\"pp-bench\" id=\"bench-pills\">\n            <div class=\"pp-bench__pill\" onclick=\"PPRent.applyBenchmark('low')\" id=\"pill-low\">\n              <span class=\"pp-bench__pill-val\" id=\"bm-low\">\u20ac135<\/span>\n              <span class=\"pp-bench__pill-lbl\" id=\"txt-bm-low\">Low<\/span>\n            <\/div>\n            <div class=\"pp-bench__pill active\" onclick=\"PPRent.applyBenchmark('mid')\" id=\"pill-mid\">\n              <span class=\"pp-bench__pill-val\" id=\"bm-mid\">\u20ac160<\/span>\n              <span class=\"pp-bench__pill-lbl\" id=\"txt-bm-mid\">Mid<\/span>\n            <\/div>\n            <div class=\"pp-bench__pill\" onclick=\"PPRent.applyBenchmark('high')\" id=\"pill-high\">\n              <span class=\"pp-bench__pill-val\" id=\"bm-high\">\u20ac185<\/span>\n              <span class=\"pp-bench__pill-lbl\" id=\"txt-bm-high\">High<\/span>\n            <\/div>\n            <div class=\"pp-bench__pill\" onclick=\"PPRent.applyBenchmark('occ')\" id=\"pill-occ\" style=\"cursor:default; pointer-events:none;\">\n              <span class=\"pp-bench__pill-val\" id=\"bm-occ\">63%<\/span>\n              <span class=\"pp-bench__pill-lbl\" id=\"txt-bm-occ\">Occupancy<\/span>\n            <\/div>\n          <\/div>\n        <\/div>\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\">\n            <span class=\"pp-field__label\" id=\"txt-lbl-night\">Nightly Rate<\/span>\n            <span class=\"pp-field__val\" id=\"val-night\">\u20ac160 \/ night<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-slider\" id=\"inp-night\" min=\"50\" max=\"800\" step=\"5\" value=\"160\" oninput=\"PPRent.onInput()\">\n        <\/div>\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\">\n            <span class=\"pp-field__label\" id=\"txt-lbl-occ\">Annual Occupancy<\/span>\n            <span class=\"pp-field__val\" id=\"val-occ\">63%<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-slider\" id=\"inp-occ\" min=\"20\" max=\"90\" step=\"1\" value=\"63\" oninput=\"PPRent.onInput()\">\n        <\/div>\n      <\/div>\n\n      <!-- Long-term -->\n      <div class=\"pp-lt-only\">\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\">\n            <span class=\"pp-field__label\" id=\"txt-lbl-ltrent\">Monthly Rent<\/span>\n            <span class=\"pp-field__val\" id=\"val-ltrent\">\u20ac1,200 \/ mo<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-slider\" id=\"inp-ltrent\" min=\"300\" max=\"8000\" step=\"50\" value=\"1200\" oninput=\"PPRent.onInput()\">\n        <\/div>\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\">\n            <span class=\"pp-field__label\" id=\"txt-lbl-ltvac\">Months Rented \/ Year<\/span>\n            <span class=\"pp-field__val\" id=\"val-ltvac\">11 mo<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-slider\" id=\"inp-ltvac\" min=\"1\" max=\"12\" step=\"1\" value=\"11\" oninput=\"PPRent.onInput()\">\n        <\/div>\n      <\/div>\n\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Card 3: Costs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-card\" id=\"card-costs\">\n    <div class=\"pp-card__head\" onclick=\"PPRent.toggleCard('card-costs')\">\n      <div class=\"pp-card__icon\">\n        <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#004274\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n          <circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 6v6l4 2\"\/>\n        <\/svg>\n      <\/div>\n      <span class=\"pp-card__title\" id=\"txt-card3\">Costs &amp; Fees<\/span>\n      <svg class=\"pp-card__chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n        <path d=\"M6 9l6 6 6-6\"\/>\n      <\/svg>\n    <\/div>\n    <div class=\"pp-card__body\">\n      <div class=\"pp-grid2\">\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-lbl-ibi\">IBI \u2013 Property Tax (\u20ac\/yr)<\/span><\/div>\n          <input type=\"number\" class=\"pp-input\" id=\"inp-ibi\" value=\"600\" min=\"0\" oninput=\"PPRent.onInput()\">\n        <\/div>\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-lbl-comm\">Community Fees (\u20ac\/yr)<\/span><\/div>\n          <input type=\"number\" class=\"pp-input\" id=\"inp-comm\" value=\"1200\" min=\"0\" oninput=\"PPRent.onInput()\">\n        <\/div>\n        <div class=\"pp-field\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-lbl-ins\">Insurance (\u20ac\/yr)<\/span><\/div>\n          <input type=\"number\" class=\"pp-input\" id=\"inp-ins\" value=\"500\" min=\"0\" oninput=\"PPRent.onInput()\">\n        <\/div>\n        <div class=\"pp-field pp-st-only\">\n          <div class=\"pp-field__top\"><span class=\"pp-field__label\" id=\"txt-lbl-clean\">Cleaning \/ Stay (\u20ac)<\/span><\/div>\n          <input type=\"number\" class=\"pp-input\" id=\"inp-clean\" value=\"90\" min=\"0\" oninput=\"PPRent.onInput()\">\n        <\/div>\n      <\/div>\n      <div class=\"pp-field pp-st-only\">\n        <div class=\"pp-field__top\">\n          <span class=\"pp-field__label\" id=\"txt-lbl-platform\">Platform Fee (Airbnb etc.)<\/span>\n          <span class=\"pp-field__val\" id=\"val-platform\">15.5%<\/span>\n        <\/div>\n        <input type=\"range\" class=\"pp-slider\" id=\"inp-platform\" min=\"3\" max=\"25\" step=\"0.5\" value=\"15.5\" oninput=\"PPRent.onInput()\">\n      <\/div>\n      <div class=\"pp-field\">\n        <div class=\"pp-field__top\">\n          <span class=\"pp-field__label\" id=\"txt-lbl-mgmt\">Management Fee<\/span>\n          <span class=\"pp-field__val\" id=\"val-mgmt\">20%<\/span>\n        <\/div>\n        <input type=\"range\" class=\"pp-slider\" id=\"inp-mgmt\" min=\"0\" max=\"40\" step=\"1\" value=\"20\" oninput=\"PPRent.onInput()\">\n      <\/div>\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Tax note \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <div class=\"pp-taxnote\">\n    <strong id=\"txt-tax-title\">Tax note (IRNR):<\/strong>\n    <span id=\"txt-tax-body\"> Spanish withholding tax for EU residents is 19% of net rental income (Modelo 210). Spanish IRNR paid can typically be offset against tax in your home country. Consult a local gestor for precise advice.<\/span>\n  <\/div>\n\n  <!-- \u2500\u2500 CTA \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <a href=\"\/contact-us\/\" class=\"pp-cta\" id=\"txt-cta\">\n    <span id=\"txt-cta-text\">Speak with a Plexo Investment Advisor<\/span>\n    <span class=\"pp-cta__arrow\">\u2192<\/span>\n  <\/a>\n\n  <!-- \u2500\u2500 Disclaimer \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 -->\n  <p class=\"pp-disclaimer\" id=\"txt-disclaimer\">Indicative estimates only. Based on AirDNA, Airbtics &amp; Idealista market data (2024\u20132025). Actual returns depend on property condition, location, season and management quality.<\/p>\n\n<\/div><!-- \/pp-calc -->\n\n<script>\n\/* ============================================================\n   TRANSLATIONS\n   Add a new language block (e.g. \"da\", \"es\") and call\n   PPRent.setLanguage('da') to activate it.\n   ============================================================ *\/\n(function(){\nconst __root = document.querySelector('#ppCalc');\nconst __idmap = {};\n__root.querySelectorAll('[id]').forEach(e => { if (!(e.id in __idmap)) __idmap[e.id] = e; });\nconst $g = id => __idmap[id];\nconst T = {\n  en: {\n    eyebrow: \"Investor Tool\",\n    title: \"Rental Return Estimator\",\n    sub: \"Estimate your annual rental income and net yield for properties on the Costa del Sol. Based on AirDNA, Airbtics & Idealista data (2024\u20132025).\",\n    btnSt: \"Holiday Rental\",\n    btnLt: \"Long-term Rental\",\n    summaryLabel: \"Estimated Return\",\n    grossLabel: \"Gross Yield\",\n    netLabel: \"Net Yield (after tax)\",\n    barMid: \"Avg. market ~5%\",\n    breakdownBtn: \"View Full Breakdown\",\n    card1: \"Location & Property\",\n    card2: \"Rental Settings\",\n    card3: \"Costs & Fees\",\n    lblArea: \"Area\", lblType: \"Property Type\", lblPrice: \"Purchase Price\",\n    benchTitle: \"Market Rates \u2013 Select a Scenario\",\n    bmLow: \"Low\", bmMid: \"Mid\", bmHigh: \"High\", bmOcc: \"Occupancy\",\n    lblNight: \"Nightly Rate\", lblOcc: \"Annual Occupancy\",\n    lblLtrent: \"Monthly Rent\", lblLtvac: \"Months Rented \/ Year\",\n    lblIbi: \"IBI \u2013 Property Tax (\u20ac\/yr)\", lblComm: \"Community Fees (\u20ac\/yr)\",\n    lblIns: \"Insurance (\u20ac\/yr)\", lblClean: \"Cleaning \/ Stay (\u20ac)\",\n    lblPlatform: \"Platform Fee (Airbnb etc.)\", lblMgmt: \"Management Fee\",\n    taxTitle: \"Tax note (IRNR):\",\n    taxBody: \" Spanish withholding tax for EU residents is 19% of net rental income (Modelo 210). Spanish IRNR paid can typically be offset against tax in your home country. Consult a local gestor for precise advice.\",\n    ctaText: \"Speak with a Plexo Investment Advisor\",\n    disclaimer: \"Indicative estimates only. Based on AirDNA, Airbtics & Idealista market data (2024\u20132025). Actual returns depend on property condition, location, season and management quality.\",\n    rowGross: \"Gross Rental Income\", rowPlatform: \"Platform Fee\",\n    rowMgmt: \"Management Fee (incl. VAT 21%)\", rowCleaning: \"Cleaning\",\n    rowUtils: \"Utilities (est. \u20ac150\/mo)\", rowIns: \"Insurance\",\n    rowIbiComm: \"IBI + Community Fees\", rowTaxBase: \"Taxable Income\",\n    rowTax: \"IRNR Tax (19%)\", rowTotalCosts: \"Total Costs\",\n    rowNet: \"Net Result \/ Year\",\n    nightUnit: \"\/night\", moUnit: \"\/mo\", moVac: \"mo\",\n    rentalDays: \"rental days\/yr\"\n  },\n  da: {\n    eyebrow: \"Investorv\u00e6rkt\u00f8j\",\n    title: \"Udlejningsberegner\",\n    sub: \"Beregn dit forventede afkast ved korttids- eller langtidsudlejning p\u00e5 Costa del Sol. Baseret p\u00e5 AirDNA, Airbtics og Idealista (2024\u20132025).\",\n    btnSt: \"Feriebolig (korttid)\",\n    btnLt: \"Langtidsudlejning\",\n    summaryLabel: \"Estimeret afkast\",\n    grossLabel: \"Bruttoafkast\",\n    netLabel: \"Nettoafkast (efter skat)\",\n    barMid: \"Markedsgennemsnit ~5%\",\n    breakdownBtn: \"Se fuld specifikation\",\n    card1: \"Beliggenhed og bolig\",\n    card2: \"Udlejningsindstillinger\",\n    card3: \"Omkostninger og gebyrer\",\n    lblArea: \"Omr\u00e5de\", lblType: \"Boligtype\", lblPrice: \"K\u00f8besum\",\n    benchTitle: \"Markedsnormer \u2013 v\u00e6lg scenarie\",\n    bmLow: \"Lav\", bmMid: \"Middel\", bmHigh: \"H\u00f8j\", bmOcc: \"Bel\u00e6gning\",\n    lblNight: \"Nattepris\", lblOcc: \"Bel\u00e6gningsprocent (\u00e5rlig)\",\n    lblLtrent: \"M\u00e5nedlig leje\", lblLtvac: \"Udlejede m\u00e5neder \/ \u00e5r\",\n    lblIbi: \"IBI \u2013 ejendomsskat (\u20ac\/\u00e5r)\", lblComm: \"F\u00e6llesudgifter (\u20ac\/\u00e5r)\",\n    lblIns: \"Forsikring (\u20ac\/\u00e5r)\", lblClean: \"Reng\u00f8ring pr. udlejning (\u20ac)\",\n    lblPlatform: \"Platformsgebyr (Airbnb etc.)\", lblMgmt: \"Forvalterhonorar\",\n    taxTitle: \"Skat (IRNR):\",\n    taxBody: \" Spansk kildeskat for EU-residenter er 19% af nettolejeindkomst (Modelo 210). Betalt IRNR kan modregnes i dansk skat som lempelse. Kontakt en lokal gestor for pr\u00e6cise tal.\",\n    ctaText: \"Kontakt en Plexo-r\u00e5dgiver\",\n    disclaimer: \"Vejledende beregning baseret p\u00e5 markedsdata (AirDNA, Airbtics, Idealista 2024\u20132025). Faktisk afkast afh\u00e6nger af stand, beliggenhed, s\u00e6son og administration.\",\n    rowGross: \"Bruttoindt\u00e6gt\", rowPlatform: \"Platformsgebyr\",\n    rowMgmt: \"Forvalterhonorar (inkl. IVA 21%)\", rowCleaning: \"Reng\u00f8ring\",\n    rowUtils: \"Forbrug (est. \u20ac150\/md)\", rowIns: \"Forsikring\",\n    rowIbiComm: \"IBI + f\u00e6llesudgifter\", rowTaxBase: \"Skattem\u00e6ssig indkomst\",\n    rowTax: \"IRNR skat (19%)\", rowTotalCosts: \"Samlede omkostninger\",\n    rowNet: \"Nettoresultat pr. \u00e5r\",\n    nightUnit: \"\/nat\", moUnit: \"\/md\", moVac: \"mdr\",\n    rentalDays: \"udlejningsdage\/\u00e5r\"\n  },\n  es: {\n    eyebrow: \"Herramienta de Inversi\u00f3n\",\n    title: \"Calculadora de Rentabilidad\",\n    sub: \"Estima tu rentabilidad anual por alquiler en la Costa del Sol. Basado en datos de AirDNA, Airbtics e Idealista (2024\u20132025).\",\n    btnSt: \"Alquiler Vacacional\",\n    btnLt: \"Alquiler a Largo Plazo\",\n    summaryLabel: \"Rentabilidad Estimada\",\n    grossLabel: \"Rentabilidad Bruta\",\n    netLabel: \"Rentabilidad Neta (tras impuestos)\",\n    barMid: \"Media de mercado ~5%\",\n    breakdownBtn: \"Ver Desglose Completo\",\n    card1: \"Ubicaci\u00f3n y Propiedad\",\n    card2: \"Configuraci\u00f3n del Alquiler\",\n    card3: \"Costes y Honorarios\",\n    lblArea: \"Zona\", lblType: \"Tipo de Propiedad\", lblPrice: \"Precio de Compra\",\n    benchTitle: \"Tarifas de Mercado \u2013 Elige un Escenario\",\n    bmLow: \"Bajo\", bmMid: \"Medio\", bmHigh: \"Alto\", bmOcc: \"Ocupaci\u00f3n\",\n    lblNight: \"Precio por Noche\", lblOcc: \"Ocupaci\u00f3n Anual\",\n    lblLtrent: \"Alquiler Mensual\", lblLtvac: \"Meses Alquilados \/ A\u00f1o\",\n    lblIbi: \"IBI (\u20ac\/a\u00f1o)\", lblComm: \"Gastos de Comunidad (\u20ac\/a\u00f1o)\",\n    lblIns: \"Seguro (\u20ac\/a\u00f1o)\", lblClean: \"Limpieza \/ Estancia (\u20ac)\",\n    lblPlatform: \"Comisi\u00f3n Plataforma (Airbnb etc.)\", lblMgmt: \"Honorarios de Gesti\u00f3n\",\n    taxTitle: \"Nota fiscal (IRNR):\",\n    taxBody: \" El IRNR para residentes de la UE es el 19% de los ingresos netos por alquiler (Modelo 210). Consulte a un gestor local para cifras precisas.\",\n    ctaText: \"Hablar con un Asesor de Plexo\",\n    disclaimer: \"Estimaciones orientativas basadas en datos de mercado (AirDNA, Airbtics, Idealista 2024\u20132025). La rentabilidad real depende del estado, ubicaci\u00f3n, temporada y gesti\u00f3n.\",\n    rowGross: \"Ingresos Brutos\", rowPlatform: \"Comisi\u00f3n Plataforma\",\n    rowMgmt: \"Gesti\u00f3n (incl. IVA 21%)\", rowCleaning: \"Limpieza\",\n    rowUtils: \"Suministros (est. \u20ac150\/mes)\", rowIns: \"Seguro\",\n    rowIbiComm: \"IBI + Comunidad\", rowTaxBase: \"Base Imponible\",\n    rowTax: \"IRNR (19%)\", rowTotalCosts: \"Costes Totales\",\n    rowNet: \"Resultado Neto \/ A\u00f1o\",\n    nightUnit: \"\/noche\", moUnit: \"\/mes\", moVac: \"meses\",\n    rentalDays: \"d\u00edas alquiler\/a\u00f1o\"\n  }\n};\n\n\/* ============================================================\n   MARKET DATA (AirDNA \/ Airbtics 2024\u20132025)\n   ============================================================ *\/\nconst MARKET = {\n  marbella:   { apt1:{low:160,mid:195,high:240,occ:65}, apt2:{low:200,mid:245,high:300,occ:63}, town3:{low:260,mid:320,high:400,occ:60}, villa4:{low:400,mid:520,high:700,occ:55} },\n  mijas:      { apt1:{low:110,mid:135,high:165,occ:65}, apt2:{low:135,mid:160,high:185,occ:63}, town3:{low:175,mid:210,high:260,occ:60}, villa4:{low:280,mid:350,high:440,occ:55} },\n  estepona:   { apt1:{low:120,mid:145,high:175,occ:63}, apt2:{low:145,mid:170,high:205,occ:62}, town3:{low:185,mid:225,high:275,occ:59}, villa4:{low:300,mid:370,high:460,occ:54} },\n  fuengirola: { apt1:{low:100,mid:125,high:155,occ:67}, apt2:{low:125,mid:150,high:180,occ:65}, town3:{low:165,mid:200,high:245,occ:62}, villa4:{low:260,mid:325,high:410,occ:57} },\n  nerja:      { apt1:{low:105,mid:130,high:160,occ:64}, apt2:{low:130,mid:155,high:190,occ:62}, town3:{low:170,mid:205,high:255,occ:59}, villa4:{low:270,mid:340,high:430,occ:54} },\n  benahavis:  { apt1:{low:150,mid:185,high:225,occ:62}, apt2:{low:185,mid:225,high:275,occ:60}, town3:{low:240,mid:295,high:365,occ:57}, villa4:{low:380,mid:490,high:640,occ:52} }\n};\nconst AREA_NAMES = { marbella:\"Marbella\", mijas:\"Mijas \/ La Cala\", estepona:\"Estepona\", fuengirola:\"Fuengirola\", nerja:\"Nerja\", benahavis:\"Benahav\u00eds\" };\nconst TYPE_NAMES = { apt1:\"Apartment 1BR\", apt2:\"Apartment 2BR\", town3:\"Townhouse 3BR\", villa4:\"Villa 4+ BR\" };\n\n\/* ============================================================\n   STATE\n   ============================================================ *\/\nlet lang = 'en';\nlet mode = 'st';\nlet activeBench = 'mid';\n\nfunction setLanguage(l) {\n  if (!T[l]) return;\n  lang = l;\n  const t = T[l];\n  const set = (id, val) => { const el = $g(id); if (el) el.textContent = val; };\n  set('txt-eyebrow', t.eyebrow);\n  set('txt-title', t.title);\n  set('txt-sub', t.sub);\n  set('btn-st', t.btnSt);\n  set('btn-lt', t.btnLt);\n  set('txt-summary-label', t.summaryLabel);\n  set('txt-gross-label', t.grossLabel);\n  set('txt-net-label', t.netLabel);\n  set('txt-bar-mid', t.barMid);\n  set('txt-breakdown-btn', t.breakdownBtn);\n  set('txt-card1', t.card1);\n  set('txt-card2', t.card2);\n  set('txt-card3', t.card3);\n  set('txt-lbl-area', t.lblArea);\n  set('txt-lbl-type', t.lblType);\n  set('txt-lbl-price', t.lblPrice);\n  set('txt-bench-title', t.benchTitle);\n  set('txt-bm-low', t.bmLow);\n  set('txt-bm-mid', t.bmMid);\n  set('txt-bm-high', t.bmHigh);\n  set('txt-bm-occ', t.bmOcc);\n  set('txt-lbl-night', t.lblNight);\n  set('txt-lbl-occ', t.lblOcc);\n  set('txt-lbl-ltrent', t.lblLtrent);\n  set('txt-lbl-ltvac', t.lblLtvac);\n  set('txt-lbl-ibi', t.lblIbi);\n  set('txt-lbl-comm', t.lblComm);\n  set('txt-lbl-ins', t.lblIns);\n  set('txt-lbl-clean', t.lblClean);\n  set('txt-lbl-platform', t.lblPlatform);\n  set('txt-lbl-mgmt', t.lblMgmt);\n  set('txt-tax-title', t.taxTitle);\n  set('txt-tax-body', t.taxBody);\n  set('txt-cta-text', t.ctaText);\n  set('txt-disclaimer', t.disclaimer);\n  onInput();\n}\n\nfunction switchMode(m) {\n  mode = m;\n  __root.dataset.mode = m;\n  $g('btn-st').classList.toggle('active', m === 'st');\n  $g('btn-lt').classList.toggle('active', m === 'lt');\n  onInput();\n}\n\nfunction toggleCard(id) {\n  $g(id).classList.toggle('open');\n}\n\nfunction toggleBreakdown() {\n  const body = $g('breakdown-body');\n  const btn  = $g('breakdown-toggle');\n  body.classList.toggle('open');\n  btn.classList.toggle('open');\n}\n\nfunction onAreaChange() {\n  const area = $g('inp-area').value;\n  const type = $g('inp-type').value;\n  const d = MARKET[area]?.[type];\n  if (d) {\n    applyBenchmark(activeBench);\n    updateBenchmarkPills();\n  }\n  onInput();\n}\nfunction onTypeChange() { onAreaChange(); }\n\nfunction updateBenchmarkPills() {\n  const area = $g('inp-area').value;\n  const type = $g('inp-type').value;\n  const d = MARKET[area]?.[type];\n  if (!d) return;\n  const t = T[lang];\n  $g('bm-low').textContent  = `\u20ac${d.low}`;\n  $g('bm-mid').textContent  = `\u20ac${d.mid}`;\n  $g('bm-high').textContent = `\u20ac${d.high}`;\n  $g('bm-occ').textContent  = `${d.occ}%`;\n}\n\nfunction applyBenchmark(level) {\n  const area = $g('inp-area').value;\n  const type = $g('inp-type').value;\n  const d = MARKET[area]?.[type];\n  if (!d) return;\n  activeBench = level;\n  if (level !== 'occ') {\n    $g('inp-night').value = d[level];\n    $g('inp-occ').value   = d.occ;\n  }\n  ['low','mid','high'].forEach(l => {\n    $g('pill-' + l)?.classList.toggle('active', l === level);\n  });\n  onInput();\n}\n\nfunction fmt(n) { return '\u20ac' + Math.round(n).toLocaleString('en-GB'); }\n\nfunction onInput() {\n  const t = T[lang];\n  const price    = +$g('inp-price').value || 0;\n  const ibi      = +$g('inp-ibi').value   || 0;\n  const comm     = +$g('inp-comm').value  || 0;\n  const ins      = +$g('inp-ins').value   || 0;\n\n  $g('val-price').textContent = fmt(price);\n\n  \/\/ Update location summary\n  const area = $g('inp-area').value;\n  const type = $g('inp-type').value;\n  $g('summary-location').textContent = `${AREA_NAMES[area]} \u00b7 ${TYPE_NAMES[type]}`;\n\n  updateBenchmarkPills();\n\n  let grossIncome, totalCosts, netResult, grossYield, netYield, rows;\n\n  if (mode === 'st') {\n    const night    = +$g('inp-night').value    || 0;\n    const occ      = +$g('inp-occ').value \/ 100;\n    const platform = +$g('inp-platform').value \/ 100;\n    const mgmt     = +$g('inp-mgmt').value \/ 100;\n    const clean    = +$g('inp-clean').value    || 0;\n\n    $g('val-night').textContent    = `\u20ac${night}${t.nightUnit}`;\n    $g('val-occ').textContent      = Math.round(occ * 100) + '%';\n    $g('val-platform').textContent = (Math.round(platform * 200) \/ 2) + '%';\n    $g('val-mgmt').textContent     = Math.round(mgmt * 100) + '%';\n\n    const rentalDays  = Math.round(occ * 365);\n    grossIncome       = night * occ * 365;\n    const platformCost= grossIncome * platform;\n    const mgmtCost    = grossIncome * mgmt * 1.21;\n    const cleanCost   = (rentalDays \/ 5) * clean;\n    const utils       = 1800;\n    const fixed       = ibi + comm + ins;\n    const deductions  = platformCost + mgmtCost + cleanCost + utils + fixed;\n    const taxBase     = Math.max(0, grossIncome - deductions);\n    const irnr        = taxBase * 0.19;\n    totalCosts        = deductions + irnr;\n    netResult         = grossIncome - totalCosts;\n    grossYield        = price > 0 ? (grossIncome \/ price) * 100 : 0;\n    netYield          = price > 0 ? (netResult   \/ price) * 100 : 0;\n\n    $g('kpi-gross-sub').textContent = `~${rentalDays} ${t.rentalDays}`;\n    $g('kpi-net-sub').textContent   = fmt(netResult) + '\/year';\n\n    rows = [\n      { label: t.rowGross,      sub: `\u20ac${night}${t.nightUnit} \u00d7 ${Math.round(occ*100)}% \u00d7 365`, amt: grossIncome,   cls: '' },\n      { label: t.rowPlatform,   sub: `${Math.round(platform*200)\/2}%`,                           amt: -platformCost, cls: '' },\n      { label: t.rowMgmt,       sub: `${Math.round(mgmt*100)}% + VAT`,                           amt: -mgmtCost,     cls: '' },\n      { label: t.rowCleaning,   sub: `~${Math.round(rentalDays\/5)} stays \u00d7 \u20ac${clean}`,           amt: -cleanCost,    cls: '' },\n      { label: t.rowUtils,      sub: '',                                                          amt: -utils,        cls: '' },\n      { label: t.rowIns,        sub: '',                                                          amt: -ins,          cls: '' },\n      { label: t.rowIbiComm,    sub: '',                                                          amt: -(ibi+comm),   cls: '' },\n      { label: t.rowTaxBase,    sub: '',                                                          amt: taxBase,       cls: 'divider' },\n      { label: t.rowTax,        sub: 'Modelo 210',                                               amt: -irnr,         cls: '' },\n      { label: t.rowTotalCosts, sub: '',                                                          amt: -totalCosts,   cls: 'total' },\n      { label: t.rowNet,        sub: '',                                                          amt: netResult,     cls: 'net' }\n    ];\n  } else {\n    const ltrent = +$g('inp-ltrent').value || 0;\n    const ltvac  = +$g('inp-ltvac').value  || 0;\n    const mgmt   = +$g('inp-mgmt').value \/ 100;\n\n    $g('val-ltrent').textContent = `\u20ac${ltrent.toLocaleString('en-GB')}${t.moUnit}`;\n    $g('val-ltvac').textContent  = ltvac + ' ' + t.moVac;\n    $g('val-mgmt').textContent   = Math.round(mgmt * 100) + '%';\n\n    const months  = ltvac;\n    grossIncome   = ltrent * months;\n    const mgmtCost= grossIncome * mgmt;\n    const fixed   = ibi + comm + ins;\n    const deductions = mgmtCost + fixed;\n    const taxBase = Math.max(0, grossIncome - deductions);\n    const irnr    = taxBase * 0.19;\n    totalCosts    = deductions + irnr;\n    netResult     = grossIncome - totalCosts;\n    grossYield    = price > 0 ? (grossIncome \/ price) * 100 : 0;\n    netYield      = price > 0 ? (netResult   \/ price) * 100 : 0;\n\n    $g('kpi-gross-sub').textContent = `${months} months \u00b7 ${AREA_NAMES[area]}`;\n    $g('kpi-net-sub').textContent   = fmt(netResult) + '\/year';\n\n    rows = [\n      { label: t.rowGross,      sub: `\u20ac${ltrent.toLocaleString('en-GB')}${t.moUnit} \u00d7 ${months} mo`, amt: grossIncome,  cls: '' },\n      { label: t.rowMgmt,       sub: `${Math.round(mgmt*100)}%`,                                     amt: -mgmtCost,    cls: '' },\n      { label: t.rowIns,        sub: '',                                                              amt: -ins,         cls: '' },\n      { label: t.rowIbiComm,    sub: '',                                                              amt: -(ibi+comm),  cls: '' },\n      { label: t.rowTaxBase,    sub: '',                                                              amt: taxBase,      cls: 'divider' },\n      { label: t.rowTax,        sub: 'Modelo 210',                                                   amt: -irnr,        cls: '' },\n      { label: t.rowTotalCosts, sub: '',                                                              amt: -totalCosts,  cls: 'total' },\n      { label: t.rowNet,        sub: '',                                                              amt: netResult,    cls: 'net' }\n    ];\n  }\n\n  \/\/ Update KPI displays\n  $g('kpi-gross').textContent = grossYield.toFixed(1) + '%';\n  $g('kpi-net').textContent   = netYield.toFixed(1) + '%';\n\n  \/\/ Yield bar (capped at 15%)\n  const barPct = Math.min(100, (grossYield \/ 15) * 100);\n  $g('yield-bar').style.width = barPct + '%';\n\n  \/\/ Render breakdown\n  const container = $g('breakdown-rows');\n  container.innerHTML = rows.map(r => {\n    const isNeg = r.amt < 0 ? (r.cls !== 'total' ? (r.cls !== 'net') : false) : false;\n    const isPos = r.amt > 0 ? (r.cls !== 'total' ? (r.cls !== 'net' ? (r.cls !== 'divider') : false) : false) : false;\n    const amtCls = r.cls === 'net' ? '' : (isNeg ? 'neg' : (isPos ? 'pos' : ''));\n    const sign = r.amt < 0 ? '\u2013' : '';\n    return `<div class=\"pp-breakdown__row ${r.cls}\">\n      <div>\n        <span class=\"pp-breakdown__row-label\">${r.label}<\/span>\n        ${r.sub ? `<div class=\"pp-breakdown__row-sub\">${r.sub}<\/div>` : ''}\n      <\/div>\n      <span class=\"pp-breakdown__row-amount ${amtCls}\">${sign}${fmt(Math.abs(r.amt))}<\/span>\n    <\/div>`;\n  }).join('');\n}\n\n\/* \u2500\u2500\u2500 Lead gate \u2014 unlocks the full breakdown when the embedded Zoho form is submitted \u2500\u2500\u2500 *\/\nconst LEAD_KEY = 'pp_lead_unlocked_rental';\nfunction isUnlocked(){ try { return localStorage.getItem(LEAD_KEY) === '1'; } catch(e){ return false; } }\nfunction unlockLead(){\n  try { localStorage.setItem(LEAD_KEY,'1'); } catch(e){}\n  __root.dataset.locked = 'false';\n  const b = $g('breakdown-body'), t = $g('breakdown-toggle');\n  if (b) b.classList.add('open');\n  if (t) t.classList.add('open');\n}\n__root.dataset.locked = isUnlocked() ? 'false' : 'true';\nif (location.hash.indexOf('unlocked') >= 0) unlockLead();\n\/\/ Submit the lead to Zoho via a hidden iframe, then unlock the breakdown.\n(function hookLeadForm(){\n  const form = $g('lead-form'); if (!form) return;\n  const ref = form.querySelector('[name=\"zf_referrer_name\"]'); if (ref) ref.value = location.href;\n  const src = $g('lead-source'); if (src) src.value = 'Lead from Plexo Rental Calculator \u2014 ' + location.href;\n  const sink = $g('pp-zoho-sink');\n  let submitted = false;\n  form.addEventListener('submit', function(){ submitted = true; });\n  if (sink) sink.addEventListener('load', function(){ if (submitted) unlockLead(); });\n})();\n\/\/ Also unlock in place if the flag gets set in another tab\/frame (e.g. a Zoho redirect to #unlocked).\nwindow.addEventListener('storage', function(e){ if (e.key === LEAD_KEY && e.newValue === '1') unlockLead(); });\n\n\/\/ Init\nonInput();\n\nwindow.PPRent = { onInput, switchMode, toggleCard, toggleBreakdown, applyBenchmark, onAreaChange, onTypeChange, setLanguage, unlock: unlockLead };\n})();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Rental Return Estimator \u2013 Plexo Properties Investor Tool Rental Return Estimator Estimate your annual rental income and net yield for properties on the Costa del Sol. Based on AirDNA, Airbtics &amp; Idealista data (2024\u20132025). Holiday Rental Long-term Rental Estimated Return Mijas \/ La Cala \u00b7 Apartment 2BR Gross Yield \u2013 Net Yield (after tax) \u2013 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template\/template-onepage.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-37656","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/pages\/37656","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/comments?post=37656"}],"version-history":[{"count":8,"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/pages\/37656\/revisions"}],"predecessor-version":[{"id":37671,"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/pages\/37656\/revisions\/37671"}],"wp:attachment":[{"href":"https:\/\/plexoproperties.com\/nl\/wp-json\/wp\/v2\/media?parent=37656"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}