22 - python & all web labs

This commit is contained in:
2026-05-02 20:27:02 +05:00
parent ef77f101fa
commit 19af922baf
5781 changed files with 770492 additions and 96 deletions

94
labWeb/kt_3/booking.html Normal file
View File

@@ -0,0 +1,94 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вокруг Света | Заявка</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a class="logo" href="index.html">Вокруг Света</a>
<button id="burger" class="burger" aria-label="Меню">☰</button>
<nav id="siteNav" class="site-nav">
<ul>
<li><a href="index.html">Главная</a></li>
<li><a href="news.html">Новости</a></li>
<li><a href="cards.html">Направления</a></li>
<li><a href="tours.html">Расписание</a></li>
<li><a class="active" href="booking.html">Заявка</a></li>
<li><a href="contacts.html">Контакты</a></li>
</ul>
</nav>
</div>
</header>
<main class="container">
<h1>Форма заявки на тур</h1>
<p>Заполните заявку, и менеджер свяжется с вами для уточнения деталей и подбора оптимального варианта поездки.</p>
<div class="card">
<form id="bookingForm">
<div>
<label for="firstName">Имя</label>
<input id="firstName" name="firstName" required>
</div>
<div>
<label for="lastName">Фамилия</label>
<input id="lastName" name="lastName" required>
</div>
<div>
<label for="email">Email</label>
<input id="email" type="email" name="email" required>
</div>
<div>
<label for="phone">Телефон</label>
<input id="phone" name="phone" required>
</div>
<div>
<label for="city">Город вылета</label>
<input id="city" name="city" required>
</div>
<div>
<label for="direction">Направление</label>
<select id="direction" name="direction">
<option>Турция</option>
<option>Италия</option>
<option>Норвегия</option>
<option>Исландия</option>
</select>
</div>
<div>
<label for="startDate">Дата начала</label>
<input id="startDate" type="date" name="startDate">
</div>
<div>
<label for="endDate">Дата окончания</label>
<input id="endDate" type="date" name="endDate">
</div>
<div>
<label for="people">Количество человек</label>
<input id="people" type="number" min="1" name="people">
</div>
<div>
<label for="budget">Бюджет (руб.)</label>
<input id="budget" type="number" min="10000" name="budget">
</div>
<div class="form-full">
<label for="comment">Комментарий</label>
<textarea id="comment" name="comment"></textarea>
</div>
<div class="form-full">
<button class="btn" type="submit">Отправить</button>
</div>
</form>
<div id="formResult" class="result">После отправки вы увидите краткую сводку по вашей заявке.</div>
</div>
</main>
<footer class="site-footer">
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
</footer>
<script src="script.js"></script>
</body>
</html>

49
labWeb/kt_3/cards.html Normal file
View File

@@ -0,0 +1,49 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вокруг Света | Направления</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a class="logo" href="index.html">Вокруг Света</a>
<button id="burger" class="burger" aria-label="Меню">☰</button>
<nav id="siteNav" class="site-nav">
<ul>
<li><a href="index.html">Главная</a></li>
<li><a href="news.html">Новости</a></li>
<li><a class="active" href="cards.html">Направления</a></li>
<li><a href="tours.html">Расписание</a></li>
<li><a href="booking.html">Заявка</a></li>
<li><a href="contacts.html">Контакты</a></li>
</ul>
</nav>
</div>
</header>
<main class="container">
<h1>Популярные направления</h1>
<p>Подборка направлений для спокойного отдыха, активных поездок и насыщенных экскурсионных программ.</p>
<section class="cards-flex">
<article class="tour-card"><img src="images/photo1.jpg" alt=""><div class="tour-card-body"><h3>Турция</h3><p>Комфортные отели у моря, тёплый климат и удобный формат отдыха для всей семьи.</p></div></article>
<article class="tour-card"><img src="images/photo2.jpeg" alt=""><div class="tour-card-body"><h3>Грузия</h3><p>Горные маршруты, уютные старые кварталы и национальная кухня с местным колоритом.</p></div></article>
<article class="tour-card"><img src="images/photo3.jpeg" alt=""><div class="tour-card-body"><h3>Япония</h3><p>Технологичные мегаполисы, древние храмы и сезон цветения сакуры в лучших локациях.</p></div></article>
<article class="tour-card"><img src="images/photo4.jpeg" alt=""><div class="tour-card-body"><h3>Италия</h3><p>Классические экскурсии, гастрономические маршруты и прогулки по историческим центрам.</p></div></article>
<article class="tour-card"><img src="images/photo5.jpeg" alt=""><div class="tour-card-body"><h3>Исландия</h3><p>Ледники, вулканические пейзажи и насыщенная программа для любителей природы.</p></div></article>
<article class="tour-card"><img src="images/photo6.jpeg" alt=""><div class="tour-card-body"><h3>Франция</h3><p>Париж, Прованс и Лазурный берег с насыщенными экскурсиями и свободным временем.</p></div></article>
<article class="tour-card"><img src="images/photo7.webp" alt=""><div class="tour-card-body"><h3>Испания</h3><p>Пляжный сезон почти круглый год, яркие фестивали и интересные городские маршруты.</p></div></article>
<article class="tour-card"><img src="images/photo8.jpg" alt=""><div class="tour-card-body"><h3>Норвегия</h3><p>Фьорды, северная природа и круизы с остановками в самых красивых портах.</p></div></article>
<article class="tour-card"><img src="images/photo9.jpg" alt=""><div class="tour-card-body"><h3>Марокко</h3><p>Старинные медины, рынки ремесленников и поездки по пустынным ландшафтам.</p></div></article>
<article class="tour-card"><img src="images/photo10.webp" alt=""><div class="tour-card-body"><h3>Португалия</h3><p>Атлантическое побережье, винные регионы и уютные города с богатой историей.</p></div></article>
</section>
</main>
<footer class="site-footer">
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
</footer>
<script src="script.js"></script>
</body>
</html>

44
labWeb/kt_3/contacts.html Normal file
View File

@@ -0,0 +1,44 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вокруг Света | Контакты</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a class="logo" href="index.html">Вокруг Света</a>
<button id="burger" class="burger" aria-label="Меню">☰</button>
<nav id="siteNav" class="site-nav">
<ul>
<li><a href="index.html">Главная</a></li>
<li><a href="news.html">Новости</a></li>
<li><a href="cards.html">Направления</a></li>
<li><a href="tours.html">Расписание</a></li>
<li><a href="booking.html">Заявка</a></li>
<li><a class="active" href="contacts.html">Контакты</a></li>
</ul>
</nav>
</div>
</header>
<main class="container">
<h1>Контакты</h1>
<section class="card">
<h2>Наш офис</h2>
<p>Мы работаем ежедневно и помогаем подобрать туры для отпуска, командировок и семейных поездок.</p>
<p><b>Адрес:</b> Москва, ул. Примерная, 10</p>
<p><b>Телефон:</b> +7 (900) 123-45-67</p>
<p><b>Email:</b> info@tour-example.ru</p>
<p id="geoResult"></p>
</section>
</main>
<footer class="site-footer">
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
</footer>
<script src="script.js"></script>
</body>
</html>

View File

@@ -0,0 +1,7 @@
Макет главной страницы в Figma:
https://www.figma.com/file/example123/Vokrug-Sveta-Main-Page
Описание макета:
- Первый экран с заголовком, текущей датой и кнопкой перехода к заявке
- Блок с ключевыми преимуществами агентства
- Секция со слайдером туристических направлений

Binary file not shown.

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

76
labWeb/kt_3/index.html Normal file
View File

@@ -0,0 +1,76 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вокруг Света | Главная</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a class="logo" href="index.html">Вокруг Света</a>
<button id="burger" class="burger" aria-label="Меню">☰</button>
<nav id="siteNav" class="site-nav">
<ul>
<li><a class="active" href="index.html">Главная</a></li>
<li><a href="news.html">Новости</a></li>
<li><a href="cards.html">Направления</a></li>
<li><a href="tours.html">Расписание</a></li>
<li><a href="booking.html">Заявка</a></li>
<li><a href="contacts.html">Контакты</a></li>
</ul>
</nav>
</div>
</header>
<main class="container">
<section class="hero">
<h1>Туристическое агентство "Вокруг Света"</h1>
<p>Помогаем подобрать поездки под ваш стиль отдыха: от коротких городских уикендов до больших путешествий на 10-14 дней.</p>
<p><b>Сегодня:</b> <span id="todayDate"></span></p>
<p>Макет главной страницы в Figma: <a href="#" title="Добавьте свою ссылку Figma">посмотреть</a></p>
</section>
<section class="grid-home">
<article class="card">
<h2>Куда можно поехать</h2>
<p>В каталоге есть пляжные, экскурсионные и комбинированные туры с разным бюджетом и длительностью.</p>
<p>Мы обновляем подборку каждую неделю, чтобы в ней были только актуальные предложения.</p>
</article>
<article class="card">
<h2>Быстрые ссылки</h2>
<ul>
<li><a href="news.html">Открыть новости</a></li>
<li><a href="booking.html">Оставить заявку</a></li>
<li><a href="contacts.html">Наши контакты</a></li>
</ul>
</article>
</section>
<section class="card">
<h2>Идеи для следующей поездки</h2>
<div class="slider">
<div class="slide active">
<img src="images/photo1.jpg" alt="Горы">
<div class="slide-caption">Горные приключения</div>
</div>
<div class="slide">
<img src="images/photo10.webp" alt="Пляж">
<div class="slide-caption">Пляжный отдых</div>
</div>
<div class="slide">
<img src="images/photo8.jpg" alt="Город">
<div class="slide-caption">Экскурсии по городам</div>
</div>
</div>
</section>
</main>
<footer class="site-footer">
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
</footer>
<script src="script.js"></script>
</body>
</html>

97
labWeb/kt_3/news.html Normal file
View File

@@ -0,0 +1,97 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вокруг Света | Новости</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a class="logo" href="index.html">Вокруг Света</a>
<button id="burger" class="burger" aria-label="Меню">☰</button>
<nav id="siteNav" class="site-nav">
<ul>
<li><a href="index.html">Главная</a></li>
<li><a class="active" href="news.html">Новости</a></li>
<li><a href="cards.html">Направления</a></li>
<li><a href="tours.html">Расписание</a></li>
<li><a href="booking.html">Заявка</a></li>
<li><a href="contacts.html">Контакты</a></li>
</ul>
</nav>
</div>
</header>
<main class="container">
<h1>Новости туризма</h1>
<p>Следим за обновлениями в отрасли и публикуем важные изменения по направлениям, ценам и условиям поездок.</p>
<section class="news-grid">
<article class="news-item">
<img src="images/photo1.jpg" alt="Новость 1">
<div class="news-item-content">
<h3>Открыт новый маршрут в Исландию</h3>
<p>Маршрут включает ледники, водопады и вулканические зоны.</p>
<button class="btn open-news" data-title="Открыт новый маршрут в Исландию" data-full="С мая 2026 года запускается недельный тур по Исландии с гидом. Программа включает экскурсии к водопадам, посещение ледниковой лагуны и наблюдение северного сияния в вечернее время.">Читать полностью</button>
</div>
</article>
<article class="news-item">
<img src="images/photo2.jpeg" alt="Новость 2">
<div class="news-item-content">
<h3>Снижены цены на летние туры</h3>
<p>Раннее бронирование позволяет сэкономить до 25%.</p>
<button class="btn open-news" data-title="Снижены цены на летние туры" data-full="До конца месяца действует акция на летние направления: Турция, Греция и Черногория. При бронировании заранее доступны расширенные условия отмены и бесплатный трансфер от аэропорта.">Читать полностью</button>
</div>
</article>
<article class="news-item">
<img src="images/photo3.jpeg" alt="Новость 3">
<div class="news-item-content">
<h3>Новые экскурсии по историческим местам</h3>
<p>Добавлены программы с профессиональными гидами.</p>
<button class="btn open-news" data-title="Новые экскурсии по историческим местам" data-full="В разделе экскурсионных туров появились новые маршруты по Европе и Азии. Участники смогут посетить музеи, архитектурные памятники и местные фестивали с русскоязычным сопровождением.">Читать полностью</button>
</div>
</article>
<article class="news-item">
<img src="images/photo4.jpeg" alt="Новость 4">
<div class="news-item-content">
<h3>Запущена программа семейных туров</h3>
<p>Специальные условия для семей с детьми до 12 лет.</p>
<button class="btn open-news" data-title="Запущена программа семейных туров" data-full="Новая программа ориентирована на спокойный отдых с детьми. В стоимость включены детские активности, анимация в отелях и скидки на второй номер для большой семьи.">Читать полностью</button>
</div>
</article>
<article class="news-item">
<img src="images/photo5.jpeg" alt="Новость 5">
<div class="news-item-content">
<h3>Появились зимние туры на Байкал</h3>
<p>Катание на коньках, фототуры и горячие источники.</p>
<button class="btn open-news" data-title="Появились зимние туры на Байкал" data-full="Компания подготовила зимнюю программу на Байкале: прозрачный лед, фотосессии, катание на снегоходах и посещение термальных источников. Доступны туры на 5 и 8 дней.">Читать полностью</button>
</div>
</article>
<article class="news-item">
<img src="images/photo6.jpeg" alt="Новость 6">
<div class="news-item-content">
<h3>Обновлены правила страхования</h3>
<p>Включена расширенная медицинская поддержка.</p>
<button class="btn open-news" data-title="Обновлены правила страхования" data-full="Во всех пакетных турах теперь действует обновленная страховка. Она покрывает экстренную медицинскую помощь, задержки рейсов и дополнительные расходы при вынужденном продлении поездки.">Читать полностью</button>
</div>
</article>
</section>
</main>
<div id="newsModal" class="modal-overlay">
<div class="modal">
<div class="modal-head">
<h2 id="modalTitle">Новость</h2>
<button id="closeModal" class="close-btn">Закрыть</button>
</div>
<p id="modalText"></p>
</div>
</div>
<footer class="site-footer">
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
</footer>
<script src="script.js"></script>
</body>
</html>

117
labWeb/kt_3/script.js Normal file
View File

@@ -0,0 +1,117 @@
document.addEventListener("DOMContentLoaded", function () {
const burger = document.getElementById("burger");
const nav = document.getElementById("siteNav");
if (burger && nav) {
burger.addEventListener("click", function () {
nav.classList.toggle("open");
});
}
const dateBox = document.getElementById("todayDate");
if (dateBox) {
const now = new Date();
dateBox.textContent = now.toLocaleDateString("ru-RU", {
year: "numeric",
month: "long",
day: "numeric",
weekday: "long"
});
}
const slides = Array.from(document.querySelectorAll(".slide"));
if (slides.length > 0) {
let slideIndex = 0;
setInterval(function () {
slides[slideIndex].classList.remove("active");
slideIndex = (slideIndex + 1) % slides.length;
slides[slideIndex].classList.add("active");
}, 3000);
}
const newsModal = document.getElementById("newsModal");
const modalTitle = document.getElementById("modalTitle");
const modalText = document.getElementById("modalText");
const closeModalBtn = document.getElementById("closeModal");
const newsButtons = document.querySelectorAll(".open-news");
if (newsModal && modalTitle && modalText && closeModalBtn && newsButtons.length) {
newsButtons.forEach(function (btn) {
btn.addEventListener("click", function () {
modalTitle.textContent = btn.dataset.title || "Новость";
modalText.textContent = btn.dataset.full || "";
newsModal.classList.add("open");
});
});
closeModalBtn.addEventListener("click", function () {
newsModal.classList.remove("open");
});
newsModal.addEventListener("click", function (event) {
if (event.target === newsModal) {
newsModal.classList.remove("open");
}
});
}
const geoBtn = document.getElementById("geoBtn");
const geoResult = document.getElementById("geoResult");
if (geoBtn && geoResult) {
geoBtn.addEventListener("click", function () {
if (!navigator.geolocation) {
geoResult.textContent = "Геолокация не поддерживается.";
return;
}
geoResult.textContent = "Определяем координаты...";
navigator.geolocation.getCurrentPosition(
function (position) {
const lat = position.coords.latitude.toFixed(5);
const lon = position.coords.longitude.toFixed(5);
geoResult.textContent = "Ваши координаты: " + lat + ", " + lon;
},
function () {
geoResult.textContent = "Не удалось получить геолокацию.";
}
);
});
}
const bookingForm = document.getElementById("bookingForm");
const formResult = document.getElementById("formResult");
if (bookingForm && formResult) {
const saved = localStorage.getItem("bookingData");
if (saved) {
const parsed = JSON.parse(saved);
for (const key in parsed) {
const el = bookingForm.elements[key];
if (el) {
el.value = parsed[key];
}
}
}
bookingForm.addEventListener("submit", function (event) {
event.preventDefault();
const formData = new FormData(bookingForm);
const dataObj = {};
formData.forEach(function (value, key) {
dataObj[key] = value;
});
localStorage.setItem("bookingData", JSON.stringify(dataObj));
formResult.innerHTML =
"<h3>Результат обработки формы</h3>" +
"<p><b>Имя:</b> " + (dataObj.firstName || "") + "</p>" +
"<p><b>Фамилия:</b> " + (dataObj.lastName || "") + "</p>" +
"<p><b>Email:</b> " + (dataObj.email || "") + "</p>" +
"<p><b>Телефон:</b> " + (dataObj.phone || "") + "</p>" +
"<p><b>Город вылета:</b> " + (dataObj.city || "") + "</p>" +
"<p><b>Направление:</b> " + (dataObj.direction || "") + "</p>" +
"<p><b>Дата старта:</b> " + (dataObj.startDate || "") + "</p>" +
"<p><b>Дата возврата:</b> " + (dataObj.endDate || "") + "</p>" +
"<p><b>Количество человек:</b> " + (dataObj.people || "") + "</p>" +
"<p><b>Бюджет:</b> " + (dataObj.budget || "") + " руб.</p>" +
"<p><b>Комментарий:</b> " + (dataObj.comment || "") + "</p>";
});
}
});

375
labWeb/kt_3/styles.css Normal file
View File

@@ -0,0 +1,375 @@
:root {
--bg: #f6f7fb;
--card: #ffffff;
--text: #222;
--muted: #667085;
--accent: #3b82f6;
--accent-dark: #1d4ed8;
--border: #e5e7eb;
--shadow: 0 10px 20px rgba(0, 0, 0, 0.08);
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Arial, sans-serif;
color: var(--text);
background: var(--bg);
min-height: 100vh;
display: flex;
flex-direction: column;
}
main {
flex: 1;
}
a {
color: inherit;
text-decoration: none;
}
.container {
width: min(1100px, 92%);
margin: 0 auto;
}
.site-header {
background: #0f172a;
color: #fff;
position: sticky;
top: 0;
z-index: 30;
}
.header-inner {
display: flex;
align-items: center;
justify-content: space-between;
min-height: 64px;
}
.logo {
font-weight: 700;
letter-spacing: 0.5px;
}
.burger {
display: none;
border: 0;
background: transparent;
color: #fff;
font-size: 26px;
cursor: pointer;
}
.site-nav ul {
list-style: none;
display: flex;
gap: 18px;
padding: 0;
margin: 0;
}
.site-nav a {
color: #fff;
opacity: 0.9;
}
.site-nav a:hover,
.site-nav a.active {
opacity: 1;
text-decoration: underline;
}
.hero {
margin-top: 20px;
background: linear-gradient(120deg, #dbeafe, #f0f9ff);
border: 1px solid var(--border);
border-radius: 14px;
padding: 26px;
}
.hero h1 {
margin-top: 0;
}
.grid-home {
display: grid;
grid-template-columns: 2fr 1fr;
gap: 18px;
margin: 20px 0 30px;
}
.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 12px;
padding: 16px;
box-shadow: var(--shadow);
}
.slider {
overflow: hidden;
border-radius: 10px;
position: relative;
min-height: 240px;
}
.slide {
display: none;
}
.slide.active {
display: block;
}
.slide img {
width: 100%;
height: 240px;
object-fit: cover;
display: block;
}
.slide-caption {
position: absolute;
left: 8px;
right: 8px;
bottom: 8px;
background: rgba(0, 0, 0, 0.6);
color: #fff;
padding: 8px;
border-radius: 8px;
}
.btn {
background: var(--accent);
color: #fff;
border: none;
border-radius: 8px;
padding: 9px 14px;
cursor: pointer;
}
.btn:hover {
background: var(--accent-dark);
}
.news-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 14px;
margin: 20px 0;
}
.news-item {
background: #fff;
border-radius: 10px;
border: 1px solid var(--border);
overflow: hidden;
box-shadow: var(--shadow);
}
.news-item img {
width: 100%;
height: 160px;
object-fit: cover;
}
.news-item-content {
padding: 12px;
}
.cards-flex {
display: flex;
flex-wrap: wrap;
gap: 14px;
margin: 20px 0;
}
.tour-card {
display: flex;
flex-direction: column;
width: calc(25% - 11px);
background: #fff;
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
}
.tour-card img {
width: 100%;
height: 140px;
object-fit: cover;
}
.tour-card-body {
padding: 10px;
}
table {
width: 100%;
border-collapse: collapse;
background: #fff;
}
th,
td {
border: 1px solid var(--border);
padding: 10px;
text-align: left;
}
th {
background: #e2e8f0;
}
form {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 12px;
}
label {
display: block;
font-size: 14px;
color: var(--muted);
margin-bottom: 4px;
}
input,
select,
textarea {
width: 100%;
border: 1px solid var(--border);
border-radius: 7px;
padding: 8px;
}
textarea {
min-height: 90px;
resize: vertical;
}
.form-full {
grid-column: 1 / -1;
}
.result {
margin-top: 16px;
background: #fff;
border: 1px dashed #94a3b8;
border-radius: 10px;
padding: 12px;
}
.map-wrap iframe {
width: 100%;
border: 0;
border-radius: 10px;
min-height: 300px;
}
.modal-overlay {
display: none;
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.65);
z-index: 100;
align-items: center;
justify-content: center;
padding: 16px;
}
.modal-overlay.open {
display: flex;
}
.modal {
width: min(720px, 100%);
background: #fff;
border-radius: 12px;
padding: 18px;
}
.modal-head {
display: flex;
justify-content: space-between;
align-items: center;
}
.close-btn {
border: 0;
background: #e2e8f0;
border-radius: 6px;
padding: 6px 10px;
cursor: pointer;
}
.site-footer {
margin-top: 30px;
background: #0f172a;
color: #fff;
padding: 14px 0;
text-align: center;
}
@media (max-width: 960px) {
.news-grid {
grid-template-columns: repeat(2, 1fr);
}
.tour-card {
width: calc(33.333% - 10px);
}
}
@media (max-width: 760px) {
.burger {
display: block;
}
.site-nav {
display: none;
position: absolute;
top: 64px;
left: 0;
right: 0;
background: #0f172a;
border-top: 1px solid rgba(255, 255, 255, 0.16);
}
.site-nav.open {
display: block;
}
.site-nav ul {
flex-direction: column;
padding: 12px;
}
.grid-home {
grid-template-columns: 1fr;
}
.news-grid {
grid-template-columns: 1fr;
}
.tour-card {
width: calc(50% - 7px);
}
form {
grid-template-columns: 1fr;
}
}
@media (max-width: 480px) {
.tour-card {
width: 100%;
}
}

58
labWeb/kt_3/tours.html Normal file
View File

@@ -0,0 +1,58 @@
<!doctype html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вокруг Света | Расписание</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header class="site-header">
<div class="container header-inner">
<a class="logo" href="index.html">Вокруг Света</a>
<button id="burger" class="burger" aria-label="Меню">☰</button>
<nav id="siteNav" class="site-nav">
<ul>
<li><a href="index.html">Главная</a></li>
<li><a href="news.html">Новости</a></li>
<li><a href="cards.html">Направления</a></li>
<li><a class="active" href="tours.html">Расписание</a></li>
<li><a href="booking.html">Заявка</a></li>
<li><a href="contacts.html">Контакты</a></li>
</ul>
</nav>
</div>
</header>
<main class="container">
<h1>Расписание туров на месяц</h1>
<p>Ниже представлены ближайшие выезды по популярным направлениям с актуальными ценами и количеством свободных мест.</p>
<div class="card">
<table>
<thead>
<tr>
<th>Дата</th>
<th>Направление</th>
<th>Длительность</th>
<th>Цена</th>
<th>Свободные места</th>
</tr>
</thead>
<tbody>
<tr><td>05.05.2026</td><td>Турция</td><td>7 дней</td><td>58 000</td><td>12</td></tr>
<tr><td>08.05.2026</td><td>Италия</td><td>8 дней</td><td>84 000</td><td>6</td></tr>
<tr><td>10.05.2026</td><td>Грузия</td><td>6 дней</td><td>49 000</td><td>9</td></tr>
<tr><td>13.05.2026</td><td>Франция</td><td>9 дней</td><td>102 000</td><td>4</td></tr>
<tr><td>17.05.2026</td><td>Исландия</td><td>7 дней</td><td>120 000</td><td>5</td></tr>
<tr><td>20.05.2026</td><td>Норвегия</td><td>8 дней</td><td>111 000</td><td>7</td></tr>
</tbody>
</table>
</div>
</main>
<footer class="site-footer">
<div class="container">ООО "Вокруг Света" | Москва, ул. Примерная, 10 | +7 (900) 123-45-67 | info@tour-example.ru</div>
</footer>
<script src="script.js"></script>
</body>
</html>