ТОП 100
ТОП недели
ТОП 18+
ВНИМАНИЕ!

Этот контент предназначен только для взрослых (18+).

Мой профиль
×

FrontEndDev

FrontEndDev - Telegram канал
9 641
Публикаций
27 624
Подписчиков
7
Просмотров
4
Переходов
Статьи, новости, уроки по front end/web разработке.

http://jem-space.ru
Статьи, новости, уроки по front end/web разработке.
http://jem-space.ru
Программирование

Публикации

9641
Новости от FrontEndDev
FrontEndDev
Изображение
Я усвоил первое правило ARIA сложным путем Семантический HTML по умолчанию выполняет много работы по доступности и ARIA легко использовать неправильно. Его следует применять только для передачи недостающего состояния или для по-настоящему кастомных виджетов, не переопределяя встроенные роли HTML-элементов. продолжение →
1.9K
5 👈
0.26% ERR

📊 Показатели за 89 часов

📈 Охват и вовлеченность
Охват 7%
ERR 0.26%
Соотношение 1:388
⚡ Скорость роста
Просмотров/час 22
Реакций/час 0.1
📅 Опубликовано: Пятница в 12:50
⏱️ Прошло времени: 3 дня назад
👁️ Просмотры 1.9K
45ч 89ч
22 в час
❤️ Реакции 5
45ч 89ч
0.1 в час
Новости от FrontEndDev
FrontEndDev
Изображение
CSS в 2026 году: новые возможности, меняющие фронтенд-разработку Современный CSS становится достаточно мощным для обработки сложных анимаций и пользовательских взаимодействий, которые ранее требовали JavaScript. Использование таких функций, как appearance: base-select , sibling-index() и улучшенного attr() , позволяет создавать интерактивные элементы с меньшим количеством кода, сохраняя при... продолжение →
2.3K
9 👈
0.39% ERR

📊 Показатели за 94 часа

📈 Охват и вовлеченность
Охват 8.3%
ERR 0.39%
Соотношение 1:256
⚡ Скорость роста
Просмотров/час 24
Реакций/час 0.1
📅 Опубликовано: Пятница в 07:30
⏱️ Прошло времени: 3 дня назад
👁️ Просмотры 2.3K
47ч 94ч
24 в час
❤️ Реакции 9
47ч 94ч
0.1 в час
Новости от FrontEndDev
FrontEndDev
Изображение
Анимация переходов адаптивного макета сетки с помощью GSAP Flip Туториал, показывающий, как плавно анимировать изменения размера и перестановку элементов сетки при динамических изменениях макета. Этот подход с использованием плагина GSAP Flip идеально подходит для создания интерактивных галерей и портфолио с бесшовными переходами. продолжение →
2.5K
6 👈
0.24% ERR

📊 Показатели за 111 часов

📈 Охват и вовлеченность
Охват 9%
ERR 0.24%
Соотношение 1:413
⚡ Скорость роста
Просмотров/час 22
Реакций/час 0.1
📅 Опубликовано: Четверг в 14:30
⏱️ Прошло времени: 4 дня назад
👁️ Просмотры 2.5K
56ч 111ч
22 в час
❤️ Реакции 6
56ч 111ч
0.1 в час
Новости от FrontEndDev
FrontEndDev
Изображение
JavaScript: прощай, Date, здравствуй, Temporal. Встроенный объект Date давно доставлял неудобства разработчикам из-за своей нелогичности и изменяемости, что приводило к ошибкам и сложностям в работе со временем. Новый API Temporal призван решить эти проблемы, предлагая современный, более последовательный и функциональный подход к манипуляциям с датами и временем. продолжение →
3.9K
24 👈
0.61% ERR

📊 Показатели за 190 часов

📈 Охват и вовлеченность
Охват 14.2%
ERR 0.61%
Соотношение 1:163
⚡ Скорость роста
Просмотров/час 21
Реакций/час 0.1
📅 Опубликовано: 19.01.2026 в 07:30
⏱️ Прошло времени: 7 дней назад
👁️ Просмотры 3.9K
95ч 190ч
21 в час
❤️ Реакции 24
95ч 190ч
0.1 в час
Новости от FrontEndDev
FrontEndDev
Изображение
Веб-стандарты: выпуск 509 Антивебные API для веба, LLM помогает и убивает Tailwind, нездоровая зависимость от бандлеров https://web-standards.ru/podcast/509/
3.7K
10 👈
0.27% ERR

📊 Показатели за 207 часов

📈 Охват и вовлеченность
Охват 13.3%
ERR 0.27%
Соотношение 1:368
⚡ Скорость роста
Просмотров/час 18
Реакций/час 0
📅 Опубликовано: 18.01.2026 в 14:30
⏱️ Прошло времени: 8 дней назад
👁️ Просмотры 3.7K
104ч 207ч
18 в час
❤️ Реакции 10
104ч 207ч
0 в час
Новости от FrontEndDev
FrontEndDev
Изображение
Детектируем тряску мобильного устройства Реализуем обнаружение встряхивания смартфона без использования сторонних библиотек, опираясь на нативный API devicemotion https://slicker.me/javascript/shake/shake.htm
3.7K
17 👈
0.46% ERR

📊 Показатели за 231 час

📈 Охват и вовлеченность
Охват 13.3%
ERR 0.46%
Соотношение 1:215
⚡ Скорость роста
Просмотров/час 16
Реакций/час 0.1
📅 Опубликовано: 17.01.2026 в 14:30
⏱️ Прошло времени: 9 дней назад
👁️ Просмотры 3.7K
116ч 231ч
16 в час
❤️ Реакции 17
116ч 231ч
0.1 в час
Новости от FrontEndDev
FrontEndDev
Изображение
Отладка с помощью сил древнего зла. Этот устаревший HTML-элемент полностью останавливает парсинг страницы, отображая весь последующий контент как простой текст. Хотя его не стоит использовать в продакшене, он может помочь в быстрой отладке серверного вывода, но стоит быть внимательным к его взаимодействию с различными HTML-санитайзерами. <a... <a href="https://t.me/front_end_dev/9635" target="_blank" style="color: Xcc;">продолжение →</a></div> <!-- Компактная статистика (только просмотры, реакции, ERR) --> <div class="post-stats-compact"> <div class="post-stats-left"> <div class="post-stat-item"> <svg width="14" height="14" viewBox="0 0 24 24" fill="#666"> <path d="M12 4.5C7 4.5 2.73 7.61 1 12c1.73 4.39 6 7.5 11 7.5s9.27-3.11 11-7.5c-1.73-4.39-6-7.5-11-7.5zM12 17c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5-2.24 5-5 5zm0-8c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3z"/> </svg> <span class="post-stat-number">3.2K</span> </div> <div class="post-stat-item post-stat-reactions" onclick="postShowReactions(6)" title="Нажмите, чтобы посмотреть все реакции"> <svg width="14" height="14" viewBox="0 0 24 24" fill="#666"> <path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/> </svg> <span class="post-stat-number">15</span> <span class="post-stat-hint">👈</span> </div> <div class="post-stat-item"> <svg width="14" height="14" viewBox="0 0 24 24" fill="#666"> <path d="M16 6l2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z"/> </svg> <span class="post-stat-number">0.47% ERR</span> </div> </div> <div class="post-stats-right"> <button class="post-analytics-toggle" onclick="postToggleAnalytics(6)" aria-label="Показать аналитику"> <svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" class="post-analytics-icon"> <path d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6-6-6 1.41-1.41z"/> </svg> </button> </div> </div> <!-- Раскрывающийся блок аналитики --> <div class="post-analytics-expand" id="post-analytics-6"> <div class="post-analytics-header"> <h4>📊 Показатели за 233 часа</h4> </div> <div class="post-analytics-main-grid"> <!-- Левый блок: Основные метрики --> <div class="post-analytics-metrics"> <div class="post-metric-category"> <h5>📈 Охват и вовлеченность</h5> <div class="post-metric-group"> <div class="post-metric-item"> <div class="post-metric-header"> <span class="post-metric-label">Охват</span> <span class="post-metric-value">11.6%</span> </div> <div class="post-metric-progress"> <div class="post-metric-bar" style="width: 11.6%; background: linear-gradient(90deg, #3498db, #2980b9);"></div> </div> </div> <div class="post-metric-item"> <div class="post-metric-header"> <span class="post-metric-label">ERR</span> <span class="post-metric-value">0.47%</span> </div> <div class="post-metric-progress"> <div class="post-metric-bar" style="width: 9.4%; background: linear-gradient(90deg, #2ecc71, #27ae60);"></div> </div> </div> <div class="post-metric-item"> <div class="post-metric-header"> <span class="post-metric-label">Соотношение</span> <span class="post-metric-value">1:214</span> </div> <div class="post-metric-progress"> <div class="post-metric-bar" style="width: -328%; background: linear-gradient(90deg, #e74c3c, #c0392b);"></div> </div> </div> </div> </div> <div class="post-metric-category"> <h5>⚡ Скорость роста</h5> <div class="post-metric-group"> <div class="post-metric-item"> <div class="post-metric-header"> <span class="post-metric-label">Просмотров/час</span> <span class="post-metric-value">14</span> </div> <div class="post-speed-indicator"> <div class="post-speed-dots post-speed-low"> <span class="post-speed-dot active"></span> <span class="post-speed-dot "></span> <span class="post-speed-dot "></span> </div> </div> </div> <div class="post-metric-item"> <div class="post-metric-header"> <span class="post-metric-label">Реакций/час</span> <span class="post-metric-value">0.1</span> </div> <div class="post-speed-indicator"> <div class="post-speed-dots post-speed-low"> <span class="post-speed-dot active"></span> <span class="post-speed-dot "></span> <span class="post-speed-dot "></span> </div> </div> </div> </div> </div> </div> <!-- Правый блок: Графики и время --> <div class="post-analytics-charts"> <div class="post-time-info"> <div class="post-time-item"> <span class="post-time-label">📅 Опубликовано:</span> <span class="post-time-value">17.01.2026 в 12:50</span> </div> <div class="post-time-item"> <span class="post-time-label">⏱️ Прошло времени:</span> <span class="post-time-value">9 дней назад</span> </div> </div> <div class="post-charts-container"> <!-- График просмотров --> <div class="post-chart-wrapper"> <div class="post-chart-title"> <span class="post-chart-icon">👁️</span> <span class="post-chart-name">Просмотры</span> <span class="post-chart-total">3.2K</span> </div> <div class="post-chart-visual"> <div class="post-chart-bars"> <div class="post-chart-bar" style="height: 1.4%; animation-delay: 0.1s;"> <div class="post-chart-bar-fill" style="height: 1.4%;"></div> </div> <div class="post-chart-bar" style="height: 2.8%; animation-delay: 0.2s;"> <div class="post-chart-bar-fill" style="height: 2.8%;"></div> </div> <div class="post-chart-bar" style="height: 4.2%; animation-delay: 0.3s;"> <div class="post-chart-bar-fill" style="height: 4.2%;"></div> </div> <div class="post-chart-bar" style="height: 5.6%; animation-delay: 0.4s;"> <div class="post-chart-bar-fill" style="height: 5.6%;"></div> </div> <div class="post-chart-bar" style="height: 7%; animation-delay: 0.5s;"> <div class="post-chart-bar-fill" style="height: 7%;"></div> </div> </div> <div class="post-chart-scale"> <span>0ч</span> <span>117ч</span> <span>233ч</span> </div> </div> <div class="post-chart-footer">14 в час</div> </div> <!-- График реакций --> <div class="post-chart-wrapper"> <div class="post-chart-title"> <span class="post-chart-icon">❤️</span> <span class="post-chart-name">Реакции</span> <span class="post-chart-total">15</span> </div> <div class="post-chart-visual"> <div class="post-chart-bars"> <div class="post-chart-bar" style="height: 0.2%; animation-delay: 0.1s;"> <div class="post-chart-bar-fill" style="height: 0.2%; background: linear-gradient(to top, #e74c3c, #ff7675);"></div> </div> <div class="post-chart-bar" style="height: 0.4%; animation-delay: 0.2s;"> <div class="post-chart-bar-fill" style="height: 0.4%; background: linear-gradient(to top, #e74c3c, #ff7675);"></div> </div> <div class="post-chart-bar" style="height: 0.6%; animation-delay: 0.3s;"> <div class="post-chart-bar-fill" style="height: 0.6%; background: linear-gradient(to top, #e74c3c, #ff7675);"></div> </div> <div class="post-chart-bar" style="height: 0.8%; animation-delay: 0.4s;"> <div class="post-chart-bar-fill" style="height: 0.8%; background: linear-gradient(to top, #e74c3c, #ff7675);"></div> </div> <div class="post-chart-bar" style="height: 1%; animation-delay: 0.5s;"> <div class="post-chart-bar-fill" style="height: 1%; background: linear-gradient(to top, #e74c3c, #ff7675);"></div> </div> </div> <div class="post-chart-scale"> <span>0ч</span> <span>117ч</span> <span>233ч</span> </div> </div> <div class="post-chart-footer">0.1 в час</div> </div> </div> </div> </div> </div> </div> </div> </div> <!-- Модальное окно реакций --> <div id="post-reactions-modal" class="post-reactions-modal"> <div class="post-reactions-modal-content"> <div class="post-reactions-header"> <h3>Реакции</h3> <button class="post-reactions-close" onclick="postCloseReactions()"> <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor"> <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/> </svg> </button> </div> <div class="post-reactions-grid" id="post-reactions-list"> <!-- Реакции будут добавляться здесь --> </div> </div> </div> <style> .post-news-section { max-width: 100%; margin: 0 auto; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; } .post-news-card { position: relative; background: var(--surface); border-radius: var(--radius-lg); padding: 20px; margin-bottom: 20px; box-shadow: var(--shadow); border: 1px solid var(--border); } /* КОМПАКТНАЯ СТАТИСТИКА - ОДНА ЛИНИЯ */ .post-stats-compact { display: flex; justify-content: space-between; align-items: center; padding: 8px 0; margin: 12px 0; border-top: 1px solid #f0f0f0; border-bottom: 1px solid #f0f0f0; min-height: 32px; } .post-stats-left { display: flex; align-items: center; gap: 12px; flex-wrap: nowrap; overflow-x: auto; padding: 2px 0; -webkit-overflow-scrolling: touch; scrollbar-width: none; } .post-stats-left::-webkit-scrollbar { display: none; } .post-stat-item { display: flex; align-items: center; gap: 4px; font-size: 12px; color: #333; padding: 4px 6px; border-radius: 4px; transition: all 0.2s ease; flex-shrink: 0; white-space: nowrap; } .post-stat-item:hover { background: #f8f9fa; } .post-stat-reactions { cursor: pointer; background: #fff5f5; border: 1px solid #ffebee; } .post-stat-reactions:hover { background: #ffebee; color: #0088cc; transform: translateY(-1px); box-shadow: 0 1px 2px rgba(0,0,0,0.1); } .post-stat-hint { font-size: 10px; color: #ff6b6b; margin-left: 2px; opacity: 0.7; } .post-stat-number { font-weight: 600; font-size: 12px; } .post-stats-right { flex-shrink: 0; margin-left: 8px; } .post-analytics-toggle { display: flex; align-items: center; justify-content: center; background: #f1ebeb; border: 1px solid #838383; border-radius: 4px; padding: 4px 8px; font-size: 12px; color: #666; cursor: pointer; transition: all 0.2s ease; width: 28px; height: 28px; min-width: 28px; } .post-analytics-toggle:hover { background: #e9ecef; color: #0088cc; border-color: #0088cc; } .post-analytics-toggle.active .post-analytics-icon { transform: rotate(180deg); color: black; } .post-analytics-icon { width: 12px; height: 12px; transition: transform 0.3s ease; } /* РАСКРЫВАЮЩИЙСЯ БЛОК АНАЛИТИКИ */ .post-analytics-expand { display: none; background: #f8f9fa; border-radius: 8px; padding: 12px; margin-top: 10px; border: 1px solid #e9ecef; animation: postAnalyticsExpand 0.3s ease; } .post-analytics-expand.show { display: block; } @keyframes postAnalyticsExpand { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: translateY(0); } } .post-analytics-header { margin-bottom: 12px; padding-bottom: 8px; border-bottom: 1px solid #e9ecef; } .post-analytics-header h4 { margin: 0; font-size: 14px; font-weight: 600; color: #2d3436; } /* ОСНОВНАЯ СЕТКА АНАЛИТИКИ */ .post-analytics-main-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } @media (max-width: 768px) { .post-analytics-main-grid { grid-template-columns: 1fr; gap: 10px; } } /* БЛОК МЕТРИК */ .post-analytics-metrics { display: flex; flex-direction: column; gap: 12px; } .post-metric-category { background: white; border-radius: 6px; padding: 10px; border: 1px solid #e9ecef; } .post-metric-category h5 { margin: 0 0 8px 0; font-size: 13px; font-weight: 600; color: #2d3436; display: flex; align-items: center; gap: 4px; } .post-metric-group { display: flex; flex-direction: column; gap: 8px; } .post-metric-item { display: flex; flex-direction: column; gap: 4px; } .post-metric-header { display: flex; justify-content: space-between; align-items: center; } .post-metric-label { font-size: 12px; color: #666; font-weight: 500; } .post-metric-value { font-size: 13px; font-weight: 600; color: #2d3436; } .post-metric-progress { height: 6px; background: #f0f0f0; border-radius: 3px; overflow: hidden; } .post-metric-bar { height: 100%; border-radius: 3px; transition: width 0.5s ease; } /* ИНДИКАТОР СКОРОСТИ */ .post-speed-indicator { margin-top: 2px; } .post-speed-dots { display: flex; gap: 3px; } .post-speed-dot { width: 6px; height: 6px; border-radius: 50%; background: #e0e0e0; transition: all 0.3s ease; } .post-speed-dot.active { transform: scale(1.2); } .post-speed-low .post-speed-dot:nth-child(1).active { background: #ff6b6b; } .post-speed-medium .post-speed-dot:nth-child(1).active, .post-speed-medium .post-speed-dot:nth-child(2).active { background: #feca57; } .post-speed-high .post-speed-dot.active { background: #1dd1a1; } /* БЛОК ГРАФИКОВ И ВРЕМЕНИ */ .post-analytics-charts { display: flex; flex-direction: column; gap: 12px; } .post-time-info { background: white; border-radius: 6px; padding: 10px; border: 1px solid #e9ecef; } .post-time-item { display: flex; justify-content: space-between; align-items: center; padding: 4px 0; border-bottom: 1px solid #f8f9fa; } .post-time-item:last-child { border-bottom: none; } .post-time-label { font-size: 12px; color: #666; } .post-time-value { font-size: 12px; font-weight: 600; color: #2d3436; } /* ГРАФИКИ */ .post-charts-container { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; } @media (max-width: 480px) { .post-charts-container { grid-template-columns: 1fr; } } .post-chart-wrapper { background: white; border-radius: 6px; padding: 8px; border: 1px solid #e9ecef; } .post-chart-title { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; } .post-chart-icon { font-size: 16px; } .post-chart-name { font-size: 12px; font-weight: 600; color: #2d3436; flex: 1; margin-left: 6px; } .post-chart-total { font-size: 13px; font-weight: 700; color: #2d3436; } .post-chart-visual { position: relative; height: 80px; margin: 6px 0; } .post-chart-bars { display: flex; align-items: flex-end; justify-content: space-around; height: 50px; padding: 0 8px; } .post-chart-bar { width: 10px; height: 100%; position: relative; animation: chartBarGrow 0.5s ease-out; } @keyframes chartBarGrow { from { height: 0%; } to { height: var(--bar-height); } } .post-chart-bar-fill { width: 100%; border-radius: 4px 4px 0 0; background: linear-gradient(to top, #3498db, #2980b9); position: absolute; bottom: 0; transition: height 0.3s ease; } .post-chart-scale { display: flex; justify-content: space-between; padding: 0 8px; font-size: 9px; color: #888; margin-top: 6px; } .post-chart-footer { text-align: center; font-size: 10px; color: #666; margin-top: 4px; } /* ОСТАЛЬНЫЕ СТИЛИ */ .post-news-header { display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 12px; } .post-header-left { display: flex; align-items: flex-start; gap: 8px; flex: 1; } .post-avatar { width: 36px; height: 36px; border-radius: 50%; object-fit: cover; flex-shrink: 0; } .post-news-info { flex: 1; } .post-news-info h5 { margin: 0 0 2px 0; font-size: 14px; color: #1a1a1a; font-weight: 600; } .post-date { font-size: 12px; color: #666; } .post-header-right { position: relative; flex-shrink: 0; } .post-menu { position: relative; } .post-menu-btn { background: none; border: none; width: 28px; height: 28px; border-radius: 4px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #666; transition: all 0.2s ease; padding: 0; } .post-menu-btn:hover { background: #f5f5f5; color: #0088cc; } .post-dropdown-menu { position: absolute; top: 100%; right: 0; background: white; border-radius: 6px; box-shadow: 0 4px 12px rgba(0,0,0,0.1); padding: 6px; min-width: 160px; z-index: 1000; display: none; border: 1px solid #e0e0e0; } .post-dropdown-menu.show { display: block; animation: postFadeIn 0.2s ease; } .post-menu-item { display: flex; align-items: center; gap: 6px; padding: 6px 8px; border-radius: 4px; border: none; background: none; width: 100%; text-align: left; cursor: pointer; font-size: 12px; color: #333; transition: background 0.2s ease; font-weight: 500; } .post-menu-item:hover { background: #f8f9fa; } .post-menu-item svg { width: 12px; height: 12px; flex-shrink: 0; } .post-social-share { display: flex; gap: 4px; padding: 6px 0 0 0; border-top: 1px solid #f0f0f0; margin-top: 6px; } .post-social-btn { flex: 1; background: none; border: none; padding: 6px; border-radius: 4px; cursor: pointer; transition: background 0.2s ease; display: flex; align-items: center; justify-content: center; } .post-social-btn:hover { background: #f8f9fa; } .post-media-content { margin: 12px 0; } .post-video-container { background: #000; border-radius: 6px; overflow: hidden; } .post-media-element { width: 100%; max-height: 250px; object-fit: cover; } .post-single-image { border-radius: 6px; cursor: pointer; max-height: 250px; object-fit: cover; } .post-carousel { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 6px; scrollbar-width: thin; scrollbar-color: #0088cc #f0f0f0; } .post-carousel::-webkit-scrollbar { height: 4px; } .post-carousel::-webkit-scrollbar-track { background: #f0f0f0; border-radius: 2px; } .post-carousel::-webkit-scrollbar-thumb { background: #0088cc; border-radius: 2px; } .post-carousel-item { position: relative; flex: 0 0 auto; width: 150px; height: 100px; border-radius: 6px; overflow: hidden; cursor: pointer; transition: transform 0.2s ease; } .post-carousel-item:hover { transform: scale(1.05); } .post-carousel-item img { width: 100%; height: 100%; object-fit: cover; } .post-carousel-badge { position: absolute; bottom: 6px; right: 6px; background: rgba(0,0,0,0.7); color: white; padding: 1px 6px; border-radius: 10px; font-size: 10px; font-weight: 600; } .post-news-content { line-height: 1.5; margin: 12px 0; color: #1a1a1a; font-size: 14px; } .post-news-content a { color: #0088cc; text-decoration: none; font-weight: 500; } .post-news-content a:hover { text-decoration: underline; } /* Модальное окно реакций */ .post-reactions-modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 10001; align-items: center; justify-content: center; backdrop-filter: blur(4px); } .post-reactions-modal-content { background: white; border-radius: 12px; width: 90%; max-width: 300px; max-height: 70vh; overflow: hidden; box-shadow: 0 10px 40px rgba(0, 0, 0, 0.3); animation: postModalFadeIn 0.3s ease; } .post-reactions-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid #f0f0f0; } .post-reactions-header h3 { margin: 0; font-size: 16px; font-weight: 600; color: #1a1a1a; } .post-reactions-close { background: none; border: none; width: 28px; height: 28px; border-radius: 6px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #8e8e93; transition: all 0.2s ease; padding: 0; } .post-reactions-close:hover { background: #f8f9fa; color: #ff3b30; } .post-reactions-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(70px, 1fr)); gap: 12px; padding: 16px; max-height: 50vh; overflow-y: auto; } .post-reaction-item { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 12px 6px; border-radius: 8px; background: #f8f9fa; transition: all 0.2s ease; cursor: pointer; border: 1px solid transparent; } .post-reaction-item:hover { background: #e9ecef; transform: translateY(-2px); box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); } .post-reaction-emoji { font-size: 20px; margin-bottom: 6px; line-height: 1; } .post-reaction-count { font-size: 12px; font-weight: 600; color: #0088cc; } .post-reactions-empty { text-align: center; padding: 30px 16px; color: #8e8e93; font-size: 14px; grid-column: 1 / -1; } @keyframes postFadeIn { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } } @keyframes postModalFadeIn { from { opacity: 0; transform: scale(0.9) translateY(-20px); } to { opacity: 1; transform: scale(1) translateY(0); } } /* Адаптивность для очень маленьких экранов */ @media (max-width: 360px) { .post-news-card { padding: 10px; } .post-stats-left { gap: 8px; } .post-stat-item { font-size: 11px; padding: 3px 4px; } .post-analytics-main-grid { gap: 8px; } .post-metric-category, .post-time-info, .post-chart-wrapper { padding: 8px; } } </style> <script> // Данные реакций для всех постов const postReactionsData = [[{"emoji":"\ud83d\udc4d","count":"3"},{"emoji":"\ud83d\udd25","count":"2"}],[{"emoji":"\ud83d\udc4d","count":"7"},{"emoji":"\u2764","count":"2"}],[{"emoji":"\u2764\u200d\ud83d\udd25","count":"5"},{"emoji":"\ud83d\udc4d","count":"1"}],[{"emoji":"\ud83d\udc4d","count":"18"},{"emoji":"\u2764","count":"5"},{"emoji":"\ud83d\udd25","count":"1"}],[{"emoji":"\u2764","count":"5"},{"emoji":"\ud83d\udc4d","count":"4"},{"emoji":"\ud83e\udd71","count":"1"}],[{"emoji":"\ud83d\ude01","count":"11"},{"emoji":"\ud83d\udc4d","count":"5"},{"emoji":"\ud83d\udd25","count":"1"}],[{"emoji":"\ud83d\udc4d","count":"11"},{"emoji":"\ud83c\udf1a","count":"2"},{"emoji":"\ud83d\udc7b","count":"1"},{"emoji":"\ud83c\udf83","count":"1"}]]; // Функции для меню function postToggleMenu(index) { const menu = document.getElementById('post-menu-' + index); const isShowing = menu.classList.contains('show'); // Закрываем все открытые меню document.querySelectorAll('.post-dropdown-menu.show').forEach(openMenu => { if (openMenu !== menu) { openMenu.classList.remove('show'); } }); if (!isShowing) { menu.classList.add('show'); // Закрытие по клику вне меню const closeMenu = (e) => { if (!menu.contains(e.target) && !e.target.closest('.post-menu-btn')) { menu.classList.remove('show'); document.removeEventListener('click', closeMenu); } }; setTimeout(() => { document.addEventListener('click', closeMenu); }, 0); } else { menu.classList.remove('show'); } } // Функции для аналитики function postToggleAnalytics(index) { const analyticsBlock = document.getElementById('post-analytics-' + index); const toggleBtn = analyticsBlock.previousElementSibling.querySelector('.post-analytics-toggle'); const isShowing = analyticsBlock.classList.contains('show'); if (!isShowing) { // Закрываем другие блоки аналитики document.querySelectorAll('.post-analytics-expand.show').forEach(block => { block.classList.remove('show'); }); // Убираем активный класс у всех кнопок document.querySelectorAll('.post-analytics-toggle.active').forEach(btn => { btn.classList.remove('active'); }); analyticsBlock.classList.add('show'); toggleBtn.classList.add('active'); // Запускаем анимацию графиков setTimeout(() => { const bars = analyticsBlock.querySelectorAll('.post-chart-bar'); bars.forEach((bar, i) => { bar.style.animationPlayState = 'running'; }); }, 300); } else { analyticsBlock.classList.remove('show'); toggleBtn.classList.remove('active'); } } function postCopyLink(link) { navigator.clipboard.writeText(link).then(() => { postShowNotification('Ссылка скопирована!'); }).catch(() => { const textArea = document.createElement('textarea'); textArea.value = link; document.body.appendChild(textArea); textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); postShowNotification('Ссылка скопирована!'); }); } function postOpenNews(link) { window.open(link, '_blank'); } function postShareTo(platform, link) { const url = encodeURIComponent(link); let shareUrl = ''; switch (platform) { case 'telegram': shareUrl = `https://t.me/share/url?url=${url}`; break; case 'whatsapp': shareUrl = `https://wa.me/?text=${url}`; break; case 'vk': shareUrl = `https://vk.com/share.php?url=${url}`; break; } if (shareUrl) { window.open(shareUrl, '_blank', 'width=600,height=400'); } } function postShowNotification(message) { const notification = document.createElement('div'); notification.style.cssText = ` position: fixed; top: 20px; right: 20px; background: #0088cc; color: white; padding: 12px 20px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.3); z-index: 10000; font-weight: 500; animation: postFadeIn 0.3s ease; `; notification.textContent = message; document.body.appendChild(notification); setTimeout(() => { if (notification.parentNode) { notification.parentNode.removeChild(notification); } }, 3000); } // Функции для реакций function postShowReactions(postIndex) { if (postReactionsData[postIndex] && postReactionsData[postIndex].length > 0) { showReactionsModal(postReactionsData[postIndex]); } } function showReactionsModal(reactions) { const modal = document.getElementById('post-reactions-modal'); const list = document.getElementById('post-reactions-list'); if (!reactions || reactions.length === 0) { list.innerHTML = '<div class="post-reactions-empty">Реакций нет</div>'; } else { let html = ''; let totalCount = 0; reactions.forEach(reaction => { const count = parseInt(reaction.count) || 0; totalCount += count; html += ` <div class="post-reaction-item"> <div class="post-reaction-emoji">${reaction.emoji}</div> <div class="post-reaction-count">${reaction.count}</div> </div> `; }); const header = document.querySelector('.post-reactions-header h3'); if (header) { header.textContent = `Реакции (${totalCount})`; } list.innerHTML = html; } modal.style.display = 'flex'; document.body.style.overflow = 'hidden'; } function postCloseReactions() { const modal = document.getElementById('post-reactions-modal'); if (modal) { modal.style.display = 'none'; document.body.style.overflow = ''; } } // Функции для карусели изображений function postOpenCarousel(images, startIndex) { const realImages = images.filter(img => img && !img.includes('//telegram.org/img/emoji/') ); if (realImages.length === 0) return; const modal = document.createElement('div'); modal.style.cssText = ` position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.95); z-index: 10000; display: flex; align-items: center; justify-content: center; `; let currentIndex = startIndex; function updateModal() { modal.innerHTML = ` <img src="${realImages[currentIndex]}" style="max-width: 90%; max-height: 90%; object-fit: contain;"> ${realImages.length > 1 ? ` <button onclick="postPrevImage()" style=" position: absolute; left: 20px; top: 50%; transform: translateY(-50%); background: rgba(0,0,0,0.5); color: white; border: none; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; font-size: 24px; ${currentIndex === 0 ? 'opacity: 0.3;' : ''} ">‹</button> <button onclick="postNextImage()" style=" position: absolute; right: 20px; top: 50%; transform: translateY(-50%); background: rgba(0,0,0,0.5); color: white; border: none; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; font-size: 24px; ${currentIndex === realImages.length - 1 ? 'opacity: 0.3;' : ''} ">›</button> <div style="position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); background: rgba(0,0,0,0.5); color: white; padding: 8px 16px; border-radius: 16px; font-size: 14px;"> ${currentIndex + 1} / ${realImages.length} </div> ` : ''} <button onclick="postCloseCarousel()" style=" position: absolute; top: 20px; right: 20px; background: rgba(0,0,0,0.5); color: white; border: none; width: 50px; height: 50px; border-radius: 50%; cursor: pointer; font-size: 24px; ">×</button> `; } window.postPrevImage = function() { if (currentIndex > 0) { currentIndex--; updateModal(); } }; window.postNextImage = function() { if (currentIndex < realImages.length - 1) { currentIndex++; updateModal(); } }; window.postCloseCarousel = function() { document.body.removeChild(modal); }; modal.addEventListener('click', function(e) { if (e.target === modal) postCloseCarousel(); }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape') postCloseCarousel(); if (e.key === 'ArrowLeft') postPrevImage(); if (e.key === 'ArrowRight') postNextImage(); }); updateModal(); document.body.appendChild(modal); } </script> </div> </section> <!-- Секция статистики --> <section class="content-card" id="section-stats" aria-labelledby="stats-title"> <header class="card-header"> <h2 class="card-title" id="stats-title"> <i class="fas fa-chart-line" aria-hidden="true"></i> Статистика </h2> </header> <div style="margin: 16px 0;"> <div class="_look_container_stat"> <!-- ОСНОВНОЙ КОНТЕЙНЕР --> <div class="_look_dashboard"> <!-- ЗАГОЛОВОК --> <div class="_look_header"> <h2><i class="fas fa-chart-line"></i> Статистика канала</h2> <div class="_look_last_update">Обновлено: 27.01.2026 09:00</div> </div> <div class="ultralight-stats"> <style> .ultralight-stats { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #2c3e50; line-height: 1.4; } .stats-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 12px; } .stat-item { background: #f8f9fa; border: 1px solid #e0e0e0; border-radius: 8px; padding: 16px; transition: all 0.2s; } .stat-item:hover { border-color: #3498db; background: #fff; } .stat-main { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 8px; } .stat-value { font-size: 24px; font-weight: 700; color: #2c3e50; } .stat-label { font-size: 14px; color: #7f8c8d; font-weight: 500; display: flex; align-items: center; gap: 6px; } .stat-label i { font-size: 16px; } .stat-details { font-size: 13px; color: #5a6c7d; display: flex; flex-wrap: wrap; gap: 12px; } .detail-item { display: flex; align-items: center; gap: 4px; } .change { font-weight: 600; } .change.positive { color: #27ae60; } .change.negative { color: #e74c3c; } .change.neutral { color: #7f8c8d; } @media (max-width: 480px) { .stats-grid { grid-template-columns: 1fr; } .stat-value { font-size: 20px; } .stat-details { flex-direction: column; gap: 6px; } } </style> <div class="stats-grid"> <!-- Переходы --> <div class="stat-item"> <div class="stat-main"> <div class="stat-value"> 4 </div> <div class="stat-label"> <i class="fas fa-mouse-pointer" style="color: #3498db;"></i> Переходы </div> </div> <div class="stat-details"> <div class="detail-item"> <span>Сегодня:</span> <span class="change">1</span> </div> <div class="detail-item"> <span>За неделю:</span> <span class="change">4</span> </div> </div> </div> <!-- Просмотры --> <div class="stat-item"> <div class="stat-main"> <div class="stat-value"> 7 </div> <div class="stat-label"> <i class="fas fa-eye" style="color: #9b59b6;"></i> Просмотры </div> </div> <div class="stat-details"> <div class="detail-item"> <span>За неделю:</span> <span class="change">7</span> </div> </div> </div> <!-- Подписчики --> <div class="stat-item"> <div class="stat-main"> <div class="stat-value"> 27.6K </div> <div class="stat-label"> <i class="fas fa-users" style="color: #2ecc71;"></i> Подписчики </div> </div> <div class="stat-details"> <div class="detail-item"> <span>Общий рост:</span> <span class="change negative"> 558 </span> </div> </div> </div> <!-- Публикации --> <div class="stat-item"> <div class="stat-main"> <div class="stat-value"> 9.6K </div> <div class="stat-label"> <i class="fas fa-newspaper" style="color: #e67e22;"></i> Публикации </div> </div> <div class="stat-details"> <div class="detail-item"> <span>Общий рост:</span> <span class="change positive"> +83 </span> </div> </div> </div> </div> </div> <!-- ТАБЫ ДЛЯ ПЕРЕКЛЮЧЕНИЯ СТАТИСТИКИ --> <div class="_look_tabs_container"> <div class="_look_tabs_nav"> <button class="_look_tab_btn active" data-tab="visits" style="--tab-color: #3b82f6; --tab-bg: rgba(59, 130, 246, 0.1);"> <i class="fas fa-chart-line"></i> <span>СмотХоды</span> </button> <button class="_look_tab_btn " data-tab="subscribers" style="--tab-color: #10b981; --tab-bg: rgba(16, 185, 129, 0.1);"> <i class="fas fa-users"></i> <span>Подписчики</span> </button> <button class="_look_tab_btn" data-tab="posts" style="--tab-color: #a855f7; --tab-bg: rgba(168, 85, 247, 0.1);"> <i class="fas fa-newspaper"></i> <span>Публикации</span> </button> </div> <div class="_look_tabs_content"> <!-- ВКЛАДКА СМОТХОДОВ --> <div class="_look_tab_pane active" id="visits_tab"> <div class="_look_tab_header"> <h3><i class="fas fa-chart-line"></i> Посещаемость за неделю</h3> <div class="_look_view_toggle"> <button class="_look_view_btn active" data-view="chart"> <i class="fas fa-chart-line"></i> График </button> <button class="_look_view_btn" data-view="numbers"> <i class="fas fa-list-ol"></i> Числа </button> </div> </div> <div class="_look_tab_body"> <!-- БЛОК С ГРАФИКОМ --> <div class="_look_view_block active" data-view="chart"> <div class="_look_chart_wrapper"> <canvas id="visitsChart"></canvas> </div> <div class="_look_chart_legend"> <div class="_look_legend_item"> <span class="_look_legend_dot" style="background: #3b82f6;"></span> <span>Переходы</span> <strong>4</strong> </div> <div class="_look_legend_item"> <span class="_look_legend_dot" style="background: #8b5cf6;"></span> <span>Просмотры</span> <strong>7</strong> </div> <div class="_look_legend_item"> <span class="_look_legend_dot" style="background: #10b981;"></span> <span>CTR</span> <strong>57.1%</strong> </div> </div> </div> <!-- БЛОК С ЧИСЛАМИ --> <div class="_look_view_block" data-view="numbers"> <div class="_look_numbers_grid"> <div class="_look_number_card "> <div class="_look_number_header"> <span class="_look_number_day">Ср</span> <span class="_look_number_date">Wednesday</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #3b82f6"> 2 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #8b5cf6"> 2 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value _look_ctr_high"> 100% </span> </div> </div> </div> <div class="_look_number_card "> <div class="_look_number_header"> <span class="_look_number_day">Чт</span> <span class="_look_number_date">Thursday</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #9ca3af"> 0 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #8b5cf6"> 1 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value "> 0% </span> </div> </div> </div> <div class="_look_number_card "> <div class="_look_number_header"> <span class="_look_number_day">Пт</span> <span class="_look_number_date">Friday</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #3b82f6"> 1 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #8b5cf6"> 1 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value _look_ctr_high"> 100% </span> </div> </div> </div> <div class="_look_number_card "> <div class="_look_number_header"> <span class="_look_number_day">Сб</span> <span class="_look_number_date">Saturday</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #9ca3af"> 0 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #8b5cf6"> 2 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value "> 0% </span> </div> </div> </div> <div class="_look_number_card "> <div class="_look_number_header"> <span class="_look_number_day">Вс</span> <span class="_look_number_date">Sunday</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #9ca3af"> 0 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #8b5cf6"> 1 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value "> 0% </span> </div> </div> </div> <div class="_look_number_card "> <div class="_look_number_header"> <span class="_look_number_day">Пн</span> <span class="_look_number_date">Monday</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #9ca3af"> 0 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #9ca3af"> 0 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value "> 0% </span> </div> </div> </div> <div class="_look_number_card _look_today"> <div class="_look_number_header"> <span class="_look_number_day">Вт</span> <span class="_look_number_date">Tuesday</span> <span class="_look_today_badge">Сегодня</span> </div> <div class="_look_number_body"> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-external-link-alt"></i> Переходы </span> <span class="_look_number_value" style="color: #3b82f6"> 1 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-eye"></i> Просмотры </span> <span class="_look_number_value" style="color: #9ca3af"> 0 </span> </div> <div class="_look_number_item"> <span class="_look_number_label"> <i class="fas fa-percentage"></i> CTR </span> <span class="_look_number_value _look_ctr_value "> 0% </span> </div> </div> </div> </div> </div> </div> </div> <!-- ВКЛАДКА ПОДПИСЧИКОВ --> <div class="_look_tab_pane" id="subscribers_tab"> <div class="_look_tab_header"> <h3><i class="fas fa-users"></i> Динамика подписчиков</h3> <div class="_look_view_toggle"> <button class="_look_view_btn active" data-view="chart"> <i class="fas fa-chart-line"></i> График </button> <button class="_look_view_btn" data-view="numbers"> <i class="fas fa-list-ol"></i> Числа </button> </div> </div> <div class="_look_tab_body"> <!-- БЛОК С ГРАФИКОМ --> <div class="_look_view_block active" data-view="chart"> <div class="_look_chart_wrapper"> <canvas id="subscribersChart"></canvas> </div> <div class="_look_chart_summary"> <div class="_look_summary_item"> <span class="_look_summary_label">Текущее значение</span> <span class="_look_summary_value">27,624</span> </div> <div class="_look_summary_item"> <span class="_look_summary_label">Изменение</span> <span class="_look_summary_value _look_trend_up"> +129 </span> </div> <div class="_look_summary_item"> <span class="_look_summary_label">Тренд</span> <span class="_look_summary_value"> <i class="fas fa-arrow-up _look_trend_up"></i> Рост </span> </div> </div> </div> <!-- БЛОК С ЧИСЛАМИ --> <div class="_look_view_block" data-view="numbers"> <div class="_look_numbers_list"> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">14.11</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #3b82f6"> 27,624 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">27.11</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #10b981"> 28,182 </span> <span class="_look_number_change _look_change_up"> <i class="fas fa-arrow-up"></i> +558 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">09.12</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #ef4444"> 28,149 </span> <span class="_look_number_change _look_change_down"> <i class="fas fa-arrow-down"></i> -33 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">19.12</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #ef4444"> 28,025 </span> <span class="_look_number_change _look_change_down"> <i class="fas fa-arrow-down"></i> -124 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">08.01</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #ef4444"> 27,935 </span> <span class="_look_number_change _look_change_down"> <i class="fas fa-arrow-down"></i> -90 </span> </div> </div> <div class="_look_number_row _look_today_row"> <div class="_look_number_date_col"> <span class="_look_number_date">24.01</span> <span class="_look_today_badge">Сегодня</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #ef4444"> 27,753 </span> <span class="_look_number_change _look_change_down"> <i class="fas fa-arrow-down"></i> -182 </span> </div> </div> </div> </div> </div> </div> <!-- ВКЛАДКА ПУБЛИКАЦИЙ --> <div class="_look_tab_pane" id="posts_tab"> <div class="_look_tab_header"> <h3><i class="fas fa-newspaper"></i> Активность публикаций</h3> <div class="_look_view_toggle"> <button class="_look_view_btn active" data-view="chart"> <i class="fas fa-chart-bar"></i> График </button> <button class="_look_view_btn" data-view="numbers"> <i class="fas fa-list-ol"></i> Числа </button> </div> </div> <div class="_look_tab_body"> <!-- БЛОК С ГРАФИКОМ --> <div class="_look_view_block active" data-view="chart"> <div class="_look_chart_wrapper"> <canvas id="postsChart"></canvas> </div> <div class="_look_chart_summary"> <div class="_look_summary_item"> <span class="_look_summary_label">Всего публикаций</span> <span class="_look_summary_value">9,641</span> </div> <div class="_look_summary_item"> <span class="_look_summary_label">Изменение</span> <span class="_look_summary_value _look_trend_up"> +83 </span> </div> <div class="_look_summary_item"> <span class="_look_summary_label">Тренд</span> <span class="_look_summary_value"> <i class="fas fa-arrow-up _look_trend_up"></i> Рост </span> </div> </div> </div> <!-- БЛОК С ЧИСЛАМИ --> <div class="_look_view_block" data-view="numbers"> <div class="_look_numbers_list"> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">14.11</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #3b82f6"> 9,558 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">27.11</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #10b981"> 9,570 </span> <span class="_look_number_change _look_change_up"> <i class="fas fa-arrow-up"></i> +12 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">09.12</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #10b981"> 9,586 </span> <span class="_look_number_change _look_change_up"> <i class="fas fa-arrow-up"></i> +16 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">19.12</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #10b981"> 9,600 </span> <span class="_look_number_change _look_change_up"> <i class="fas fa-arrow-up"></i> +14 </span> </div> </div> <div class="_look_number_row "> <div class="_look_number_date_col"> <span class="_look_number_date">08.01</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #10b981"> 9,618 </span> <span class="_look_number_change _look_change_up"> <i class="fas fa-arrow-up"></i> +18 </span> </div> </div> <div class="_look_number_row _look_today_row"> <div class="_look_number_date_col"> <span class="_look_number_date">24.01</span> <span class="_look_today_badge">Сегодня</span> </div> <div class="_look_number_value_col"> <span class="_look_number_main" style="color: #10b981"> 9,641 </span> <span class="_look_number_change _look_change_up"> <i class="fas fa-arrow-up"></i> +23 </span> </div> </div> </div> </div> </div> </div> </div> </div> <!-- ИНФОРМАЦИЯ О ДАННЫХ --> <div class="_look_data_info"> <div class="_look_info_item"> <i class="fas fa-info-circle"></i> <span>Данные обновляются ежедневно в 00:00</span> </div> <div class="_look_info_item"> <i class="fas fa-database"></i> <span>Период: последние 7 дней</span> </div> </div> </div> <!-- SCRIPTS --> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <script> document.addEventListener('DOMContentLoaded', function() { // ПЕРЕКЛЮЧЕНИЕ ТАБОВ const tabButtons = document.querySelectorAll('._look_tab_btn'); const tabPanes = document.querySelectorAll('._look_tab_pane'); tabButtons.forEach(button => { button.addEventListener('click', function() { const tabId = this.dataset.tab; // Убираем активный класс у всех кнопок tabButtons.forEach(btn => btn.classList.remove('active')); // Добавляем активный класс текущей кнопке this.classList.add('active'); // Скрываем все табы tabPanes.forEach(pane => pane.classList.remove('active')); // Показываем выбранный таб document.getElementById(tabId + '_tab').classList.add('active'); // Перерисовываем графики при переключении setTimeout(() => { window.dispatchEvent(new Event('resize')); }, 100); }); }); // ПЕРЕКЛЮЧЕНИЕ ВИДОВ ПРОСМОТРА const viewButtons = document.querySelectorAll('._look_view_btn'); viewButtons.forEach(button => { button.addEventListener('click', function() { const view = this.dataset.view; const tabPane = this.closest('._look_tab_pane'); // Убираем активный класс у всех кнопок в этом табе tabPane.querySelectorAll('._look_view_btn').forEach(btn => { btn.classList.remove('active'); }); // Добавляем активный класс текущей кнопке this.classList.add('active'); // Скрываем все блоки просмотра tabPane.querySelectorAll('._look_view_block').forEach(block => { block.classList.remove('active'); }); // Показываем выбранный блок tabPane.querySelector(`._look_view_block[data-view="${view}"]`).classList.add('active'); }); }); // ЦВЕТА ДЛЯ ГРАФИКОВ const colors = { primary: '#3b82f6', secondary: '#8b5cf6', success: '#10b981', danger: '#ef4444', warning: '#f59e0b', gray: '#9ca3af' }; // ГРАФИК ПОСЕЩАЕМОСТИ (линейный с двумя линиями) const visitsCtx = document.getElementById('visitsChart'); if (visitsCtx) { new Chart(visitsCtx, { type: 'line', data: { labels: ["\u041f\u043d","\u0412\u0442","\u0421\u0440","\u0427\u0442","\u041f\u0442","\u0421\u0431","\u0412\u0441"], datasets: [ { label: 'Переходы', data: [0,1,2,0,1,0,0], borderColor: colors.primary, backgroundColor: 'rgba(59, 130, 246, 0.1)', borderWidth: 3, tension: 0.3, fill: true, pointBackgroundColor: colors.primary, pointBorderColor: '#ffffff', pointBorderWidth: 2, pointRadius: 5 }, { label: 'Просмотры', data: [0,0,2,1,1,2,1], borderColor: colors.secondary, backgroundColor: 'rgba(139, 92, 246, 0.1)', borderWidth: 3, tension: 0.3, fill: true, pointBackgroundColor: colors.secondary, pointBorderColor: '#ffffff', pointBorderWidth: 2, pointRadius: 5 } ] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(context) { let label = context.dataset.label || ''; if (label) { label += ': '; } label += context.parsed.y.toLocaleString('ru-RU'); return label; } } } }, scales: { x: { grid: { display: false } }, y: { beginAtZero: true, ticks: { callback: function(value) { return value.toLocaleString('ru-RU'); } } } } } }); } // ГРАФИК ПОДПИСЧИКОВ const subsCtx = document.getElementById('subscribersChart'); if (subsCtx) { new Chart(subsCtx, { type: 'line', data: { labels: ["14.11","27.11","09.12","19.12","08.01","24.01"], datasets: [{ label: 'Подписчики', data: [27624,28182,28149,28025,27935,27753], borderColor: colors.success, backgroundColor: 'rgba(16, 185, 129, 0.1)', borderWidth: 3, tension: 0.3, fill: true, pointBackgroundColor: ["#3b82f6","#10b981","#ef4444","#ef4444","#ef4444","#ef4444"], pointBorderColor: '#ffffff', pointBorderWidth: 2, pointRadius: 5 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(context) { return 'Подписчики: ' + context.parsed.y.toLocaleString('ru-RU'); } } } }, scales: { x: { grid: { display: false } }, y: { beginAtZero: false, ticks: { callback: function(value) { return value.toLocaleString('ru-RU'); } } } } } }); } // ГРАФИК ПУБЛИКАЦИЙ const postsCtx = document.getElementById('postsChart'); if (postsCtx) { new Chart(postsCtx, { type: 'bar', data: { labels: ["14.11","27.11","09.12","19.12","08.01","24.01"], datasets: [{ label: 'Публикации', data: [9558,9570,9586,9600,9618,9641], backgroundColor: ["#3b82f6","#10b981","#10b981","#10b981","#10b981","#10b981"], borderColor: ["#1d4ed8","#059669","#059669","#059669","#059669","#059669"], borderWidth: 1, borderRadius: 4 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { display: false }, tooltip: { callbacks: { label: function(context) { return 'Публикации: ' + context.parsed.y; } } } }, scales: { x: { grid: { display: false } }, y: { beginAtZero: true, ticks: { precision: 0, callback: function(value) { return value; } } } } } }); } // АДАПТИВНОСТЬ ГРАФИКОВ ПРИ ИЗМЕНЕНИИ РАЗМЕРА let resizeTimer; window.addEventListener('resize', function() { clearTimeout(resizeTimer); resizeTimer = setTimeout(function() { Chart.instances.forEach(chart => { chart.resize(); }); }, 250); }); }); </script> <style> /* БАЗОВЫЕ СТИЛИ */ ._look_dashboard { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; color: #1f2937; line-height: 1.5; max-width: 1200px; margin: 0 auto; } /* ЗАГОЛОВОК */ ._look_header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 18px 25px; border-radius: 12px; margin-bottom: 20px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; box-shadow: 0 4px 20px rgba(102, 126, 234, 0.2); } ._look_header h2 { margin: 0; font-size: 20px; font-weight: 600; display: flex; align-items: center; gap: 10px; } ._look_last_update { font-size: 13px; opacity: 0.9; background: rgba(255, 255, 255, 0.15); padding: 6px 12px; border-radius: 20px; backdrop-filter: blur(10px); } /* КОНТЕЙНЕР ТАБОВ */ ._look_tabs_container { background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 2px 15px rgba(0, 0, 0, 0.08); } /* НАВИГАЦИЯ ТАБОВ - ИКОНКИ РЯДОМ С ТЕКСТОМ */ ._look_tabs_nav { display: flex; background: #f9fafb; border-bottom: 1px solid #e5e7eb; overflow-x: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; -ms-overflow-style: none; } ._look_tabs_nav::-webkit-scrollbar { display: none; } ._look_tab_btn { flex: 1; min-width: 120px; padding: 16px 20px; border: none; background: none; color: #6b7280; font-size: 14px; font-weight: 500; cursor: pointer; display: flex; align-items: center; gap: 10px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); white-space: nowrap; position: relative; border-bottom: 3px solid transparent; } ._look_tab_btn:hover { background: var(--tab-bg, rgba(59, 130, 246, 0.05)); color: var(--tab-color, #3b82f6); } ._look_tab_btn.active { background: white; color: var(--tab-color, #3b82f6); font-weight: 600; border-bottom-color: var(--tab-color, #3b82f6); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); } ._look_tab_btn i { font-size: 18px; transition: transform 0.3s; } ._look_tab_btn.active i { transform: scale(1.1); } ._look_tab_btn span { font-size: 14px; font-weight: 500; } /* СОДЕРЖАНИЕ ТАБОВ */ ._look_tabs_content { padding: 25px; } ._look_tab_pane { display: none; animation: fadeIn 0.3s ease; } ._look_tab_pane.active { display: block; } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } /* ЗАГОЛОВОК ВКЛАДКИ */ ._look_tab_header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 25px; flex-wrap: wrap; gap: 15px; } ._look_tab_header h3 { margin: 0; font-size: 18px; font-weight: 600; color: #1f2937; display: flex; align-items: center; gap: 10px; } ._look_view_toggle { display: flex; background: #f3f4f6; border-radius: 10px; padding: 5px; border: 1px solid #e5e7eb; } ._look_view_btn { padding: 8px 16px; border: none; background: none; color: #6b7280; font-size: 13px; font-weight: 500; cursor: pointer; border-radius: 8px; display: flex; align-items: center; gap: 8px; transition: all 0.2s; white-space: nowrap; } ._look_view_btn:hover { background: rgba(59, 130, 246, 0.1); color: #3b82f6; } ._look_view_btn.active { background: white; color: #3b82f6; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); font-weight: 600; } /* ТЕЛО ВКЛАДКИ */ ._look_tab_body { min-height: 280px; } ._look_view_block { display: none; animation: fadeIn 0.3s ease; } ._look_view_block.active { display: block; } /* КОНТЕЙНЕР ГРАФИКА */ ._look_chart_wrapper { height: 250px; margin-bottom: 25px; position: relative; } /* ЛЕГЕНДА ДЛЯ ГРАФИКА СМОТХОДОВ */ ._look_chart_legend { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; background: #f9fafb; padding: 18px; border-radius: 10px; border: 1px solid #e5e7eb; } ._look_legend_item { display: flex; align-items: center; gap: 12px; font-size: 14px; color: #4b5563; } ._look_legend_dot { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; } ._look_legend_item strong { margin-left: auto; font-size: 16px; color: #1f2937; font-weight: 600; } /* СВОДКА ПОД ГРАФИКОМ */ ._look_chart_summary { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 20px; background: #f9fafb; padding: 20px; border-radius: 10px; border: 1px solid #e5e7eb; } ._look_summary_item { display: flex; flex-direction: column; gap: 6px; } ._look_summary_label { font-size: 13px; color: #6b7280; font-weight: 500; } ._look_summary_value { font-size: 20px; font-weight: 600; color: #1f2937; } ._look_trend_up { color: #10b981; } ._look_trend_down { color: #ef4444; } ._look_trend_flat { color: #6b7280; } /* СЕТКА ЧИСЕЛ */ ._look_numbers_grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 15px; } ._look_number_card { background: white; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; transition: all 0.3s; position: relative; overflow: hidden; } ._look_number_card:hover { transform: translateY(-2px); box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08); } ._look_number_card._look_today { border-color: #3b82f6; background: linear-gradient(135deg, #f8fafc 0%, #f1f5f9 100%); border-width: 2px; } ._look_number_header { display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 15px; padding-bottom: 12px; border-bottom: 1px solid #f1f5f9; } ._look_number_day { font-weight: 700; color: #1f2937; font-size: 16px; } ._look_number_date { font-size: 13px; color: #6b7280; margin-top: 2px; } ._look_today_badge { background: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%); color: white; font-size: 11px; font-weight: 600; padding: 4px 10px; border-radius: 12px; display: inline-block; } ._look_number_body { display: flex; flex-direction: column; gap: 10px; } ._look_number_item { display: flex; justify-content: space-between; align-items: center; } ._look_number_label { font-size: 13px; color: #6b7280; display: flex; align-items: center; gap: 8px; font-weight: 500; } ._look_number_label i { font-size: 12px; opacity: 0.7; } ._look_number_value { font-size: 15px; font-weight: 600; } ._look_ctr_value { color: #10b981; } ._look_ctr_high { color: #10b981; background: rgba(16, 185, 129, 0.1); padding: 2px 8px; border-radius: 6px; } ._look_ctr_low { color: #ef4444; background: rgba(239, 68, 68, 0.1); padding: 2px 8px; border-radius: 6px; } /* СПИСОК ЧИСЕЛ */ ._look_numbers_list { display: flex; flex-direction: column; gap: 10px; } ._look_number_row { display: flex; justify-content: space-between; align-items: center; padding: 16px 20px; background: #f9fafb; border-radius: 10px; border: 1px solid #e5e7eb; transition: all 0.3s; } ._look_number_row:hover { background: #f3f4f6; transform: translateX(5px); } ._look_number_row._look_today_row { background: linear-gradient(135deg, #f0f9ff 0%, #e0f2fe 100%); border-color: #3b82f6; border-width: 2px; } ._look_number_date_col { display: flex; align-items: center; gap: 15px; } ._look_number_date { font-weight: 600; color: #1f2937; min-width: 70px; font-size: 15px; } ._look_number_value_col { display: flex; align-items: center; gap: 20px; } ._look_number_main { font-size: 20px; font-weight: 700; min-width: 100px; text-align: right; letter-spacing: -0.5px; } ._look_number_change { font-size: 14px; font-weight: 600; padding: 6px 12px; border-radius: 20px; min-width: 80px; text-align: center; display: flex; align-items: center; justify-content: center; gap: 5px; } ._look_change_up { background: rgba(16, 185, 129, 0.15); color: #10b981; } ._look_change_down { background: rgba(239, 68, 68, 0.15); color: #ef4444; } /* ИНФОРМАЦИЯ О ДАННЫХ */ ._look_data_info { display: flex; flex-wrap: wrap; gap: 20px; margin-top: 25px; padding: 18px; background: #f9fafb; border-radius: 10px; border: 1px solid #e5e7eb; font-size: 13px; color: #6b7280; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.03); } ._look_info_item { display: flex; align-items: center; gap: 10px; } ._look_info_item i { color: #3b82f6; font-size: 14px; } /* МОБИЛЬНАЯ АДАПТАЦИЯ */ @media (max-width: 768px) { ._look_header { padding: 15px; flex-direction: column; align-items: flex-start; gap: 10px; } ._look_header h2 { font-size: 18px; } ._look_last_update { font-size: 12px; align-self: flex-end; } ._look_tabs_nav { flex-wrap: nowrap; } ._look_tab_btn { min-width: 110px; padding: 14px 12px; flex-direction: row; justify-content: center; } ._look_tab_btn i { font-size: 16px; margin-bottom: 0; } ._look_tab_btn span { font-size: 13px; } ._look_tabs_content { padding: 20px; } ._look_tab_header { flex-direction: column; align-items: flex-start; } ._look_view_toggle { width: 100%; justify-content: center; } ._look_view_btn { flex: 1; justify-content: center; padding: 8px 12px; font-size: 12px; } ._look_chart_wrapper { height: 220px; } ._look_chart_legend { grid-template-columns: 1fr; gap: 12px; } ._look_numbers_grid { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); } ._look_number_card { padding: 15px; } ._look_number_main { font-size: 18px; min-width: 85px; } ._look_number_change { font-size: 12px; min-width: 70px; padding: 5px 10px; } } @media (max-width: 480px) { ._look_tab_btn { min-width: 100px; padding: 12px 10px; font-size: 13px; } ._look_tab_btn i { font-size: 15px; } ._look_tab_btn span { font-size: 12px; } ._look_chart_wrapper { height: 200px; } ._look_chart_summary { grid-template-columns: 1fr; } ._look_numbers_grid { grid-template-columns: 1fr; } ._look_number_row { flex-direction: column; align-items: flex-start; gap: 10px; padding: 15px; } ._look_number_value_col { width: 100%; justify-content: space-between; } ._look_number_main { font-size: 18px; min-width: auto; } ._look_data_info { flex-direction: column; gap: 12px; padding: 15px; } } /* АНИМАЦИИ */ ._look_number_card { animation: cardAppear 0.4s ease forwards; opacity: 0; transform: translateY(10px); } @keyframes cardAppear { to { opacity: 1; transform: translateY(0); } } /* Задержки для анимации карточек */ ._look_number_card:nth-child(1) { animation-delay: 0.1s; } ._look_number_card:nth-child(2) { animation-delay: 0.2s; } ._look_number_card:nth-child(3) { animation-delay: 0.3s; } ._look_number_card:nth-child(4) { animation-delay: 0.4s; } ._look_number_card:nth-child(5) { animation-delay: 0.5s; } ._look_number_card:nth-child(6) { animation-delay: 0.6s; } ._look_number_card:nth-child(7) { animation-delay: 0.7s; } </style> </div> </div> </section> <!-- Похожие каналы --> <section class="content-card" id="section-similar" aria-labelledby="similar-title"> <header class="card-header"> <h2 class="card-title" id="similar-title"> <i class="fas fa-users" aria-hidden="true"></i> Похожие каналы </h2> </header> <!--noindex--> <div class="reklama-display-section"> <div class="reklama-display-grid"> <a href="https://tg-search.ru/look/43480" class="reklama-display-item reklama-dark" style="--rekl-bg: #1f2937; --rekl-border: #374151; --rekl-title: #f9fafb; --rekl-desc: #d1d5db;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/1/e548d4c.jpg" alt="Слив альтушек" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">Слив альтушек</div> <div class="reklama-display-desc">&lt;br&gt;&lt;br&gt; &lt;br&gt; 🔥 СЛИВ АЛЬТУШЕК - Получи доступ к приватным данным! 🔥&lt;br&gt; &lt;br&gt;&lt;br&gt; &lt;br&gt; 💎 ЧТО ТЕБЯ ЖДЕТ:&lt;br&gt; &lt;br&gt;</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>5</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>1</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>399</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>88</span> </div> </div> </a> <a href="https://tg-search.ru/look/43483" class="reklama-display-item reklama-rose" style="--rekl-bg: #fce7f3; --rekl-border: #f472b6; --rekl-title: #831843; --rekl-desc: #be185d;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/avatar/logo_95520.jpg" alt="Слив шк тг вписка телеграмм сливы альтушек" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">Слив шк тг вписка телеграмм сливы альтушек</div> <div class="reklama-display-desc">Слив тг&lt;br&gt;Сливы шк тг&lt;br&gt;Сливы вписка телеграмм&lt;br&gt;Сливы со вписок&lt;br&gt;Слив блогеров&lt;br&gt;Сливы домашки&lt;br&gt;Сливы блогерш&lt;b</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>394</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>137</span> </div> </div> </a> </div> </div> <style> /* Минимальные стили для рекламных блоков */ .reklama-display-grid { display: flex; flex-wrap: wrap; gap: 15px; justify-content: space-between; } .reklama-display-item { flex: 0 1 calc(50% - 7.5px); /* 50% минус половина gap для 2 колонок */ min-width: 350px; /* Минимальная ширина */ max-width: 100%; background: var(--rekl-bg, #fff); border: 1px solid var(--rekl-border, #ddd); border-radius: 10px; padding: 15px; position: relative; text-decoration: none; display: block; color: inherit; box-sizing: border-box; } /* Когда ширина контейнера меньше 725px (350px*2 + 15px), показываем по 1 элементу */ @media (max-width: 724px) { .reklama-display-item { flex: 1 1 100%; /* Полная ширина */ min-width: auto; /* Сбрасываем минимальную ширину */ } } .reklama-display-item::before { content: 'ТОП'; position: absolute; top: -8px; right: 10px; background: #ff9800; color: white; padding: 2px 8px; border-radius: 10px; font-size: 10px; font-weight: bold; } .reklama-display-content { display: flex; gap: 12px; align-items: center; } .reklama-display-avatar { width: 100px; height: 100px; border-radius: 50%; overflow: hidden; flex-shrink: 0; border: 2px solid var(--rekl-border, #ddd); } .reklama-display-avatar img { width: 100%; height: 100%; object-fit: cover; } .reklama-display-text { flex: 1; min-width: 0; } .reklama-display-title { font-size: 17px; text-align: left; font-weight: 600; margin-bottom: 5px; color: var(--rekl-title, #333); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: break-word; hyphens: auto; } .reklama-display-desc { font-size: 14px; color: var(--rekl-desc, #666); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.4; text-align: left; } .reklama-display-section { margin: 10px 0; width: 100%; /* Убедитесь, что секция занимает всю ширину */ } /* Стили для статистики */ .reklama-display-stats { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 15px; font-size: 12px; color: #666; justify-content: flex-start; align-items: center; } .reklama-stat-item { display: flex; align-items: center; gap: 5px; white-space: nowrap; background-color: #ffffff; padding: 2px 6px; border-radius: 7px; border: 1px solid #4444; } .reklama-stat-item i { font-size: 14px; } /* Адаптивность для маленьких экранов */ @media (max-width: 400px) { .reklama-display-stats { gap: 10px; } .reklama-stat-item { font-size: 11px; } .reklama-stat-item i { font-size: 12px; } /* Скрываем элементы на мобильных при необходимости */ .hide-on-mobile { display: none !important; } } </style> <!--/noindex--> <div class="similar-channels-section"> <div class="similar-channels-grid" role="list" aria-label="Список похожих каналов"> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/599" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Physics.Math.Code" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_24542.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Physics.Math.Code</h3> <div class="similar-channel-desc" itemprop="description">Программирование, математика</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">148 855</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">14 896</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>7</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/18095" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Трактор на DOU" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_22352.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Трактор на DOU</h3> <div class="similar-channel-desc" itemprop="description">Все по теме релокации для программистов</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">4 894</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">1 493</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>8</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/4858" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="PYTHONOMANIA" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_57650.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">PYTHONOMANIA</h3> <div class="similar-channel-desc" itemprop="description">Готовы ли вы повысить свои навыки программирования и погрузиться в мир Python?Тогда присоединяйтесь к нашему Telegram...</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">412</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">916</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>5</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/1910" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Речевые технологии" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_30422.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Речевые технологии</h3> <div class="similar-channel-desc" itemprop="description">Канал о речевых технологиях. Работа с искусственным интеллектом, анализ человеческой речи и естественного языка с при...</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">40</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">41</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>10</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/17110" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Говнокод" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_27034.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Говнокод</h3> <div class="similar-channel-desc" itemprop="description">Канал о самых забавных подборках говнокода, фейлов и непонятных кодерских мемов.</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">16 435</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">7 984</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>7</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/15533" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Типичный программист" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_24501.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Типичный программист</h3> <div class="similar-channel-desc" itemprop="description">Всё самое интересное по программированию.</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">81 036</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">14 227</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>7</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/17001" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="TechBooks - книги для программистов" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_24546.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">TechBooks - книги для программистов</h3> <div class="similar-channel-desc" itemprop="description">Книги для программистов</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">8 846</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>6</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/19020" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Python академия" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_41691.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Python академия</h3> <div class="similar-channel-desc" itemprop="description">Python академия. Учи Python быстро и легко. По всем вопросам @evgenycarter</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">7 525</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">3 500</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>6</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/17186" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Программисты, It специалисты |" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_49377.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Программисты, It специалисты |</h3> <div class="similar-channel-desc" itemprop="description">Чат создан для живого общения, по теме программирования👩🏼‍💻 ✅ Вы можете задавать вопросы по теме, и они гарантированн...</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">2 250</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>7</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/15073" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Тильдошная" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_29833.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Тильдошная</h3> <div class="similar-channel-desc" itemprop="description">Неофициальное и независимое комьюнити любителей Тильды</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">12 484</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">1 441</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>7</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/39020" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Авито программы" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_36411.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Авито программы</h3> <div class="similar-channel-desc" itemprop="description">Программы для авито.</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">1 883</span> </div> <div class="similar-stat-item" aria-label="Публикации"> <i class="fas fa-newspaper" aria-hidden="true"></i> <span itemprop="numberOfItems">1 151</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>8</span> </div> </div> </a> </article> <article class="similar-channel-item" role="listitem" itemscope itemtype="https://schema.org/Organization"> <a href="/look/16799" itemprop="url" class="similar-channel-item-link"> <div class="similar-channel-content"> <figure class="similar-channel-avatar"> <img src="/img/telegram-placeholder.png" alt="Python Textbooks" class="lazy" loading="lazy" data-src="/photo_avatar/avatar/logo_24545.jpg" width="100" height="100" itemprop="image"> </figure> <div class="similar-channel-text"> <h3 class="similar-channel-title" itemprop="name">Python Textbooks</h3> <div class="similar-channel-desc" itemprop="description">Крупная база книг по Python.</div> </div> </div> <div class="similar-channel-stats"> <div class="similar-stat-item" aria-label="Подписчики"> <i class="fas fa-users" aria-hidden="true"></i> <span itemprop="memberCount">16 447</span> </div> <div class="similar-stat-item" aria-label="Просмотры"> <i class="fas fa-eye" aria-hidden="true"></i> <span>6</span> </div> </div> </a> </article> </div> </div> </section> <!-- Теги для поиска --> </article> <!-- Боковая панель --> <aside class="sidebar" id="shelf-sidebar" aria-label="Боковая панель навигации"> <nav class="nav-menu" aria-label="Навигация по странице"> <h3 class="nav-title">Навигация</h3> <ul class="nav-list" role="list"> <li class="nav-item" role="listitem"> <a href="#section-posts" class="nav-link" data-section="posts" aria-label="Перейти к публикациям"> <i class="fas fa-newspaper" aria-hidden="true"></i> Публикации <span class="nav-badge" aria-label="Количество публикаций">9641</span> </a> </li> <li class="nav-item" role="listitem"> <a href="#section-stats" class="nav-link active" data-section="stats" aria-label="Перейти к статистике"> <i class="fas fa-chart-line" aria-hidden="true"></i> Статистика </a> </li> <li class="nav-item" role="listitem"> <a href="#section-similar" class="nav-link" data-section="similar" aria-label="Перейти к похожим каналам"> <i class="fas fa-users" aria-hidden="true"></i> Похожие </a> </li> <li class="nav-item" role="listitem"> <button class="nav-link share-btn" onClick="openShareSection()" style="width: 100%; text-align: left; border: none; background: none; font-family: inherit; cursor: pointer;" aria-label="Поделиться каналом"> <i class="fas fa-share-alt" aria-hidden="true"></i> Поделиться </button> </li> </ul> </nav> <!--noindex--> <div class="reklama-display-section"> <div class="reklama-display-grid"> <a href="https://tg-search.ru/look/43482" class="reklama-display-item reklama-mint" style="--rekl-bg: #d1fae5; --rekl-border: #10b981; --rekl-title: #065f46; --rekl-desc: #059669;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/1/fe364e0.jpg" alt="Видео шкодницы 🔥 Сливы шкод тг юных и горячих" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">Видео шкодницы 🔥 Сливы шкод тг юных и горячих</div> <div class="reklama-display-desc">Добро пожаловать в наш Telegram-канал, где собраны самые свежие и горячие видео с шкодницами 2026 года! Здесь ты найдёшь</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>2</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>484</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>170</span> </div> </div> </a> <a href="https://tg-search.ru/look/43483" class="reklama-display-item reklama-rose" style="--rekl-bg: #fce7f3; --rekl-border: #f472b6; --rekl-title: #831843; --rekl-desc: #be185d;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/avatar/logo_95520.jpg" alt="Слив шк тг вписка телеграмм сливы альтушек" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">Слив шк тг вписка телеграмм сливы альтушек</div> <div class="reklama-display-desc">Слив тг&lt;br&gt;Сливы шк тг&lt;br&gt;Сливы вписка телеграмм&lt;br&gt;Сливы со вписок&lt;br&gt;Слив блогеров&lt;br&gt;Сливы домашки&lt;br&gt;Сливы блогерш&lt;b</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>394</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>137</span> </div> </div> </a> </div> </div> <style> /* Минимальные стили для рекламных блоков */ .reklama-display-grid { display: flex; flex-wrap: wrap; gap: 15px; justify-content: space-between; } .reklama-display-item { flex: 0 1 calc(50% - 7.5px); /* 50% минус половина gap для 2 колонок */ min-width: 350px; /* Минимальная ширина */ max-width: 100%; background: var(--rekl-bg, #fff); border: 1px solid var(--rekl-border, #ddd); border-radius: 10px; padding: 15px; position: relative; text-decoration: none; display: block; color: inherit; box-sizing: border-box; } /* Когда ширина контейнера меньше 725px (350px*2 + 15px), показываем по 1 элементу */ @media (max-width: 724px) { .reklama-display-item { flex: 1 1 100%; /* Полная ширина */ min-width: auto; /* Сбрасываем минимальную ширину */ } } .reklama-display-item::before { content: 'ТОП'; position: absolute; top: -8px; right: 10px; background: #ff9800; color: white; padding: 2px 8px; border-radius: 10px; font-size: 10px; font-weight: bold; } .reklama-display-content { display: flex; gap: 12px; align-items: center; } .reklama-display-avatar { width: 100px; height: 100px; border-radius: 50%; overflow: hidden; flex-shrink: 0; border: 2px solid var(--rekl-border, #ddd); } .reklama-display-avatar img { width: 100%; height: 100%; object-fit: cover; } .reklama-display-text { flex: 1; min-width: 0; } .reklama-display-title { font-size: 17px; text-align: left; font-weight: 600; margin-bottom: 5px; color: var(--rekl-title, #333); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: break-word; hyphens: auto; } .reklama-display-desc { font-size: 14px; color: var(--rekl-desc, #666); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.4; text-align: left; } .reklama-display-section { margin: 10px 0; width: 100%; /* Убедитесь, что секция занимает всю ширину */ } /* Стили для статистики */ .reklama-display-stats { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 15px; font-size: 12px; color: #666; justify-content: flex-start; align-items: center; } .reklama-stat-item { display: flex; align-items: center; gap: 5px; white-space: nowrap; background-color: #ffffff; padding: 2px 6px; border-radius: 7px; border: 1px solid #4444; } .reklama-stat-item i { font-size: 14px; } /* Адаптивность для маленьких экранов */ @media (max-width: 400px) { .reklama-display-stats { gap: 10px; } .reklama-stat-item { font-size: 11px; } .reklama-stat-item i { font-size: 12px; } /* Скрываем элементы на мобильных при необходимости */ .hide-on-mobile { display: none !important; } } </style> <div class="reklama-display-section"> <div class="reklama-display-grid"> <a href="https://tg-search.ru/look/43481" class="reklama-display-item reklama-premium" style="--rekl-bg: #667eea; --rekl-border: #5a67d8; --rekl-title: #ffffff; --rekl-desc: #e2e8f0;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/1/102.jpg" alt="👯 Вписка голых студенток 😍 Прямой слив с Telegram без цензуры" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">👯 Вписка голых студенток 😍 Прямой слив с Telegram без цензуры</div> <div class="reklama-display-desc">Эти вечеринки студенток заканчиваются 🔞 сливами, и ты можешь увидеть это первым. Только Telegram-приватки, только настоя</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>1</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>373</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>93</span> </div> </div> </a> <a href="https://tg-search.ru/look/43482" class="reklama-display-item reklama-mint" style="--rekl-bg: #d1fae5; --rekl-border: #10b981; --rekl-title: #065f46; --rekl-desc: #059669;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/1/fe364e0.jpg" alt="Видео шкодницы 🔥 Сливы шкод тг юных и горячих" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">Видео шкодницы 🔥 Сливы шкод тг юных и горячих</div> <div class="reklama-display-desc">Добро пожаловать в наш Telegram-канал, где собраны самые свежие и горячие видео с шкодницами 2026 года! Здесь ты найдёшь</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>2</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>484</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>170</span> </div> </div> </a> </div> </div> <style> /* Минимальные стили для рекламных блоков */ .reklama-display-grid { display: flex; flex-wrap: wrap; gap: 15px; justify-content: space-between; } .reklama-display-item { flex: 0 1 calc(50% - 7.5px); /* 50% минус половина gap для 2 колонок */ min-width: 350px; /* Минимальная ширина */ max-width: 100%; background: var(--rekl-bg, #fff); border: 1px solid var(--rekl-border, #ddd); border-radius: 10px; padding: 15px; position: relative; text-decoration: none; display: block; color: inherit; box-sizing: border-box; } /* Когда ширина контейнера меньше 725px (350px*2 + 15px), показываем по 1 элементу */ @media (max-width: 724px) { .reklama-display-item { flex: 1 1 100%; /* Полная ширина */ min-width: auto; /* Сбрасываем минимальную ширину */ } } .reklama-display-item::before { content: 'ТОП'; position: absolute; top: -8px; right: 10px; background: #ff9800; color: white; padding: 2px 8px; border-radius: 10px; font-size: 10px; font-weight: bold; } .reklama-display-content { display: flex; gap: 12px; align-items: center; } .reklama-display-avatar { width: 100px; height: 100px; border-radius: 50%; overflow: hidden; flex-shrink: 0; border: 2px solid var(--rekl-border, #ddd); } .reklama-display-avatar img { width: 100%; height: 100%; object-fit: cover; } .reklama-display-text { flex: 1; min-width: 0; } .reklama-display-title { font-size: 17px; text-align: left; font-weight: 600; margin-bottom: 5px; color: var(--rekl-title, #333); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: break-word; hyphens: auto; } .reklama-display-desc { font-size: 14px; color: var(--rekl-desc, #666); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.4; text-align: left; } .reklama-display-section { margin: 10px 0; width: 100%; /* Убедитесь, что секция занимает всю ширину */ } /* Стили для статистики */ .reklama-display-stats { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 15px; font-size: 12px; color: #666; justify-content: flex-start; align-items: center; } .reklama-stat-item { display: flex; align-items: center; gap: 5px; white-space: nowrap; background-color: #ffffff; padding: 2px 6px; border-radius: 7px; border: 1px solid #4444; } .reklama-stat-item i { font-size: 14px; } /* Адаптивность для маленьких экранов */ @media (max-width: 400px) { .reklama-display-stats { gap: 10px; } .reklama-stat-item { font-size: 11px; } .reklama-stat-item i { font-size: 12px; } /* Скрываем элементы на мобильных при необходимости */ .hide-on-mobile { display: none !important; } } </style> <div class="reklama-display-section"> <div class="reklama-display-grid"> <a href="https://tg-search.ru/look/43481" class="reklama-display-item reklama-premium" style="--rekl-bg: #667eea; --rekl-border: #5a67d8; --rekl-title: #ffffff; --rekl-desc: #e2e8f0;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/1/102.jpg" alt="👯 Вписка голых студенток 😍 Прямой слив с Telegram без цензуры" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">👯 Вписка голых студенток 😍 Прямой слив с Telegram без цензуры</div> <div class="reklama-display-desc">Эти вечеринки студенток заканчиваются 🔞 сливами, и ты можешь увидеть это первым. Только Telegram-приватки, только настоя</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>1</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>373</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>93</span> </div> </div> </a> <a href="https://tg-search.ru/look/43483" class="reklama-display-item reklama-rose" style="--rekl-bg: #fce7f3; --rekl-border: #f472b6; --rekl-title: #831843; --rekl-desc: #be185d;" target="_blank"> <div class="reklama-display-content"> <div class="reklama-display-avatar"> <img src="/photo_avatar/avatar/logo_95520.jpg" alt="Слив шк тг вписка телеграмм сливы альтушек" onerror="this.src='/img/telegram.png'"> </div> <div class="reklama-display-text"> <div class="reklama-display-title">Слив шк тг вписка телеграмм сливы альтушек</div> <div class="reklama-display-desc">Слив тг&lt;br&gt;Сливы шк тг&lt;br&gt;Сливы вписка телеграмм&lt;br&gt;Сливы со вписок&lt;br&gt;Слив блогеров&lt;br&gt;Сливы домашки&lt;br&gt;Сливы блогерш&lt;b</div> </div> </div> <div class="reklama-display-stats"> <div class="reklama-stat-item"> <i class="fas fa-thumbs-up" style="color: #27ae60;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-thumbs-down" style="color: #e74c3c;"></i> <span>0</span> </div> <div class="reklama-stat-item"> <i class="fas fa-eye" style="color: #9b59b6;"></i> <span>394</span> </div> <div class="reklama-stat-item"> <i class="fas fa-external-link-alt" style="color: #3498db;"></i> <span>137</span> </div> </div> </a> </div> </div> <style> /* Минимальные стили для рекламных блоков */ .reklama-display-grid { display: flex; flex-wrap: wrap; gap: 15px; justify-content: space-between; } .reklama-display-item { flex: 0 1 calc(50% - 7.5px); /* 50% минус половина gap для 2 колонок */ min-width: 350px; /* Минимальная ширина */ max-width: 100%; background: var(--rekl-bg, #fff); border: 1px solid var(--rekl-border, #ddd); border-radius: 10px; padding: 15px; position: relative; text-decoration: none; display: block; color: inherit; box-sizing: border-box; } /* Когда ширина контейнера меньше 725px (350px*2 + 15px), показываем по 1 элементу */ @media (max-width: 724px) { .reklama-display-item { flex: 1 1 100%; /* Полная ширина */ min-width: auto; /* Сбрасываем минимальную ширину */ } } .reklama-display-item::before { content: 'ТОП'; position: absolute; top: -8px; right: 10px; background: #ff9800; color: white; padding: 2px 8px; border-radius: 10px; font-size: 10px; font-weight: bold; } .reklama-display-content { display: flex; gap: 12px; align-items: center; } .reklama-display-avatar { width: 100px; height: 100px; border-radius: 50%; overflow: hidden; flex-shrink: 0; border: 2px solid var(--rekl-border, #ddd); } .reklama-display-avatar img { width: 100%; height: 100%; object-fit: cover; } .reklama-display-text { flex: 1; min-width: 0; } .reklama-display-title { font-size: 17px; text-align: left; font-weight: 600; margin-bottom: 5px; color: var(--rekl-title, #333); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; word-break: break-word; overflow-wrap: break-word; hyphens: auto; } .reklama-display-desc { font-size: 14px; color: var(--rekl-desc, #666); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.4; text-align: left; } .reklama-display-section { margin: 10px 0; width: 100%; /* Убедитесь, что секция занимает всю ширину */ } /* Стили для статистики */ .reklama-display-stats { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 15px; font-size: 12px; color: #666; justify-content: flex-start; align-items: center; } .reklama-stat-item { display: flex; align-items: center; gap: 5px; white-space: nowrap; background-color: #ffffff; padding: 2px 6px; border-radius: 7px; border: 1px solid #4444; } .reklama-stat-item i { font-size: 14px; } /* Адаптивность для маленьких экранов */ @media (max-width: 400px) { .reklama-display-stats { gap: 10px; } .reklama-stat-item { font-size: 11px; } .reklama-stat-item i { font-size: 12px; } /* Скрываем элементы на мобильных при необходимости */ .hide-on-mobile { display: none !important; } } </style> <!--/noindex--> </aside> </div> </div> </main> <!-- Мобильная навигация --> <nav class="mobile-nav-modern" id="mobile-nav" aria-label="Мобильная навигация"> <div class="mobile-nav-wrapper"> <ul class="mobile-nav-list with-posts" role="list"> <li class="mobile-nav-item" role="listitem"> <a href="#section-posts" class="mobile-nav-link" data-section="posts" aria-label="Публикации"> <div class="nav-icon-wrapper"> <svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z"/> </svg> </div> <span class="nav-label">Публикации</span> </a> </li> <li class="mobile-nav-item" role="listitem"> <a href="#section-stats" class="mobile-nav-link active" data-section="stats" aria-label="Статистика"> <div class="nav-icon-wrapper"> <svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z"/> </svg> </div> <span class="nav-label">Статистика</span> </a> </li> <li class="mobile-nav-item" role="listitem"> <a href="#section-similar" class="mobile-nav-link" data-section="similar" aria-label="Похожие каналы"> <div class="nav-icon-wrapper"> <svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197m13 0a6 6 0 01-9 5.197"/> </svg> </div> <span class="nav-label">Похожие</span> </a> </li> <li class="mobile-nav-item" role="listitem"> <button class="mobile-nav-link share-btn" onClick="openShareSection()" aria-label="Поделиться"> <div class="nav-icon-wrapper"> <svg class="nav-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor"> <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z"/> </svg> </div> <span class="nav-label">Поделиться</span> </button> </li> <li class="mobile-nav-item" role="listitem"> <a href="/look_redir.php?p1=1696&p2=1&p3=front_end_dev" class="mobile-nav-link channel-btn" target="_blank" rel="nofollow sponsored" aria-label="Перейти в Telegram канал"> <div class="nav-icon-wrapper avatar-wrapper"> <img src="/photo_avatar/avatar/logo_24540.jpg" alt="FrontEndDev" class="channel-avatar"> </div> <span class="nav-label">Канал</span> </a> </li> </ul> </div> </nav> <!-- Модальное окно аватара --> <dialog class="avatar-modal" id="avatar-modal" aria-labelledby="avatar-modal-title"> <div class="avatar-modal-content"> <button class="avatar-modal-close" onClick="closeAvatarModal()" aria-label="Закрыть модальное окно"> <i class="fas fa-times"></i> </button> <header class="avatar-modal-header"> <h3 class="avatar-modal-title" id="avatar-modal-title"> Аватарка канала: FrontEndDev </h3> </header> <img src="/photo_avatar/avatar/logo_24540.jpg" alt="FrontEndDev - Telegram канал" class="avatar-modal-img"> </div> </dialog> <style> .site-footer { background-color: #111; color: #ddd; font-family: 'Segoe UI', sans-serif; padding: 40px 20px 20px; } .footer-container { max-width: 1200px; margin: 0 auto; } .footer-columns { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 30px; margin-bottom: 30px; } .footer-column { flex: 1; min-width: 200px; } .footer-column h3 { color: #fff; font-size: 1.2rem; margin-bottom: 15px; } .footer-column ul { list-style: none; padding: 0; margin: 0; } .footer-column ul li { margin-bottom: 10px; } .footer-column ul li a { color: #bbb; text-decoration: none; transition: color 0.3s; } .footer-column ul li a:hover { color: #fff; } .footer-bottom { border-top: 1px solid #333; text-align: center; padding-top: 15px; font-size: 0.9rem; color: #888; } @media (max-width: 768px) { .footer-columns { flex-direction: column; align-items: center; text-align: center; } .footer-column { margin-bottom: 20px; } } .footer-note { color: #aaa; font-size: 0.95rem; line-height: 1.6; margin-bottom: 25px; border-top: 1px solid #222; padding-top: 20px; } .footer-note p { margin: 0 0 10px; } </style> <footer class="site-footer"> <div class="footer-container"> <div class="footer-columns"> <div class="footer-column"> <h3>Категории</h3> <ul> <li><a href="https://tg-search.ru/tg_catalog">Каталог</a></li> <li><a href="https://tg-search.ru/myopinion">Добавьте Telegram-канал</a></li> <li><a href="https://tg-search.ru/guru_index"> Создайте ТГ канал </a></li> </ul> </div> <div class="footer-column"> <h3>Важное!</h3> <ul> <li><a href="https://tg-search.ru/ctr_user-agreement">Пользовательское соглашение</a></li> <li><a href="https://tg-search.ru/ctr_privacy-policy">Политика конфиденциальности</a></li> <li><a href="https://tg-search.ru/ctr_cookie-policy">Политика cookie</a></li> </ul> </div> <div class="footer-column"> <h3>Сообщество</h3> <ul> <li><a href="mailto:Tgsearch@yandex.ru">E-Mail</a></li> <li><a href="https://vk.com/tg_search">Vk.com</a></li> <li><a href="https://t.me/tg_search_ru">My Telegram</a></li> </ul> </div> </div> <div class="footer-note"> <p><strong>Tg-Search.ru</strong> — каталог Telegram-каналов, групп и ботов.</p> <p>Все ресурсы размещаются пользователями. Ответственность за их содержимое несут исключительно владельцы. Команда Tg-Search стремится публиковать только безопасный и полезный контент, однако не может гарантировать полный контроль. Для удаления нежелательных материалов, пожалуйста, свяжитесь с нами через e-mail на странице «Контакты».</p> </div> <div class="footer-bottom"><br /> <!-- Yandex.Metrika counter --> <script type="text/javascript"> (function(m,e,t,r,i,k,a){ m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)}; m[i].l=1*new Date(); for (var j = 0; j < document.scripts.length; j++) {if (document.scripts[j].src === r) { return; }} k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a) })(window, document,'script','https://mc.yandex.ru/metrika/tag.js?id=103499434', 'ym'); ym(103499434, 'init', {ssr:true, webvisor:true, clickmap:true, ecommerce:"dataLayer", accurateTrackBounce:true, trackLinks:true}); </script> <noscript><div><img src="https://mc.yandex.ru/watch/103499434" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter --> <!-- Top.Mail.Ru counter --> <script type="text/javascript"> var _tmr = window._tmr || (window._tmr = []); _tmr.push({id: "3720551", type: "pageView", start: (new Date()).getTime()}); (function (d, w, id) { if (d.getElementById(id)) return; var ts = d.createElement("script"); ts.type = "text/javascript"; ts.async = true; ts.id = id; ts.src = "https://top-fwz1.mail.ru/js/code.js"; var f = function () {var s = d.getElementsByTagName("script")[0]; s.parentNode.insertBefore(ts, s);}; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "tmr-code"); </script> <noscript><div><img src="https://top-fwz1.mail.ru/counter?id=3720551;js=na" style="position:absolute;left:-9999px;" alt="Top.Mail.Ru" /></div></noscript> <!-- /Top.Mail.Ru counter --> <!--LiveInternet counter--><a href="https://www.liveinternet.ru/click" target="_blank"><img id="licnt0DD9" width="88" height="31" style="border:0" title="LiveInternet: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7" alt=""/></a><script>(function(d,s){d.getElementById("licnt0DD9").src="https://counter.yadro.ru/hit?t14.6;r"+escape(d.referrer)+((typeof(s)=="undefined")?"":";s"+s.width+"*"+s.height+"*"+(s.colorDepth?s.colorDepth:s.pixelDepth))+";u"+escape(d.URL)+";h"+escape(d.title.substring(0,150))+";"+Math.random()})(document,screen)</script><!--/LiveInternet--> <p>© 2025 Tg-Search. Все права защищены ❤️</p> </div> </div> </footer> <script> function toggleAvatarZoom(img) { const modal = document.getElementById('_look_avatar-modal'); const modalImg = modal.querySelector('._look_avatar-modal-img'); modalImg.src = img.src; modal.classList.add('show'); } function closeAvatarZoom() { const modal = document.getElementById('_look_avatar-modal'); modal.classList.remove('show'); } function toggleStatistics() { // Функция для переключения статистики console.log('Toggle statistics'); } </script> <script src="https://tg-search.ru/tgsearch.js?id=1769493651" defer></script> <script> // ========== LAZY LOADING ИЗОБРАЖЕНИЙ ========== function lazyLoadImages() { // Находим все изображения с атрибутом loading="lazy" или классом lazy const lazyImages = document.querySelectorAll('img.lazy, img[loading="lazy"]'); if (!lazyImages.length) return; // Создаем Intersection Observer const imageObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; // Загружаем изображение loadImage(img); // Прекращаем наблюдение observer.unobserve(img); } }); }, { rootMargin: '100px 0px', // Начинаем загружать за 100px до появления в viewport threshold: 0.01 }); // Начинаем наблюдение за каждым изображением lazyImages.forEach(img => { // Если браузер поддерживает loading="lazy", используем нативную ленивую загрузку if ('loading' in HTMLImageElement.prototype) { // Для браузеров с нативной поддержкой lazy loading if (img.dataset.src) { img.src = img.dataset.src; img.classList.add('loaded'); } } else { // Для старых браузеров используем Intersection Observer imageObserver.observe(img); } }); } // Функция загрузки изображения function loadImage(img) { // Если есть data-src, загружаем его if (img.dataset.src) { // Создаем временное изображение для предзагрузки const tempImg = new Image(); tempImg.onload = function() { // Когда изображение загружено, подставляем его img.src = img.dataset.src; img.classList.add('loaded'); // Очищаем data-src чтобы не загружать повторно delete img.dataset.src; }; tempImg.onerror = function() { // Если ошибка загрузки, используем placeholder console.warn('Failed to load image:', img.dataset.src); img.classList.add('loaded'); }; tempImg.src = img.dataset.src; } else { // Если нет data-src, просто добавляем класс loaded img.classList.add('loaded'); } } // ========== ПРЕДЗАГРУЗКА КРИТИЧЕСКИХ ИЗОБРАЖЕНИЙ ========== function preloadCriticalImages() { // Предзагружаем только главное изображение канала const firstImage = document.querySelector('.channel-avatar.lazy'); if (firstImage && firstImage.dataset.src) { const img = new Image(); img.onload = function() { firstImage.src = firstImage.dataset.src; firstImage.classList.add('loaded'); delete firstImage.dataset.src; }; img.src = firstImage.dataset.src; } } // ========== ОПТИМИЗАЦИЯ ДЛЯ СТАРЫХ БРАУЗЕРОВ ========== function supportsLazyLoading() { return 'loading' in HTMLImageElement.prototype; } // ========== ИНИЦИАЛИЗАЦИЯ ========== document.addEventListener('DOMContentLoaded', function() { // Если браузер не поддерживает нативный lazy loading if (!supportsLazyLoading()) { lazyLoadImages(); // Наблюдаем за динамическими изменениями DOM (для AJAX-загрузки) const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.addedNodes.length) { lazyLoadImages(); } }); }); observer.observe(document.body, { childList: true, subtree: true }); } else { // Для браузеров с нативной поддержкой // Просто добавляем класс loaded после загрузки document.querySelectorAll('img[loading="lazy"]').forEach(img => { img.addEventListener('load', function() { this.classList.add('loaded'); }); }); } // Предзагружаем критическое изображение preloadCriticalImages(); }); // Альтернативная инициализация для гарантии window.addEventListener('load', function() { // Дублируем вызов для изображений, которые могли появиться после загрузки setTimeout(lazyLoadImages, 100); }); // ========== ОБРАБОТКА ОШИБОК ЗАГРУЗКИ ========== document.addEventListener('error', function(e) { if (e.target.tagName === 'IMG' && e.target.classList.contains('lazy')) { console.warn('Image failed to load:', e.target.src || e.target.dataset.src); // Можно установить fallback изображение e.target.src = '/img/telegram-placeholder.png'; e.target.classList.add('loaded'); } }, true); // функции JavaScript document.addEventListener('DOMContentLoaded', function() { function scrollToSection(sectionId) { const section = document.querySelector(sectionId); if (section) { const headerOffset = 70; const elementPosition = section.getBoundingClientRect().top; const offsetPosition = elementPosition + window.pageYOffset - headerOffset; window.scrollTo({ top: offsetPosition, behavior: 'smooth' }); updateActiveSection(sectionId); } } function updateActiveSection(activeSectionId) { document.querySelectorAll('.nav-link').forEach(link => { link.classList.remove('active'); if (link.getAttribute('href') === activeSectionId) { link.classList.add('active'); } }); document.querySelectorAll('.mobile-nav-link').forEach(link => { link.classList.remove('active'); if (link.getAttribute('href') === activeSectionId) { link.classList.add('active'); } }); } document.querySelectorAll('.nav-link, .mobile-nav-link').forEach(link => { link.addEventListener('click', function(e) { if (this.classList.contains('share-btn') || this.classList.contains('share-mobile-btn')) return; e.preventDefault(); const sectionId = this.getAttribute('href'); scrollToSection(sectionId); }); }); function handleScroll() { const sections = document.querySelectorAll('.content-card'); let currentSection = ''; sections.forEach(section => { const sectionTop = section.offsetTop - 80; const sectionBottom = sectionTop + section.offsetHeight; if (window.pageYOffset >= sectionTop && window.pageYOffset < sectionBottom) { currentSection = '#' + section.id; } }); if (currentSection) { updateActiveSection(currentSection); } } window.addEventListener('scroll', handleScroll); handleScroll(); window.toggleDescription = function() { const desc = document.getElementById('description-content'); const btn = document.getElementById('read-more-btn'); if (!desc || !btn) return; if (desc.style.maxHeight && desc.style.maxHeight !== 'none') { desc.style.maxHeight = 'none'; desc.style.overflow = 'visible'; btn.innerHTML = '<span>Свернуть</span><i class="fas fa-chevron-up"></i>'; btn.setAttribute('aria-expanded', 'true'); } else { desc.style.maxHeight = '200px'; desc.style.overflow = 'hidden'; btn.innerHTML = '<span>Читать далее</span><i class="fas fa-chevron-down"></i>'; btn.setAttribute('aria-expanded', 'false'); } }; window.openAvatarModal = function() { document.getElementById('avatar-modal').classList.add('active'); document.body.style.overflow = 'hidden'; }; window.closeAvatarModal = function() { document.getElementById('avatar-modal').classList.remove('active'); document.body.style.overflow = ''; }; document.getElementById('avatar-modal').addEventListener('click', function(e) { if (e.target === this) { closeAvatarModal(); } }); document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { closeAvatarModal(); } }); const descContent = document.getElementById('description-content'); if (descContent) { const contentHeight = descContent.scrollHeight; if (contentHeight > 200) { descContent.style.maxHeight = '200px'; descContent.style.overflow = 'hidden'; } } }); // Функции для работы с формой редактирования // Остальные функции остаются без изменений function shareOnTelegram() { const url = encodeURIComponent(window.location.href); const text = encodeURIComponent(document.title); window.open(`https://t.me/share/url?url=${url}&text=${text}`, '_blank'); } function shareOnVK() { const url = encodeURIComponent(window.location.href); window.open(`https://vk.com/share.php?url=${url}`, '_blank'); } function shareOnWhatsApp() { const url = encodeURIComponent(window.location.href); const text = encodeURIComponent(document.title); window.open(`https://wa.me/?text=${text}%20${url}`, '_blank'); } function shareOnOdnoklassniki() { const url = encodeURIComponent(window.location.href); window.open(`https://connect.ok.ru/offer?url=${url}`, '_blank'); } function shareOnTwitter() { const url = encodeURIComponent(window.location.href); const text = encodeURIComponent(document.title); window.open(`https://twitter.com/intent/tweet?url=${url}&text=${text}`, '_blank'); } function shareOnFacebook() { const url = encodeURIComponent(window.location.href); window.open(`https://www.facebook.com/sharer/sharer.php?u=${url}`, '_blank'); } function copyToClipboard(type) { let textToCopy = ''; let message = ''; switch(type) { case 'url': textToCopy = document.getElementById('shareUrl').value; message = 'Ссылка скопирована в буфер обмена'; break; case 'bbcode': textToCopy = document.getElementById('bbCode').textContent.trim(); message = 'BB-код скопирован в буфер обмена'; break; case 'html': textToCopy = document.getElementById('htmlCode').textContent.trim(); message = 'HTML-код скопирован в буфер обмена'; break; } navigator.clipboard.writeText(textToCopy).then(() => { showNotification(message); const btn = event.currentTarget; btn.style.transform = 'scale(0.95)'; setTimeout(() => { btn.style.transform = ''; }, 200); }).catch(err => { console.error('Ошибка копирования:', err); showNotification('Не удалось скопировать', 'error'); }); } function showNotification(message, type = 'success') { let notification = document.querySelector('.copy-notification'); if (!notification) { notification = document.createElement('div'); notification.className = 'copy-notification'; document.body.appendChild(notification); } notification.textContent = message; notification.className = `copy-notification ${type === 'error' ? 'error' : ''}`; setTimeout(() => notification.classList.add('show'), 10); setTimeout(() => { notification.classList.remove('show'); setTimeout(() => notification.remove(), 300); }, 3000); } function openShareSection() { const shareSection = document.getElementById('share-section'); if (shareSection) { shareSection.classList.add('active'); setTimeout(() => { shareSection.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 100); } } function closeShareSection() { const shareSection = document.getElementById('share-section'); if (shareSection) { shareSection.classList.remove('active'); } } </script> </body> </html>