Files
valentine/index.html
T
2026-04-30 10:53:50 +03:00

151 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>💝 С Днём Святого Валентина, Александра!</title>
<meta property="og:title" content="💝 Для тебя, Александра">
<meta property="og:description" content="С Днём Святого Валентина, любовь моя!">
<link href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,700;1,400;1,700&family=Cormorant+Garamond:ital,wght@0,300;0,400;0,600;1,300;1,400&family=Great+Vibes&display=swap" rel="stylesheet">
<style>
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
:root{--rose:#c2185b;--rose-light:#e91e63;--rose-deep:#880e4f;--gold:#d4a574;--gold-light:#e8c9a0;--cream:#fdf6f0;--blush:#fce4ec;--wine:#4a0e2b}
html{scroll-behavior:smooth}
body{font-family:'Cormorant Garamond',serif;background:var(--cream);color:var(--wine);overflow-x:hidden;cursor:url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'><text y='15' font-size='15'>💕</text></svg>") 10 10,auto}
.intro-screen{position:fixed;inset:0;z-index:1000;display:flex;flex-direction:column;align-items:center;justify-content:center;background:radial-gradient(ellipse at center,#2d0a1a 0%,#1a0510 50%,#0d020a 100%);transition:opacity 1.2s ease,transform 1.2s ease}
.intro-screen.hidden{opacity:0;transform:scale(1.1);pointer-events:none}
.intro-envelope{width:200px;height:150px;position:relative;cursor:pointer;animation:envelopeFloat 3s ease-in-out infinite;transition:transform .5s ease}
.intro-envelope:hover{transform:scale(1.1)}
.envelope-body{width:100%;height:100%;background:linear-gradient(135deg,#f8e8e0 0%,#f0d0c0 100%);border-radius:8px;position:relative;box-shadow:0 20px 60px rgba(194,24,91,.4),0 0 100px rgba(194,24,91,.2)}
.envelope-flap{position:absolute;top:0;left:0;width:100%;height:75px;background:linear-gradient(135deg,#f0d0c0,#e8c0b0);clip-path:polygon(0 0,50% 100%,100% 0);transform-origin:top center;transition:transform .8s ease;z-index:2}
.intro-envelope:hover .envelope-flap{transform:rotateX(180deg)}
.envelope-heart{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:40px;z-index:1;animation:heartPulse 1.5s ease-in-out infinite}
.intro-text{margin-top:40px;font-family:'Great Vibes',cursive;font-size:28px;color:var(--gold-light);opacity:0;animation:fadeInUp 1s ease .5s forwards;text-shadow:0 0 30px rgba(212,165,116,.5)}
.intro-hint{margin-top:16px;font-family:'Cormorant Garamond',serif;font-size:14px;color:rgba(255,255,255,.4);letter-spacing:3px;text-transform:uppercase;opacity:0;animation:fadeInUp 1s ease 1s forwards,pulse 2s ease-in-out 2s infinite}
.hearts-bg{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden}
.floating-heart{position:absolute;bottom:-50px;opacity:0;animation:floatUp linear forwards;font-size:var(--size);filter:blur(var(--blur,0px))}
.main-content{position:relative;z-index:1;opacity:0;transition:opacity 1.5s ease .5s}
.main-content.visible{opacity:1}
.hero{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px;position:relative;background:radial-gradient(ellipse at 20% 50%,rgba(252,228,236,.8) 0%,transparent 50%),radial-gradient(ellipse at 80% 50%,rgba(248,187,208,.5) 0%,transparent 50%),radial-gradient(ellipse at 50% 0%,rgba(212,165,116,.15) 0%,transparent 40%),var(--cream)}
.hero::before{content:'';position:absolute;inset:0;background:url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M30 5 C25 0, 15 0, 15 10 C15 20, 30 25, 30 25 C30 25, 45 20, 45 10 C45 0, 35 0, 30 5Z' fill='rgba(194,24,91,0.03)'/%3E%3C/svg%3E");opacity:.5}
.hero-date{font-family:'Cormorant Garamond',serif;font-size:14px;letter-spacing:6px;text-transform:uppercase;color:var(--gold);margin-bottom:30px;opacity:0;animation:fadeInUp 1s ease .3s forwards}
.hero-for{font-family:'Cormorant Garamond',serif;font-size:18px;letter-spacing:4px;text-transform:uppercase;color:var(--rose);margin-bottom:10px;opacity:0;animation:fadeInUp 1s ease .6s forwards}
.hero-name{font-family:'Great Vibes',cursive;font-size:clamp(48px,12vw,120px);color:var(--rose-deep);line-height:1.1;margin-bottom:20px;opacity:0;animation:fadeInUp 1s ease .9s forwards;text-shadow:2px 4px 8px rgba(136,14,79,.15);position:relative}
.hero-name::after{content:'♥';position:absolute;font-size:.3em;top:-10px;right:-20px;color:var(--rose-light);animation:heartPulse 2s ease-in-out infinite}
.hero-divider{width:120px;height:2px;background:linear-gradient(90deg,transparent,var(--gold),transparent);margin:20px auto;opacity:0;animation:fadeInUp 1s ease 1.2s forwards}
.hero-subtitle{font-family:'Cormorant Garamond',serif;font-size:20px;font-style:italic;color:var(--wine);opacity:0;animation:fadeInUp 1s ease 1.4s forwards;font-weight:300}
.poem-section{padding:100px 20px;display:flex;justify-content:center;position:relative;background:linear-gradient(180deg,var(--cream) 0%,var(--blush) 50%,var(--cream) 100%)}
.poem-section::before{content:'"';position:absolute;top:40px;left:50%;transform:translateX(-50%);font-family:'Playfair Display',serif;font-size:200px;color:rgba(194,24,91,.07);line-height:1}
.poem-card{max-width:600px;background:rgba(255,255,255,.7);backdrop-filter:blur(20px);border:1px solid rgba(212,165,116,.3);border-radius:20px;padding:60px 50px;text-align:center;position:relative;box-shadow:0 30px 80px rgba(136,14,79,.08);opacity:0;transform:translateY(40px);transition:all 1s ease}
.poem-card.visible{opacity:1;transform:translateY(0)}
.poem-card::before,.poem-card::after{content:'✦';position:absolute;font-size:20px;color:var(--gold);opacity:.5}
.poem-card::before{top:20px;left:30px}
.poem-card::after{bottom:20px;right:30px}
.poem-title{font-family:'Great Vibes',cursive;font-size:36px;color:var(--rose);margin-bottom:30px}
.poem-text{font-family:'Cormorant Garamond',serif;font-size:20px;line-height:2;color:var(--wine);font-weight:400;font-style:italic}
.poem-text .line{display:block;opacity:0;transform:translateY(10px);transition:all .6s ease}
.poem-text .line.visible{opacity:1;transform:translateY(0)}
.reasons-section{padding:80px 20px;max-width:800px;margin:0 auto}
.reasons-title{font-family:'Great Vibes',cursive;font-size:42px;color:var(--rose-deep);text-align:center;margin-bottom:50px}
.reason-item{display:flex;align-items:flex-start;gap:20px;margin-bottom:30px;padding:25px 30px;background:rgba(255,255,255,.6);backdrop-filter:blur(10px);border-radius:16px;border-left:3px solid var(--rose-light);opacity:0;transform:translateX(-30px);transition:all .7s ease}
.reason-item.visible{opacity:1;transform:translateX(0)}
.reason-item:nth-child(even){transform:translateX(30px);border-left:none;border-right:3px solid var(--gold)}
.reason-item:nth-child(even).visible{transform:translateX(0)}
.reason-number{font-family:'Playfair Display',serif;font-size:36px;font-weight:700;color:var(--rose-light);opacity:.4;line-height:1;min-width:40px}
.reason-text{font-family:'Cormorant Garamond',serif;font-size:19px;line-height:1.6;color:var(--wine)}
.heart-section{padding:80px 20px;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:80vh;background:radial-gradient(ellipse at center,var(--blush) 0%,var(--cream) 70%);position:relative}
.big-heart{width:300px;height:300px;position:relative;cursor:pointer;animation:heartPulse 2s ease-in-out infinite;transition:transform .3s ease;filter:drop-shadow(0 20px 40px rgba(194,24,91,.3))}
.big-heart:hover{transform:scale(1.1)}
.big-heart svg{width:100%;height:100%}
.heart-message{margin-top:40px;font-family:'Great Vibes',cursive;font-size:32px;color:var(--rose-deep);text-align:center;opacity:0;transform:translateY(20px);transition:all 1s ease}
.heart-message.visible{opacity:1;transform:translateY(0)}
.final-section{padding:100px 20px;text-align:center;background:linear-gradient(180deg,var(--cream) 0%,#2d0a1a 100%);min-height:60vh;display:flex;flex-direction:column;align-items:center;justify-content:center}
.final-text{font-family:'Cormorant Garamond',serif;font-size:22px;color:var(--wine);max-width:500px;line-height:1.8;margin-bottom:40px;opacity:0;transform:translateY(20px);transition:all 1s ease}
.final-text.visible{opacity:1;transform:translateY(0)}
.final-signature{font-family:'Great Vibes',cursive;font-size:48px;color:var(--gold-light);opacity:0;transition:all 1s ease .5s}
.final-signature.visible{opacity:1}
.final-date{margin-top:20px;font-family:'Cormorant Garamond',serif;font-size:14px;letter-spacing:4px;color:rgba(255,255,255,.3);opacity:0;transition:all 1s ease 1s}
.final-date.visible{opacity:1}
.sparkle{position:fixed;pointer-events:none;z-index:9999;font-size:20px;animation:sparkleAnim 1s ease forwards}
.music-toggle{position:fixed;bottom:20px;right:20px;z-index:100;width:50px;height:50px;border-radius:50%;border:2px solid var(--rose-light);background:rgba(255,255,255,.9);backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:20px;transition:all .3s ease;box-shadow:0 4px 15px rgba(194,24,91,.2)}
.music-toggle:hover{transform:scale(1.1);background:var(--blush)}
@keyframes envelopeFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-15px)}}
@keyframes heartPulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}}
@keyframes fadeInUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}
@keyframes pulse{0%,100%{opacity:.4}50%{opacity:.8}}
@keyframes floatUp{0%{transform:translateY(0) rotate(0deg) scale(1);opacity:0}10%{opacity:var(--opacity,.6)}90%{opacity:var(--opacity,.6)}100%{transform:translateY(-110vh) rotate(var(--rotation,360deg)) scale(var(--endScale,.5));opacity:0}}
@keyframes sparkleAnim{0%{transform:translate(-50%,-50%) scale(0) rotate(0deg);opacity:1}100%{transform:translate(-50%,-50%) scale(1.5) rotate(180deg);opacity:0}}
@media(max-width:600px){.poem-card{padding:40px 25px}.poem-text{font-size:17px}.reason-item{padding:20px;flex-direction:column;gap:10px}.big-heart{width:200px;height:200px}.hero-name{font-size:clamp(40px,15vw,80px)}}
</style>
</head>
<body>
<div class="intro-screen" id="intro">
<div class="intro-envelope" id="envelope" onclick="openValentine()">
<div class="envelope-flap"></div>
<div class="envelope-body"></div>
<div class="envelope-heart">💌</div>
</div>
<div class="intro-text">У тебя письмо...</div>
<div class="intro-hint">нажми на конверт</div>
</div>
<div class="hearts-bg" id="heartsBg"></div>
<div class="main-content" id="mainContent">
<section class="hero">
<div class="hero-date">14 февраля 2026</div>
<div class="hero-for">Моей единственной</div>
<h1 class="hero-name">Александре</h1>
<div class="hero-divider"></div>
<div class="hero-subtitle">С Днём Святого Валентина, любовь моя</div>
</section>
<section class="poem-section">
<div class="poem-card" id="poemCard">
<div class="poem-title">Для тебя</div>
<div class="poem-text">
<span class="line">Ты — мой рассвет и мой закат,</span>
<span class="line">Мой самый ценный в жизни клад.</span>
<span class="line">С тобой я — дома, ты — мой свет,</span>
<span class="line">Теплей тебя на свете нет.</span>
<span class="line">&nbsp;</span>
<span class="line">Ты — смех, что лечит от невзгод,</span>
<span class="line">Ты — сила, что меня ведёт.</span>
<span class="line">И в этот день скажу одно:</span>
<span class="line">Любить тебя — мне суждено. ♥</span>
</div>
</div>
</section>
<section class="reasons-section">
<div class="reasons-title">За что я тебя люблю</div>
<div class="reason-item" data-scroll><span class="reason-number">01</span><span class="reason-text">За твою улыбку, которая делает любой день лучше — даже самый тяжёлый понедельник</span></div>
<div class="reason-item" data-scroll><span class="reason-number">02</span><span class="reason-text">За то, что ты веришь в меня, даже когда я сам в себе сомневаюсь</span></div>
<div class="reason-item" data-scroll><span class="reason-number">03</span><span class="reason-text">За тепло твоих рук и доброту твоего сердца</span></div>
<div class="reason-item" data-scroll><span class="reason-number">04</span><span class="reason-text">За то, что рядом с тобой я становлюсь лучшей версией себя</span></div>
<div class="reason-item" data-scroll><span class="reason-number">05</span><span class="reason-text">За каждое утро, в которое я просыпаюсь рядом с тобой — это лучшее, что есть в моей жизни</span></div>
</section>
<section class="heart-section">
<div class="big-heart" id="bigHeart" onclick="heartClick()">
<svg viewBox="0 0 200 200"><defs><linearGradient id="heartGrad" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" style="stop-color:#e91e63"/><stop offset="50%" style="stop-color:#c2185b"/><stop offset="100%" style="stop-color:#880e4f"/></linearGradient><filter id="glow"><feGaussianBlur stdDeviation="3" result="blur"/><feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge></filter></defs><path d="M100 180 C60 140,0 100,0 60 C0 20,30 0,55 0 C75 0,90 15,100 30 C110 15,125 0,145 0 C170 0,200 20,200 60 C200 100,140 140,100 180Z" fill="url(#heartGrad)" filter="url(#glow)"/><text x="100" y="105" text-anchor="middle" font-family="Great Vibes,cursive" font-size="28" fill="white" opacity=".9">Люблю</text></svg>
</div>
<div class="heart-message" id="heartMsg">Нажми на сердце 💕</div>
</section>
<section class="final-section">
<div class="final-text" id="finalText">Ты — лучшее, что случилось в моей жизни.<br>Каждый день с тобой — это подарок.<br><br>Я люблю тебя больше, чем слова могут передать,<br>но я буду стараться показывать это<br>каждый день. ♥</div>
<div class="final-signature" id="finalSig">Навсегда твой ♾️</div>
<div class="final-date" id="finalDate">14 • 02 • 2026</div>
</section>
</div>
<div class="music-toggle" id="musicBtn" onclick="toggleMusic()" title="Включить музыку">🎵</div>
<script>
function openValentine(){const i=document.getElementById('intro'),m=document.getElementById('mainContent');i.classList.add('hidden');setTimeout(()=>{m.classList.add('visible');startFloatingHearts();i.style.display='none'},600)}
function startFloatingHearts(){const c=document.getElementById('heartsBg'),h=['♥','♡','❤','💕','💗','✦','♥'];function create(){const e=document.createElement('div');e.className='floating-heart';e.textContent=h[Math.floor(Math.random()*h.length)];const s=10+Math.random()*30,l=Math.random()*100,d=8+Math.random()*12,b=Math.random()>.6?Math.random()*2:0,o=.15+Math.random()*.35,r=-180+Math.random()*360;e.style.cssText=`--size:${s}px;--blur:${b}px;--opacity:${o};--rotation:${r}deg;--endScale:${.3+Math.random()*.7};left:${l}%;font-size:${s}px;color:${Math.random()>.5?'var(--rose-light)':'var(--gold)'};animation-duration:${d}s;animation-delay:0s;`;c.appendChild(e);setTimeout(()=>e.remove(),d*1000)}setInterval(create,800);for(let i=0;i<8;i++)setTimeout(create,i*300)}
const obs=new IntersectionObserver(e=>{e.forEach(en=>{if(en.isIntersecting){en.target.classList.add('visible');if(en.target.id==='poemCard'){en.target.querySelectorAll('.line').forEach((l,i)=>{setTimeout(()=>l.classList.add('visible'),i*200)})}}})},{threshold:.2});
document.querySelectorAll('.poem-card,.reason-item,.heart-message,.final-text,.final-signature,.final-date').forEach(el=>obs.observe(el));
let hc=0;const msgs=['Люблю тебя! 💕','Ты — моё всё! 💖','Навсегда вместе! 💗','Ты лучшая! 🌹','Моё сердце — твоё! ♥','Обнимаю крепко! 🤗','Целую нежно! 💋','Ты — моё счастье! ✨','Я так тебя люблю! 💝','Ты — мой мир! 🌍'];
function heartClick(){hc++;const m=document.getElementById('heartMsg');m.textContent=msgs[hc%msgs.length];m.classList.add('visible');for(let i=0;i<12;i++){setTimeout(()=>{const h=document.createElement('div');h.className='sparkle';h.textContent=['♥','💕','✨','💗','💖','🌹'][Math.floor(Math.random()*6)];const r=document.getElementById('bigHeart').getBoundingClientRect(),cx=r.left+r.width/2,cy=r.top+r.height/2,a=(Math.PI*2*i)/12,d=80+Math.random()*100;h.style.left=(cx+Math.cos(a)*d)+'px';h.style.top=(cy+Math.sin(a)*d)+'px';h.style.fontSize=(16+Math.random()*20)+'px';document.body.appendChild(h);setTimeout(()=>h.remove(),1000)},i*50)}}
document.addEventListener('click',e=>{if(e.target.closest('.intro-envelope')||e.target.closest('.big-heart')||e.target.closest('.music-toggle'))return;const sp=['✨','💕','♥','✦'];for(let i=0;i<3;i++){const s=document.createElement('div');s.className='sparkle';s.textContent=sp[Math.floor(Math.random()*sp.length)];s.style.left=(e.clientX+(Math.random()-.5)*40)+'px';s.style.top=(e.clientY+(Math.random()-.5)*40)+'px';document.body.appendChild(s);setTimeout(()=>s.remove(),1000)}});
let ac=null,mp=false,mi=null;
function toggleMusic(){const b=document.getElementById('musicBtn');if(!mp){ac=new(window.AudioContext||window.webkitAudioContext)();playMelody();b.textContent='🔇';b.title='Выключить музыку';mp=true}else{if(mi)clearInterval(mi);if(ac)ac.close();b.textContent='🎵';b.title='Включить музыку';mp=false}}
function playMelody(){const m=[{f:523.25,d:.4},{f:587.33,d:.4},{f:659.25,d:.6},{f:587.33,d:.3},{f:523.25,d:.6},{f:493.88,d:.4},{f:523.25,d:.8},{f:0,d:.3},{f:659.25,d:.4},{f:698.46,d:.4},{f:783.99,d:.6},{f:698.46,d:.3},{f:659.25,d:.6},{f:587.33,d:.4},{f:523.25,d:.8}];let t=ac.currentTime+.1;function play(){t=ac.currentTime+.1;m.forEach(n=>{if(n.f>0){const o=ac.createOscillator(),g=ac.createGain();o.type='sine';o.frequency.value=n.f;g.gain.setValueAtTime(0,t);g.gain.linearRampToValueAtTime(.08,t+.05);g.gain.exponentialRampToValueAtTime(.001,t+n.d);o.connect(g);g.connect(ac.destination);o.start(t);o.stop(t+n.d+.1)}t+=n.d})}play();const td=m.reduce((s,n)=>s+n.d,0);mi=setInterval(play,td*1000+500)}
</script>
</body>
</html>