тур
All checks were successful
Deploy hotel / deploy-kdo (push) Successful in 41s

This commit is contained in:
2026-07-18 00:14:32 +05:00
parent 1fd0b565ef
commit e316d00efa
4 changed files with 982 additions and 48 deletions

View File

@@ -8,6 +8,7 @@ const translations = {
'nav.reviews': 'Отзывы',
'nav.host': 'Хозяин',
'nav.contact': 'Контакты',
'nav.travel_tips': 'Уголок туриста',
'nav.admin': 'Управление',
// Reviews Section
@@ -94,7 +95,85 @@ const translations = {
// Language
'lang.switch': 'English',
'lang.current': 'Русский'
'lang.current': 'Русский',
// Travel Tips
'travel_tips.badge': 'Уголок туриста',
'travel_tips.title': 'Что нужно знать туристу',
'travel_tips.subtitle': 'Полезная информация для комфортного и безопасного отдыха в Абхазии: связь, традиции, важные советы',
'travel_tips.important.title': 'Важные моменты',
'travel_tips.important.1.title': 'Пересечение границы',
'travel_tips.important.1.desc': 'Для граждан РФ — внутренний паспорт. Детям до 14 лет — свидетельство о рождении. Граница по реке Псоу, работают два КПП. Очереди в пик сезона — планируйте время.',
'travel_tips.important.2.title': 'Валюта и оплата',
'travel_tips.important.2.desc': 'В Абхазии действует российский рубль. Банкоматы есть только в крупных городах (Гагра, Сухум, Гудаута). Везде принимают наличные, карты — только в крупных магазинах и отелях.',
'travel_tips.important.3.title': 'Медицина и страховка',
'travel_tips.important.3.desc': 'Полис ОМС РФ в Абхазии не действует. Рекомендуем оформить туристическую страховку. В Гудауте есть аптеки и больница. Возьмите необходимые лекарства с собой.',
'travel_tips.important.4.title': 'Транспорт',
'travel_tips.important.4.desc': 'Основной транспорт — маршрутки и такси. Между городами курсируют автобусы. Дороги горные, соблюдайте осторожность. До гостиницы от границы ~30 минут на такси.',
'travel_tips.customs.title': 'Национальные особенности',
'travel_tips.customs.1.title': 'Абхазское гостеприимство',
'travel_tips.customs.1.desc': 'Гостеприимство для абхазов — священный долг. Гостю предложат лучшее, что есть в доме. Отказ от угощения может быть воспринят как неуважение — попробуйте хотя бы немного.',
'travel_tips.customs.2.title': 'Застольные традиции',
'travel_tips.customs.2.desc': 'Тамада — главный человек за столом. Тосты произносятся по очереди, первый — за Всевышнего. Пить до дна не обязательно, но пригубить нужно. Не перебивайте говорящего тост.',
'travel_tips.customs.3.title': 'Уважение к старшим',
'travel_tips.customs.3.desc': 'В Абхазии глубоко чтят старших по возрасту. При встрече первым здоровается младший. В присутствии старших не принято громко говорить, курить или сидеть в вольной позе.',
'travel_tips.customs.4.title': 'Местная кухня',
'travel_tips.customs.4.desc': 'Обязательно попробуйте: абысту (мамалыга), аджику, хачапури, копчёный сыр, ачапу (фасоль с орехами), шашлык, свежую форель. Национальные напитки — чача и местное вино.',
'travel_tips.mobile.title': 'Мобильная связь и интернет',
'travel_tips.mobile.subtitle': 'Какие операторы работают в Абхазии, условия роуминга и как получить местную SIM-карту',
'travel_tips.operators.russian.title': 'Российские операторы в Абхазии',
'travel_tips.operators.labels.plan': 'Тариф',
'travel_tips.operators.labels.calls_in': 'Входящие',
'travel_tips.operators.labels.calls_out': 'Исходящие в РФ',
'travel_tips.operators.labels.internet': 'Интернет',
'travel_tips.operators.labels.bonus': 'Бонусы',
'travel_tips.operators.labels.activation': 'Как подключить',
'travel_tips.operators.mts.name': 'МТС',
'travel_tips.operators.mts.plan': '«Забугорище»',
'travel_tips.operators.mts.calls_in': 'Бесплатно (первые 10 мин каждого вызова)',
'travel_tips.operators.mts.calls_out': '9,50 ₽/мин',
'travel_tips.operators.mts.internet': '700 МБ/мес бесплатно. Далее — 3,50 ₽/МБ',
'travel_tips.operators.mts.bonus': 'Яндекс Карты, 2ГИС и банковские приложения — безлимитно и без расхода пакета',
'travel_tips.operators.mts.activation': 'USSD *111*333# или в приложении «Мой МТС»',
'travel_tips.operators.mts.badge': 'Лучшее предложение',
'travel_tips.operators.megafon.name': 'МегаФон',
'travel_tips.operators.megafon.plan': 'Роуминг в Абхазии',
'travel_tips.operators.megafon.calls_in': '9 ₽/мин',
'travel_tips.operators.megafon.calls_out': '9 ₽/мин',
'travel_tips.operators.megafon.internet': '~9 ₽/МБ без опции. Рекомендуется опция «Отпуск онлайн» — пакеты минут и ГБ со скидкой',
'travel_tips.operators.megafon.bonus': 'Опция «Отпуск онлайн»: пакеты от 300 ₽ (минуты + ГБ)',
'travel_tips.operators.megafon.activation': 'В приложении МегаФон → Роуминг',
'travel_tips.operators.beeline.name': 'Билайн',
'travel_tips.operators.beeline.plan': 'Роуминг по миру',
'travel_tips.operators.beeline.calls_in': '9 ₽/мин',
'travel_tips.operators.beeline.calls_out': '9 ₽/мин',
'travel_tips.operators.beeline.internet': 'Пакеты ГБ в приложении. Без пакета — ~10 ₽/МБ',
'travel_tips.operators.beeline.bonus': 'Приложение Билайн работает без расхода трафика. Пакеты от 300 ₽',
'travel_tips.operators.beeline.activation': 'В приложении «Мой Билайн» → Роуминг',
'travel_tips.operators.yota.name': 'Yota',
'travel_tips.operators.yota.plan': 'Роуминг (сеть МегаФон)',
'travel_tips.operators.yota.calls_in': '~10 ₽/мин',
'travel_tips.operators.yota.calls_out': '~10 ₽/мин',
'travel_tips.operators.yota.internet': '~15 ₽/МБ. Пакеты роуминга не предусмотрены',
'travel_tips.operators.yota.bonus': '—',
'travel_tips.operators.yota.activation': 'Автоматически, проверьте в приложении Yota',
'travel_tips.operators.tele2.name': 'Tele2',
'travel_tips.operators.tele2.plan': 'Роуминг в Абхазии',
'travel_tips.operators.tele2.calls_in': '~10 ₽/мин',
'travel_tips.operators.tele2.calls_out': '~10 ₽/мин',
'travel_tips.operators.tele2.internet': '~15 ₽/МБ. Ограниченное покрытие — проверьте доступность',
'travel_tips.operators.tele2.bonus': '—',
'travel_tips.operators.tele2.activation': 'Проверьте в приложении Tele2 — может потребоваться подключение',
'travel_tips.operators.local.title': 'Местные операторы и SIM-карты',
'travel_tips.operators.local.desc': 'В Абхазии работают два местных оператора: А-Мобайл и Аквафон. Сразу после КПП «Псоу» на абхазской стороне работают точки продаж — можно купить SIM-карту, не доезжая до города. Также SIM-карты продаются в любом салоне связи в Гудауте или Гагре. Потребуется паспорт РФ. Стоимость стартового пакета — от 200 ₽. Местная связь выгоднее для звонков внутри Абхазии.',
'travel_tips.operators.local.note': 'Важно! Перед поездкой уточните актуальные условия в приложении вашего оператора — тарифы могут меняться.',
'travel_tips.note': 'Тарифы указаны ориентировочно. Пожалуйста, проверяйте актуальные условия у вашего оператора перед поездкой.'
},
en: {
@@ -106,6 +185,7 @@ const translations = {
'nav.reviews': 'Reviews',
'nav.host': 'Host',
'nav.contact': 'Contact',
'nav.travel_tips': 'Tourist Tips',
'nav.admin': 'Management',
// Reviews Section
@@ -192,7 +272,85 @@ const translations = {
// Language
'lang.switch': 'Русский',
'lang.current': 'English'
'lang.current': 'English',
// Travel Tips
'travel_tips.badge': 'Tourist Tips',
'travel_tips.title': 'What Tourists Should Know',
'travel_tips.subtitle': 'Essential information for a comfortable and safe stay in Abkhazia: mobile service, traditions, important tips',
'travel_tips.important.title': 'Important Information',
'travel_tips.important.1.title': 'Border Crossing',
'travel_tips.important.1.desc': 'Russian citizens need a domestic passport. Children under 14 need a birth certificate. The border runs along the Psou River with two checkpoints. Expect queues during peak season — plan ahead.',
'travel_tips.important.2.title': 'Currency & Payments',
'travel_tips.important.2.desc': 'The Russian ruble is used throughout Abkhazia. ATMs are only available in major towns (Gagra, Sukhum, Gudauta). Cash is accepted everywhere; cards only in larger shops and hotels.',
'travel_tips.important.3.title': 'Healthcare & Insurance',
'travel_tips.important.3.desc': 'Russian MHI policies are not valid in Abkhazia. We recommend purchasing travel insurance. Pharmacies and a hospital are available in Gudauta. Bring any essential medications with you.',
'travel_tips.important.4.title': 'Transport',
'travel_tips.important.4.desc': 'Main transport options are minibuses (marshrutkas) and taxis. Buses connect major towns. Roads are mountainous — drive carefully. The hotel is about 30 minutes by taxi from the border.',
'travel_tips.customs.title': 'Local Customs & Traditions',
'travel_tips.customs.1.title': 'Abkhazian Hospitality',
'travel_tips.customs.1.desc': 'Hospitality is a sacred duty for Abkhazians. Guests are offered the best the house has. Refusing food or drink may be taken as disrespect — try at least a little.',
'travel_tips.customs.2.title': 'Feasting Traditions',
'travel_tips.customs.2.desc': 'The tamada (toastmaster) leads the table. Toasts are made in turn — the first is always to the Almighty. You do not need to empty your glass, but you should take a sip. Never interrupt a toast.',
'travel_tips.customs.3.title': 'Respect for Elders',
'travel_tips.customs.3.desc': 'Elders are deeply respected in Abkhazia. The younger person greets first. It is impolite to speak loudly, smoke, or sit casually in the presence of elders.',
'travel_tips.customs.4.title': 'Local Cuisine',
'travel_tips.customs.4.desc': 'Must-try dishes: abysta (corn porridge/mamalyga), adjika (spicy paste), khachapuri (cheese bread), smoked cheese, achapa (beans with walnuts), shashlik, and fresh trout. National drinks include chacha and local wine.',
'travel_tips.mobile.title': 'Mobile & Internet',
'travel_tips.mobile.subtitle': 'Which operators work in Abkhazia, roaming conditions, and how to get a local SIM card',
'travel_tips.operators.russian.title': 'Russian Operators in Abkhazia',
'travel_tips.operators.labels.plan': 'Plan',
'travel_tips.operators.labels.calls_in': 'Incoming',
'travel_tips.operators.labels.calls_out': 'Outgoing to Russia',
'travel_tips.operators.labels.internet': 'Internet',
'travel_tips.operators.labels.bonus': 'Bonuses',
'travel_tips.operators.labels.activation': 'Activation',
'travel_tips.operators.mts.name': 'MTS',
'travel_tips.operators.mts.plan': '"Zabugorishche"',
'travel_tips.operators.mts.calls_in': 'Free (first 10 min per call)',
'travel_tips.operators.mts.calls_out': '9.50 RUB/min',
'travel_tips.operators.mts.internet': '700 MB/month free. Beyond that — 3.50 RUB/MB',
'travel_tips.operators.mts.bonus': 'Yandex Maps, 2GIS and banking apps — unlimited, no data usage',
'travel_tips.operators.mts.activation': 'USSD *111*333# or in the My MTS app',
'travel_tips.operators.mts.badge': 'Best Deal',
'travel_tips.operators.megafon.name': 'MegaFon',
'travel_tips.operators.megafon.plan': 'Roaming in Abkhazia',
'travel_tips.operators.megafon.calls_in': '9 RUB/min',
'travel_tips.operators.megafon.calls_out': '9 RUB/min',
'travel_tips.operators.megafon.internet': '~9 RUB/MB without add-on. Recommended "Holiday Online" add-on — discounted minute + GB packages',
'travel_tips.operators.megafon.bonus': '"Holiday Online" add-on: packages from 300 RUB (minutes + GB)',
'travel_tips.operators.megafon.activation': 'MegaFon app → Roaming',
'travel_tips.operators.beeline.name': 'Beeline',
'travel_tips.operators.beeline.plan': 'Worldwide Roaming',
'travel_tips.operators.beeline.calls_in': '9 RUB/min',
'travel_tips.operators.beeline.calls_out': '9 RUB/min',
'travel_tips.operators.beeline.internet': 'GB packages in the app. Without package — ~10 RUB/MB',
'travel_tips.operators.beeline.bonus': 'Beeline app works without data usage. Packages from 300 RUB',
'travel_tips.operators.beeline.activation': 'My Beeline app → Roaming',
'travel_tips.operators.yota.name': 'Yota',
'travel_tips.operators.yota.plan': 'Roaming (MegaFon network)',
'travel_tips.operators.yota.calls_in': '~10 RUB/min',
'travel_tips.operators.yota.calls_out': '~10 RUB/min',
'travel_tips.operators.yota.internet': '~15 RUB/MB. No roaming packages available',
'travel_tips.operators.yota.bonus': '—',
'travel_tips.operators.yota.activation': 'Automatic — verify in the Yota app',
'travel_tips.operators.tele2.name': 'Tele2',
'travel_tips.operators.tele2.plan': 'Roaming in Abkhazia',
'travel_tips.operators.tele2.calls_in': '~10 RUB/min',
'travel_tips.operators.tele2.calls_out': '~10 RUB/min',
'travel_tips.operators.tele2.internet': '~15 RUB/MB. Limited coverage — verify availability',
'travel_tips.operators.tele2.bonus': '—',
'travel_tips.operators.tele2.activation': 'Check in the Tele2 app — manual activation may be required',
'travel_tips.operators.local.title': 'Local Operators & SIM Cards',
'travel_tips.operators.local.desc': 'Abkhazia has two local operators: A-Mobile and Aquafon. You can buy a SIM card right after the Psou border checkpoint on the Abkhazian side — no need to wait until you reach the city. SIM cards are also sold at any mobile shop in Gudauta or Gagra. A Russian passport is required. Starter packs start at 200 RUB. Local service is cheaper for calls within Abkhazia.',
'travel_tips.operators.local.note': 'Important! Check the latest tariffs in your operator\'s app before traveling — rates may change.',
'travel_tips.note': 'Tariffs are approximate. Please verify current conditions with your operator before traveling.'
}
};

View File

@@ -620,34 +620,63 @@ h1, h2, h3, h4 {
box-shadow: 0 5px 20px rgba(8,131,149,0.3);
}
/* Gallery */
.gallery-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: clamp(8px, 2vw, 15px);
}
.gallery-item {
/* Gallery - Horizontal Scroll Carousel */
.gallery-scroll-wrapper {
overflow: hidden;
position: relative;
width: 100%;
}
.gallery-scroll-wrapper::before,
.gallery-scroll-wrapper::after {
content: '';
position: absolute;
top: 0; bottom: 0;
width: clamp(30px, 6vw, 80px);
z-index: 2;
pointer-events: none;
}
.gallery-scroll-wrapper::before {
left: 0;
background: linear-gradient(to right, var(--light) 0%, transparent 100%);
}
.gallery-scroll-wrapper::after {
right: 0;
background: linear-gradient(to left, var(--light) 0%, transparent 100%);
}
.gallery-track {
display: flex;
width: max-content;
animation: galleryScroll 35s linear infinite;
}
.gallery-track:hover {
animation-play-state: paused;
}
.gallery-slide {
flex-shrink: 0;
width: clamp(260px, 30vw, 380px);
height: clamp(180px, 22vw, 260px);
margin-right: clamp(8px, 1.5vw, 14px);
border-radius: 16px;
overflow: hidden;
cursor: pointer;
transition: all 0.3s ease;
aspect-ratio: 1;
position: relative;
transition: transform 0.3s ease;
}
.gallery-item:first-child {
grid-column: span 2;
grid-row: span 2;
aspect-ratio: auto;
.gallery-slide:hover {
transform: scale(1.03);
}
.gallery-item img {
.gallery-slide img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.5s ease;
}
.gallery-item:hover img {
transform: scale(1.1);
.gallery-slide:hover img {
transform: scale(1.08);
}
.gallery-overlay {
position: absolute;
top: 0; left: 0;
@@ -659,7 +688,7 @@ h1, h2, h3, h4 {
align-items: flex-end;
padding: clamp(10px, 3vw, 20px);
}
.gallery-item:hover .gallery-overlay {
.gallery-slide:hover .gallery-overlay {
opacity: 1;
}
.gallery-overlay span {
@@ -668,6 +697,78 @@ h1, h2, h3, h4 {
font-size: clamp(0.85rem, 1.5vw, 1rem);
}
@keyframes galleryScroll {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
/* Gallery Lightbox */
.gallery-lightbox {
position: fixed;
top: 0; left: 0;
width: 100vw; height: 100vh;
background: rgba(0,0,0,0.92);
z-index: 100000;
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
pointer-events: none;
transition: opacity 0.35s ease;
backdrop-filter: blur(10px);
cursor: pointer;
}
.gallery-lightbox.active {
opacity: 1;
pointer-events: auto;
}
.gallery-lightbox-close {
position: absolute;
top: clamp(10px, 3vw, 25px);
right: clamp(10px, 3vw, 25px);
width: clamp(40px, 7vw, 56px);
height: clamp(40px, 7vw, 56px);
display: flex;
align-items: center;
justify-content: center;
font-size: clamp(24px, 4vw, 36px);
color: rgba(255,255,255,0.8);
background: rgba(255,255,255,0.08);
border-radius: 50%;
cursor: pointer;
transition: all 0.3s ease;
z-index: 2;
line-height: 1;
}
.gallery-lightbox-close:hover {
background: rgba(255,255,255,0.2);
color: #fff;
transform: rotate(90deg);
}
.gallery-lightbox-caption {
position: absolute;
bottom: clamp(10px, 3vw, 30px);
left: 50%;
transform: translateX(-50%);
color: rgba(255,255,255,0.7);
font-size: clamp(0.85rem, 1.4vw, 1rem);
text-align: center;
z-index: 2;
pointer-events: none;
}
.gallery-lightbox-img {
max-width: 90vw;
max-height: 90vh;
object-fit: contain;
border-radius: 8px;
box-shadow: 0 20px 60px rgba(0,0,0,0.4);
transition: transform 0.3s ease;
z-index: 1;
}
.gallery-lightbox.img:hover .gallery-lightbox-img {
transform: scale(1.02);
}
/* Activities */
.activity-card {
@@ -1152,10 +1253,6 @@ h1, h2, h3, h4 {
/* Responsive - Tablet */
@media (max-width: 991px) {
.gallery-item:first-child {
grid-column: span 1;
grid-row: span 1;
}
.feature-grid {
grid-template-columns: repeat(2, 1fr);
}
@@ -1166,11 +1263,6 @@ h1, h2, h3, h4 {
.feature-grid {
grid-template-columns: 1fr;
}
.gallery-item:first-child {
grid-column: span 1;
grid-row: span 1;
aspect-ratio: 1;
}
.room-footer {
flex-direction: column;
gap: 15px;
@@ -1339,3 +1431,347 @@ h1, h2, h3, h4 {
0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: 0.5; }
50% { transform: translate(-50%, -50%) scale(1.1); opacity: 0.2; }
}
/* ======= Travel Tips Section ======= */
.travel-tips-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 340px), 1fr));
gap: clamp(14px, 2.5vw, 24px);
}
.tips-card {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 20px;
padding: clamp(18px, 3.5vw, 28px);
transition: all 0.35s ease;
height: 100%;
}
.tips-card:hover {
background: rgba(255,255,255,0.08);
border-color: rgba(212,168,67,0.4);
transform: translateY(-4px);
box-shadow: 0 12px 40px rgba(0,0,0,0.25);
}
.tips-card-header {
display: flex;
align-items: center;
gap: clamp(10px, 2vw, 15px);
margin-bottom: clamp(12px, 2.5vw, 18px);
}
.tips-card-icon {
width: clamp(44px, 8vw, 56px);
height: clamp(44px, 8vw, 56px);
min-width: clamp(44px, 8vw, 56px);
border-radius: 16px;
background: linear-gradient(135deg, var(--gold), var(--accent));
display: flex;
align-items: center;
justify-content: center;
color: var(--dark);
font-size: clamp(1.1rem, 2vw, 1.4rem);
}
.tips-card-icon.blue {
background: linear-gradient(135deg, var(--primary), var(--primary-light));
color: #fff;
}
.tips-card-icon.sea {
background: linear-gradient(135deg, var(--sea), var(--sky));
color: #fff;
}
.tips-card-title {
font-size: clamp(0.95rem, 1.6vw, 1.1rem);
font-weight: 700;
color: #fff;
margin: 0;
}
.tips-list {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: clamp(10px, 2vw, 14px);
}
.tips-list-item {
display: flex;
gap: clamp(8px, 1.5vw, 12px);
align-items: flex-start;
}
.tips-list-marker {
width: 24px;
height: 24px;
min-width: 24px;
border-radius: 8px;
background: rgba(212,168,67,0.2);
display: flex;
align-items: center;
justify-content: center;
color: var(--gold);
font-size: 0.75rem;
margin-top: 1px;
}
.tips-list-text strong {
color: var(--gold);
font-weight: 600;
display: block;
font-size: clamp(0.8rem, 1.3vw, 0.9rem);
margin-bottom: 2px;
}
.tips-list-text span {
color: rgba(255,255,255,0.7);
font-size: clamp(0.75rem, 1.2vw, 0.85rem);
line-height: 1.55;
}
/* Mobile Operators Section */
.travel-tips-operators {
margin-top: clamp(24px, 5vw, 40px);
}
.operators-title {
font-size: clamp(1rem, 2vw, 1.3rem);
font-weight: 700;
color: #fff;
margin-bottom: clamp(10px, 2vw, 16px);
display: flex;
align-items: center;
gap: 10px;
}
.operators-title i {
color: var(--gold);
}
.operators-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr));
gap: clamp(10px, 2vw, 16px);
}
.operator-card {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.1);
border-radius: 16px;
padding: clamp(14px, 2.5vw, 20px);
transition: all 0.35s ease;
position: relative;
overflow: hidden;
}
.operator-card:hover {
background: rgba(255,255,255,0.08);
transform: translateY(-3px);
box-shadow: 0 8px 30px rgba(0,0,0,0.2);
}
.operator-card.featured {
border-color: var(--gold);
background: rgba(212,168,67,0.08);
box-shadow: 0 0 30px rgba(212,168,67,0.1);
}
.operator-card.featured::before {
content: '';
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
background: linear-gradient(90deg, var(--gold), var(--accent), var(--gold));
border-radius: 3px 3px 0 0;
}
.operator-badge {
position: absolute;
top: 12px;
right: 12px;
background: var(--gold);
color: var(--dark);
padding: 3px 10px;
border-radius: 20px;
font-size: 0.7rem;
font-weight: 700;
letter-spacing: 0.5px;
text-transform: uppercase;
}
.operator-header {
display: flex;
align-items: center;
gap: 10px;
margin-bottom: 10px;
}
.operator-logo {
width: 40px;
height: 40px;
min-width: 40px;
border-radius: 10px;
background: rgba(255,255,255,0.1);
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: 0.7rem;
color: #fff;
letter-spacing: 0.5px;
}
.operator-logo.mts { background: #e30613; }
.operator-logo.megafon { background: #00b956; }
.operator-logo.beeline { background: #f9b000; color: #1a1a2e; }
.operator-logo.yota { background: #00bfff; }
.operator-logo.tele2 { background: #1d1d1b; }
.operator-name {
font-weight: 700;
color: #fff;
font-size: clamp(0.9rem, 1.5vw, 1rem);
}
.operator-plan {
font-size: 0.72rem;
color: rgba(255,255,255,0.45);
text-transform: uppercase;
letter-spacing: 0.5px;
}
.operator-rows {
display: flex;
flex-direction: column;
gap: 6px;
margin-top: 12px;
}
.operator-row {
display: flex;
justify-content: space-between;
align-items: baseline;
padding: 4px 0;
border-bottom: 1px solid rgba(255,255,255,0.05);
}
.operator-row:last-child {
border-bottom: none;
}
.operator-row-label {
font-size: 0.7rem;
color: rgba(255,255,255,0.4);
text-transform: uppercase;
letter-spacing: 0.5px;
min-width: clamp(70px, 12vw, 80px);
}
.operator-row-value {
font-size: 0.78rem;
color: rgba(255,255,255,0.8);
text-align: right;
line-height: 1.45;
}
.operator-row-value.bonus {
color: var(--gold);
}
.operator-row-value.activation {
color: rgba(255,255,255,0.6);
font-size: 0.72rem;
}
.operator-row-value.highlight {
color: #fff;
font-weight: 600;
}
/* Local SIM Section */
.local-sim-card {
background: rgba(212,168,67,0.06);
border: 1px solid rgba(212,168,67,0.2);
border-radius: 16px;
padding: clamp(16px, 3vw, 24px);
margin-top: clamp(16px, 3vw, 24px);
display: flex;
align-items: flex-start;
gap: clamp(10px, 2vw, 16px);
}
.local-sim-icon {
width: clamp(42px, 8vw, 52px);
height: clamp(42px, 8vw, 52px);
min-width: clamp(42px, 8vw, 52px);
border-radius: 14px;
background: linear-gradient(135deg, var(--gold), var(--accent));
display: flex;
align-items: center;
justify-content: center;
color: var(--dark);
font-size: clamp(1.1rem, 2vw, 1.3rem);
}
.local-sim-body h4 {
color: #fff;
font-size: clamp(0.95rem, 1.6vw, 1.05rem);
margin-bottom: 6px;
font-weight: 700;
}
.local-sim-body p {
color: rgba(255,255,255,0.7);
font-size: clamp(0.78rem, 1.2vw, 0.85rem);
line-height: 1.6;
margin: 0;
}
.local-sim-note {
display: flex;
align-items: flex-start;
gap: 8px;
margin-top: 12px;
padding: 10px 14px;
background: rgba(201,48,44,0.12);
border-radius: 10px;
border-left: 3px solid var(--accent2);
}
.local-sim-note i {
color: var(--accent2);
font-size: 0.9rem;
margin-top: 1px;
}
.local-sim-note span {
color: rgba(255,255,255,0.65);
font-size: 0.78rem;
line-height: 1.5;
}
/* Travel Tips Note */
.travel-tips-footnote {
text-align: center;
margin-top: clamp(24px, 5vw, 40px);
padding: clamp(12px, 2.5vw, 18px);
background: rgba(255,255,255,0.03);
border-radius: 12px;
}
.travel-tips-footnote p {
color: rgba(255,255,255,0.4);
font-size: clamp(0.7rem, 1.1vw, 0.78rem);
margin: 0;
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
}
.travel-tips-footnote i {
color: var(--gold);
}
/* Larger screens: operators section gets a wider card */
@media (min-width: 992px) {
.operators-grid {
grid-template-columns: repeat(3, 1fr);
}
}
@media (max-width: 767px) {
.travel-tips-grid {
grid-template-columns: 1fr;
}
.operators-grid {
grid-template-columns: 1fr;
}
.local-sim-card {
flex-direction: column;
}
}
/* Operator card icon pulse for featured */
.operator-card.featured .operator-logo {
animation: softPulse 2.5s ease-in-out infinite;
}
@keyframes softPulse {
0%, 100% { box-shadow: 0 0 0 0 rgba(212,168,67,0.3); }
50% { box-shadow: 0 0 0 10px rgba(212,168,67,0); }
}

View File

@@ -32,6 +32,7 @@
<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>
@@ -181,26 +182,38 @@
<div class="abkhazian-pattern"></div>
<p class="section-subtitle">Насладитесь видами нашей гостиницы, побережья и окрестностей Гудауты</p>
</div>
<div class="gallery-grid animate-on-scroll">
<div class="gallery-item">
<img src="img/h777.webp" alt="Hotel 777">
<div class="gallery-overlay"><span>Наша гостиница</span></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>
</div>
<div class="gallery-item">
<img src="img/16536f4b7-0c1c-4bbb-8537-96bbdd2e0886.webp" alt="Пляж">
<div class="gallery-overlay"><span>Пляж Гудауты</span></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>
</div>
<div class="gallery-item">
<img src="img/1e4e22546-0208-4ba8-96fb-02052aecc8b5.webp" alt="Закат">
<div class="gallery-overlay"><span>Закат на море</span></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>
</div>
<div class="gallery-item">
<img src="img/1e1ad70fe-ff01-4f94-9ca9-4926eba5bdd2.webp" alt="Горы">
<div class="gallery-overlay"><span>Горы Абхазии</span></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>
</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>
</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>
</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>
</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>
</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>
</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>
</div>
<div class="gallery-item">
<img src="img/123f15ff3-55ae-428f-8af9-7d53c01d28a5.webp" alt="Река">
<div class="gallery-overlay"><span>Река Гудаута</span></div>
</div>
</div>
</div>
@@ -250,6 +263,302 @@
</div>
</section>
<!-- Travel Tips Section -->
<section class="section section-dark" id="travel-tips">
<div class="container">
<div class="section-header animate-on-scroll">
<div class="section-badge" data-i18n="travel_tips.badge">Уголок туриста</div>
<h2 class="section-title" data-i18n="travel_tips.title">Что нужно знать туристу</h2>
<div class="abkhazian-pattern"></div>
<p class="section-subtitle" data-i18n="travel_tips.subtitle">Полезная информация для комфортного и безопасного отдыха в Абхазии: связь, традиции, важные советы</p>
</div>
<!-- Top Row: Important & Customs -->
<div class="travel-tips-grid animate-on-scroll">
<!-- Important Info Card -->
<div class="tips-card">
<div class="tips-card-header">
<div class="tips-card-icon blue"><i class="fas fa-passport"></i></div>
<h3 class="tips-card-title" data-i18n="travel_tips.important.title">Важные моменты</h3>
</div>
<ul class="tips-list">
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.important.1.title">Пересечение границы</strong>
<span data-i18n="travel_tips.important.1.desc">Для граждан РФ — внутренний паспорт. Детям до 14 лет — свидетельство о рождении. Граница по реке Псоу, работают два КПП. Очереди в пик сезона — планируйте время.</span>
</div>
</li>
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.important.2.title">Валюта и оплата</strong>
<span data-i18n="travel_tips.important.2.desc">В Абхазии действует российский рубль. Банкоматы есть только в крупных городах (Гагра, Сухум, Гудаута). Везде принимают наличные, карты — только в крупных магазинах и отелях.</span>
</div>
</li>
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.important.3.title">Медицина и страховка</strong>
<span data-i18n="travel_tips.important.3.desc">Полис ОМС РФ в Абхазии не действует. Рекомендуем оформить туристическую страховку. В Гудауте есть аптеки и больница. Возьмите необходимые лекарства с собой.</span>
</div>
</li>
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.important.4.title">Транспорт</strong>
<span data-i18n="travel_tips.important.4.desc">Основной транспорт — маршрутки и такси. Между городами курсируют автобусы. Дороги горные, соблюдайте осторожность. До гостиницы от границы ~30 минут на такси.</span>
</div>
</li>
</ul>
</div>
<!-- Customs Card -->
<div class="tips-card">
<div class="tips-card-header">
<div class="tips-card-icon"><i class="fas fa-heart"></i></div>
<h3 class="tips-card-title" data-i18n="travel_tips.customs.title">Национальные особенности</h3>
</div>
<ul class="tips-list">
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.customs.1.title">Абхазское гостеприимство</strong>
<span data-i18n="travel_tips.customs.1.desc">Гостеприимство для абхазов — священный долг. Гостю предложат лучшее, что есть в доме. Отказ от угощения может быть воспринят как неуважение — попробуйте хотя бы немного.</span>
</div>
</li>
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.customs.2.title">Застольные традиции</strong>
<span data-i18n="travel_tips.customs.2.desc">Тамада — главный человек за столом. Тосты произносятся по очереди, первый — за Всевышнего. Пить до дна не обязательно, но пригубить нужно. Не перебивайте говорящего тост.</span>
</div>
</li>
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.customs.3.title">Уважение к старшим</strong>
<span data-i18n="travel_tips.customs.3.desc">В Абхазии глубоко чтят старших по возрасту. При встрече первым здоровается младший. В присутствии старших не принято громко говорить, курить или сидеть в вольной позе.</span>
</div>
</li>
<li class="tips-list-item">
<div class="tips-list-marker"><i class="fas fa-check"></i></div>
<div class="tips-list-text">
<strong data-i18n="travel_tips.customs.4.title">Местная кухня</strong>
<span data-i18n="travel_tips.customs.4.desc">Обязательно попробуйте: абысту (мамалыга), аджику, хачапури, копчёный сыр, ачапу (фасоль с орехами), шашлык, свежую форель. Национальные напитки — чача и местное вино.</span>
</div>
</li>
</ul>
</div>
</div>
<!-- Mobile Operators -->
<div class="travel-tips-operators animate-on-scroll">
<div class="tips-card" style="grid-column: 1/-1;">
<div class="tips-card-header">
<div class="tips-card-icon sea"><i class="fas fa-signal"></i></div>
<h3 class="tips-card-title" data-i18n="travel_tips.mobile.title">Мобильная связь и интернет</h3>
</div>
<p style="color: rgba(255,255,255,0.6); font-size: clamp(0.8rem, 1.3vw, 0.9rem); margin-bottom: 18px;" data-i18n="travel_tips.mobile.subtitle">Какие операторы работают в Абхазии, условия роуминга и как получить местную SIM-карту</p>
<div class="operators-title">
<i class="fas fa-flag" style="font-size: 0.85rem;"></i>
<span data-i18n="travel_tips.operators.russian.title">Российские операторы в Абхазии</span>
</div>
<div class="operators-grid">
<!-- MTS - Featured -->
<div class="operator-card featured">
<div class="operator-badge" data-i18n="travel_tips.operators.mts.badge">Лучшее предложение</div>
<div class="operator-header">
<div class="operator-logo mts">MTC</div>
<div>
<div class="operator-name" data-i18n="travel_tips.operators.mts.name">МТС</div>
<div class="operator-plan" data-i18n="travel_tips.operators.mts.plan">«Забугорище»</div>
</div>
</div>
<div class="operator-rows">
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_in">Входящие</span>
<span class="operator-row-value highlight" data-i18n="travel_tips.operators.mts.calls_in">Бесплатно (первые 10 мин каждого вызова)</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_out">Исходящие в РФ</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.mts.calls_out">9,50 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.internet">Интернет</span>
<span class="operator-row-value highlight" data-i18n="travel_tips.operators.mts.internet">700 МБ/мес бесплатно. Далее — 3,50 ₽/МБ</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.bonus">Бонусы</span>
<span class="operator-row-value bonus" data-i18n="travel_tips.operators.mts.bonus">Яндекс Карты, 2ГИС и банковские приложения — безлимитно и без расхода пакета</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.activation">Как подключить</span>
<span class="operator-row-value activation" data-i18n="travel_tips.operators.mts.activation">USSD *111*333# или в приложении «Мой МТС»</span>
</div>
</div>
</div>
<!-- MegaFon -->
<div class="operator-card">
<div class="operator-header">
<div class="operator-logo megafon">M</div>
<div>
<div class="operator-name" data-i18n="travel_tips.operators.megafon.name">МегаФон</div>
<div class="operator-plan" data-i18n="travel_tips.operators.megafon.plan">Роуминг в Абхазии</div>
</div>
</div>
<div class="operator-rows">
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_in">Входящие</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.megafon.calls_in">9 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_out">Исходящие в РФ</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.megafon.calls_out">9 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.internet">Интернет</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.megafon.internet">~9 ₽/МБ без опции. Рекомендуется опция «Отпуск онлайн» — пакеты минут и ГБ со скидкой</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.bonus">Бонусы</span>
<span class="operator-row-value bonus" data-i18n="travel_tips.operators.megafon.bonus">Опция «Отпуск онлайн»: пакеты от 300 ₽ (минуты + ГБ)</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.activation">Как подключить</span>
<span class="operator-row-value activation" data-i18n="travel_tips.operators.megafon.activation">В приложении МегаФон → Роуминг</span>
</div>
</div>
</div>
<!-- Beeline -->
<div class="operator-card">
<div class="operator-header">
<div class="operator-logo beeline">B</div>
<div>
<div class="operator-name" data-i18n="travel_tips.operators.beeline.name">Билайн</div>
<div class="operator-plan" data-i18n="travel_tips.operators.beeline.plan">Роуминг по миру</div>
</div>
</div>
<div class="operator-rows">
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_in">Входящие</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.beeline.calls_in">9 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_out">Исходящие в РФ</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.beeline.calls_out">9 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.internet">Интернет</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.beeline.internet">Пакеты ГБ в приложении. Без пакета — ~10 ₽/МБ</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.bonus">Бонусы</span>
<span class="operator-row-value bonus" data-i18n="travel_tips.operators.beeline.bonus">Приложение Билайн работает без расхода трафика. Пакеты от 300 ₽</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.activation">Как подключить</span>
<span class="operator-row-value activation" data-i18n="travel_tips.operators.beeline.activation">В приложении «Мой Билайн» → Роуминг</span>
</div>
</div>
</div>
<!-- Yota -->
<div class="operator-card">
<div class="operator-header">
<div class="operator-logo yota">Yo</div>
<div>
<div class="operator-name" data-i18n="travel_tips.operators.yota.name">Yota</div>
<div class="operator-plan" data-i18n="travel_tips.operators.yota.plan">Роуминг (сеть МегаФон)</div>
</div>
</div>
<div class="operator-rows">
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_in">Входящие</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.yota.calls_in">~10 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_out">Исходящие в РФ</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.yota.calls_out">~10 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.internet">Интернет</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.yota.internet">~15 ₽/МБ. Пакеты роуминга не предусмотрены</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.bonus">Бонусы</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.yota.bonus"></span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.activation">Как подключить</span>
<span class="operator-row-value activation" data-i18n="travel_tips.operators.yota.activation">Автоматически, проверьте в приложении Yota</span>
</div>
</div>
</div>
<!-- Tele2 -->
<div class="operator-card">
<div class="operator-header">
<div class="operator-logo tele2">T2</div>
<div>
<div class="operator-name" data-i18n="travel_tips.operators.tele2.name">Tele2</div>
<div class="operator-plan" data-i18n="travel_tips.operators.tele2.plan">Роуминг в Абхазии</div>
</div>
</div>
<div class="operator-rows">
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_in">Входящие</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.tele2.calls_in">~10 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.calls_out">Исходящие в РФ</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.tele2.calls_out">~10 ₽/мин</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.internet">Интернет</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.tele2.internet">~15 ₽/МБ. Ограниченное покрытие — проверьте доступность</span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.bonus">Бонусы</span>
<span class="operator-row-value" data-i18n="travel_tips.operators.tele2.bonus"></span>
</div>
<div class="operator-row">
<span class="operator-row-label" data-i18n="travel_tips.operators.labels.activation">Как подключить</span>
<span class="operator-row-value activation" data-i18n="travel_tips.operators.tele2.activation">Проверьте в приложении Tele2 — может потребоваться подключение</span>
</div>
</div>
</div>
</div>
<!-- Local SIM -->
<div class="local-sim-card">
<div class="local-sim-icon"><i class="fas fa-sim-card"></i></div>
<div class="local-sim-body">
<h4 data-i18n="travel_tips.operators.local.title">Местные операторы и SIM-карты</h4>
<p data-i18n="travel_tips.operators.local.desc">В Абхазии работают два местных оператора: А-Мобайл и Аквафон. SIM-карту можно купить в любом салоне связи в Гудауте или Гагре. Потребуется паспорт РФ. Стоимость стартового пакета — от 200 ₽. Местная связь выгоднее для звонков внутри Абхазии.</p>
<div class="local-sim-note">
<i class="fas fa-exclamation-triangle"></i>
<span data-i18n="travel_tips.operators.local.note">Важно! Перед поездкой уточните актуальные условия в приложении вашего оператора — тарифы могут меняться.</span>
</div>
</div>
</div>
<!-- Footnote -->
<div class="travel-tips-footnote">
<p>
<i class="fas fa-info-circle"></i>
<span data-i18n="travel_tips.note">Тарифы указаны ориентировочно. Пожалуйста, проверяйте актуальные условия у вашего оператора перед поездкой.</span>
</p>
</div>
</div>
</div>
</div>
</section>
<!-- CTA Banner -->
<section class="section section-light" style="background: #fff;">
<div class="container">
@@ -409,6 +718,7 @@
<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>
@@ -624,6 +934,13 @@
</div>
</div>
<!-- Gallery Lightbox -->
<div class="gallery-lightbox" id="galleryLightbox" onclick="closeLightbox()">
<div class="gallery-lightbox-close" onclick="closeLightbox()">&times;</div>
<div class="gallery-lightbox-caption" id="galleryLightboxCaption"></div>
<img class="gallery-lightbox-img" id="galleryLightboxImg" src="" alt="">
</div>
</body>
</html>

View File

@@ -351,3 +351,26 @@ window.addEventListener('scroll', () => {
hero.style.transform = `scale(${1 + scrolled * 0.0001}) translateY(${scrolled * 0.3}px)`;
}
});
// Gallery Lightbox
function openLightbox(src, caption) {
const lb = document.getElementById('galleryLightbox');
const img = document.getElementById('galleryLightboxImg');
const cap = document.getElementById('galleryLightboxCaption');
img.src = src;
cap.textContent = caption || '';
lb.classList.add('active');
document.body.style.overflow = 'hidden';
}
function closeLightbox() {
const lb = document.getElementById('galleryLightbox');
lb.classList.remove('active');
document.body.style.overflow = '';
}
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
closeLightbox();
}
});