(function(){ var html = ` Free Property Valuation — Caucasus Elite Estate :root{ --ink:#012B53; --ink-2:#0A3563; --panel:#06305A; --line:#17497B; --brass:#D9B85C; --brass-soft:#E7C766; --cream:#F1EAD8; --stone:#A6B6C9; --stone-dim:#6E829B; --shadow:0 24px 60px -30px rgba(0,0,0,.8); --r:14px; } *{box-sizing:border-box;margin:0;padding:0} html{-webkit-text-size-adjust:100%} body{ background: radial-gradient(120% 90% at 82% -8%, rgba(198,161,91,.10), transparent 55%), radial-gradient(90% 70% at 0% 110%, rgba(198,161,91,.05), transparent 60%), var(--ink); color:var(--cream); font-family:"Manrope",system-ui,sans-serif; line-height:1.5; padding:clamp(16px,3vw,44px); min-height:100vh; } .shell{max-width:1120px;margin:0 auto} .masthead{margin-bottom:clamp(20px,3vw,34px)} .brand{display:flex;align-items:center;gap:12px;letter-spacing:.22em;font-size:11px;text-transform:uppercase;color:var(--brass-soft);font-weight:600} .brand .dot{width:5px;height:5px;border-radius:50%;background:var(--brass)} .lede{margin-top:14px;max-width:660px} .lede h1{font-family:"Cormorant Garamond",serif;font-weight:500;font-size:clamp(31px,5vw,54px);line-height:1.02;color:var(--cream)} .lede h1 em{font-style:italic;color:var(--brass-soft)} .lede p{margin-top:14px;color:var(--stone);font-size:15px;max-width:560px} .grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.02fr);gap:clamp(16px,2vw,26px);margin-top:clamp(22px,3vw,34px);align-items:start} @media(max-width:860px){.grid{grid-template-columns:1fr}} .card{background:linear-gradient(180deg,var(--ink-2),var(--panel));border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)} .card-pad{padding:clamp(20px,2.4vw,30px)} .eyebrow{font-size:10.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--stone-dim);font-weight:600;margin-bottom:20px;display:flex;align-items:center;gap:10px} .eyebrow::after{content:"";flex:1;height:1px;background:var(--line)} .field{margin-bottom:22px} .field:last-child{margin-bottom:0} label.lbl{display:flex;justify-content:space-between;align-items:baseline;font-size:13px;color:var(--cream);font-weight:600;margin-bottom:9px;gap:12px} label.lbl .val{font-family:"Cormorant Garamond",serif;font-size:20px;color:var(--brass-soft);font-weight:600;font-style:italic;white-space:nowrap} label.lbl .opt{font-size:11px;font-weight:500;color:var(--stone-dim);text-transform:none;letter-spacing:0} select,input[type=text]{width:100%;background:var(--ink);border:1px solid var(--line);border-radius:10px;color:var(--cream);font-family:"Manrope",sans-serif;font-size:14px;font-weight:500;padding:13px 14px;outline:none} select{appearance:none;font-weight:600;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='7'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%23c6a15b' stroke-width='1.5' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 14px center;cursor:pointer} select:focus,input[type=text]:focus{border-color:var(--brass);box-shadow:0 0 0 3px rgba(198,161,91,.14)} input::placeholder{color:var(--stone-dim)} input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:2px;background:var(--line);border-radius:2px;outline:none} input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:18px;height:18px;border-radius:50%;background:var(--brass);border:3px solid var(--ink-2);cursor:pointer;box-shadow:0 0 0 1px var(--brass)} input[type=range]::-moz-range-thumb{width:15px;height:15px;border-radius:50%;background:var(--brass);border:3px solid var(--ink-2);cursor:pointer} .seg{display:grid;grid-auto-flow:row;grid-template-columns:1fr 1fr;gap:6px;background:var(--ink);border:1px solid var(--line);border-radius:10px;padding:5px} @media(max-width:420px){.seg{grid-template-columns:1fr}} .seg button{font-family:inherit;font-size:12px;font-weight:600;color:var(--stone);background:transparent;border:0;border-radius:7px;padding:11px 6px;cursor:pointer;transition:.18s} .seg button[aria-pressed=true]{background:linear-gradient(180deg,#0E4076,#0A3563);color:var(--brass-soft);box-shadow:inset 0 0 0 1px var(--line)} .seg button:hover{color:var(--cream)} .hint{font-size:11.5px;color:var(--stone-dim);margin-top:7px} .contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px} @media(max-width:520px){.contact-grid{grid-template-columns:1fr}} /* Result */ .est{position:relative;overflow:hidden} .est::before{content:"";position:absolute;inset:0;background:radial-gradient(80% 60% at 90% 0%,rgba(198,161,91,.10),transparent 60%);pointer-events:none} .prop-line{font-family:"Cormorant Garamond",serif;font-size:19px;font-style:italic;color:var(--brass-soft);margin-bottom:20px;border-bottom:1px solid var(--line);padding-bottom:16px} .est-cap{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--stone-dim);font-weight:600} .est-range{font-family:"Cormorant Garamond",serif;font-weight:600;font-size:clamp(34px,6vw,52px);line-height:1.05;color:var(--cream);margin-top:8px} .est-range .dash{color:var(--brass);font-style:italic;padding:0 4px} .est-mid{margin-top:10px;font-size:13.5px;color:var(--stone)} .est-mid b{color:var(--brass-soft);font-weight:600} .house-title{font-family:"Cormorant Garamond",serif;font-weight:600;font-size:clamp(26px,4.5vw,38px);line-height:1.1;color:var(--cream);margin-top:8px} .house-desc{font-size:13.5px;color:var(--stone);margin-top:12px;line-height:1.6} .bonus{margin-top:20px;display:flex;justify-content:space-between;align-items:baseline;background:var(--ink);border:1px solid var(--line);border-radius:10px;padding:13px 16px} .bonus .bk{font-size:12.5px;color:var(--stone)} .bonus .bv{font-family:"Cormorant Garamond",serif;font-size:20px;color:var(--brass-soft);font-weight:600} .loc-warn{margin-top:22px;display:flex;gap:14px;align-items:flex-start;background:var(--ink);border:1px solid var(--line);border-left:2px solid var(--brass);border-radius:12px;padding:14px 18px} .loc-warn .lw-icon{flex:0 0 auto;color:var(--brass);font-size:16px;line-height:1.6} .loc-warn .lw-t{font-size:12.5px;font-weight:600;color:var(--cream)} .loc-warn .lw-d{font-size:12px;color:var(--stone);margin-top:5px;line-height:1.55} .cta{margin-top:24px} a.btn{display:flex;align-items:center;justify-content:center;gap:10px;width:100%;text-decoration:none;font-weight:700;font-size:15px;padding:16px;border-radius:12px;transition:.18s} a.wa{background:linear-gradient(180deg,#E4C45F,#C79A3A);color:#04213E;box-shadow:0 12px 30px -12px rgba(198,161,91,.6)} a.wa:hover{filter:brightness(1.06);transform:translateY(-1px)} a.email{margin-top:11px;background:transparent;border:1px solid var(--line);color:var(--brass-soft)} a.email:hover{border-color:var(--brass)} a.btn:focus-visible{outline:3px solid rgba(198,161,91,.5);outline-offset:2px} .cta .note{margin-top:12px;text-align:center;font-size:12px;color:var(--stone-dim)} .sources{margin-top:22px;font-size:11px;line-height:1.65;color:var(--stone-dim);border-top:1px solid var(--line);padding-top:14px} .sources .src-t{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--stone);font-weight:600;margin-bottom:5px} .sources .src-d{font-style:italic} .disclaimer{margin-top:16px;font-size:11.5px;line-height:1.6;color:var(--stone-dim);border-top:1px solid var(--line);padding-top:16px} .footer{margin-top:30px;text-align:center;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--stone-dim)} @media (prefers-reduced-motion:reduce){*{transition:none!important}}

$0$0
$0 · $0/m²
$0/mo

(function(){ /* Proprietary — © 2026 Caucasus Elite Estate LLC. */ var __CEE_OWNER__ = "© 2026 Caucasus Elite Estate LLC — caucasusestate.ge — all rights reserved"; try { console.info("%c Caucasus Elite Estate — © 2026 — caucasusestate.ge ", "color:#D9B85C"); } catch(e){} var WHATSAPP = "995577940068"; var EMAIL = "contact@cel.estate"; var LANG = "en"; // "ru" / "ka" once dictionaries are added /* SAME MARKET MATRIX as the investment simulator — keep the two files in sync. psqm = sale price $/m² by condition · rent = long-term rent $/m²/month. */ var MARKET = { mtatsminda: { rent: 12.0, psqm: { new: 2500, white: 2100, black: 1900, old: 2200 } }, sololaki: { rent: 11.5, psqm: { new: 2400, white: 2000, black: 1850, old: 2100 } }, vera: { rent: 12.0, psqm: { new: 2300, white: 1950, black: 1750, old: 2000 } }, vake: { rent: 13.5, psqm: { new: 2350, white: 2000, black: 1800, old: 2250 } }, saburtalo: { rent: 11.5, psqm: { new: 1700, white: 1450, black: 1300, old: 1500 } }, lisi: { rent: 8.0, psqm: { new: 1600, white: 1400, black: 1250, old: 1300 } }, chugureti: { rent: 10.5, psqm: { new: 2200, white: 1700, black: 1500, old: 1450 } }, ortachala: { rent: 9.5, psqm: { new: 1750, white: 1500, black: 1350, old: 1350 } }, isani: { rent: 9.5, psqm: { new: 1400, white: 1200, black: 1100, old: 1200 } }, dighomi: { rent: 8.5, psqm: { new: 1200, white: 1050, black: 950, old: 1000 } } }; // Floor / position modifier on value var FLOOR_MOD = { ground: 0.95, mid: 1.00, top: 1.04 }; // Balcony/terrace valued at a fraction of the interior rate (common market practice) var BALCONY_FRACTION = 0.50; // Range width around the point estimate (district spread is wide) var RANGE_LOW = 0.90, RANGE_HIGH = 1.12; var RENT_MULT = { new: 1.10, white: 1.05, black: 1.05, old: 0.90 }; var I18N = { en: { brand: "Caucasus Elite Estate — Tbilisi", headline: 'What is your Tbilisi property worth today?', intro: "Get an instant indicative range based on current district market data — then a precise, obligation-free valuation from our team.", inputsEyebrow: "Your property", modeQ: "What would you like to estimate?", modeSale: "Sale value", modeRent: "Rental amount", roleQ: "You are", roleOwner: "An owner (renting out)", roleTenant: "Looking to rent", headlineSale: 'What is your Tbilisi property worth today?', introSale: "Get an instant indicative range based on current district market data — then a precise, obligation-free valuation from our team.", headlineRent: 'What does a Tbilisi property like this rent for?', introRentOwner: "See the going monthly rent for your property by district and type — then let us find you a reliable tenant, fast.", introRentTenant: "See realistic monthly rents by district before you search — then let us send you the listings that match your budget.", rentCap: "Estimated monthly rent", rentMidLbl: "typical", perMo: "/month", perYr: "per year", warnTitleRent: "Rents vary with the specifics", warnDescRent: "Figures are a long-term, unfurnished baseline. A furnished, move-in-ready apartment typically adds 10–20%; floor, view, renovation quality and exact street also move the number. We confirm the realistic rent for your case, usually within 24 hours.", district: "District", districts: { mtatsminda: "Mtatsminda · Old Town", sololaki: "Sololaki", vera: "Vera", vake: "Vake", saburtalo: "Saburtalo", lisi: "Lisi · Lisi Lake", chugureti: "Chugureti · Marjanishvili", ortachala: "Ortachala · Krtsanisi", isani: "Isani · Avlabari", dighomi: "Dighomi · Didi Dighomi" }, condition: "Condition", condNew: "New · turnkey", condWhite: "White frame", condBlack: "Black frame", condOld: "Existing · resale", propertyType: "Property type", typeApartment: "Apartment", typeHouse: "House / Villa", area: "Interior area", balcony: "Balcony / terrace", balconyNote: "Counted at ~50% of the interior rate — the realistic market practice, not full interior price.", houseTitle: "Houses are valued individually", houseDesc: "A house or villa depends on the plot, land value, construction and layout — a simple per-m² figure would mislead you. Send us the details below and we'll prepare a precise, obligation-free valuation, usually within 24 hours.", floor: "Floor / position", floorGround: "Ground / low", floorMid: "Mid floor", floorTop: "Top / penthouse", address: "Address / building", addressPh: "Street, building, floor, apt — as precise as you like", contactEyebrow: "So we can send your valuation", name: "Name", namePh: "Your name", phone: "Phone", optional: "(optional)", phonePh: "+995 …", resultEyebrow: "Indicative estimate", propLine: "{area} m² · {cond} · {district}", estCap: "Estimated market value", estMid: "mid-point", rentBonusK: "Potential long-term rent", warnTitle: "This is a starting range, not a valuation", warnDesc: "The final figure depends on floor, view, natural light, exact street, renovation quality, building condition, layout and current demand. Our team confirms it precisely — usually within 24 hours.", ctaWa: "Get my precise valuation on WhatsApp", ctaEmail: "Or request it by email", ctaNote: "Free and with no obligation.", sourcesTitle: "Sources", sourcesList: "District price levels: TBC Capital (Oct. 2025), Galt & Taggart, Colliers Georgia, Global Property Guide. Official registry: National Agency of Public Registry (NAPR). Market data as of July 2026.", condNames: { new: "new turnkey", white: "white frame", black: "black frame", old: "existing resale" }, floorNames: { ground: "ground / low floor", mid: "mid floor", top: "top floor / penthouse" }, waMsg: { greeting: "Hello, I would like a precise valuation of my property.", greetingRentOwner: "Hello, I would like to rent out my property.", greetingRentTenant: "Hello, I am looking to rent a property in Tbilisi.", property: "Property", lookingFor: "Looking for", district: "District", floor: "Floor", addressLbl: "Address", typeLbl: "Type", balconyLbl: "Balcony/terrace", indicative: "Indicative range from your site", rentGuide: "Rent guide from your site", name: "Name", closing: "Could you confirm the exact value and let me know the next steps? Thank you.", closingRentOwner: "Could you find me a reliable tenant and let me know your terms? Thank you.", closingRentTenant: "Could you send me the available rentals that match? Thank you." }, emailSubject: "Property valuation request — {district}", disclaimer: "This indicative range is generated from published district-level market data and does not constitute a formal appraisal, an offer, or a commitment on value. Actual sale prices vary significantly within each district. A precise valuation requires an inspection of the property. Figures shown as of July 2026." } // ru: { ... } ka: { ... } }; var T = I18N[LANG]; var fmt = function(n){ return "$" + Math.round(n).toLocaleString("en-US"); }; var fmtK = function(n){ // round to nearest 1,000 for a cleaner range return "$" + (Math.round(n/1000)*1000).toLocaleString("en-US"); }; var state = { mode: (window.CEE_INITIAL_MODE === "rent" ? "rent" : "sale"), role: "owner", district: "vera", cond: "new", type: "apartment", area: 80, balcony: 0, floor: "mid", name: "", phone: "", address: "" }; var RENT_LOW = 0.88, RENT_HIGH = 1.15; // monthly rent spread function $(id){ return document.getElementById(id); } function tpl(s, vars){ return s.replace(/\\{(\\w+)\\}/g, function(_,k){ return vars[k]; }); } // static i18n (headline + intro are set by render() per mode) document.querySelectorAll("[data-i18n]").forEach(function(el){ var k = el.getAttribute("data-i18n"); if(typeof T[k] === "string") el.textContent = T[k]; }); document.querySelectorAll("[data-i18n-ph]").forEach(function(el){ var k = el.getAttribute("data-i18n-ph"); if(typeof T[k] === "string") el.setAttribute("placeholder", T[k]); }); Object.keys(MARKET).forEach(function(key){ var o = document.createElement("option"); o.value = key; o.textContent = T.districts[key]; $("district").appendChild(o); }); $("district").value = state.district; function compute(){ var m = MARKET[state.district]; var psqm = m.psqm[state.cond] * FLOOR_MOD[state.floor]; var interiorVal = psqm * state.area; var balconyVal = psqm * BALCONY_FRACTION * state.balcony; var mid = interiorVal + balconyVal; var low = mid * RANGE_LOW, high = mid * RANGE_HIGH; var rent = m.rent * RENT_MULT[state.cond] * state.area * FLOOR_MOD[state.floor]; var rentLow = rent * RENT_LOW, rentHigh = rent * RENT_HIGH; return { psqm:psqm, mid:mid, low:low, high:high, rent:rent, rentLow:rentLow, rentHigh:rentHigh, balconyVal:balconyVal }; } function render(){ var r = compute(); var isRent = (state.mode === "rent"); var isHouse = (state.type === "house"); // In rent mode we never show the house "valued individually" notice (rent per m² is defensible) var showHouseNotice = isHouse && !isRent; // Headline + intro adapt to mode/role if(isRent){ $("headline").innerHTML = T.headlineRent; $("introText").textContent = (state.role === "tenant") ? T.introRentTenant : T.introRentOwner; } else { $("headline").innerHTML = T.headlineSale; $("introText").textContent = T.introSale; } // Show/hide controls $("roleWrap").hidden = !isRent; $("balconyWrap").style.display = (isRent || isHouse) ? "none" : ""; // Result blocks $("numResult").hidden = isRent || showHouseNotice; $("houseNotice").hidden = !showHouseNotice; $("rentResult").hidden = !isRent; // Warning box adapts $("warnTitle").textContent = isRent ? T.warnTitleRent : T.warnTitle; $("warnDesc").textContent = isRent ? T.warnDescRent : T.warnDesc; $("balconyVal").textContent = state.balcony + " m²"; $("areaVal").textContent = state.area + " m²"; $("propLine").textContent = tpl(T.propLine, { area: state.area, cond: T.condNames[state.cond], district: T.districts[state.district] }); if(isRent){ $("rentLow").textContent = fmt(r.rentLow); $("rentHigh").textContent = fmt(r.rentHigh); $("rentMid").textContent = fmt(r.rent) + "/mo"; $("rentYear").textContent = fmt(r.rent * 12); } else if(!showHouseNotice){ $("estLow").textContent = fmtK(r.low); $("estHigh").textContent = fmtK(r.high); $("estMid").textContent = fmt(r.mid); $("psqmShown").textContent = fmt(r.psqm) + "/m²"; $("rentBonus").textContent = fmt(r.rent) + "/mo"; } // ---- Build the lead message ---- var M = T.waMsg, greeting, closing, lines; var propBits = "• " + M.typeLbl + ": " + (isHouse ? T.typeHouse : T.typeApartment) + "\\n" + "• " + (isRent && state.role === "tenant" ? M.lookingFor : M.property) + ": " + state.area + " m², " + T.condNames[state.cond] + (!isRent && !isHouse && state.balcony ? " + " + state.balcony + " m² " + M.balconyLbl : "") + "\\n" + "• " + M.district + ": " + T.districts[state.district] + "\\n" + (state.address && !(isRent && state.role === "tenant") ? "• " + M.addressLbl + ": " + state.address + "\\n" : "") + "• " + M.floor + ": " + T.floorNames[state.floor]; if(isRent){ greeting = (state.role === "tenant") ? M.greetingRentTenant : M.greetingRentOwner; closing = (state.role === "tenant") ? M.closingRentTenant : M.closingRentOwner; lines = greeting + "\\n\\n" + propBits + "\\n" + "• " + M.rentGuide + ": " + fmt(r.rentLow) + " – " + fmt(r.rentHigh) + " " + T.perMo; } else { greeting = M.greeting; closing = M.closing; lines = greeting + "\\n\\n" + (state.name ? "• " + M.name + ": " + state.name + "\\n" : "") + propBits + (isHouse ? "" : "\\n• " + M.indicative + ": " + fmtK(r.low) + " – " + fmtK(r.high)); } if(state.name && isRent){ lines = greeting + "\\n\\n" + "• " + M.name + ": " + state.name + "\\n" + lines.slice(greeting.length + 2); } $("waLink").href = "https://wa.me/" + WHATSAPP + "?text=" + encodeURIComponent(lines + "\\n\\n" + closing); var subject = tpl(T.emailSubject, { district: T.districts[state.district] }); var body = lines + (state.phone ? "\\n• Phone: " + state.phone : "") + "\\n\\n" + closing; $("emailLink").href = "mailto:" + EMAIL + "?subject=" + encodeURIComponent(subject) + "&body=" + encodeURIComponent(body); } $("district").addEventListener("change", function(e){ state.district = e.target.value; render(); }); function bindSeg(id, key){ var g = $(id); g.querySelectorAll("button").forEach(function(btn){ btn.addEventListener("click", function(){ g.querySelectorAll("button").forEach(function(b){ b.setAttribute("aria-pressed","false"); }); btn.setAttribute("aria-pressed","true"); state[key] = btn.dataset[key]; render(); }); }); } bindSeg("mode","mode"); bindSeg("role","role"); bindSeg("condition","cond"); bindSeg("floor","floor"); bindSeg("ptype","type"); $("area").addEventListener("input", function(){ state.area = parseFloat(this.value); render(); }); $("balcony").addEventListener("input", function(){ state.balcony = parseFloat(this.value); render(); }); $("cname").addEventListener("input", function(){ state.name = this.value.trim(); render(); }); $("cphone").addEventListener("input", function(){ state.phone = this.value.trim(); render(); }); $("caddr").addEventListener("input", function(){ state.address = this.value.trim(); render(); }); // reflect the initial mode on the toggle buttons $("mode").querySelectorAll("button").forEach(function(b){ b.setAttribute("aria-pressed", b.dataset.mode === state.mode ? "true" : "false"); }); render(); })(); `; var wrap = document.getElementById('cee-value'); var f = document.createElement('iframe'); f.setAttribute('title','Free Tbilisi Property Valuation'); f.setAttribute('loading','lazy'); f.setAttribute('scrolling','no'); f.style.cssText='width:100%;border:0;display:block;min-height:600px;overflow:hidden;'; f.srcdoc = html; wrap.appendChild(f); var lastH=0, raf=0; function apply(){ raf=0; try{ var h=f.contentWindow.document.documentElement.scrollHeight; /* grow immediately; only shrink on a BIG drop (mode/section change), never on tiny reflows */ if(h>lastH+2 || h<lastH-80){ lastH=h; f.style.height=h+'px'; } }catch(e){} } function fit(){ if(!raf){ raf=requestAnimationFrame(apply); } } f.addEventListener('load',function(){ fit(); try{ var w=f.contentWindow, d=w.document; if(w.ResizeObserver){ new w.ResizeObserver(fit).observe(d.body); } if(d.fonts&&d.fonts.ready){ d.fonts.ready.then(fit); } /* NOTE: no window 'resize' listener — that misfired on mobile scroll and caused the jump */ }catch(e){} }); })();

قائمة المقارنة