1235 lines
40 KiB
HTML
1235 lines
40 KiB
HTML
<!doctype html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Нуртас & Аружан — Приглашение на той</title>
|
||
<meta name="description" content="Приглашение на наш особенный вечер">
|
||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@400;500;600;700&family=Montserrat:wght@300;400;500;600&display=swap" rel="stylesheet">
|
||
<style>
|
||
* { margin: 0; box-sizing: border-box; }
|
||
|
||
:root {
|
||
--bg: #0a0f0d;
|
||
--bg-card: #121a16;
|
||
--bg-input: #1a2520;
|
||
--text: #f8f5f0;
|
||
--text-muted: #a8b5ae;
|
||
--gold: #c9a962;
|
||
--gold-light: #e8d5a3;
|
||
--emerald: #1a4d3e;
|
||
--cream: #f8f5f0;
|
||
--border: #2a3a32;
|
||
}
|
||
|
||
html { scroll-behavior: smooth; }
|
||
|
||
body {
|
||
font-family: 'Montserrat', sans-serif;
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
min-height: 100vh;
|
||
line-height: 1.7;
|
||
overflow-x: hidden;
|
||
}
|
||
|
||
h1, h2, h3, h4 {
|
||
font-family: 'Cormorant Garamond', serif;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.container {
|
||
max-width: 1200px;
|
||
margin: 0 auto;
|
||
padding: 0 20px;
|
||
}
|
||
|
||
/* Music Toggle */
|
||
.music-toggle {
|
||
position: fixed;
|
||
top: 20px;
|
||
right: 20px;
|
||
width: 50px;
|
||
height: 50px;
|
||
background: rgba(10, 15, 13, 0.8);
|
||
border: 1px solid var(--gold);
|
||
border-radius: 50%;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
cursor: pointer;
|
||
z-index: 1000;
|
||
transition: all 0.3s;
|
||
backdrop-filter: blur(10px);
|
||
}
|
||
.music-toggle:hover {
|
||
background: var(--gold);
|
||
color: var(--bg);
|
||
}
|
||
.music-toggle svg {
|
||
width: 24px;
|
||
height: 24px;
|
||
fill: var(--gold);
|
||
}
|
||
.music-toggle:hover svg {
|
||
fill: var(--bg);
|
||
}
|
||
.music-playing {
|
||
animation: pulse 2s infinite;
|
||
}
|
||
@keyframes pulse {
|
||
0%, 100% { transform: scale(1); }
|
||
50% { transform: scale(1.05); }
|
||
}
|
||
|
||
/* Hero Section */
|
||
.hero {
|
||
height: 100vh;
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
justify-content: center;
|
||
text-align: center;
|
||
position: relative;
|
||
background: linear-gradient(135deg, rgba(10,15,13,0.9) 0%, rgba(26,77,62,0.8) 100%),
|
||
url('https://images.unsplash.com/photo-1519741497674-611481863552?w=1920') center/cover;
|
||
overflow: hidden;
|
||
}
|
||
.hero::before {
|
||
content: '';
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
bottom: 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%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c9a962' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
||
opacity: 0.5;
|
||
}
|
||
.hero-content {
|
||
position: relative;
|
||
z-index: 2;
|
||
padding: 40px;
|
||
animation: fadeInUp 1.5s ease;
|
||
}
|
||
.ornament-top, .ornament-bottom {
|
||
width: 200px;
|
||
height: 40px;
|
||
margin: 0 auto 30px;
|
||
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 200 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M100 0 L120 10 L140 5 L130 20 L150 25 L130 30 L140 40 L120 35 L100 40 L80 35 L60 40 L70 30 L50 25 L70 20 L60 5 L80 10 Z' fill='%23c9a962' opacity='0.6'/%3E%3C/svg%3E") center/contain no-repeat;
|
||
}
|
||
.hero h1 {
|
||
font-size: clamp(48px, 8vw, 96px);
|
||
margin-bottom: 10px;
|
||
background: linear-gradient(135deg, var(--gold) 0%, var(--gold-light) 50%, var(--gold) 100%);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
letter-spacing: 2px;
|
||
}
|
||
.hero-subtitle {
|
||
font-size: clamp(14px, 2vw, 18px);
|
||
color: var(--text-muted);
|
||
text-transform: uppercase;
|
||
letter-spacing: 4px;
|
||
margin-bottom: 40px;
|
||
}
|
||
.hero-event {
|
||
font-size: clamp(24px, 4vw, 48px);
|
||
color: var(--cream);
|
||
margin-bottom: 30px;
|
||
font-weight: 500;
|
||
}
|
||
.hero-details {
|
||
display: flex;
|
||
gap: 40px;
|
||
justify-content: center;
|
||
flex-wrap: wrap;
|
||
margin-bottom: 50px;
|
||
}
|
||
.hero-detail {
|
||
text-align: center;
|
||
}
|
||
.hero-detail .label {
|
||
font-size: 12px;
|
||
color: var(--gold);
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
margin-bottom: 8px;
|
||
}
|
||
.hero-detail .value {
|
||
font-size: clamp(20px, 3vw, 32px);
|
||
font-family: 'Cormorant Garamond', serif;
|
||
}
|
||
.btn-hero {
|
||
padding: 18px 48px;
|
||
background: transparent;
|
||
border: 1px solid var(--gold);
|
||
color: var(--gold);
|
||
font-size: 14px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 3px;
|
||
cursor: pointer;
|
||
transition: all 0.4s;
|
||
font-family: 'Montserrat', sans-serif;
|
||
}
|
||
.btn-hero:hover {
|
||
background: var(--gold);
|
||
color: var(--bg);
|
||
transform: translateY(-3px);
|
||
box-shadow: 0 10px 30px rgba(201, 169, 98, 0.3);
|
||
}
|
||
|
||
/* Sections */
|
||
section {
|
||
padding: 100px 0;
|
||
position: relative;
|
||
}
|
||
.section-title {
|
||
font-size: clamp(36px, 5vw, 56px);
|
||
text-align: center;
|
||
margin-bottom: 60px;
|
||
color: var(--gold);
|
||
}
|
||
|
||
/* Invitation */
|
||
.invitation {
|
||
background: var(--bg-card);
|
||
text-align: center;
|
||
}
|
||
.invitation-text {
|
||
max-width: 700px;
|
||
margin: 0 auto;
|
||
font-size: clamp(16px, 2vw, 20px);
|
||
line-height: 2;
|
||
color: var(--text-muted);
|
||
}
|
||
.invitation-text p {
|
||
margin-bottom: 30px;
|
||
}
|
||
.invitation-signature {
|
||
font-family: 'Cormorant Garamond', serif;
|
||
font-size: clamp(28px, 4vw, 40px);
|
||
color: var(--gold);
|
||
margin-top: 40px;
|
||
font-style: italic;
|
||
}
|
||
|
||
/* Event Info Card */
|
||
.event-info {
|
||
background: linear-gradient(135deg, var(--emerald) 0%, var(--bg) 100%);
|
||
}
|
||
.info-card {
|
||
max-width: 600px;
|
||
margin: 0 auto;
|
||
background: rgba(18, 26, 22, 0.8);
|
||
border: 1px solid var(--gold);
|
||
border-radius: 4px;
|
||
padding: 50px 40px;
|
||
text-align: center;
|
||
backdrop-filter: blur(10px);
|
||
}
|
||
.info-card h3 {
|
||
font-size: clamp(28px, 4vw, 40px);
|
||
margin-bottom: 40px;
|
||
color: var(--gold);
|
||
}
|
||
.info-item {
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
gap: 16px;
|
||
margin-bottom: 24px;
|
||
font-size: clamp(16px, 2vw, 18px);
|
||
}
|
||
.info-item .icon {
|
||
font-size: 24px;
|
||
color: var(--gold);
|
||
}
|
||
.btn-map {
|
||
margin-top: 30px;
|
||
padding: 16px 32px;
|
||
background: var(--gold);
|
||
color: var(--bg);
|
||
border: none;
|
||
font-size: 14px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
cursor: pointer;
|
||
transition: all 0.3s;
|
||
font-family: 'Montserrat', sans-serif;
|
||
}
|
||
.btn-map:hover {
|
||
background: var(--gold-light);
|
||
transform: translateY(-2px);
|
||
}
|
||
|
||
/* Countdown */
|
||
.countdown-section {
|
||
background: var(--bg-card);
|
||
text-align: center;
|
||
}
|
||
.countdown-label {
|
||
font-size: clamp(18px, 2vw, 24px);
|
||
color: var(--text-muted);
|
||
margin-bottom: 40px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 3px;
|
||
}
|
||
.countdown {
|
||
display: flex;
|
||
justify-content: center;
|
||
gap: clamp(10px, 3vw, 30px);
|
||
flex-wrap: wrap;
|
||
}
|
||
.countdown-item {
|
||
background: var(--bg-input);
|
||
border: 1px solid var(--border);
|
||
border-radius: 4px;
|
||
padding: clamp(20px, 4vw, 40px) clamp(15px, 3vw, 30px);
|
||
min-width: 100px;
|
||
}
|
||
.countdown-value {
|
||
font-family: 'Cormorant Garamond', serif;
|
||
font-size: clamp(48px, 8vw, 80px);
|
||
color: var(--gold);
|
||
line-height: 1;
|
||
display: block;
|
||
}
|
||
.countdown-label-small {
|
||
font-size: 12px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
color: var(--text-muted);
|
||
margin-top: 10px;
|
||
display: block;
|
||
}
|
||
.countdown-message {
|
||
font-size: clamp(24px, 4vw, 36px);
|
||
color: var(--gold);
|
||
font-family: 'Cormorant Garamond', serif;
|
||
display: none;
|
||
}
|
||
|
||
/* Program */
|
||
.program {
|
||
background: var(--bg);
|
||
}
|
||
.timeline {
|
||
max-width: 800px;
|
||
margin: 0 auto;
|
||
position: relative;
|
||
}
|
||
.timeline::before {
|
||
content: '';
|
||
position: absolute;
|
||
left: 50%;
|
||
transform: translateX(-50%);
|
||
width: 2px;
|
||
height: 100%;
|
||
background: linear-gradient(to bottom, var(--gold), var(--emerald), var(--gold));
|
||
}
|
||
.timeline-item {
|
||
display: flex;
|
||
justify-content: flex-end;
|
||
padding: 30px 0;
|
||
position: relative;
|
||
width: 50%;
|
||
}
|
||
.timeline-item:nth-child(even) {
|
||
justify-content: flex-start;
|
||
margin-left: 50%;
|
||
}
|
||
.timeline-item::before {
|
||
content: '';
|
||
position: absolute;
|
||
width: 16px;
|
||
height: 16px;
|
||
background: var(--gold);
|
||
border-radius: 50%;
|
||
top: 50%;
|
||
transform: translateY(-50%);
|
||
}
|
||
.timeline-item:nth-child(odd)::before {
|
||
right: -8px;
|
||
}
|
||
.timeline-item:nth-child(even)::before {
|
||
left: -8px;
|
||
}
|
||
.timeline-content {
|
||
background: var(--bg-card);
|
||
border: 1px solid var(--border);
|
||
padding: 25px 30px;
|
||
border-radius: 4px;
|
||
max-width: 350px;
|
||
margin: 0 30px;
|
||
}
|
||
.timeline-time {
|
||
font-size: 24px;
|
||
color: var(--gold);
|
||
font-family: 'Cormorant Garamond', serif;
|
||
margin-bottom: 8px;
|
||
}
|
||
.timeline-text {
|
||
color: var(--text-muted);
|
||
font-size: 16px;
|
||
}
|
||
|
||
/* Venue */
|
||
.venue {
|
||
background: var(--bg-card);
|
||
}
|
||
.venue-content {
|
||
display: grid;
|
||
grid-template-columns: 1fr 1fr;
|
||
gap: 60px;
|
||
align-items: center;
|
||
}
|
||
.venue-image {
|
||
width: 100%;
|
||
height: 500px;
|
||
object-fit: cover;
|
||
border-radius: 4px;
|
||
border: 1px solid var(--gold);
|
||
}
|
||
.venue-info h3 {
|
||
font-size: clamp(32px, 4vw, 48px);
|
||
color: var(--gold);
|
||
margin-bottom: 30px;
|
||
}
|
||
.venue-info p {
|
||
color: var(--text-muted);
|
||
font-size: 18px;
|
||
margin-bottom: 30px;
|
||
}
|
||
.venue-buttons {
|
||
display: flex;
|
||
gap: 15px;
|
||
flex-wrap: wrap;
|
||
}
|
||
.btn-venue {
|
||
padding: 14px 28px;
|
||
background: transparent;
|
||
border: 1px solid var(--gold);
|
||
color: var(--gold);
|
||
font-size: 13px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
cursor: pointer;
|
||
transition: all 0.3s;
|
||
font-family: 'Montserrat', sans-serif;
|
||
text-decoration: none;
|
||
display: inline-block;
|
||
}
|
||
.btn-venue:hover {
|
||
background: var(--gold);
|
||
color: var(--bg);
|
||
}
|
||
|
||
/* Dress Code */
|
||
.dresscode {
|
||
background: var(--bg);
|
||
text-align: center;
|
||
}
|
||
.dresscode-text {
|
||
max-width: 600px;
|
||
margin: 0 auto 50px;
|
||
font-size: clamp(16px, 2vw, 20px);
|
||
color: var(--text-muted);
|
||
}
|
||
.color-palette {
|
||
display: flex;
|
||
justify-content: center;
|
||
gap: 30px;
|
||
flex-wrap: wrap;
|
||
}
|
||
.color-item {
|
||
text-align: center;
|
||
}
|
||
.color-circle {
|
||
width: 80px;
|
||
height: 80px;
|
||
border-radius: 50%;
|
||
margin-bottom: 15px;
|
||
border: 2px solid var(--gold);
|
||
}
|
||
.color-circle.white { background: #f8f5f0; }
|
||
.color-circle.black { background: #1a1a1a; }
|
||
.color-circle.gold { background: linear-gradient(135deg, #c9a962, #e8d5a3); }
|
||
.color-circle emerald { background: #1a4d3e; }
|
||
.color-name {
|
||
color: var(--gold);
|
||
font-size: 14px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
}
|
||
|
||
/* Gallery */
|
||
.gallery {
|
||
background: var(--bg-card);
|
||
}
|
||
.gallery-grid {
|
||
display: grid;
|
||
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
||
gap: 20px;
|
||
}
|
||
.gallery-item {
|
||
position: relative;
|
||
overflow: hidden;
|
||
border-radius: 4px;
|
||
cursor: pointer;
|
||
aspect-ratio: 1;
|
||
}
|
||
.gallery-item img {
|
||
width: 100%;
|
||
height: 100%;
|
||
object-fit: cover;
|
||
transition: transform 0.5s;
|
||
}
|
||
.gallery-item:hover img {
|
||
transform: scale(1.1);
|
||
}
|
||
|
||
/* RSVP */
|
||
.rsvp {
|
||
background: linear-gradient(135deg, var(--emerald) 0%, var(--bg) 100%);
|
||
}
|
||
.rsvp-form {
|
||
max-width: 600px;
|
||
margin: 0 auto;
|
||
background: rgba(18, 26, 22, 0.9);
|
||
border: 1px solid var(--gold);
|
||
padding: 50px 40px;
|
||
border-radius: 4px;
|
||
backdrop-filter: blur(10px);
|
||
}
|
||
.form-group {
|
||
margin-bottom: 30px;
|
||
}
|
||
.form-group label {
|
||
display: block;
|
||
margin-bottom: 12px;
|
||
color: var(--gold);
|
||
font-size: 14px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 2px;
|
||
}
|
||
.form-group input,
|
||
.form-group select,
|
||
.form-group textarea {
|
||
width: 100%;
|
||
padding: 16px;
|
||
background: var(--bg-input);
|
||
border: 1px solid var(--border);
|
||
color: var(--text);
|
||
font-family: 'Montserrat', sans-serif;
|
||
font-size: 16px;
|
||
border-radius: 4px;
|
||
}
|
||
.form-group input:focus,
|
||
.form-group select:focus,
|
||
.form-group textarea:focus {
|
||
outline: none;
|
||
border-color: var(--gold);
|
||
}
|
||
.form-group textarea {
|
||
resize: vertical;
|
||
min-height: 120px;
|
||
}
|
||
.radio-group {
|
||
display: flex;
|
||
gap: 30px;
|
||
flex-wrap: wrap;
|
||
}
|
||
.radio-option {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 10px;
|
||
cursor: pointer;
|
||
}
|
||
.radio-option input {
|
||
width: auto;
|
||
accent-color: var(--gold);
|
||
}
|
||
.guest-counter {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 20px;
|
||
}
|
||
.counter-btn {
|
||
width: 40px;
|
||
height: 40px;
|
||
background: var(--bg-input);
|
||
border: 1px solid var(--gold);
|
||
color: var(--gold);
|
||
font-size: 20px;
|
||
cursor: pointer;
|
||
transition: all 0.3s;
|
||
}
|
||
.counter-btn:hover {
|
||
background: var(--gold);
|
||
color: var(--bg);
|
||
}
|
||
.counter-value {
|
||
font-size: 24px;
|
||
color: var(--gold);
|
||
min-width: 40px;
|
||
text-align: center;
|
||
}
|
||
.btn-submit {
|
||
width: 100%;
|
||
padding: 18px;
|
||
background: var(--gold);
|
||
color: var(--bg);
|
||
border: none;
|
||
font-size: 14px;
|
||
text-transform: uppercase;
|
||
letter-spacing: 3px;
|
||
cursor: pointer;
|
||
transition: all 0.3s;
|
||
font-family: 'Montserrat', sans-serif;
|
||
}
|
||
.btn-submit:hover {
|
||
background: var(--gold-light);
|
||
transform: translateY(-2px);
|
||
}
|
||
.success-message {
|
||
text-align: center;
|
||
padding: 50px;
|
||
display: none;
|
||
}
|
||
.success-message h3 {
|
||
font-size: 32px;
|
||
color: var(--gold);
|
||
margin-bottom: 20px;
|
||
}
|
||
.success-message p {
|
||
color: var(--text-muted);
|
||
font-size: 18px;
|
||
}
|
||
|
||
/* Final */
|
||
.final {
|
||
background: var(--bg-card);
|
||
text-align: center;
|
||
padding: 150px 0;
|
||
}
|
||
.final h2 {
|
||
font-size: clamp(36px, 5vw, 64px);
|
||
color: var(--gold);
|
||
margin-bottom: 30px;
|
||
}
|
||
.final-names {
|
||
font-size: clamp(48px, 8vw, 96px);
|
||
background: linear-gradient(135deg, var(--gold) 0%, var(--gold-light) 100%);
|
||
-webkit-background-clip: text;
|
||
-webkit-text-fill-color: transparent;
|
||
background-clip: text;
|
||
margin-bottom: 30px;
|
||
}
|
||
.final-heart {
|
||
font-size: 48px;
|
||
color: #e74c3c;
|
||
animation: heartbeat 1.5s infinite;
|
||
}
|
||
@keyframes heartbeat {
|
||
0%, 100% { transform: scale(1); }
|
||
50% { transform: scale(1.2); }
|
||
}
|
||
|
||
/* Share Button */
|
||
.share-btn {
|
||
position: fixed;
|
||
bottom: 30px;
|
||
right: 30px;
|
||
width: 60px;
|
||
height: 60px;
|
||
background: var(--gold);
|
||
border: none;
|
||
border-radius: 50%;
|
||
cursor: pointer;
|
||
display: flex;
|
||
align-items: center;
|
||
justify-content: center;
|
||
z-index: 1000;
|
||
transition: all 0.3s;
|
||
box-shadow: 0 10px 30px rgba(201, 169, 98, 0.3);
|
||
}
|
||
.share-btn:hover {
|
||
transform: scale(1.1);
|
||
}
|
||
.share-btn svg {
|
||
width: 24px;
|
||
height: 24px;
|
||
fill: var(--bg);
|
||
}
|
||
|
||
/* Animations */
|
||
@keyframes fadeInUp {
|
||
from {
|
||
opacity: 0;
|
||
transform: translateY(40px);
|
||
}
|
||
to {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
}
|
||
|
||
.fade-in {
|
||
opacity: 0;
|
||
transform: translateY(30px);
|
||
transition: all 0.8s ease;
|
||
}
|
||
.fade-in.visible {
|
||
opacity: 1;
|
||
transform: translateY(0);
|
||
}
|
||
|
||
/* Mobile */
|
||
@media (max-width: 768px) {
|
||
.timeline::before {
|
||
left: 20px;
|
||
}
|
||
.timeline-item,
|
||
.timeline-item:nth-child(even) {
|
||
width: 100%;
|
||
margin-left: 0;
|
||
justify-content: flex-start;
|
||
padding-left: 50px;
|
||
}
|
||
.timeline-item::before,
|
||
.timeline-item:nth-child(even)::before {
|
||
left: 12px;
|
||
right: auto;
|
||
}
|
||
.timeline-content,
|
||
.timeline-item:nth-child(even) .timeline-content {
|
||
margin: 0;
|
||
max-width: 100%;
|
||
}
|
||
.venue-content {
|
||
grid-template-columns: 1fr;
|
||
}
|
||
.venue-image {
|
||
height: 300px;
|
||
}
|
||
.music-toggle {
|
||
width: 45px;
|
||
height: 45px;
|
||
top: 15px;
|
||
right: 15px;
|
||
}
|
||
.share-btn {
|
||
width: 50px;
|
||
height: 50px;
|
||
bottom: 20px;
|
||
right: 20px;
|
||
}
|
||
}
|
||
|
||
/* Hidden initial content */
|
||
.main-content {
|
||
display: none;
|
||
}
|
||
.main-content.visible {
|
||
display: block;
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<!-- Music Toggle -->
|
||
<button class="music-toggle" id="musicToggle" title="Включить музыку">
|
||
<svg viewBox="0 0 24 24"><path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"/></svg>
|
||
</button>
|
||
<audio id="bgMusic" loop>
|
||
<source src="https://cdn.pixabay.com/download/audio/2022/10/25/audio_24a29c5e6d.mp3" type="audio/mp3">
|
||
</audio>
|
||
|
||
<!-- Hero Section -->
|
||
<section class="hero" id="hero">
|
||
<div class="hero-content">
|
||
<div class="ornament-top"></div>
|
||
<h1 id="heroNames">Aliya & Erlan</h1>
|
||
<p class="hero-subtitle">Приглашение на наш особенный вечер</p>
|
||
<h2 class="hero-event" id="heroEvent">Toy Kesh</h2>
|
||
<div class="hero-details">
|
||
<div class="hero-detail">
|
||
<div class="label">Дата</div>
|
||
<div class="value" id="heroDate">25.08.2025</div>
|
||
</div>
|
||
<div class="hero-detail">
|
||
<div class="label">Время</div>
|
||
<div class="value" id="heroTime">18:00</div>
|
||
</div>
|
||
</div>
|
||
<button class="btn-hero" id="openInvitation">Открыть приглашение</button>
|
||
<div class="ornament-bottom"></div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Main Content -->
|
||
<div class="main-content" id="mainContent">
|
||
<!-- Invitation -->
|
||
<section class="invitation">
|
||
<div class="container">
|
||
<h2 class="section-title fade-in">Дорогие родные и друзья!</h2>
|
||
<div class="invitation-text fade-in">
|
||
<p id="invitationText1">С большой радостью приглашаем вас разделить с нами этот особенный день и стать частью нашего праздника.</p>
|
||
<p id="invitationText2">Ваши улыбки, тёплые слова и поддержка делают этот момент ещё более значимым для нас.</p>
|
||
<p id="invitationText3">Будем счастливы видеть вас среди дорогих нам людей!</p>
|
||
</div>
|
||
<div class="invitation-signature fade-in" id="invitationSignature">С любовью, Aliya & Erlan</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Event Info -->
|
||
<section class="event-info">
|
||
<div class="container">
|
||
<div class="info-card fade-in">
|
||
<h3 id="infoTitle">Toy Kesh</h3>
|
||
<div class="info-item">
|
||
<span class="icon">📅</span>
|
||
<span id="infoDate">25 Августа 2025</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="icon">🕐</span>
|
||
<span id="infoTime">18:00</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="icon">📍</span>
|
||
<span id="infoVenue">Grand Park Hotel</span>
|
||
</div>
|
||
<div class="info-item">
|
||
<span class="icon">🏠</span>
|
||
<span id="infoAddress">пр. Абая 123, Алматы</span>
|
||
</div>
|
||
<button class="btn-map" id="btnMap">Построить маршрут</button>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Countdown -->
|
||
<section class="countdown-section">
|
||
<div class="container">
|
||
<div class="countdown-label fade-in">До начала праздника</div>
|
||
<div class="countdown fade-in">
|
||
<div class="countdown-item">
|
||
<span class="countdown-value" id="cdDays">00</span>
|
||
<span class="countdown-label-small">Дней</span>
|
||
</div>
|
||
<div class="countdown-item">
|
||
<span class="countdown-value" id="cdHours">00</span>
|
||
<span class="countdown-label-small">Часов</span>
|
||
</div>
|
||
<div class="countdown-item">
|
||
<span class="countdown-value" id="cdMinutes">00</span>
|
||
<span class="countdown-label-small">Минут</span>
|
||
</div>
|
||
<div class="countdown-item">
|
||
<span class="countdown-value" id="cdSeconds">00</span>
|
||
<span class="countdown-label-small">Секунд</span>
|
||
</div>
|
||
</div>
|
||
<div class="countdown-message" id="countdownMessage">
|
||
❤️ Сегодня наш особенный день ❤️
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Program -->
|
||
<section class="program">
|
||
<div class="container">
|
||
<h2 class="section-title fade-in">Программа вечера</h2>
|
||
<div class="timeline">
|
||
<div class="timeline-item fade-in">
|
||
<div class="timeline-content">
|
||
<div class="timeline-time">18:00</div>
|
||
<div class="timeline-text">Сбор гостей</div>
|
||
</div>
|
||
</div>
|
||
<div class="timeline-item fade-in">
|
||
<div class="timeline-content">
|
||
<div class="timeline-time">18:30</div>
|
||
<div class="timeline-text">Начало мероприятия</div>
|
||
</div>
|
||
</div>
|
||
<div class="timeline-item fade-in">
|
||
<div class="timeline-content">
|
||
<div class="timeline-time">19:00</div>
|
||
<div class="timeline-text">Торжественная часть</div>
|
||
</div>
|
||
</div>
|
||
<div class="timeline-item fade-in">
|
||
<div class="timeline-content">
|
||
<div class="timeline-time">20:00</div>
|
||
<div class="timeline-text">Праздничный ужин</div>
|
||
</div>
|
||
</div>
|
||
<div class="timeline-item fade-in">
|
||
<div class="timeline-content">
|
||
<div class="timeline-time">21:00</div>
|
||
<div class="timeline-text">Музыка и танцы</div>
|
||
</div>
|
||
</div>
|
||
<div class="timeline-item fade-in">
|
||
<div class="timeline-content">
|
||
<div class="timeline-time">23:00</div>
|
||
<div class="timeline-text">Завершение вечера</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Venue -->
|
||
<section class="venue">
|
||
<div class="container">
|
||
<div class="venue-content">
|
||
<img src="https://images.unsplash.com/photo-1517248135467-4c7edcad34c4?w=800" alt="Ресторан" class="venue-image fade-in" id="venueImage">
|
||
<div class="venue-info fade-in">
|
||
<h3 id="venueName">Grand Park Hotel</h3>
|
||
<p id="venueDescription">Изысканный ресторан в центре города с панорамным видом и европейской кухней. Идеальное место для вашего праздника.</p>
|
||
<p id="venueAddress">📍 пр. Абая 123, Алматы</p>
|
||
<div class="venue-buttons">
|
||
<a href="#" class="btn-venue" id="btn2gis">2GIS</a>
|
||
<a href="#" class="btn-venue" id="btnGoogle">Google Maps</a>
|
||
<a href="#" class="btn-venue" id="btnYandex">Яндекс Карты</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Dress Code -->
|
||
<section class="dresscode">
|
||
<div class="container">
|
||
<h2 class="section-title fade-in">Dress Code</h2>
|
||
<p class="dresscode-text fade-in" id="dresscodeText">Будем рады видеть вас в праздничных и элегантных образах.</p>
|
||
<div class="color-palette fade-in">
|
||
<div class="color-item">
|
||
<div class="color-circle white"></div>
|
||
<div class="color-name">Белый</div>
|
||
</div>
|
||
<div class="color-item">
|
||
<div class="color-circle black"></div>
|
||
<div class="color-name">Чёрный</div>
|
||
</div>
|
||
<div class="color-item">
|
||
<div class="color-circle gold"></div>
|
||
<div class="color-name">Золотой</div>
|
||
</div>
|
||
<div class="color-item">
|
||
<div class="color-circle emerald" style="background: #1a4d3e;"></div>
|
||
<div class="color-name">Изумруд</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Gallery -->
|
||
<section class="gallery">
|
||
<div class="container">
|
||
<h2 class="section-title fade-in">Наши моменты</h2>
|
||
<div class="gallery-grid">
|
||
<div class="gallery-item fade-in">
|
||
<img src="https://images.unsplash.com/photo-1511285560982-1356c11d4606?w=600" alt="Фото 1">
|
||
</div>
|
||
<div class="gallery-item fade-in">
|
||
<img src="https://images.unsplash.com/photo-1519741497674-611481863552?w=600" alt="Фото 2">
|
||
</div>
|
||
<div class="gallery-item fade-in">
|
||
<img src="https://images.unsplash.com/photo-1515934751635-c81c6bc9a2d8?w=600" alt="Фото 3">
|
||
</div>
|
||
<div class="gallery-item fade-in">
|
||
<img src="https://images.unsplash.com/photo-1469334031218-e382a71b716b?w=600" alt="Фото 4">
|
||
</div>
|
||
<div class="gallery-item fade-in">
|
||
<img src="https://images.unsplash.com/photo-1522673607200-1645062cd958?w=600" alt="Фото 5">
|
||
</div>
|
||
<div class="gallery-item fade-in">
|
||
<img src="https://images.unsplash.com/photo-1519225448526-0ca85c53563c?w=600" alt="Фото 6">
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- RSVP -->
|
||
<section class="rsvp">
|
||
<div class="container">
|
||
<h2 class="section-title fade-in">Подтвердите присутствие</h2>
|
||
<div class="rsvp-form fade-in" id="rsvpForm">
|
||
<form id="rsvpFormElement">
|
||
<div class="form-group">
|
||
<label>Имя и фамилия</label>
|
||
<input type="text" id="guestName" placeholder="Введите ваше имя" required>
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Вы будете присутствовать?</label>
|
||
<div class="radio-group">
|
||
<label class="radio-option">
|
||
<input type="radio" name="attendance" value="yes" checked>
|
||
Да, с радостью!
|
||
</label>
|
||
<label class="radio-option">
|
||
<input type="radio" name="attendance" value="no">
|
||
К сожалению, не смогу
|
||
</label>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Количество гостей</label>
|
||
<div class="guest-counter">
|
||
<button type="button" class="counter-btn" id="counterMinus">−</button>
|
||
<span class="counter-value" id="guestCount">1</span>
|
||
<button type="button" class="counter-btn" id="counterPlus">+</button>
|
||
</div>
|
||
</div>
|
||
<div class="form-group">
|
||
<label>Комментарий</label>
|
||
<textarea id="guestComment" placeholder="Пожелания, аллергии, особые предпочтения..."></textarea>
|
||
</div>
|
||
<button type="submit" class="btn-submit">Подтвердить присутствие</button>
|
||
</form>
|
||
<div class="success-message" id="successMessage">
|
||
<h3>Спасибо! ❤️</h3>
|
||
<p>Будем ждать вас на нашем празднике!</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Final -->
|
||
<section class="final">
|
||
<div class="container">
|
||
<h2 class="fade-in">До встречи на нашем празднике!</h2>
|
||
<div class="final-names fade-in" id="finalNames">Aliya & Erlan</div>
|
||
<div class="final-heart fade-in">❤️</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
|
||
<!-- Share Button -->
|
||
<button class="share-btn" id="shareBtn" title="Поделиться">
|
||
<svg viewBox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81 1.66 0 3-1.34 3-3s-1.34-3-3-3-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65 0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92-1.31-2.92-2.92-2.92z"/></svg>
|
||
</button>
|
||
|
||
<script>
|
||
// Configuration - легко редактировать
|
||
const CONFIG = {
|
||
names: "Нуртас & Аружан",
|
||
eventName: "Toy Kesh",
|
||
date: "2027-07-07",
|
||
time: "18:00",
|
||
venue: "Алтын Сарай",
|
||
address: "Алматы",
|
||
coordinates: { lat: 43.2389, lng: 76.9453 },
|
||
invitationText: {
|
||
p1: "С большой радостью приглашаем вас разделить с нами этот особенный день и стать частью нашего праздника.",
|
||
p2: "Ваши улыбки, тёплые слова и поддержка делают этот момент ещё более значимым для нас.",
|
||
p3: "Будем счастливы видеть вас среди дорогих нам людей!"
|
||
},
|
||
signature: "С любовью, Нуртас & Аружан",
|
||
musicUrl: "https://cdn.pixabay.com/download/audio/2022/10/25/audio_24a29c5e6d.mp3"
|
||
};
|
||
|
||
// Apply config
|
||
document.getElementById('heroNames').textContent = CONFIG.names;
|
||
document.getElementById('heroEvent').textContent = CONFIG.eventName;
|
||
document.getElementById('heroDate').textContent = CONFIG.date.split('-').reverse().join('.');
|
||
document.getElementById('heroTime').textContent = CONFIG.time;
|
||
document.getElementById('invitationText1').textContent = CONFIG.invitationText.p1;
|
||
document.getElementById('invitationText2').textContent = CONFIG.invitationText.p2;
|
||
document.getElementById('invitationText3').textContent = CONFIG.invitationText.p3;
|
||
document.getElementById('invitationSignature').textContent = CONFIG.signature;
|
||
document.getElementById('infoTitle').textContent = CONFIG.eventName;
|
||
document.getElementById('infoDate').textContent = new Date(CONFIG.date).toLocaleDateString('ru-RU', { day: 'numeric', month: 'long', year: 'numeric' });
|
||
document.getElementById('infoTime').textContent = CONFIG.time;
|
||
document.getElementById('infoVenue').textContent = CONFIG.venue;
|
||
document.getElementById('infoAddress').textContent = CONFIG.address;
|
||
document.getElementById('venueName').textContent = CONFIG.venue;
|
||
document.getElementById('venueAddress').textContent = '📍 ' + CONFIG.address;
|
||
document.getElementById('finalNames').textContent = CONFIG.names;
|
||
|
||
// Open invitation
|
||
document.getElementById('openInvitation').addEventListener('click', function() {
|
||
document.getElementById('hero').style.display = 'none';
|
||
document.getElementById('mainContent').classList.add('visible');
|
||
window.scrollTo({ top: 0, behavior: 'smooth' });
|
||
initAnimations();
|
||
});
|
||
|
||
// Music toggle
|
||
const music = document.getElementById('bgMusic');
|
||
const musicToggle = document.getElementById('musicToggle');
|
||
let isPlaying = false;
|
||
|
||
musicToggle.addEventListener('click', function() {
|
||
if (isPlaying) {
|
||
music.pause();
|
||
musicToggle.classList.remove('music-playing');
|
||
musicToggle.innerHTML = '<svg viewBox="0 0 24 24"><path d="M12 3v10.55c-.59-.34-1.27-.55-2-.55-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4V7h4V3h-6z"/></svg>';
|
||
} else {
|
||
music.play();
|
||
musicToggle.classList.add('music-playing');
|
||
musicToggle.innerHTML = '<svg viewBox="0 0 24 24"><path d="M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4L12 20V7.73l2.27 2.27h.01c-.63.63-1.02 1.5-1.02 2.47 0 2.21 1.79 4 4 4 .97 0 1.84-.39 2.48-1.02l1.48 1.48C19.71 20.89 18.07 21.5 16.5 21.5 12.91 21.5 9.79 19.27 8.55 16.1L3 10.55V3h1.27z"/></svg>';
|
||
}
|
||
isPlaying = !isPlaying;
|
||
});
|
||
|
||
// Countdown
|
||
function updateCountdown() {
|
||
const eventDate = new Date(CONFIG.date + 'T' + CONFIG.time).getTime();
|
||
const now = new Date().getTime();
|
||
const diff = eventDate - now;
|
||
|
||
if (diff <= 0) {
|
||
document.querySelector('.countdown').style.display = 'none';
|
||
document.getElementById('countdownMessage').style.display = 'block';
|
||
return;
|
||
}
|
||
|
||
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('cdDays').textContent = String(days).padStart(2, '0');
|
||
document.getElementById('cdHours').textContent = String(hours).padStart(2, '0');
|
||
document.getElementById('cdMinutes').textContent = String(minutes).padStart(2, '0');
|
||
document.getElementById('cdSeconds').textContent = String(seconds).padStart(2, '0');
|
||
}
|
||
|
||
setInterval(updateCountdown, 1000);
|
||
updateCountdown();
|
||
|
||
// Map buttons
|
||
document.getElementById('btnMap').addEventListener('click', function() {
|
||
const query = encodeURIComponent(CONFIG.venue + ' ' + CONFIG.address);
|
||
window.open(`https://www.google.com/maps/search/?api=1&query=${query}`, '_blank');
|
||
});
|
||
|
||
document.getElementById('btn2gis').href = `https://2gis.kz/almaty/search/${encodeURIComponent(CONFIG.venue)}`;
|
||
document.getElementById('btnGoogle').href = `https://www.google.com/maps/search/?api=1&query=${encodeURIComponent(CONFIG.venue + ' ' + CONFIG.address)}`;
|
||
document.getElementById('btnYandex').href = `https://yandex.kz/maps/?text=${encodeURIComponent(CONFIG.venue + ' ' + CONFIG.address)}`;
|
||
|
||
// RSVP Form
|
||
let guestCount = 1;
|
||
document.getElementById('counterMinus').addEventListener('click', function() {
|
||
if (guestCount > 1) {
|
||
guestCount--;
|
||
document.getElementById('guestCount').textContent = guestCount;
|
||
}
|
||
});
|
||
document.getElementById('counterPlus').addEventListener('click', function() {
|
||
if (guestCount < 10) {
|
||
guestCount++;
|
||
document.getElementById('guestCount').textContent = guestCount;
|
||
}
|
||
});
|
||
|
||
document.getElementById('rsvpFormElement').addEventListener('submit', function(e) {
|
||
e.preventDefault();
|
||
|
||
const rsvp = {
|
||
name: document.getElementById('guestName').value,
|
||
attendance: document.querySelector('input[name="attendance"]:checked').value,
|
||
guests: guestCount,
|
||
comment: document.getElementById('guestComment').value,
|
||
date: new Date().toISOString()
|
||
};
|
||
|
||
// Save to localStorage
|
||
const guests = JSON.parse(localStorage.getItem('toyGuests') || '[]');
|
||
guests.push(rsvp);
|
||
localStorage.setItem('toyGuests', JSON.stringify(guests));
|
||
|
||
// Show success
|
||
document.getElementById('rsvpFormElement').style.display = 'none';
|
||
document.getElementById('successMessage').style.display = 'block';
|
||
|
||
// Console log for admin
|
||
console.log('Новый RSVP:', rsvp);
|
||
console.log('Всего гостей:', guests.length);
|
||
});
|
||
|
||
// Share
|
||
document.getElementById('shareBtn').addEventListener('click', async function() {
|
||
if (navigator.share) {
|
||
try {
|
||
await navigator.share({
|
||
title: CONFIG.eventName,
|
||
text: `Приглашение на ${CONFIG.eventName} ${CONFIG.names}`,
|
||
url: window.location.href
|
||
});
|
||
} catch (err) {
|
||
console.log('Share cancelled');
|
||
}
|
||
} else {
|
||
navigator.clipboard.writeText(window.location.href);
|
||
alert('Ссылка скопирована в буфер обмена!');
|
||
}
|
||
});
|
||
|
||
// Scroll animations
|
||
function initAnimations() {
|
||
const observer = new IntersectionObserver((entries) => {
|
||
entries.forEach(entry => {
|
||
if (entry.isIntersecting) {
|
||
entry.target.classList.add('visible');
|
||
}
|
||
});
|
||
}, { threshold: 0.1 });
|
||
|
||
document.querySelectorAll('.fade-in').forEach(el => observer.observe(el));
|
||
}
|
||
|
||
// Admin panel access (hidden feature)
|
||
document.addEventListener('keydown', function(e) {
|
||
if (e.ctrlKey && e.shiftKey && e.key === 'A') {
|
||
const password = prompt('Введите пароль администратора:');
|
||
if (password === 'admin123') {
|
||
showAdminPanel();
|
||
}
|
||
}
|
||
});
|
||
|
||
function showAdminPanel() {
|
||
const guests = JSON.parse(localStorage.getItem('toyGuests') || '[]');
|
||
const confirmed = guests.filter(g => g.attendance === 'yes').length;
|
||
const declined = guests.filter(g => g.attendance === 'no').length;
|
||
const totalGuests = guests.reduce((sum, g) => sum + (g.attendance === 'yes' ? g.guests : 0), 0);
|
||
|
||
const adminData = `
|
||
=== СТАТИСТИКА ГОСТЕЙ ===
|
||
Всего ответов: ${guests.length}
|
||
Подтвердили: ${confirmed} (${totalGuests} гостей)
|
||
Не смогут: ${declined}
|
||
Не ответили: ${120 - guests.length}
|
||
|
||
=== СПИСОК ГОСТЕЙ ===
|
||
${guests.map(g => `${g.name} - ${g.attendance === 'yes' ? '✓' : '✗'} (${g.guests} гостей) - ${g.comment || 'без комментария'}`).join('\n')}
|
||
`.trim();
|
||
|
||
console.log(adminData);
|
||
alert('Статистика выведена в консоль (F12)\n\nCtrl+Shift+S - экспортировать в CSV');
|
||
}
|
||
|
||
// Export to CSV
|
||
document.addEventListener('keydown', function(e) {
|
||
if (e.ctrlKey && e.shiftKey && e.key === 'S') {
|
||
const guests = JSON.parse(localStorage.getItem('toyGuests') || '[]');
|
||
const csv = 'Имя,Присутствие,Гостей,Комментарий,Дата\n' +
|
||
guests.map(g => `"${g.name}",${g.attendance},${g.guests},"${g.comment || ''}",${g.date}`).join('\n');
|
||
|
||
const blob = new Blob(['\uFEFF' + csv], { type: 'text/csv' });
|
||
const a = document.createElement('a');
|
||
a.href = URL.createObjectURL(blob);
|
||
a.download = 'guests.csv';
|
||
a.click();
|
||
}
|
||
});
|
||
</script>
|
||
</body>
|
||
</html>
|