<!
DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Te amo, mi vida</title>
<style>
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #000;
margin: 0;
font-family: 'Georgia', serif;
color: #333;
overflow: hidden;
background-image: radial-gradient(circle, #333 1px, transparent 1px);
background-size: 30px 30px;
}
.container {
position: relative;
width: 100%;
max-width: 500px;
background-color: #fff;
border-radius: 20px;
padding: 20px;
box-shadow: 0 0 20px rgba(255, 255, 255, 0.1);
overflow: hidden;
}
.heart-container {
position: relative;
width: 100%;
height: 300px;
display: flex;
justify-content: center;
align-items: center;
margin-top: 20px;
}
.tulip-container {
position: absolute;
bottom: -20px;
right: 20px;
width: 50px;
height: 100px;
z-index: 5;
}
.heart-outline {
position: relative;
width: 300px;
height: 300px;
}
.heart-outline svg {
width: 100%;
height: 100%;
}
.star {
animation: twinkle 2s infinite alternate;
}
@keyframes twinkle {
0% { opacity: 0.5; }
100% { opacity: 1; }
}
.love-message {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 80%;
text-align: center;
background-color: rgba(255, 255, 255, 0.7);
border-radius: 12px;
padding: 10px;
box-shadow: 0 0 15px rgba(255, 102, 163, 0.2);
}
.timer {
margin: 10px 0;
font-size: 1.2em;
color: #333;
}
.timer span {
font-weight: bold;
}
.love-title {
font-size: 1.2em;
margin-bottom: 10px;
color: #333;
font-family: 'Brush Script MT', cursive;
}
.love-you {
font-size: 1.5em;
font-weight: bold;
margin-top: 10px;
color: #333;
font-family: 'Brush Script MT', cursive;
animation: pulse 1.5s infinite;
}
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
.code-comments {
text-align: left;
padding: 15px;
background: #f9f9f9;
border-radius: 8px;
margin-top: 20px;
font-family: monospace;
color: #666;
white-space: pre-line;
box-shadow: 0 3px 10px rgba(0,0,0,0.1);
border-left: 4px solid #ff66a3;
}
.comment {
color: #888;
}
.code {
color: #000;
}
.function {
color: #0033cc;
}
.string {
color: #006600;
}
</style>
</head>
<body>
<div class="container">
<div class="code-comments">
<span class="comment"># Querida Evelyn, mi universo entero:
##</span>
<span class="function">def mi_promesa_eterna():</span>
<span class="code">print(</span><span class="string">"Si tuviera que vivir mil
vidas, en cada una te buscaría para enamorarme de ti otra vez."</span><span
class="code">)</span>
<span class="code">print(</span><span class="string">"Gracias por convertir mis
días grises en arcoíris y mis lágrimas en sonrisas."</span><span
class="code">)</span>
<span class="comment"># Cuando el universo me preguntó qué quería, susurré tu
nombre.</span>
<span class="code">print(</span><span class="string">"No hay palabras
suficientes para decirte que eres mi razón de despertar cada mañana."</span><span
class="code">)</span>
<span class="code">print(</span><span class="string">"Te amaré hasta que la
última estrella del cielo se apague... y después también."</span><span
class="code">)</span>
<span class="code">print(</span><span class="string">"Te amo infinitamente, mi
Evelyn ❤"</span><span class="code">)</span>
<span class="function">mi_promesa_eterna()</span>
</div>
<div class="heart-container">
<div class="heart-outline">
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
<path d="M462.3 62.6C407.5 15.9 326 24.3 275.7 76.2L256 96.5l-
19.7-20.3C186.1 24.3 104.5 15.9 49.7 62.6c-62.8 53.6-66.1 149.8-9.9 207.9l193.5
199.8c12.5 12.9 32.8 12.9 45.3 0l193.5-199.8c56.3-58.1 53-154.3-9.8-207.9z"
fill="none" stroke="#ff66a3" stroke-width="10" id="heart-path"/>
</svg>
</div>
<div class="love-message">
<div class="love-title">Me enamoré de ti hace...</div>
<div class="timer">
<span id="days">364</span> días
<span id="hours">10</span> horas
<span id="minutes">07</span> minutos
<span id="seconds">04</span> segundos
</div>
<div class="love-you">Te Amo Evelyn!</div>
</div>
<div class="tulip-container">
<svg viewBox="0 0 100 200" xmlns="http://www.w3.org/2000/svg">
<!-- Tallo del tulipán -->
<path d="M50,200 Q50,160 50,120" stroke="#008800" stroke-
width="3" fill="none"/>
<path d="M50,140 Q55,125 60,140" stroke="#008800" stroke-
width="2" fill="#006600"/>
<!-- Flor del tulipán -->
<path d="M30,120 C30,80 70,80 70,120 L50,140 Z"
fill="#ff3366"/>
<path d="M30,120 C35,100 45,90 50,90 C55,90 65,100 70,120"
stroke="#ff3366" stroke-width="1.5" fill="none"/>
<path d="M37,110 C40,95 50,90 50,90 C50,90 60,95 63,110"
stroke="#ff1a53" stroke-width="1" fill="none"/>
<animate attributeName="transform" attributeType="XML"
type="translate"
from="0 0" to="0 -5" dur="3s" repeatCount="indefinite"
additive="sum" />
</svg>
</div>
</div>
</div>
<script>
// Agregar estrellas pequeñas al contorno del corazón
const heartPath = document.getElementById('heart-path');
const pathLength = heartPath.getTotalLength();
const starCount = 40;
const svgNS = "http://www.w3.org/2000/svg";
const svg = heartPath.parentNode;
for (let i = 0; i < starCount; i++) {
const pointOnPath = heartPath.getPointAtLength(pathLength * i /
starCount);
const star = document.createElementNS(svgNS, "text");
star.setAttribute("x", pointOnPath.x);
star.setAttribute("y", pointOnPath.y);
star.setAttribute("font-size", "20");
star.setAttribute("fill", getRandomColor());
star.setAttribute("text-anchor", "middle");
star.textContent = "✦"; // Pequeña estrella
star.classList.add("star");
svg.appendChild(star);
}
function getRandomColor() {
const colors = ["#ff9999", "#ffcc99", "#ffff99", "#99ff99", "#99ffff",
"#9999ff", "#ff99ff", "#ff6b6b", "#ffd56b", "#d4fb79", "#ff85a1", "#fbb1bd",
"#c5adff"];
return colors[Math.floor(Math.random() * colors.length)];
}
// Función para actualizar el contador
function updateCounter() {
const startDate = new Date("2023-07-30"); // Fecha real de inicio de la
relación
const now = new Date();
const diff = now - startDate;
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));
const seconds = Math.floor((diff % (1000 * 60)) / 1000);
document.getElementById("days").textContent = days;
document.getElementById("hours").textContent =
hours.toString().padStart(2, '0');
document.getElementById("minutes").textContent =
minutes.toString().padStart(2, '0');
document.getElementById("seconds").textContent =
seconds.toString().padStart(2, '0');
}
// Actualizar inmediatamente y luego cada segundo
updateCounter();
setInterval(updateCounter, 1000);
</script>
</body>
</html>