Spaces:
Running
Running
Upload 7 files
Browse files- .gitattributes +3 -0
- Racing F1 GIF by Hello Kitty.gif +3 -0
- Sticker by Hello Kitty.gif +3 -0
- index.html +80 -19
- script.js +73 -0
- style.css +58 -28
- sys_asset_01.jpeg +3 -0
- sys_asset_02.jpeg +0 -0
.gitattributes
CHANGED
|
@@ -33,3 +33,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
Racing[[:space:]]F1[[:space:]]GIF[[:space:]]by[[:space:]]Hello[[:space:]]Kitty.gif filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
Sticker[[:space:]]by[[:space:]]Hello[[:space:]]Kitty.gif filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
sys_asset_01.jpeg filter=lfs diff=lfs merge=lfs -text
|
Racing F1 GIF by Hello Kitty.gif
ADDED
|
Git LFS Details
|
Sticker by Hello Kitty.gif
ADDED
|
Git LFS Details
|
index.html
CHANGED
|
@@ -1,19 +1,80 @@
|
|
| 1 |
-
<!
|
| 2 |
-
<html>
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html lang="en">
|
| 3 |
+
<head>
|
| 4 |
+
<meta charset="UTF-8">
|
| 5 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| 6 |
+
<title>Eesha's Vault ✨</title>
|
| 7 |
+
<link rel="stylesheet" href="style.css">
|
| 8 |
+
</head>
|
| 9 |
+
<body>
|
| 10 |
+
<div id="app">
|
| 11 |
+
<section id="terminal" class="page active">
|
| 12 |
+
<div class="terminal-box">
|
| 13 |
+
<p id="typewriter"></p>
|
| 14 |
+
<button id="start-btn" class="hidden" onclick="nextSection('welcome')">Unlock the Magic ✨</button>
|
| 15 |
+
</div>
|
| 16 |
+
</section>
|
| 17 |
+
|
| 18 |
+
<section id="welcome" class="page hidden">
|
| 19 |
+
<div class="glass-card">
|
| 20 |
+
<h2 class="neon-text">TO MY BESTIE ❤️</h2>
|
| 21 |
+
<img src="sys_asset_01.jpeg" id="main-photo" alt="Special memory gallery for Eesha" class="profile-img" onclick="changePhoto()">
|
| 22 |
+
<p class="special-msg">"Eesha, you're the main character of this story!"</p>
|
| 23 |
+
<p class="tap-hint">Tap the photo to see our memories... ✨</p>
|
| 24 |
+
<button class="pink-btn" onclick="nextSection('game')">Ready to Play? →</button>
|
| 25 |
+
</div>
|
| 26 |
+
</section>
|
| 27 |
+
|
| 28 |
+
<section id="game" class="page hidden">
|
| 29 |
+
<div class="glass-card">
|
| 30 |
+
<h3 class="neon-text">Catch 10 Kitties!</h3>
|
| 31 |
+
<div class="score">Power Level: <span id="count">0</span>/10</div>
|
| 32 |
+
<div id="game-area">
|
| 33 |
+
<img src="Sticker by Hello Kitty.gif" id="target" alt="Floating kitty game target" onclick="catchKitty()">
|
| 34 |
+
</div>
|
| 35 |
+
</div>
|
| 36 |
+
</section>
|
| 37 |
+
|
| 38 |
+
<section id="gallery" class="page hidden">
|
| 39 |
+
<div class="glass-card">
|
| 40 |
+
<h2 class="neon-text">Achievement Unlocked!</h2>
|
| 41 |
+
<div class="photo-stack">
|
| 42 |
+
<img src="Racing F1 GIF by Hello Kitty.gif" alt="F1 Racing Kitty celebration" class="gallery-gif">
|
| 43 |
+
</div>
|
| 44 |
+
<button class="pink-btn" onclick="nextSection('stats')">View Bestie Stats →</button>
|
| 45 |
+
</div>
|
| 46 |
+
</section>
|
| 47 |
+
|
| 48 |
+
<section id="stats" class="page hidden">
|
| 49 |
+
<div class="glass-card">
|
| 50 |
+
<h2 class="neon-text">FRIENDSHIP ANALYTICS 📈</h2>
|
| 51 |
+
<div class="stats-grid">
|
| 52 |
+
<div class="stat-item"><span class="stat-label">Vibe Match</span><span class="stat-value">100%</span></div>
|
| 53 |
+
<div class="stat-item"><span class="stat-label">Secrets Kept</span><span class="stat-value">∞</span></div>
|
| 54 |
+
</div>
|
| 55 |
+
<button class="pink-btn" onclick="nextSection('cake-page')">Got a Surprise? 🎂</button>
|
| 56 |
+
</div>
|
| 57 |
+
</section>
|
| 58 |
+
|
| 59 |
+
<section id="cake-page" class="page hidden">
|
| 60 |
+
<div class="glass-card">
|
| 61 |
+
<h2 class="neon-text">A TREAT FOR YOU! 🎂</h2>
|
| 62 |
+
<div class="cake-container" onclick="cutCake()" role="button" aria-label="Click to cut the cake">
|
| 63 |
+
<div id="cake-left" class="cake-half left">
|
| 64 |
+
<div class="topping cherry"></div>
|
| 65 |
+
<div class="sprinkles"></div>
|
| 66 |
+
</div>
|
| 67 |
+
<div id="cake-right" class="cake-half right">
|
| 68 |
+
<div class="topping cherry"></div>
|
| 69 |
+
<div class="sprinkles"></div>
|
| 70 |
+
</div>
|
| 71 |
+
<div id="knife" class="knife"></div>
|
| 72 |
+
</div>
|
| 73 |
+
<p id="cake-msg" class="special-msg">Click the cake to cut a slice for Eesha!</p>
|
| 74 |
+
<button class="pink-btn hidden" id="final-btn" onclick="location.reload()">Best Friends Forever ❤️</button>
|
| 75 |
+
</div>
|
| 76 |
+
</section>
|
| 77 |
+
</div>
|
| 78 |
+
<script src="script.js"></script>
|
| 79 |
+
</body>
|
| 80 |
+
</html>
|
script.js
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Data Arrays - Filenames must match your folder exactly
|
| 2 |
+
const photos = ["sys_asset_01.jpeg", "sys_asset_02.jpeg"];
|
| 3 |
+
const messages = [
|
| 4 |
+
"Hey Eesha ✨",
|
| 5 |
+
"You’re something special.",
|
| 6 |
+
"Every memory hits different.",
|
| 7 |
+
"Pure vibes only.",
|
| 8 |
+
"You’re irreplaceable.",
|
| 9 |
+
"Ready for our world?"
|
| 10 |
+
];
|
| 11 |
+
|
| 12 |
+
let currentPhotoIdx = 0, lineIdx = 0, charIdx = 0;
|
| 13 |
+
|
| 14 |
+
// Security: Disable right-click
|
| 15 |
+
document.addEventListener('contextmenu', event => event.preventDefault());
|
| 16 |
+
|
| 17 |
+
function typeWriter() {
|
| 18 |
+
const terminal = document.getElementById("typewriter");
|
| 19 |
+
if (lineIdx < messages.length) {
|
| 20 |
+
if (charIdx === 0) terminal.innerHTML += "> ";
|
| 21 |
+
if (charIdx < messages[lineIdx].length) {
|
| 22 |
+
terminal.innerHTML += messages[lineIdx].charAt(charIdx);
|
| 23 |
+
charIdx++;
|
| 24 |
+
setTimeout(typeWriter, 40);
|
| 25 |
+
} else {
|
| 26 |
+
terminal.innerHTML += "<br>";
|
| 27 |
+
lineIdx++; charIdx = 0; setTimeout(typeWriter, 600);
|
| 28 |
+
}
|
| 29 |
+
} else {
|
| 30 |
+
document.getElementById("start-btn").classList.remove("hidden");
|
| 31 |
+
}
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
function changePhoto() {
|
| 35 |
+
currentPhotoIdx = (currentPhotoIdx + 1) % photos.length;
|
| 36 |
+
document.getElementById("main-photo").src = photos[currentPhotoIdx];
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
function nextSection(id) {
|
| 40 |
+
document.querySelectorAll('.page').forEach(p => p.classList.add('hidden'));
|
| 41 |
+
document.getElementById(id).classList.remove('hidden');
|
| 42 |
+
if(id === 'game') moveTarget();
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
let score = 0;
|
| 46 |
+
function catchKitty() {
|
| 47 |
+
score++;
|
| 48 |
+
document.getElementById("count").innerText = score;
|
| 49 |
+
if (score >= 10) nextSection('gallery');
|
| 50 |
+
else moveTarget();
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
function moveTarget() {
|
| 54 |
+
const target = document.getElementById("target");
|
| 55 |
+
target.style.left = Math.random() * 240 + "px";
|
| 56 |
+
target.style.top = Math.random() * 190 + "px";
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
function cutCake() {
|
| 60 |
+
const knife = document.getElementById('knife');
|
| 61 |
+
knife.style.opacity = "1";
|
| 62 |
+
knife.style.top = "20px";
|
| 63 |
+
setTimeout(() => {
|
| 64 |
+
document.getElementById('cake-left').style.transform = "translateX(-35px) rotate(-10deg)";
|
| 65 |
+
document.getElementById('cake-right').style.transform = "translateX(35px) rotate(10deg)";
|
| 66 |
+
document.getElementById('cake-msg').innerText = "Perfectly cut for Eesha! 🍰";
|
| 67 |
+
document.getElementById('final-btn').classList.remove('hidden');
|
| 68 |
+
knife.style.opacity = "0";
|
| 69 |
+
}, 500);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
// CRITICAL: Starts the animation when the window loads
|
| 73 |
+
window.onload = typeWriter;
|
style.css
CHANGED
|
@@ -1,28 +1,58 @@
|
|
| 1 |
-
|
| 2 |
-
|
| 3 |
-
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
:root {
|
| 2 |
+
--deep-purple: #1a1a2e;
|
| 3 |
+
--sunset-pink: #ff007f;
|
| 4 |
+
--midnight: #2d1b4e;
|
| 5 |
+
--neon-purple: #bc13fe;
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
body {
|
| 9 |
+
background: linear-gradient(135deg, var(--deep-purple) 0%, var(--midnight) 50%, var(--sunset-pink) 100%);
|
| 10 |
+
margin: 0; font-family: 'Segoe UI', sans-serif; color: white; height: 100vh; overflow: hidden;
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
.page { position: fixed; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; flex-direction: column; }
|
| 14 |
+
.hidden { display: none !important; }
|
| 15 |
+
|
| 16 |
+
/* Privacy & Interaction Fixes */
|
| 17 |
+
img {
|
| 18 |
+
-webkit-user-drag: none; /* Webkit drag prevention */
|
| 19 |
+
-webkit-user-select: none; /* Required for Safari - Fixes red error */
|
| 20 |
+
-ms-user-select: none;
|
| 21 |
+
user-select: none;
|
| 22 |
+
pointer-events: none;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
#main-photo, #target, button, .cake-container {
|
| 26 |
+
pointer-events: auto !important;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
/* Glassmorphism Fix for Safari */
|
| 30 |
+
.glass-card {
|
| 31 |
+
background: rgba(255, 255, 255, 0.05);
|
| 32 |
+
-webkit-backdrop-filter: blur(15px); /* Fixes Safari glass effect */
|
| 33 |
+
backdrop-filter: blur(15px);
|
| 34 |
+
border: 1px solid rgba(255, 255, 255, 0.1); padding: 30px; border-radius: 25px; text-align: center; width: 85%; max-width: 400px;
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
.neon-text { text-shadow: 0 0 10px var(--sunset-pink), 0 0 20px var(--neon-purple); }
|
| 38 |
+
.profile-img { width: 100%; max-height: 400px; object-fit: cover; border-radius: 15px; border: 3px solid var(--sunset-pink); margin: 20px 0; cursor: pointer; }
|
| 39 |
+
|
| 40 |
+
button { background: linear-gradient(45deg, var(--sunset-pink), var(--neon-purple)); color: white; border: none; padding: 14px 32px; border-radius: 50px; font-weight: bold; cursor: pointer; margin-top: 10px; }
|
| 41 |
+
|
| 42 |
+
/* Cake & Stats Styling */
|
| 43 |
+
.cake-container { position: relative; width: 200px; height: 150px; margin: 40px auto; display: flex; cursor: pointer; }
|
| 44 |
+
.cake-half { width: 100px; height: 100px; background: #ff69b4; border: 3px solid white; position: relative; transition: transform 0.8s ease; }
|
| 45 |
+
.left { border-radius: 100px 0 0 100px; }
|
| 46 |
+
.right { border-radius: 0 100px 100px 0; }
|
| 47 |
+
.topping.cherry { width: 20px; height: 20px; background: red; border-radius: 50%; position: absolute; top: -10px; left: 40px; border: 2px solid white; }
|
| 48 |
+
.sprinkles { width: 100%; height: 100%; position: absolute; background-image: radial-gradient(white 1px, transparent 1px), radial-gradient(#ffff00 1px, transparent 1px); background-size: 15px 15px; }
|
| 49 |
+
.knife { position: absolute; top: -50px; left: 45%; font-size: 2.5rem; transition: 0.5s; opacity: 0; z-index: 20; }
|
| 50 |
+
.knife::after { content: '🔪'; }
|
| 51 |
+
|
| 52 |
+
.terminal-box { font-family: 'Courier New', monospace; color: var(--sunset-pink); text-align: left; line-height: 1.6; }
|
| 53 |
+
#game-area { width: 100%; height: 250px; background: rgba(0,0,0,0.4); border-radius: 15px; position: relative; border: 2px solid var(--sunset-pink); overflow: hidden; }
|
| 54 |
+
#target { width: 50px; position: absolute; cursor: pointer; }
|
| 55 |
+
.stats-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin: 20px 0; }
|
| 56 |
+
.stat-item { background: rgba(255, 255, 255, 0.1); padding: 10px; border-radius: 10px; border: 1px solid var(--sunset-pink); }
|
| 57 |
+
.stat-label { font-size: 0.7rem; color: #ffcae3; display: block; }
|
| 58 |
+
.stat-value { font-size: 1.2rem; font-weight: bold; color: var(--sunset-pink); }
|
sys_asset_01.jpeg
ADDED
|
Git LFS Details
|
sys_asset_02.jpeg
ADDED
|