hiiii
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Valentine Invitation
body {
box-sizing: border-box;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
html, body, .container {
height: 100%;
width: 100%;
}
.container {
background: linear-gradient(135deg, #FF1744 0%, #FF6B9D 50%, #FF1744 100%);
display: flex;
align-items: center;
justify-content: center;
font-family: 'Comic Sans MS', cursive, sans-serif;
overflow: auto;
position: relative;
}
.heart {
position: absolute;
font-size: 2rem;
color: rgba(255, 255, 255, 0.3);
animation: float 6s ease-in-out infinite;
}
.heart:nth-child(1) { left: 10%; top: 20%; animation-delay: 0s; }
.heart:nth-child(2) { left: 85%; top: 15%; animation-delay: 1s; font-size: 2.5rem; }
.heart:nth-child(3) { left: 20%; top: 70%; animation-delay: 2s; font-size: 1.5rem; }
.heart:nth-child(4) { left: 75%; top: 75%; animation-delay: 3s; }
.heart:nth-child(5) { left: 50%; top: 10%; animation-delay: 1.5s; font-size: 3rem; }
.heart:nth-child(6) { left: 15%; top: 45%; animation-delay: 2.5s; font-size: 2rem; }
.heart:nth-child(7) { left: 80%; top: 50%; animation-delay: 0.5s; font-size: 1.8rem; }
@keyframes float {
0%, 100% { transform: translateY(0px); }
50% { transform: translateY(-20px); }
}
.card {
background: white;
padding: 3rem 2.5rem;
border-radius: 30px;
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
text-align: center;
max-width: 500px;
width: 90%;
position: relative;
z-index: 10;
}
.question-screen, .no-screen, .yes-screen, .second-no-screen, .third-no-screen, .final-chance-screen {
display: none;
}
.question-screen.active, .no-screen.active, .yes-screen.active, .second-no-screen.active, .third-no-screen.active, .final-chance-screen.active {
display: block;
}
h1 {
color: #FF1744;
font-size: 2.5rem;
margin-bottom: 2rem;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.1);
line-height: 1.3;
}
.emoji {
font-size: 4rem;
margin-bottom: 1.5rem;
display: block;
}
.buttons {
display: flex;
gap: 1.5rem;
justify-content: center;
margin-top: 2rem;
}
button {
padding: 1rem 2.5rem;
font-size: 1.3rem;
border: none;
border-radius: 50px;
cursor: pointer;
font-weight: bold;
transition: all 0.3s ease;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2);
}
.yes-btn {
background: #FF1744;
color: white;
}
.yes-btn:hover {
background: #D50000;
transform: scale(1.05);
}
.no-btn {
background: #FFF;
color: #FF1744;
border: 3px solid #FF1744;
}
.no-btn:hover {
background: #FFE5E5;
transform: scale(1.05);
}
.no-screen p {
color: #FF1744;
font-size: 1.8rem;
margin: 2rem 0;
font-weight: bold;
}
.yes-screen p {
color: #FF1744;
font-size: 2rem;
margin: 2rem 0;
font-weight: bold;
line-height: 1.4;
}
.pulse-heart {
animation: pulse 1s ease infinite;
}
@keyframes pulse {
0%, 100% { transform: scale(1); }
50% { transform: scale(1.2); }
}
.wiggle {
animation: wiggle 0.3s ease-in-out;
}
@keyframes wiggle {
0%, 100% { transform: rotate(0deg); }
25% { transform: rotate(-10deg); }
75% { transform: rotate(10deg); }
}
.shrink-no {
animation: shrink 0.5s ease forwards;
}
@keyframes shrink {
to { transform: scale(0.7); }
}
.grow-yes {
animation: grow 0.5s ease forwards;
}
@keyframes grow {
to { transform: scale(1.3); }
}
.celebration-heart {
position: fixed;
font-size: 3rem;
pointer-events: none;
animation: celebrate 2s ease-out forwards;
z-index: 1000;
}
@keyframes celebrate {
0% {
transform: translateY(0) scale(0);
opacity: 1;
}
50% {
transform: translateY(-100px) scale(1.5);
opacity: 1;
}
100% {
transform: translateY(-200px) scale(0.5);
opacity: 0;
}
}
.shake-card {
animation: shake 0.5s ease-in-out;
}
@keyframes shake {
0%, 100% { transform: translateX(0); }
10%, 30%, 50%, 70%, 90% { transform: translateX(-10px); }
20%, 40%, 60%, 80% { transform: translateX(10px); }
}
.confetti {
position: fixed;
width: 10px;
height: 10px;
background: #FF1744;
pointer-events: none;
animation: confetti-fall 3s ease-out forwards;
z-index: 1000;
}
@keyframes confetti-fall {
0% {
transform: translateY(0) rotate(0deg);
opacity: 1;
}
100% {
transform: translateY(100vh) rotate(720deg);
opacity: 0;
}
}
@view-transition { navigation: auto; }
❤️
💕
💖
❤️
💕
💖
❤️
😤
iwo ke go and pick yes
YES! 💝 Still No
😠
You dey whine me? 😏
You know you want to say yes!
OKAY YES! 💗 Nope
🥺
Baby please na 🥺
Why you doing me like this?
FINE, YES! 💕 No
😭
Ahn ahn! 😭
Last chance o!
Say yes or I go vex!
YES YES YES! 💖
🤗
Awwww! 🥰 I knew you couldn't resist me! Now come here make I squeeze you small 😘💕
❤️💕❤️