<div class="fcgp"><style>.fcgp{--paper:#F6F6F2;--surface:#FFFFFF;--surface-2:#ECEDE7;--ink:#0F1719;--ink-2:#41504F;--ink-3:#78857F;--line:#DCDED6;--line-2:#C3C7BD;--deep:#0B1517;--deep-2:#132123;--on-deep:#EDEFE9;--on-deep-2:#9DAAA5;--accent:#0B5C52;--accent-l:#7FC6B8;--brass:#9A7633;--flag:#8E3B27;--flag-bg:#F6E3DD}.fcgp,.fcgp *{box-sizing:border-box}.fcgp{margin:0;background:var(--paper);color:var(--ink);font-family:"Manrope",-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}.fcgp .w{max-width:1120px;margin:0 auto;padding-inline:24px}.fcgp .narrow{max-width:760px}.fcgp h1,.fcgp h2,.fcgp h3{font-family:"Cormorant Garamond",Georgia,serif;font-weight:500;letter-spacing:-.01em;text-wrap:balance;margin:0}.fcgp .eyebrow{font-size:11px;letter-spacing:.2em;text-transform:uppercase;font-weight:600;color:var(--brass)}.fcgp .site-h{background:var(--deep);color:var(--on-deep)}.fcgp .site-h .w{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-block:18px;flex-wrap:wrap}.fcgp .brand{font-family:"Cormorant Garamond",serif;font-size:21px;letter-spacing:.04em}.fcgp .brand small{display:block;font-family:"Manrope",sans-serif;font-size:9.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--on-deep-2);margin-top:2px}.fcgp .nav{display:flex;gap:22px;font-size:13.5px;color:var(--on-deep-2);flex-wrap:wrap}.fcgp .nav a{color:inherit;text-decoration:none}.fcgp .lang{margin-left:6px;padding-left:18px;border-left:1px solid rgba(237,239,233,.25);letter-spacing:.08em;font-weight:600}.fcgp .lang b{color:var(--on-deep);font-weight:700}.fcgp .lang a{color:var(--on-deep-2)}.fcgp .lang a:hover{color:var(--accent-l)}.fcgp .nav a:hover{color:var(--on-deep)}.fcgp .hero{background:var(--deep);color:var(--on-deep);position:relative;overflow:hidden}.fcgp .hero::after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 80% at 78% 12%,rgba(127,198,184,.16),transparent 58%),radial-gradient(90% 70% at 10% 100%,rgba(154,118,51,.14),transparent 60%)}.fcgp .hero .w{position:relative;z-index:1;padding-block:76px 64px;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:56px;align-items:center}.fcgp .hero h1{font-size:clamp(38px,5.6vw,62px);line-height:1.03;font-weight:400}.fcgp .hero p.sub{color:var(--on-deep-2);font-size:17.5px;max-width:46ch;margin:22px 0 0}.fcgp .cta{display:flex;gap:12px;flex-wrap:wrap;margin-top:32px}.fcgp .btn{display:inline-block;font-size:15px;font-weight:600;padding:14px 26px;border-radius:3px;cursor:pointer;border:1px solid transparent;text-decoration:none}.fcgp .btn-p{background:var(--accent-l);color:#06201C;border-color:var(--accent-l)}.fcgp .btn-s{background:transparent;color:var(--on-deep);border-color:rgba(237,239,233,.35)}.fcgp .microcta{font-size:13px;color:var(--on-deep-2);margin-top:14px}.fcgp .photo{border-radius:3px;aspect-ratio:4/5;width:100%;max-width:100%;display:block;object-fit:cover}.fcgp .band-img{height:340px;background-position:center;background-size:cover;background-repeat:no-repeat}.fcgp .trustbar{border-top:1px solid rgba(237,239,233,.14);background:var(--deep-2);color:var(--on-deep-2)}.fcgp .trustbar .w{display:flex;flex-wrap:wrap;gap:10px 30px;padding-block:15px;font-size:12.5px;letter-spacing:.02em}.fcgp .nums{border-bottom:1px solid var(--line);background:var(--surface)}.fcgp .nums .w{display:grid;grid-template-columns:repeat(4,1fr);gap:0;padding-block:0}.fcgp .num{padding:34px 26px 32px;border-right:1px solid var(--line)}.fcgp .num:last-child{border-right:0}.fcgp .num .v{font-family:"Cormorant Garamond",serif;font-size:44px;line-height:1;color:var(--ink)}.fcgp .num .v em{font-style:normal;color:var(--brass)}.fcgp .num .k{font-size:13px;color:var(--ink-2);margin-top:10px;line-height:1.45}.fcgp section.band{padding-block:74px}.fcgp .band-t{margin-bottom:38px}.fcgp .band-t h2{font-size:clamp(28px,3.9vw,42px);line-height:1.1;max-width:20ch}.fcgp .band-t p{color:var(--ink-2);max-width:62ch;margin:14px 0 0}.fcgp .pains{display:grid;gap:0;border-top:1px solid var(--line)}.fcgp .pain{display:grid;grid-template-columns:34px minmax(0,1fr) minmax(0,1.15fr);gap:26px;padding:24px 0;border-bottom:1px solid var(--line);align-items:start}.fcgp .pain .i{font-size:12px;color:var(--brass);font-weight:600;padding-top:4px;font-variant-numeric:tabular-nums}.fcgp .pain .q{font-weight:600;font-size:16.5px}.fcgp .pain .a{color:var(--ink-2);font-size:15px}.fcgp .nolist{background:var(--deep);color:var(--on-deep)}.fcgp .nolist h2{color:var(--on-deep);font-size:clamp(28px,3.9vw,42px)}.fcgp .nolist .band-t p{color:var(--on-deep-2)}.fcgp .nogrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border-top:1px solid rgba(237,239,233,.16)}.fcgp .nogrid div{padding:20px 24px 20px 0;border-bottom:1px solid rgba(237,239,233,.16);color:var(--on-deep-2);font-size:15px;display:flex;gap:14px}.fcgp .nogrid div b{color:var(--accent-l);font-weight:600;flex-shrink:0}.fcgp .nolist .closing{margin-top:26px;color:var(--on-deep);font-size:16px;max-width:60ch}.fcgp .cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}.fcgp .card{background:var(--surface);border:1px solid var(--line);border-radius:3px;display:flex;flex-direction:column;overflow:hidden}.fcgp .card .ph{aspect-ratio:3/2;background:var(--surface-2);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--ink-3);font-size:12px;text-align:center;padding:16px}.fcgp .card .body{padding:20px;display:flex;flex-direction:column;gap:0;flex:1}.fcgp .card h3{font-size:22px;line-height:1.15}.fcgp .card .loc{font-size:12.5px;color:var(--ink-3);margin-top:5px;letter-spacing:.02em}.fcgp .card .price{font-size:19px;font-weight:700;margin-top:16px;font-variant-numeric:tabular-nums}.fcgp .card .price small{display:block;font-size:12.5px;font-weight:500;color:var(--ink-3);margin-top:3px}.fcgp .card .yield{margin-top:16px;padding-top:14px;border-top:1px solid var(--line);font-size:14px}.fcgp .card .yield b{color:var(--accent);font-size:16px}.fcgp .card .yield span{display:block;color:var(--ink-3);font-size:12px;margin-top:3px}.fcgp .card .why{margin-top:16px;font-size:13.5px;color:var(--ink-2)}.fcgp .card .why .lab{display:block;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);font-weight:600;margin-bottom:4px}.fcgp .card .risk{margin-top:14px;font-size:13.5px;color:var(--flag);background:var(--flag-bg);padding:11px 13px;border-radius:3px}.fcgp .card .risk .lab{display:block;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;margin-bottom:4px}.fcgp .card .go{margin-top:auto;padding-top:18px;font-size:14px;font-weight:600;color:var(--accent)}.fcgp .calcwrap{background:var(--surface);border:1px solid var(--line);border-radius:4px;overflow:hidden}.fcgp .calcgrid{display:grid;grid-template-columns:1fr 1fr}.fcgp .cin{padding:26px;border-right:1px solid var(--line)}.fcgp .cout{padding:26px;background:var(--surface-2)}.fcgp .lab{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--ink-3);margin-bottom:16px}.fcgp .f{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px}.fcgp .f label{font-size:13.5px;color:var(--ink-2)}.fcgp .f input{font:inherit;font-size:13.5px;width:110px;text-align:right;padding:7px 9px;border:1px solid var(--line-2);border-radius:3px;background:var(--paper);color:var(--ink);font-variant-numeric:tabular-nums}.fcgp .orow{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line);font-size:13.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}.fcgp .orow b{color:var(--ink);font-weight:600;white-space:nowrap}.fcgp .vs{display:flex;gap:26px;margin-top:22px;flex-wrap:wrap}.fcgp .vs .b{flex:1 1 120px}.fcgp .vs .k{font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--ink-3)}.fcgp .vs .n{font-family:"Cormorant Garamond",serif;font-size:42px;line-height:1.03;margin-top:4px;font-variant-numeric:tabular-nums}.fcgp .vs .b.g .n{color:var(--flag)}.fcgp .vs .b.n2 .n{color:var(--accent)}.fcgp .vs .d{font-size:11.5px;color:var(--ink-3)}.fcgp .cases{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:26px}.fcgp .case{border-top:2px solid var(--brass);padding-top:20px}.fcgp .case h3{font-size:21px;line-height:1.2}.fcgp .case p{color:var(--ink-2);font-size:14.5px;margin:12px 0 0}.fcgp .case .more{font-size:13.5px;font-weight:600;color:var(--accent);margin-top:14px}.fcgp .team{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0;border-top:1px solid var(--line)}.fcgp .team div{padding:20px 26px 20px 0;border-bottom:1px solid var(--line);font-size:15px;color:var(--ink-2)}.fcgp .faq{border-top:1px solid var(--line)}.fcgp .faq details{border-bottom:1px solid var(--line)}.fcgp .faq summary{cursor:pointer;padding:18px 0;font-weight:600;font-size:16px;list-style:none;display:flex;justify-content:space-between;gap:16px}.fcgp .faq summary::-webkit-details-marker{display:none}.fcgp .faq summary::after{content:"+";color:var(--brass);font-weight:400;font-size:20px;line-height:1}.fcgp .faq details[open] summary::after{content:"–"}.fcgp .faq .ans{padding:0 0 20px;color:var(--ink-2);font-size:15px;max-width:66ch}.fcgp .final{background-color:var(--deep);background-image:linear-gradient(rgba(11,21,23,.72),rgba(11,21,23,.88)),url(https://static.tildacdn.net/tild3231-3333-4664-a435-333066303761/fcg-final.jpg);background-size:cover;background-position:center;color:var(--on-deep)}.fcgp .final .w{padding-block:76px;text-align:center}.fcgp .final h2{font-size:clamp(30px,4.4vw,48px);color:var(--on-deep);margin-inline:auto;max-width:18ch}.fcgp .final p{color:var(--on-deep-2);max-width:52ch;margin:18px auto 0}.fcgp .final .cta{justify-content:center}.fcgp .foot{background:var(--deep-2);color:var(--on-deep-2);font-size:12.5px}.fcgp .foot .w{padding-block:26px 34px;display:flex;justify-content:space-between;gap:18px;flex-wrap:wrap}@media (max-width:900px){.fcgp .hero .w{grid-template-columns:1fr;gap:34px;padding-block:52px 44px}.fcgp .photo{aspect-ratio:16/10}.fcgp .nums .w{grid-template-columns:1fr 1fr}.fcgp .num{border-bottom:1px solid var(--line)}.fcgp .num:nth-child(2){border-right:0}.fcgp .cards,.fcgp .cases{grid-template-columns:1fr}.fcgp .calcgrid{grid-template-columns:1fr}.fcgp .cin{border-right:0;border-bottom:1px solid var(--line)}.fcgp .pain{grid-template-columns:1fr;gap:8px}.fcgp .pain .i{display:none}.fcgp .nogrid,.fcgp .team{grid-template-columns:1fr}.fcgp section.band{padding-block:52px}}.fcgp .soc{margin-top:28px;display:flex;flex-wrap:wrap;gap:10px}.fcgp .soc a{font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);text-decoration:none;border:1px solid var(--line);padding:10px 16px;transition:border-color .2s,color .2s}.fcgp .soc a:hover{color:var(--ink);border-color:var(--ink-3)}</style><style>/*sub-hero-fix*/.fcgp .hero .w{grid-template-columns:1fr}.fcgp .hero h1{font-size:clamp(30px,3.6vw,46px);max-width:20ch}.fcgp .hero .sub{max-width:58ch}</style><header class="site-h"><div class="w"><div class="brand">Fortunova<small>Capital Group</small></div><div class="nav"><a href="/en">Home</a><a href="/en/investment">Investment</a><a href="/en/rent">Rent</a><a href="#faq">FAQ</a><a href="#about">Contact</a><span class="lang"><a href="/">RU</a> / <b>EN</b></span></div></div></header><div class="hero"><div class="w"><div><div class="eyebrow">Resale market · Phuket, Thailand</div><h1>Phuket resale property: completed units from owners who are selling now</h1><p class="sub">A finished apartment pays from the first month and can be inspected in person rather than on a render. But a genuinely good resale unit lives for a few days, so you have to be ready before it appears.</p><div class="cta"><a class="btn btn-p" href="#rec3999103703" >Request a resale shortlist</a><a class="btn btn-s" href="https://t.me/resalePhuketfcg" target="_blank" rel="noopener">See listings on Telegram</a></div><div class="microcta">New units go to the channel as they appear. A shortlist for your budget comes from me directly.</div></div></div></div><section class="band"><div class="w"><div class="band-t"><h2>How resale differs from off-plan</h2><p>Not better, not worse. Different maths and a different set of risks.</p></div><div class="pains"><div class="pain"><div class="i">01</div><div class="q">Income starts immediately</div><div class="a">Not in two or three years, but next month. For anyone who needs cash flow rather than capital growth, that settles the question.</div></div><div class="pain"><div class="i">02</div><div class="q">You can inspect the actual asset</div><div class="a">The finish quality, the lifts, the pool, the grounds, the noise from the road. None of that exists on a construction site presentation.</div></div><div class="pain"><div class="i">03</div><div class="q">There is real occupancy history</div><div class="a">A completed building has a track record: how much the unit actually rented for and how often. That is far more honest than any developer projection.</div></div><div class="pain"><div class="i">04</div><div class="q">Price follows the reason for selling</div><div class="a">When an owner needs out, the unit trades below market, and that is where the return on resale comes from. Those listings do not wait: they appear and close within days.</div></div></div></div></section><section class="band nolist"><div class="w"><div class="band-t"><h2>What I verify before your money moves</h2><p>Resale risk is different from off-plan risk. The seller here is a private person, with none of a developer guarantees behind them.</p></div><div class="cases"><div class="case"><h3>Ownership form and quota</h3><p>Whether the unit is held in foreign freehold or sits in the Thai quota. That determines whether you can own it as the seller does, and who you can sell it to later.</p></div><div class="case"><h3>Outstanding building debts</h3><p>Unpaid CAM fees and sinking fund contributions attach to the unit. Better found before the transfer than after it.</p></div><div class="case"><h3>The building, not just the apartment</h3><p>Lifts, roof, pool, facade. If the sinking fund is empty and the building is due for work, the cost lands on the owners.</p></div><div class="case"><h3>The management agreement</h3><p>What the fee is, whether you can leave the rental programme, whether you can use the unit yourself and for how many nights a year.</p></div><div class="case"><h3>Why they are selling</h3><p>An urgent exit, a divorce, a problem with the building itself, or simply the end of an investment horizon. The reason almost always explains the price.</p></div><div class="case"><h3>Transfer taxes and costs</h3><p>Who pays the transfer fee and the taxes at the land office, how it is split between the parties, and what part of it is negotiable.</p></div></div></div></section><section class="band"><div class="w"><div class="band-t"><h2>How to see a unit before the market does</h2><p>Resale is not found at the moment you decide to buy. It is found before that.</p></div><div class="pains"><div class="pain"><div class="i">01</div><div class="q">We agree budget and goal</div><div class="a">I need the amount, the horizon and whether you want cash flow or resale profit. After that your brief stays live with me.</div></div><div class="pain"><div class="i">02</div><div class="q">You sit on the short list</div><div class="a">When something matching appears, you get it personally, before it goes to the channel, with the numbers and the drawbacks attached.</div></div><div class="pain"><div class="i">03</div><div class="q">Checks and decision</div><div class="a">Urgent units are decided in a day or two. That is why I start verifying the owner, the debts and the documents immediately, not after your yes.</div></div><div class="pain"><div class="i">04</div><div class="q">The transaction</div><div class="a">A Thai lawyer handles the transfer at the land department. Funds and taxes follow a structure agreed in advance.</div></div></div><div class="cta" style="margin-top:34px"><a class="btn btn-p" href="https://wa.me/66829819522?text=Hello!%20Please%20add%20my%20brief%20to%20your%20resale%20queue%20and%20let%20me%20know%20when%20a%20matching%20unit%20comes%20up." target="_blank" rel="noopener">Put my brief in the queue</a><a class="btn btn-s" href="https://t.me/resalePhuketfcg" target="_blank" rel="noopener">Listings channel</a></div></div></section><section class="band" id="faq" style="padding-top:0"><div class="w narrow"><div class="band-t"><h2>What buyers ask about Phuket resale</h2></div><div class="faq"><details open><summary>Is resale cheaper than off-plan?</summary><div class="ans">Not as a rule. A particular unit sold under pressure is cheaper, the resale market as a whole is not. A completed apartment in a good building with a working rental programme can cost more than the same unit off-plan, and that is reasonable: you are paying for something that already earns.</div></details><details><summary>Can a foreigner buy a resale unit in full ownership?</summary><div class="ans">Yes, if the unit sits in the building foreign quota. The Condominium Act allows no more than forty-nine per cent of the total apartment area in a building to be sold to foreigners. So the first thing I request on any unit is which quota it is held in. If it is the Thai quota, the transaction and the terms are different.</div></details><details><summary>Do the previous owner debts transfer to me?</summary><div class="ans">Arrears on common area charges attach to the unit, so they have to be cleared before the transfer. We obtain a clearance certificate from the management company and we do not complete without it.</div></details><details><summary>Is there room to negotiate?</summary><div class="ans">On resale, yes, and it is a normal part of the process. How much room depends on how badly the owner needs to sell, which is why I establish the reason for selling before I discuss price.</div></details><details><summary>How fast do good units go?</summary><div class="ans">Genuinely underpriced ones go within days, sometimes faster. That is why it pays to state your budget and criteria in advance: then you see the unit when it appears, not once it is already circulating in every channel.</div></details><details><summary>Where can I see current listings?</summary><div class="ans">I keep a separate Telegram channel for resale and post units as they come in. A shortlist for your specific budget is better requested directly: not everything reaches the channel, because some owners ask not to be published.</div></details></div></div></section><section class="band" id="about"><div class="w"><div class="band-t"><h2>Lyubov Fortunova, founder of Fortunova Capital Group</h2><p>Investment strategist. More than five years on Phuket: I built a retail business here before real estate, so I know the island beyond the brochures.</p></div><div class="team"><div>Net yield, not dreams: returns after tax, management fees and vacancy.</div><div>We work across the whole island market and are not tied to any one developer.</div><div>Investors from India, Pakistan and Europe. Phuket I handle personally.</div><div>The agency operates under the brand Fortunova Capital Group. Thai legal entity: Eclectic Trend Co., Ltd., Tax ID 0835567033471.</div></div><div class="nap"><div><b>Office</b>7/4 Moo 1, Chalong, Mueang Phuket, Phuket 83130, Thailand</div><div><b>WhatsApp and phone</b>+66 82 981 9522</div><div><b>Email</b>Liubovfortunova@gmail.com</div><div><b>Response</b>Within one business day, in any time zone</div></div><div class="soc"><a href="https://t.me/invest_in_phuket" target="_blank" rel="noopener">Telegram channel</a><a href="https://www.instagram.com/invest_in_phuket/" target="_blank" rel="noopener">Instagram — agency</a><a href="https://www.instagram.com/love_fortunova/" target="_blank" rel="noopener">Instagram — Lyubov</a><a href="https://www.youtube.com/@InvestinPhuket" target="_blank" rel="noopener">YouTube</a></div></div></section><section class="final" id="cta"><div class="w"><h2>A shortlist built around your actual task</h2><p>Three to five properties with the full calculation, not a list of thirty links. Five short questions, and the budget one comes fourth.</p><div class="cta"><a class="btn btn-p" href="#rec3999103703" >Start the shortlist</a><a class="btn btn-s" href="https://wa.me/66829819522?text=Hello!%20I%20am%20writing%20from%20fortunovacapital.com%2C%20the%20Resale%20page.%20I%20have%20a%20question." target="_blank" rel="noopener">Message on WhatsApp</a></div><div class="microcta">A personal reply. No calls unless you ask.</div></div></section><script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","inLanguage":"en","mainEntity":[{"@type":"Question","name":"Is resale cheaper than off-plan?","acceptedAnswer":{"@type":"Answer","text":"Not as a rule. A particular unit sold under pressure is cheaper, the resale market as a whole is not. A completed apartment in a good building with a working rental programme can cost more than the same unit off-plan, and that is reasonable: you are paying for something that already earns."}},{"@type":"Question","name":"Can a foreigner buy a resale unit in full ownership?","acceptedAnswer":{"@type":"Answer","text":"Yes, if the unit sits in the building foreign quota. The Condominium Act allows no more than forty-nine per cent of the total apartment area in a building to be sold to foreigners. So the first thing I request on any unit is which quota it is held in. If it is the Thai quota, the transaction and the terms are different."}},{"@type":"Question","name":"Do the previous owner debts transfer to me?","acceptedAnswer":{"@type":"Answer","text":"Arrears on common area charges attach to the unit, so they have to be cleared before the transfer. We obtain a clearance certificate from the management company and we do not complete without it."}},{"@type":"Question","name":"Is there room to negotiate?","acceptedAnswer":{"@type":"Answer","text":"On resale, yes, and it is a normal part of the process. How much room depends on how badly the owner needs to sell, which is why I establish the reason for selling before I discuss price."}},{"@type":"Question","name":"How fast do good units go?","acceptedAnswer":{"@type":"Answer","text":"Genuinely underpriced ones go within days, sometimes faster. That is why it pays to state your budget and criteria in advance: then you see the unit when it appears, not once it is already circulating in every channel."}},{"@type":"Question","name":"Where can I see current listings?","acceptedAnswer":{"@type":"Answer","text":"I keep a separate Telegram channel for resale and post units as they come in. A shortlist for your specific budget is better requested directly: not everything reaches the channel, because some owners ask not to be published."}}]}</script>
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Service","serviceType":"Phuket resale property sourcing","provider":{"@id":"https://fortunovacapital.com/#organization"},"areaServed":{"@type":"Place","name":"Phuket, Thailand"},"url":"https://fortunovacapital.com/en/resale"}</script>
</div><script>
(function(){
var ids = ['p-price','p-area','p-night','p-occ','p-mgmt','p-tax','p-cam','p-fix'];
var el = {}, out = {};
ids.forEach(function(i){ el[i] = document.getElementById(i); });
['p-gross','p-omgmt','p-otax','p-ocam','p-ofix','p-net','p-gy','p-ny','p-pb'].forEach(function(i){ out[i] = document.getElementById(i); });
if (!el['p-price']) return;
function n(id){ var v = parseFloat(el[id].value); return isFinite(v) ? v : 0; }
function baht(v){ return Math.round(v).toLocaleString('en-US') + ' THB'; }
function calc(){
var price = n('p-price'), area = n('p-area'), night = n('p-night');
var occ = n('p-occ')/100, mg = n('p-mgmt')/100, tx = n('p-tax')/100;
var cam = n('p-cam'), fx = n('p-fix')/100;
var gross = night * 365 * occ;
var mgmt = gross * mg;
var tax = Math.max(0, gross - mgmt) * tx;
var camY = cam * area * 12;
var fix = price * fx;
var net = gross - mgmt - tax - camY - fix;
out['p-gross'].textContent = baht(gross);
out['p-omgmt'].textContent = '- ' + baht(mgmt);
out['p-otax'].textContent = '- ' + baht(tax);
out['p-ocam'].textContent = '- ' + baht(camY);
out['p-ofix'].textContent = '- ' + baht(fix);
out['p-net'].textContent = baht(net);
var gy = price > 0 ? gross/price*100 : 0;
var ny = price > 0 ? net/price*100 : 0;
out['p-gy'].textContent = gy.toFixed(1) + '%';
out['p-ny'].textContent = ny.toFixed(1) + '%';
out['p-pb'].textContent = (net > 0 && price > 0) ? (price/net).toFixed(1) : '—';
}
ids.forEach(function(i){ el[i].addEventListener('input', calc); });
calc();
})();
</script>