<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Get In Touch — Yugen Infra</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@500;600&family=Poppins:wght@300;400;500;600&display=swap" rel="stylesheet" />
<style>
:root {
--gold: #b0821b;
--gold-dark: #98700f;
--ink: #1f1c17;
--body: #4a463f;
--muted: #8b867c;
--cream: #f4f1ea;
--panel: #ffffff;
--line: #e6e1d6;
--field-bg: #ffffff;
}
* { box-sizing: border-box; }
body {
margin: 0;
font-family: "Poppins", system-ui, sans-serif;
color: var(--body);
background: var(--cream);
-webkit-font-smoothing: antialiased;
line-height: 1.5;
}
.wrap {
max-width: 1180px;
margin: 0 auto;
padding: 72px 40px;
display: grid;
grid-template-columns: 1fr 1.15fr;
gap: 72px;
align-items: start;
}
/* ---------- Left column ---------- */
.eyebrow {
color: var(--gold);
font-size: 13px;
font-weight: 600;
letter-spacing: 3px;
text-transform: uppercase;
margin: 0 0 22px;
}
.headline {
font-family: "Playfair Display", serif;
font-weight: 500;
color: var(--ink);
font-size: 64px;
line-height: 1.02;
margin: 0 0 30px;
letter-spacing: -0.5px;
}
.lead {
font-size: 20px;
font-weight: 300;
color: var(--body);
max-width: 460px;
margin: 0 0 44px;
}
.perks { list-style: none; padding: 0; margin: 0; }
.perks li {
display: flex;
align-items: center;
gap: 16px;
font-size: 19px;
color: var(--ink);
margin-bottom: 22px;
}
.perks .dot {
width: 11px; height: 11px;
background: var(--gold);
transform: rotate(45deg);
flex: none;
}
/* ---------- Right column (form card) ---------- */
.card {
background: var(--panel);
border-radius: 28px 28px 0 0;
box-shadow: 0 40px 90px -50px rgba(31,28,23,0.35);
padding: 46px 46px 40px;
}
.card h2 {
font-family: "Playfair Display", serif;
font-weight: 500;
color: var(--ink);
font-size: 34px;
margin: 0 0 8px;
}
.card .sub {
color: var(--muted);
font-size: 16px;
margin: 0 0 34px;
}
.field { margin-bottom: 22px; }
.row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 22px;
}
label {
display: block;
font-size: 15px;
font-weight: 500;
color: var(--ink);
margin-bottom: 9px;
}
label .req { color: var(--gold); margin-left: 2px; }
label .opt { color: var(--muted); font-weight: 400; }
input, select, textarea {
width: 100%;
font-family: inherit;
font-size: 16px;
color: var(--ink);
background: var(--field-bg);
border: 1.5px solid var(--line);
border-radius: 12px;
padding: 15px 16px;
outline: none;
transition: border-color .15s, box-shadow .15s;
}
input::placeholder, textarea::placeholder { color: #b4afa4; }
input:focus, select:focus, textarea:focus {
border-color: var(--gold);
box-shadow: 0 0 0 3px rgba(176,130,27,0.12);
}
select { appearance: none; color: var(--muted); cursor: pointer;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='%238b867c' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 16px center;
padding-right: 42px;
}
select.filled { color: var(--ink); }
textarea { resize: vertical; min-height: 130px; }
/* Phone with country code */
.phone { display: grid; grid-template-columns: 108px 1fr; gap: 10px; }
.cc {
display: flex; align-items: center; gap: 6px;
border: 1.5px solid var(--line);
border-radius: 12px;
padding: 15px 12px;
background: var(--field-bg);
font-size: 16px; color: var(--ink);
white-space: nowrap;
}
.flag {
width: 22px; height: 15px; border-radius: 2px; flex: none;
background: linear-gradient(#ff9933 33.3%, #fff 33.3% 66.6%, #138808 66.6%);
position: relative;
}
.flag::after {
content: ""; position: absolute; left: 50%; top: 50%;
width: 5px; height: 5px; border: 1px solid #000080; border-radius: 50%;
transform: translate(-50%,-50%);
}
.cc .chev { color: var(--muted); font-size: 12px; }
/* Submit */
.submit {
width: 100%;
margin-top: 12px;
background: var(--gold);
color: #fff;
font-family: inherit;
font-size: 18px;
font-weight: 600;
border: none;
border-radius: 12px;
padding: 19px;
cursor: pointer;
transition: background .15s, transform .05s;
}
.submit:hover { background: var(--gold-dark); }
.submit:active { transform: translateY(1px); }
.submit:disabled { opacity: .7; cursor: default; }
.status {
margin-top: 16px; font-size: 15px; text-align: center;
color: var(--gold-dark); min-height: 1em;
}
.error-text { color: #b4231d; font-size: 13px; margin-top: 6px; display: none; }
.invalid { border-color: #d98a86 !important; }
/* ---------- Responsive ---------- */
@media (max-width: 900px) {
.wrap { grid-template-columns: 1fr; gap: 44px; padding: 44px 24px; }
.headline { font-size: 46px; }
.card { border-radius: 24px; padding: 34px 26px; }
.row, .phone { grid-template-columns: 1fr; }
.phone { grid-template-columns: 108px 1fr; }
}
@media (prefers-reduced-motion: reduce) {
* { transition: none !important; }
}
</style>
</head>
<body>
<main class="wrap">
<!-- Left column -->
<section class="intro">
<p class="eyebrow">Connect With Us</p>
<h1 class="headline">Get In Touch</h1>
<p class="lead">Whether you're looking for your dream home, an investment opportunity, or simply want to explore what Gurugram's luxury real estate has to offer — we're here to help.</p>
<ul class="perks">
<li><span class="dot"></span> Response within 24 hours</li>
<li><span class="dot"></span> Dedicated Relationship Manager</li>
<li><span class="dot"></span> Personalized Property Tours</li>
</ul>
</section>
<!-- Right column -->
<section class="card">
<h2>Schedule a Private Viewing</h2>
<p class="sub">Fill in your details and we'll get back to you shortly.</p>
<form id="viewingForm" novalidate>
<div class="field">
<label for="name">Full Name <span class="req">*</span></label>
<input id="name" name="name" type="text" placeholder="Enter your full name" required />
<p class="error-text">Please enter your name.</p>
</div>
<div class="row">
<div class="field">
<label for="email">Email <span class="req">*</span></label>
<input id="email" name="email" type="email" placeholder="[email protected]" required />
<p class="error-text">Please enter a valid email.</p>
</div>
<div class="field">
<label for="phone">Phone <span class="req">*</span></label>
<div class="phone">
<div class="cc"><span class="flag"></span> +91 <span class="chev">▾</span></div>
<input id="phone" name="phone" type="tel" inputmode="numeric" placeholder="+91" required />
</div>
<p class="error-text">Please enter a valid phone number.</p>
</div>
</div>
<div class="row">
<div class="field">
<label for="project">Interested Project</label>
<select id="project" name="project">
<option value="" disabled selected>Select project</option>
<option>Garden of Eden - Villa Plots</option>
<option>Garden of Eden - Acqua Front Villas</option>
<option>LA Mandre - Luxury Villas</option>
<option>Other</option>
</select>
</div>
<div class="field">
<label for="budget">Budget Range</label>
<select id="budget" name="budget">
<option value="" disabled selected>Select budget</option>
<option>₹50 Lakhs - ₹1 Crore</option>
<option>₹1 - 2 Crore</option>
<option>₹2 - 5 Crore</option>
<option>₹5 Crore+</option>
</select>
</div>
</div>
<div class="field">
<label for="message">Message <span class="opt">(Optional)</span></label>
<textarea id="message" name="message" placeholder="Tell us about your requirements..."></textarea>
</div>
<button class="submit" type="submit">Request Callback</button>
<p class="status" id="status"></p>
</form>
</section>
</main>
<script>
// Color selects like real placeholders / values
document.querySelectorAll("select").forEach(function (sel) {
var sync = function () { sel.classList.toggle("filled", !!sel.value); };
sel.addEventListener("change", sync); sync();
});
var form = document.getElementById("viewingForm");
var status = document.getElementById("status");
function setError(input, show) {
var msg = input.closest(".field").querySelector(".error-text");
input.classList.toggle("invalid", show);
if (msg) msg.style.display = show ? "block" : "none";
}
form.addEventListener("submit", function (e) {
e.preventDefault();
status.textContent = "";
var name = form.name;
var email = form.email;
var phone = form.phone;
var okName = name.value.trim().length > 1;
var okEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email.value.trim());
var digits = phone.value.replace(/\D/g, "");
var okPhone = digits.length >= 7;
setError(name, !okName);
setError(email, !okEmail);
setError(phone, !okPhone);
if (!(okName && okEmail && okPhone)) {
status.textContent = "Please correct the highlighted fields.";
status.style.color = "#b4231d";
return;
}
var payload = {
name: name.value.trim(),
email: email.value.trim(),
phone: "+91" + digits.replace(/^91/, ""),
project: form.project.value,
budget: form.budget.value,
message: form.message.value.trim()
};
var btn = form.querySelector(".submit");
btn.disabled = true;
btn.textContent = "Sending...";
status.style.color = "";
// Posts to YOUR backend, which forwards to TeleCRM with the token
// held server-side. See telecrm-lead route in the accompanying file.
fetch("/api/telecrm-lead", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload)
})
.then(function (res) {
if (!res.ok) throw new Error("Request failed");
return res.json();
})
.then(function () {
form.reset();
document.querySelectorAll("select").forEach(function (s) { s.classList.remove("filled"); });
status.textContent = "Thanks — we'll be in touch within 24 hours.";
})
.catch(function () {
status.style.color = "#b4231d";
status.textContent = "Something went wrong. Please call us or try again.";
})
.finally(function () {
btn.disabled = false;
btn.textContent = "Request Callback";
});
});
// Clear error state as the user types
["name", "email", "phone"].forEach(function (id) {
form[id].addEventListener("input", function () { setError(this, false); });
});
</script>
</body>
</html>


