{"id":37659,"date":"2026-07-11T10:35:09","date_gmt":"2026-07-11T09:35:09","guid":{"rendered":"https:\/\/plexoproperties.com\/?page_id=37659"},"modified":"2026-07-11T16:27:40","modified_gmt":"2026-07-11T15:27:40","slug":"cost-calculator","status":"publish","type":"page","link":"https:\/\/plexoproperties.com\/de\/cost-calculator\/","title":{"rendered":"Cost 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>Property Cost Calculator \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  --green:      #2e7d52;\n  --red:        #b94040;\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}\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-cc {\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 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-cc__intro {\n  padding: 32px 0 24px;\n  text-align: center;\n}\n.pp-cc__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-cc__eyebrow::before, .pp-cc__eyebrow::after {\n  content: '';\n  display: block;\n  width: 24px;\n  height: 1px;\n  background: var(--gold);\n  opacity: .5;\n}\n.pp-cc__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-cc__sub {\n  font-size: 13px;\n  color: var(--text-soft);\n  font-weight: 300;\n  max-width: 540px;\n  margin: 0 auto;\n  line-height: 1.6;\n}\n\n\/* \u2500\u2500\u2500 Mode selector (3 options) \u2500\u2500\u2500\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-cc__modes {\n  display: flex;\n  justify-content: center;\n  margin-bottom: 24px;\n}\n.pp-cc__modes-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  gap: 2px;\n}\n.pp-cc__mode-btn {\n  padding: 8px 18px;\n  border-radius: 50px;\n  font-size: 11px;\n  font-weight: 700;\n  letter-spacing: .8px;\n  text-transform: uppercase;\n  color: var(--text-soft);\n  transition: all .2s;\n  white-space: nowrap;\n}\n.pp-cc__mode-btn.active {\n  background: var(--navy);\n  color: var(--white);\n  box-shadow: 0 2px 8px rgba(0,66,116,.25);\n}\n@media (max-width: 560px) {\n  .pp-cc__modes-inner { flex-direction: column; border-radius: var(--radius-md); }\n  .pp-cc__mode-btn { border-radius: var(--radius-sm); text-align: center; }\n}\n\n\/* \u2500\u2500\u2500 Summary card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-cc__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-cc__summary-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  margin-bottom: 20px;\n  flex-wrap: wrap;\n  gap: 8px;\n}\n.pp-cc__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-cc__summary-mode {\n  font-size: 11px;\n  color: var(--text-soft);\n  font-weight: 500;\n}\n\n\/* KPI meters *\/\n.pp-cc__meters {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 12px;\n  margin-bottom: 20px;\n}\n@media (max-width: 560px) { .pp-cc__meters { grid-template-columns: 1fr 1fr; } }\n@media (max-width: 380px) { .pp-cc__meters { grid-template-columns: 1fr; } }\n\n.pp-cc__meter {\n  background: var(--bg);\n  border-radius: var(--radius-md);\n  padding: 16px 16px 14px;\n  position: relative;\n  overflow: hidden;\n}\n.pp-cc__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-cc__meter.gold::before { background: var(--gold); }\n.pp-cc__meter.green::before { background: var(--green); }\n.pp-cc__meter__label {\n  font-size: 9px;\n  font-weight: 700;\n  letter-spacing: 1.5px;\n  text-transform: uppercase;\n  color: var(--text-muted);\n  margin-bottom: 5px;\n}\n.pp-cc__meter__value {\n  font-family: 'Lora', serif;\n  font-size: 22px;\n  font-weight: 700;\n  color: var(--navy);\n  line-height: 1.1;\n}\n.pp-cc__meter.gold .pp-cc__meter__value { color: var(--gold); }\n.pp-cc__meter.green .pp-cc__meter__value { color: var(--green); }\n.pp-cc__meter__sub {\n  font-size: 10px;\n  color: var(--text-muted);\n  margin-top: 3px;\n}\n\n\/* Cost bar *\/\n.pp-cc__costbar {\n  margin-bottom: 20px;\n}\n.pp-cc__costbar__track {\n  height: 6px;\n  background: var(--navy-soft);\n  border-radius: 3px;\n  overflow: hidden;\n  margin-bottom: 6px;\n}\n.pp-cc__costbar__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-cc__costbar__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-cc__breakdown { border-top: 1px solid var(--border); padding-top: 16px; }\n.pp-cc__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  transition: color .2s;\n}\n.pp-cc__breakdown-toggle:hover { color: var(--gold); }\n.pp-cc__breakdown-arrow {\n  width: 18px; height: 18px;\n  border-radius: 50%;\n  background: var(--navy-soft);\n  display: flex; align-items: center; justify-content: center;\n  transition: transform .25s, background .2s;\n  flex-shrink: 0;\n}\n.pp-cc__breakdown-toggle.open .pp-cc__breakdown-arrow { transform: rotate(180deg); background: var(--navy); }\n.pp-cc__breakdown-toggle.open .pp-cc__breakdown-arrow svg path { stroke: #fff; }\n.pp-cc__breakdown-body { display: none; margin-top: 14px; }\n.pp-cc__breakdown-body.open { display: block; }\n\n.pp-cc__brow {\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-cc__brow:last-child { border-bottom: none; }\n.pp-cc__brow-label { color: var(--text-soft); font-size: 12px; }\n.pp-cc__brow-note { font-size: 10px; color: var(--text-muted); margin-top: 1px; }\n.pp-cc__brow-amount { font-size: 12px; font-weight: 600; color: var(--text); white-space: nowrap; }\n.pp-cc__brow-amount.neg { color: var(--red); }\n.pp-cc__brow-amount.pos { color: var(--green); }\n.pp-cc__brow.section-head {\n  background: var(--navy-soft);\n  border-radius: var(--radius-sm);\n  padding: 6px 10px;\n  margin-top: 10px;\n  border-bottom: none;\n}\n.pp-cc__brow.section-head .pp-cc__brow-label {\n  font-size: 9px;\n  font-weight: 700;\n  letter-spacing: 1.5px;\n  text-transform: uppercase;\n  color: var(--navy);\n}\n.pp-cc__brow.total .pp-cc__brow-label { font-weight: 700; color: var(--text); font-size: 12px; }\n.pp-cc__brow.total .pp-cc__brow-amount { font-size: 13px; color: var(--navy); }\n.pp-cc__brow.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-cc__brow.net .pp-cc__brow-label { color: rgba(255,255,255,.75); font-weight: 700; font-size: 12px; }\n.pp-cc__brow.net .pp-cc__brow-amount { color: #fff; font-size: 15px; }\n.pp-cc__brow.net-green {\n  background: linear-gradient(135deg, #1a5c3a 0%, #2e7d52 100%);\n  border-radius: var(--radius-sm);\n  padding: 10px 14px;\n  margin-top: 8px;\n  border-bottom: none;\n}\n.pp-cc__brow.net-green .pp-cc__brow-label { color: rgba(255,255,255,.75); font-weight: 700; font-size: 12px; }\n.pp-cc__brow.net-green .pp-cc__brow-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-cc__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-cc__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-cc__card-head:hover { background: #fafcfe; }\n.pp-cc__card-icon {\n  width: 34px; height: 34px;\n  border-radius: var(--radius-sm);\n  background: var(--navy-soft);\n  display: flex; align-items: center; justify-content: center;\n  flex-shrink: 0;\n}\n.pp-cc__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-cc__card-chevron {\n  width: 16px; height: 16px;\n  color: var(--text-muted);\n  transition: transform .25s;\n  flex-shrink: 0;\n}\n.pp-cc__card.open .pp-cc__card-chevron { transform: rotate(180deg); }\n.pp-cc__card-body {\n  display: none;\n  padding: 4px 20px 20px;\n  border-top: 1px solid var(--border);\n}\n.pp-cc__card.open .pp-cc__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-cc__field { margin-top: 16px; }\n.pp-cc__field-top {\n  display: flex;\n  justify-content: space-between;\n  align-items: baseline;\n  margin-bottom: 7px;\n}\n.pp-cc__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-cc__field-note {\n  font-size: 10px;\n  color: var(--text-muted);\n  font-weight: 400;\n  text-transform: none;\n  letter-spacing: 0;\n  margin-top: 2px;\n}\n.pp-cc__field-val {\n  font-size: 12px;\n  font-weight: 700;\n  color: var(--navy);\n}\n.pp-cc__grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }\n@media (max-width: 480px) { .pp-cc__grid2 { grid-template-columns: 1fr; } }\n\n\/* Slider *\/\n.pp-cc__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-cc__slider::-webkit-slider-thumb {\n  -webkit-appearance: none;\n  width: 18px; 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-cc__slider::-webkit-slider-thumb:hover { border-color: var(--gold); transform: scale(1.15); }\n.pp-cc__slider::-moz-range-thumb {\n  width: 18px; height: 18px; border-radius: 50%;\n  background: var(--white); border: 2px solid var(--navy); cursor: pointer;\n}\n\n\/* Number input *\/\n.pp-cc__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-cc__input:focus { border-color: var(--navy); background: var(--white); }\n.pp-cc__input.highlight { background: #fffbf0; border-color: var(--gold); }\n\n\/* Select *\/\n.pp-cc__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-cc__select:focus { border-color: var(--navy); }\n\n\/* Info pill *\/\n.pp-cc__info-pill {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  background: var(--navy-soft);\n  border-radius: 50px;\n  padding: 5px 12px;\n  font-size: 10px;\n  color: var(--navy);\n  font-weight: 600;\n  margin-top: 8px;\n}\n\n\/* \u2500\u2500\u2500 Notes box \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-cc__notes {\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: 14px 16px;\n  font-size: 11px;\n  color: #6b5020;\n  line-height: 1.7;\n  margin-bottom: 16px;\n}\n.pp-cc__notes strong { color: #4a3510; display: block; margin-bottom: 4px; }\n.pp-cc__notes ul { padding-left: 16px; }\n.pp-cc__notes li { margin-bottom: 3px; }\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-cc__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-cc__cta:hover { background: var(--navy-dark); transform: translateY(-1px); box-shadow: 0 6px 20px rgba(0,66,116,.3); }\n.pp-cc__cta-arrow { font-size: 16px; transition: transform .2s; }\n.pp-cc__cta:hover .pp-cc__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-cc__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 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-cc__resale-only, .pp-cc__newdev-only, .pp-cc__seller-only { display: none; }\n.pp-cc[data-mode=\"resale\"]  .pp-cc__resale-only  { display: block; }\n.pp-cc[data-mode=\"newdev\"]  .pp-cc__newdev-only  { display: block; }\n.pp-cc[data-mode=\"seller\"]  .pp-cc__seller-only  { display: block; }\n.pp-cc[data-mode=\"resale\"]  .pp-cc__buyer-only   { display: block; }\n.pp-cc[data-mode=\"newdev\"]  .pp-cc__buyer-only   { display: block; }\n.pp-cc__buyer-only { display: none; }\n\n@media (max-width: 600px) {\n  .pp-cc__intro { padding: 24px 0 18px; }\n  .pp-cc__title { font-size: 24px; }\n  .pp-cc__summary { padding: 20px 16px 18px; }\n  .pp-cc__card-body { padding: 4px 14px 16px; }\n}\n\/* \u2500\u2500\u2500 Larger text for readability (width unchanged) \u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\n.pp-cc { font-size: 15px; }\n.pp-cc__sub { font-size: 14px; }\n.pp-cc__field-label { font-size: 12px; }\n.pp-cc__field-val { font-size: 13px; }\n.pp-cc__card-title { font-size: 13px; }\n.pp-cc__brow-label { font-size: 13px; }\n.pp-cc__brow-amount { font-size: 13px; }\n.pp-cc__brow-note { font-size: 11px; }\n.pp-cc__notes { font-size: 12px; }\n.pp-cc__disclaimer { font-size: 11px; }\n.pp-cc__meter__sub { 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-cc__leadgate { display: none; }\n.pp-cc[data-locked=\"true\"] .pp-cc__breakdown-toggle { display: none; }\n.pp-cc[data-locked=\"true\"] #breakdown-body { display: block; }\n.pp-cc[data-locked=\"true\"] #breakdown-rows { filter: blur(6px); pointer-events: none; user-select: none; opacity: .9; }\n.pp-cc[data-locked=\"true\"] .pp-cc__leadgate { display: flex; }\n.pp-cc__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-cc__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-cc__leadgate__lock svg { width: 14px; height: 14px; }\n.pp-cc__leadgate__title { font-family: 'Lora', serif; font-size: 15px; font-weight: 700; color: var(--navy-dark); }\n.pp-cc__leadgate__text { font-size: 11.5px; color: #6b5020; max-width: 360px; line-height: 1.5; }\n.pp-cc__leadform { width: 100%; max-width: 420px; display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }\n.pp-cc__leadform-row { display: flex; gap: 8px; }\n.pp-cc__leadform-row .pp-cc__leadform-input { flex: 1; min-width: 0; }\n.pp-cc__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-cc__leadform-input:focus { border-color: var(--navy); }\n.pp-cc__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-cc__leadform-consent input { margin-top: 1px; accent-color: var(--navy); }\n.pp-cc__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-cc__leadform-btn:hover { background: var(--navy-dark); transform: translateY(-1px); }\n<\/style>\n<\/head>\n<body>\n\n<div class=\"pp-cc\" id=\"ppCC\" data-mode=\"resale\">\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-cc__intro\">\n    <div class=\"pp-cc__eyebrow\" id=\"txt-eyebrow\">Buyer &amp; Seller Tool<\/div>\n    <h2 class=\"pp-cc__title\" id=\"txt-title\">Property Cost Calculator<\/h2>\n    <p class=\"pp-cc__sub\" id=\"txt-sub\">Calculate all purchase and selling costs for properties on the Costa del Sol. Rates based on Junta de Andaluc\u00eda &amp; AEAT 2025\/2026.<\/p>\n  <\/div>\n\n  <!-- \u2500\u2500 Mode selector \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-cc__modes\">\n    <div class=\"pp-cc__modes-inner\">\n      <button class=\"pp-cc__mode-btn active\" id=\"btn-resale\" onclick=\"PPCost.switchMode('resale')\">Buying \u2013 Resale<\/button>\n      <button class=\"pp-cc__mode-btn\" id=\"btn-newdev\" onclick=\"PPCost.switchMode('newdev')\">Buying \u2013 New Build<\/button>\n      <button class=\"pp-cc__mode-btn\" id=\"btn-seller\" onclick=\"PPCost.switchMode('seller')\">Selling<\/button>\n    <\/div>\n  <\/div>\n\n  <!-- \u2500\u2500 Summary card \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-cc__summary\">\n    <div class=\"pp-cc__summary-header\">\n      <span class=\"pp-cc__summary-label\" id=\"txt-summary-label\">Cost Summary<\/span>\n      <span class=\"pp-cc__summary-mode\" id=\"summary-mode\">Resale Purchase \u00b7 Andaluc\u00eda 2025\/26<\/span>\n    <\/div>\n\n    <!-- KPI meters -->\n    <div class=\"pp-cc__meters\" id=\"kpi-meters\">\n      <!-- filled by JS -->\n    <\/div>\n\n    <!-- Cost bar -->\n    <div class=\"pp-cc__costbar\">\n      <div class=\"pp-cc__costbar__track\">\n        <div class=\"pp-cc__costbar__fill\" id=\"cost-bar\" style=\"width:0%\"><\/div>\n      <\/div>\n      <div class=\"pp-cc__costbar__labels\">\n        <span>0%<\/span>\n        <span id=\"txt-bar-mid\">Typical range 10\u201312%<\/span>\n        <span>20%<\/span>\n      <\/div>\n    <\/div>\n\n    <!-- Breakdown accordion -->\n    <div class=\"pp-cc__breakdown\">\n      <button class=\"pp-cc__breakdown-toggle\" id=\"breakdown-toggle\" onclick=\"PPCost.toggleBreakdown()\">\n        <span id=\"txt-breakdown-btn\">View Full Cost Breakdown<\/span>\n        <span class=\"pp-cc__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-cc__breakdown-body\" id=\"breakdown-body\">\n        <div id=\"breakdown-rows\"><\/div>\n      <\/div>\n      <div class=\"pp-cc__leadgate\" id=\"leadgate\">\n        <div class=\"pp-cc__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-cc__leadgate__title\" id=\"txt-gate-title\">See your full cost breakdown<\/div>\n        <div class=\"pp-cc__leadgate__text\" id=\"txt-gate-text\">Enter your details and the complete, itemised breakdown unlocks instantly.<\/div>\n        <form class=\"pp-cc__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 Cost Calculator\">\n          <div class=\"pp-cc__leadform-row\">\n            <input class=\"pp-cc__leadform-input\" type=\"text\" name=\"Name_First\" placeholder=\"First name\" required>\n            <input class=\"pp-cc__leadform-input\" type=\"text\" name=\"Name_Last\" placeholder=\"Last name\">\n          <\/div>\n          <input class=\"pp-cc__leadform-input\" type=\"email\" name=\"Email\" placeholder=\"Email address\" required>\n          <input class=\"pp-cc__leadform-input\" type=\"text\" name=\"PhoneNumber_countrycode\" placeholder=\"Phone (optional)\">\n          <label class=\"pp-cc__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-cc__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  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       BUYER \u2013 RESALE INPUTS\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"pp-cc__resale-only\">\n\n    <!-- Card: Property -->\n    <div class=\"pp-cc__card open\" id=\"card-resale-prop\">\n      <div class=\"pp-cc__card-head\" onclick=\"PPCost.toggleCard('card-resale-prop')\">\n        <div class=\"pp-cc__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\"><path d=\"M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z\"\/><polyline points=\"9 22 9 12 15 12 15 22\"\/><\/svg>\n        <\/div>\n        <span class=\"pp-cc__card-title\" id=\"txt-card-resale-prop\">Property Details<\/span>\n        <svg class=\"pp-cc__card-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n      <\/div>\n      <div class=\"pp-cc__card-body\">\n        <div class=\"pp-cc__field\">\n          <div class=\"pp-cc__field-top\">\n            <div><span class=\"pp-cc__field-label\" id=\"txt-lbl-resale-price\">Purchase Price<\/span><\/div>\n            <span class=\"pp-cc__field-val\" id=\"val-resale-price\">\u20ac350,000<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-cc__slider\" id=\"inp-resale-price\" min=\"100000\" max=\"3000000\" step=\"10000\" value=\"350000\" oninput=\"PPCost.onInput()\">\n        <\/div>\n        <div class=\"pp-cc__info-pill\" id=\"txt-resale-itpnote\">ITP (Transfer Tax) = 7% flat rate in Andaluc\u00eda<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Card: Optional Costs -->\n    <div class=\"pp-cc__card\" id=\"card-resale-opt\">\n      <div class=\"pp-cc__card-head\" onclick=\"PPCost.toggleCard('card-resale-opt')\">\n        <div class=\"pp-cc__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\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 8v4l3 3\"\/><\/svg>\n        <\/div>\n        <span class=\"pp-cc__card-title\" id=\"txt-card-resale-opt\">Optional &amp; Variable Costs<\/span>\n        <svg class=\"pp-cc__card-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n      <\/div>\n      <div class=\"pp-cc__card-body\">\n        <div class=\"pp-cc__grid2\">\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-resale-gestoria\">Gestor\u00eda (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-resale-gestoria\" value=\"0\" min=\"0\" placeholder=\"0 \u2013 600\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-resale-survey\">Survey \/ Valuation (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-resale-survey\" value=\"0\" min=\"0\" placeholder=\"300 \u2013 600\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-resale-poa\">Power of Attorney (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-resale-poa\" value=\"0\" min=\"0\" placeholder=\"60 \u2013 200\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-resale-fx\">Currency Exchange (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-resale-fx\" value=\"0\" min=\"0\" placeholder=\"~0.5% of amount\" oninput=\"PPCost.onInput()\">\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div><!-- \/resale-only -->\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       BUYER \u2013 NEW DEVELOPMENT INPUTS\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"pp-cc__newdev-only\">\n\n    <!-- Card: Property -->\n    <div class=\"pp-cc__card open\" id=\"card-newdev-prop\">\n      <div class=\"pp-cc__card-head\" onclick=\"PPCost.toggleCard('card-newdev-prop')\">\n        <div class=\"pp-cc__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\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><path d=\"M8 21h8M12 17v4\"\/><\/svg>\n        <\/div>\n        <span class=\"pp-cc__card-title\" id=\"txt-card-newdev-prop\">Property Details<\/span>\n        <svg class=\"pp-cc__card-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n      <\/div>\n      <div class=\"pp-cc__card-body\">\n        <div class=\"pp-cc__field\">\n          <div class=\"pp-cc__field-top\">\n            <div><span class=\"pp-cc__field-label\" id=\"txt-lbl-nd-price\">Base Purchase Price<\/span><\/div>\n            <span class=\"pp-cc__field-val\" id=\"val-nd-price\">\u20ac350,000<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-cc__slider\" id=\"inp-nd-price\" min=\"100000\" max=\"3000000\" step=\"10000\" value=\"350000\" oninput=\"PPCost.onInput()\">\n        <\/div>\n        <div class=\"pp-cc__grid2\">\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-nd-parking\">Parking (separate deed, \u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-nd-parking\" value=\"0\" min=\"0\" placeholder=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-nd-storage\">Storage (separate deed, \u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-nd-storage\" value=\"0\" min=\"0\" placeholder=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n        <\/div>\n        <div class=\"pp-cc__info-pill\" id=\"txt-nd-vatpill\">VAT 10% on property \u00b7 21% on separate parking\/storage \u00b7 AJD 1.2%<\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Card: Optional -->\n    <div class=\"pp-cc__card\" id=\"card-newdev-opt\">\n      <div class=\"pp-cc__card-head\" onclick=\"PPCost.toggleCard('card-newdev-opt')\">\n        <div class=\"pp-cc__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\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 8v4l3 3\"\/><\/svg>\n        <\/div>\n        <span class=\"pp-cc__card-title\" id=\"txt-card-newdev-opt\">Optional &amp; Variable Costs<\/span>\n        <svg class=\"pp-cc__card-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n      <\/div>\n      <div class=\"pp-cc__card-body\">\n        <div class=\"pp-cc__grid2\">\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-nd-poa\">Power of Attorney (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-nd-poa\" value=\"0\" min=\"0\" placeholder=\"60 \u2013 200\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-nd-snagging\">Snagging Survey (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-nd-snagging\" value=\"400\" min=\"0\" placeholder=\"300 \u2013 600\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-nd-fx\">Currency Exchange (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-nd-fx\" value=\"0\" min=\"0\" placeholder=\"~0.5%\" oninput=\"PPCost.onInput()\">\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div><!-- \/newdev-only -->\n\n  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n       SELLER INPUTS\n  \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 -->\n  <div class=\"pp-cc__seller-only\">\n\n    <!-- Card: Sale Details -->\n    <div class=\"pp-cc__card open\" id=\"card-seller-sale\">\n      <div class=\"pp-cc__card-head\" onclick=\"PPCost.toggleCard('card-seller-sale')\">\n        <div class=\"pp-cc__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\"><line x1=\"12\" y1=\"1\" x2=\"12\" y2=\"23\"\/><path d=\"M17 5H9.5a3.5 3.5 0 000 7h5a3.5 3.5 0 010 7H6\"\/><\/svg>\n        <\/div>\n        <span class=\"pp-cc__card-title\" id=\"txt-card-seller-sale\">Sale Details<\/span>\n        <svg class=\"pp-cc__card-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n      <\/div>\n      <div class=\"pp-cc__card-body\">\n        <div class=\"pp-cc__field\">\n          <div class=\"pp-cc__field-top\">\n            <div><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-saleprice\">Sale Price<\/span><\/div>\n            <span class=\"pp-cc__field-val\" id=\"val-s-saleprice\">\u20ac500,000<\/span>\n          <\/div>\n          <input type=\"range\" class=\"pp-cc__slider\" id=\"inp-s-saleprice\" min=\"100000\" max=\"5000000\" step=\"10000\" value=\"500000\" oninput=\"PPCost.onInput()\">\n        <\/div>\n        <div class=\"pp-cc__grid2\">\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-origprice\">Original Purchase Price (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input highlight\" id=\"inp-s-origprice\" value=\"350000\" min=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-origcosts\">Original Purchase Costs (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input highlight\" id=\"inp-s-origcosts\" value=\"35000\" min=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-improvements\">Renovations \/ Improvements (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input highlight\" id=\"inp-s-improvements\" value=\"0\" min=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-years\">Years of Ownership<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-s-years\" value=\"5\" min=\"0\" max=\"50\" oninput=\"PPCost.onInput()\">\n          <\/div>\n        <\/div>\n      <\/div>\n    <\/div>\n\n    <!-- Card: Tax & Fees -->\n    <div class=\"pp-cc__card open\" id=\"card-seller-tax\">\n      <div class=\"pp-cc__card-head\" onclick=\"PPCost.toggleCard('card-seller-tax')\">\n        <div class=\"pp-cc__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\"><path d=\"M14 2H6a2 2 0 00-2 2v16a2 2 0 002 2h12a2 2 0 002-2V8z\"\/><polyline points=\"14 2 14 8 20 8\"\/><line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"\/><line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"\/><polyline points=\"10 9 9 9 8 9\"\/><\/svg>\n        <\/div>\n        <span class=\"pp-cc__card-title\" id=\"txt-card-seller-tax\">Tax &amp; Professional Fees<\/span>\n        <svg class=\"pp-cc__card-chevron\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\n      <\/div>\n      <div class=\"pp-cc__card-body\">\n        <div class=\"pp-cc__grid2\">\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-residency\">Tax Residency<\/span><\/div>\n            <select class=\"pp-cc__select\" id=\"inp-s-residency\" onchange=\"PPCost.onInput()\">\n              <option value=\"eu\" selected>EU \/ EEA Resident (19%)<\/option>\n              <option value=\"noneu\">Non-EU Resident (24%)<\/option>\n            <\/select>\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-cadastral\">Cadastral Land Value (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input highlight\" id=\"inp-s-cadastral\" value=\"80000\" min=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\">\n              <span class=\"pp-cc__field-label\" id=\"txt-lbl-s-agency\">Agency Commission<\/span>\n              <span class=\"pp-cc__field-val\" id=\"val-s-agency\">5%<\/span>\n            <\/div>\n            <input type=\"range\" class=\"pp-cc__slider\" id=\"inp-s-agency\" min=\"3\" max=\"7\" step=\"0.5\" value=\"5\" oninput=\"PPCost.onInput()\">\n          <\/div>\n          <div class=\"pp-cc__field\">\n            <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-lawyer\">Lawyer Fees (\u20ac)<\/span><\/div>\n            <input type=\"number\" class=\"pp-cc__input\" id=\"inp-s-lawyer\" value=\"3000\" min=\"0\" oninput=\"PPCost.onInput()\">\n          <\/div>\n        <\/div>\n        <div class=\"pp-cc__field\">\n          <div class=\"pp-cc__field-top\"><span class=\"pp-cc__field-label\" id=\"txt-lbl-s-mortgage\">Mortgage Cancellation (\u20ac)<\/span><\/div>\n          <input type=\"number\" class=\"pp-cc__input\" id=\"inp-s-mortgage\" value=\"0\" min=\"0\" placeholder=\"0 if no mortgage\" oninput=\"PPCost.onInput()\">\n        <\/div>\n      <\/div>\n    <\/div>\n\n  <\/div><!-- \/seller-only -->\n\n  <!-- \u2500\u2500 Notes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\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-cc__notes\" id=\"notes-box\">\n    <!-- filled by JS per mode -->\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-cc__cta\" id=\"txt-cta\">\n    <span id=\"txt-cta-text\">Speak with a Plexo Property Advisor<\/span>\n    <span class=\"pp-cc__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-cc__disclaimer\" id=\"txt-disclaimer\">Indicative estimates only. Based on Junta de Andaluc\u00eda &amp; AEAT rates 2025\/2026. Always consult a qualified lawyer and gestor before completing a transaction.<\/p>\n\n<\/div><!-- \/pp-cc -->\n\n<script>\n\/* ============================================================\n   TRANSLATIONS\n   Add a new language block and call PPCost.setLanguage('da') etc.\n   ============================================================ *\/\n(function(){\nconst __root = document.querySelector('#ppCC');\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: \"Buyer & Seller Tool\",\n    title: \"Property Cost Calculator\",\n    sub: \"Calculate all purchase and selling costs for properties on the Costa del Sol. Rates based on Junta de Andaluc\u00eda & AEAT 2025\/2026.\",\n    btnResale: \"Buying \u2013 Resale\",\n    btnNewdev: \"Buying \u2013 New Build\",\n    btnSeller: \"Selling\",\n    summaryLabel: \"Cost Summary\",\n    modeResale: \"Resale Purchase \u00b7 Andaluc\u00eda 2025\/26\",\n    modeNewdev: \"New Development \u00b7 Andaluc\u00eda 2025\/26\",\n    modeSeller: \"Property Sale \u00b7 Andaluc\u00eda 2025\/26\",\n    breakdownBtn: \"View Full Cost Breakdown\",\n    barMidBuyer: \"Typical range 10\u201312%\",\n    barMidSeller: \"Typical range 7\u201310%\",\n    ctaText: \"Speak with a Plexo Property Advisor\",\n    disclaimer: \"Indicative estimates only. Based on Junta de Andaluc\u00eda & AEAT rates 2025\/2026. Always consult a qualified lawyer and gestor before completing a transaction.\",\n    kpiTotalCosts: \"Total Costs\",\n    kpiPct: \"% of Price\",\n    kpiTotal: \"Total Investment\",\n    kpiNetProceeds: \"Net Proceeds\",\n    kpiProfit: \"Actual Profit\",\n    kpiCgt: \"Capital Gains Tax\",\n    \/\/ Resale rows\n    r_taxes: \"TAXES\",\n    r_itp: \"Transfer Tax (ITP)\", r_itp_note: \"7% flat rate \u2013 Andaluc\u00eda\",\n    r_legal: \"LEGAL & PROFESSIONAL\",\n    r_lawyer: \"Lawyer \/ Solicitor\", r_lawyer_note: \"1% of purchase price\",\n    r_lawyervat: \"Lawyer VAT (IVA 21%)\",\n    r_notary: \"Notary Fees\", r_notary_note: \"Government-regulated scale\",\n    r_registry: \"Land Registry\", r_registry_note: \"Government-regulated scale\",\n    r_gestoria: \"Gestor\u00eda \/ Administration\",\n    r_banking: \"BANKING & OTHER\",\n    r_bankdraft: \"Bank Draft Fee\",\n    r_fx: \"Currency Exchange\",\n    r_nie: \"NIE Application\", r_nie_note: \"Tax ID for foreigners\",\n    r_poa: \"Power of Attorney\",\n    r_survey: \"Survey \/ Valuation\",\n    r_total: \"TOTAL ADDITIONAL COSTS\",\n    r_investment: \"TOTAL INVESTMENT\",\n    \/\/ New dev rows\n    nd_taxes: \"TAXES (NEW BUILD)\",\n    nd_vat: \"VAT (IVA) on Property\", nd_vat_note: \"10% standard rate\",\n    nd_vat_sep: \"VAT on Parking\/Storage (separate deed)\", nd_vat_sep_note: \"21% if separate title\",\n    nd_ajd: \"Stamp Duty (AJD)\", nd_ajd_note: \"1.2% \u2013 Andaluc\u00eda\",\n    nd_legal: \"LEGAL & PROFESSIONAL\",\n    nd_lawyer: \"Lawyer \/ Solicitor\", nd_lawyer_note: \"1% \u2013 essential for new builds\",\n    nd_lawyervat: \"Lawyer VAT (IVA 21%)\",\n    nd_notary: \"Notary Fees\",\n    nd_registry: \"Land Registry\",\n    nd_gestoria: \"Gestor\u00eda \/ Administration\",\n    nd_banking: \"BANKING & OTHER\",\n    nd_bankdraft: \"Bank Draft Fee\",\n    nd_fx: \"Currency Exchange\",\n    nd_nie: \"NIE Application\",\n    nd_poa: \"Power of Attorney\",\n    nd_snagging: \"Snagging Survey\", nd_snagging_note: \"Recommended before handover\",\n    nd_utilities: \"UTILITY CONNECTIONS\",\n    nd_elec: \"Electricity Connection\",\n    nd_water: \"Water Connection\",\n    nd_internet: \"Internet \/ Fibre\",\n    nd_total: \"TOTAL ADDITIONAL COSTS\",\n    nd_investment: \"TOTAL INVESTMENT\",\n    \/\/ Seller rows\n    s_gain: \"CAPITAL GAIN\",\n    s_grossgain: \"Gross Capital Gain\", s_grossgain_note: \"Sale Price \u2013 Original Purchase Price\",\n    s_deductions: \"Allowable Deductions\", s_deductions_note: \"Improvements + original purchase costs\",\n    s_netgain: \"Net Taxable Capital Gain\",\n    s_taxes: \"TAXES ON SALE\",\n    s_cgt: \"Capital Gains Tax (CGT)\", s_cgt_note: \"19% EU\/EEA \u00b7 24% Non-EU\",\n    s_retention: \"3% Retention (withheld by buyer)\", s_retention_note: \"Advance CGT \u2013 claim refund if overpaid\",\n    s_cgt_due: \"Additional CGT Due (or Refund)\",\n    s_plusvalia: \"Plusval\u00eda Municipal\", s_plusvalia_note: \"Estimate \u2013 varies by municipality\",\n    s_fees: \"PROFESSIONAL FEES\",\n    s_agency: \"Agency Commission\",\n    s_agencyvat: \"Agency VAT (IVA 21%)\",\n    s_lawyer: \"Lawyer \/ Solicitor\",\n    s_lawyervat: \"Lawyer VAT (IVA 21%)\",\n    s_epc: \"Energy Performance Certificate\",\n    s_habitation: \"Habitation Certificate\",\n    s_other: \"OTHER COSTS\",\n    s_mortgage: \"Mortgage Cancellation\",\n    s_total: \"TOTAL SELLING COSTS\",\n    s_net: \"NET PROCEEDS FROM SALE\",\n    s_profit: \"ACTUAL PROFIT\",\n    \/\/ Notes\n    notesResale: \"<strong>Key notes \u2013 Resale Purchase<\/strong><ul><li>ITP (7%) is the largest cost \u2013 payable within 30 working days of signing<\/li><li>Non-residents pay the same ITP rate as residents<\/li><li>Total costs typically range <strong>10\u201312%<\/strong> of purchase price<\/li><li>Agent commission is normally paid by the seller in Spain<\/li><\/ul>\",\n    notesNewdev: \"<strong>Key notes \u2013 New Development<\/strong><ul><li>VAT (10%) replaces ITP \u2013 making new builds ~4.2% more expensive in taxes<\/li><li>AJD (1.2%) applies <em>in addition<\/em> to VAT for new builds in Andaluc\u00eda<\/li><li>Parking\/storage with <em>separate<\/em> title deed = 21% VAT (not 10%)<\/li><li>Always use a lawyer to review developer contract and bank guarantees<\/li><li>Snagging survey strongly recommended before accepting handover<\/li><\/ul>\",\n    notesSeller: \"<strong>Key notes \u2013 Selling<\/strong><ul><li>3% Retention: Buyer MUST withhold 3% and pay to Hacienda (Modelo 211)<\/li><li>CGT filing: Seller must file Modelo 210 within 4 months of sale<\/li><li>EU\/EEA residents: 19% CGT \u00b7 Non-EU residents: 24% CGT<\/li><li>Keep ALL invoices for renovations \u2013 they reduce your taxable gain<\/li><li>Plusval\u00eda: Payable within 30 working days to Town Hall<\/li><\/ul>\"\n  },\n  da: {\n    eyebrow: \"K\u00f8ber & S\u00e6lger V\u00e6rkt\u00f8j\",\n    title: \"Ejendomsomkostningsberegner\",\n    sub: \"Beregn alle k\u00f8bs- og salgsomkostninger for ejendomme p\u00e5 Costa del Sol. Satser baseret p\u00e5 Junta de Andaluc\u00eda og AEAT 2025\/2026.\",\n    btnResale: \"K\u00f8b \u2013 Gensalg\",\n    btnNewdev: \"K\u00f8b \u2013 Nybyggeri\",\n    btnSeller: \"S\u00e6lger\",\n    summaryLabel: \"Omkostningsoversigt\",\n    modeResale: \"Gensalg \u00b7 Andaluc\u00eda 2025\/26\",\n    modeNewdev: \"Nybyggeri \u00b7 Andaluc\u00eda 2025\/26\",\n    modeSeller: \"Ejendomssalg \u00b7 Andaluc\u00eda 2025\/26\",\n    breakdownBtn: \"Se fuld specifikation\",\n    barMidBuyer: \"Typisk interval 10\u201312%\",\n    barMidSeller: \"Typisk interval 7\u201310%\",\n    ctaText: \"Kontakt en Plexo-r\u00e5dgiver\",\n    disclaimer: \"Vejledende beregning baseret p\u00e5 Junta de Andaluc\u00eda og AEAT satser 2025\/2026. Kontakt altid en kvalificeret advokat og gestor inden handel.\",\n    kpiTotalCosts: \"Samlede omkostninger\",\n    kpiPct: \"% af pris\",\n    kpiTotal: \"Samlet investering\",\n    kpiNetProceeds: \"Nettoprovenu\",\n    kpiProfit: \"Faktisk fortjeneste\",\n    kpiCgt: \"Kapitalgevinstskat\",\n    r_taxes: \"SKATTER\", r_itp: \"Overdragelsesskat (ITP)\", r_itp_note: \"7% fast sats \u2013 Andaluc\u00eda\",\n    r_legal: \"JURIDISKE HONORARER\", r_lawyer: \"Advokat\", r_lawyer_note: \"1% af k\u00f8besum\",\n    r_lawyervat: \"Advokat moms (IVA 21%)\", r_notary: \"Notargebyr\", r_notary_note: \"Offentlig takst\",\n    r_registry: \"Tinglysning\", r_registry_note: \"Offentlig takst\", r_gestoria: \"Gestor\u00eda \/ Administration\",\n    r_banking: \"BANK OG ANDET\", r_bankdraft: \"Bankoverf\u00f8rselsgebyr\", r_fx: \"Valutaveksling\",\n    r_nie: \"NIE-ans\u00f8gning\", r_nie_note: \"Skatte-ID for udl\u00e6ndinge\", r_poa: \"Fuldmagt\", r_survey: \"Bygningsgennemgang\",\n    r_total: \"SAMLEDE EKSTRAOMKOSTNINGER\", r_investment: \"SAMLET INVESTERING\",\n    nd_taxes: \"SKATTER (NYBYGGERI)\", nd_vat: \"Moms (IVA) p\u00e5 ejendom\", nd_vat_note: \"10% standardsats\",\n    nd_vat_sep: \"Moms p\u00e5 parkering\/depot (separat sk\u00f8de)\", nd_vat_sep_note: \"21% ved separat sk\u00f8de\",\n    nd_ajd: \"Stempelafgift (AJD)\", nd_ajd_note: \"1.2% \u2013 Andaluc\u00eda\",\n    nd_legal: \"JURIDISKE HONORARER\", nd_lawyer: \"Advokat\", nd_lawyer_note: \"1% \u2013 vigtig ved nybyggeri\",\n    nd_lawyervat: \"Advokat moms (IVA 21%)\", nd_notary: \"Notargebyr\", nd_registry: \"Tinglysning\",\n    nd_gestoria: \"Gestor\u00eda \/ Administration\", nd_banking: \"BANK OG ANDET\", nd_bankdraft: \"Bankoverf\u00f8rselsgebyr\",\n    nd_fx: \"Valutaveksling\", nd_nie: \"NIE-ans\u00f8gning\", nd_poa: \"Fuldmagt\",\n    nd_snagging: \"Afleveringsgennemgang\", nd_snagging_note: \"Anbefales inden overtagelse\",\n    nd_utilities: \"FORSYNINGSTILSLUTNINGER\", nd_elec: \"Eltilslutning\", nd_water: \"Vandtilslutning\", nd_internet: \"Internet\/Fiber\",\n    nd_total: \"SAMLEDE EKSTRAOMKOSTNINGER\", nd_investment: \"SAMLET INVESTERING\",\n    s_gain: \"KAPITALGEVINST\", s_grossgain: \"Bruttokapitalgevinst\", s_grossgain_note: \"Salgspris \u2013 original k\u00f8besum\",\n    s_deductions: \"Fradragsberettigede udgifter\", s_deductions_note: \"Forbedringer + originale k\u00f8bsomkostninger\",\n    s_netgain: \"Netto skattepligtig kapitalgevinst\",\n    s_taxes: \"SKATTER VED SALG\", s_cgt: \"Kapitalgevinstskat (CGT)\", s_cgt_note: \"19% EU\/E\u00d8S \u00b7 24% ikke-EU\",\n    s_retention: \"3% tilbageholdelse (k\u00f8ber)\", s_retention_note: \"Forudbetalt CGT \u2013 kr\u00e6v refusion hvis for meget\",\n    s_cgt_due: \"Yderligere CGT (eller refusion)\",\n    s_plusvalia: \"Plusval\u00eda Municipal\", s_plusvalia_note: \"Estimat \u2013 varierer per kommune\",\n    s_fees: \"PROFESSIONELLE HONORARER\", s_agency: \"M\u00e6glerprovision\", s_agencyvat: \"M\u00e6gler moms (IVA 21%)\",\n    s_lawyer: \"Advokat\", s_lawyervat: \"Advokat moms (IVA 21%)\",\n    s_epc: \"Energim\u00e6rke\", s_habitation: \"Beboelsesattest\",\n    s_other: \"\u00d8VRIGE OMKOSTNINGER\", s_mortgage: \"Pantebrevsindfrielse\",\n    s_total: \"SAMLEDE SALGSOMKOSTNINGER\", s_net: \"NETTOPROVENU\", s_profit: \"FAKTISK FORTJENESTE\",\n    notesResale: \"<strong>Vigtige noter \u2013 Gensalg<\/strong><ul><li>ITP (7%) er den st\u00f8rste udgift \u2013 betales inden 30 arbejdsdage efter underskrift<\/li><li>Ikke-residenter betaler samme ITP-sats som residenter<\/li><li>Samlede omkostninger er typisk <strong>10\u201312%<\/strong> af k\u00f8besummen<\/li><li>M\u00e6glerprovision betales normalt af s\u00e6lger i Spanien<\/li><\/ul>\",\n    notesNewdev: \"<strong>Vigtige noter \u2013 Nybyggeri<\/strong><ul><li>Moms (10%) erstatter ITP \u2013 nybyggeri er ~4,2% dyrere i skat<\/li><li>AJD (1,2%) betales <em>ud over<\/em> momsen ved nybyggeri i Andaluc\u00eda<\/li><li>Parkering\/depot med <em>separat<\/em> sk\u00f8de = 21% moms (ikke 10%)<\/li><li>Brug altid advokat til at gennemg\u00e5 udviklerkontrakten<\/li><\/ul>\",\n    notesSeller: \"<strong>Vigtige noter \u2013 S\u00e6lger<\/strong><ul><li>3% tilbageholdelse: K\u00f8ber SKAL tilbageholde 3% og betale til Hacienda (Modelo 211)<\/li><li>CGT-indberetning: S\u00e6lger skal indgive Modelo 210 inden 4 m\u00e5neder<\/li><li>EU\/E\u00d8S-residenter: 19% CGT \u00b7 Ikke-EU: 24% CGT<\/li><li>Gem ALLE fakturaer for renovering \u2013 de reducerer din skattepligtige gevinst<\/li><\/ul>\"\n  }\n};\n\nlet lang = 'en';\nlet mode = 'resale';\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  const setHTML = (id, val) => { const el = $g(id); if (el) el.innerHTML = val; };\n  set('txt-eyebrow', t.eyebrow);\n  set('txt-title', t.title);\n  set('txt-sub', t.sub);\n  set('btn-resale', t.btnResale);\n  set('btn-newdev', t.btnNewdev);\n  set('btn-seller', t.btnSeller);\n  set('txt-summary-label', t.summaryLabel);\n  set('txt-breakdown-btn', t.breakdownBtn);\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  ['resale','newdev','seller'].forEach(id => {\n    $g('btn-' + id).classList.toggle('active', id === m);\n  });\n  onInput();\n}\n\nfunction toggleCard(id) { $g(id).classList.toggle('open'); }\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 fmt(n) { return '\u20ac' + Math.round(n).toLocaleString('en-GB'); }\nfunction fmtPct(n) { return n.toFixed(1) + '%'; }\n\nfunction renderKPIs(meters) {\n  $g('kpi-meters').innerHTML = meters.map(m =>\n    `<div class=\"pp-cc__meter ${m.cls||''}\">\n      <div class=\"pp-cc__meter__label\">${m.label}<\/div>\n      <div class=\"pp-cc__meter__value\">${m.value}<\/div>\n      ${m.sub ? `<div class=\"pp-cc__meter__sub\">${m.sub}<\/div>` : ''}\n    <\/div>`\n  ).join('');\n}\n\nfunction renderRows(rows) {\n  $g('breakdown-rows').innerHTML = rows.map(r => {\n    if (r.cls === 'section-head') {\n      return `<div class=\"pp-cc__brow section-head\"><span class=\"pp-cc__brow-label\">${r.label}<\/span><\/div>`;\n    }\n    const sign = r.amt < 0 ? '\u2013' : '';\n    const amtCls = r.cls === 'net' || r.cls === 'net-green' ? '' :\n                   (r.amt < 0 ? 'neg' : (r.label !== '' ? (r.cls !== 'total' ? (r.amt > 0 ? 'pos' : '') : '') : ''));\n    return `<div class=\"pp-cc__brow ${r.cls||''}\">\n      <div>\n        <span class=\"pp-cc__brow-label\">${r.label}<\/span>\n        ${r.note ? `<div class=\"pp-cc__brow-note\">${r.note}<\/div>` : ''}\n      <\/div>\n      <span class=\"pp-cc__brow-amount ${amtCls}\">${sign}${fmt(Math.abs(r.amt))}<\/span>\n    <\/div>`;\n  }).join('');\n}\n\nfunction onInput() {\n  const t = T[lang];\n\n  \/\/ Update mode label\n  const modeLabels = { resale: t.modeResale, newdev: t.modeNewdev, seller: t.modeSeller };\n  $g('summary-mode').textContent = modeLabels[mode];\n\n  if (mode === 'resale') {\n    calcResale(t);\n  } else if (mode === 'newdev') {\n    calcNewdev(t);\n  } else {\n    calcSeller(t);\n  }\n}\n\n\/* \u2500\u2500\u2500 RESALE \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nfunction calcResale(t) {\n  const price    = +$g('inp-resale-price').value || 0;\n  const gestoria = +$g('inp-resale-gestoria').value || 0;\n  const survey   = +$g('inp-resale-survey').value || 0;\n  const poa      = +$g('inp-resale-poa').value || 0;\n  const fx       = +$g('inp-resale-fx').value || 0;\n\n  $g('val-resale-price').textContent = fmt(price);\n\n  const itp       = price * 0.07;\n  const lawyer    = price * 0.01;\n  const lawyerVat = lawyer * 0.21;\n  const notary    = price < 200000 ? 700 : price < 500000 ? 900 : price < 1000000 ? 1100 : 1500;\n  const registry  = price < 200000 ? 450 : price < 500000 ? 600 : price < 1000000 ? 750 : 1000;\n  const bankDraft = 300;\n  const nie       = 15;\n\n  const totalCosts = itp + lawyer + lawyerVat + notary + registry + gestoria + bankDraft + fx + nie + poa + survey;\n  const totalInv   = price + totalCosts;\n  const pct        = price > 0 ? (totalCosts \/ price) * 100 : 0;\n\n  renderKPIs([\n    { label: t.kpiTotalCosts, value: fmt(totalCosts), cls: '' },\n    { label: t.kpiPct,        value: fmtPct(pct),     cls: 'gold', sub: 'of purchase price' },\n    { label: t.kpiTotal,      value: fmt(totalInv),   cls: 'green' }\n  ]);\n\n  $g('txt-bar-mid').textContent = t.barMidBuyer;\n  $g('cost-bar').style.width = Math.min(100, (pct \/ 20) * 100) + '%';\n\n  $g('notes-box').innerHTML = t.notesResale;\n\n  renderRows([\n    { label: t.r_taxes,      cls: 'section-head', amt: 0 },\n    { label: t.r_itp,        note: t.r_itp_note,    amt: -itp },\n    { label: t.r_legal,      cls: 'section-head', amt: 0 },\n    { label: t.r_lawyer,     note: t.r_lawyer_note, amt: -lawyer },\n    { label: t.r_lawyervat,  note: '',              amt: -lawyerVat },\n    { label: t.r_notary,     note: t.r_notary_note, amt: -notary },\n    { label: t.r_registry,   note: t.r_registry_note, amt: -registry },\n    ...(gestoria > 0 ? [{ label: t.r_gestoria, note: '', amt: -gestoria }] : []),\n    { label: t.r_banking,    cls: 'section-head', amt: 0 },\n    { label: t.r_bankdraft,  note: '',              amt: -bankDraft },\n    ...(fx > 0 ? [{ label: t.r_fx, note: '', amt: -fx }] : []),\n    { label: t.r_nie,        note: t.r_nie_note,    amt: -nie },\n    ...(poa > 0 ? [{ label: t.r_poa, note: '', amt: -poa }] : []),\n    ...(survey > 0 ? [{ label: t.r_survey, note: '', amt: -survey }] : []),\n    { label: t.r_total,      cls: 'total',          amt: -totalCosts },\n    { label: t.r_investment, cls: 'net',             amt: totalInv }\n  ]);\n}\n\n\/* \u2500\u2500\u2500 NEW DEV \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nfunction calcNewdev(t) {\n  const price    = +$g('inp-nd-price').value   || 0;\n  const parking  = +$g('inp-nd-parking').value || 0;\n  const storage  = +$g('inp-nd-storage').value || 0;\n  const poa      = +$g('inp-nd-poa').value     || 0;\n  const snagging = +$g('inp-nd-snagging').value|| 0;\n  const fx       = +$g('inp-nd-fx').value      || 0;\n\n  $g('val-nd-price').textContent = fmt(price);\n\n  const totalBase  = price + parking + storage;\n  const vat10      = price * 0.10;\n  const vat21      = (parking + storage) * 0.21;\n  const ajd        = totalBase * 0.012;\n  const lawyer     = totalBase * 0.01;\n  const lawyerVat  = lawyer * 0.21;\n  const notary     = totalBase < 200000 ? 700 : totalBase < 500000 ? 1000 : totalBase < 1000000 ? 1200 : 1750;\n  const registry   = totalBase < 200000 ? 500 : totalBase < 500000 ? 700 : totalBase < 1000000 ? 900 : 1200;\n  const gestoria   = 500;\n  const bankDraft  = 300;\n  const nie        = 15;\n  const elec       = 200;\n  const water      = 150;\n  const internet   = 100;\n\n  const totalCosts = vat10 + vat21 + ajd + lawyer + lawyerVat + notary + registry + gestoria + bankDraft + fx + nie + poa + snagging + elec + water + internet;\n  const totalInv   = totalBase + totalCosts;\n  const pct        = totalBase > 0 ? (totalCosts \/ totalBase) * 100 : 0;\n\n  renderKPIs([\n    { label: t.kpiTotalCosts, value: fmt(totalCosts), cls: '' },\n    { label: t.kpiPct,        value: fmtPct(pct),     cls: 'gold', sub: 'of base price' },\n    { label: t.kpiTotal,      value: fmt(totalInv),   cls: 'green' }\n  ]);\n\n  $g('txt-bar-mid').textContent = t.barMidBuyer;\n  $g('cost-bar').style.width = Math.min(100, (pct \/ 20) * 100) + '%';\n\n  $g('notes-box').innerHTML = t.notesNewdev;\n\n  renderRows([\n    { label: t.nd_taxes,     cls: 'section-head', amt: 0 },\n    { label: t.nd_vat,       note: t.nd_vat_note,     amt: -vat10 },\n    ...(vat21 > 0 ? [{ label: t.nd_vat_sep, note: t.nd_vat_sep_note, amt: -vat21 }] : []),\n    { label: t.nd_ajd,       note: t.nd_ajd_note,     amt: -ajd },\n    { label: t.nd_legal,     cls: 'section-head', amt: 0 },\n    { label: t.nd_lawyer,    note: t.nd_lawyer_note,  amt: -lawyer },\n    { label: t.nd_lawyervat, note: '',                amt: -lawyerVat },\n    { label: t.nd_notary,    note: '',                amt: -notary },\n    { label: t.nd_registry,  note: '',                amt: -registry },\n    { label: t.nd_gestoria,  note: '',                amt: -gestoria },\n    { label: t.nd_banking,   cls: 'section-head', amt: 0 },\n    { label: t.nd_bankdraft, note: '',                amt: -bankDraft },\n    ...(fx > 0 ? [{ label: t.nd_fx, note: '', amt: -fx }] : []),\n    { label: t.nd_nie,       note: '',                amt: -nie },\n    ...(poa > 0 ? [{ label: t.nd_poa, note: '', amt: -poa }] : []),\n    ...(snagging > 0 ? [{ label: t.nd_snagging, note: t.nd_snagging_note, amt: -snagging }] : []),\n    { label: t.nd_utilities, cls: 'section-head', amt: 0 },\n    { label: t.nd_elec,      note: '',                amt: -elec },\n    { label: t.nd_water,     note: '',                amt: -water },\n    { label: t.nd_internet,  note: '',                amt: -internet },\n    { label: t.nd_total,     cls: 'total',            amt: -totalCosts },\n    { label: t.nd_investment,cls: 'net',              amt: totalInv }\n  ]);\n}\n\n\/* \u2500\u2500\u2500 SELLER \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 *\/\nfunction calcSeller(t) {\n  const salePrice    = +$g('inp-s-saleprice').value    || 0;\n  const origPrice    = +$g('inp-s-origprice').value    || 0;\n  const origCosts    = +$g('inp-s-origcosts').value    || 0;\n  const improvements = +$g('inp-s-improvements').value || 0;\n  const years        = +$g('inp-s-years').value        || 0;\n  const residency    = $g('inp-s-residency').value;\n  const cadastral    = +$g('inp-s-cadastral').value    || 0;\n  const agencyPct    = +$g('inp-s-agency').value \/ 100;\n  const lawyerFee    = +$g('inp-s-lawyer').value       || 0;\n  const mortgage     = +$g('inp-s-mortgage').value     || 0;\n\n  $g('val-s-saleprice').textContent = fmt(salePrice);\n  $g('val-s-agency').textContent    = Math.round(agencyPct * 100) + '%';\n\n  \/\/ Capital gain\n  const grossGain      = Math.max(0, salePrice - origPrice);\n  const deductions     = improvements + origCosts;\n  const netGain        = Math.max(0, grossGain - deductions);\n  const cgtRate        = residency === 'eu' ? 0.19 : 0.24;\n  const cgt            = netGain * cgtRate;\n  const retention      = salePrice * 0.03;\n  const cgtDue         = cgt - retention; \/\/ negative = refund\n  \/\/ Plusval\u00eda: simplified estimate (cadastral land value \u00d7 years \u00d7 3% coefficient \u00d7 30% Mijas rate)\n  const plusCoeff      = Math.min(years * 0.03, 0.45); \/\/ capped at 45%\n  const plusvalia      = cadastral * plusCoeff * 0.30;\n\n  \/\/ Fees\n  const agency         = salePrice * agencyPct;\n  const agencyVat      = agency * 0.21;\n  const lawyerVat      = lawyerFee * 0.21;\n  const epc            = 150;\n  const habitation     = 100;\n\n  const totalCosts     = cgt + plusvalia + agency + agencyVat + lawyerFee + lawyerVat + epc + habitation + mortgage;\n  const netProceeds    = salePrice - totalCosts;\n  const totalOrigInv   = origPrice + origCosts + improvements;\n  const profit         = netProceeds - totalOrigInv;\n  const costPct        = salePrice > 0 ? (totalCosts \/ salePrice) * 100 : 0;\n\n  renderKPIs([\n    { label: t.kpiTotalCosts,  value: fmt(totalCosts),  cls: '' },\n    { label: t.kpiCgt,         value: fmt(cgt),          cls: 'gold', sub: `${Math.round(cgtRate*100)}% of net gain` },\n    { label: t.kpiNetProceeds, value: fmt(netProceeds),  cls: 'green' }\n  ]);\n\n  $g('txt-bar-mid').textContent = t.barMidSeller;\n  $g('cost-bar').style.width = Math.min(100, (costPct \/ 20) * 100) + '%';\n\n  $g('notes-box').innerHTML = t.notesSeller;\n\n  renderRows([\n    { label: t.s_gain,        cls: 'section-head', amt: 0 },\n    { label: t.s_grossgain,   note: t.s_grossgain_note,   amt: grossGain },\n    { label: t.s_deductions,  note: t.s_deductions_note,  amt: -deductions },\n    { label: t.s_netgain,     cls: 'total',               amt: netGain },\n    { label: t.s_taxes,       cls: 'section-head', amt: 0 },\n    { label: t.s_cgt,         note: t.s_cgt_note,         amt: -cgt },\n    { label: t.s_retention,   note: t.s_retention_note,   amt: -retention },\n    { label: t.s_cgt_due,     note: cgtDue < 0 ? '\u2192 Refund via Modelo 210' : '\u2192 Additional payment due', amt: -cgtDue },\n    { label: t.s_plusvalia,   note: t.s_plusvalia_note,   amt: -plusvalia },\n    { label: t.s_fees,        cls: 'section-head', amt: 0 },\n    { label: t.s_agency,      note: `${Math.round(agencyPct*100)}%`,  amt: -agency },\n    { label: t.s_agencyvat,   note: '',                               amt: -agencyVat },\n    { label: t.s_lawyer,      note: '',                               amt: -lawyerFee },\n    { label: t.s_lawyervat,   note: '',                               amt: -lawyerVat },\n    { label: t.s_epc,         note: '',                               amt: -epc },\n    { label: t.s_habitation,  note: '',                               amt: -habitation },\n    ...(mortgage > 0 ? [{ label: t.s_mortgage, note: '', amt: -mortgage }] : []),\n    { label: t.s_total,       cls: 'total',        amt: -totalCosts },\n    { label: t.s_net,         cls: 'net',          amt: netProceeds },\n    { label: t.s_profit,      cls: 'net-green',    amt: profit }\n  ]);\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_cost';\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 Cost 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.PPCost = { onInput, switchMode, toggleCard, toggleBreakdown, setLanguage, unlock: unlockLead };\n})();\n<\/script>\n<\/body>\n<\/html>\n\n","protected":false},"excerpt":{"rendered":"<p>Property Cost Calculator \u2013 Plexo Properties Buyer &amp; Seller Tool Property Cost Calculator Calculate all purchase and selling costs for properties on the Costa del Sol. Rates based on Junta de Andaluc\u00eda &amp; AEAT 2025\/2026. Buying \u2013 Resale Buying \u2013 New Build Selling Cost Summary Resale Purchase \u00b7 Andaluc\u00eda 2025\/26 0% Typical range 10\u201312% 20% [&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-37659","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/pages\/37659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/comments?post=37659"}],"version-history":[{"count":5,"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/pages\/37659\/revisions"}],"predecessor-version":[{"id":37670,"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/pages\/37659\/revisions\/37670"}],"wp:attachment":[{"href":"https:\/\/plexoproperties.com\/de\/wp-json\/wp\/v2\/media?parent=37659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}