Trans Hotel Jakarta — Elegant Feels. Effortless Stay.
Lobby ambience — Trans Hotel Jakarta
Elevated Touches, Elegant Feels.

The ultimate Premier 5-Star Destination for MICE, Family Getaways, and Seamless Lifestyle.

rooms
Rooms
1
guests
Guests
1
Trans Hotel Jakarta

Crafted Elegance in South Jakarta

South Jakarta’s newest 5-star upscale hotel, delivers unique hospitality and crafted perfection within its 4.2-hectare integrated lifestyle complex consisting of Trans Studio Mall, Trans Studio Theme Park, and Transpark Apartment.

Seamless business, leisure, and lifestyle experiences with global timeless sophistication.

Trans Hotel Jakarta Exterior

Five-Star Signatures

Polished, personalized service delivered with genuine Indonesian warmth.

Integrated Destination

Integrated Destination

Seamless business, leisure, and lifestyle within the massive Transpark Complex (Mall, Theme Park, and Apartment).

Culinary Icon

Culinary Icon

A premier dining destination, home to a rare cellar and the iconic Skywalk Bridge at The 18th.

Resort Pool

Resort Pool

A luxurious white sandy beach pool with skyline views, offering a resort vibe and exciting kids' activities.

MICE & Business Hub

MICE & Business Hub

Leading, state-of-the-art facilities ready to host major national and regional conferences and exhibitions.

Dream Weddings Venue

Dream Weddings Venue

The ultimate destination for grand, unforgettable social celebrations and Dream Weddings.

The Art of Stay

Contemporary elegance, handcrafted finishes, and intuitive technology.

Premiere Room

Premiere Room

Modern comfort meets timeless style.

Executive Suite

Executive Suite

Generous space for productivity & privacy.

Celebrity Suite

Celebrity Suite

Indulge in an elevated stay with a separate bedroom, spacious living room, and dining area, plus exclusive access to the Private Reception and Club Lounge.

Presidential Suite

Presidential Suite

The pinnacle of prestige, featuring unrivaled panoramic city views, a private lounge, and dedicated 24-hour butler service.

Exclusive Venues

From grand celebrations to intimate gatherings, crafted with elegance.

Trans Grand Ballroom

TRANS GRAND BALLROOM

Trans Grand Ballroom Jakarta provides an elegant and spacious setting for a variety of events, from grand celebrations to sophisticated corporate gatherings.

TRANS BOARDROOM

Our 10 multipurpose boardrooms are located on the 2nd and 5th floors, offering a total of 635 sqm of flexible function space.

Trans Boardroom

The Art of Dining

Seasonal inspirations, chef’s table storytelling, and a cellar built for celebration.

ALL DINING LOUNGE

ALL DAY DINING

From gourmet creations to exquisite ambiance — all-day dining redefined with seasonal menus.

SKY LOUNGE

Skyline lounge where fine cuisine meets the city lights — signature cocktails & curated sounds.

All Day Dining

Exclusive Offers

Click an offer to book with the promo code applied automatically.

Limited Offer

UNBEATABLE Escapes

Unlock exclusive perks—elevate every moment of your getaway.

Member Special

SERENE Bliss

Breathe easy—an unforgettable retreat curated for comfort, calm, and you.

For Families

FAMILY Bliss

Make memories together—tranquil spaces, personalized service, and kid-friendly fun.

Experiences Around Us

Cibubur & East Jakarta highlights within convenient reach.

Trans Studio Cibubur

Trans Studio Cibubur

Discover the ultimate destination for fun and adventure.

SEE MORE
Trans Studio Mall Cibubur

Trans Studio Mall Cibubur

Your all-in-one lifestyle experience in Cibubur.

SEE MORE

Location

Trans Hotel Jakarta — Steps from Trans Studio Mall Cibubur.

Address

Trans Hotel Jakarta

Jl. Alternatif Cibubur, Cimanggis — Depok, Jawa Barat
Integrated with Trans Studio Mall Cibubur

Get Around
Trans Studio Mall1–3 min
Jkt Outer Ring Road8–12 min
Taman Mini Indonesia Indah18–25 min
Soekarno–Hatta (via toll)55–75 min
Live Map

Don’t Miss
Our Exclusive
Updates

Exclusive offers & latest stories from our hotel.

Promo
We use cookies for promotions, booking preferences, and spam protection. See our Privacy Policy.
We use cookies • Privacy Policy
` )).join(''); } function setMode(mode) { // state tombol (aktifkan semua dengan aria-pressed) modes.querySelectorAll('button[data-mode]').forEach(b => { const active = b.dataset.mode === mode; b.classList.toggle('active', active); b.setAttribute('aria-pressed', String(active)); }); // map & open link frame.src = SIMPLE; routeOpen.href = OPEN[mode]; renderTimes(mode); } // click handler utk SEMUA tombol mode modes?.addEventListener('click', (e) => { const btn = e.target.closest('button[data-mode]'); if (!btn) return; setMode(btn.dataset.mode); }); // copy address routeCopy?.addEventListener('click', (e) => { e.preventDefault(); const text = 'Trans Hotel Jakarta, Jl. Alternatif Cibubur, Cimanggis — Depok, Jawa Barat'; navigator.clipboard?.writeText(text); routeCopy.style.opacity = .6; setTimeout(() => routeCopy.style.opacity = 1, 250); }); // init default setMode('drive'); })(); const modes = document.getElementById('locModes'); const times = document.getElementById('locTimes'); const frame = document.getElementById('mapFrame'); const routeOpen = document.getElementById('routeOpen'); const routeCopy = document.getElementById('routeCopy'); // address & targets const hotelQ = encodeURIComponent('Trans Hotel Jakarta Cibubur'); const mallQ = encodeURIComponent('Trans Studio Mall Cibubur'); // embed URLs per mode (origin → destination = hotel ke mall; bisa kamu ganti defaultnya) const EMBED = { drive: `https://www.google.com/maps/embed/v1/directions?key=&origin=${hotelQ}&destination=${mallQ}&mode=driving`, transit: `https://www.google.com/maps/embed/v1/directions?key=&origin=${hotelQ}&destination=${mallQ}&mode=transit`, walk: `https://www.google.com/maps/embed/v1/directions?key=&origin=${hotelQ}&destination=${mallQ}&mode=walking` }; // fallback simple (tanpa API key) — tetap tampil jika embed/v1 diblok: const SIMPLE = `https://www.google.com/maps?q=${mallQ}&output=embed`; // open in maps link per mode const OPEN = { drive: `https://www.google.com/maps/dir/?api=1&origin=${hotelQ}&destination=${mallQ}&travelmode=driving`, transit: `https://www.google.com/maps/dir/?api=1&origin=${hotelQ}&destination=${mallQ}&travelmode=transit`, walk: `https://www.google.com/maps/dir/?api=1&origin=${hotelQ}&destination=${mallQ}&travelmode=walking` }; // estimasi per mode (copy ringan; sesuaikan jika mau) const EST = { drive: [ ['Trans Studio Mall', '1–3 min'], ['Jkt Outer Ring Road', '8–12 min'], ['Taman Mini Indonesia Indah', '18–25 min'], ['Soekarno–Hatta (via toll)', '55–75 min'], ], transit: [ ['Trans Studio Mall', '4–8 min'], ['Cawang (via LRT+angkot)', '35–50 min'], ['TMII (via bus/angkot)', '35–55 min'], ['Gambir (mixed)', '70–95 min'], ], walk: [ ['Trans Studio Mall', '3–6 min'], ['Nearest minimart', '5–8 min'], ['Neighborhood park', '10–15 min'], ['Cibubur Junction', '35–45 min'], ], }; // set mode function setMode(mode) { // active tab modes.querySelectorAll('button').forEach(b => b.classList.toggle('active', b.dataset.mode === mode)); // iframe src (try EMBED first; if keyless, some browsers still show blank → fallback) const url = EMBED[mode]; frame.src = url.includes('key=') ? SIMPLE : SIMPLE; // defaulting to SIMPLE to avoid API key requirement // open link routeOpen.href = OPEN[mode]; // times render times.innerHTML = EST[mode].map(([l, v]) => ( `
${l}${v}
` )).join(''); } modes?.addEventListener('click', e => { const btn = e.target.closest('button[data-mode]'); if (!btn) return; setMode(btn.dataset.mode); }); // copy address routeCopy?.addEventListener('click', (e) => { e.preventDefault(); const text = 'Trans Hotel Jakarta, Jl. Alternatif Cibubur, Cimanggis — Depok, Jawa Barat'; if (navigator.clipboard) { navigator.clipboard.writeText(text); } // kecilkan feedback halus pada link routeCopy.style.opacity = .6; setTimeout(() => routeCopy.style.opacity = 1, 300); }); // init setMode('drive'); })(); // Click handler for Offers document.addEventListener('click', (e) => { const btn = e.target.closest('#offers .btn'); if (!btn) return; const offer = btn.closest('.js-offer'); const code = offer?.dataset.promo || ''; const name = offer?.dataset.name || 'Offer'; if (btn.dataset.action === 'preview') { // You can swap this for your own modal; using alert as a minimal fallback alert(`${name} — Promo code: ${code}\nThe discount will be applied automatically at checkout.`); return; } if (btn.dataset.action === 'book') { // Change baseURL to match your booking engine const baseURL = '/booking'; // e.g., '/book-now' or an external URL const url = new URL(baseURL, window.location.origin); if (code) url.searchParams.set('promo', code); window.location.href = url.toString(); } }); /* ========= MODE ========= */ const DEV = false; // <-- ubah ke false untuk produksi /* ==== Cookie helpers (Elementor-safe) ==== */ (function () { if (window.__cookieHelpersInited) return; window.__cookieHelpersInited = true; function setCookie(name, value, maxAgeSeconds) { var cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value); if (typeof maxAgeSeconds === "number" && isFinite(maxAgeSeconds)) { cookie += "; Max-Age=" + Math.floor(maxAgeSeconds); } cookie += "; Path=/; SameSite=Lax"; if (location.protocol === "https:") cookie += "; Secure"; document.cookie = cookie; } function getCookie(name) { var target = encodeURIComponent(name) + "="; var parts = document.cookie ? document.cookie.split("; ") : []; for (var i = 0; i < parts.length; i++) { if (parts[i].indexOf(target) === 0) { return decodeURIComponent(parts[i].substring(target.length)); } } return null; } function deleteCookie(name) { document.cookie = encodeURIComponent(name) + "=; Max-Age=0; Path=/; SameSite=Lax" + (location.protocol === "https:" ? "; Secure" : ""); } // expose ke script lain yang sudah ada window.setCookie = window.setCookie || setCookie; window.getCookie = window.getCookie || getCookie; window.deleteCookie = window.deleteCookie || deleteCookie; })(); /* ==== Init kecil untuk cookiebar (anti double-bind) ==== */ (function () { var bar = document.getElementById("cookiebar"); if (!bar || bar.dataset.inited) return; bar.dataset.inited = "1"; var accept = document.getElementById("cookieAccept"); var decline = document.getElementById("cookieDecline"); // fallback show/hide kalau fungsi di script utama belum ter-muat function show() { if (bar) bar.style.display = "flex"; } function hide() { if (bar) bar.style.display = "none"; } // kalau di script utama ada flag DEV, hormati; kalau tidak ada, anggap false var DEV = (typeof window.DEV === "boolean") ? window.DEV : false; if (DEV) { show(); accept && accept.addEventListener("click", function () { console.log("[DEV] Accept clicked"); }); decline && decline.addEventListener("click", function () { console.log("[DEV] Decline clicked"); }); return; } // PROD: tampilkan hanya jika consent belum dipilih var consent = window.getCookie("consent"); if (consent !== "1" && consent !== "0") { show(); } else { hide(); } accept && accept.addEventListener("click", function () { window.setCookie("consent", "1", 3600 * 24 * 180); // 180 hari hide(); // tempatkan init tracker/GA kamu di sini jika diperlukan }); decline && decline.addEventListener("click", function () { window.setCookie("consent", "0", 3600 * 24 * 30); // 30 hari hide(); // pastikan tidak meload tracker saat consent=0 }); })(); /* ========= POLICY MODAL ========= */ const privModal = document.getElementById("privModal"); const policyTitle = document.getElementById("policyTitle"); const policyContent = document.getElementById("policyContent"); const privacyHTML = `

Trans Hotel Jakarta values you as our guest and recognizes that privacy is important to you. This Privacy Policy describes how we collect, use, and disclose information across our services.

Collection of Personal Information

We may collect Personal Information such as name, contact details, IDs, guest stay information, and preferences.

  • Online Services: reservations, purchases, chat, newsletter sign-up, surveys/promotions.
  • Offline: on-property interactions and phone reservations.
  • Other Sources: public databases, partners, travel agents, social media.

Use of Personal Information

  • Provide requested services and complete your stay.
  • Send administrative info, offers, and surveys.
  • Personalize your experience and improve our services.

Security

We employ reasonable measures to protect data. No system is 100% secure.

`; function openPolicy(title, html) { if (!privModal) return; if (title) policyTitle.textContent = title; if (html) policyContent.innerHTML = html; privModal.classList.add("open"); document.body.style.overflow = 'hidden'; privModal.querySelector('.panel')?.focus(); } function closePolicy() { privModal?.classList.remove("open"); document.body.style.overflow = ''; } function bindOpen(id, title, html) { const el = document.getElementById(id); el?.addEventListener("click", (e) => { e.preventDefault(); openPolicy(title, html); }); } bindOpen("privacyInline", "Privacy Policy", privacyHTML); bindOpen("privacyInline2", "Privacy Policy", privacyHTML); privModal?.addEventListener("click", (e) => { if (e.target.classList.contains('backdrop')) closePolicy(); }); document.getElementById("privClose")?.addEventListener("click", closePolicy); document.addEventListener('keydown', (e) => { if (e.key === 'Escape') closePolicy(); }); /* ========= COOKIE BAR ========= */ const cookiebar = document.getElementById("cookiebar"); const cookieAccept = document.getElementById("cookieAccept"); const cookieDecline = document.getElementById("cookieDecline"); function showCookiebar() { if (cookiebar) cookiebar.style.display = "flex"; } function hideCookiebar() { if (cookiebar) cookiebar.style.display = "none"; } if (DEV) { // DEV MODE: selalu tampil, tanpa tulis/hapus cookie, tidak auto-hide showCookiebar(); cookieAccept?.addEventListener("click", () => { console.log("[DEV] Accept clicked (no-op)."); }); cookieDecline?.addEventListener("click", () => { console.log("[DEV] Decline clicked (no-op)."); }); } else { // PROD MODE: tampil jika belum ada consent; sembunyikan setelah memilih const consent = getCookie("consent"); if (consent !== '1' && consent !== '0') { showCookiebar(); } else { hideCookiebar(); } cookieAccept?.addEventListener("click", () => { setCookie("consent", "1", 3600 * 24 * 180); // 180 hari hideCookiebar(); // TODO: inisialisasi tracker/GA di sini (jika perlu) }); cookieDecline?.addEventListener("click", () => { setCookie("consent", "0", 3600 * 24 * 30); // 30 hari hideCookiebar(); // TODO: pastikan tracker tidak diload saat consent=0 }); } /* ========= DEV HELPERS (opsional) ========= */ window.__consent = { get: () => getCookie('consent'), set: (v, days = 30) => setCookie('consent', String(v), 3600 * 24 * days), reset: () => deleteCookie('consent'), show: showCookiebar, hide: hideCookiebar }; /* ===================== LANGUAGE SWITCHER ======================*/ // loop semua instance (desktop/mobile) document.querySelectorAll(".lang-wrap").forEach((wrap) => { const btn = wrap.querySelector(".lang-btn"); const menu = wrap.querySelector(".lang-menu"); const code = btn?.querySelector(".code"); if (!btn || !menu || !code) return; let justOpenedTick = false; const open = () => { wrap.classList.add("open"); btn.setAttribute("aria-expanded", "true"); justOpenedTick = true; // biar handler global click nggak langsung nutup di tick yg sama setTimeout(() => (justOpenedTick = false), 0); }; const close = () => { wrap.classList.remove("open"); btn.setAttribute("aria-expanded", "false"); }; const toggle = () => (wrap.classList.contains("open") ? close() : open()); btn.addEventListener("click", (e) => { e.preventDefault(); e.stopPropagation(); // cegah handler luar menutup toggle(); }); menu.addEventListener("click", (e) => { const item = e.target.closest("[data-lang]"); if (!item) return; e.preventDefault(); code.textContent = item.getAttribute("data-lang") || code.textContent; close(); }); // tutup saat klik di luar document.addEventListener("click", (e) => { if (!wrap.classList.contains("open")) return; if (justOpenedTick) return; // hindari langsung nutup di klik yg sama if (!wrap.contains(e.target)) close(); }); // Esc untuk tutup document.addEventListener("keydown", (e) => { if (e.key === "Escape" && wrap.classList.contains("open")) close(); }); }); /* ===================== CTA + FORMS ======================*/ // document.getElementById("bookBtn")?.addEventListener("click", (e) => { // e.preventDefault(); // alert("Booking Engine Coming Soon"); // }); document.getElementById("newsForm")?.addEventListener("submit", (e) => { e.preventDefault(); const email = document.getElementById("newsEmail")?.value; if (email) { alert("Thanks for subscribing, " + email + "!"); e.target.reset(); } }); document.getElementById("reqForm")?.addEventListener("submit", (e) => { e.preventDefault(); alert( "Your request has been sent successfully. We’ll contact you within 24 hours." ); e.target.reset(); }); // counters // document.querySelectorAll(".counter button").forEach((btn) => { // btn.addEventListener("click", (e) => { // e.preventDefault(); // const targetId = btn.dataset.target; // const output = document.getElementById(targetId); // if (!output) return; // let val = parseInt(output.textContent, 10) || 0; // if (btn.classList.contains("plus")) val++; // if (btn.classList.contains("minus") && val > 1) val--; // output.textContent = val; // if (targetId === "roomsCount") { // const inEl = document.getElementById("roomsInput"); // if (inEl) inEl.value = val; // } // if (targetId === "guestsCount") { // const inEl = document.getElementById("guestsInput"); // if (inEl) inEl.value = val; // } // }); // }); /* ===================== TOP PROGRESS BAR ======================*/ const progress = document.getElementById("progress"); function updateProgress() { if (!progress) return; const scrollTop = window.scrollY || document.documentElement.scrollTop; const docH = document.documentElement.scrollHeight - window.innerHeight; const percent = docH > 0 ? (scrollTop / docH) * 100 : 0; progress.style.width = percent + "%"; } window.addEventListener("scroll", updateProgress, { passive: true }); window.addEventListener("resize", updateProgress); updateProgress(); /* ===== SUBSCRIBE behavior (minimal, elegan) ===== */ (function () { const form = document.getElementById('subForm'); const email = document.getElementById('subEmail'); const msg = document.getElementById('subMsg'); function show(text) { msg.textContent = text; msg.classList.add('show'); setTimeout(() => msg.classList.remove('show'), 4000); } form?.addEventListener('submit', (e) => { e.preventDefault(); const val = (email.value || '').trim(); const ok = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(val); if (!ok) { show('Please enter a valid e-mail address.'); email.focus(); return; } // TODO: kirim ke backend/newsletter provider show('Thanks! You are subscribed.'); form.reset(); }); })(); /* ===================== FOOTER YEAR ======================*/ const yearEl = document.getElementById('year'); if (yearEl) yearEl.textContent = String(new Date().getFullYear()); const dateField = document.querySelector(".booking-form .date-field"); const fieldGroups = document.querySelectorAll(".booking-form .field-group"); const bookingForm = document.querySelector(".booking-form"); if (window.innerWidth <= 768 && dateField) { // Saat tanggal diklik, tampilkan input lainnya dateField.addEventListener("change", () => { fieldGroups.forEach(el => el.style.display = "block"); }); // Tangkap klik tombol Book Now // bookingForm.addEventListener("submit", (e) => { // e.preventDefault(); // alert("Booking Engine Coming Soon"); // }); } // === FIX NAV SLIDE BEHAVIOR === const navContainer = document.querySelector('.nav-center'); const leftArrow = document.querySelector('.nav-arrow.left'); const rightArrow = document.querySelector('.nav-arrow.right'); // Jika elemen ditemukan if (navContainer && leftArrow && rightArrow) { // Pastikan mulai dari kiri navContainer.scrollLeft = 0; // Fungsi scroll halus const scrollAmount = 250; leftArrow.addEventListener('click', () => { navContainer.scrollBy({ left: -scrollAmount, behavior: 'smooth' }); }); rightArrow.addEventListener('click', () => { navContainer.scrollBy({ left: scrollAmount, behavior: 'smooth' }); }); // Perbarui status panah (opsional) const updateArrows = () => { leftArrow.style.opacity = navContainer.scrollLeft <= 0 ? 0.3 : 1; rightArrow.style.opacity = navContainer.scrollLeft + navContainer.clientWidth >= navContainer.scrollWidth ? 0.3 : 1; }; navContainer.addEventListener('scroll', updateArrows); updateArrows(); // jalankan di awal } });