Walimatul Khitan

Ghaisan Rabbani

07 . AGU . 2026

wks_01_list.webp-1.webp
Khitan Invitation
Ghaisan Rabbani
Kepada Yth.
Tamu Undangan

“Ya Allah, Terimalah khitan kami, Selamatkanlah urusan urusan kami, Sembuhkanlah dari sakit (karena khitan) ini. Bayarkanlah hutang-hutang kami, Jadikanlah (kenyataan) cita-cita kami, Lapangkanlah rezeki-rezeki kami dengan kemurahan-Mu, wahai zat yang maha memberi”

Assalamu’alaikum Warahmatullahi Wabarakatuh

Dengan memohon rahmat dan ridho Allah Subhanahu Wa Ta’ala, Insya Allah kami akan menyelenggarakan AcaraTasyakuran Khitan anak kami :

Ghaisan Rabbani

Putra bungsu dari

Bapak Yusuf Hidayat Dan Ibu Siti Mariani

Hitung Mundur Menuju Acara

Siang dan malam berganti begitu cepat, Kami nantikan kehadiran para keluarga dan sahabat : 

  • 00Hari
  • 00Jam
  • 00Menit
  • 00Detik

Waktu Acara

AHAD

AGUSTUS
0

2026

Pukul 09:00 WIB s.d Selesai

Bertempat di :

Grand Mutiara (Restorant & Ballroom)

Jl. Timor Raya, Pasir Panjang,

Kupang-NTT

Galeri Foto

Kirim Hadiah

Bagi Keluarga dan Sahabat
yang ingin mengirimkan hadiah,
silahkan mengirimkannya melalui :

Klik Disini

BNI

a.n Raisa Anggraini

7113 4567 5643

Salin

BCA

a.n Arief Muhammad

7113 4567 5643

Salin

ALAMAT PENGIRIMAN HADIAH FISIK
Jln. Gatot Subroto No. 109 Perum. Wijaya Santika, Rt/Rw 012/009 Kel. Sepatan Timur Kab. Tangerang

Ucapkan Sesuatu

Dengan penuh rasa syukur, kami mengharapkan Bapak/Ibu dan Sahabat sekalian untuk memberikan do’a dan ucapan melalui media ini. Semoga langkah putra kami selalu dipenuhi dengan cahaya dan berkah :

[comment-kit style="golden"]

,,

Ya Allah, berikanlah kesembuhan yang cepat baginya, kuatkanlah fisiknya, dan cerdaskanlah akalnya. Jadikanlah ia anak yang berbakti kepada orang tua, santun dalam berkata, dan mulia dalam berakhlak.

Lindungilah ia dari pergaulan yang salah dan jagalah ia dalam setiap langkah kehidupannya. Semoga ia tumbuh menjadi pribadi yang membawa cahaya bagi keluarga dan lingkungan sekitarnya.

Aamiin Yaa Mujibas Saailiin.”

Merupakan suatu kehormatan dan kebahagiaan bagi kami apabila Bapak/Ibu dan Sahabat sekalian berkenan hadir pada acara kami, Atas kehadiran nya kami ucapkan terima kasih

Wassalamu’alaikum Warahmatullahi Wabarakatuh

Ghaisan Rabbani

(function () { "use strict"; document.addEventListener("DOMContentLoaded", function () { const popupNav = document.querySelector(".popup-nav"); if (!popupNav) return; /* ===================================================================== */ /* 1. DETEKSI EDITOR ELEMENTOR */ /* Pastikan menu selalu tampil saat dalam mode edit Elementor. */ /* ===================================================================== */ const isEditor = document.body.classList.contains("elementor-editor-active"); if (isEditor) { popupNav.classList.remove("popup-hidden"); popupNav.classList.add("popup-visible"); return; // Hentikan eksekusi script lebih lanjut di mode editor } /* ===================================================================== */ /* 2. VARIABEL KONFIGURASI */ /* ===================================================================== */ const INIT_DELAY = 800; // Penundaan sebelum listener aktif (ms) const SCROLL_THRESHOLD = 120; // Jarak scroll minimal pemicu hitungan const SCROLL_OFFSET = window.innerHeight / 2; // Offset deteksi bagian aktif let scrollCount = 0; let lastScrollY = window.scrollY; let popupShown = false; // Referensi Elemen DOM const menuMap = { home: document.getElementById("menu-home"), couple: document.getElementById("menu-couple"), date: document.getElementById("menu-date"), gift: document.getElementById("menu-gift"), wishes: document.getElementById("menu-wishes"), }; const sectionPositions = {}; /* ===================================================================== */ /* 3. FUNGSI PEMBANTU (HELPER FUNCTIONS) */ /* ===================================================================== */ /** * Menyimpan posisi atas setiap section untuk menghindari layout thrashing */ function updateSectionPositions() { for (const id in menuMap) { const section = document.getElementById(id); if (section) { sectionPositions[id] = section.offsetTop; } } } /** * Mengganti class 'active' pada item menu */ function updateActiveMenu(activeId) { for (const id in menuMap) { if (menuMap[id]) { menuMap[id].classList.remove("active"); } } if (activeId && menuMap[activeId]) { menuMap[activeId].classList.add("active"); } } /** * Menghitung section mana yang sedang terlihat di layar */ function detectActiveSection() { const scrollPosition = window.scrollY + SCROLL_OFFSET; let currentSection = null; for (const id in sectionPositions) { if (scrollPosition >= sectionPositions[id]) { currentSection = id; } } updateActiveMenu(currentSection); } /** * Penangan Scroll Utama: Logika untuk menampilkan popup & update status */ function handleScroll() { const currentScroll = window.scrollY; const delta = Math.abs(currentScroll - lastScrollY); // Logika: User harus scroll jumlah tertentu 2x untuk memicu popup if (!popupShown && delta > SCROLL_THRESHOLD) { scrollCount++; lastScrollY = currentScroll; if (scrollCount >= 2) { popupNav.classList.remove("popup-hidden"); popupNav.classList.add("popup-visible"); popupShown = true; } } if (popupShown) { detectActiveSection(); } } /** * Fungsi Throttle untuk meningkatkan performa saat scroll */ function throttle(func, limit) { let inThrottle; return function () { if (!inThrottle) { func.apply(this, arguments); inThrottle = true; setTimeout(() => (inThrottle = false), limit); } }; } /* ===================================================================== */ /* 4. INISIALISASI */ /* ===================================================================== */ setTimeout(function () { updateSectionPositions(); // Pasang listener scroll dengan throttle window.addEventListener( "scroll", throttle(handleScroll, 100), { passive: true } ); // Hitung ulang posisi saat ukuran window berubah window.addEventListener( "resize", updateSectionPositions, { passive: true } ); }, INIT_DELAY); }); })();
/* ----------------------------------------------------------------------- */ /* 1. STATE AWAL GLOBAL (Default: Zoom Out & Transparan) */ /* ----------------------------------------------------------------------- */ [id^="sequence"] { transform: scale(1.5); /* Default untuk seq 1-5 */ opacity: 0; transition: transform 1.5s ease, opacity 1.5s ease !important; pointer-events: none; will-change: transform, opacity; } /* ----------------------------------------------------------------------- */ /* [REVISI] KHUSUS SEQUENCE 6: FADE UP (MUNCUL DARI BAWAH) */ /* ----------------------------------------------------------------------- */ /* Override transform default (scale) menjadi translateY (posisi bawah) */ #sequence6 { transform: translateY(100px) !important; /* Opacity tetap 0 mewarisi rule di atas */ } /* ----------------------------------------------------------------------- */ /* 2. STATE AKHIR GLOBAL (Aktif/Muncul) */ /* ----------------------------------------------------------------------- */ .mc-active { transform: scale(1) !important; /* Default reset scale */ opacity: 1 !important; pointer-events: auto; } /* [REVISI] KHUSUS SEQUENCE 6 ACTIVE */ /* Saat aktif, kembalikan posisi Y ke 0 (posisi asli) */ #sequence6.mc-active { transform: translateY(0) !important; } /* ----------------------------------------------------------------------- */ /* 3. UTILITAS: SCROLL LOCK (KUNCI GULIR) */ /* ----------------------------------------------------------------------- */ body.no-scroll { overflow: hidden !important; height: 100vh !important; } /* ----------------------------------------------------------------------- */ /* 4. KOMPATIBILITAS EDITOR ELEMENTOR */ /* ----------------------------------------------------------------------- */ .elementor-editor-active [id^="sequence"] { opacity: 1 !important; transform: none !important; visibility: visible !important; } .elementor-editor-active body.no-scroll { overflow: visible !important; height: auto !important; } (function () { "use strict"; /* ===================================================================== */ /* [REVISI] 0. PAKSA RESET SCROLL (KHUSUS DESKTOP > 1024px) */ /* ===================================================================== */ if (window.innerWidth >= 1024) { if ('scrollRestoration' in history) { history.scrollRestoration = 'manual'; } window.scrollTo(0, 0); window.onbeforeunload = function () { window.scrollTo(0, 0); }; } /* ===================================================================== */ /* A. KONFIGURASI PENGGUNA (USER CONFIG) */ /* ===================================================================== */ const USER_CONFIG = { containerID: "home", btnClass: "wdp-button-wrapper", videoFit: "cover", // Waktu kunci scroll dalam milidetik (5 Detik) lockDuration: 5000, sequences: { sequence1: { time: 11.00 }, sequence2: { time: 11.75 }, sequence3: { time: 12.50 }, sequence4: { time: 13.25 }, sequence5: { time: 14.00 }, sequence6: { time: 14.75 }, }, }; /* ===================================================================== */ /* B. VARIABEL SISTEM */ /* ===================================================================== */ let video, started = false, shown = {}, raf, frozen = false; /* ===================================================================== */ /* C. FUNGSI INISIALISASI (SETUP) */ /* ===================================================================== */ function init() { // Reset container scroll (Hanya Desktop) if (window.innerWidth >= 1024) { const section = document.getElementById(USER_CONFIG.containerID); if (section && section.parentElement) { section.parentElement.scrollTop = 0; } } // Setup Video const section = document.getElementById(USER_CONFIG.containerID); if(!section) { console.warn('Motion Control: Container ID tidak ditemukan.'); return; } video = section.querySelector("video"); if (!video) { console.warn("Motion Control: Video background tidak ditemukan."); return; } video.pause(); video.currentTime = 0; video.muted = true; video.playsInline = true; video.removeAttribute("autoplay"); video.removeAttribute("loop"); // LOGIKA SCROLL LOCK INITIAL const isEditor = document.body.classList.contains("elementor-editor-active"); if (!isEditor) { document.body.classList.add("no-scroll"); } // Setup CSS Video if (USER_CONFIG.videoFit) { video.style.objectFit = USER_CONFIG.videoFit; if (USER_CONFIG.videoFit === "contain") { video.style.width = "100%"; video.style.height = "100%"; video.style.position = "absolute"; video.style.top = "50%"; video.style.left = "50%"; video.style.transform = "translate(-50%, -50%)"; } } // Setup Tombol const btn = document.querySelector("." + USER_CONFIG.btnClass); if (btn) { btn.addEventListener("click", start, { once: true }); btn.style.cursor = "pointer"; } raf = requestAnimationFrame(tick); } /* ===================================================================== */ /* D. FUNGSI LOGIKA UTAMA */ /* ===================================================================== */ function start() { if (started) return; started = true; // 1. Play Video video.play().catch((err) => console.error("Error Play:", err)); // 2. Timer Unlock Scroll (5 Detik dari klik) setTimeout(function() { document.body.classList.remove("no-scroll"); }, USER_CONFIG.lockDuration); } function show(id) { if (shown[id]) return; const el = document.getElementById(id); if (!el) return; el.classList.add("mc-active"); shown[id] = true; } function tick() { if (!video || frozen) return; const t = video.currentTime; const d = video.duration || 0; // 1. Cek Sequence Object.keys(USER_CONFIG.sequences).forEach((id) => { const cfg = USER_CONFIG.sequences[id]; if (t >= cfg.time) show(id); }); // 2. Logika Freeze Akhir Video if (d && t >= d - 0.12) { frozen = true; video.pause(); video.currentTime = d - 0.12; // Tampilkan semua sequence (fallback safety) Object.keys(USER_CONFIG.sequences).forEach((id) => show(id)); cancelAnimationFrame(raf); return; } raf = requestAnimationFrame(tick); } /* ===================================================================== */ /* E. EKSEKUSI */ /* ===================================================================== */ if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", init); } else { init(); } })();
WDP Auto Scroll Navigation (WDPASN) :root { --wdpasn-bg-color: #fdf6f2; --wdpasn-scroll-btn-bg: #C89556; --wdpasn-scroll-btn-hover: #8E5D20; --wdpasn-tooltip-bg: rgba(0, 0, 0, 0.7); --wdpasn-tooltip-text: #ffffff; --wdpasn-danger: rgba(255, 87, 87, 0.9); --wdpasn-radius: 6px; --wdpasn-font: sans-serif; } body { height: 2000px; background: var(--wdpasn-bg-color); scroll-behavior: smooth; font-family: var(--wdpasn-font); } #wdpasn-scrollButton { width: 40px; height: 35px; background-color: var(--wdpasn-scroll-btn-bg); color: white; border: none; border-radius: var(--wdpasn-radius); cursor: pointer; display: flex; align-items: center; justify-content: center; font-size: 15px; transition: background-color 0.3s, transform 0.3s; position: fixed; bottom: 60px; right: 10px; z-index: 10; } #wdpasn-scrollButton:hover { background-color: var(--wdpasn-scroll-btn-hover); } .wdpasn-tooltip { background-color: var(--wdpasn-tooltip-bg); color: var(--wdpasn-tooltip-text); padding: 5px 10px; border-radius: 5px; font-size: 12px; opacity: 0; transition: opacity 0.3s; pointer-events: none; position: fixed; bottom: 160px; right: 25px; z-index: 30; } #wdpasn-scrollButton:hover + .wdpasn-tooltip { opacity: 1; } #wdpasn-scrollButton.stop { transform: scale(1.1) rotate(180deg); } #speedControlContainer { position: fixed; bottom: 170px; right: 15px; background: white; border-radius: 10px; padding: 8px 12px; box-shadow: 0 2px 6px rgba(0,0,0,0.15); font-size: 12px; z-index: 20; display: none; pointer-events: auto; } #speedSlider { width: 75px; } #bottomTooltip { background-color: var(--wdpasn-danger); color: white; padding: 6px 12px; border-radius: 5px; font-size: 12px; position: fixed; right: 25px; bottom: 195px; z-index: 40; opacity: 0; transition: opacity 0.3s; display: none; } #bottomTooltip.show { display: block; opacity: 1; }
Start Auto Scroll

Anda di bagian akhir halaman!
// === CONFIGURABLE OPTIONS === const SCROLL_STEP_PX = 4; const SCROLL_SPEED_BASE = 40; const SHOW_SPEED_SLIDER = true; document.addEventListener("DOMContentLoaded", function () { const scrollButton = document.getElementById("wdpasn-scrollButton"); const tooltip = document.getElementById("wdpasn-tooltip"); const speedSlider = document.getElementById("speedSlider"); const speedContainer = document.getElementById("speedControlContainer"); const bottomTooltip = document.getElementById("bottomTooltip"); function isIOSDevice() { return /iPad|iPhone|iPod/.test(navigator.userAgent) || (navigator.userAgent.includes("Macintosh") && navigator.maxTouchPoints > 1); } if (isIOSDevice()) { scrollButton.style.display = "none"; tooltip.style.display = "none"; speedContainer.style.display = "none"; bottomTooltip.style.display = "none"; console.log("Auto-scroll dinonaktifkan di perangkat iOS"); return; } if (!SHOW_SPEED_SLIDER) { speedContainer.style.display = "none"; } let scrollActive = false; let animationId = null; function showBottomTooltip() { bottomTooltip.classList.add("show"); setTimeout(() => { bottomTooltip.classList.remove("show"); bottomTooltip.style.display = "none"; }, 2000); } function autoScroll() { if (!scrollActive) return; if ((window.innerHeight + window.scrollY) >= document.body.scrollHeight) { stopScroll(); return; } let scrollStep = SCROLL_STEP_PX; let delay = SCROLL_SPEED_BASE; if (SHOW_SPEED_SLIDER) { const value = parseInt(speedSlider.value); scrollStep = value / 3; delay = Math.max(5, 60 - value); } window.scrollBy(0, scrollStep); setTimeout(() => { animationId = requestAnimationFrame(autoScroll); }, delay); } function startScroll() { scrollActive = true; scrollButton.innerHTML = ''; tooltip.innerText = 'Stop Scrolling'; scrollButton.classList.add('stop'); if (SHOW_SPEED_SLIDER) speedContainer.style.display = "block"; autoScroll(); } function stopScroll() { scrollActive = false; cancelAnimationFrame(animationId); scrollButton.innerHTML = ''; tooltip.innerText = 'Start Auto Scroll'; scrollButton.classList.remove('stop'); speedContainer.style.display = "none"; } scrollButton.addEventListener("click", () => { const atBottom = (window.innerHeight + window.scrollY) >= document.body.scrollHeight; if (!scrollActive && atBottom) { bottomTooltip.style.display = "block"; showBottomTooltip(); return; } scrollActive ? stopScroll() : startScroll(); }); });
Post Views: 24