Yugen Event

Yugen Infra
17 July 20266 min read

<!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>