рус
Some checks failed
Deploy hotel / deploy-kdo (push) Failing after 39s

This commit is contained in:
2026-07-18 15:38:50 +05:00
parent 22df4e3c48
commit 3385781aa7
4 changed files with 675 additions and 130 deletions

View File

@@ -28,18 +28,19 @@
</button>
<div class="collapse navbar-collapse" id="navMenu">
<ul class="navbar-nav ms-auto">
<li class="nav-item"><a class="nav-link" href="#about">О нас</a></li>
<li class="nav-item"><a class="nav-link" href="#rooms">Номера</a></li>
<li class="nav-item"><a class="nav-link" href="#gallery">Галерея</a></li>
<li class="nav-item"><a class="nav-link" href="#activities">Развлечения</a></li>
<li class="nav-item"><a class="nav-link" href="#travel-tips"><i class="fas fa-map-marked-alt me-1"></i>Уголок туриста</a></li>
<li class="nav-item"><a class="nav-link" href="#reviews">Отзывы</a></li>
<li class="nav-item"><a class="nav-link" href="#host">Хозяин</a></li>
<li class="nav-item"><a class="nav-link" href="#contact">Контакты</a></li>
<li class="nav-item"><a class="nav-link" href="/admin" style="color: var(--gold);"><i class="fas fa-cog"></i> Управление</a></li>
<li class="nav-item"><a class="nav-link" href="#about" data-i18n="nav.about">О нас</a></li>
<li class="nav-item"><a class="nav-link" href="#rooms" data-i18n="nav.rooms">Номера</a></li>
<li class="nav-item"><a class="nav-link" href="#gallery" data-i18n="nav.gallery">Галерея</a></li>
<li class="nav-item"><a class="nav-link" href="#activities" data-i18n="nav.activities">Развлечения</a></li>
<li class="nav-item"><a class="nav-link" href="#travel-tips"><i class="fas fa-map-marked-alt me-1"></i><span data-i18n="nav.travel_tips">Уголок туриста</span></a></li>
<li class="nav-item"><a class="nav-link" href="#reviews" data-i18n="nav.reviews">Отзывы</a></li>
<li class="nav-item"><a class="nav-link" href="#host" data-i18n="nav.host">Хозяин</a></li>
<li class="nav-item"><a class="nav-link" href="#contact" data-i18n="nav.contact">Контакты</a></li>
<li class="nav-item"><a class="nav-link" href="/admin" style="color: var(--gold);"><i class="fas fa-cog"></i> <span data-i18n="nav.admin">Управление</span></a></li>
<li class="nav-item language-switcher">
<button class="lang-btn active" data-lang="ru" onclick="switchLang('ru')">RU</button>
<button class="lang-btn" data-lang="en" onclick="switchLang('en')">EN</button>
<button class="lang-btn" data-lang="ab" onclick="switchLang('ab')">Аҧ</button>
</li>
</ul>
</div>
@@ -52,12 +53,12 @@
<div class="hero-overlay"></div>
<div class="container">
<div class="hero-content">
<div class="hero-badge"><i class="fas fa-anchor me-2"></i>Набережная ул. 1, Мгудзырхуа</div>
<h1 class="hero-title">Hotel <span>777</span><br>Абхазия</h1>
<p class="hero-subtitle">Ваш идеальный отдых на берегу Чёрного моря в самом сердце Абхазии. Комфорт, природа и гостеприимство — всё, что нужно для незабываемого отпуска.</p>
<div class="hero-badge"><i class="fas fa-anchor me-2"></i><span data-i18n="hero.badge">Набережная ул. 1, Мгудзырхуа</span></div>
<h1 class="hero-title">Hotel <span>777</span><br><span data-i18n="hero.title">Абхазия</span></h1>
<p class="hero-subtitle" data-i18n="hero.subtitle">Ваш идеальный отдых на берегу Чёрного моря в самом сердце Абхазии. Комфорт, природа и гостеприимство — всё, что нужно для незабываемого отпуска.</p>
<div class="hero-buttons">
<a href="#rooms" class="btn-gold"><i class="fas fa-bed"></i> Выбрать номер</a>
<a href="tel:89409270080" class="btn-outline-white"><i class="fas fa-phone"></i> Позвонить</a>
<a href="#rooms" class="btn-gold"><i class="fas fa-bed"></i> <span data-i18n="hero.btn_rooms">Выбрать номер</span></a>
<a href="tel:89409270080" class="btn-outline-white"><i class="fas fa-phone"></i> <span data-i18n="hero.btn_call">Позвонить</span></a>
</div>
</div>
</div>
@@ -67,28 +68,28 @@
<div class="col-auto">
<div class="stat-item">
<div class="stat-number"><span class="counter" data-target="5">0</span></div>
<div class="stat-label">мин до моря</div>
<div class="stat-label" data-i18n="hero.stat_sea">мин до моря</div>
</div>
</div>
<div class="col-auto"><div class="stat-divider"></div></div>
<div class="col-auto">
<div class="stat-item">
<div class="stat-number"><span class="counter" data-target="3">0</span></div>
<div class="stat-label">категории</div>
<div class="stat-label" data-i18n="hero.stat_categories">категории</div>
</div>
</div>
<div class="col-auto"><div class="stat-divider"></div></div>
<div class="col-auto">
<div class="stat-item">
<div class="stat-number"><span class="counter" data-target="98">0</span>%</div>
<div class="stat-label">довольных гостей</div>
<div class="stat-label" data-i18n="hero.stat_guests">довольных гостей</div>
</div>
</div>
<div class="col-auto"><div class="stat-divider"></div></div>
<div class="col-auto">
<div class="stat-item">
<div class="stat-number"><span class="counter" data-target="365">0</span></div>
<div class="stat-label">дней в году</div>
<div class="stat-label" data-i18n="hero.stat_days">дней в году</div>
</div>
</div>
</div>
@@ -105,47 +106,47 @@
<img src="img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp" alt="Вид на реку Гудаута">
<div class="about-image-badge">
<span class="big">777</span>
<span class="small">Счастье рядом</span>
<span class="small" data-i18n="about.badge_img">Счастье рядом</span>
</div>
</div>
</div>
<div class="col-lg-6 animate-on-scroll">
<div class="section-badge">О гостинице</div>
<h2 class="section-title">Добро пожаловать в <span style="color: var(--primary);">Hotel 777</span></h2>
<div class="section-badge"><span data-i18n="about.badge">О гостинице</span></div>
<h2 class="section-title"><span data-i18n="about.title">Добро пожаловать в </span><span style="color: var(--primary);">Hotel 777</span></h2>
<div class="ornament"><div class="ornament-line"></div><div class="ornament-diamond"></div><div class="ornament-line"></div></div>
<p style="font-size: 1.05rem; line-height: 1.8; color: #555; margin-bottom: 20px;">
<p style="font-size: 1.05rem; line-height: 1.8; color: #555; margin-bottom: 20px;" data-i18n="about.desc1">
Гостиница <strong>Hotel 777</strong> расположена в живописном селе Мгудзырхуа, Гудаутский район Абхазии, на Набережной улице, 1 — прямо на берегу реки Гудаута и всего в нескольких шагах от Чёрного моря.
</p>
<p style="font-size: 1.05rem; line-height: 1.8; color: #555; margin-bottom: 25px;">
<p style="font-size: 1.05rem; line-height: 1.8; color: #555; margin-bottom: 25px;" data-i18n="about.desc2">
Мы предлагаем уютные номера всех категорий, вкусную домашнюю кухню в столовой, аренду SUP-бордов и близость к пляжному кафе. Наши гости ценят аутентичное абхазское гостеприимство и современный комфорт.
</p>
<div class="feature-grid">
<div class="feature-item">
<div class="feature-item">
<div class="feature-icon"><i class="fas fa-water"></i></div>
<div class="feature-text">
<h5>На берегу моря</h5>
<p>Чистый пляж в 5 минутах ходьбы</p>
<h5 data-i18n="about.feature1_title">На берегу моря</h5>
<p data-i18n="about.feature1_desc">Чистый пляж в 5 минутах ходьбы</p>
</div>
</div>
<div class="feature-item">
<div class="feature-icon"><i class="fas fa-snowflake"></i></div>
<div class="feature-text">
<h5>Кондиционер</h5>
<p>В каждом номере для вашего комфорта</p>
<h5 data-i18n="about.feature2_title">Кондиционер</h5>
<p data-i18n="about.feature2_desc">В каждом номере для вашего комфорта</p>
</div>
</div>
<div class="feature-item">
<div class="feature-icon"><i class="fas fa-wifi"></i></div>
<div class="feature-text">
<h5>Бесплатный WiFi</h5>
<p>Высокоскоростной интернет на территории</p>
<h5 data-i18n="about.feature3_title">Бесплатный WiFi</h5>
<p data-i18n="about.feature3_desc">Высокоскоростной интернет на территории</p>
</div>
</div>
<div class="feature-item">
<div class="feature-icon"><i class="fas fa-utensils"></i></div>
<div class="feature-text">
<h5>Столовая</h5>
<p>Домашняя кухня — абхазская и русская</p>
<h5 data-i18n="about.feature4_title">Столовая</h5>
<p data-i18n="about.feature4_desc">Домашняя кухня — абхазская и русская</p>
</div>
</div>
</div>
@@ -158,10 +159,10 @@
<section class="section section-light" id="rooms" style="background: #f8fafc;">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge">Размещение</div>
<h2 class="section-title">Выберите свой номер</h2>
<div class="section-badge"><span data-i18n="rooms.badge">Размещение</span></div>
<h2 class="section-title" data-i18n="rooms.title">Выберите свой номер</h2>
<div class="abkhazian-pattern"></div>
<p class="section-subtitle">Четыре категории номеров — от 2x-местного до люкса. Каждый номер оснащён всем необходимым для идеального отдыха.</p>
<p class="section-subtitle" data-i18n="rooms.subtitle">Четыре категории номеров — от 2x-местного до люкса. Каждый номер оснащён всем необходимым для идеального отдыха.</p>
</div>
<div id="roomsGrid" class="row g-4"></div>
<div id="roomsEmpty" style="display: none; text-align: center; padding: 40px; color: #94a3b8;">
@@ -177,42 +178,42 @@
<section class="section section-light" id="gallery">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge">Галерея</div>
<h2 class="section-title">Красота Абхазии</h2>
<div class="section-badge"><span data-i18n="gallery.badge">Галерея</span></div>
<h2 class="section-title" data-i18n="gallery.title">Красота Абхазии</h2>
<div class="abkhazian-pattern"></div>
<p class="section-subtitle">Насладитесь видами нашей гостиницы, побережья и окрестностей Гудауты</p>
<p class="section-subtitle" data-i18n="gallery.subtitle">Насладитесь видами нашей гостиницы, побережья и окрестностей Гудауты</p>
</div>
<div class="gallery-scroll-wrapper animate-on-scroll">
<div class="gallery-track" id="galleryTrack">
<div class="gallery-slide" onclick="openLightbox('img/h777.webp', 'Наша гостиница')">
<img src="img/h777.webp" alt="Hotel 777"><div class="gallery-overlay"><span>Наша гостиница</span></div>
<img src="img/h777.webp" alt="Hotel 777"><div class="gallery-overlay"><span data-i18n="gallery.overlay.hotel">Наша гостиница</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp', 'Пляж Гудауты')">
<img src="img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp" alt="Пляж"><div class="gallery-overlay"><span>Пляж Гудауты</span></div>
<img src="img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp" alt="Пляж"><div class="gallery-overlay"><span data-i18n="gallery.overlay.beach">Пляж Гудауты</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp', 'Закат на море')">
<img src="img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp" alt="Закат"><div class="gallery-overlay"><span>Закат на море</span></div>
<img src="img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp" alt="Закат"><div class="gallery-overlay"><span data-i18n="gallery.overlay.sunset">Закат на море</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp', 'Горы Абхазии')">
<img src="img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp" alt="Горы"><div class="gallery-overlay"><span>Горы Абхазии</span></div>
<img src="img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp" alt="Горы"><div class="gallery-overlay"><span data-i18n="gallery.overlay.mountains">Горы Абхазии</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp', 'Река Гудаута')">
<img src="img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp" alt="Река"><div class="gallery-overlay"><span>Река Гудаута</span></div>
<img src="img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp" alt="Река"><div class="gallery-overlay"><span data-i18n="gallery.overlay.river">Река Гудаута</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/h777.webp', 'Наша гостиница')">
<img src="img/h777.webp" alt="Hotel 777"><div class="gallery-overlay"><span>Наша гостиница</span></div>
<img src="img/h777.webp" alt="Hotel 777"><div class="gallery-overlay"><span data-i18n="gallery.overlay.hotel">Наша гостиница</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp', 'Пляж Гудауты')">
<img src="img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp" alt="Пляж"><div class="gallery-overlay"><span>Пляж Гудауты</span></div>
<img src="img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp" alt="Пляж"><div class="gallery-overlay"><span data-i18n="gallery.overlay.beach">Пляж Гудауты</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp', 'Закат на море')">
<img src="img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp" alt="Закат"><div class="gallery-overlay"><span>Закат на море</span></div>
<img src="img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp" alt="Закат"><div class="gallery-overlay"><span data-i18n="gallery.overlay.sunset">Закат на море</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp', 'Горы Абхазии')">
<img src="img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp" alt="Горы"><div class="gallery-overlay"><span>Горы Абхазии</span></div>
<img src="img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp" alt="Горы"><div class="gallery-overlay"><span data-i18n="gallery.overlay.mountains">Горы Абхазии</span></div>
</div>
<div class="gallery-slide" onclick="openLightbox('img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp', 'Река Гудаута')">
<img src="img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp" alt="Река"><div class="gallery-overlay"><span>Река Гудаута</span></div>
<img src="img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp" alt="Река"><div class="gallery-overlay"><span data-i18n="gallery.overlay.river">Река Гудаута</span></div>
</div>
</div>
</div>
@@ -223,10 +224,10 @@
<section class="section section-dark" id="activities">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge">Развлечения</div>
<h2 class="section-title">Чем заняться рядом</h2>
<div class="section-badge"><span data-i18n="activities.badge">Развлечения</span></div>
<h2 class="section-title" data-i18n="activities.title">Чем заняться рядом</h2>
<div class="abkhazian-pattern"></div>
<p class="section-subtitle">SUP-борды, пляжное кафе и незабываемые виды — всё это ждёт вас</p>
<p class="section-subtitle" data-i18n="activities.subtitle">SUP-борды, пляжное кафе и незабываемые виды — всё это ждёт вас</p>
</div>
<div class="row g-4">
<div class="col-lg-4 animate-on-scroll">
@@ -234,8 +235,8 @@
<img src="img/105d059e5-a204-499f-a01c-c540f6ae1e5d.webp" alt="SUP-борд">
<div class="activity-overlay">
<div class="activity-icon"><i class="fas fa-water"></i></div>
<h3 class="activity-title">SUP-борды</h3>
<p class="activity-desc">Аренда SUP-бордов прямо на пляже. Исследуйте побережье с воды — идеальный способ увидеть Абхазию с нового ракурса!</p>
<h3 class="activity-title" data-i18n="activities.sup_title">SUP-борды</h3>
<p class="activity-desc" data-i18n="activities.sup_desc">Аренда SUP-бордов прямо на пляже. Исследуйте побережье с воды — идеальный способ увидеть Абхазию с нового ракурса!</p>
</div>
</div>
</div>
@@ -244,8 +245,8 @@
<img src="img/18abbb136-0e24-4c92-a568-fec8011e029b.webp" alt="Кафе у пляжа">
<div class="activity-overlay">
<div class="activity-icon"><i class="fas fa-coffee"></i></div>
<h3 class="activity-title">Кафе у пляжа</h3>
<p class="activity-desc">Всего 2 минуты пешком — уютное кафе с видом на море. Абхазская и русская кухня, свежие морепродукты и ароматный кофе.</p>
<h3 class="activity-title" data-i18n="activities.cafe_title">Кафе у пляжа</h3>
<p class="activity-desc" data-i18n="activities.cafe_desc">Всего 2 минуты пешком — уютное кафе с видом на море. Абхазская и русская кухня, свежие морепродукты и ароматный кофе.</p>
</div>
</div>
</div>
@@ -254,8 +255,8 @@
<img src="img/1f00325ba-df2c-4bb9-9ec6-28958e11f843.webp" alt="Столовая">
<div class="activity-overlay">
<div class="activity-icon"><i class="fas fa-utensils"></i></div>
<h3 class="activity-title">Столовая Hotel 777</h3>
<p class="activity-desc">Домашняя кухня каждый день! Завтраки, обеды и ужины из свежих местных продуктов. Аджика, хачапури, азу и многое другое.</p>
<h3 class="activity-title" data-i18n="activities.canteen_title">Столовая Hotel 777</h3>
<p class="activity-desc" data-i18n="activities.canteen_desc">Домашняя кухня каждый день! Завтраки, обеды и ужины из свежих местных продуктов. Аджика, хачапури, азу и многое другое.</p>
</div>
</div>
</div>
@@ -563,8 +564,8 @@
<section class="section section-light" style="background: #fff;">
<div class="container">
<div class="cta-banner animate-on-scroll">
<h2>Забронируйте номер прямо сейчас!</h2>
<p>Лучшие цены гарантированы при бронировании напрямую. Позвоните Рауфу Алексеевичу или оставьте заявку.</p>
<h2 data-i18n="cta.title">Забронируйте номер прямо сейчас!</h2>
<p data-i18n="cta.subtitle">Лучшие цены гарантированы при бронировании напрямую. Позвоните Рауфу Алексеевичу или оставьте заявку.</p>
<a href="tel:89409270080" class="btn-dark-cta"><i class="fas fa-phone"></i> 8 (940) 927-00-80</a>
</div>
</div>
@@ -574,7 +575,7 @@
<section class="section reviews-section" id="reviews">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge" data-i18n="reviews.title">Отзывы</div>
<div class="section-badge" data-i18n="nav.reviews">Отзывы</div>
<h2 class="section-title" data-i18n="reviews.title">Что говорят наши гости</h2>
<div class="abkhazian-pattern"></div>
</div>
@@ -587,8 +588,8 @@
</div>
<div class="reviews-actions">
<button class="btn-gold" onclick="openReviewModal()" data-i18n="reviews.leave_review">
<i class="fas fa-pen"></i> Оставить отзыв
<button class="btn-gold" onclick="openReviewModal()">
<i class="fas fa-pen"></i> <span data-i18n="reviews.leave_review">Оставить отзыв</span>
</button>
</div>
</div>
@@ -598,7 +599,7 @@
<section class="section section-light" id="host">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge">Хозяин Hotel 777</div>
<div class="section-badge"><span data-i18n="host.badge">Хозяин Hotel 777</span></div>
<h2 class="section-title">Рауф Алексеевич</h2>
<div class="abkhazian-pattern"></div>
</div>
@@ -610,13 +611,13 @@
</div>
</div>
<div class="host-body">
<p style="font-size: 1.1rem; color: var(--gold); font-weight: 600; margin-bottom: 20px; font-style: italic;">
<p style="font-size: 1.1rem; color: var(--gold); font-weight: 600; margin-bottom: 20px; font-style: italic;" data-i18n="host.quote">
«Абхазское гостеприимство — это не работа, это образ жизни»
</p>
<p style="font-size: 1rem; color: #666; line-height: 1.7; margin-bottom: 25px;">
<p style="font-size: 1rem; color: #666; line-height: 1.7; margin-bottom: 25px;" data-i18n="host.desc1">
Рауф Алексеевич — настоящий хозяин и душа Hotel 777. Он встречает каждого гостя с теплотой и заботой, как родного человека. Всегда подскажет лучшие маршруты по Абхазии, организует экскурсии к самым красивым местам — Новоафонскому монастырю, озеру Рица, Гагрскому парку.
</p>
<p style="font-size: 1rem; color: #666; line-height: 1.7; margin-bottom: 25px;">
<p style="font-size: 1rem; color: #666; line-height: 1.7; margin-bottom: 25px;" data-i18n="host.desc2">
Домашняя кухня — отдельная достопримечательность гостиницы. Свежие местные продукты, абхазские и русские блюда, приготовленные с душой — абиц, ачапа, хачапури, шашлык и многое другое. Чистые номера, искренняя улыбка и внимание к каждой детали — это то, что делает Hotel 777 особенным.
</p>
<a href="tel:89409270080" class="host-contact">
@@ -631,64 +632,64 @@
<section class="section contact-section" id="contact">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge">Контакты</div>
<h2 class="section-title" style="color: #fff;">Свяжитесь с нами</h2>
<div class="section-badge"><span data-i18n="contact.badge">Контакты</span></div>
<h2 class="section-title" style="color: #fff;" data-i18n="contact.title">Свяжитесь с нами</h2>
<div class="abkhazian-pattern"></div>
<p class="section-subtitle">Рауф Алексеевич всегда рад ответить на ваши вопросы и помочь спланировать идеальный отдых</p>
<p class="section-subtitle" data-i18n="contact.subtitle">Рауф Алексеевич всегда рад ответить на ваши вопросы и помочь спланировать идеальный отдых</p>
</div>
<div class="row g-5">
<div class="col-lg-5 animate-on-scroll">
<div class="contact-info-item">
<div class="contact-icon"><i class="fas fa-user-tie"></i></div>
<div>
<div class="contact-label">Хозяин гостиницы</div>
<div class="contact-label"><span data-i18n="contact.host_label">Хозяин гостиницы</span></div>
<div class="contact-value">Рауф Алексеевич</div>
</div>
</div>
<div class="contact-info-item">
<div class="contact-icon"><i class="fas fa-map-marker-alt"></i></div>
<div>
<div class="contact-label">Адрес</div>
<div class="contact-value">Абхазия, Гудаутский район,<br>с. Мгудзырхуа, Набережная ул., 1</div>
<div class="contact-label"><span data-i18n="contact.address_label">Адрес</span></div>
<div class="contact-value" data-i18n="contact.address_value">Абхазия, Гудаутский район,<br>с. Мгудзырхуа, Набережная ул., 1</div>
</div>
</div>
<div class="contact-info-item">
<div class="contact-icon"><i class="fas fa-phone"></i></div>
<div>
<div class="contact-label">Телефон</div>
<div class="contact-label"><span data-i18n="contact.phone_label">Телефон</span></div>
<div class="contact-value"><a href="tel:89409270080">8 (940) 927-00-80</a></div>
</div>
</div>
<div class="contact-info-item">
<div class="contact-icon"><i class="fas fa-clock"></i></div>
<div>
<div class="contact-label">Режим работы</div>
<div class="contact-value">Круглосуточно, 365 дней в году</div>
<div class="contact-label"><span data-i18n="contact.hours_label">Режим работы</span></div>
<div class="contact-value" data-i18n="contact.hours_value">Круглосуточно, 365 дней в году</div>
</div>
</div>
<div class="contact-info-item">
<div class="contact-icon"><i class="fas fa-water"></i></div>
<div>
<div class="contact-label">Расположение</div>
<div class="contact-value">На берегу реки Гудаута,<br>5 минут до Чёрного моря</div>
<div class="contact-label"><span data-i18n="contact.location_label">Расположение</span></div>
<div class="contact-value" data-i18n="contact.location_value">На берегу реки Гудаута,<br>5 минут до Чёрного моря</div>
</div>
</div>
<div class="mt-4">
<a href="https://wa.me/89409270080" class="btn-gold" target="_blank" style="text-decoration: none;">
<i class="fab fa-whatsapp"></i> Написать Рауфу в WhatsApp
<i class="fab fa-whatsapp"></i> <span data-i18n="contact.whatsapp">Написать Рауфу в WhatsApp</span>
</a>
</div>
</div>
<div class="col-lg-7 animate-on-scroll">
<div class="map-container">
<i class="fas fa-map-marked-alt"></i>
<span>Гудаутский район, Абхазия</span>
<span data-i18n="contact.map_area">Гудаутский район, Абхазия</span>
<span style="font-size: 0.8rem; color: rgba(255,255,255,0.4);">E 40.5° N 43.1°</span>
<div style="padding: 20px; text-align: center;">
<p style="color: rgba(255,255,255,0.5); font-size: 0.9rem;">
<i class="fas fa-info-circle me-2"></i>
Мгудзырхуа — уютное село на Набережной улице, окружённое виноградниками и горами.
Чистый воздух, тишина и близость к морю — идеальное место для отдыха.
<span data-i18n="contact.map_desc">Мгудзырхуа — уютное село на Набережной улице, окружённое виноградниками и горами.
Чистый воздух, тишина и близость к морю — идеальное место для отдыха.</span>
</p>
</div>
</div>
@@ -703,7 +704,7 @@
<div class="row g-4">
<div class="col-lg-4">
<div class="footer-brand">HOTEL <span>777</span></div>
<p class="footer-desc">Гостиница на берегу Чёрного моря в Абхазии. Комфортные номера, домашняя кухня Рауфа Алексеевича и настоящее абхазское гостеприимство.</p>
<p class="footer-desc" data-i18n="footer.desc">Гостиница на берегу Чёрного моря в Абхазии. Комфортные номера, домашняя кухня Рауфа Алексеевича и настоящее абхазское гостеприимство.</p>
<div class="footer-social">
<a href="#"><i class="fab fa-whatsapp"></i></a>
<a href="#"><i class="fab fa-telegram"></i></a>
@@ -712,30 +713,30 @@
</div>
</div>
<div class="col-lg-2 col-md-4">
<div class="footer-title">Навигация</div>
<div class="footer-title" data-i18n="footer.nav_title">Навигация</div>
<ul class="footer-links">
<li><a href="#home">Главная</a></li>
<li><a href="#about">О нас</a></li>
<li><a href="#rooms">Номера</a></li>
<li><a href="#gallery">Галерея</a></li>
<li><a href="#travel-tips">Уголок туриста</a></li>
<li><a href="#reviews">Отзывы</a></li>
<li><a href="#host">Хозяин</a></li>
<li><a href="/admin" style="color: var(--gold);"><i class="fas fa-cog"></i> Управление</a></li>
<li><a href="#about" data-i18n="nav.about">О нас</a></li>
<li><a href="#rooms" data-i18n="nav.rooms">Номера</a></li>
<li><a href="#gallery" data-i18n="nav.gallery">Галерея</a></li>
<li><a href="#travel-tips" data-i18n="nav.travel_tips">Уголок туриста</a></li>
<li><a href="#reviews" data-i18n="nav.reviews">Отзывы</a></li>
<li><a href="#host" data-i18n="nav.host">Хозяин</a></li>
<li><a href="/admin" style="color: var(--gold);"><i class="fas fa-cog"></i> <span data-i18n="nav.admin">Управление</span></a></li>
</ul>
</div>
<div class="col-lg-3 col-md-4">
<div class="footer-title">Услуги</div>
<div class="footer-title" data-i18n="footer.services_title">Услуги</div>
<ul class="footer-links">
<li><a href="#rooms">Номера Эконом</a></li>
<li><a href="#rooms">Номера Стандарт</a></li>
<li><a href="#rooms">Номера VIP</a></li>
<li><a href="#activities">Аренда SUP-бордов</a></li>
<li><a href="#activities">Столовая</a></li>
<li><a href="#rooms" data-i18n="footer.services_econom">Номера Эконом</a></li>
<li><a href="#rooms" data-i18n="footer.services_standard">Номера Стандарт</a></li>
<li><a href="#rooms" data-i18n="footer.services_vip">Номера VIP</a></li>
<li><a href="#activities" data-i18n="footer.services_sup">Аренда SUP-бордов</a></li>
<li><a href="#activities" data-i18n="footer.services_canteen">Столовая</a></li>
</ul>
</div>
<div class="col-lg-3 col-md-4">
<div class="footer-title">Контакты</div>
<div class="footer-title" data-i18n="footer.contact_title">Контакты</div>
<ul class="footer-links">
<li><a href="tel:89409270080"><i class="fas fa-phone me-2"></i>8 (940) 927-00-80</a></li>
<li><a href="#"><i class="fas fa-user me-2"></i>Рауф Алексеевич</a></li>
@@ -746,7 +747,7 @@
</div>
</div>
<div class="footer-bottom">
<p>© 2025 Hotel 777. Хозяин — Рауф Алексеевич. Все права защищены. Абхазия, Гудаутский район, с. Мгудзырхуа.</p>
<p data-i18n="footer.copyright">© 2025 Hotel 777. Хозяин — Рауф Алексеевич. Все права защищены. Абхазия, Гудаутский район, с. Мгудзырхуа.</p>
</div>
</div>
</footer>
@@ -762,79 +763,79 @@
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" style="font-family: 'Playfair Display', serif; font-size: 1.5rem;">
<i class="fas fa-calendar-check me-2"></i>Бронирование номера
<i class="fas fa-calendar-check me-2"></i><span data-i18n="booking.title">Бронирование номера</span>
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<form id="bookingForm">
<div class="mb-3">
<label class="form-label">Выбранный номер</label>
<label class="form-label"><span data-i18n="booking.selected_room">Выбранный номер</span></label>
<input type="text" class="form-control" id="selectedRoom" name="room" readonly style="background: #f0f4f8; font-weight: 600;">
<input type="hidden" id="selectedRoomId" name="room_id">
</div>
<div class="row g-3">
<div class="col-md-6">
<label class="form-label">Ваше имя</label>
<input type="text" class="form-control" name="name" placeholder="Иван Иванов" required>
<label class="form-label"><span data-i18n="booking.your_name">Ваше имя</span></label>
<input type="text" class="form-control" name="name" data-i18n-placeholder="booking.name_placeholder" placeholder="Иван Иванов" required>
</div>
<div class="col-md-6">
<label class="form-label">Телефон</label>
<input type="tel" class="form-control" name="phone" placeholder="+7 (___) ___-__-__" required>
<label class="form-label"><span data-i18n="booking.phone">Телефон</span></label>
<input type="tel" class="form-control" name="phone" data-i18n-placeholder="booking.phone_placeholder" placeholder="+7 (___) ___-__-__" required>
</div>
</div>
<div class="row g-3 mt-1">
<div class="col-md-6">
<label class="form-label">Дата заезда</label>
<label class="form-label"><span data-i18n="booking.checkin">Дата заезда</span></label>
<input type="date" class="form-control" name="checkin" required>
</div>
<div class="col-md-6">
<label class="form-label">Дата выезда</label>
<label class="form-label"><span data-i18n="booking.checkout">Дата выезда</span></label>
<input type="date" class="form-control" name="checkout" required>
</div>
</div>
<div class="row g-3 mt-1">
<div class="col-md-6">
<label class="form-label">Кол-во гостей</label>
<label class="form-label"><span data-i18n="booking.guests">Кол-во гостей</span></label>
<select class="form-select" name="guests">
<option value="1">1 гость</option>
<option value="2">2 гостя</option>
<option value="3">3 гостя</option>
<option value="4">4 гостя</option>
<option value="1" data-i18n="booking.guest_1">1 гость</option>
<option value="2" data-i18n="booking.guest_2">2 гостя</option>
<option value="3" data-i18n="booking.guest_3">3 гостя</option>
<option value="4" data-i18n="booking.guest_4">4 гостя</option>
</select>
</div>
<div class="col-md-6">
<label class="form-label">Пожелания</label>
<input type="text" class="form-control" name="wishes" placeholder="Например: вид на море">
<label class="form-label"><span data-i18n="booking.wishes">Пожелания</span></label>
<input type="text" class="form-control" name="wishes" data-i18n-placeholder="booking.wishes_placeholder" placeholder="Например: вид на море">
</div>
</div>
<div class="row g-3 mt-1">
<div class="col-md-6">
<label class="form-label">Промокод</label>
<input type="text" class="form-control" id="promocodeInput" name="promocode" placeholder="Введите промокод" style="text-transform: uppercase;">
<label class="form-label"><span data-i18n="booking.promocode">Промокод</span></label>
<input type="text" class="form-control" id="promocodeInput" name="promocode" data-i18n-placeholder="booking.promocode_placeholder" placeholder="Введите промокод" style="text-transform: uppercase;">
<div id="promocodeError" class="text-danger small mt-1" style="display: none;"></div>
</div>
<div class="col-md-6 d-flex align-items-end">
<button type="button" class="btn btn-outline-primary btn-sm" id="checkPromocodeBtn" style="width: 100%;">Проверить промокод</button>
<button type="button" class="btn btn-outline-primary btn-sm" id="checkPromocodeBtn" style="width: 100%;"><span data-i18n="booking.promocode_check">Проверить промокод</span></button>
</div>
</div>
<div id="priceInfo" class="mt-3" style="display: none; padding: 15px; background: #f8f9fa; border-radius: 10px;">
<div style="display: flex; justify-content: space-between; margin-bottom: 8px;">
<span>Базовая стоимость:</span>
<span data-i18n="booking.base_price">Базовая стоимость:</span>
<span id="basePriceDisplay"></span>
</div>
<div style="display: flex; justify-content: space-between; margin-bottom: 8px; color: #16a34a;">
<span>Скидка (<span id="discountPercentDisplay">0</span>%):</span>
<span><span data-i18n="booking.discount">Скидка</span> (<span id="discountPercentDisplay">0</span>%):</span>
<span id="discountAmountDisplay"></span>
</div>
<div style="display: flex; justify-content: space-between; font-weight: 700; font-size: 1.1rem; border-top: 1px solid #dee2e6; padding-top: 8px;">
<span>Итого к оплате:</span>
<span data-i18n="booking.total">Итого к оплате:</span>
<span id="totalPriceDisplay" style="color: var(--primary);"></span>
</div>
</div>
<div class="mt-4">
<button type="submit" class="btn-submit-booking">
<i class="fas fa-paper-plane me-2"></i>Отправить заявку
<i class="fas fa-paper-plane me-2"></i><span data-i18n="booking.submit">Отправить заявку</span>
</button>
</div>
<p class="text-center mt-3" style="font-size: 0.8rem; color: #999;">

View File

@@ -69,9 +69,12 @@ const I18n = {
formatDate(dateStr) {
const date = new Date(dateStr);
const months = this.currentLang === 'ru'
? ['Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря']
: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
const monthsMap = {
ru: ['Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'],
en: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
ab: ['Ажьырныҳәа', 'Жәабран', 'Хәажәкыра', 'Мшаҧы', 'Лаҵара', 'Рашәара', 'Ҧхынгәы', 'Нанҳәа', 'Цәыббра', 'Жьҭаара', 'Абҵара', 'Ҧхынҷкәын']
};
const months = monthsMap[this.currentLang] || monthsMap['ru'];
return `${months[date.getMonth()]} ${date.getFullYear()}`;
},

View File

@@ -318,7 +318,7 @@ function resetReviewForm() {
if (form) form.reset();
if (countryEl) countryEl.value = '';
if (cityEl) cityEl.innerHTML = '<option value="">Выберите город</option>';
if (cityEl) cityEl.innerHTML = '<option value="">' + I18n.t('form.select_city') + '</option>';
if (cityWrapper) cityWrapper.style.display = 'block';
if (otherCityGroup) otherCityGroup.style.display = 'none';
if (starsSlider) starsSlider.value = 5;
@@ -335,6 +335,7 @@ function resetReviewForm() {
if (modalBody && form) {
modalBody.innerHTML = form.outerHTML;
I18n.updateUI();
}
initStarsSlider();
@@ -418,7 +419,7 @@ function setupReviewFormSubmit() {
const submitBtn = document.getElementById('reviewSubmitBtn');
if (submitBtn) {
submitBtn.disabled = true;
submitBtn.innerHTML = '<span class="spinner"></span><span>Отправка...</span>';
submitBtn.innerHTML = '<span class="spinner"></span><span>' + I18n.t('btn.loading') + '</span>';
}
const nameEl = document.getElementById('reviewName');
@@ -468,7 +469,7 @@ function setupReviewFormSubmit() {
const submitBtn = document.getElementById('reviewSubmitBtn');
if (submitBtn) {
submitBtn.disabled = false;
submitBtn.innerHTML = '<span data-i18n="form.submit">Отправить отзыв</span>';
submitBtn.innerHTML = '<span>' + I18n.t('form.submit') + '</span>';
}
}
});
@@ -478,11 +479,15 @@ function showReviewSuccess() {
const body = document.getElementById('reviewModalBody');
if (!body) return;
const successText = I18n.t('validation.success');
const exIdx = successText.indexOf('!');
const title = exIdx > 0 ? successText.substring(0, exIdx + 1) : successText;
const desc = exIdx > 0 ? successText.substring(exIdx + 1).trim() : '';
body.innerHTML = `
<div class="review-success-message">
<i class="fas fa-check-circle"></i>
<h4>${I18n.t('validation.success').split('.')[0]}</h4>
<p>${I18n.t('validation.success').split('.')[1] || ''}</p>
<h4>${title}</h4>
<p>${desc}</p>
</div>
`;
@@ -493,7 +498,12 @@ function showReviewSuccess() {
async function switchLang(lang) {
await I18n.setLang(lang);
document.title = I18n.t('page.title');
if (countriesCache.length > 0) {
populateCountrySelect();
}
loadReviews();
document.documentElement.lang = lang;
}
document.addEventListener('DOMContentLoaded', async () => {