0
Fork 0
mirror of https://github.com/blader/humanizer.git synced 2026-09-27 18:19:51 +00:00

Secret #289

Open
opened 2026-09-18 16:59:24 +00:00 by bdimtiaz1997-max · 0 comments
bdimtiaz1997-max commented 2026-09-18 16:59:24 +00:00 (Migrated from github.com)
<html lang="en"> <head>
<style>
    * {
        font-family: 'Fredoka', 'Quicksand', sans-serif;
        user-select: none;
        -webkit-user-select: none;
    }

    .scary-font {
        font-family: 'Creepster', cursive;
    }

    body {
        background: linear-gradient(135deg, #0F172A 0%, #1E1B4B 50%, #020617 100%);
        transition: background 1.2s ease-in-out;
        min-height: 100vh;
        overflow-x: hidden;
    }

    body.cute-mode {
        background: linear-gradient(135deg, #FFF0F5 0%, #E6E6FA 50%, #E0F8F7 100%);
    }

    @keyframes floatSlow {
        0%, 100% { transform: translateY(0px) rotate(0deg); }
        50% { transform: translateY(-12px) rotate(5deg); }
    }

    @keyframes pulseGlow {
        0%, 100% { transform: scale(1); box-shadow: 0 10px 25px -5px rgba(244, 114, 182, 0.4); }
        50% { transform: scale(1.06); box-shadow: 0 20px 35px -5px rgba(244, 114, 182, 0.7); }
    }

    @keyframes glitchRed {
        0% { transform: translate(0); filter: hue-rotate(0deg); }
        20% { transform: translate(-5px, 5px); filter: hue-rotate(90deg); }
        40% { transform: translate(-5px, -5px); }
        60% { transform: translate(5px, 5px); }
        80% { transform: translate(5px, -5px); }
        100% { transform: translate(0); filter: hue-rotate(0deg); }
    }

    @keyframes wiggleDoodle {
        0%, 100% { transform: rotate(-3deg); }
        50% { transform: rotate(3deg); }
    }

    .animate-float { animation: floatSlow 4s ease-in-out infinite; }
    .animate-pulse-glow { animation: pulseGlow 2s ease-in-out infinite; }
    .animate-glitch { animation: glitchRed 0.2s infinite; }
    .animate-doodle { animation: wiggleDoodle 3s ease-in-out infinite; }

    .glass-card-dark {
        background: rgba(15, 23, 42, 0.88);
        backdrop-filter: blur(18px);
        border: 2px solid rgba(239, 68, 68, 0.35);
        box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8);
    }

    .glass-card-cute {
        background: rgba(255, 255, 255, 0.94);
        backdrop-filter: blur(18px);
        border: 3px solid rgba(255, 255, 255, 0.9);
        box-shadow: 0 20px 45px rgba(219, 112, 147, 0.2);
    }

    #no-btn {
        transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1);
    }

    .toast-msg {
        animation: fadeInOut 1.5s forwards;
    }

    @keyframes fadeInOut {
        0% { opacity: 0; transform: translateY(10px) scale(0.9); }
        20% { opacity: 1; transform: translateY(0) scale(1); }
        80% { opacity: 1; transform: translateY(0) scale(1); }
        100% { opacity: 0; transform: translateY(-10px) scale(0.9); }
    }
</style>
</head>
<!-- Top Progress Bar -->
<div class="fixed top-3 left-1/2 -translate-x-1/2 z-50 w-11/12 max-w-md bg-black/40 backdrop-blur-md rounded-full p-1.5 border border-white/20 flex items-center justify-between gap-3 shadow-lg">
    <div class="w-full bg-gray-700/60 rounded-full h-2.5 overflow-hidden ml-2">
        <div id="progress-bar-fill" class="bg-gradient-to-r from-pink-500 to-purple-500 h-2.5 rounded-full transition-all duration-500" style="width: 7.6%;"></div>
    </div>
    <span id="progress-text" class="text-[11px] font-extrabold text-pink-300 font-mono pr-2 whitespace-nowrap">1 / 13</span>
</div>

<!-- Cute Background Background Decor (Revealed in Stage 5) -->
<div id="cute-bg-decor" class="absolute inset-0 pointer-events-none overflow-hidden z-0 opacity-0 transition-opacity duration-1000">
    <div class="absolute top-12 left-6 text-4xl animate-float opacity-70" style="animation-delay: 0s;">🌸</div>
    <div class="absolute top-1/4 right-8 text-3xl animate-float opacity-70" style="animation-delay: 1s;">✨</div>
    <div class="absolute bottom-16 left-12 text-4xl animate-float opacity-70" style="animation-delay: 2s;">🍃</div>
    <div class="absolute bottom-1/3 right-6 text-3xl animate-float opacity-70" style="animation-delay: 1.5s;">🧸</div>
    <div class="absolute top-1/2 left-4 text-3xl animate-float opacity-60" style="animation-delay: 2.5s;">☁️</div>
    <div class="absolute bottom-6 right-1/4 text-4xl animate-float opacity-70" style="animation-delay: 0.8s;">💖</div>
</div>

<!-- Main Interactive Card Container -->
<main class="w-full max-w-lg z-10 my-auto pt-8">

    <!-- STAGE 1: THE SPOOKY INTRO -->
    <section id="stage-1" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center transition-all duration-500 transform scale-100">
        <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-red-950/70 rounded-full border-2 border-red-800 animate-pulse">
            <span class="text-4xl">🤫</span>
        </div>
        
        <span class="inline-block px-3.5 py-1 bg-red-900/50 text-red-400 rounded-full text-xs font-bold uppercase tracking-widest mb-3 border border-red-800">
            Confidential Message
        </span>
        
        <h1 class="text-2xl sm:text-3xl font-bold text-red-500 mb-3 tracking-wide">
            Dip... we need to talk. 🤐
        </h1>
        
        <p class="text-gray-300 text-sm mb-6 leading-relaxed font-mono">
            Are you alone right now? Please make sure nobody is standing behind you...
        </p>

        <button onclick="goToStage(2, 'drone')" class="w-full py-4 px-6 bg-gradient-to-r from-red-800 to-red-950 hover:from-red-700 hover:to-red-900 text-red-100 font-bold text-base rounded-2xl border border-red-700 shadow-xl transition transform active:scale-95 flex items-center justify-center gap-2">
            <span>I'm alone... what happened?! 😨</span>
        </button>
    </section>

    <!-- STAGE 2: DRAMA & JEALOUSY SETUP -->
    <section id="stage-2" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-purple-950/70 rounded-full border-2 border-purple-800">
            <span class="text-4xl">👀</span>
        </div>

        <h2 class="text-2xl font-bold text-purple-400 mb-3 font-mono">
            I've been trying to tell you...
        </h2>

        <p class="text-gray-300 text-sm mb-6 leading-relaxed">
            Dip, there’s something serious. I’ve been trying to reach you for days because... <span class="text-red-400 font-bold underline">there is another girl!</span> 😳
        </p>

        <button onclick="goToStage(3, 'drone')" class="w-full py-4 px-6 bg-purple-900 hover:bg-purple-800 text-purple-100 font-bold text-base rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2">
            <span>Wait, WHAT?! Another girl?! 😱</span>
        </button>
    </section>

    <!-- STAGE 3: THE OFFICE DRAMA ESCALATION -->
    <section id="stage-3" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-amber-950/70 rounded-full border-2 border-amber-800 animate-bounce">
            <span class="text-4xl">🏢</span>
        </div>

        <h2 class="text-2xl font-bold text-amber-400 mb-3 font-mono">
            She's Watching at Your Office...
        </h2>

        <p class="text-gray-300 text-sm mb-6 leading-relaxed">
            Yes! She’s at your office... watching your attendance register every day, checking your leave balance... and even HR is getting involved! 📋💼
        </p>

        <button onclick="goToStage(4, 'drone')" class="w-full py-4 px-6 bg-amber-900 hover:bg-amber-800 text-amber-100 font-bold text-base rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2">
            <span>HR is involved?! What did she do?! 😰</span>
        </button>
    </section>

    <!-- STAGE 4: CRYPTIC WARNING -->
    <section id="stage-4" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-red-950/80 rounded-full border-2 border-red-600 animate-pulse">
            <span class="text-4xl">📩</span>
        </div>

        <h2 class="text-2xl font-bold text-red-400 mb-3 font-mono">
            She Sent an Urgent Email...
        </h2>

        <p class="text-gray-300 text-sm mb-6 leading-relaxed">
            She sent an email regarding <span class="text-amber-300 font-bold underline">OCTOBER 24TH</span>... An unavoidable calendar anomaly is coming right towards you!
        </p>

        <button onclick="triggerJumpscare()" class="w-full py-4 px-6 bg-red-800 hover:bg-red-700 text-red-100 font-bold text-base rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2">
            <span>Open Urgent Email Notification! 🔍</span>
        </button>
    </section>

    <!-- STAGE 5: HORROR JUMPSCARE PRANK -->
    <section id="stage-5" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0 relative overflow-hidden">
        <div id="jumpscare-box" class="py-4">
            <div class="text-7xl mb-3 animate-glitch">👻</div>
            <h2 class="scary-font text-5xl text-red-500 mb-2 tracking-widest animate-glitch">BOO!! 😈</h2>
            <p class="text-red-300 font-bold text-lg mb-4">JUST KIDDING DIP!! 😜</p>
            <p class="text-gray-300 text-xs mb-6 leading-relaxed">
                There's no other girl or HR drama! It's just me teasing you! Let's switch to cute mode right now...💖
            </p>
        </div>

        <button onclick="switchToCuteMode()" class="w-full py-4 px-6 bg-pink-500 hover:bg-pink-600 text-white font-bold text-lg rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2">
            <span>Phew! You scared me so bad! 😤💖</span>
        </button>
    </section>

    <!-- STAGE 6: OFFICE CALENDAR REALIZATION -->
    <section id="stage-6" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <span class="inline-block px-3 py-1 bg-purple-100 text-purple-600 rounded-full text-xs font-bold uppercase tracking-wider mb-2">
            Office Math Realization 📅
        </span>
        <h2 class="text-2xl font-bold text-gray-800 mb-2">Dip, look at October Calendar:</h2>
        <p class="text-xs text-gray-500 mb-4">Here is how we steal 3 full days of freedom:</p>

        <div class="bg-purple-50/80 border border-purple-200 rounded-2xl p-4 mb-5 text-left space-y-2.5">
            <div class="flex items-center justify-between text-sm">
                <span class="font-bold text-gray-700">🗓️ Oct 24 (Sat):</span>
                <span class="px-2.5 py-0.5 bg-emerald-100 text-emerald-700 font-extrabold rounded-full text-xs">OFFICE OFF 🎉</span>
            </div>
            <div class="flex items-center justify-between text-sm">
                <span class="font-bold text-gray-700">💼 Oct 25 (Sun):</span>
                <span class="px-2.5 py-0.5 bg-rose-100 text-rose-600 font-extrabold rounded-full text-xs">LEAVE #1 NEEDED 📝</span>
            </div>
            <div class="flex items-center justify-between text-sm">
                <span class="font-bold text-gray-700">💼 Oct 26 (Mon):</span>
                <span class="px-2.5 py-0.5 bg-rose-100 text-rose-600 font-extrabold rounded-full text-xs">LEAVE #2 NEEDED 📝</span>
            </div>
        </div>

        <div class="bg-pink-50 border border-pink-200 rounded-2xl p-3 mb-5 text-xs text-pink-700 font-semibold">
            ✨ Take just <strong>2 days leave</strong> (25th & 26th) to unlock <strong>2 nights & 3 full days</strong> of getaway!
        </div>

        <button onclick="goToStage(7, 'pop')" class="w-full py-3.5 px-6 bg-gradient-to-r from-purple-500 to-pink-500 text-white font-extrabold rounded-2xl shadow-md transition transform active:scale-95 text-base">
            Understood! Calculate Riddle ➡️
        </button>
    </section>

    <!-- STAGE 7: INTERACTIVE MATH RIDDLE -->
    <section id="stage-7" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <span class="inline-block px-3 py-1 bg-pink-100 text-pink-600 rounded-full text-xs font-bold uppercase tracking-wider mb-2">
            Getaway Equation 🧩
        </span>
        <h2 class="text-2xl font-bold text-gray-800 mb-2">Dip, solve this formula:</h2>
        
        <div class="bg-pink-50 border border-pink-200 rounded-2xl p-3.5 mb-5 font-bold text-pink-800 text-sm leading-relaxed">
            2 Nights 🌙 + 3 Days ☀️ + Dip 👸 + Me 🙋‍♂️ - 2 Leave Days 📝 = ???
        </div>

        <div class="space-y-2.5">
            <button onclick="wrongAnswerRiddle(this)" class="w-full py-3 px-4 bg-white hover:bg-red-50 border-2 border-gray-200 rounded-2xl font-bold text-gray-700 text-xs sm:text-sm transition">
                A) Overtime at Office 😴
            </button>
            <button onclick="wrongAnswerRiddle(this)" class="w-full py-3 px-4 bg-white hover:bg-red-50 border-2 border-gray-200 rounded-2xl font-bold text-gray-700 text-xs sm:text-sm transition">
                B) Anxious Emailing HR 📧
            </button>
            <button onclick="goToStage(8, 'pop')" class="w-full py-3.5 px-4 bg-gradient-to-r from-pink-400 to-purple-400 text-white font-extrabold rounded-2xl shadow-md transition transform active:scale-95 text-sm sm:text-base border-2 border-pink-300">
                C) Magical Shigoal Getaway Mission! 🌲✨
            </button>
        </div>
        <p id="riddle-error" class="text-xs text-red-500 mt-3 font-bold opacity-0">Wrong answer! Try again Dip!</p>
    </section>

    <!-- STAGE 8: THE FOOD & VIBE BRIBE -->
    <section id="stage-8" class="glass-card-cute rounded-3xl p-6 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <span class="inline-block px-3 py-1 bg-amber-100 text-amber-700 rounded-full text-xs font-bold uppercase tracking-wider mb-2">
            VIP Bribe Time 🍫☕
        </span>
        <h2 class="text-2xl font-bold text-gray-800 mb-1">Dip's Getaway Treats</h2>
        <p class="text-xs text-gray-500 mb-4">Tap ALL 4 treats to unlock the luggage challenge!</p>

        <div class="grid grid-cols-2 gap-3 mb-5">
            <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm">
                <span class="text-3xl">☕</span>
                <span class="text-xs font-bold text-gray-700">Hot Chocolates</span>
            </button>
            <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm">
                <span class="text-3xl">🌅</span>
                <span class="text-xs font-bold text-gray-700">Sunset Rooftop</span>
            </button>
            <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm">
                <span class="text-3xl">🧸</span>
                <span class="text-xs font-bold text-gray-700">Cozy Blankets</span>
            </button>
            <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm">
                <span class="text-3xl">🗣️</span>
                <span class="text-xs font-bold text-gray-700">Unlimited Gossip</span>
            </button>
        </div>

        <button id="bribe-next-btn" onclick="goToStage(9, 'pop')" disabled class="w-full py-3.5 px-6 bg-gray-200 text-gray-400 font-bold rounded-2xl transition cursor-not-allowed">
            Collect All Treats (0/4) ✨
        </button>
    </section>

    <!-- STAGE 9: EXTENDED LUGGAGE CHALLENGE (15 ITEMS TOTAL, STRICT 5 SELECTION) -->
    <section id="stage-9" class="glass-card-cute rounded-3xl p-5 sm:p-6 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <div class="flex items-center justify-between mb-2">
            <span class="text-xs font-bold bg-pink-100 text-pink-600 px-3 py-1 rounded-full">Dip's Luggage</span>
            <span id="pack-counter" class="text-xs font-bold text-purple-600 bg-purple-50 px-3 py-1 rounded-full border border-purple-200">
                Selected: 0 / 5 🧳
            </span>
        </div>

        <h2 class="text-2xl font-bold text-gray-800 mb-1">Pack Exactly 5 Items!</h2>
        <p id="pack-instruction" class="text-xs text-pink-600 font-bold mb-3">You MUST pick EXACTLY 5 essential items from 15 below:</p>

        <!-- Suitcase container -->
        <div id="suitcase" class="bg-pink-50/80 border-2 border-dashed border-pink-300 rounded-2xl p-2.5 mb-3.5 min-h-[75px] flex flex-wrap items-center justify-center gap-1.5">
            <span id="suitcase-empty" class="text-xs text-pink-400 font-medium">🧳 Luggage empty... tap items to pack!</span>
        </div>

        <!-- 15 Packing Items Grid -->
        <div class="grid grid-cols-3 gap-2 mb-4 max-h-[220px] overflow-y-auto pr-1">
            <button onclick="togglePackItem(this, '👙', 'Bikini')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">👙</span>
                <span class="text-[10px] font-bold text-gray-700">Bikini</span>
            </button>
            <button onclick="togglePackItem(this, '🥻', 'Saree')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🥻</span>
                <span class="text-[10px] font-bold text-gray-700">Saree</span>
            </button>
            <button onclick="togglePackItem(this, '💄', 'Lipstick')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">💄</span>
                <span class="text-[10px] font-bold text-gray-700">Lipstick</span>
            </button>
            <button onclick="togglePackItem(this, '💇‍♀️', 'Round Comb')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">💇‍♀️</span>
                <span class="text-[10px] font-bold text-gray-700">Round Comb</span>
            </button>
            <button onclick="togglePackItem(this, '🙈', 'Random')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95 col-span-2">
                <span class="text-xl">🙈</span>
                <span class="text-[10px] font-bold text-pink-600">Random Essentials 😏</span>
            </button>
            <button onclick="togglePackItem(this, '🧥', 'Hoodie')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🧥</span>
                <span class="text-[10px] font-bold text-gray-700">Big Hoodie</span>
            </button>
            <button onclick="togglePackItem(this, '🧴', 'Sunscreen')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🧴</span>
                <span class="text-[10px] font-bold text-gray-700">Sunscreen</span>
            </button>
            <button onclick="togglePackItem(this, '🕶️', 'Sunglasses')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🕶️</span>
                <span class="text-[10px] font-bold text-gray-700">Sunglasses</span>
            </button>
            <button onclick="togglePackItem(this, '🧦', 'Socks')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🧦</span>
                <span class="text-[10px] font-bold text-gray-700">Cozy Socks</span>
            </button>
            <button onclick="togglePackItem(this, '📷', 'Camera')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">📷</span>
                <span class="text-[10px] font-bold text-gray-700">Camera</span>
            </button>
            <button onclick="togglePackItem(this, '🍫', 'Snacks')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🍫</span>
                <span class="text-[10px] font-bold text-gray-700">Snacks</span>
            </button>
            <button onclick="togglePackItem(this, '🎭', 'Face Mask')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🎭</span>
                <span class="text-[10px] font-bold text-gray-700">Face Mask</span>
            </button>
            <button onclick="togglePackItem(this, '🔋', 'Power Bank')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🔋</span>
                <span class="text-[10px] font-bold text-gray-700">Power Bank</span>
            </button>
            <button onclick="togglePackItem(this, '🕯️', 'Candle')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95">
                <span class="text-xl">🕯️</span>
                <span class="text-[10px] font-bold text-gray-700">Candle</span>
            </button>
        </div>

        <button id="pack-next-btn" onclick="goToStage(10, 'pop')" disabled class="w-full py-3.5 px-6 bg-gray-200 text-gray-400 font-bold rounded-2xl transition cursor-not-allowed">
            Select Exactly 5 Items (0/5)
        </button>
    </section>

    <!-- STAGE 10: SECURITY CLEARANCE PASSCODE -->
    <section id="stage-10" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <div class="w-16 h-16 mx-auto mb-3 flex items-center justify-center bg-teal-100 rounded-full border-2 border-teal-200 text-3xl">
            🔐
        </div>
        
        <h2 class="text-2xl font-bold text-gray-800 mb-1">Security Gate</h2>
        <p class="text-xs text-gray-500 mb-4">Enter passcode (Hint: The cutest person ever):</p>

        <div class="mb-4">
            <input id="passcode-input" type="text" placeholder="Enter Name Here..." class="w-full text-center py-3 px-4 rounded-2xl border-2 border-pink-200 font-bold text-lg text-pink-600 uppercase tracking-widest focus:outline-none focus:border-pink-400">
        </div>

        <button onclick="verifyPasscode()" class="w-full py-3.5 px-6 bg-gradient-to-r from-teal-400 to-emerald-400 text-white font-extrabold rounded-2xl shadow-md transition transform active:scale-95 text-base">
            Unlock Portal 🗝️
        </button>
        <p id="passcode-error" class="text-xs text-red-500 mt-3 font-bold opacity-0">Hint: Capital DIP or dip! 😉</p>
    </section>

    <!-- STAGE 11: HEARTBEAT SCANNER MINI-GAME -->
    <section id="stage-11" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        <span class="inline-block px-3 py-1 bg-rose-100 text-rose-600 rounded-full text-xs font-bold uppercase tracking-wider mb-2">
            Lie Detector 💓
        </span>
        <h2 class="text-2xl font-bold text-gray-800 mb-2">Heartbeat Verification</h2>
        <p class="text-xs text-gray-500 mb-6">Press and HOLD your thumb on the heart scanner to measure excitement!</p>

        <div class="relative flex justify-center mb-6">
            <button id="scanner-btn" onmousedown="startHeartScan()" onmouseup="endHeartScan()" ontouchstart="startHeartScan(event)" ontouchend="endHeartScan()" class="w-32 h-32 bg-gradient-to-tr from-rose-400 to-pink-500 rounded-full flex flex-col items-center justify-center text-white shadow-xl transform active:scale-95 transition-transform duration-300 relative overflow-hidden">
                <span class="text-5xl animate-pulse">💓</span>
                <span class="text-[10px] font-extrabold uppercase mt-1">HOLD TO SCAN</span>
                <div id="scan-progress" class="absolute bottom-0 left-0 right-0 bg-white/30 h-0 transition-all duration-100 pointer-events-none"></div>
            </button>
        </div>

        <p id="scan-status" class="text-xs font-bold text-gray-500">Waiting for Dip's thumbpress...</p>
    </section>

    <!-- STAGE 12: THE GRAND PROPOSAL (SHIGOAL TRIP) -->
    <section id="stage-12" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0 relative">
        
        <div class="relative w-full bg-gradient-to-b from-teal-50 to-emerald-50 rounded-2xl p-4 mb-4 border border-teal-100">
            <div class="flex justify-center items-center gap-3 my-1">
                <span class="text-4xl animate-doodle">⛰️</span>
                <span class="text-5xl animate-wiggle">🏡</span>
                <span class="text-4xl animate-doodle">🌲</span>
            </div>
            <div class="inline-block mt-2 px-3 py-1 bg-teal-500/10 text-teal-700 rounded-full text-xs font-bold">
                📍 Destination: SHIGOAL
            </div>
        </div>

        <h2 class="text-2xl sm:text-3xl font-extrabold text-gray-800 mb-2 leading-tight">
            Dip... Will you go to <span class="text-pink-500 underline decoration-pink-300 decoration-wavy">SHIGOAL</span> with me?
        </h2>

        <!-- Detailed Trip Breakdown -->
        <div class="bg-pink-50/90 border border-pink-200/60 rounded-2xl p-3.5 my-3 text-left space-y-2">
            <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700">
                <span class="p-1.5 bg-pink-200 rounded-lg text-pink-700">📅</span>
                <span><strong>Dates:</strong> Oct 24 – Oct 26</span>
            </div>
            <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700">
                <span class="p-1.5 bg-purple-200 rounded-lg text-purple-700">🌙</span>
                <span><strong>Duration:</strong> 2 Nights, 3 Days</span>
            </div>
            <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700">
                <span class="p-1.5 bg-emerald-200 rounded-lg text-emerald-700">🚗</span>
                <span><strong>Return:</strong> Back on Monday, Oct 26</span>
            </div>
            <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700">
                <span class="p-1.5 bg-amber-200 rounded-lg text-amber-700">📝</span>
                <span><strong>Leave Needed:</strong> 2 Days (Oct 25 & 26)</span>
            </div>
        </div>

        <!-- Teasing Toast Message area -->
        <div id="toast-container" class="h-8 mb-1 flex items-center justify-center">
            <span id="toast-text" class="text-xs font-bold text-pink-600 bg-pink-100 px-3 py-1 rounded-full opacity-0"></span>
        </div>

        <!-- Action Buttons Area -->
        <div class="relative min-h-[110px] flex items-center justify-center gap-4 flex-wrap pt-2">
            
            <!-- YES BUTTON -->
            <button id="yes-btn" onclick="acceptProposal()" class="py-4 px-8 bg-gradient-to-r from-pink-500 to-rose-400 hover:from-pink-600 hover:to-rose-500 text-white font-extrabold text-xl rounded-2xl shadow-xl transition-all duration-300 transform active:scale-95 animate-pulse-glow z-20 flex items-center gap-2">
                <span>YES, ABSOLUTELY!</span>
                <span>💖</span>
            </button>

            <!-- NO BUTTON (Runaway button) -->
            <button id="no-btn" onmouseover="dodgeNoButton()" onclick="dodgeNoButton()" ontouchstart="dodgeNoButton(event)" class="py-3 px-6 bg-gray-200 hover:bg-gray-300 text-gray-600 font-bold text-base rounded-2xl transition-all duration-150 z-10 shadow-sm border border-gray-300 select-none">
                No 🙈
            </button>

        </div>
    </section>

    <!-- STAGE 13: CELEBRATION & COUNTDOWN -->
    <section id="stage-13" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0">
        
        <div class="w-20 h-20 mx-auto mb-3 flex items-center justify-center bg-yellow-100 rounded-full border-4 border-yellow-200 animate-bounce">
            <span class="text-5xl">🥳</span>
        </div>

        <h2 class="text-2xl sm:text-3xl font-extrabold text-gray-800 mb-1">BEST DECISION EVER! 🎉</h2>
        <p class="text-sm sm:text-base font-bold text-pink-500 mb-4">Pack your bags Dip, we are going to SHIGOAL!</p>

        <!-- Countdown Box -->
        <div class="bg-gradient-to-r from-pink-50 via-purple-50 to-teal-50 border-2 border-pink-200 rounded-2xl p-4 mb-5 text-center shadow-inner">
            <div class="text-xs font-bold text-purple-600 uppercase tracking-widest mb-1">Countdown to Departure</div>
            <div id="countdown-timer" class="text-xl sm:text-2xl font-black text-gray-800 tracking-wide font-mono">
                Calculating days... ⏳
            </div>
        </div>

        <div class="space-y-3">
            <button onclick="copyItinerary()" class="w-full py-3.5 px-6 bg-white hover:bg-pink-50 border-2 border-pink-300 text-pink-600 font-bold rounded-2xl shadow-sm transition active:scale-95 flex items-center justify-center gap-2">
                <span>📋 Copy Itinerary Details</span>
            </button>

            <button onclick="retriggerConfetti()" class="w-full py-3 px-6 bg-pink-100 hover:bg-pink-200 text-pink-700 font-bold rounded-2xl transition active:scale-95 flex items-center justify-center gap-2 text-sm">
                <span>✨ More Confetti & Hearts!</span>
            </button>
        </div>

        <p class="text-xs text-gray-400 mt-5">Can't wait for Oct 24–26! 💕</p>
    </section>

</main>

<script>
    let currentStage = 1;
    const totalStages = 13;
    let collectedBribes = 0;
    let selectedItems = [];
    let dodgeCount = 0;
    let yesButtonScale = 1;
    let scanInterval = null;
    let scanProgress = 0;

    const dodgePhrases = [
        "Dip, nice try! 😜",
        "No is not installed! 🏃‍♂️",
        "YES is mandatory! ✨",
        "Nope, too slow! 🌸",
        "Think again Dip! 💖",
        "Error: 'No' disabled! 🙅‍♂️",
        "Almost, but NOPE! 🙈",
        "You have to press YES! 👉"
    ];

    function updateProgress(stageNum) {
        const fill = document.getElementById('progress-bar-fill');
        const text = document.getElementById('progress-text');
        const pct = Math.round((stageNum / totalStages) * 100);
        fill.style.width = `${pct}%`;
        text.textContent = `${stageNum} / ${totalStages}`;
    }

    // Web Audio Synthesizer
    function playSound(type) {
        try {
            const ctx = new (window.AudioContext || window.webkitAudioContext)();
            if (ctx.state === 'suspended') ctx.resume();

            const osc = ctx.createOscillator();
            const gain = ctx.createGain();
            osc.connect(gain);
            gain.connect(ctx.destination);
            const now = ctx.currentTime;

            if (type === 'drone') {
                osc.type = 'sawtooth';
                osc.frequency.setValueAtTime(110, now);
                osc.frequency.exponentialRampToValueAtTime(55, now + 0.5);
                gain.gain.setValueAtTime(0.3, now);
                gain.gain.linearRampToValueAtTime(0.01, now + 0.5);
                osc.start(now);
                osc.stop(now + 0.5);
            } else if (type === 'jumpscare') {
                osc.type = 'square';
                osc.frequency.setValueAtTime(800, now);
                osc.frequency.linearRampToValueAtTime(150, now + 0.35);
                gain.gain.setValueAtTime(0.4, now);
                gain.gain.linearRampToValueAtTime(0.01, now + 0.35);
                osc.start(now);
                osc.stop(now + 0.35);
            } else if (type === 'pop') {
                osc.type = 'sine';
                osc.frequency.setValueAtTime(450, now);
                osc.frequency.exponentialRampToValueAtTime(900, now + 0.12);
                gain.gain.setValueAtTime(0.3, now);
                gain.gain.linearRampToValueAtTime(0.01, now + 0.12);
                osc.start(now);
                osc.stop(now + 0.12);
            } else if (type === 'dodge') {
                osc.type = 'triangle';
                osc.frequency.setValueAtTime(650, now);
                osc.frequency.exponentialRampToValueAtTime(200, now + 0.15);
                gain.gain.setValueAtTime(0.2, now);
                gain.gain.linearRampToValueAtTime(0.01, now + 0.15);
                osc.start(now);
                osc.stop(now + 0.15);
            } else if (type === 'victory') {
                const notes = [523.25, 659.25, 783.99, 1046.50];
                notes.forEach((freq, idx) => {
                    const noteOsc = ctx.createOscillator();
                    const noteGain = ctx.createGain();
                    noteOsc.type = 'sine';
                    noteOsc.frequency.setValueAtTime(freq, now + idx * 0.1);
                    noteGain.gain.setValueAtTime(0.3, now + idx * 0.1);
                    noteGain.gain.exponentialRampToValueAtTime(0.001, now + idx * 0.1 + 0.35);
                    noteOsc.connect(noteGain);
                    noteOsc.connect(ctx.destination);
                    noteOsc.start(now + idx * 0.1);
                    noteOsc.stop(now + idx * 0.1 + 0.35);
                });
            }
        } catch (e) {
            console.log("Audio not supported or blocked", e);
        }
    }

    function goToStage(stageNum, soundType = 'pop') {
        if (soundType) playSound(soundType);

        const currEl = document.getElementById(`stage-${currentStage}`);
        const nextEl = document.getElementById(`stage-${stageNum}`);

        currEl.classList.add('opacity-0', 'scale-95');

        setTimeout(() => {
            currEl.classList.add('hidden');
            nextEl.classList.remove('hidden');
            
            void nextEl.offsetWidth;

            nextEl.classList.remove('opacity-0', 'scale-95');
            nextEl.classList.add('opacity-100', 'scale-100');
            currentStage = stageNum;
            updateProgress(stageNum);
        }, 300);
    }

    function triggerJumpscare() {
        playSound('jumpscare');
        document.getElementById('main-body').classList.add('animate-glitch');
        setTimeout(() => {
            document.getElementById('main-body').classList.remove('animate-glitch');
        }, 450);
        goToStage(5, null);
    }

    function switchToCuteMode() {
        playSound('pop');
        document.getElementById('main-body').classList.add('cute-mode');
        document.getElementById('cute-bg-decor').classList.remove('opacity-0');
        document.getElementById('cute-bg-decor').classList.add('opacity-100');
        goToStage(6, 'pop');
    }

    function wrongAnswerRiddle(btn) {
        playSound('dodge');
        btn.classList.add('bg-red-100', 'border-red-300');
        document.getElementById('riddle-error').classList.remove('opacity-0');
    }

    function collectBribe(btn) {
        if (btn.classList.contains('collected')) return;

        playSound('pop');
        btn.classList.add('collected', 'bg-pink-100', 'border-pink-300', 'scale-95', 'pointer-events-none');
        collectedBribes++;

        const nextBtn = document.getElementById('bribe-next-btn');
        nextBtn.textContent = `Collect All Treats (${collectedBribes}/4) ✨`;

        if (collectedBribes >= 4) {
            nextBtn.disabled = false;
            nextBtn.className = "w-full py-3.5 px-6 bg-gradient-to-r from-amber-400 to-pink-400 text-white font-extrabold rounded-2xl shadow-lg animate-pulse-glow cursor-pointer";
            nextBtn.textContent = "All Treats Unlocked! Next Stage ➡️";
        }
    }

    // Toggle Packing Items (Strict 5 items selection)
    function togglePackItem(btn, emoji, name) {
        playSound('pop');
        const itemKey = `${emoji} ${name}`;
        const idx = selectedItems.indexOf(itemKey);

        if (idx > -1) {
            // Deselect item
            selectedItems.splice(idx, 1);
            btn.classList.remove('border-pink-500', 'bg-pink-100', 'ring-2', 'ring-pink-300');
        } else {
            // Check if already 5 items packed
            if (selectedItems.length >= 5) {
                playSound('dodge');
                const packInstruction = document.getElementById('pack-instruction');
                packInstruction.textContent = "⚠️ Limit reached! Deselect an item to swap!";
                packInstruction.className = "text-xs text-red-500 font-bold mb-3 animate-bounce";
                setTimeout(() => {
                    packInstruction.textContent = "You MUST pick EXACTLY 5 essential items from 15 below:";
                    packInstruction.className = "text-xs text-pink-600 font-bold mb-3";
                }, 2000);
                return;
            }
            // Select item
            selectedItems.push(itemKey);
            btn.classList.add('border-pink-500', 'bg-pink-100', 'ring-2', 'ring-pink-300');
        }

        renderSuitcase();
    }

    function renderSuitcase() {
        const suitcase = document.getElementById('suitcase');
        const emptyHint = document.getElementById('suitcase-empty');
        const counter = document.getElementById('pack-counter');
        const nextBtn = document.getElementById('pack-next-btn');

        suitcase.innerHTML = '';

        if (selectedItems.length === 0) {
            suitcase.appendChild(emptyHint);
            emptyHint.style.display = 'block';
        } else {
            selectedItems.forEach(itemStr => {
                const tag = document.createElement('div');
                tag.className = "bg-white px-2 py-0.5 rounded-full shadow-sm text-[11px] font-bold text-pink-600 flex items-center gap-1 border border-pink-200 animate-wiggle";
                tag.innerHTML = `<span>${itemStr}</span>`;
                suitcase.appendChild(tag);
            });
        }

        counter.textContent = `Selected: ${selectedItems.length} / 5 🧳`;

        if (selectedItems.length === 5) {
            nextBtn.disabled = false;
            nextBtn.className = "w-full py-3.5 px-6 bg-gradient-to-r from-pink-400 to-purple-400 text-white font-extrabold rounded-2xl shadow-lg animate-pulse-glow cursor-pointer";
            nextBtn.textContent = "Suitcase Packed with 5 Items! Ready! 🔒";
        } else {
            nextBtn.disabled = true;
            nextBtn.className = "w-full py-3.5 px-6 bg-gray-200 text-gray-400 font-bold rounded-2xl transition cursor-not-allowed";
            nextBtn.textContent = `Select Exactly 5 Items (${selectedItems.length}/5)`;
        }
    }

    function verifyPasscode() {
        const input = document.getElementById('passcode-input').value.trim().toUpperCase();
        if (input === 'DIP') {
            playSound('pop');
            goToStage(11, 'pop');
        } else {
            playSound('dodge');
            document.getElementById('passcode-error').classList.remove('opacity-0');
        }
    }

    function startHeartScan(e) {
        if (e) e.preventDefault();
        scanProgress = 0;
        const progressEl = document.getElementById('scan-progress');
        const statusEl = document.getElementById('scan-status');

        scanInterval = setInterval(() => {
            scanProgress += 10;
            progressEl.style.height = `${scanProgress}%`;
            statusEl.textContent = `Scanning heart rate... ${60 + scanProgress} BPM`;

            if (scanProgress >= 100) {
                clearInterval(scanInterval);
                statusEl.textContent = "120 BPM DETECTED! Target Dip is super excited! 💕";
                playSound('victory');
                setTimeout(() => {
                    goToStage(12, 'pop');
                }, 1000);
            }
        }, 150);
    }

    function endHeartScan() {
        if (scanProgress < 100) {
            clearInterval(scanInterval);
            document.getElementById('scan-progress').style.height = '0%';
            document.getElementById('scan-status').textContent = "Scan canceled! Hold thumb longer!";
        }
    }

    function dodgeNoButton(e) {
        if (e) e.preventDefault();

        playSound('dodge');
        dodgeCount++;

        const noBtn = document.getElementById('no-btn');
        const yesBtn = document.getElementById('yes-btn');

        const maxX = Math.min(window.innerWidth - 120, 240);
        const maxY = 150;

        const randomX = (Math.random() - 0.5) * maxX;
        const randomY = (Math.random() - 0.5) * maxY;

        const currentScale = Math.max(0.55, 1 - dodgeCount * 0.05);
        noBtn.style.transform = `translate(${randomX}px, ${randomY}px) scale(${currentScale})`;

        yesButtonScale += 0.09;
        yesBtn.style.transform = `scale(${yesButtonScale})`;

        showTeasingToast();
    }

    function showTeasingToast() {
        const toastText = document.getElementById('toast-text');
        const randomPhrase = dodgePhrases[Math.floor(Math.random() * dodgePhrases.length)];
        
        toastText.textContent = randomPhrase;
        toastText.className = "text-xs font-bold text-pink-600 bg-pink-100 border border-pink-200 px-3 py-1 rounded-full toast-msg";

        setTimeout(() => {
            toastText.className = "text-xs font-bold text-pink-600 bg-pink-100 border border-pink-200 px-3 py-1 rounded-full opacity-0";
        }, 1400);
    }

    function acceptProposal() {
        playSound('victory');
        goToStage(13, null);
        launchConfetti();
        startCountdown();
    }

    function launchConfetti() {
        if (typeof confetti === 'function') {
            const count = 200;
            const defaults = { origin: { y: 0.7 } };

            function fire(particleRatio, opts) {
                confetti(Object.assign({}, defaults, opts, {
                    particleCount: Math.floor(count * particleRatio)
                }));
            }

            fire(0.25, { spread: 26, startVelocity: 55, colors: ['#F472B6', '#F43F5E', '#A78BFA'] });
            fire(0.2, { spread: 60, colors: ['#34D399', '#FBBF24', '#F472B6'] });
            fire(0.35, { spread: 100, decay: 0.91, scalar: 0.8 });
            fire(0.1, { spread: 120, startVelocity: 25, decay: 0.92, colors: ['#E879F9', '#38BDF8', '#F472B6'] });
        }
    }

    function retriggerConfetti() {
        playSound('victory');
        launchConfetti();
    }

    function startCountdown() {
        const targetDate = new Date('October 24, 2026 00:00:00').getTime();
        
        function updateTimer() {
            const now = new Date().getTime();
            const diff = targetDate - now;

            if (diff <= 0) {
                document.getElementById('countdown-timer').textContent = "IT'S TIME FOR SHIGOAL! 🎉";
                return;
            }

            const days = Math.floor(diff / (1000 * 60 * 60 * 24));
            const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
            const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));

            document.getElementById('countdown-timer').textContent = `${days}d : ${hours}h : ${minutes}m`;
        }

        updateTimer();
        setInterval(updateTimer, 60000);
    }

    function copyItinerary() {
        const packedListStr = selectedItems.length > 0 ? selectedItems.join(', ') : "Bikini, Saree, Lipstick, Round Comb, Random Essentials";
        const details = `🌲 SHIGOAL TRIP GETAWAY FOR DIP 🌲\n📅 Dates: Oct 24 – Oct 26 (2 Nights, 3 Days)\n📝 Office Leave: Oct 25 & 26 (2 Days)\n🚗 Return: Monday, Oct 26\n🧳 Packed: ${packedListStr}\n✨ It's officially a date! 💕`;
        
        const tempInput = document.createElement('textarea');
        tempInput.value = details;
        document.body.appendChild(tempInput);
        tempInput.select();
        document.execCommand('copy');
        document.body.removeChild(tempInput);

        const toastText = document.createElement('div');
        toastText.className = "fixed bottom-6 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white text-xs font-bold px-4 py-2 rounded-full shadow-lg z-50 animate-bounce";
        toastText.textContent = "📋 Itinerary copied for Dip!";
        document.body.appendChild(toastText);

        setTimeout(() => { toastText.remove(); }, 2200);
    }

    // Initialize progress bar on load
    updateProgress(1);
</script>
</html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Top Secret Quest for Dip ✨</title> <!-- Tailwind CSS --> <script src="https://cdn.tailwindcss.com"></script> <!-- Google Fonts: Fredoka, Quicksand, Creepster --> <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=Fredoka:wght@400;500;600;700&family=Quicksand:wght@500;600;700&family=Creepster&display=swap" rel="stylesheet"> <!-- Canvas Confetti --> <script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.6.0/dist/confetti.browser.min.js"></script> <style> * { font-family: 'Fredoka', 'Quicksand', sans-serif; user-select: none; -webkit-user-select: none; } .scary-font { font-family: 'Creepster', cursive; } body { background: linear-gradient(135deg, #0F172A 0%, #1E1B4B 50%, #020617 100%); transition: background 1.2s ease-in-out; min-height: 100vh; overflow-x: hidden; } body.cute-mode { background: linear-gradient(135deg, #FFF0F5 0%, #E6E6FA 50%, #E0F8F7 100%); } @keyframes floatSlow { 0%, 100% { transform: translateY(0px) rotate(0deg); } 50% { transform: translateY(-12px) rotate(5deg); } } @keyframes pulseGlow { 0%, 100% { transform: scale(1); box-shadow: 0 10px 25px -5px rgba(244, 114, 182, 0.4); } 50% { transform: scale(1.06); box-shadow: 0 20px 35px -5px rgba(244, 114, 182, 0.7); } } @keyframes glitchRed { 0% { transform: translate(0); filter: hue-rotate(0deg); } 20% { transform: translate(-5px, 5px); filter: hue-rotate(90deg); } 40% { transform: translate(-5px, -5px); } 60% { transform: translate(5px, 5px); } 80% { transform: translate(5px, -5px); } 100% { transform: translate(0); filter: hue-rotate(0deg); } } @keyframes wiggleDoodle { 0%, 100% { transform: rotate(-3deg); } 50% { transform: rotate(3deg); } } .animate-float { animation: floatSlow 4s ease-in-out infinite; } .animate-pulse-glow { animation: pulseGlow 2s ease-in-out infinite; } .animate-glitch { animation: glitchRed 0.2s infinite; } .animate-doodle { animation: wiggleDoodle 3s ease-in-out infinite; } .glass-card-dark { background: rgba(15, 23, 42, 0.88); backdrop-filter: blur(18px); border: 2px solid rgba(239, 68, 68, 0.35); box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.8); } .glass-card-cute { background: rgba(255, 255, 255, 0.94); backdrop-filter: blur(18px); border: 3px solid rgba(255, 255, 255, 0.9); box-shadow: 0 20px 45px rgba(219, 112, 147, 0.2); } #no-btn { transition: all 0.15s cubic-bezier(0.34, 1.56, 0.64, 1); } .toast-msg { animation: fadeInOut 1.5s forwards; } @keyframes fadeInOut { 0% { opacity: 0; transform: translateY(10px) scale(0.9); } 20% { opacity: 1; transform: translateY(0) scale(1); } 80% { opacity: 1; transform: translateY(0) scale(1); } 100% { opacity: 0; transform: translateY(-10px) scale(0.9); } } </style> </head> <body id="main-body" class="flex flex-col items-center justify-center p-3 sm:p-5 min-h-screen relative overflow-hidden"> <!-- Top Progress Bar --> <div class="fixed top-3 left-1/2 -translate-x-1/2 z-50 w-11/12 max-w-md bg-black/40 backdrop-blur-md rounded-full p-1.5 border border-white/20 flex items-center justify-between gap-3 shadow-lg"> <div class="w-full bg-gray-700/60 rounded-full h-2.5 overflow-hidden ml-2"> <div id="progress-bar-fill" class="bg-gradient-to-r from-pink-500 to-purple-500 h-2.5 rounded-full transition-all duration-500" style="width: 7.6%;"></div> </div> <span id="progress-text" class="text-[11px] font-extrabold text-pink-300 font-mono pr-2 whitespace-nowrap">1 / 13</span> </div> <!-- Cute Background Background Decor (Revealed in Stage 5) --> <div id="cute-bg-decor" class="absolute inset-0 pointer-events-none overflow-hidden z-0 opacity-0 transition-opacity duration-1000"> <div class="absolute top-12 left-6 text-4xl animate-float opacity-70" style="animation-delay: 0s;">🌸</div> <div class="absolute top-1/4 right-8 text-3xl animate-float opacity-70" style="animation-delay: 1s;">✨</div> <div class="absolute bottom-16 left-12 text-4xl animate-float opacity-70" style="animation-delay: 2s;">🍃</div> <div class="absolute bottom-1/3 right-6 text-3xl animate-float opacity-70" style="animation-delay: 1.5s;">🧸</div> <div class="absolute top-1/2 left-4 text-3xl animate-float opacity-60" style="animation-delay: 2.5s;">☁️</div> <div class="absolute bottom-6 right-1/4 text-4xl animate-float opacity-70" style="animation-delay: 0.8s;">💖</div> </div> <!-- Main Interactive Card Container --> <main class="w-full max-w-lg z-10 my-auto pt-8"> <!-- STAGE 1: THE SPOOKY INTRO --> <section id="stage-1" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center transition-all duration-500 transform scale-100"> <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-red-950/70 rounded-full border-2 border-red-800 animate-pulse"> <span class="text-4xl">🤫</span> </div> <span class="inline-block px-3.5 py-1 bg-red-900/50 text-red-400 rounded-full text-xs font-bold uppercase tracking-widest mb-3 border border-red-800"> Confidential Message </span> <h1 class="text-2xl sm:text-3xl font-bold text-red-500 mb-3 tracking-wide"> Dip... we need to talk. 🤐 </h1> <p class="text-gray-300 text-sm mb-6 leading-relaxed font-mono"> Are you alone right now? Please make sure nobody is standing behind you... </p> <button onclick="goToStage(2, 'drone')" class="w-full py-4 px-6 bg-gradient-to-r from-red-800 to-red-950 hover:from-red-700 hover:to-red-900 text-red-100 font-bold text-base rounded-2xl border border-red-700 shadow-xl transition transform active:scale-95 flex items-center justify-center gap-2"> <span>I'm alone... what happened?! 😨</span> </button> </section> <!-- STAGE 2: DRAMA & JEALOUSY SETUP --> <section id="stage-2" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-purple-950/70 rounded-full border-2 border-purple-800"> <span class="text-4xl">👀</span> </div> <h2 class="text-2xl font-bold text-purple-400 mb-3 font-mono"> I've been trying to tell you... </h2> <p class="text-gray-300 text-sm mb-6 leading-relaxed"> Dip, there’s something serious. I’ve been trying to reach you for days because... <span class="text-red-400 font-bold underline">there is another girl!</span> 😳 </p> <button onclick="goToStage(3, 'drone')" class="w-full py-4 px-6 bg-purple-900 hover:bg-purple-800 text-purple-100 font-bold text-base rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2"> <span>Wait, WHAT?! Another girl?! 😱</span> </button> </section> <!-- STAGE 3: THE OFFICE DRAMA ESCALATION --> <section id="stage-3" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-amber-950/70 rounded-full border-2 border-amber-800 animate-bounce"> <span class="text-4xl">🏢</span> </div> <h2 class="text-2xl font-bold text-amber-400 mb-3 font-mono"> She's Watching at Your Office... </h2> <p class="text-gray-300 text-sm mb-6 leading-relaxed"> Yes! She’s at your office... watching your attendance register every day, checking your leave balance... and even HR is getting involved! 📋💼 </p> <button onclick="goToStage(4, 'drone')" class="w-full py-4 px-6 bg-amber-900 hover:bg-amber-800 text-amber-100 font-bold text-base rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2"> <span>HR is involved?! What did she do?! 😰</span> </button> </section> <!-- STAGE 4: CRYPTIC WARNING --> <section id="stage-4" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <div class="w-20 h-20 mx-auto mb-4 flex items-center justify-center bg-red-950/80 rounded-full border-2 border-red-600 animate-pulse"> <span class="text-4xl">📩</span> </div> <h2 class="text-2xl font-bold text-red-400 mb-3 font-mono"> She Sent an Urgent Email... </h2> <p class="text-gray-300 text-sm mb-6 leading-relaxed"> She sent an email regarding <span class="text-amber-300 font-bold underline">OCTOBER 24TH</span>... An unavoidable calendar anomaly is coming right towards you! </p> <button onclick="triggerJumpscare()" class="w-full py-4 px-6 bg-red-800 hover:bg-red-700 text-red-100 font-bold text-base rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2"> <span>Open Urgent Email Notification! 🔍</span> </button> </section> <!-- STAGE 5: HORROR JUMPSCARE PRANK --> <section id="stage-5" class="glass-card-dark rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0 relative overflow-hidden"> <div id="jumpscare-box" class="py-4"> <div class="text-7xl mb-3 animate-glitch">👻</div> <h2 class="scary-font text-5xl text-red-500 mb-2 tracking-widest animate-glitch">BOO!! 😈</h2> <p class="text-red-300 font-bold text-lg mb-4">JUST KIDDING DIP!! 😜</p> <p class="text-gray-300 text-xs mb-6 leading-relaxed"> There's no other girl or HR drama! It's just me teasing you! Let's switch to cute mode right now...💖 </p> </div> <button onclick="switchToCuteMode()" class="w-full py-4 px-6 bg-pink-500 hover:bg-pink-600 text-white font-bold text-lg rounded-2xl shadow-lg transition transform active:scale-95 flex items-center justify-center gap-2"> <span>Phew! You scared me so bad! 😤💖</span> </button> </section> <!-- STAGE 6: OFFICE CALENDAR REALIZATION --> <section id="stage-6" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <span class="inline-block px-3 py-1 bg-purple-100 text-purple-600 rounded-full text-xs font-bold uppercase tracking-wider mb-2"> Office Math Realization 📅 </span> <h2 class="text-2xl font-bold text-gray-800 mb-2">Dip, look at October Calendar:</h2> <p class="text-xs text-gray-500 mb-4">Here is how we steal 3 full days of freedom:</p> <div class="bg-purple-50/80 border border-purple-200 rounded-2xl p-4 mb-5 text-left space-y-2.5"> <div class="flex items-center justify-between text-sm"> <span class="font-bold text-gray-700">🗓️ Oct 24 (Sat):</span> <span class="px-2.5 py-0.5 bg-emerald-100 text-emerald-700 font-extrabold rounded-full text-xs">OFFICE OFF 🎉</span> </div> <div class="flex items-center justify-between text-sm"> <span class="font-bold text-gray-700">💼 Oct 25 (Sun):</span> <span class="px-2.5 py-0.5 bg-rose-100 text-rose-600 font-extrabold rounded-full text-xs">LEAVE #1 NEEDED 📝</span> </div> <div class="flex items-center justify-between text-sm"> <span class="font-bold text-gray-700">💼 Oct 26 (Mon):</span> <span class="px-2.5 py-0.5 bg-rose-100 text-rose-600 font-extrabold rounded-full text-xs">LEAVE #2 NEEDED 📝</span> </div> </div> <div class="bg-pink-50 border border-pink-200 rounded-2xl p-3 mb-5 text-xs text-pink-700 font-semibold"> ✨ Take just <strong>2 days leave</strong> (25th & 26th) to unlock <strong>2 nights & 3 full days</strong> of getaway! </div> <button onclick="goToStage(7, 'pop')" class="w-full py-3.5 px-6 bg-gradient-to-r from-purple-500 to-pink-500 text-white font-extrabold rounded-2xl shadow-md transition transform active:scale-95 text-base"> Understood! Calculate Riddle ➡️ </button> </section> <!-- STAGE 7: INTERACTIVE MATH RIDDLE --> <section id="stage-7" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <span class="inline-block px-3 py-1 bg-pink-100 text-pink-600 rounded-full text-xs font-bold uppercase tracking-wider mb-2"> Getaway Equation 🧩 </span> <h2 class="text-2xl font-bold text-gray-800 mb-2">Dip, solve this formula:</h2> <div class="bg-pink-50 border border-pink-200 rounded-2xl p-3.5 mb-5 font-bold text-pink-800 text-sm leading-relaxed"> 2 Nights 🌙 + 3 Days ☀️ + Dip 👸 + Me 🙋‍♂️ - 2 Leave Days 📝 = ??? </div> <div class="space-y-2.5"> <button onclick="wrongAnswerRiddle(this)" class="w-full py-3 px-4 bg-white hover:bg-red-50 border-2 border-gray-200 rounded-2xl font-bold text-gray-700 text-xs sm:text-sm transition"> A) Overtime at Office 😴 </button> <button onclick="wrongAnswerRiddle(this)" class="w-full py-3 px-4 bg-white hover:bg-red-50 border-2 border-gray-200 rounded-2xl font-bold text-gray-700 text-xs sm:text-sm transition"> B) Anxious Emailing HR 📧 </button> <button onclick="goToStage(8, 'pop')" class="w-full py-3.5 px-4 bg-gradient-to-r from-pink-400 to-purple-400 text-white font-extrabold rounded-2xl shadow-md transition transform active:scale-95 text-sm sm:text-base border-2 border-pink-300"> C) Magical Shigoal Getaway Mission! 🌲✨ </button> </div> <p id="riddle-error" class="text-xs text-red-500 mt-3 font-bold opacity-0">Wrong answer! Try again Dip!</p> </section> <!-- STAGE 8: THE FOOD & VIBE BRIBE --> <section id="stage-8" class="glass-card-cute rounded-3xl p-6 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <span class="inline-block px-3 py-1 bg-amber-100 text-amber-700 rounded-full text-xs font-bold uppercase tracking-wider mb-2"> VIP Bribe Time 🍫☕ </span> <h2 class="text-2xl font-bold text-gray-800 mb-1">Dip's Getaway Treats</h2> <p class="text-xs text-gray-500 mb-4">Tap ALL 4 treats to unlock the luggage challenge!</p> <div class="grid grid-cols-2 gap-3 mb-5"> <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm"> <span class="text-3xl">☕</span> <span class="text-xs font-bold text-gray-700">Hot Chocolates</span> </button> <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm"> <span class="text-3xl">🌅</span> <span class="text-xs font-bold text-gray-700">Sunset Rooftop</span> </button> <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm"> <span class="text-3xl">🧸</span> <span class="text-xs font-bold text-gray-700">Cozy Blankets</span> </button> <button onclick="collectBribe(this)" class="bribe-btn bg-white hover:bg-pink-50 border-2 border-pink-100 p-3 rounded-2xl transition flex flex-col items-center gap-1 shadow-sm"> <span class="text-3xl">🗣️</span> <span class="text-xs font-bold text-gray-700">Unlimited Gossip</span> </button> </div> <button id="bribe-next-btn" onclick="goToStage(9, 'pop')" disabled class="w-full py-3.5 px-6 bg-gray-200 text-gray-400 font-bold rounded-2xl transition cursor-not-allowed"> Collect All Treats (0/4) ✨ </button> </section> <!-- STAGE 9: EXTENDED LUGGAGE CHALLENGE (15 ITEMS TOTAL, STRICT 5 SELECTION) --> <section id="stage-9" class="glass-card-cute rounded-3xl p-5 sm:p-6 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <div class="flex items-center justify-between mb-2"> <span class="text-xs font-bold bg-pink-100 text-pink-600 px-3 py-1 rounded-full">Dip's Luggage</span> <span id="pack-counter" class="text-xs font-bold text-purple-600 bg-purple-50 px-3 py-1 rounded-full border border-purple-200"> Selected: 0 / 5 🧳 </span> </div> <h2 class="text-2xl font-bold text-gray-800 mb-1">Pack Exactly 5 Items!</h2> <p id="pack-instruction" class="text-xs text-pink-600 font-bold mb-3">You MUST pick EXACTLY 5 essential items from 15 below:</p> <!-- Suitcase container --> <div id="suitcase" class="bg-pink-50/80 border-2 border-dashed border-pink-300 rounded-2xl p-2.5 mb-3.5 min-h-[75px] flex flex-wrap items-center justify-center gap-1.5"> <span id="suitcase-empty" class="text-xs text-pink-400 font-medium">🧳 Luggage empty... tap items to pack!</span> </div> <!-- 15 Packing Items Grid --> <div class="grid grid-cols-3 gap-2 mb-4 max-h-[220px] overflow-y-auto pr-1"> <button onclick="togglePackItem(this, '👙', 'Bikini')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">👙</span> <span class="text-[10px] font-bold text-gray-700">Bikini</span> </button> <button onclick="togglePackItem(this, '🥻', 'Saree')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🥻</span> <span class="text-[10px] font-bold text-gray-700">Saree</span> </button> <button onclick="togglePackItem(this, '💄', 'Lipstick')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">💄</span> <span class="text-[10px] font-bold text-gray-700">Lipstick</span> </button> <button onclick="togglePackItem(this, '💇‍♀️', 'Round Comb')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">💇‍♀️</span> <span class="text-[10px] font-bold text-gray-700">Round Comb</span> </button> <button onclick="togglePackItem(this, '🙈', 'Random')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95 col-span-2"> <span class="text-xl">🙈</span> <span class="text-[10px] font-bold text-pink-600">Random Essentials 😏</span> </button> <button onclick="togglePackItem(this, '🧥', 'Hoodie')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🧥</span> <span class="text-[10px] font-bold text-gray-700">Big Hoodie</span> </button> <button onclick="togglePackItem(this, '🧴', 'Sunscreen')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🧴</span> <span class="text-[10px] font-bold text-gray-700">Sunscreen</span> </button> <button onclick="togglePackItem(this, '🕶️', 'Sunglasses')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🕶️</span> <span class="text-[10px] font-bold text-gray-700">Sunglasses</span> </button> <button onclick="togglePackItem(this, '🧦', 'Socks')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🧦</span> <span class="text-[10px] font-bold text-gray-700">Cozy Socks</span> </button> <button onclick="togglePackItem(this, '📷', 'Camera')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">📷</span> <span class="text-[10px] font-bold text-gray-700">Camera</span> </button> <button onclick="togglePackItem(this, '🍫', 'Snacks')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🍫</span> <span class="text-[10px] font-bold text-gray-700">Snacks</span> </button> <button onclick="togglePackItem(this, '🎭', 'Face Mask')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🎭</span> <span class="text-[10px] font-bold text-gray-700">Face Mask</span> </button> <button onclick="togglePackItem(this, '🔋', 'Power Bank')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🔋</span> <span class="text-[10px] font-bold text-gray-700">Power Bank</span> </button> <button onclick="togglePackItem(this, '🕯️', 'Candle')" class="pack-btn bg-white border-2 border-pink-100 p-2 rounded-xl transition flex flex-col items-center gap-0.5 shadow-sm active:scale-95"> <span class="text-xl">🕯️</span> <span class="text-[10px] font-bold text-gray-700">Candle</span> </button> </div> <button id="pack-next-btn" onclick="goToStage(10, 'pop')" disabled class="w-full py-3.5 px-6 bg-gray-200 text-gray-400 font-bold rounded-2xl transition cursor-not-allowed"> Select Exactly 5 Items (0/5) </button> </section> <!-- STAGE 10: SECURITY CLEARANCE PASSCODE --> <section id="stage-10" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <div class="w-16 h-16 mx-auto mb-3 flex items-center justify-center bg-teal-100 rounded-full border-2 border-teal-200 text-3xl"> 🔐 </div> <h2 class="text-2xl font-bold text-gray-800 mb-1">Security Gate</h2> <p class="text-xs text-gray-500 mb-4">Enter passcode (Hint: The cutest person ever):</p> <div class="mb-4"> <input id="passcode-input" type="text" placeholder="Enter Name Here..." class="w-full text-center py-3 px-4 rounded-2xl border-2 border-pink-200 font-bold text-lg text-pink-600 uppercase tracking-widest focus:outline-none focus:border-pink-400"> </div> <button onclick="verifyPasscode()" class="w-full py-3.5 px-6 bg-gradient-to-r from-teal-400 to-emerald-400 text-white font-extrabold rounded-2xl shadow-md transition transform active:scale-95 text-base"> Unlock Portal 🗝️ </button> <p id="passcode-error" class="text-xs text-red-500 mt-3 font-bold opacity-0">Hint: Capital DIP or dip! 😉</p> </section> <!-- STAGE 11: HEARTBEAT SCANNER MINI-GAME --> <section id="stage-11" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <span class="inline-block px-3 py-1 bg-rose-100 text-rose-600 rounded-full text-xs font-bold uppercase tracking-wider mb-2"> Lie Detector 💓 </span> <h2 class="text-2xl font-bold text-gray-800 mb-2">Heartbeat Verification</h2> <p class="text-xs text-gray-500 mb-6">Press and HOLD your thumb on the heart scanner to measure excitement!</p> <div class="relative flex justify-center mb-6"> <button id="scanner-btn" onmousedown="startHeartScan()" onmouseup="endHeartScan()" ontouchstart="startHeartScan(event)" ontouchend="endHeartScan()" class="w-32 h-32 bg-gradient-to-tr from-rose-400 to-pink-500 rounded-full flex flex-col items-center justify-center text-white shadow-xl transform active:scale-95 transition-transform duration-300 relative overflow-hidden"> <span class="text-5xl animate-pulse">💓</span> <span class="text-[10px] font-extrabold uppercase mt-1">HOLD TO SCAN</span> <div id="scan-progress" class="absolute bottom-0 left-0 right-0 bg-white/30 h-0 transition-all duration-100 pointer-events-none"></div> </button> </div> <p id="scan-status" class="text-xs font-bold text-gray-500">Waiting for Dip's thumbpress...</p> </section> <!-- STAGE 12: THE GRAND PROPOSAL (SHIGOAL TRIP) --> <section id="stage-12" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0 relative"> <div class="relative w-full bg-gradient-to-b from-teal-50 to-emerald-50 rounded-2xl p-4 mb-4 border border-teal-100"> <div class="flex justify-center items-center gap-3 my-1"> <span class="text-4xl animate-doodle">⛰️</span> <span class="text-5xl animate-wiggle">🏡</span> <span class="text-4xl animate-doodle">🌲</span> </div> <div class="inline-block mt-2 px-3 py-1 bg-teal-500/10 text-teal-700 rounded-full text-xs font-bold"> 📍 Destination: SHIGOAL </div> </div> <h2 class="text-2xl sm:text-3xl font-extrabold text-gray-800 mb-2 leading-tight"> Dip... Will you go to <span class="text-pink-500 underline decoration-pink-300 decoration-wavy">SHIGOAL</span> with me? </h2> <!-- Detailed Trip Breakdown --> <div class="bg-pink-50/90 border border-pink-200/60 rounded-2xl p-3.5 my-3 text-left space-y-2"> <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700"> <span class="p-1.5 bg-pink-200 rounded-lg text-pink-700">📅</span> <span><strong>Dates:</strong> Oct 24 – Oct 26</span> </div> <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700"> <span class="p-1.5 bg-purple-200 rounded-lg text-purple-700">🌙</span> <span><strong>Duration:</strong> 2 Nights, 3 Days</span> </div> <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700"> <span class="p-1.5 bg-emerald-200 rounded-lg text-emerald-700">🚗</span> <span><strong>Return:</strong> Back on Monday, Oct 26</span> </div> <div class="flex items-center gap-3 text-xs sm:text-sm font-semibold text-gray-700"> <span class="p-1.5 bg-amber-200 rounded-lg text-amber-700">📝</span> <span><strong>Leave Needed:</strong> 2 Days (Oct 25 & 26)</span> </div> </div> <!-- Teasing Toast Message area --> <div id="toast-container" class="h-8 mb-1 flex items-center justify-center"> <span id="toast-text" class="text-xs font-bold text-pink-600 bg-pink-100 px-3 py-1 rounded-full opacity-0"></span> </div> <!-- Action Buttons Area --> <div class="relative min-h-[110px] flex items-center justify-center gap-4 flex-wrap pt-2"> <!-- YES BUTTON --> <button id="yes-btn" onclick="acceptProposal()" class="py-4 px-8 bg-gradient-to-r from-pink-500 to-rose-400 hover:from-pink-600 hover:to-rose-500 text-white font-extrabold text-xl rounded-2xl shadow-xl transition-all duration-300 transform active:scale-95 animate-pulse-glow z-20 flex items-center gap-2"> <span>YES, ABSOLUTELY!</span> <span>💖</span> </button> <!-- NO BUTTON (Runaway button) --> <button id="no-btn" onmouseover="dodgeNoButton()" onclick="dodgeNoButton()" ontouchstart="dodgeNoButton(event)" class="py-3 px-6 bg-gray-200 hover:bg-gray-300 text-gray-600 font-bold text-base rounded-2xl transition-all duration-150 z-10 shadow-sm border border-gray-300 select-none"> No 🙈 </button> </div> </section> <!-- STAGE 13: CELEBRATION & COUNTDOWN --> <section id="stage-13" class="glass-card-cute rounded-3xl p-6 sm:p-8 text-center hidden transition-all duration-500 transform scale-95 opacity-0"> <div class="w-20 h-20 mx-auto mb-3 flex items-center justify-center bg-yellow-100 rounded-full border-4 border-yellow-200 animate-bounce"> <span class="text-5xl">🥳</span> </div> <h2 class="text-2xl sm:text-3xl font-extrabold text-gray-800 mb-1">BEST DECISION EVER! 🎉</h2> <p class="text-sm sm:text-base font-bold text-pink-500 mb-4">Pack your bags Dip, we are going to SHIGOAL!</p> <!-- Countdown Box --> <div class="bg-gradient-to-r from-pink-50 via-purple-50 to-teal-50 border-2 border-pink-200 rounded-2xl p-4 mb-5 text-center shadow-inner"> <div class="text-xs font-bold text-purple-600 uppercase tracking-widest mb-1">Countdown to Departure</div> <div id="countdown-timer" class="text-xl sm:text-2xl font-black text-gray-800 tracking-wide font-mono"> Calculating days... ⏳ </div> </div> <div class="space-y-3"> <button onclick="copyItinerary()" class="w-full py-3.5 px-6 bg-white hover:bg-pink-50 border-2 border-pink-300 text-pink-600 font-bold rounded-2xl shadow-sm transition active:scale-95 flex items-center justify-center gap-2"> <span>📋 Copy Itinerary Details</span> </button> <button onclick="retriggerConfetti()" class="w-full py-3 px-6 bg-pink-100 hover:bg-pink-200 text-pink-700 font-bold rounded-2xl transition active:scale-95 flex items-center justify-center gap-2 text-sm"> <span>✨ More Confetti & Hearts!</span> </button> </div> <p class="text-xs text-gray-400 mt-5">Can't wait for Oct 24–26! 💕</p> </section> </main> <script> let currentStage = 1; const totalStages = 13; let collectedBribes = 0; let selectedItems = []; let dodgeCount = 0; let yesButtonScale = 1; let scanInterval = null; let scanProgress = 0; const dodgePhrases = [ "Dip, nice try! 😜", "No is not installed! 🏃‍♂️", "YES is mandatory! ✨", "Nope, too slow! 🌸", "Think again Dip! 💖", "Error: 'No' disabled! 🙅‍♂️", "Almost, but NOPE! 🙈", "You have to press YES! 👉" ]; function updateProgress(stageNum) { const fill = document.getElementById('progress-bar-fill'); const text = document.getElementById('progress-text'); const pct = Math.round((stageNum / totalStages) * 100); fill.style.width = `${pct}%`; text.textContent = `${stageNum} / ${totalStages}`; } // Web Audio Synthesizer function playSound(type) { try { const ctx = new (window.AudioContext || window.webkitAudioContext)(); if (ctx.state === 'suspended') ctx.resume(); const osc = ctx.createOscillator(); const gain = ctx.createGain(); osc.connect(gain); gain.connect(ctx.destination); const now = ctx.currentTime; if (type === 'drone') { osc.type = 'sawtooth'; osc.frequency.setValueAtTime(110, now); osc.frequency.exponentialRampToValueAtTime(55, now + 0.5); gain.gain.setValueAtTime(0.3, now); gain.gain.linearRampToValueAtTime(0.01, now + 0.5); osc.start(now); osc.stop(now + 0.5); } else if (type === 'jumpscare') { osc.type = 'square'; osc.frequency.setValueAtTime(800, now); osc.frequency.linearRampToValueAtTime(150, now + 0.35); gain.gain.setValueAtTime(0.4, now); gain.gain.linearRampToValueAtTime(0.01, now + 0.35); osc.start(now); osc.stop(now + 0.35); } else if (type === 'pop') { osc.type = 'sine'; osc.frequency.setValueAtTime(450, now); osc.frequency.exponentialRampToValueAtTime(900, now + 0.12); gain.gain.setValueAtTime(0.3, now); gain.gain.linearRampToValueAtTime(0.01, now + 0.12); osc.start(now); osc.stop(now + 0.12); } else if (type === 'dodge') { osc.type = 'triangle'; osc.frequency.setValueAtTime(650, now); osc.frequency.exponentialRampToValueAtTime(200, now + 0.15); gain.gain.setValueAtTime(0.2, now); gain.gain.linearRampToValueAtTime(0.01, now + 0.15); osc.start(now); osc.stop(now + 0.15); } else if (type === 'victory') { const notes = [523.25, 659.25, 783.99, 1046.50]; notes.forEach((freq, idx) => { const noteOsc = ctx.createOscillator(); const noteGain = ctx.createGain(); noteOsc.type = 'sine'; noteOsc.frequency.setValueAtTime(freq, now + idx * 0.1); noteGain.gain.setValueAtTime(0.3, now + idx * 0.1); noteGain.gain.exponentialRampToValueAtTime(0.001, now + idx * 0.1 + 0.35); noteOsc.connect(noteGain); noteOsc.connect(ctx.destination); noteOsc.start(now + idx * 0.1); noteOsc.stop(now + idx * 0.1 + 0.35); }); } } catch (e) { console.log("Audio not supported or blocked", e); } } function goToStage(stageNum, soundType = 'pop') { if (soundType) playSound(soundType); const currEl = document.getElementById(`stage-${currentStage}`); const nextEl = document.getElementById(`stage-${stageNum}`); currEl.classList.add('opacity-0', 'scale-95'); setTimeout(() => { currEl.classList.add('hidden'); nextEl.classList.remove('hidden'); void nextEl.offsetWidth; nextEl.classList.remove('opacity-0', 'scale-95'); nextEl.classList.add('opacity-100', 'scale-100'); currentStage = stageNum; updateProgress(stageNum); }, 300); } function triggerJumpscare() { playSound('jumpscare'); document.getElementById('main-body').classList.add('animate-glitch'); setTimeout(() => { document.getElementById('main-body').classList.remove('animate-glitch'); }, 450); goToStage(5, null); } function switchToCuteMode() { playSound('pop'); document.getElementById('main-body').classList.add('cute-mode'); document.getElementById('cute-bg-decor').classList.remove('opacity-0'); document.getElementById('cute-bg-decor').classList.add('opacity-100'); goToStage(6, 'pop'); } function wrongAnswerRiddle(btn) { playSound('dodge'); btn.classList.add('bg-red-100', 'border-red-300'); document.getElementById('riddle-error').classList.remove('opacity-0'); } function collectBribe(btn) { if (btn.classList.contains('collected')) return; playSound('pop'); btn.classList.add('collected', 'bg-pink-100', 'border-pink-300', 'scale-95', 'pointer-events-none'); collectedBribes++; const nextBtn = document.getElementById('bribe-next-btn'); nextBtn.textContent = `Collect All Treats (${collectedBribes}/4) ✨`; if (collectedBribes >= 4) { nextBtn.disabled = false; nextBtn.className = "w-full py-3.5 px-6 bg-gradient-to-r from-amber-400 to-pink-400 text-white font-extrabold rounded-2xl shadow-lg animate-pulse-glow cursor-pointer"; nextBtn.textContent = "All Treats Unlocked! Next Stage ➡️"; } } // Toggle Packing Items (Strict 5 items selection) function togglePackItem(btn, emoji, name) { playSound('pop'); const itemKey = `${emoji} ${name}`; const idx = selectedItems.indexOf(itemKey); if (idx > -1) { // Deselect item selectedItems.splice(idx, 1); btn.classList.remove('border-pink-500', 'bg-pink-100', 'ring-2', 'ring-pink-300'); } else { // Check if already 5 items packed if (selectedItems.length >= 5) { playSound('dodge'); const packInstruction = document.getElementById('pack-instruction'); packInstruction.textContent = "⚠️ Limit reached! Deselect an item to swap!"; packInstruction.className = "text-xs text-red-500 font-bold mb-3 animate-bounce"; setTimeout(() => { packInstruction.textContent = "You MUST pick EXACTLY 5 essential items from 15 below:"; packInstruction.className = "text-xs text-pink-600 font-bold mb-3"; }, 2000); return; } // Select item selectedItems.push(itemKey); btn.classList.add('border-pink-500', 'bg-pink-100', 'ring-2', 'ring-pink-300'); } renderSuitcase(); } function renderSuitcase() { const suitcase = document.getElementById('suitcase'); const emptyHint = document.getElementById('suitcase-empty'); const counter = document.getElementById('pack-counter'); const nextBtn = document.getElementById('pack-next-btn'); suitcase.innerHTML = ''; if (selectedItems.length === 0) { suitcase.appendChild(emptyHint); emptyHint.style.display = 'block'; } else { selectedItems.forEach(itemStr => { const tag = document.createElement('div'); tag.className = "bg-white px-2 py-0.5 rounded-full shadow-sm text-[11px] font-bold text-pink-600 flex items-center gap-1 border border-pink-200 animate-wiggle"; tag.innerHTML = `<span>${itemStr}</span>`; suitcase.appendChild(tag); }); } counter.textContent = `Selected: ${selectedItems.length} / 5 🧳`; if (selectedItems.length === 5) { nextBtn.disabled = false; nextBtn.className = "w-full py-3.5 px-6 bg-gradient-to-r from-pink-400 to-purple-400 text-white font-extrabold rounded-2xl shadow-lg animate-pulse-glow cursor-pointer"; nextBtn.textContent = "Suitcase Packed with 5 Items! Ready! 🔒"; } else { nextBtn.disabled = true; nextBtn.className = "w-full py-3.5 px-6 bg-gray-200 text-gray-400 font-bold rounded-2xl transition cursor-not-allowed"; nextBtn.textContent = `Select Exactly 5 Items (${selectedItems.length}/5)`; } } function verifyPasscode() { const input = document.getElementById('passcode-input').value.trim().toUpperCase(); if (input === 'DIP') { playSound('pop'); goToStage(11, 'pop'); } else { playSound('dodge'); document.getElementById('passcode-error').classList.remove('opacity-0'); } } function startHeartScan(e) { if (e) e.preventDefault(); scanProgress = 0; const progressEl = document.getElementById('scan-progress'); const statusEl = document.getElementById('scan-status'); scanInterval = setInterval(() => { scanProgress += 10; progressEl.style.height = `${scanProgress}%`; statusEl.textContent = `Scanning heart rate... ${60 + scanProgress} BPM`; if (scanProgress >= 100) { clearInterval(scanInterval); statusEl.textContent = "120 BPM DETECTED! Target Dip is super excited! 💕"; playSound('victory'); setTimeout(() => { goToStage(12, 'pop'); }, 1000); } }, 150); } function endHeartScan() { if (scanProgress < 100) { clearInterval(scanInterval); document.getElementById('scan-progress').style.height = '0%'; document.getElementById('scan-status').textContent = "Scan canceled! Hold thumb longer!"; } } function dodgeNoButton(e) { if (e) e.preventDefault(); playSound('dodge'); dodgeCount++; const noBtn = document.getElementById('no-btn'); const yesBtn = document.getElementById('yes-btn'); const maxX = Math.min(window.innerWidth - 120, 240); const maxY = 150; const randomX = (Math.random() - 0.5) * maxX; const randomY = (Math.random() - 0.5) * maxY; const currentScale = Math.max(0.55, 1 - dodgeCount * 0.05); noBtn.style.transform = `translate(${randomX}px, ${randomY}px) scale(${currentScale})`; yesButtonScale += 0.09; yesBtn.style.transform = `scale(${yesButtonScale})`; showTeasingToast(); } function showTeasingToast() { const toastText = document.getElementById('toast-text'); const randomPhrase = dodgePhrases[Math.floor(Math.random() * dodgePhrases.length)]; toastText.textContent = randomPhrase; toastText.className = "text-xs font-bold text-pink-600 bg-pink-100 border border-pink-200 px-3 py-1 rounded-full toast-msg"; setTimeout(() => { toastText.className = "text-xs font-bold text-pink-600 bg-pink-100 border border-pink-200 px-3 py-1 rounded-full opacity-0"; }, 1400); } function acceptProposal() { playSound('victory'); goToStage(13, null); launchConfetti(); startCountdown(); } function launchConfetti() { if (typeof confetti === 'function') { const count = 200; const defaults = { origin: { y: 0.7 } }; function fire(particleRatio, opts) { confetti(Object.assign({}, defaults, opts, { particleCount: Math.floor(count * particleRatio) })); } fire(0.25, { spread: 26, startVelocity: 55, colors: ['#F472B6', '#F43F5E', '#A78BFA'] }); fire(0.2, { spread: 60, colors: ['#34D399', '#FBBF24', '#F472B6'] }); fire(0.35, { spread: 100, decay: 0.91, scalar: 0.8 }); fire(0.1, { spread: 120, startVelocity: 25, decay: 0.92, colors: ['#E879F9', '#38BDF8', '#F472B6'] }); } } function retriggerConfetti() { playSound('victory'); launchConfetti(); } function startCountdown() { const targetDate = new Date('October 24, 2026 00:00:00').getTime(); function updateTimer() { const now = new Date().getTime(); const diff = targetDate - now; if (diff <= 0) { document.getElementById('countdown-timer').textContent = "IT'S TIME FOR SHIGOAL! 🎉"; return; } const days = Math.floor(diff / (1000 * 60 * 60 * 24)); const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); document.getElementById('countdown-timer').textContent = `${days}d : ${hours}h : ${minutes}m`; } updateTimer(); setInterval(updateTimer, 60000); } function copyItinerary() { const packedListStr = selectedItems.length > 0 ? selectedItems.join(', ') : "Bikini, Saree, Lipstick, Round Comb, Random Essentials"; const details = `🌲 SHIGOAL TRIP GETAWAY FOR DIP 🌲\n📅 Dates: Oct 24 – Oct 26 (2 Nights, 3 Days)\n📝 Office Leave: Oct 25 & 26 (2 Days)\n🚗 Return: Monday, Oct 26\n🧳 Packed: ${packedListStr}\n✨ It's officially a date! 💕`; const tempInput = document.createElement('textarea'); tempInput.value = details; document.body.appendChild(tempInput); tempInput.select(); document.execCommand('copy'); document.body.removeChild(tempInput); const toastText = document.createElement('div'); toastText.className = "fixed bottom-6 left-1/2 transform -translate-x-1/2 bg-gray-800 text-white text-xs font-bold px-4 py-2 rounded-full shadow-lg z-50 animate-bounce"; toastText.textContent = "📋 Itinerary copied for Dip!"; document.body.appendChild(toastText); setTimeout(() => { toastText.remove(); }, 2200); } // Initialize progress bar on load updateProgress(1); </script> </body> </html>
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
skills/blader-humanizer#289
No description provided.