Coming Soon

<?php

add_action( 'template_redirect', 'nellava_ultimate_flip_countdown' );

function nellava_ultimate_flip_countdown() {
    // KONFIGURASI: Set true agar Admin tetap melihat website asli
    $admin_bisa_akses = true; 

    if ( is_front_page() ) {
        if ( ! $admin_bisa_akses && current_user_can( 'manage_options' ) ) {
            return; 
        }
        ?>
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
            <title>Opening Soon - Nellava Fine Jewellery</title>
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
            <link href="https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;700&family=Montserrat:wght@300;400;500;600;700&display=swap" rel="stylesheet">
            
            <style>
                /* --- RESET & GLOBAL --- */
                * { box-sizing: border-box; }
                body, html { margin: 0; padding: 0; width: 100%; height: 100%; font-family: 'Montserrat', sans-serif; background: #89C4F4; overflow-x: hidden; }
                
                #nellava-wrapper {
                    position: fixed; top: 0; left: 0; width: 100%; 
                    min-height: 100vh;
                    /* Support untuk Mobile Browser Address Bar agar background full */
                    min-height: 100dvh; 
                    z-index: 99999;
                    display: flex; flex-direction: column; align-items: center; justify-content: center;
                    background: radial-gradient(circle at center, #9fcbf7 0%, #70a6d8 100%);
                    padding: 20px;
                }

                /* --- BACKGROUND ORBS --- */
                .orb {
                    position: absolute; border-radius: 50%; filter: blur(80px); z-index: -1;
                    width: 50vw; height: 50vw; top: 50%; transform: translateY(-50%); opacity: 0.8;
                }
                .orb-1 { left: -20%; background: radial-gradient(circle, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.4) 70%); animation: pulseLeft 6s infinite alternate; }
                .orb-2 { right: -20%; background: radial-gradient(circle, rgba(255,255,255,0.8) 0%, rgba(255,255,255,0.4) 70%); animation: pulseRight 7s infinite alternate; }

                @keyframes pulseLeft { 0% { transform: translateY(-50%) scale(1); opacity: 0.5; } 100% { transform: translateY(-50%) scale(1.1); opacity: 0.8; } }
                @keyframes pulseRight { 0% { transform: translateY(-50%) scale(1); opacity: 0.5; } 100% { transform: translateY(-50%) scale(1.2); opacity: 0.7; } }

                /* --- CONTENT STYLING --- */
                .content-box { position: relative; z-index: 10; text-align: center; width: 100%; max-width: 1000px; margin: 0 auto; }
                
                .logo-img { 
                    max-width: 200px; width: 50%; margin-bottom: 10px; 
                    filter: drop-shadow(0 2px 4px rgba(0,0,0,0.1)); 
                }
                
                /* Responsive Typography */
                h1 { 
                    font-family: 'Playfair Display', serif; 
                    font-size: clamp(2.5rem, 6vw, 5rem); 
                    color: #fff; margin: 0; line-height: 1.1;
                    text-shadow: 0 0 30px rgba(255,255,255,0.7); 
                }
                
                .sub-text { 
                    color: #1b2a4a; margin: 15px auto 40px; font-weight: 500; 
                    max-width: 600px; line-height: 1.5; font-size: clamp(0.9rem, 3vw, 1.1rem); 
                    opacity: 0.9; padding: 0 10px;
                }

                /* --- GLASS CARDS CONTAINER --- */
                .cards-row {
                    display: flex; justify-content: center; gap: 20px; 
                    margin-bottom: 50px; width: 100%; flex-wrap: wrap;
                }

                .glass-info-card {
                    flex: 1; min-width: 280px; max-width: 400px;
                    background: rgba(255, 255, 255, 0.45);
                    backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);
                    border: 1px solid rgba(255, 255, 255, 0.9);
                    border-radius: 20px; padding: 25px 20px;
                    display: flex; flex-direction: column; align-items: center; justify-content: center;
                    color: #1b2a4a; box-shadow: 0 15px 35px rgba(0,0,0,0.05);
                    transition: transform 0.3s ease;
                }
                .glass-info-card:hover { transform: translateY(-5px); }

                .info-label { text-transform: uppercase; font-size: 0.8rem; letter-spacing: 1px; font-weight: 600; margin-bottom: 8px; opacity: 0.8; }
                .info-value { font-family: 'Playfair Display', serif; font-size: 1.3rem; font-weight: 700; line-height: 1.3; }
                .info-sub-value { font-size: 0.95rem; margin-top: 4px; font-weight: 500; opacity: 0.9; }

                /* --- 3D FLIP CLOCK STYLES (Desktop Default) --- */
                .flip-clock { 
                    display: flex; justify-content: center; gap: 15px; perspective: 400px; 
                    width: 100%;
                }
                .flip-unit { display: flex; flex-direction: column; align-items: center; }
                
                .tick {
                    position: relative; font-family: 'Montserrat', sans-serif;
                    font-size: 4rem; font-weight: 700; color: #fff;
                    width: 90px; height: 110px;
                    background: #1e3a8a; border-radius: 10px;
                    line-height: 110px; text-align: center;
                    box-shadow: 0 10px 20px rgba(30, 58, 138, 0.3);
                }

                /* Garis tengah pemisah */
                .tick::after { content: ''; position: absolute; left: 0; top: 50%; width: 100%; height: 1px; background: rgba(0,0,0,0.15); z-index: 5; box-shadow: 0 1px 0 rgba(255,255,255,0.1); }
                
                .upper-card, .lower-card, .flip-card-front, .flip-card-back {
                    position: absolute; left: 0; width: 100%; height: 50%; overflow: hidden;
                    background-color: #1e3a8a; 
                    backface-visibility: hidden; -webkit-backface-visibility: hidden;
                }
                
                /* DESKTOP ALIGNMENT */
                .upper-card { top: 0; border-radius: 10px 10px 0 0; line-height: 110px; transform-origin: bottom; }
                .lower-card { bottom: 0; border-radius: 0 0 10px 10px; line-height: 0; transform-origin: top; border-top: 1px solid rgba(0,0,0,0.1); }
                .flip-card-front { top: 0; border-radius: 10px 10px 0 0; line-height: 110px; transform-origin: bottom; z-index: 2; }
                .flip-card-back { bottom: 0; border-radius: 0 0 10px 10px; line-height: 0; transform-origin: top; z-index: 1; transform: rotateX(180deg); }

                /* ANIMATION */
                .tick.flipping .flip-card-front { animation: flipDownFront 0.6s ease-in-out forwards; }
                .tick.flipping .flip-card-back { animation: flipDownBack 0.6s ease-in-out forwards; }

                @keyframes flipDownFront { 0% { transform: rotateX(0deg); } 100% { transform: rotateX(-180deg); } }
                @keyframes flipDownBack { 0% { transform: rotateX(180deg); } 100% { transform: rotateX(0deg); } }

                .label { font-size: 0.75rem; text-transform: uppercase; margin-top: 10px; color: #fff; letter-spacing: 1px; opacity: 0.9; font-weight: 600; }
                .colon { font-size: 3rem; color: #1e3a8a; margin-top: 10px; font-weight: bold; opacity: 0.8; }

                /* --- RESPONSIVE MEDIA QUERIES --- */

                /* MOBILE (Di bawah 600px) */
                @media (max-width: 600px) {
                    /* Layout Kartu Atas */
                    .cards-row { flex-direction: column; gap: 12px; margin-bottom: 30px; }
                    .glass-info-card { width: 100%; padding: 18px; }
                    
                    /* Background Orbs */
                    .orb { width: 80vw; height: 80vw; }
                    
                    /* --- PERBAIKAN FLIP CLOCK MOBILE --- */
                    .flip-clock { gap: 6px; }
                    
                    /* Ukuran Kotak Angka */
                    .tick { 
                        width: 17vw; max-width: 65px; 
                        height: 20vw; max-height: 75px; 
                        font-size: 9vw; /* Sedikit dikecilkan agar aman */
                        border-radius: 6px;
                        /* KUNCI PERBAIKAN: Flexbox centering daripada line-height manual */
                        display: flex; justify-content: center; align-items: center;
                        line-height: 0; /* Reset line height agar tidak pushing text */
                    }
                    
                    /* Titik Dua */
                    .colon { 
                        font-size: 1.5rem; margin-top: -15px; 
                        display: flex; align-items: center; 
                    }
                    
                    /* Label (Days/Hours/etc) */
                    .label { font-size: 0.6rem; margin-top: 6px; letter-spacing: 0.5px; }

                    /* INTERNAL CARD ALIGNMENT (Agar tidak terpotong) */
                    .upper-card, .flip-card-front { 
                        height: 100%; top: 0; bottom: auto;
                        border-radius: 6px 6px 0 0;
                        /* Trik CSS: Menampilkan setengah bagian atas font */
                        display: flex; justify-content: center; align-items: flex-end; 
                        overflow: hidden;
                        line-height: 0;
                    }
                    
                    /* Setengah bagian bawah font */
                    .lower-card, .flip-card-back { 
                        height: 50%; bottom: 0; top: auto;
                        border-radius: 0 0 6px 6px;
                        display: flex; justify-content: center; align-items: flex-start; 
                        overflow: hidden;
                        line-height: 0;
                    }

                    /* Text Alignment dalam Card */
                    /* Kita menggunakan transform untuk memastikan text tepat di tengah 'gabungan' dua kartu */
                    .upper-card::before, .flip-card-front::before,
                    .lower-card::before, .flip-card-back::before {
                        content: inherit; /* Ini akan diisi JS, tapi untuk layout kita atur parentnya saja */
                    }
                    
                    /* Koreksi posisi teks di dalam kartu potongan */
                    /* Karena container flex, kita tidak perlu line-height besar. 
                       Kita biarkan text mengalir normal, container overflow yang memotongnya. */
                    .tick { line-height: 20vw; display: block; } /* Kembali ke block untuk split logic */
                    
                    /* Paksa Line Height sama dengan Height Kontainer untuk Mobile */
                    .upper-card, .flip-card-front { line-height: 20vw; }
                    .lower-card, .flip-card-back { line-height: 0; }
                    
                    /* Override Font Size jika layar sangat kecil */
                    @media (max-width: 360px) {
                        .tick { font-size: 1.5rem; height: 50px; line-height: 50px; width: 45px; }
                        .upper-card, .flip-card-front { line-height: 50px; }
                    }
                }
            </style>
        </head>
        <body>
            <div id="nellava-wrapper">
                <div class="orb orb-1"></div>
                <div class="orb orb-2"></div>

                <div class="content-box">
                    <img class="logo-img" src="https://nellava.com//wp-content/uploads/2026/02/cropped-logo-fine-jewellery-768x207.png" alt="Nellava">
                
                    <h1>Opening Soon!</h1>
                    <p class="sub-text">A new destination for refined gold jewellery and bespoke craftsmanship is arriving soon.</p>

                    <div class="cards-row">
                        <div class="glass-info-card">
                            <div class="info-label"><i class="fas fa-map-marker-alt"></i> Location</div>
                            <div class="info-value">Boulevard Bukit Darmo Golf Office</div>
                            <div class="info-sub-value">Park B-2/23, Surabaya Barat</div>
                        </div>

                        <div class="glass-info-card">
                            <div class="info-label"><i class="far fa-calendar-alt"></i> Opening Date</div>
                            <div class="info-value">27 February 2026</div>
                        </div>
                    </div>
                    
                    <div class="flip-clock">
                        <div class="flip-unit">
                            <div class="tick" id="tick-days">
                                <div class="upper-card">00</div>
                                <div class="lower-card">00</div>
                                <div class="flip-card-front">00</div>
                                <div class="flip-card-back">00</div>
                            </div>
                            <span class="label">Days</span>
                        </div>
                        
                        <div class="colon">:</div>
                        
                        <div class="flip-unit">
                            <div class="tick" id="tick-hours">
                                <div class="upper-card">00</div>
                                <div class="lower-card">00</div>
                                <div class="flip-card-front">00</div>
                                <div class="flip-card-back">00</div>
                            </div>
                            <span class="label">Hours</span>
                        </div>
                        
                        <div class="colon">:</div>
                        
                        <div class="flip-unit">
                            <div class="tick" id="tick-minutes">
                                <div class="upper-card">00</div>
                                <div class="lower-card">00</div>
                                <div class="flip-card-front">00</div>
                                <div class="flip-card-back">00</div>
                            </div>
                            <span class="label">Minutes</span>
                        </div>
                        
                        <div class="colon">:</div>
                        
                        <div class="flip-unit">
                            <div class="tick" id="tick-seconds">
                                <div class="upper-card">00</div>
                                <div class="lower-card">00</div>
                                <div class="flip-card-front">00</div>
                                <div class="flip-card-back">00</div>
                            </div>
                            <span class="label">Seconds</span>
                        </div>
                    </div>

                </div>
            </div>

            <script>
            document.addEventListener('DOMContentLoaded', () => {
                const targetDate = new Date("2026-02-27T09:09:09+07:00").getTime();
                let prevDays='00', prevHours='00', prevMinutes='00', prevSeconds='00';

                function updateTime() {
                    const now = new Date().getTime();
                    const diff = targetDate - now;

                    if (diff < 0) return; 

                    const d = Math.floor(diff / (1000 * 60 * 60 * 24));
                    const h = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
                    const m = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
                    const s = Math.floor((diff % (1000 * 60)) / 1000);

                    const daysStr = d < 10 ? '0' + d : d;
                    const hoursStr = h < 10 ? '0' + h : h;
                    const minStr = m < 10 ? '0' + m : m;
                    const secStr = s < 10 ? '0' + s : s;

                    if (daysStr != prevDays) { flipCard('tick-days', daysStr); prevDays = daysStr; }
                    if (hoursStr != prevHours) { flipCard('tick-hours', hoursStr); prevHours = hoursStr; }
                    if (minStr != prevMinutes) { flipCard('tick-minutes', minStr); prevMinutes = minStr; }
                    if (secStr != prevSeconds) { flipCard('tick-seconds', secStr); prevSeconds = secStr; }
                }

                function flipCard(id, newValue) {
                    const el = document.getElementById(id);
                    if(!el) return;
                    
                    const upper = el.querySelector('.upper-card');
                    const lower = el.querySelector('.lower-card');
                    const front = el.querySelector('.flip-card-front');
                    const back = el.querySelector('.flip-card-back');

                    // Set back card to new value
                    back.innerText = newValue;
                    // Front keeps old value initially (from upper)
                    front.innerText = upper.innerText; 

                    // Remove class to reset animation, trigger reflow, add class back
                    el.classList.remove('flipping');
                    void el.offsetWidth; 
                    el.classList.add('flipping');

                    // Selesaikan update angka setelah animasi setengah jalan
                    setTimeout(() => {
                        upper.innerText = newValue; 
                        lower.innerText = newValue; 
                        front.innerText = newValue; 
                    }, 300); 
                }

                setInterval(updateTime, 1000);
                updateTime(); 
            });
            </script>
        </body>
        </html>
        <?php
        exit();
    }
}
Scroll to Top