Compare commits

...

3 Commits

Author SHA1 Message Date
6b6361b25a adaptive_1 2026-04-26 20:42:33 +03:00
0932c40127 final-fix-text 2026-04-19 21:50:16 +03:00
d58bfbb7c1 final 2026-04-19 20:25:06 +03:00
17 changed files with 767 additions and 228 deletions

View File

@@ -1,12 +1,15 @@
VENV=source ./.venv/bin/activate;
ALEMBIC=alembic -c ./server/backend/database/alembic/alembic.ini
#VENV=source ./.venv/bin/activate;
#ALEMBIC=alembic -c ./server/backend/database/alembic/alembic.ini
VENV= .venv\Scripts\activate #Windows
ALEMBIC=alembic -c server\backend\database\alembic\alembic.ini
.PHONY: run run_debug migrate_head migrate_down migrate_history migrate_current migrate_heads migrate_stamp migrate
run:
$(VENV) python run.py --user_name admin
run_debug:
$(VENV) python run.py --mode debug --user_name admin
migrate_head:
$(VENV) $(ALEMBIC) upgrade head
$(VENV) $(ALEMBIC)
migrate_down:
$(VENV) $(ALEMBIC) downgrade -1
migrate_history:

View File

@@ -0,0 +1 @@
DoubleRus encoding by Diai; unfinished

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

View File

@@ -0,0 +1,81 @@
@font-face {
font-family: "MurreyC";
src: url("fonts/MurreyC/murreyc.woff2") format("woff2");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "MurreyC";
src: url("fonts/MurreyC/murreyc.woff") format("woff");
font-weight: 400;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "MurreyC";
src: url("fonts/MurreyC/murreyc.eot") format("eot");
font-weight: 400;
font-style: normal;
font-display: swap;
}
body {
font-family: "MurreyC";
background: url('./image/bg.png') no-repeat 100% 100% fixed;
background-size: cover;
margin: 0;
padding: 0;
}
.glass-container {
position: fixed;
inset: 0;
backdrop-filter: blur(16px);
background: rgba(255,255,255,0.1); /* обязательно */
}
.login-box {
height: 100%;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
background: url('./image/hamster.png') no-repeat 50% 50%;
padding-top: 50px;
}
form {
display: flex;
flex-direction: column;
}
h2 {
font-weight: 900;
font-size: 50px;
text-decoration: underline;
margin: 0;
padding: 0;
}
input {
width: 320px;
height: 50px;
padding: 0 20px;
border-radius: 25px;
border: 1px solid #000;
background-color: #ffffff;
outline: none;
font-size: 30px;
}
button {
margin-top: 10px;
font-size: 30px;
background-color: #3a1f09;
padding: 10px 15px;
border-radius: 33px;
transition: all .1s;
color: #e5b97e;
box-shadow: #3a1f09 2px 4px 10px 2px;
cursor: pointer;
}
button:hover {
background-color: #f0c590;
color: #b06029;
transform: scale(1.015);
}

View File

@@ -9,10 +9,10 @@
<body>
<div class="glass-container">
<div class="login-box">
<h2>Login</h2>
<h2>Введите код</h2>
<form id="loginForm">
<input type="password" id="password" name="password" required placeholder="Code">
<button type="submit">Login</button>
<input type="password" id="password" name="password" required placeholder="Код">
<button type="submit">Войти</button>
</form>
</div>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -7,20 +7,25 @@
<title>Wedding invitation</title>
<link rel="stylesheet" href="reset.css">
<link rel="stylesheet" href="style.css">
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.css"
/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@12/swiper-bundle.min.css" />
</head>
<body>
<header class="header">
<nav class="nav">
<div class="burger" id="burger">
<span></span>
<span></span>
<span></span>
</div>
<nav class="nav" id="nav">
<ul class="menu">
<div class="items_up">
<!-- 1 -->
<li class="item">
<a href="#heading" class="link">
<a href="#" class="link">
Добро пожаловать!
</a>
</li>
@@ -42,6 +47,8 @@
Путешествие
</a>
</li>
</div>
<div class="items_down">
<!-- 5 -->
<li class="item">
<a href="#photos" class="link">
@@ -60,6 +67,7 @@
Прошу ответить
</a>
</li>
</div>
</ul>
</nav>
</header>
@@ -74,21 +82,25 @@
</h2>
<h3 class="heading_date">22 августа 2026</h3>
<p class="heading_text">
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Iste possimus ipsa, labore repudiandae
ratione placeat dolore vitae praesentium perspiciatis ipsam non illum reiciendis accusamus quae
quo veritatis maiores quod sequi. Ipsam at consequatur quia recusandae, rem dicta autem quaerat
placeat?
Мы — та самая история, которая началась со странного сообщения и превратилась в нечто настоящее.
В нас есть легкость и смех, который когда-то стал началом всего, любовь к простым вещам вроде
чашки чая и бесконечных разговоров обо всем на свете. Мы разные и неидеальные, но именно в этом
— наше совпадение: нам всегда интересно друг с другом, спокойно и по-настоящему. Мы умеем
смеяться до слез, поддерживать в нужный момент и находить радость в мелочах. И, пожалуй, самое
важное — мы с самого начала почувствовали, что это надолго, и с каждым днем только убеждаемся в
этом.
</p>
<button class="btn_share" button>
Подтвердить участие
<a href="#answer">
Подтвердить участие
</a>
</button>
</div>
</article>
</section>
<aside>
<div class="time">
<!-- отсчет до даты -->
00:00:00
<p id="demo"></p>
</div>
</aside>
<section class="people" id="people">
@@ -100,27 +112,28 @@
<img class="img_newlywed" src="images/people//IMG_20260107_140110_500.jpg" alt="groom">
<div class="newlywed_text">
<h3 class="newlywed_title">Жених</h3>
<p class="newlywed_info">Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui voluptatum
odio autem, ut dolorum suscipit soluta reiciendis quam reprehenderit saepe doloribus
asperiores
architecto? Debitis magnam, exercitationem nam temporibus eos molestias?</p>
<p class="newlywed_info">
Самый лучший, милый,классный, очаровательный, крутой, забавный, любящий, удивительный,
необычный, прелестный, веселый, смешной, умный, добрый,красивый, гениальный</p>
</div>
</div>
<div class="newlywed_item">
<img class="img_newlywed" src="images/people/IMG_20260107_140120_301.jpg" alt="bride">
<img class="img_newlywed" src="images/people/IMG_20260419_214516_034.jpg" alt="bride">
<div class="newlywed_text">
<h3 class="newlywed_title">Невеста</h3>
<p class="newlywed_info">Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui voluptatum
odio autem, ut dolorum suscipit soluta reiciendis quam reprehenderit saepe doloribus
asperiores
architecto? Debitis magnam, exercitationem nam temporibus eos molestias?</p>
<p class="newlywed_info">Я — творческий и активный человек, люблю петь, путешествовать и
создавать что-то своими руками. Увлекаюсь готовкой, особенно десертами, которыми радую
близких. Люблю веселье, тусовки, животных и жизнь без
скуки.
</p>
</div>
</div>
</div>
<div class="guest_list">
<!-- <div class="guest_list">
<div class="guest_inner">
<!-- 1 -->
<div class="guest_item">
<!-- <div class="guest_item">
<div class="guest_index">
Стол 1
</div>
@@ -147,9 +160,9 @@
Lorem, ipsum.
</div>
</div>
</div>
<!-- 2 -->
<div class="guest_item">
</div> -->
<!-- 2 -->
<!-- <div class="guest_item">
<div class="guest_index">
Стол 1
</div>
@@ -176,9 +189,9 @@
Lorem, ipsum.
</div>
</div>
</div>
<!-- 3 -->
<div class="guest_item">
</div> -->
<!-- 3 -->
<!-- <div class="guest_item">
<div class="guest_index">
Стол 1
</div>
@@ -205,9 +218,9 @@
Lorem, ipsum.
</div>
</div>
</div>
</div>
</div> -->
</div>
</div> -->
</section>
<section class="timetable" id="timetable">
<h4 class="people_title">
@@ -220,14 +233,26 @@
<!-- 1 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/ring.png" alt="ring" class="time_img">
<h6 class="time_h6">10:40</h6>
<p class="time_p">Церемония</p>
<div class="time_comment">Начало нашего свадебного дня и самый важный момент для нас
<img src="images/time/guest1.png" alt="ring" class="time_img">
<h6 class="time_h6">10:10</h6>
<p class="time_p">Сбор гостей</p>
<div class="time_comment">Приходите заранее, чтобы спокойно встретиться и сделать
фото
</div>
</div>
</div>
<!-- 2 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/ring.png" alt="ring" class="time_img">
<h6 class="time_h6">10:40</h6>
<p class="time_p">Церемония</p>
<div class="time_comment">Самый трогательный и важный момент дня — регистрация
нашего брака
</div>
</div>
</div>
<!-- 3 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/camera.png" alt="camera" class="time_img">
@@ -237,53 +262,33 @@
чтобы сохранить этот день в памяти</div>
</div>
</div>
<!-- 3 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/wedding-dinner_11196102.png" alt="" class="time_img">
<h6 class="time_h6">14:00</h6>
<p class="time_p">Фуршет и бармен</p>
<div class="time_comment">Берем напиток, закуски и наслаждаемся началом вечера</div>
</div>
</div>
</div>
<div class="time_row_down">
<!-- 4 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/free-icon-fireworks-7201451.png" alt="" class="time_img">
<h6 class="time_h6">14:30</h6>
<p class="time_p">Поздравления и подарки</p>
<div class="time_comment">Мы будем рады теплым словам и подаркам во время фуршета
</div>
<img src="images/time/wedding-dinner_11196102.png" alt="" class="time_img">
<h6 class="time_h6">18:30</h6>
<p class="time_p">Сбор гостей и фуршет</p>
<div class="time_comment">Берем напиток, закуски и наслаждаемся началом вечера</div>
</div>
</div>
</div>
<div class="time_line"></div>
<div class="time_row_down">
<!-- 5 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/food.png" alt="" class="time_img">
<h6 class="time_h6">17:00</h6>
<h6 class="time_h6">19:00</h6>
<p class="time_p">Банкет</p>
<div class="time_comment">Приглашаем вас за столы, чтобы продолжить вечер в тёплой и
уютной атмосфере. Приветственный тост</div>
уютной атмосфере
</div>
</div>
</div>
<!-- 6 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/cake.png" alt="" class="time_img">
<h6 class="time_h6">19:00</h6>
<p class="time_p">Свадебный торт</p>
<div class="time_comment">Самый сладкий момент вечера. Чай или кофе находятся в
велком зоне</div>
</div>
</div>
<!-- 7 -->
<div class="row_up_item">
<div class="time_img_box">
<img src="images/time/disco-ball_18181959.png" alt="" class="time_img">
<h6 class="time_h6">19:30</h6>
<h6 class="time_h6">22:00</h6>
<p class="time_p">Танцы</p>
<div class="time_comment">Приглашаем вас на танцпол. Танцуйте столько, сколько
захочется</div>
@@ -293,6 +298,7 @@
</div>
</div>
</div>
</div>
</section>
<section class="transfer" id="transfer">
<h4 class="transfer_title">
@@ -305,21 +311,27 @@
<a href="https://www.google.com/maps/place/Glavnoye+Upravleniye+Zapisi+Aktov+Grazhdanskogo+Sostoyaniya+Tverskoy+Oblasti/@56.8571039,35.901453,17z/data=!3m1!4b1!4m6!3m5!1s0x46b687a4d4edacad:0x15df9a38c874eb5d!8m2!3d56.857101!4d35.9040279!16s%2Fg%2F11ls6j2lvj?entry=ttu&g_ep=EgoyMDI2MDMxMS4wIKXMDSoASAFQAw%3D%3D"
style="color:#eee;font-size:12px;position:absolute;top:0px;">
Главное управление записи актов гражданского состояния</a>
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2181.349338718406!2d35.901452977352925!3d56.85710390639812!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46b687a4d4edacad%3A0x15df9a38c874eb5d!2sGlavnoye%20Upravleniye%20Zapisi%20Aktov%20Grazhdanskogo%20Sostoyaniya%20Tverskoy%20Oblasti!5e0!3m2!1sen!2s!4v1773428540512!5m2!1sen!2s" width="760" height="500" style="border:1px;" allowfullscreen="true" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2181.349338718406!2d35.901452977352925!3d56.85710390639812!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46b687a4d4edacad%3A0x15df9a38c874eb5d!2sGlavnoye%20Upravleniye%20Zapisi%20Aktov%20Grazhdanskogo%20Sostoyaniya%20Tverskoy%20Oblasti!5e0!3m2!1sen!2s!4v1773428540512!5m2!1sen!2s"
width="100%" height="100%" style="border:1px;" allowfullscreen="" loading="lazy"
referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
<p class="map_adress">Тверь, Свободный переулок, 5</p>
<h6 class="map_info">Начало в</h6>
<h6 class="map_time">10:30</h6>
<h6 class="map_time">10:10</h6>
</div>
<div class="map">
<div style="position:relative;overflow:hidden; border-radius: 33px;">
<a href="https://www.google.com/maps/place/Loft+1870+%7C+%D0%9F%D0%BB%D0%BE%D1%89%D0%B0%D0%B4%D0%BA%D0%B0+%D0%B4%D0%BB%D1%8F+%D0%BC%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D0%B9+%D0%A2%D0%B2%D0%B5%D1%80%D1%8C+%7C+%D0%BA%D0%B5%D0%B9%D1%82%D0%B5%D1%80%D0%B8%D0%BD%D0%B3+%D0%BD%D0%B0+%D1%81%D0%B2%D0%B0%D0%B4%D1%8C%D0%B1%D1%83,+%D0%B1%D0%B0%D0%BD%D0%BA%D0%B5%D1%82%D0%BD%D1%8B%D0%B9+%D0%B7%D0%B0%D0%BB/@56.850656,35.8603082,17.32z/data=!3m1!5s0x46b687a53bac0dcf:0x5c270d07d710d5a!4m6!3m5!1s0x46b68764eb0c1387:0x7cb135f5414bc1e0!8m2!3d56.8508612!4d35.8650531!16s%2Fg%2F11p0wc5v7q?entry=ttu&g_ep=EgoyMDI2MDMxMS4wIKXMDSoASAFQAw%3D%3D"
style="color:#eee;font-size:12px;position:absolute;top:0px;">Лофт 1870</a>
<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1749.675516895515!2d35.86030818806184!3d56.850656040536194!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46b68764eb0c1387%3A0x7cb135f5414bc1e0!2zTG9mdCAxODcwIHwg0J_Qu9C-0YnQsNC00LrQsCDQtNC70Y8g0LzQtdGA0L7Qv9GA0LjRj9GC0LjQuSDQotCy0LXRgNGMIHwg0LrQtdC50YLQtdGA0LjQvdCzINC90LAg0YHQstCw0LTRjNCx0YMsINCx0LDQvdC60LXRgtC90YvQuSDQt9Cw0Ls!5e0!3m2!1sen!2s!4v1773428705434!5m2!1sen!2s" width="760" height="500" style="border:1px;" allowfullscreen="true" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
<iframe
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d1749.675516895515!2d35.86030818806184!3d56.850656040536194!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x46b68764eb0c1387%3A0x7cb135f5414bc1e0!2zTG9mdCAxODcwIHwg0J_Qu9C-0YnQsNC00LrQsCDQtNC70Y8g0LzQtdGA0L7Qv9GA0LjRj9GC0LjQuSDQotCy0LXRgNGMIHwg0LrQtdC50YLQtdGA0LjQvdCzINC90LAg0YHQstCw0LTRjNCx0YMsINCx0LDQvdC60LXRgtC90YvQuSDQt9Cw0Ls!5e0!3m2!1sen!2s!4v1773428705434!5m2!1sen!2s"
width="100%" height="100%" style="border:1px;" allowfullscreen="" loading="lazy"
referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
<p class="map_adress">Тверь, улица Двор Пролетарки, 16</p>
<h6 class="map_info">Начало в</h6>
<h6 class="map_time">14:00</h6>
<h6 class="map_time">18:30</h6>
</div>
</div>
</div>
@@ -329,54 +341,54 @@
Фотографии
</h4>
<!-- Slider main container -->
<div class="swiper">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos//IMG_20260223_151049_713.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151049_713.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151049_713.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<div class="swiper">
<!-- Additional required wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos//IMG_20260223_151049_713.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151049_713.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151049_713.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
<div class="swiper-slide">
<img class="swiper_img" src="images/photos/IMG_20260223_151005_128.jpg" alt="photo">
</div>
</div>
<!-- If we need pagination -->
<div class="swiper-pagination"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- If we need navigation buttons -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
<!-- If we need scrollbar -->
<div class="swiper-scrollbar"></div>
</div>
</section>
<section class="to-do-list" id="to-do-list">
<h4 class="do-list_title">
@@ -416,104 +428,129 @@
</div>
</section>
<section class="answer" id="answer">
<h4 class="answer_title">Прошу ответить</h4>
<h4 class="answer_title">Прошу ответить</h4>
<div class="answer_wrapper">
<h6 class="answer_heading">
Просим Вас заполнить форму и подтвердить своё участие
</h6>
<div class="answer_wrapper">
<h6 class="answer_heading">
Просим Вас заполнить форму и подтвердить своё участие
</h6>
<form class="form-info">
<form class="form-info">
<!-- Левая колонка -->
<div class="form_name">
<label>Имя
<input type="text" name="firstName" id="ffname" required>
</label>
<!-- Левая колонка -->
<div class="form_name">
<label>Имя
<input type="text" name="firstName" id="ffname" required>
</label>
<label>Отчество
<input type="text" name="middleName" id="fmname" required>
</label>
<label>Отчество
<input type="text" name="middleName" id="fmname" required>
</label>
<label>Фамилия
<input type="text" name="lastName" id="flname" required>
</label>
<label>Фамилия
<input type="text" name="lastName" id="flname" required>
</label>
<label class="label_1">Комментарий
<textarea cols="1.5" rows="1" type="text" name="lastName" id="fename"
placeholder="Напишите здесь о ваших особых предпочтениях и аллергиях"></textarea>
</label>
</div>
<!-- Средняя колонка -->
<div class="form_menu">
<p class="block_title">Горячее блюдо</p>
<label class="option">
<input type="radio" name="food" id="rmeat" value="meat" required>
Мясо
</label>
<label class="option">
<input type="radio" name="food" id="rfish" value="fish">
Рыба
</label>
</div>
<!-- Правая колонка -->
<div class="form_drink">
<p class="block_title">Напитки</p>
<label class="option"><input type="checkbox" name="drink" value="champagne" id="cchampagne">
Шампанское</label>
<label class="option"><input type="checkbox" name="drink" value="wine" id="cwine"> Вино</label>
<label class="option"><input type="checkbox" name="drink" value="vodka" id="cvodka">
Водка</label>
<label class="option"><input type="checkbox" name="drink" value="whiskey" id="cwhiskey">
Виски</label>
<label class="option"><input type="checkbox" name="drink" value="tequila" id="ctequila">
Текила</label>
</div>
</form>
<form class="form-connect">
<button type="submit" class="answer_btn" id="bsubmit">
Подтвердить участие
</button>
<button type="logout" class="answer_btn" id="logoutForm">
Выйти
</button>
</form>
</div>
<!-- Средняя колонка -->
<div class="form_menu">
<p class="block_title">Горячее блюдо</p>
<label class="option">
<input type="radio" name="food" id="rmeat" value="meat" required>
Мясо
</label>
<label class="option">
<input type="radio" name="food" id="rfish" value="fish">
Рыба
</label>
</div>
<!-- Правая колонка -->
<div class="form_drink">
<p class="block_title">Напитки</p>
<label class="option"><input type="checkbox" name="drink" value="champagne" id="cchampagne"> Шампанское</label>
<label class="option"><input type="checkbox" name="drink" value="wine" id="cwine"> Вино</label>
<label class="option"><input type="checkbox" name="drink" value="vodka" id="cvodka"> Водка</label>
<label class="option"><input type="checkbox" name="drink" value="whiskey" id="cwhiskey"> Виски</label>
<label class="option"><input type="checkbox" name="drink" value="tequila" id="ctequila"> Текила</label>
</div>
<button type="submit" class="answer_btn" id="bsubmit">
Подтвердить участие
</button>
</form>
<button type="logout" class="answer_btn" id="logoutForm">
Выйти
</button>
</div>
</section>
</main>
<footer class="footer">
<div class="footer_inner">
<div class="footer_title">
<h1 class="fotter_logo">
Алёна и Дмитрий
</h1>
<p class="footer_date">22 августа 2026</p>
<p class="footer_place">LOFT 1870</p>
<h1 class="fotter_logo">
Алёна и Дмитрий
</h1>
<p class="footer_date">22 августа 2026</p>
<p class="footer_place">LOFT 1870</p>
</div>
<div class="footer_contacts">
<p class="footer_text">"С нетерпением ждем встречи!"</p>
<div class="footer_cntcts">
<a class="footer_cnt" href="https://t.me/Alena7729" target="_blank"><?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="40px" height="40px" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="14" fill="url(#paint0_linear_87_7225)"/>
<path d="M22.9866 10.2088C23.1112 9.40332 22.3454 8.76755 21.6292 9.082L7.36482 15.3448C6.85123 15.5703 6.8888 16.3483 7.42147 16.5179L10.3631 17.4547C10.9246 17.6335 11.5325 17.541 12.0228 17.2023L18.655 12.6203C18.855 12.4821 19.073 12.7665 18.9021 12.9426L14.1281 17.8646C13.665 18.3421 13.7569 19.1512 14.314 19.5005L19.659 22.8523C20.2585 23.2282 21.0297 22.8506 21.1418 22.1261L22.9866 10.2088Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_87_7225" x1="16" y1="2" x2="16" y2="30" gradientUnits="userSpaceOnUse">
<stop stop-color="#37BBFE"/>
<stop offset="1" stop-color="#007DBB"/>
</linearGradient>
</defs>
</svg>
Алёна</a>
<a class="footer_cnt" href="https://t.me/DisaTylov" target="_blank"><?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="40px" height="40px" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="14" fill="url(#paint0_linear_87_7225)"/>
<path d="M22.9866 10.2088C23.1112 9.40332 22.3454 8.76755 21.6292 9.082L7.36482 15.3448C6.85123 15.5703 6.8888 16.3483 7.42147 16.5179L10.3631 17.4547C10.9246 17.6335 11.5325 17.541 12.0228 17.2023L18.655 12.6203C18.855 12.4821 19.073 12.7665 18.9021 12.9426L14.1281 17.8646C13.665 18.3421 13.7569 19.1512 14.314 19.5005L19.659 22.8523C20.2585 23.2282 21.0297 22.8506 21.1418 22.1261L22.9866 10.2088Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_87_7225" x1="16" y1="2" x2="16" y2="30" gradientUnits="userSpaceOnUse">
<stop stop-color="#37BBFE"/>
<stop offset="1" stop-color="#007DBB"/>
</linearGradient>
</defs>
</svg>
Дмитрий</a>
</div>
<a class="footer_cnt" href="https://t.me/Alena7729" target="_blank">
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="40px" height="40px" viewBox="0 0 32 32" fill="none"
xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="14" fill="url(#paint0_linear_87_7225)" />
<path
d="M22.9866 10.2088C23.1112 9.40332 22.3454 8.76755 21.6292 9.082L7.36482 15.3448C6.85123 15.5703 6.8888 16.3483 7.42147 16.5179L10.3631 17.4547C10.9246 17.6335 11.5325 17.541 12.0228 17.2023L18.655 12.6203C18.855 12.4821 19.073 12.7665 18.9021 12.9426L14.1281 17.8646C13.665 18.3421 13.7569 19.1512 14.314 19.5005L19.659 22.8523C20.2585 23.2282 21.0297 22.8506 21.1418 22.1261L22.9866 10.2088Z"
fill="white" />
<defs>
<linearGradient id="paint0_linear_87_7225" x1="16" y1="2" x2="16" y2="30"
gradientUnits="userSpaceOnUse">
<stop stop-color="#37BBFE" />
<stop offset="1" stop-color="#007DBB" />
</linearGradient>
</defs>
</svg>
Алёна
</a>
<a class="footer_cnt" href="https://t.me/DisaTylov" target="_blank">
<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<svg width="40px" height="40px" viewBox="0 0 32 32" fill="none"
xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="14" fill="url(#paint0_linear_87_7225)" />
<path
d="M22.9866 10.2088C23.1112 9.40332 22.3454 8.76755 21.6292 9.082L7.36482 15.3448C6.85123 15.5703 6.8888 16.3483 7.42147 16.5179L10.3631 17.4547C10.9246 17.6335 11.5325 17.541 12.0228 17.2023L18.655 12.6203C18.855 12.4821 19.073 12.7665 18.9021 12.9426L14.1281 17.8646C13.665 18.3421 13.7569 19.1512 14.314 19.5005L19.659 22.8523C20.2585 23.2282 21.0297 22.8506 21.1418 22.1261L22.9866 10.2088Z"
fill="white" />
<defs>
<linearGradient id="paint0_linear_87_7225" x1="16" y1="2" x2="16" y2="30"
gradientUnits="userSpaceOnUse">
<stop stop-color="#37BBFE" />
<stop offset="1" stop-color="#007DBB" />
</linearGradient>
</defs>
</svg>
Дмитрий
</a>
</div>
</div>
<div class="footer_copy">
<div class="footer_hashtag">#свадьба2026</div>

View File

@@ -2,6 +2,8 @@ const swiper = new Swiper('.swiper', {
// Optional parameters
direction: 'horizontal',
loop: true,
spaceBetween: 1, // расстояние между слайдами 10-15px
slidesPerView: 3,
// Navigation arrows
navigation: {
@@ -22,9 +24,55 @@ const swiper = new Swiper('.swiper', {
1200: {
slidesPerView: 2,
},
1600: {
1650: {
slidesPerView: 3,
},
}
});
// Set the date we're counting down to
var countDownDate = new Date("Aug 22, 2026 10:40:00").getTime();
// Update the count down every 1 second
var x = setInterval(function() {
// Get today's date and time
var now = new Date().getTime();
// Find the distance between now and the count down date
var distance = countDownDate - now;
// Time calculations for days, hours, minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// Display the result in the element with id="demo"
document.getElementById("demo").innerHTML = days + "д " + hours + "ч "
+ minutes + "м " + seconds + "с ";
// If the count down is finished, write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
}, 1000);
const burger = document.getElementById('burger');
const nav = document.getElementById('nav');
const links = document.querySelectorAll('.menu .link');
burger.addEventListener('click', () => {
burger.classList.toggle('active');
nav.classList.toggle('active');
});
links.forEach(link => {
link.addEventListener('click', () => {
burger.classList.remove('active');
nav.classList.remove('active');
});
});

View File

@@ -66,7 +66,16 @@ img {
}
.menu {
display: flex;
justify-content: space-between;
justify-content: center;
gap: 20px;
}
.items_up {
display: flex;
gap: 20px;
}
.items_down {
display: flex;
gap: 20px;
}
.item {
color: #e7b15c;
@@ -86,6 +95,132 @@ img {
text-decoration: underline;
}
/* BURGER */
.burger {
display: none;
width: 40px;
height: 30px;
position: relative;
cursor: pointer;
z-index: 1001;
}
.burger span {
position: absolute;
left: 0;
width: 100%;
height: 4px;
background: #e7b15c;
border-radius: 5px;
transition: 0.4s;
}
/* 3 полоски */
.burger span:nth-child(1) {
top: 0;
}
.burger span:nth-child(2) {
top: 50%;
transform: translateY(-50%);
}
.burger span:nth-child(3) {
bottom: 0;
}
.burger.active span:nth-child(1) {
top: 50%;
transform: translateY(-50%) rotate(45deg);
}
.burger.active span:nth-child(2) {
opacity: 0;
}
.burger.active span:nth-child(3) {
top: 50%;
transform: translateY(-50%) rotate(-45deg);
}
/* MOBILE MENU */
@media (max-width: 900px) {
.header {
position: fixed;
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
z-index: 100;
width: 10%;
border-radius: 10px;
margin-left: 40px;
box-shadow: #444 2px 2px 4px 0px;
}
.burger {
display: block;
display: flex;
}
.nav {
position: fixed;
top: 0;
left: 0; /* ВАЖНО */
width: 100%;
height: 100vh;
background: rgba(102, 60, 36, 0.97);
backdrop-filter: blur(12px);
display: flex;
justify-content: center;
align-items: center;
transform: translateY(-100%);
transition: 0.5s ease;
z-index: 1000;
}
.nav.active {
transform: translateY(0);
}
.nav::before {
content: "";
position: absolute;
inset: 0;
background: radial-gradient(circle, transparent 40%, rgba(0,0,0,0.4));
}
.menu {
flex-direction: column;
gap: 30px;
text-align: center;
}
.item {
font-size: 28px;
}
.link {
position: relative;
}
/* красивый hover эффект */
.link::after {
content: "";
position: absolute;
left: 0;
bottom: -5px;
width: 0%;
height: 2px;
background: #e7b15c;
transition: 0.3s;
}
.link:hover::after {
width: 100%;
}
}
/* --------------------------------Welcome----------------------------- */
.heading {
@@ -162,7 +297,7 @@ img {
.people {
width: 1400px;
margin: 0 auto;
padding-bottom: 80px;
/* padding-bottom: 80px; */
padding-top: 40px;
}
.heading_h4 {
@@ -181,8 +316,9 @@ h4 {
margin-bottom: 40px;
}
.newlywed {
display: flex;
justify-content: space-between;
margin: 0 auto;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 40px;
width: 100%;
margin-bottom: 40px;
@@ -206,10 +342,11 @@ h4 {
width: 60%;
}
.newlywed_title {
font-size: 34px;
font-weight: 700;
text-decoration:underline;
line-height: 1.5;
font-size: 29px;
font-weight: 700;
text-decoration: underline;
line-height: 1.5;
margin-bottom: 15px;
}
.newlywed_info {
font-size: 26px;
@@ -282,8 +419,8 @@ h4 {
}
.row_up_item {
background-color: #e5b97e;
width: 320px;
padding: 30px;
width: 380px;
padding: 35px;
display: flex;
justify-content: center;
align-items: center;
@@ -331,6 +468,7 @@ h4 {
margin-top: 60px;
}
.transfer_map {
margin: 0 auto;
display: flex;
justify-content: center;
align-items: center;
@@ -338,17 +476,25 @@ h4 {
}
.map > div {
border: 1px solid #000;
width: 760px; /* или 100% */
height: 500px;
}
.map iframe {
width: 100%;
height: 100%;
border: none;
}
.map_adress {
font-size: 50px;
text-align: center;
text-decoration: underline;
margin-top: 20px;
font-weight: 900;
}
.map_info {
font-size: 50px;
text-align: center;
margin-top: 10px;
font-weight: 900;
}
.map_time {
font-size: 50px;
@@ -360,7 +506,7 @@ h4 {
/* --------------------------------PHOTOS-------------------------------------- */
.photos {
padding-bottom: 140px;
margin: 0 auto;
margin: 0 60px;
padding-top: 60px;
}
.photos_title {
@@ -371,10 +517,12 @@ h4 {
border: 5px dotted #000;
}
.swiper {
width: 95%;
height: 550px;
text-align: center;
padding: 20px;
width: 100%;
height: 550px;
text-align: center;
padding: 20px;
margin: 0px auto;
overflow: hidden !important; /* возвращаем скрытие слайдов */
}
.swiper-wrapper {
width: 100%;
@@ -385,6 +533,13 @@ h4 {
.swiper-navigation-icon {
color: #000;
}
.swiper-button-prev {
left: -10px !important;
}
.swiper-button-next {
right: -10px !important;
}
/* --------------------------------------------TODOLIST------------------------------------------------------ */
@@ -440,8 +595,8 @@ h4 {
}
.answer_wrapper {
background: linear-gradient(135deg, #f3d9c6, #e8c3a4, #d9a77a);
padding: 60px;
margin: 0 400px;
padding: 50px;
margin: 0 300px;
border-radius: 25px;
box-shadow: 0 15px 40px rgba(0,0,0,0.08);
margin-top: 20px;
@@ -457,8 +612,15 @@ h4 {
.form-info {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-columns: 2fr 1fr 1fr;
gap: 50px;
margin-bottom: 40px;
}
.form-connect {
width: 100%;
display: flex;
flex-direction: column;
gap: 20px;
}
.form_name {
@@ -468,7 +630,18 @@ h4 {
gap: 20px;
font-size: 36px;
font-weight: 700;
justify-content: space-between;
width: 500px;
}
label {
display: flex;
justify-content: space-between;
}
.label_1 {
flex-direction: column;
gap: 20px;
}
.block_title {
font-weight: 700;
@@ -483,6 +656,7 @@ h4 {
gap: 10px;
margin-bottom: 12px;
font-size: 30px;
justify-content: start;
}
input[type="text"] {
@@ -501,7 +675,6 @@ input[type="checkbox"] {
.answer_btn {
grid-column: 1 / -1;
margin-top: 40px;
padding: 18px 40px;
border-radius: 30px;
border: none;
@@ -527,6 +700,13 @@ input[type="checkbox"] {
outline: none;
font-size: 30px;
}
textarea {
padding: 0 20px;
border-radius: 25px;
border: none;
background-color: #ffffff;
font-size: 30px;
}
/* -----------------------------FOOTER---------------------------------- */
@@ -548,8 +728,9 @@ input[type="checkbox"] {
gap: 5px;
}
.fotter_logo {
font-size: 42px;
text-decoration: underline;
font-size: 42px;
text-decoration: underline;
margin-bottom: 25px;
}
.footer_date {
font-size: 36px;
@@ -590,7 +771,195 @@ input[type="checkbox"] {
.footer_hashtag {
text-decoration: underline;
font-size: 36px;
margin-bottom: 10px;
margin-bottom: 25px;
}
.footer_copyright {
}
/* --------------------------------------------------------ADAPTIVE------------------------------------------------------ */
/* обычные экраны */
@media (max-width: 1720px) {
.item {
font-size: 30px;
}
.map > div {
width: 680px;
height: 450px;
}
.heading {
margin: 0 350px;
}
}
@media (max-width: 1620px) {
.row_up_item {
width: 350px;
}
.time_img {
width: 50px;
height: 50px;
}
.time_h6 {
font-size: 22px;
}
.time_p {
font-size: 26px;
}
.time_comment {
font-size: 22px;
}
.img_newlywed {
height: 200px;
width: 200px;
}
.heading {
margin: 0 300px;
height: 580px;
}
}
@media (max-width: 1520px) {
.menu {
flex-direction: column;
}
.items_up,
.items_down {
justify-content: center;
gap: 100px;
}
.heading_content {
padding: 15px 60px;
}
.heading {
margin: 0 280px;
}
.time {
font-size: 90px;
}
.transfer_map {
gap: 50px;
}
.map > div {
width: 620px;
height: 420px;
}
.form_name {
font-size: 30px;
width: 430px;
}
.block_title {
font-size: 30px;
}
.form_name input[type="text"] {
width: 300px;
}
.answer_btn {
font-size: 30px;
}
.to-do-list_items {
width: 70%;
}
}
@media (max-width: 1420px) {
.heading {
margin: 0 250px;
}
.newlywed {
width: 50%;
}
.row_up_item {
width: 300px;
}
.time_comment {
font-size: 20px;
}
.time_p {
font-size: 22px;
}
.time_img {
width: 40px;
height: 40px;
}
.map > div {
width: 560px;
height: 400px;
}
.map_adress {
font-size: 30px;
}
.map_info {
font-size: 35px;
}
.map_time {
font-size: 40px;
}
.form-info {
display: block;
grid: none;
}
.form_name {
width: 100%;
padding: 0 140px;
margin-bottom: 30px;
}
.form_menu,
.form_drink {
padding: 0 140px;
margin-bottom: 30px;
}
.newlywed {
display: flex;
flex-direction: column;
}
.newlywed_text {
margin-left: 50px;
}
.people {
width: auto;
}
}
@media (max-width: 1320px){
.heading {
height: 480px;
}
.time {
font-size: 70px;
}
.newlywed_info {
font-size: 24px;
}
.form_name {
padding: 0 80px;
}
.form_menu, .form_drink {
padding: 0 80px;
}
.newlywed_info {
font-size: 22px;
}
.map > div {
width: 500px;
height: 350px;
}
.heading {
margin: 0 200px;
}
.to-do-list_items {
width: 80%;
}
.img_newlywed {
height: 160px;
width: 160px;
}
}
@media (max-width: 1220px){
.heading {
margin: 0 160px;
}
}