diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
new file mode 100644
index 0000000..3d4886c
--- /dev/null
+++ b/.gitea/workflows/deploy.yml
@@ -0,0 +1,75 @@
+name: Deploy to Production
+
+on:
+ push:
+ branches: [main, master]
+ workflow_dispatch: # Ручной запуск из интерфейса
+
+jobs:
+ deploy:
+ runs-on: self-hosted # Используем ваш act_runner без Docker
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+
+ - name: Show structure
+ run: |
+ echo "Структура проекта:"
+ ls -la
+ echo "Текущая директория: $(pwd)"
+
+ - name: Backup current site
+ run: |
+ BACKUP_DIR="/var/backups/arseny-site/$(date +%Y%m%d-%H%M%S)"
+ mkdir -p $BACKUP_DIR
+ cp -r /var/www/arseny.ahtamov.ru/html/* $BACKUP_DIR/ 2>/dev/null || true
+ echo "Backup создан в: $BACKUP_DIR"
+
+ - name: Deploy files
+ run: |
+ echo "Деплой файлов в /var/www/arseny.ahtamov.ru/html/"
+
+ # Удаляем старые файлы (кроме скрытых системных)
+ find /var/www/arseny.ahtamov.ru/html/ -type f \
+ ! -name '.htaccess' \
+ ! -name '.user.ini' \
+ ! -name '.well-known' \
+ -delete 2>/dev/null || true
+
+ # Копируем новые файлы
+ cp -r ./* /var/www/arseny.ahtamov.ru/html/
+
+ # Устанавливаем правильные права
+ chown -R www-data:www-data /var/www/arseny.ahtamov.ru/html/
+ find /var/www/arseny.ahtamov.ru/html/ -type d -exec chmod 755 {} \;
+ find /var/www/arseny.ahtamov.ru/html/ -type f -exec chmod 644 {} \;
+
+ # Для скриптов (если есть) даем права на выполнение
+ find /var/www/arseny.ahtamov.ru/html/ -name "*.php" -exec chmod 755 {} \; 2>/dev/null || true
+ find /var/www/arseny.ahtamov.ru/html/ -name "*.cgi" -exec chmod 755 {} \; 2>/dev/null || true
+
+ - name: Restart nginx
+ run: |
+ echo "Проверяем конфигурацию nginx"
+ nginx -t
+
+ echo "Перезагружаем nginx"
+ systemctl reload nginx || nginx -s reload
+
+ echo "Проверяем статус nginx"
+ systemctl status nginx --no-pager || true
+
+ - name: Verify deployment
+ run: |
+ echo "Проверка деплоя:"
+ echo "Количество файлов в целевой директории:"
+ find /var/www/arseny.ahtamov.ru/html/ -type f | wc -l
+
+ echo "Размер директории:"
+ du -sh /var/www/arseny.ahtamov.ru/html/
+
+ echo "Последние измененные файлы:"
+ ls -lht /var/www/arseny.ahtamov.ru/html/ | head -10
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..1a702ec
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,7 @@
+{
+ "recommendations": [
+ "ms-vscode.vscode-typescript-next",
+ "ritwickdey.liveserver",
+ "ms-vscode.live-server"
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..a96e7f7
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,15 @@
+{
+ "files.exclude": {
+ "**/.git": true,
+ "**/.gitea": true,
+ "**/.github": true,
+ "**/node_modules": true
+ },
+ "editor.tabSize": 2,
+ "files.associations": {
+ "*.conf": "nginx",
+ "*.html": "html",
+ "*.css": "css",
+ "*.js": "javascript"
+ }
+}
diff --git a/WWW.csproj b/WWW.csproj
new file mode 100644
index 0000000..24ec0e8
--- /dev/null
+++ b/WWW.csproj
@@ -0,0 +1,7 @@
+
+
+ net8.0
+ enable
+ enable
+
+
diff --git a/WWW.sln b/WWW.sln
new file mode 100644
index 0000000..427ec50
--- /dev/null
+++ b/WWW.sln
@@ -0,0 +1,19 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WWW", "WWW.csproj", "{UNIQUE-GUID-HERE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {UNIQUE-GUID-HERE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {UNIQUE-GUID-HERE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {UNIQUE-GUID-HERE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {UNIQUE-GUID-HERE}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/html/api/counter.php b/html/api/counter.php
new file mode 100644
index 0000000..f70caa6
--- /dev/null
+++ b/html/api/counter.php
@@ -0,0 +1,30 @@
+ 'success', 'count' => $count]);
+
+} elseif ($_SERVER['REQUEST_METHOD'] === 'GET') {
+ // Возвращаем текущее значение
+ if (file_exists($counterFile)) {
+ $count = file_get_contents($counterFile);
+ } else {
+ $count = 0;
+ }
+
+ echo json_encode(['count' => intval($count)]);
+}
+?>
\ No newline at end of file
diff --git a/html/api/counter.txt b/html/api/counter.txt
new file mode 100644
index 0000000..e69de29
diff --git a/html/css/style.css b/html/css/style.css
new file mode 100644
index 0000000..0de8d76
--- /dev/null
+++ b/html/css/style.css
@@ -0,0 +1,493 @@
+/* Базовые стили */
+:root {
+ --primary: #4361ee;
+ --secondary: #3a0ca3;
+ --accent: #f72585;
+ --light: #f8f9fa;
+ --dark: #212529;
+ --gray: #6c757d;
+}
+
+* {
+ margin: 0;
+ padding: 0;
+ box-sizing: border-box;
+}
+
+html {
+ scroll-behavior: smooth;
+}
+
+body {
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
+ line-height: 1.6;
+ color: var(--dark);
+ background-color: #fff;
+}
+
+.container {
+ max-width: 1200px;
+ margin: 0 auto;
+ padding: 0 20px;
+}
+
+/* Навигация */
+.navbar {
+ background-color: white;
+ box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
+ position: fixed;
+ width: 100%;
+ top: 0;
+ z-index: 1000;
+}
+
+.navbar .container {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ padding: 1rem 20px;
+}
+
+.logo {
+ font-size: 1.5rem;
+ font-weight: bold;
+ color: var(--primary);
+ text-decoration: none;
+}
+
+.nav-links {
+ display: flex;
+ gap: 2rem;
+}
+
+.nav-links a {
+ text-decoration: none;
+ color: var(--dark);
+ font-weight: 500;
+ transition: color 0.3s;
+}
+
+.nav-links a:hover {
+ color: var(--primary);
+}
+
+.menu-toggle {
+ display: none;
+ background: none;
+ border: none;
+ font-size: 1.5rem;
+ cursor: pointer;
+ color: var(--dark);
+}
+
+/* Герой-секция */
+.hero {
+ padding: 120px 0 60px;
+ background: linear-gradient(135deg, #4361ee 0%, #3a0ca3 100%);
+ color: white;
+}
+
+.hero-content {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 4rem;
+ align-items: center;
+}
+
+.hero-text h1 {
+ font-size: 3rem;
+ margin-bottom: 1rem;
+}
+
+.highlight {
+ color: var(--accent);
+}
+
+.hero-text p {
+ font-size: 1.2rem;
+ margin-bottom: 2rem;
+ opacity: 0.9;
+}
+
+.social-links {
+ display: flex;
+ gap: 1rem;
+}
+
+.social-links a {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: 40px;
+ height: 40px;
+ background: rgba(255, 255, 255, 0.1);
+ border-radius: 50%;
+ color: white;
+ font-size: 1.2rem;
+ transition: all 0.3s;
+}
+
+.social-links a:hover {
+ background: var(--accent);
+ transform: translateY(-3px);
+}
+
+.hero-image {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+}
+
+.avatar-img {
+ width: 300px;
+ height: 300px;
+ border-radius: 50%;
+ object-fit: cover;
+ border: 4px solid white;
+ box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2);
+ transition: all 0.3s ease;
+}
+
+.avatar-img:hover {
+ transform: scale(1.05);
+ box-shadow: 0 12px 30px rgba(0, 0, 0, 0.3);
+}
+
+/* Секции */
+.section {
+ padding: 80px 0;
+ animation: fadeIn 0.8s ease-out;
+}
+
+.section h2 {
+ text-align: center;
+ font-size: 2.5rem;
+ margin-bottom: 3rem;
+ color: var(--secondary);
+}
+
+.bg-light {
+ background-color: var(--light);
+}
+
+/* Обо мне */
+.about-content {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 4rem;
+ align-items: start;
+}
+
+.about-text p {
+ margin-bottom: 1rem;
+ font-size: 1.1rem;
+ line-height: 1.8;
+}
+
+.facts {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 1.5rem;
+}
+
+.fact-card {
+ text-align: center;
+ padding: 2rem 1rem;
+ background: white;
+ border-radius: 10px;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
+ transition: transform 0.3s;
+}
+
+.fact-card:hover {
+ transform: translateY(-5px);
+}
+
+.fact-card i {
+ font-size: 2.5rem;
+ color: var(--primary);
+ margin-bottom: 1rem;
+}
+
+/* Интересы */
+.interests-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
+ gap: 2rem;
+}
+
+.interest-card {
+ background: white;
+ padding: 2rem;
+ border-radius: 10px;
+ text-align: center;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
+ transition: all 0.3s;
+}
+
+.interest-card:hover {
+ transform: translateY(-10px);
+ box-shadow: 0 15px 30px rgba(0, 0, 0, 0.2);
+}
+
+.interest-icon {
+ width: 80px;
+ height: 80px;
+ background: linear-gradient(135deg, var(--primary), var(--secondary));
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 0 auto 1.5rem;
+ color: white;
+ font-size: 2rem;
+}
+
+/* Проекты */
+.projects-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+}
+
+.project-card {
+ background: white;
+ border-radius: 10px;
+ overflow: hidden;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
+ transition: all 0.3s;
+}
+
+.project-card:hover {
+ transform: translateY(-10px);
+}
+
+.project-image {
+ height: 200px;
+ background: linear-gradient(135deg, #4361ee, #3a0ca3);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: white;
+ font-size: 4rem;
+}
+
+.project-card h3 {
+ padding: 1.5rem 1.5rem 0.5rem;
+}
+
+.project-card p {
+ padding: 0 1.5rem;
+ color: var(--gray);
+ margin-bottom: 1.5rem;
+}
+
+.btn {
+ display: inline-block;
+ background: var(--primary);
+ color: white;
+ padding: 0.8rem 1.5rem;
+ border-radius: 5px;
+ text-decoration: none;
+ font-weight: 600;
+ transition: all 0.3s;
+ border: none;
+ cursor: pointer;
+ margin: 1.5rem;
+}
+
+.btn:hover {
+ background: var(--secondary);
+ transform: translateY(-2px);
+}
+
+/* Блог */
+.blog-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2rem;
+}
+
+.blog-card {
+ background: white;
+ padding: 2rem;
+ border-radius: 10px;
+ box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
+}
+
+.blog-date {
+ color: var(--accent);
+ font-weight: 600;
+ margin-bottom: 0.5rem;
+}
+
+.blog-card h3 {
+ margin-bottom: 1rem;
+}
+
+.blog-card p {
+ color: var(--gray);
+ margin-bottom: 1rem;
+}
+
+.read-more {
+ color: var(--primary);
+ text-decoration: none;
+ font-weight: 600;
+}
+
+.read-more:hover {
+ text-decoration: underline;
+}
+
+/* Контакты */
+.contact-wrapper {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ gap: 4rem;
+ max-width: 800px;
+ margin: 0 auto;
+}
+
+.contact-info p {
+ display: flex;
+ align-items: center;
+ gap: 1rem;
+ margin-bottom: 1.5rem;
+ font-size: 1.1rem;
+}
+
+.contact-info i {
+ color: var(--primary);
+ width: 24px;
+}
+
+.contact-form input,
+.contact-form textarea {
+ width: 100%;
+ padding: 1rem;
+ margin-bottom: 1rem;
+ border: 1px solid #ddd;
+ border-radius: 5px;
+ font-family: inherit;
+}
+
+.contact-form button {
+ width: 100%;
+}
+
+/* Футер */
+footer {
+ background: var(--dark);
+ color: white;
+ text-align: center;
+ padding: 2rem 0;
+}
+
+footer p {
+ margin-bottom: 0.5rem;
+}
+
+/* Анимации */
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(20px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+/* Стили для счетчика */
+[data-counter] {
+ transition: all 0.3s ease;
+ font-weight: bold;
+}
+
+.counter-loaded {
+ color: #4CAF50;
+ animation: pulse 2s infinite;
+}
+
+@keyframes pulse {
+ 0% {
+ transform: scale(1);
+ }
+ 50% {
+ transform: scale(1.05);
+ }
+ 100% {
+ transform: scale(1);
+ }
+}
+
+/* Стиль для счетчика в навигации */
+.nav-counter {
+ background: linear-gradient(45deg, #FF6B6B, #4ECDC4);
+ color: white;
+ padding: 5px 12px;
+ border-radius: 20px;
+ font-size: 14px;
+ margin-left: 15px;
+ box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
+}
+
+/* Стиль для счетчика в футере */
+.footer-counter {
+ font-size: 12px;
+ color: #666;
+ margin-top: 10px;
+}
+
+/* Адаптивность */
+@media (max-width: 768px) {
+ .menu-toggle {
+ display: block;
+ }
+
+ .nav-links {
+ display: none;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ right: 0;
+ background: white;
+ flex-direction: column;
+ padding: 1rem;
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1);
+ }
+
+ .nav-links.active {
+ display: flex;
+ }
+
+ .hero-content,
+ .about-content,
+ .contact-wrapper {
+ grid-template-columns: 1fr;
+ gap: 2rem;
+ }
+
+ .hero-text h1 {
+ font-size: 2rem;
+ }
+
+ .avatar-img {
+ width: 200px;
+ height: 200px;
+ }
+
+ .hero-image {
+ order: -1; /* Переместить изображение выше текста на мобильных */
+ }
+
+ .facts {
+ grid-template-columns: 1fr;
+ }
+
+ .section {
+ padding: 60px 0;
+ }
+}
\ No newline at end of file
diff --git a/html/images/avatar.jpg b/html/images/avatar.jpg
new file mode 100644
index 0000000..633e46c
Binary files /dev/null and b/html/images/avatar.jpg differ
diff --git a/html/index.html b/html/index.html
new file mode 100644
index 0000000..84ec3ae
--- /dev/null
+++ b/html/index.html
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+ Арсений Ахтамов
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Привет, я
+
Арсений Ахтамов
+
Подросток, увлеченный технологиями, программированием и спортом
+
+
+
+
+
+
+
+
+
+
+
+
+
Обо мне
+
+
+
Меня зовут Арсений Ахтамов, мне 10 лет. Я учусь в 4а классе гимназии "Пеленг" и активно
+ интересуюсь современными технологиями.
+
В свободное время занимаюсь программированием, изучаю веб-разработку и работаю над собственными
+ проектами.
+
Люблю спорт - особенно футбол и велоспорт. Верю, что баланс между технологиями и физической
+ активностью важен для развития.
+
+
+
+
+
Программирование
+
Изучаю Python и C#. Я ещё работал в Figma и Thunkable.
+
+
+
+
Спорт
+
Футбол, плавание, велоспорт
+
+
+
+
Гейминг
+
Люблю стратегии и RPG игры
+
+
+
+
+
+
+
+
+
+
Мои интересы
+
+
+
+
+
+
IT технологии
+
Искусственный интеллект, кибербезопасность, разработка игр
+
+
+
+
+
+
Фотография
+
Люблю снимать природу и городские пейзажи
+
+
+
+
+
+
Музыка
+
Слушаю класическую музыку, фанк и неокласическую музыку.
+
+
+
+
+
+
Чтение
+
Фантастика, научпоп, техническая литература и детективы.
+
+
+
+
+
+
+
+
+
Мои проекты
+
+
+
+
+
+
Персональный сайт
+
Сайт-портфолио на HTML/CSS/JavaScript
+
Посмотреть
+
+
+
+
+
+
Телеграм-бот
+
Бот для помощи с домашними заданиями
+
Посмотреть
+
+
+
+
+
+
2D игра
+
Простая игра на Python с PyGame
+
Посмотреть
+
+
+
+
+
+
+
+
+
Последние записи
+
+
+ 15.11.2025
+ Мой первый сайт
+ Расскажу о том, как я создавал этот сайт...
+ Читать далее →
+
+
+ 10.11.2025
+ Изучаю Python
+ Поделюсь своими впечатлениями от изучения Python...
+ Читать далее →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/html/index_oiginal.html b/html/index_oiginal.html
new file mode 100644
index 0000000..0aef127
--- /dev/null
+++ b/html/index_oiginal.html
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+ Арсений Ахтамов
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Привет, я
+
Арсений Ахтамов
+
Подросток, увлеченный технологиями, программированием и спортом
+
+
+
+
+
+
+
+
+
+
+
Обо мне
+
+
+
Меня зовут Арсений Ахтамов, мне 10 лет. Я учусь в 4а классе гимназии "Пеленг" и активно
+ интересуюсь современными технологиями.
+
В свободное время занимаюсь программированием, изучаю веб-разработку и работаю над собственными
+ проектами.
+
Люблю спорт - особенно футбол и велоспорт. Верю, что баланс между технологиями и физической
+ активностью важен для развития.
+
+
+
+
+
Программирование
+
Изучаю Python и C#. Я ещё работал в Figma и Thunkable.
+
+
+
+
Спорт
+
Футбол, плавание, велоспорт
+
+
+
+
Гейминг
+
Люблю стратегии и RPG игры
+
+
+
+
+
+
+
+
+
+
Мои интересы
+
+
+
+
+
+
IT технологии
+
Искусственный интеллект, кибербезопасность, разработка игр
+
+
+
+
+
+
Фотография
+
Люблю снимать природу и городские пейзажи
+
+
+
+
+
+
Музыка
+
Слушаю класическую музыку, фанк и неокласическую музыку.
+
+
+
+
+
+
Чтение
+
Фантастика, научпоп, техническая литература и детективы.
+
+
+
+
+
+
+
+
+
Мои проекты
+
+
+
+
+
+
Персональный сайт
+
Сайт-портфолио на HTML/CSS/JavaScript
+
Посмотреть
+
+
+
+
+
+
Телеграм-бот
+
Бот для помощи с домашними заданиями
+
Посмотреть
+
+
+
+
+
+
2D игра
+
Простая игра на Python с PyGame
+
Посмотреть
+
+
+
+
+
+
+
+
+
Последние записи
+
+
+ 15.11.2025
+ Мой первый сайт
+ Расскажу о том, как я создавал этот сайт...
+ Читать далее →
+
+
+ 10.11.2025
+ Изучаю Python
+ Поделюсь своими впечатлениями от изучения Python...
+ Читать далее →
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/html/js/counter.js b/html/js/counter.js
new file mode 100644
index 0000000..b70f6e1
--- /dev/null
+++ b/html/js/counter.js
@@ -0,0 +1,87 @@
+// Простой счетчик посещений
+class SimpleCounter {
+ constructor() {
+ this.storageKey = 'arseny_site_counter';
+ this.serverFile = '/api/counter.txt'; // Файл для синхронизации
+ this.init();
+ }
+
+ async init() {
+ try {
+ // 1. Получаем локальное значение
+ let localCount = localStorage.getItem(this.storageKey);
+ if (!localCount) {
+ localCount = 1;
+ } else {
+ localCount = parseInt(localCount) + 1;
+ }
+
+ // 2. Сохраняем локально
+ localStorage.setItem(this.storageKey, localCount);
+
+ // 3. Пытаемся синхронизировать с сервером (в фоне, без ожидания)
+ this.syncWithServer(localCount);
+
+ // 4. Показываем на странице
+ this.display(localCount);
+
+ } catch (error) {
+ console.log('Счетчик работает в локальном режиме');
+ this.displayFallback();
+ }
+ }
+
+ async syncWithServer(count) {
+ try {
+ // Отправляем данные на сервер
+ await fetch(this.serverFile, {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ body: JSON.stringify({ count: count })
+ });
+ } catch (error) {
+ // Игнорируем ошибки - работает локальная версия
+ }
+ }
+
+ display(count) {
+ // Ищем все элементы для отображения счетчика
+ const elements = document.querySelectorAll('[data-counter]');
+
+ elements.forEach(element => {
+ const format = element.dataset.format || 'simple';
+
+ switch(format) {
+ case 'simple':
+ element.textContent = `Посетителей: ${this.formatNumber(count)}`;
+ break;
+ case 'number':
+ element.textContent = this.formatNumber(count);
+ break;
+ case 'message':
+ element.textContent = `Вы посетитель №${this.formatNumber(count)}`;
+ break;
+ }
+
+ element.classList.add('counter-loaded');
+ });
+ }
+
+ displayFallback() {
+ const elements = document.querySelectorAll('[data-counter]');
+ elements.forEach(element => {
+ element.textContent = 'Счетчик загружается...';
+ });
+ }
+
+ formatNumber(num) {
+ return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
+ }
+}
+
+// Автоматический запуск при загрузке страницы
+document.addEventListener('DOMContentLoaded', () => {
+ new SimpleCounter();
+});
\ No newline at end of file
diff --git a/html/js/script.js b/html/js/script.js
new file mode 100644
index 0000000..8f05115
--- /dev/null
+++ b/html/js/script.js
@@ -0,0 +1,68 @@
+// Мобильное меню
+document.addEventListener('DOMContentLoaded', function () {
+ const menuToggle = document.querySelector('.menu-toggle');
+ const navLinks = document.querySelector('.nav-links');
+
+ menuToggle.addEventListener('click', function () {
+ navLinks.classList.toggle('active');
+ });
+
+ // Закрытие меню при клике на ссылку
+ document.querySelectorAll('.nav-links a').forEach(link => {
+ link.addEventListener('click', () => {
+ navLinks.classList.remove('active');
+ });
+ });
+
+ // Плавная прокрутка
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
+ anchor.addEventListener('click', function (e) {
+ e.preventDefault();
+ const targetId = this.getAttribute('href');
+ if (targetId === '#') return;
+
+ const targetElement = document.querySelector(targetId);
+ if (targetElement) {
+ window.scrollTo({
+ top: targetElement.offsetTop - 80,
+ behavior: 'smooth'
+ });
+ }
+ });
+ });
+
+ // Форма обратной связи
+ const contactForm = document.querySelector('.contact-form');
+ if (contactForm) {
+ contactForm.addEventListener('submit', function (e) {
+ e.preventDefault();
+
+ // Здесь можно добавить отправку формы на сервер
+ alert('Спасибо за сообщение! Я свяжусь с вами в ближайшее время.');
+ this.reset();
+ });
+ }
+
+ // Анимация появления элементов при скролле
+ const observerOptions = {
+ threshold: 0.1,
+ rootMargin: '0px 0px -50px 0px'
+ };
+
+ const observer = new IntersectionObserver((entries) => {
+ entries.forEach(entry => {
+ if (entry.isIntersecting) {
+ entry.target.style.opacity = '1';
+ entry.target.style.transform = 'translateY(0)';
+ }
+ });
+ }, observerOptions);
+
+ // Наблюдаем за карточками
+ document.querySelectorAll('.fact-card, .interest-card, .project-card, .blog-card').forEach(card => {
+ card.style.opacity = '0';
+ card.style.transform = 'translateY(20px)';
+ card.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
+ observer.observe(card);
+ });
+});
\ No newline at end of file
diff --git a/html/robots.txt b/html/robots.txt
new file mode 100644
index 0000000..70c2374
--- /dev/null
+++ b/html/robots.txt
@@ -0,0 +1,2 @@
+User-agent: *
+Disallow: /
diff --git a/html/start.html b/html/start.html
new file mode 100644
index 0000000..78c528c
--- /dev/null
+++ b/html/start.html
@@ -0,0 +1,25 @@
+
+
+
+
+
+ Page Title
+
+
+
+
+
+
+
+ This is the main content of the page.
+
+
+
+
+
+
+
diff --git a/html/stop.html b/html/stop.html
new file mode 100644
index 0000000..c85b507
--- /dev/null
+++ b/html/stop.html
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+ Этот текст — заголовок документа
+
+
+
+
+
+
+
+ Это главный заголовок веб-сайта
+
+
+
+ домой
+ фотографии href="http://google.com"
+ видео
+ контакты
+
+
+
+
+ Статья номер 1
+ Статья номер 2
+
+
+ Copyright © 2010-2011
+ Copyright © 2011 MinkBooks
+
+
+
+
\ No newline at end of file