Шифрование паролей администраторов
All checks were successful
Deploy hotel / deploy-kdo (push) Successful in 1m0s
All checks were successful
Deploy hotel / deploy-kdo (push) Successful in 1m0s
This commit is contained in:
@@ -294,6 +294,7 @@ const translations = {
|
||||
'booking.discount': 'Скидка',
|
||||
'booking.total': 'Итого к оплате:',
|
||||
'booking.submit': 'Отправить заявку',
|
||||
'booking.consent': 'Я согласен на обработку персональных данных в соответствии с',
|
||||
'booking.sending': 'Отправка...',
|
||||
'booking.success_sent': 'Заявка отправлена Рауфу Алексеевичу!',
|
||||
'booking.send_error': 'Ошибка отправки',
|
||||
@@ -620,6 +621,7 @@ const translations = {
|
||||
'booking.discount': 'Discount',
|
||||
'booking.total': 'Total to pay:',
|
||||
'booking.submit': 'Send Request',
|
||||
'booking.consent': 'I consent to the processing of personal data in accordance with the',
|
||||
'booking.sending': 'Sending...',
|
||||
'booking.success_sent': 'Request sent to Rauf Alekseevich!',
|
||||
'booking.send_error': 'Sending Error',
|
||||
@@ -949,6 +951,7 @@ const translations = {
|
||||
'booking.discount': 'Аскидка',
|
||||
'booking.total': 'Зегьы ашәахә:',
|
||||
'booking.submit': 'Азаиака аашьҭра',
|
||||
'booking.consent': 'Сара сақәшаӡом аперсоналтә дыррақәа аус адулара азы иаҳасабала',
|
||||
'booking.sending': 'Иаашьҭуеит...',
|
||||
'booking.success_sent': 'Азаиака Рауф Алексееви иахь иаашьҭын!',
|
||||
'booking.send_error': 'Аашьҭра агха',
|
||||
|
||||
@@ -1202,6 +1202,82 @@ h1, h2, h3, h4 {
|
||||
color: rgba(255,255,255,0.4);
|
||||
font-size: clamp(0.75rem, 1.2vw, 0.85rem);
|
||||
}
|
||||
.footer-legal {
|
||||
margin-top: 8px;
|
||||
}
|
||||
.footer-legal a {
|
||||
color: rgba(255,255,255,0.4);
|
||||
text-decoration: none;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
.footer-legal a:hover {
|
||||
color: var(--gold);
|
||||
}
|
||||
.footer-legal-divider {
|
||||
margin: 0 8px;
|
||||
color: rgba(255,255,255,0.15);
|
||||
}
|
||||
|
||||
/* Cookie Banner */
|
||||
.cookie-banner {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 9999;
|
||||
background: var(--dark);
|
||||
border-top: 2px solid var(--gold);
|
||||
padding: clamp(12px, 2vw, 18px) 0;
|
||||
box-shadow: 0 -5px 30px rgba(0,0,0,0.3);
|
||||
display: none;
|
||||
}
|
||||
.cookie-banner.show {
|
||||
display: block;
|
||||
}
|
||||
.cookie-banner-content {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
padding: 0 20px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 20px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.cookie-banner-text {
|
||||
color: rgba(255,255,255,0.8);
|
||||
font-size: clamp(0.8rem, 1.1vw, 0.9rem);
|
||||
line-height: 1.5;
|
||||
flex: 1;
|
||||
min-width: 200px;
|
||||
}
|
||||
.cookie-banner-text i {
|
||||
color: var(--gold);
|
||||
margin-right: 8px;
|
||||
}
|
||||
.cookie-banner-text a {
|
||||
color: var(--gold);
|
||||
text-decoration: underline;
|
||||
}
|
||||
.cookie-banner-text a:hover {
|
||||
color: #e6b84d;
|
||||
}
|
||||
.cookie-accept-btn {
|
||||
background: var(--gold);
|
||||
color: var(--dark);
|
||||
border: none;
|
||||
padding: clamp(8px, 1.5vw, 12px) clamp(20px, 3vw, 30px);
|
||||
border-radius: 50px;
|
||||
font-weight: 700;
|
||||
font-size: clamp(0.8rem, 1vw, 0.9rem);
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.cookie-accept-btn:hover {
|
||||
background: #e6b84d;
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
/* Animations */
|
||||
@keyframes fadeInUp {
|
||||
|
||||
@@ -722,6 +722,11 @@
|
||||
</div>
|
||||
<div class="footer-bottom">
|
||||
<p data-i18n="footer.copyright">© 2025 Hotel 777. Хозяин — Рауф Алексеевич. Все права защищены. Абхазия, Гудаутский район, с. Мгудзырхуа.</p>
|
||||
<p class="footer-legal">
|
||||
<a href="/privacy">Политика конфиденциальности</a>
|
||||
<span class="footer-legal-divider">|</span>
|
||||
<a href="/terms">Пользовательское соглашение</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
@@ -808,6 +813,13 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="mt-4">
|
||||
<div class="form-check mb-3" style="font-size: 0.8rem; color: #64748b;">
|
||||
<input class="form-check-input" type="checkbox" id="privacyConsent" required style="margin-top: 0.3rem;">
|
||||
<label class="form-check-label" for="privacyConsent">
|
||||
<span data-i18n="booking.consent">Я согласен на обработку персональных данных в соответствии с</span>
|
||||
<a href="/privacy" target="_blank" style="color: var(--primary); text-decoration: underline;">Политикой конфиденциальности</a>
|
||||
</label>
|
||||
</div>
|
||||
<button type="submit" class="btn-submit-booking">
|
||||
<i class="fas fa-paper-plane me-2"></i><span data-i18n="booking.submit">Отправить заявку</span>
|
||||
</button>
|
||||
@@ -874,6 +886,20 @@
|
||||
});
|
||||
})
|
||||
.catch(function() {});
|
||||
|
||||
function acceptCookies() {
|
||||
try { localStorage.setItem('cookie_consent', '1'); } catch(e) {}
|
||||
document.getElementById('cookieBanner').classList.remove('show');
|
||||
}
|
||||
|
||||
function initCookieBanner() {
|
||||
try {
|
||||
if (localStorage.getItem('cookie_consent') === '1') return;
|
||||
} catch(e) {}
|
||||
document.getElementById('cookieBanner').classList.add('show');
|
||||
}
|
||||
|
||||
initCookieBanner();
|
||||
})();
|
||||
</script>
|
||||
|
||||
@@ -966,6 +992,16 @@
|
||||
<img class="gallery-lightbox-img" id="galleryLightboxImg" src="" alt="">
|
||||
</div>
|
||||
|
||||
<!-- Cookie Consent Banner -->
|
||||
<div class="cookie-banner" id="cookieBanner">
|
||||
<div class="cookie-banner-content">
|
||||
<div class="cookie-banner-text">
|
||||
<i class="fas fa-cookie-bite"></i>
|
||||
<span>Мы используем файлы cookie для улучшения работы сайта. Продолжая использовать сайт, вы соглашаетесь с <a href="/privacy" target="_blank">Политикой конфиденциальности</a>.</span>
|
||||
</div>
|
||||
<button class="cookie-accept-btn" onclick="acceptCookies()">Принимаю</button>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
280
public/privacy.html
Normal file
280
public/privacy.html
Normal file
@@ -0,0 +1,280 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Политика конфиденциальности — Hotel 777</title>
|
||||
<link rel="icon" type="image/x-icon" href="img/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Playfair+Display:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/fontawesome.min.css" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--primary: #0a4d68;
|
||||
--primary-light: #088395;
|
||||
--accent: #f5a623;
|
||||
--dark: #1a1a2e;
|
||||
--gold: #d4a843;
|
||||
--text: #1e293b;
|
||||
--text-light: #64748b;
|
||||
--bg: #f8fafc;
|
||||
--card-bg: #ffffff;
|
||||
}
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
color: var(--text);
|
||||
background: var(--bg);
|
||||
line-height: 1.7;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
.page-hero {
|
||||
background: linear-gradient(135deg, var(--dark) 0%, var(--primary) 50%, var(--primary-light) 100%);
|
||||
padding: clamp(40px, 8vw, 80px) 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.page-hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: radial-gradient(circle at 30% 50%, rgba(212,168,67,0.15) 0%, transparent 60%);
|
||||
}
|
||||
.page-hero-content { position: relative; z-index: 1; }
|
||||
.page-hero .hero-icon {
|
||||
font-size: clamp(2.5rem, 5vw, 3.5rem);
|
||||
color: var(--gold);
|
||||
margin-bottom: 20px;
|
||||
display: block;
|
||||
}
|
||||
.page-hero h1 {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: clamp(1.8rem, 4vw, 2.8rem);
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.page-hero .hero-subtitle {
|
||||
font-size: clamp(0.9rem, 1.2vw, 1.05rem);
|
||||
color: rgba(255,255,255,0.7);
|
||||
font-weight: 400;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.back-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: rgba(255,255,255,0.8);
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 24px;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
.back-link:hover { color: #fff; }
|
||||
.container { max-width: 860px; margin: 0 auto; padding: 0 20px; }
|
||||
.content-section {
|
||||
padding: clamp(30px, 5vw, 60px) 0;
|
||||
}
|
||||
.content-section .last-updated {
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-light);
|
||||
margin-bottom: 40px;
|
||||
padding: 12px 20px;
|
||||
background: rgba(10,77,104,0.05);
|
||||
border-left: 3px solid var(--primary);
|
||||
border-radius: 0 8px 8px 0;
|
||||
}
|
||||
.content-section h2 {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: clamp(1.3rem, 2vw, 1.6rem);
|
||||
color: var(--dark);
|
||||
margin: 36px 0 16px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 2px solid rgba(212,168,67,0.3);
|
||||
}
|
||||
.content-section h2:first-of-type { margin-top: 0; }
|
||||
.content-section h3 {
|
||||
font-size: 1.1rem;
|
||||
color: var(--primary);
|
||||
margin: 24px 0 10px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.content-section p {
|
||||
margin-bottom: 14px;
|
||||
font-size: clamp(0.95rem, 1.1vw, 1rem);
|
||||
color: var(--text);
|
||||
}
|
||||
.content-section ul {
|
||||
margin: 10px 0 20px 24px;
|
||||
}
|
||||
.content-section ul li {
|
||||
margin-bottom: 8px;
|
||||
font-size: clamp(0.95rem, 1.1vw, 1rem);
|
||||
}
|
||||
.content-section ul li::marker { color: var(--gold); }
|
||||
.info-card {
|
||||
background: var(--card-bg);
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 12px;
|
||||
padding: clamp(20px, 3vw, 28px);
|
||||
margin: 24px 0;
|
||||
}
|
||||
.info-card h4 {
|
||||
font-size: 0.8rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
color: var(--text-light);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.info-card .owner-name {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: 1.2rem;
|
||||
font-weight: 600;
|
||||
color: var(--dark);
|
||||
}
|
||||
.info-card .detail-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-top: 8px;
|
||||
font-size: 0.95rem;
|
||||
color: var(--text);
|
||||
}
|
||||
.info-card .detail-row i {
|
||||
width: 20px;
|
||||
color: var(--primary-light);
|
||||
text-align: center;
|
||||
}
|
||||
.law-reference {
|
||||
background: linear-gradient(135deg, var(--primary), var(--primary-light));
|
||||
color: #fff;
|
||||
padding: clamp(20px, 3vw, 32px);
|
||||
border-radius: 12px;
|
||||
margin-top: 40px;
|
||||
text-align: center;
|
||||
}
|
||||
.law-reference h3 {
|
||||
color: #fff;
|
||||
font-family: 'Playfair Display', serif;
|
||||
margin: 0 0 10px;
|
||||
}
|
||||
.law-reference p { color: rgba(255,255,255,0.85); margin: 0; font-size: 0.95rem; }
|
||||
.page-footer {
|
||||
text-align: center;
|
||||
padding: 30px 20px;
|
||||
border-top: 1px solid #e2e8f0;
|
||||
color: var(--text-light);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.page-footer a {
|
||||
color: var(--primary);
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
}
|
||||
.page-footer a:hover { color: var(--primary-light); }
|
||||
@media (max-width: 576px) {
|
||||
.container { padding: 0 16px; }
|
||||
.content-section { padding: 24px 0; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<section class="page-hero">
|
||||
<div class="page-hero-content">
|
||||
<i class="fas fa-shield-alt hero-icon"></i>
|
||||
<h1>Политика конфиденциальности</h1>
|
||||
<p class="hero-subtitle">Настоящая Политика определяет порядок обработки и защиты персональных данных пользователей сайта отеля Hotel 777</p>
|
||||
<br>
|
||||
<a href="/" class="back-link"><i class="fas fa-arrow-left"></i> Вернуться на сайт</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section">
|
||||
<div class="container">
|
||||
<div class="last-updated">
|
||||
<i class="fas fa-calendar-check me-2"></i>Последнее обновление: июль 2026 г.
|
||||
</div>
|
||||
|
||||
<h2>1. Общие положения</h2>
|
||||
<p>Настоящая Политика конфиденциальности (далее — Политика) разработана в соответствии с Федеральным законом Российской Федерации от 27.07.2006 № 152-ФЗ «О персональных данных» и законодательством Республики Абхазия в области защиты персональных данных.</p>
|
||||
<p>Политика действует в отношении всех персональных данных, которые сайт отеля Hotel 777 (далее — Сайт) может получить от Пользователя во время использования им Сайта, а также при заполнении форм бронирования и оставлении отзывов.</p>
|
||||
<p>Использование Сайта означает безоговорочное согласие Пользователя с настоящей Политикой и указанными в ней условиями обработки его персональных данных.</p>
|
||||
|
||||
<h2>2. Владелец Сайта (Оператор персональных данных)</h2>
|
||||
<div class="info-card">
|
||||
<h4>Оператор</h4>
|
||||
<div class="owner-name">Рауф Алексеевич</div>
|
||||
<div class="detail-row"><i class="fas fa-map-marker-alt"></i> Республика Абхазия, Гудаутский район, с. Мгудзырхуа, Набережная ул., 1</div>
|
||||
<div class="detail-row"><i class="fas fa-phone"></i> 8 (940) 927-00-80</div>
|
||||
</div>
|
||||
|
||||
<h2>3. Какие данные мы собираем</h2>
|
||||
<p>При использовании Сайта мы можем собирать следующие категории персональных данных:</p>
|
||||
<ul>
|
||||
<li><strong>Форма бронирования:</strong> имя, контактный телефон, даты заезда и выезда, количество гостей, особые пожелания, промокод.</li>
|
||||
<li><strong>Форма отзыва:</strong> имя (ФИО), страна, город, текст отзыва, оценка.</li>
|
||||
<li><strong>Автоматически собираемые данные:</strong> IP-адрес, тип браузера, время доступа, файлы cookie, информация о геолокации (страна, город — только для формы отзыва).</li>
|
||||
</ul>
|
||||
<p>Мы <strong>не собираем</strong> паспортные данные, данные банковских карт, адреса электронной почты (кроме случаев, когда вы сами их предоставляете) и иную чувствительную информацию.</p>
|
||||
|
||||
<h2>4. Цели обработки персональных данных</h2>
|
||||
<p>Собранные персональные данные используются исключительно для следующих целей:</p>
|
||||
<ul>
|
||||
<li>Обработка заявок на бронирование номеров и связи с Пользователем по указанному телефону.</li>
|
||||
<li>Размещение и модерация отзывов на Сайте.</li>
|
||||
<li>Защита от спама и злоупотреблений (проверка IP-адреса при публикации отзывов).</li>
|
||||
<li>Улучшение работы Сайта и анализ посещаемости.</li>
|
||||
</ul>
|
||||
<p>Мы <strong>не передаём</strong> персональные данные третьим лицам, за исключением случаев, предусмотренных законодательством.</p>
|
||||
|
||||
<h2>5. Файлы cookie</h2>
|
||||
<p>Сайт использует следующие типы файлов cookie:</p>
|
||||
<ul>
|
||||
<li><strong>Технические cookie:</strong> необходимы для корректной работы Сайта (сохранение языковых предпочтений, идентификация сессии администратора).</li>
|
||||
<li><strong>Функциональные cookie:</strong> запоминают выбор Пользователя (принятие условий cookie-уведомления, выбор языка).</li>
|
||||
</ul>
|
||||
<p>Мы <strong>не используем</strong> маркетинговые и рекламные cookie, а также cookie третьих лиц для отслеживания Пользователей.</p>
|
||||
<p>Пользователь может отключить cookie в настройках браузера, однако это может повлиять на функциональность Сайта. Продолжая использовать Сайт без изменения настроек браузера, Пользователь соглашается на использование файлов cookie.</p>
|
||||
|
||||
<h2>6. Хранение и защита данных</h2>
|
||||
<p>Персональные данные хранятся в базе данных SQLite на сервере, расположенном на территории Российской Федерации, что соответствует требованиям Федерального закона № 152-ФЗ о локализации персональных данных граждан РФ.</p>
|
||||
<p>Мы принимаем необходимые организационные и технические меры для защиты персональных данных от неправомерного доступа, уничтожения, изменения, блокирования, копирования и распространения, включая:</p>
|
||||
<ul>
|
||||
<li>Шифрование паролей администраторов.</li>
|
||||
<li>Аутентификацию для доступа к панели управления.</li>
|
||||
<li>Защищённое хранение файлов конфигурации.</li>
|
||||
<li>Резервное копирование базы данных.</li>
|
||||
</ul>
|
||||
<p>Срок хранения персональных данных определяется целями их обработки. Данные бронирований хранятся в течение всего периода деятельности отеля для внутреннего учёта.</p>
|
||||
|
||||
<h2>7. Передача данных третьим лицам</h2>
|
||||
<p>Мы не продаём, не обмениваем и не передаём персональные данные Пользователей третьим лицам. Исключения составляют:</p>
|
||||
<ul>
|
||||
<li>Случаи, прямо предусмотренные законодательством Российской Федерации и Республики Абхазия.</li>
|
||||
<li>Запросы уполномоченных государственных органов, оформленные в соответствии с законом.</li>
|
||||
</ul>
|
||||
|
||||
<h2>8. Контактная информация</h2>
|
||||
<div class="info-card">
|
||||
<h4>По всем вопросам, связанным с обработкой персональных данных</h4>
|
||||
<div class="detail-row"><i class="fas fa-user"></i> Рауф Алексеевич (владелец отеля)</div>
|
||||
<div class="detail-row"><i class="fas fa-phone"></i> 8 (940) 927-00-80</div>
|
||||
<div class="detail-row"><i class="fas fa-map-marker-alt"></i> Республика Абхазия, Гудаутский район, с. Мгудзырхуа, Набережная ул., 1</div>
|
||||
</div>
|
||||
|
||||
<div class="law-reference">
|
||||
<h3>Законодательная основа</h3>
|
||||
<p>Настоящая Политика разработана в соответствии с Федеральным законом РФ от 27.07.2006 № 152-ФЗ «О персональных данных» и законодательством Республики Абхазия.</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="page-footer">
|
||||
<p>© 2025 Hotel 777. Все права защищены. | <a href="/">На главную</a> | <a href="/terms">Пользовательское соглашение</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
255
public/terms.html
Normal file
255
public/terms.html
Normal file
@@ -0,0 +1,255 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Пользовательское соглашение — Hotel 777</title>
|
||||
<link rel="icon" type="image/x-icon" href="img/favicon.ico">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&family=Playfair+Display:wght@400;500;600;700;800&display=swap" rel="stylesheet">
|
||||
<link href="css/bootstrap.min.css" rel="stylesheet">
|
||||
<link href="css/fontawesome.min.css" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--primary: #0a4d68;
|
||||
--primary-light: #088395;
|
||||
--accent: #f5a623;
|
||||
--dark: #1a1a2e;
|
||||
--gold: #d4a843;
|
||||
--text: #1e293b;
|
||||
--text-light: #64748b;
|
||||
--bg: #f8fafc;
|
||||
--card-bg: #ffffff;
|
||||
}
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body {
|
||||
font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
|
||||
color: var(--text);
|
||||
background: var(--bg);
|
||||
line-height: 1.7;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
.page-hero {
|
||||
background: linear-gradient(135deg, var(--dark) 0%, var(--primary) 50%, var(--primary-light) 100%);
|
||||
padding: clamp(40px, 8vw, 80px) 0;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
.page-hero::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: radial-gradient(circle at 70% 50%, rgba(212,168,67,0.15) 0%, transparent 60%);
|
||||
}
|
||||
.page-hero-content { position: relative; z-index: 1; }
|
||||
.page-hero .hero-icon {
|
||||
font-size: clamp(2.5rem, 5vw, 3.5rem);
|
||||
color: var(--gold);
|
||||
margin-bottom: 20px;
|
||||
display: block;
|
||||
}
|
||||
.page-hero h1 {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: clamp(1.8rem, 4vw, 2.8rem);
|
||||
font-weight: 700;
|
||||
color: #fff;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.page-hero .hero-subtitle {
|
||||
font-size: clamp(0.9rem, 1.2vw, 1.05rem);
|
||||
color: rgba(255,255,255,0.7);
|
||||
font-weight: 400;
|
||||
max-width: 600px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.back-link {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 8px;
|
||||
color: rgba(255,255,255,0.8);
|
||||
text-decoration: none;
|
||||
font-size: 0.9rem;
|
||||
margin-bottom: 24px;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
.back-link:hover { color: #fff; }
|
||||
.container { max-width: 860px; margin: 0 auto; padding: 0 20px; }
|
||||
.content-section {
|
||||
padding: clamp(30px, 5vw, 60px) 0;
|
||||
}
|
||||
.content-section .last-updated {
|
||||
font-size: 0.85rem;
|
||||
color: var(--text-light);
|
||||
margin-bottom: 40px;
|
||||
padding: 12px 20px;
|
||||
background: rgba(10,77,104,0.05);
|
||||
border-left: 3px solid var(--primary);
|
||||
border-radius: 0 8px 8px 0;
|
||||
}
|
||||
.content-section h2 {
|
||||
font-family: 'Playfair Display', serif;
|
||||
font-size: clamp(1.3rem, 2vw, 1.6rem);
|
||||
color: var(--dark);
|
||||
margin: 36px 0 16px;
|
||||
padding-bottom: 8px;
|
||||
border-bottom: 2px solid rgba(212,168,67,0.3);
|
||||
}
|
||||
.content-section h2:first-of-type { margin-top: 0; }
|
||||
.content-section h3 {
|
||||
font-size: 1.1rem;
|
||||
color: var(--primary);
|
||||
margin: 24px 0 10px;
|
||||
font-weight: 600;
|
||||
}
|
||||
.content-section p {
|
||||
margin-bottom: 14px;
|
||||
font-size: clamp(0.95rem, 1.1vw, 1rem);
|
||||
color: var(--text);
|
||||
}
|
||||
.content-section ul {
|
||||
margin: 10px 0 20px 24px;
|
||||
}
|
||||
.content-section ul li {
|
||||
margin-bottom: 8px;
|
||||
font-size: clamp(0.95rem, 1.1vw, 1rem);
|
||||
}
|
||||
.content-section ul li::marker { color: var(--gold); }
|
||||
.info-card {
|
||||
background: var(--card-bg);
|
||||
border: 1px solid #e2e8f0;
|
||||
border-radius: 12px;
|
||||
padding: clamp(20px, 3vw, 28px);
|
||||
margin: 24px 0;
|
||||
}
|
||||
.info-card h4 {
|
||||
font-size: 0.8rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
color: var(--text-light);
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.info-card .detail-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
margin-top: 8px;
|
||||
font-size: 0.95rem;
|
||||
color: var(--text);
|
||||
}
|
||||
.info-card .detail-row i {
|
||||
width: 20px;
|
||||
color: var(--primary-light);
|
||||
text-align: center;
|
||||
}
|
||||
.page-footer {
|
||||
text-align: center;
|
||||
padding: 30px 20px;
|
||||
border-top: 1px solid #e2e8f0;
|
||||
color: var(--text-light);
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
.page-footer a {
|
||||
color: var(--primary);
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
}
|
||||
.page-footer a:hover { color: var(--primary-light); }
|
||||
@media (max-width: 576px) {
|
||||
.container { padding: 0 16px; }
|
||||
.content-section { padding: 24px 0; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<section class="page-hero">
|
||||
<div class="page-hero-content">
|
||||
<i class="fas fa-file-contract hero-icon"></i>
|
||||
<h1>Пользовательское соглашение</h1>
|
||||
<p class="hero-subtitle">Условия использования сайта отеля Hotel 777. Пожалуйста, внимательно ознакомьтесь перед бронированием.</p>
|
||||
<br>
|
||||
<a href="/" class="back-link"><i class="fas fa-arrow-left"></i> Вернуться на сайт</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="content-section">
|
||||
<div class="container">
|
||||
<div class="last-updated">
|
||||
<i class="fas fa-calendar-check me-2"></i>Последнее обновление: июль 2026 г.
|
||||
</div>
|
||||
|
||||
<h2>1. Общие положения</h2>
|
||||
<p>1.1. Настоящее Пользовательское соглашение (далее — Соглашение) регулирует отношения между владельцем сайта отеля Hotel 777 (далее — Администрация) и физическим лицом (далее — Пользователь) по использованию сайта, расположенного в сети Интернет по адресу домена, на котором размещён данный сайт (далее — Сайт).</p>
|
||||
<p>1.2. Использование Сайта, включая просмотр страниц, заполнение форм бронирования и оставление отзывов, означает полное и безоговорочное принятие Пользователем условий настоящего Соглашения.</p>
|
||||
<p>1.3. В случае несогласия с условиями Соглашения Пользователь обязан немедленно прекратить использование Сайта.</p>
|
||||
|
||||
<h2>2. Предмет Соглашения</h2>
|
||||
<p>2.1. Сайт предоставляет Пользователю информационные услуги по ознакомлению с предложениями отеля Hotel 777, а также возможность направить заявку на бронирование номеров.</p>
|
||||
<p>2.2. Сайт не является публичной офертой. Информация о номерах, ценах и услугах носит ознакомительный характер. Окончательные условия бронирования и проживания согласовываются сторонами индивидуально при подтверждении заявки Администрацией по телефону.</p>
|
||||
|
||||
<h2>3. Права и обязанности Пользователя</h2>
|
||||
<p><strong>Пользователь обязуется:</strong></p>
|
||||
<ul>
|
||||
<li>Предоставлять достоверные и актуальные персональные данные при заполнении форм на Сайте.</li>
|
||||
<li>Не использовать Сайт для совершения противоправных действий, включая распространение вредоносного программного обеспечения, спама, оскорбительных и дискредитирующих материалов.</li>
|
||||
<li>Не предпринимать попыток несанкционированного доступа к административной части Сайта.</li>
|
||||
<li>Соблюдать законодательство Российской Федерации и Республики Абхазия при использовании Сайта.</li>
|
||||
</ul>
|
||||
<p><strong>Пользователь имеет право:</strong></p>
|
||||
<ul>
|
||||
<li>Получать актуальную информацию об услугах отеля через Сайт.</li>
|
||||
<li>Направлять заявки на бронирование через форму на Сайте.</li>
|
||||
<li>Оставлять отзывы о проживании в отеле при условии их достоверности и соблюдения правил публикации.</li>
|
||||
</ul>
|
||||
|
||||
<h2>4. Права и обязанности Администрации</h2>
|
||||
<p><strong>Администрация обязуется:</strong></p>
|
||||
<ul>
|
||||
<li>Обеспечивать работоспособность Сайта и актуальность размещённой информации.</li>
|
||||
<li>Обрабатывать заявки на бронирование и связываться с Пользователями в разумные сроки.</li>
|
||||
<li>Обеспечивать конфиденциальность и защиту персональных данных Пользователей в соответствии с Политикой конфиденциальности.</li>
|
||||
</ul>
|
||||
<p><strong>Администрация имеет право:</strong></p>
|
||||
<ul>
|
||||
<li>Вносить изменения в содержание Сайта, включая информацию о номерах, ценах и услугах, без предварительного уведомления Пользователей.</li>
|
||||
<li>Модерировать и удалять отзывы, не соответствующие требованиям достоверности или содержащие оскорбительные выражения.</li>
|
||||
<li>Приостанавливать или ограничивать доступ к Сайту для проведения технических работ.</li>
|
||||
<li>Изменять условия настоящего Соглашения в одностороннем порядке. Новая редакция вступает в силу с момента её публикации на Сайте.</li>
|
||||
</ul>
|
||||
|
||||
<h2>5. Условия бронирования</h2>
|
||||
<p>5.1. Заявка на бронирование, отправленная через форму на Сайте, не является подтверждением бронирования. Бронирование считается подтверждённым только после того, как Администрация свяжется с Пользователем по указанному в заявке телефону и устно согласует все условия.</p>
|
||||
<p>5.2. Цены, указанные на Сайте, носят информационный характер. Окончательная стоимость проживания согласовывается при подтверждении бронирования.</p>
|
||||
<p>5.3. Отель вправе отказать в бронировании без объяснения причин.</p>
|
||||
<p>5.4. Условия оплаты и аннуляции бронирования обсуждаются индивидуально при подтверждении бронирования по телефону.</p>
|
||||
|
||||
<h2>6. Ответственность сторон</h2>
|
||||
<p>6.1. Администрация не несёт ответственности за убытки и/или упущенную выгоду Пользователя или третьих лиц, возникшие в результате использования или невозможности использования Сайта.</p>
|
||||
<p>6.2. Администрация не несёт ответственности за временные сбои и перерывы в работе Сайта, вызванные техническими неполадками, действиями третьих лиц или форс-мажорными обстоятельствами.</p>
|
||||
<p>6.3. Пользователь несёт полную ответственность за достоверность предоставленных им персональных данных и содержания отзывов.</p>
|
||||
|
||||
<h2>7. Разрешение споров</h2>
|
||||
<p>7.1. Все споры и разногласия, возникающие между Пользователем и Администрацией, разрешаются путём переговоров.</p>
|
||||
<p>7.2. При невозможности урегулирования спора путём переговоров, спор подлежит разрешению в порядке, установленном законодательством Российской Федерации и Республики Абхазия.</p>
|
||||
|
||||
<h2>8. Заключительные положения</h2>
|
||||
<p>8.1. Настоящее Соглашение регулируется и толкуется в соответствии с законодательством Российской Федерации и Республики Абхазия.</p>
|
||||
<p>8.2. Признание какого-либо положения Соглашения недействительным не влечёт недействительности остальных его положений.</p>
|
||||
<p>8.3. Все вопросы и предложения, связанные с настоящим Соглашением, Пользователь может направить Администрации по контактным данным, указанным ниже.</p>
|
||||
|
||||
<h2>9. Реквизиты Администрации</h2>
|
||||
<div class="info-card">
|
||||
<h4>Владелец отеля</h4>
|
||||
<div class="detail-row"><i class="fas fa-user"></i> Рауф Алексеевич</div>
|
||||
<div class="detail-row"><i class="fas fa-phone"></i> 8 (940) 927-00-80</div>
|
||||
<div class="detail-row"><i class="fas fa-map-marker-alt"></i> Республика Абхазия, Гудаутский район, с. Мгудзырхуа, Набережная ул., 1</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="page-footer">
|
||||
<p>© 2025 Hotel 777. Все права защищены. | <a href="/">На главную</a> | <a href="/privacy">Политика конфиденциальности</a></p>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -458,6 +458,14 @@ app.get('/admin', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'admin.html'));
|
||||
});
|
||||
|
||||
app.get('/privacy', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'privacy.html'));
|
||||
});
|
||||
|
||||
app.get('/terms', (req, res) => {
|
||||
res.sendFile(path.join(__dirname, 'public', 'terms.html'));
|
||||
});
|
||||
|
||||
async function convertImages() {
|
||||
const imgDir = path.join(__dirname, 'public', 'img');
|
||||
if (!fs.existsSync(imgDir)) {
|
||||
|
||||
Reference in New Issue
Block a user