--- /dev/null
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
+
+ <title>happy 18th birthday maiaa!!</title>
+ <meta name="description" content="happy birthdaaaayyyyyy!!!">
+ <meta property="og:title" content="happy 18th birthday Maia!">
+ <meta property="og:description" content="happy birthdaaaayyyyyy!!!">
+ <meta property="og:image" content="https://tenkyuu.dev/maia.jpg">
+
+ <link rel="stylesheet" href="./styles.css">
+</head>
+<body>
+ <div id="overlay">
+ <div id="bible-verse">
+ <p><em>Psalms 20:4</em><i>(NIV)</i></p>
+ <blockquote>
+ May He give you the desire of your heart and make all your plans succeed.
+ </blockquote>
+ </div>
+ </div>
+ <div class="lightbulbs-ctn">
+ <img src="./images/bulb_red.png" width="75" alt="red bulb">
+ <img src="./images/bulb_yellow.png" width="75" alt="yellow bulb">
+ <img src="./images/bulb_green.png" width="75" alt="green bulb">
+ <img src="./images/bulb_blue.png" width="75" alt="blue bulb">
+ <img src="./images/bulb_orange.png" width="75" alt="orange bulb">
+ <img src="./images/bulb_pink.png" width="75" alt="pink bulb">
+ </div>
+ <?php include_once("./header.php");?>
+ <div id="balloon-container"></div>
+ <div class="main-wrapper">
+ <img src="./images/hbd-maia.png" alt="happy 18th birthday, maia!!!" class="hbd-text">
+ <button id="start-btn">click here for the surprise!!</button>
+ <p id="countdown"></p>
+ <div class="cake">
+ <div class="plate"></div>
+ <div class="layer layer-bottom"></div>
+ <div class="layer layer-middle"></div>
+ <div class="layer layer-top"></div>
+ <div class="icing"></div>
+ <div class="drip drip1"></div>
+ <div class="drip drip2"></div>
+ <div class="drip drip3"></div>
+ <div class="candle">
+ <div class="flame"></div>
+ </div>
+ </div>
+ </div>
+ <audio id="bg-music" src="./happy-birthday.mp3" autoplay loop></audio>
+ <script src="./script.js"></script>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+const balloonContainer = document.getElementById("balloon-container");
+const startBtn = document.getElementById("start-btn");
+
+function random(num) {
+ return Math.floor(Math.random() * num);
+}
+
+function getRandomStyles() {
+ var r = random(255);
+ var g = random(255);
+ var b = random(255);
+ var mt = random(200);
+ var ml = random(50);
+ var dur = random(5) + 5;
+ return `
+ background-color: rgba(${r},${g},${b},0.7);
+ color: rgba(${r},${g},${b},0.7);
+ box-shadow: inset -7px -3px 10px rgba(${r - 10},${g - 10},${b - 10},0.7);
+ margin: ${mt}px 0 0 ${ml}px;
+ animation: float ${dur}s ease-in infinite
+ `;
+}
+
+function createBalloons(num) {
+ for (var i = num; i > 0; i--) {
+ var balloon = document.createElement("div");
+ balloon.className = "balloon";
+ balloon.style.cssText = getRandomStyles();
+ balloonContainer.append(balloon);
+ }
+}
+
+function removeBalloons() {
+ balloonContainer.style.opacity = 0;
+ setTimeout(() => {
+ balloonContainer.remove()
+ }, 500)
+}
+
+function showBibleVerse() {
+ const bibleVerse = document.getElementById("bible-verse");
+ bibleVerse.style.display = "block";
+ setTimeout(() => {
+ bibleVerse.style.opacity = 1;
+ }, 100);
+}
+
+startBtn.addEventListener('click', () => {
+ const countdownEl = document.getElementById("countdown");
+ const flameEl = document.querySelector(".flame");
+ const overlay = document.getElementById("overlay");
+
+ startBtn.style.display = "none";
+ countdownEl.textContent = "magbibilang ako, tapos hipan mo yung cake mo Maia HAHAHA";
+ const countdownSteps = ["3", "2", "1", "Blow!"];
+ let index = 0;
+
+ setTimeout(() => {
+ const interval = setInterval(() => {
+ if (index < countdownSteps.length) {
+ countdownEl.textContent = countdownSteps[index];
+ index++;
+ } else {
+ flameEl.style.display = "none";
+ countdownEl.style.display = "none";
+ clearInterval(interval);
+ overlay.style.opacity = 1;
+ overlay.style.pointerEvents = "unset";
+ showBibleVerse();
+ }
+ }, 1000);
+ }, 5000);
+});
+
+window.addEventListener("load", () => {
+ createBalloons(30)
+});
+
+window.addEventListener("click", () => {
+ removeBalloons();
+});
\ No newline at end of file
--- /dev/null
+:root{
+ --vanilla: #f0e4d0;
+ --chocolate: #553c13;
+}
+*, ::before, ::after{
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+html{
+ font-family: 'Times New Roman', Times, serif;
+}
+body{
+ height: 100%;
+ width: 100vw;
+ background-color: #f699cd;
+ animation-name: color-change;
+ animation-duration: 15s;
+ animation-iteration-count: infinite;
+}
+.lightbulbs-ctn{
+ display: flex;
+ justify-content: space-around;
+}
+.main-wrapper{
+ height: 100%;
+ width: 100%;
+ max-width: 700px;
+ margin: 0 auto;
+ z-index: -1;
+}
+#bible-verse{
+ display: none;
+ opacity: 0;
+ width: 90%;
+ max-width: 600px;
+ z-index: 999;
+ color: #ffffff;
+ transition: opacity 5s ease-in-out;
+}
+#bible-verse > p{
+ font-size: 20px;
+}
+#bible-verse > blockquote{
+ font-size: 16px;
+}
+#overlay{
+ position: fixed;
+ height: 100vh;
+ width: 100vw;
+ background-color: black;
+ pointer-events: none;
+ opacity: 0;
+ z-index: 99;
+ transition: opacity 0.2s;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+.hbd-text{
+ display: block;
+ margin: auto;
+ margin-top: 75px;
+ width: 100%;
+ max-width: 650px;
+}
+#start-btn{
+ display: block;
+ margin: auto;
+ padding: 3px 7px;
+}
+#countdown{
+ text-align: center;
+ font-size: 18px;
+ margin-bottom: 20px;
+}
+.cake {
+ position: absolute;
+ width: 250px;
+ height: 200px;
+ top: 50%;
+ left: 50%;
+ margin-top: -40px;
+ margin-left: -125px;
+ z-index: -1;
+}
+.plate {
+ width: 270px;
+ height: 110px;
+ position: absolute;
+ bottom: -10px;
+ left: -10px;
+ background-color: #ccc;
+ border-radius: 50%;
+ box-shadow:
+ 0 2px 0 #b3b3b3,
+ 0 4px 0 #b3b3b3,
+ 0 5px 40px rgba(0, 0, 0, 0.5);
+}
+.cake > * {
+ position: absolute;
+}
+.layer {
+ position: absolute;
+ display: block;
+ width: 250px;
+ height: 100px;
+ border-radius: 50%;
+ background-color: #8B4513;
+ box-shadow:
+ 0 2px 0 #995c33,
+ 0 4px 0 #7a3c11,
+ 0 6px 0 #783a10,
+ 0 8px 0 #76380f,
+ 0 10px 0 #74360e,
+ 0 12px 0 #72340d,
+ 0 14px 0 #70320c,
+ 0 16px 0 #6e300b,
+ 0 18px 0 #6c2e0a,
+ 0 20px 0 #6a2c09,
+ 0 22px 0 #682a08,
+ 0 24px 0 #662807,
+ 0 26px 0 #642606,
+ 0 28px 0 #622405,
+ 0 30px 0 #602204;
+}
+.layer-top { top: 0px; }
+.layer-middle { top: 33px; }
+.layer-bottom { top: 66px; }
+.icing {
+ top: 2px;
+ left: 5px;
+ background-color: #f3e5ab;
+ width: 240px;
+ height: 90px;
+ border-radius: 50%;
+}
+.icing::before {
+ content: "";
+ position: absolute;
+ top: 4px;
+ right: 5px;
+ bottom: 6px;
+ left: 5px;
+ background-color: #f6eab9;
+ box-shadow:
+ 0 0 4px #f9f0c6,
+ 0 0 4px #f9f0c6,
+ 0 0 4px #f9f0c6;
+ border-radius: 50%;
+ z-index: 1;
+}
+.drip {
+ display: block;
+ width: 50px;
+ height: 60px;
+ border-bottom-left-radius: 25px;
+ border-bottom-right-radius: 25px;
+ background-color: #f3e5ab;
+}
+.drip1 {
+ top: 53px;
+ left: 5px;
+ transform: skewY(15deg);
+ height: 48px;
+ width: 40px;
+}
+.drip2 {
+ top: 69px;
+ left: 181px;
+ transform: skewY(-15deg);
+}
+.drip3 {
+ top: 54px;
+ left: 90px;
+ width: 80px;
+ border-bottom-left-radius: 40px;
+ border-bottom-right-radius: 40px;
+}
+.candle {
+ background-color: #7B020B;
+ width: 16px;
+ height: 50px;
+ border-radius: 8px / 4px;
+ top: -20px;
+ left: 50%;
+ margin-left: -8px;
+ z-index: 10;
+}
+.candle::before {
+ content: "";
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 16px;
+ height: 8px;
+ border-radius: 50%;
+ background-color: #8f1c24;
+}
+.flame {
+ position: absolute;
+ background-color: orange;
+ width: 15px;
+ height: 35px;
+ border-radius: 10px 10px 10px 10px / 25px 25px 10px 10px;
+ top: -34px;
+ left: 50%;
+ margin-left: -7.5px;
+ z-index: 10;
+ box-shadow:
+ 0 0 10px rgba(255, 165, 0, 0.5),
+ 0 0 20px rgba(255, 165, 0, 0.5),
+ 0 0 60px rgba(255, 165, 0, 0.5),
+ 0 0 80px rgba(255, 165, 0, 0.5);
+ transform-origin: 50% 90%;
+ animation: flicker 1s ease-in-out alternate infinite;
+}
+#balloon-container {
+ position: absolute;
+ height: 100vh;
+ padding: 1em;
+ box-sizing: border-box;
+ display: flex;
+ flex-wrap: wrap;
+ overflow: hidden;
+ transition: opacity 500ms;
+}
+.balloon {
+ height: 125px;
+ width: 105px;
+ border-radius: 75% 75% 70% 70%;
+ position: relative;
+}
+.balloon:before {
+ content: "";
+ height: 75px;
+ width: 1px;
+ padding: 1px;
+ background-color: #FDFD96;
+ display: block;
+ position: absolute;
+ top: 125px;
+ left: 0;
+ right: 0;
+ margin: auto;
+}
+.balloon:after {
+ content: "▲";
+ text-align: center;
+ display: block;
+ position: absolute;
+ color: inherit;
+ top: 120px;
+ left: 0;
+ right: 0;
+ margin: auto;
+}
+
+
+
+
+/* keyframes */
+@keyframes color-change{
+ 0%{background-color: #f699cd;}
+ 20%{background-color: #fd5da8;}
+ 40%{background-color: #f26b8a;}
+ 60%{background-color: #f25278;}
+ 80%{background-color: #fc94af;}
+ 100%{background-color: #f699cd;}
+}
+@keyframes flicker {
+ 0% {
+ transform: skewX(5deg);
+ box-shadow:
+ 0 0 10px rgba(255, 165, 0, 0.2),
+ 0 0 20px rgba(255, 165, 0, 0.2),
+ 0 0 60px rgba(255, 165, 0, 0.2),
+ 0 0 80px rgba(255, 165, 0, 0.2);
+ }
+ 25% {
+ transform: skewX(-5deg);
+ box-shadow:
+ 0 0 10px rgba(255, 165, 0, 0.5),
+ 0 0 20px rgba(255, 165, 0, 0.5),
+ 0 0 60px rgba(255, 165, 0, 0.5),
+ 0 0 80px rgba(255, 165, 0, 0.5);
+ }
+ 50% {
+ transform: skewX(10deg);
+ box-shadow:
+ 0 0 10px rgba(255, 165, 0, 0.3),
+ 0 0 20px rgba(255, 165, 0, 0.3),
+ 0 0 60px rgba(255, 165, 0, 0.3),
+ 0 0 80px rgba(255, 165, 0, 0.3);
+ }
+ 75% {
+ transform: skewX(-10deg);
+ box-shadow:
+ 0 0 10px rgba(255, 165, 0, 0.4),
+ 0 0 20px rgba(255, 165, 0, 0.4),
+ 0 0 60px rgba(255, 165, 0, 0.4),
+ 0 0 80px rgba(255, 165, 0, 0.4);
+ }
+ 100% {
+ transform: skewX(5deg);
+ box-shadow:
+ 0 0 10px rgba(255, 165, 0, 0.5),
+ 0 0 20px rgba(255, 165, 0, 0.5),
+ 0 0 60px rgba(255, 165, 0, 0.5),
+ 0 0 80px rgba(255, 165, 0, 0.5);
+ }
+}
+@keyframes float {
+ from {transform: translateY(100vh);
+ opacity: 1;}
+ to {transform: translateY(-300vh);
+ opacity: 0;}
+}
\ No newline at end of file