Add current files to repository
@@ -38,3 +38,10 @@ Thumbs.db
|
|||||||
*apikey*
|
*apikey*
|
||||||
*token*gitea
|
*token*gitea
|
||||||
gitea.pub
|
gitea.pub
|
||||||
|
|
||||||
|
# Local development folders
|
||||||
|
scripts/
|
||||||
|
telegram/
|
||||||
|
migration-s3/
|
||||||
|
INFO/
|
||||||
|
forms/
|
||||||
|
|||||||
@@ -1,109 +0,0 @@
|
|||||||
# Настройка форм обратной связи
|
|
||||||
|
|
||||||
## Копирование PHP файлов на сервер
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Скопировать обработчики форм в корень веб-сервера
|
|
||||||
sudo cp static/send_plan.php /var/www/html/
|
|
||||||
sudo cp static/send_ask.php /var/www/html/
|
|
||||||
|
|
||||||
# Установить права
|
|
||||||
sudo chown www-data:www-data /var/www/html/send_*.php
|
|
||||||
sudo chmod 644 /var/www/html/send_*.php
|
|
||||||
```
|
|
||||||
|
|
||||||
## Настройка email
|
|
||||||
|
|
||||||
Отредактируйте файлы и замените email получателя:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# В файле send_plan.php
|
|
||||||
sudo nano /var/www/html/send_plan.php
|
|
||||||
# Найти строку: $to = "info@sleeptrip.ru";
|
|
||||||
# Заменить на ваш email
|
|
||||||
|
|
||||||
# В файле send_ask.php
|
|
||||||
sudo nano /var/www/html/send_ask.php
|
|
||||||
# Найти строку: $to = "info@sleeptrip.ru";
|
|
||||||
# Заменить на ваш email
|
|
||||||
```
|
|
||||||
|
|
||||||
## Настройка SMTP (через msmtp)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Установить msmtp
|
|
||||||
sudo apt update && sudo apt install msmtp msmtp-mta
|
|
||||||
|
|
||||||
# Создать конфигурацию
|
|
||||||
sudo tee /etc/msmtprc > /dev/null <<'EOF'
|
|
||||||
defaults
|
|
||||||
auth on
|
|
||||||
tls on
|
|
||||||
tls_trust_file /etc/ssl/certs/ca-certificates.crt
|
|
||||||
logfile /var/log/msmtp.log
|
|
||||||
|
|
||||||
# Gmail настройки (замените на ваши)
|
|
||||||
account gmail
|
|
||||||
host smtp.gmail.com
|
|
||||||
port 587
|
|
||||||
from your-email@gmail.com
|
|
||||||
user your-email@gmail.com
|
|
||||||
password your-app-password
|
|
||||||
|
|
||||||
# Установить Gmail как аккаунт по умолчанию
|
|
||||||
account default : gmail
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Установить права
|
|
||||||
sudo chmod 644 /etc/msmtprc
|
|
||||||
sudo chown root:mail /etc/msmtprc
|
|
||||||
|
|
||||||
# Создать лог файл
|
|
||||||
sudo touch /var/log/msmtp.log
|
|
||||||
sudo chown www-data:adm /var/log/msmtp.log
|
|
||||||
sudo chmod 664 /var/log/msmtp.log
|
|
||||||
|
|
||||||
# Настроить PHP для использования msmtp
|
|
||||||
echo "sendmail_path = /usr/bin/msmtp -t" | sudo tee -a /etc/php/*/apache2/php.ini
|
|
||||||
echo "sendmail_path = /usr/bin/msmtp -t" | sudo tee -a /etc/php/*/cli/php.ini
|
|
||||||
|
|
||||||
# Перезапустить Apache
|
|
||||||
sudo systemctl restart apache2
|
|
||||||
```
|
|
||||||
|
|
||||||
## Тестирование форм
|
|
||||||
|
|
||||||
1. Откройте страницы `/plan/` и `/ask/`
|
|
||||||
2. Заполните и отправьте формы
|
|
||||||
3. Проверьте логи: `sudo tail -f /var/log/msmtp.log`
|
|
||||||
4. Проверьте почту
|
|
||||||
|
|
||||||
## Альтернатива: использование существующего qform.io
|
|
||||||
|
|
||||||
Если предпочитаете оставить текущие формы qform.io, можно:
|
|
||||||
|
|
||||||
1. Оставить существующие формы как есть
|
|
||||||
2. PHP обработчики использовать как резервный вариант
|
|
||||||
3. Настроить webhook'и в qform.io для интеграции с внутренними системами
|
|
||||||
|
|
||||||
## Безопасность
|
|
||||||
|
|
||||||
- PHP файлы включают базовую валидацию
|
|
||||||
- Email headers защищены от инъекций
|
|
||||||
- Логируется IP и timestamp
|
|
||||||
- Рекомендуется добавить CAPTCHA для защиты от спама
|
|
||||||
|
|
||||||
## Интеграция с внутренними системами
|
|
||||||
|
|
||||||
Для интеграции с базой данных или CRM добавьте в PHP файлы:
|
|
||||||
|
|
||||||
```php
|
|
||||||
// Пример записи в базу данных
|
|
||||||
try {
|
|
||||||
$pdo = new PDO('mysql:host=localhost;dbname=travel', $db_user, $db_pass);
|
|
||||||
$stmt = $pdo->prepare("INSERT INTO requests (name, email, type, destination, created_at) VALUES (?, ?, ?, ?, NOW())");
|
|
||||||
$stmt->execute([$name, $email, $trip_type, $destination]);
|
|
||||||
} catch (PDOException $e) {
|
|
||||||
error_log("Database error: " . $e->getMessage());
|
|
||||||
}
|
|
||||||
```
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
+++
|
|
||||||
title = 'Название поста'
|
|
||||||
slug = 'slug-posta'
|
|
||||||
image = 'images/post-main-photo.jpg'
|
|
||||||
date = "2025-01-01T00:00:00"
|
|
||||||
description = 'Краткое описание поста'
|
|
||||||
disqus_identifier = '999'
|
|
||||||
+++
|
|
||||||
|
|
||||||
<!-- УНИВЕРСАЛЬНЫЙ ШАБЛОН ПОСТА -->
|
|
||||||
<!-- Выберите нужные элементы и удалите ненужные -->
|
|
||||||
|
|
||||||
Введение к посту...
|
|
||||||
|
|
||||||
<!-- ОСНОВНОЕ ИЗОБРАЖЕНИЕ -->
|
|
||||||

|
|
||||||
|
|
||||||
## Основной контент
|
|
||||||
|
|
||||||
Основной текст поста...
|
|
||||||
|
|
||||||
<!-- ДОПОЛНИТЕЛЬНЫЕ ФОТОГРАФИИ -->
|
|
||||||

|
|
||||||
|
|
||||||
<!-- ВИДЕО (YouTube) -->
|
|
||||||
{{< youtube id="VIDEO_ID" >}}
|
|
||||||
|
|
||||||
<!-- КАРТА ЯНДЕКС -->
|
|
||||||
<!-- 📍 ЛОКАЦИЯ (ОБЯЗАТЕЛЬНОЕ ПОЛЕ) -->
|
|
||||||
---
|
|
||||||
|
|
||||||
📍 Локация
|
|
||||||
{{< rawhtml >}}
|
|
||||||
<div class="yandex-map-container">
|
|
||||||
<script type="text/javascript" charset="utf-8" async src="https://api-maps.yandex.ru/services/constructor/1.0/js/?um=constructor%3AВАША_КАРТА_ID&width=800&height=400&lang=ru_RU&scroll=true"></script>
|
|
||||||
</div>
|
|
||||||
{{< /rawhtml >}}
|
|
||||||
|
|
||||||
{{< rawhtml >}}
|
|
||||||
{{< back-to-top >}}
|
|
||||||
{{< /rawhtml >}}
|
|
||||||
|
|
||||||
<!-- ГАЛЕРЕЯ ФОТОГРАФИЙ -->
|
|
||||||
{{< load-photoswipe >}}
|
|
||||||
{{< gallery caption-effect="fade" >}}
|
|
||||||
{{< figure src="images/gallery-1.jpg" >}}
|
|
||||||
{{< figure src="images/gallery-2.jpg" >}}
|
|
||||||
{{< figure src="images/gallery-3.jpg" >}}
|
|
||||||
{{< /gallery >}}
|
|
||||||
|
|
||||||
Заключение...
|
|
||||||
|
|
||||||
<!--
|
|
||||||
ИНСТРУКЦИЯ:
|
|
||||||
Используйте нужные элементы и удалите ненужные для вашего поста:
|
|
||||||
- Фотографии: обычные ![...] или галерея {{< gallery >}}
|
|
||||||
- Видео: {{< youtube id="..." >}}
|
|
||||||
- 📍 Локация: ОБЯЗАТЕЛЬНОЕ ПОЛЕ - всегда добавляйте карту с местоположением
|
|
||||||
- Карты: {{< yandex-map id="..." >}}
|
|
||||||
|
|
||||||
Примечание:
|
|
||||||
- Всегда добавляйте дивайдер (---) перед 📍 Локация
|
|
||||||
- Используйте {{< back-to-top >}} вместо ручной ссылки
|
|
||||||
- Размер карты: 800x400 для лучшего отображения
|
|
||||||
-->
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configuration - ИЗМЕНИТЕ ЭТИ ЗНАЧЕНИЯ на ваши
|
|
||||||
BUCKET_NAME="test-ptp"
|
|
||||||
|
|
||||||
# Удаление .git файлов и директорий из бакета
|
|
||||||
echo "Удаление .git файлов из S3 бакета..."
|
|
||||||
s3cmd del s3://$BUCKET_NAME/.git/ --recursive
|
|
||||||
s3cmd del s3://$BUCKET_NAME/.github/ --recursive
|
|
||||||
s3cmd del "s3://$BUCKET_NAME/.gitignore"
|
|
||||||
|
|
||||||
# Удаление всех файлов, содержащих .git в названии
|
|
||||||
echo "Поиск и удаление всех файлов с .git в названии..."
|
|
||||||
for file in $(s3cmd ls s3://$BUCKET_NAME/ --recursive | grep -i ".git" | awk '{print $4}'); do
|
|
||||||
echo "Удаление: $file"
|
|
||||||
s3cmd del "$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Удаление .env* файлов
|
|
||||||
echo "Удаление .env файлов из S3 бакета..."
|
|
||||||
s3cmd del s3://$BUCKET_NAME/.env* --recursive
|
|
||||||
for file in $(s3cmd ls s3://$BUCKET_NAME/ --recursive | grep -i "\.env" | awk '{print $4}'); do
|
|
||||||
echo "Удаление: $file"
|
|
||||||
s3cmd del "$file"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Проверка config*.toml файлов на наличие чувствительных данных
|
|
||||||
echo "Проверка config*.toml файлов на наличие чувствительных данных..."
|
|
||||||
for file in $(s3cmd ls s3://$BUCKET_NAME/ --recursive | grep -i "config.*\.toml" | awk '{print $4}'); do
|
|
||||||
echo "Файл конфигурации найден: $file"
|
|
||||||
# Здесь мы предупреждаем о наличии файла, но не удаляем его автоматически
|
|
||||||
echo "ВНИМАНИЕ: Убедитесь, что $file не содержит секретные данные!"
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Очистка завершена! Проверьте бакет, чтобы убедиться, что все критичные файлы удалены."
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Configuration
|
|
||||||
BUCKET_NAME="your-r2-bucket-name"
|
|
||||||
DISTRIBUTION_DOMAIN="cyberiya.site"
|
|
||||||
R2_ENDPOINT="https://<account-id>.r2.cloudflarestorage.com"
|
|
||||||
REGION="auto"
|
|
||||||
|
|
||||||
# Build the site
|
|
||||||
echo "Building site with Hugo..."
|
|
||||||
hugo --config config-prod.toml
|
|
||||||
|
|
||||||
# Sync to Cloudflare R2
|
|
||||||
echo "Deploying to Cloudflare R2..."
|
|
||||||
# AWS CLI версия
|
|
||||||
# aws s3 sync ./public/ s3://$BUCKET_NAME/ \
|
|
||||||
# --endpoint-url=$R2_ENDPOINT \
|
|
||||||
# --region=$REGION \
|
|
||||||
# --acl public-read \
|
|
||||||
# --exclude ".git/*" \
|
|
||||||
# --exclude ".github/*" \
|
|
||||||
# --exclude ".gitignore" \
|
|
||||||
# --exclude "*.git*" \
|
|
||||||
# --delete
|
|
||||||
|
|
||||||
# S3CMD версия
|
|
||||||
s3cmd sync ./public/ s3://$BUCKET_NAME/ \
|
|
||||||
--acl-public \
|
|
||||||
--delete-removed \
|
|
||||||
--exclude ".git/*" \
|
|
||||||
--exclude ".github/*" \
|
|
||||||
--exclude ".gitignore" \
|
|
||||||
--exclude "*.git*" \
|
|
||||||
--exclude ".env*" \
|
|
||||||
--exclude "*.env" \
|
|
||||||
--exclude "*.env.*"
|
|
||||||
|
|
||||||
# Invalidate Cloudflare cache if needed
|
|
||||||
echo "Invalidating Cloudflare cache..."
|
|
||||||
# If you have the Cloudflare API token set up:
|
|
||||||
# cloudflare-cli purge $DISTRIBUTION_DOMAIN
|
|
||||||
|
|
||||||
echo "Deployment complete! Site available at: https://$DISTRIBUTION_DOMAIN"
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
||||||
$name = trim($_POST['name'] ?? '');
|
|
||||||
$email = trim($_POST['email'] ?? '');
|
|
||||||
$subject = trim($_POST['subject'] ?? '');
|
|
||||||
$message = trim($_POST['message'] ?? '');
|
|
||||||
|
|
||||||
// Валидация
|
|
||||||
if (empty($name) || empty($email) || empty($subject) || empty($message)) {
|
|
||||||
$error = "Все поля обязательны для заполнения.";
|
|
||||||
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
|
||||||
$error = "Некорректный email адрес.";
|
|
||||||
} else {
|
|
||||||
// Подготовка email
|
|
||||||
$to = "info@sleeptrip.ru"; // ЗАМЕНИТЕ на ваш email!
|
|
||||||
$email_subject = "Вопрос с сайта: " . $subject;
|
|
||||||
$email_body = "Новый вопрос с сайта:\n\n";
|
|
||||||
$email_body .= "Имя: " . $name . "\n";
|
|
||||||
$email_body .= "Email: " . $email . "\n";
|
|
||||||
$email_body .= "Тема: " . $subject . "\n\n";
|
|
||||||
$email_body .= "Сообщение:\n" . $message . "\n\n";
|
|
||||||
$email_body .= "---\n";
|
|
||||||
$email_body .= "Отправлено с: " . $_SERVER['HTTP_HOST'] . "\n";
|
|
||||||
$email_body .= "Дата: " . date('Y-m-d H:i:s') . "\n";
|
|
||||||
$email_body .= "IP: " . $_SERVER['REMOTE_ADDR'] . "\n";
|
|
||||||
|
|
||||||
$headers = "From: noreply@sleeptrip.ru\r\n";
|
|
||||||
$headers .= "Reply-To: " . $email . "\r\n";
|
|
||||||
$headers .= "X-Mailer: PHP/" . phpversion();
|
|
||||||
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
|
|
||||||
|
|
||||||
// Отправка email
|
|
||||||
if (mail($to, $email_subject, $email_body, $headers)) {
|
|
||||||
$success = "Сообщение отправлено! Мы ответим вам в ближайшее время.";
|
|
||||||
// Очистить форму
|
|
||||||
$name = $email = $subject = $message = '';
|
|
||||||
} else {
|
|
||||||
$error = "Ошибка отправки. Попробуйте еще раз или свяжитесь через Telegram.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Перенаправление обратно на страницу с результатом
|
|
||||||
if (isset($success)) {
|
|
||||||
header("Location: /ask/?success=" . urlencode($success));
|
|
||||||
exit;
|
|
||||||
} elseif (isset($error)) {
|
|
||||||
header("Location: /ask/?error=" . urlencode($error));
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
@@ -1,61 +0,0 @@
|
|||||||
<?php
|
|
||||||
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
||||||
$name = trim($_POST['name'] ?? '');
|
|
||||||
$email = trim($_POST['email'] ?? '');
|
|
||||||
$phone = trim($_POST['phone'] ?? '');
|
|
||||||
$bvs_number = trim($_POST['bvs_number'] ?? '');
|
|
||||||
$trip_period = trim($_POST['trip_period'] ?? '');
|
|
||||||
$consent = isset($_POST['consent']) ? trim($_POST['consent']) : '';
|
|
||||||
$age_confirm = isset($_POST['age_confirm']) ? trim($_POST['age_confirm']) : '';
|
|
||||||
|
|
||||||
// Валидация
|
|
||||||
if (empty($name) || empty($email) || empty($consent) || empty($age_confirm)) {
|
|
||||||
$error = "Обязательные поля: Имя, Email, Согласие на обработку данных, Подтверждение возраста.";
|
|
||||||
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
|
||||||
$error = "Некорректный email адрес.";
|
|
||||||
} elseif ($consent !== 'agree') {
|
|
||||||
$error = "Для отправки заявки необходимо согласие на обработку персональных данных.";
|
|
||||||
} elseif ($age_confirm !== '18+') {
|
|
||||||
$error = "Для отправки заявки необходимо подтверждение возраста 18+.";
|
|
||||||
} else {
|
|
||||||
// Подготовка email
|
|
||||||
$to = "info@sleeptrip.ru"; // ЗАМЕНИТЕ на ваш email!
|
|
||||||
$email_subject = "Новая заявка на поездку от " . $name;
|
|
||||||
$email_body = "Новая заявка на планирование поездки:\n\n";
|
|
||||||
$email_body .= "Имя: " . $name . "\n";
|
|
||||||
$email_body .= "Email: " . $email . "\n";
|
|
||||||
$email_body .= "Телефон: " . ($phone ?: 'не указан') . "\n";
|
|
||||||
$email_body .= "Учётный номер БВС/Вариант поездки: " . ($bvs_number ?: 'не указано') . "\n";
|
|
||||||
$email_body .= "Период поездки: " . ($trip_period ?: 'не выбран') . "\n";
|
|
||||||
$email_body .= "Возраст 18+: " . ($age_confirm === '18+' ? 'Подтверждено' : 'Не подтверждено') . "\n";
|
|
||||||
$email_body .= "Согласие на обработку данных: " . ($consent === 'agree' ? 'Да' : 'Нет') . "\n\n";
|
|
||||||
$email_body .= "---\n";
|
|
||||||
$email_body .= "Отправлено с: " . $_SERVER['HTTP_HOST'] . "\n";
|
|
||||||
$email_body .= "Дата: " . date('Y-m-d H:i:s') . "\n";
|
|
||||||
$email_body .= "IP: " . $_SERVER['REMOTE_ADDR'] . "\n";
|
|
||||||
|
|
||||||
$headers = "From: noreply@sleeptrip.ru\r\n";
|
|
||||||
$headers .= "Reply-To: " . $email . "\r\n";
|
|
||||||
$headers .= "X-Mailer: PHP/" . phpversion();
|
|
||||||
$headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
|
|
||||||
|
|
||||||
// Отправка email
|
|
||||||
if (mail($to, $email_subject, $email_body, $headers)) {
|
|
||||||
$success = "Заявка отправлена! Мы свяжемся с вами в ближайшее время.";
|
|
||||||
// Очистить форму
|
|
||||||
$name = $email = $phone = $bvs_number = $trip_period = $consent = $age_confirm = '';
|
|
||||||
} else {
|
|
||||||
$error = "Ошибка отправки. Попробуйте еще раз или свяжитесь через Telegram.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Перенаправление обратно на страницу с результатом
|
|
||||||
if (isset($success)) {
|
|
||||||
header("Location: /plan/?success=" . urlencode($success));
|
|
||||||
exit;
|
|
||||||
} elseif (isset($error)) {
|
|
||||||
header("Location: /plan/?error=" . urlencode($error));
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
Before Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 5.6 KiB |
|
Before Width: | Height: | Size: 434 KiB |
@@ -1,159 +0,0 @@
|
|||||||
/*
|
|
||||||
Put this file in /static/css/hugo-easy-gallery.css
|
|
||||||
Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Grid Layout Styles
|
|
||||||
*/
|
|
||||||
.gallery {
|
|
||||||
overflow: hidden;
|
|
||||||
margin: 10px;
|
|
||||||
max-width: 768px;
|
|
||||||
}
|
|
||||||
.gallery .box {
|
|
||||||
float: left;
|
|
||||||
position: relative;
|
|
||||||
/* Default: 1 tile wide */
|
|
||||||
width: 100%;
|
|
||||||
padding-bottom: 100%;
|
|
||||||
}
|
|
||||||
@media only screen and (min-width : 365px) {
|
|
||||||
/* Tablet view: 2 tiles */
|
|
||||||
.gallery .box {
|
|
||||||
width: 50%;
|
|
||||||
padding-bottom: 50%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media only screen and (min-width : 480px) {
|
|
||||||
/* Small desktop / ipad view: 3 tiles */
|
|
||||||
.gallery .box {
|
|
||||||
width: 33.3%;
|
|
||||||
padding-bottom: 33.3%; /* */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@media only screen and (min-width : 9999px) {
|
|
||||||
/* Medium desktop: 4 tiles */
|
|
||||||
.box {
|
|
||||||
width: 25%;
|
|
||||||
padding-bottom: 25%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Transition styles
|
|
||||||
*/
|
|
||||||
.gallery.hover-transition figure,
|
|
||||||
.gallery.hover-effect-zoom .img,
|
|
||||||
.gallery:not(.caption-effect-appear) figcaption,
|
|
||||||
.fancy-figure:not(.caption-effect-appear) figcaption {
|
|
||||||
-webkit-transition: all 0.3s ease-in-out;
|
|
||||||
-moz-transition: all 0.3s ease-in-out;
|
|
||||||
-o-transition: all 0.3s ease-in-out;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
figure styles
|
|
||||||
*/
|
|
||||||
figure {
|
|
||||||
position:relative; /* purely to allow absolution positioning of figcaption */
|
|
||||||
overflow: hidden;
|
|
||||||
}
|
|
||||||
.gallery figure {
|
|
||||||
position: absolute;
|
|
||||||
left: 5px;
|
|
||||||
right: 5px;
|
|
||||||
top: 5px;
|
|
||||||
bottom: 5px;
|
|
||||||
}
|
|
||||||
.gallery.hover-effect-grow figure:hover {
|
|
||||||
transform: scale(1.05);
|
|
||||||
}
|
|
||||||
.gallery.hover-effect-shrink figure:hover {
|
|
||||||
transform: scale(0.95);
|
|
||||||
}
|
|
||||||
.gallery.hover-effect-slidedown figure:hover {
|
|
||||||
transform: translateY(5px);
|
|
||||||
}
|
|
||||||
.gallery.hover-effect-slideup figure:hover {
|
|
||||||
transform: translateY(-5px);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
img / a styles
|
|
||||||
*/
|
|
||||||
|
|
||||||
.gallery .img {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
background-size: cover;
|
|
||||||
background-position: 50% 50%;
|
|
||||||
background-repeat: no-repeat;
|
|
||||||
}
|
|
||||||
.gallery.hover-effect-zoom figure:hover .img {
|
|
||||||
transform: scale(1.05);
|
|
||||||
}
|
|
||||||
.gallery img {
|
|
||||||
display: none; /* only show the img if not inside a gallery */
|
|
||||||
}
|
|
||||||
figure a {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
figcaption styles
|
|
||||||
*/
|
|
||||||
.gallery figcaption,
|
|
||||||
.fancy-figure figcaption {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
background: #000;
|
|
||||||
color: #FFF;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 75%; /* change this if you want bigger text */
|
|
||||||
background: rgba(0, 0, 0, 0.5);
|
|
||||||
opacity: 1;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.gallery.caption-position-none figcaption,
|
|
||||||
.fancy-figure.caption-position-none figcaption {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.gallery.caption-position-center figcaption,
|
|
||||||
.fancy-figure.caption-position-center figcaption {
|
|
||||||
top: 0;
|
|
||||||
padding: 40% 5px;
|
|
||||||
}
|
|
||||||
.gallery.caption-position-bottom figcaption,
|
|
||||||
.fancy-figure.caption-position-bottom figcaption {
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
.gallery.caption-effect-fade figure:not(:hover) figcaption,
|
|
||||||
.gallery.caption-effect-appear figure:not(:hover) figcaption,
|
|
||||||
.fancy-figure.caption-effect-fade figure:not(:hover) figcaption,
|
|
||||||
.fancy-figure.caption-effect-appear figure:not(:hover) figcaption {
|
|
||||||
background: rgba(0, 0, 0, 0);
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
.gallery.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption,
|
|
||||||
.fancy-figure.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption {
|
|
||||||
margin-bottom: -100%;
|
|
||||||
}
|
|
||||||
.gallery.caption-effect-slide.caption-position-center figure:not(:hover) figcaption,
|
|
||||||
.fancy-figure.caption-effect-slide.caption-position-center figure:not(:hover) figcaption {
|
|
||||||
top: 100%;
|
|
||||||
}
|
|
||||||
figcaption p {
|
|
||||||
margin: auto; /* override style in theme */
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,86 +0,0 @@
|
|||||||
lite-youtube {
|
|
||||||
background-color: #000;
|
|
||||||
position: relative;
|
|
||||||
display: block;
|
|
||||||
contain: content;
|
|
||||||
background-position: center center;
|
|
||||||
background-size: cover;
|
|
||||||
cursor: pointer;
|
|
||||||
max-width: 720px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* gradient */
|
|
||||||
lite-youtube::before {
|
|
||||||
content: '';
|
|
||||||
display: block;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==);
|
|
||||||
background-position: top;
|
|
||||||
background-repeat: repeat-x;
|
|
||||||
height: 60px;
|
|
||||||
padding-bottom: 50px;
|
|
||||||
width: 100%;
|
|
||||||
transition: all 0.2s cubic-bezier(0, 0, 0.2, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* responsive iframe with a 16:9 aspect ratio
|
|
||||||
thanks https://css-tricks.com/responsive-iframes/
|
|
||||||
*/
|
|
||||||
lite-youtube::after {
|
|
||||||
content: "";
|
|
||||||
display: block;
|
|
||||||
padding-bottom: calc(100% / (16 / 9));
|
|
||||||
}
|
|
||||||
lite-youtube > iframe {
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
position: absolute;
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
border: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* play button */
|
|
||||||
lite-youtube > .lty-playbtn {
|
|
||||||
display: block;
|
|
||||||
width: 68px;
|
|
||||||
height: 48px;
|
|
||||||
position: absolute;
|
|
||||||
cursor: pointer;
|
|
||||||
transform: translate3d(-50%, -50%, 0);
|
|
||||||
top: 50%;
|
|
||||||
left: 50%;
|
|
||||||
z-index: 1;
|
|
||||||
background-color: transparent;
|
|
||||||
/* YT's actual play button svg */
|
|
||||||
background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 68 48"><path d="M66.52 7.74c-.78-2.93-2.49-5.41-5.42-6.19C55.79.13 34 0 34 0S12.21.13 6.9 1.55c-2.93.78-4.63 3.26-5.42 6.19C.06 13.05 0 24 0 24s.06 10.95 1.48 16.26c.78 2.93 2.49 5.41 5.42 6.19C12.21 47.87 34 48 34 48s21.79-.13 27.1-1.55c2.93-.78 4.64-3.26 5.42-6.19C67.94 34.95 68 24 68 24s-.06-10.95-1.48-16.26z" fill="red"/><path d="M45 24 27 14v20" fill="white"/></svg>');
|
|
||||||
filter: grayscale(100%);
|
|
||||||
transition: filter .1s cubic-bezier(0, 0, 0.2, 1);
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
lite-youtube:hover > .lty-playbtn,
|
|
||||||
lite-youtube .lty-playbtn:focus {
|
|
||||||
filter: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Post-click styles */
|
|
||||||
lite-youtube.lyt-activated {
|
|
||||||
cursor: unset;
|
|
||||||
}
|
|
||||||
lite-youtube.lyt-activated::before,
|
|
||||||
lite-youtube.lyt-activated > .lty-playbtn {
|
|
||||||
opacity: 0;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lyt-visually-hidden {
|
|
||||||
clip: rect(0 0 0 0);
|
|
||||||
clip-path: inset(50%);
|
|
||||||
height: 1px;
|
|
||||||
overflow: hidden;
|
|
||||||
position: absolute;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 1px;
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 939 KiB |
|
Before Width: | Height: | Size: 916 KiB |
|
Before Width: | Height: | Size: 973 KiB |
|
Before Width: | Height: | Size: 941 KiB |
|
Before Width: | Height: | Size: 503 KiB |
|
Before Width: | Height: | Size: 402 KiB |
|
Before Width: | Height: | Size: 420 KiB |
|
Before Width: | Height: | Size: 415 KiB |
|
Before Width: | Height: | Size: 906 KiB |
|
Before Width: | Height: | Size: 581 KiB |
|
Before Width: | Height: | Size: 498 KiB |
|
Before Width: | Height: | Size: 509 KiB |
|
Before Width: | Height: | Size: 813 KiB |
|
Before Width: | Height: | Size: 492 KiB |
|
Before Width: | Height: | Size: 549 KiB |
|
Before Width: | Height: | Size: 919 KiB |
|
Before Width: | Height: | Size: 891 KiB |
|
Before Width: | Height: | Size: 973 KiB |
|
Before Width: | Height: | Size: 410 KiB |
|
Before Width: | Height: | Size: 486 KiB |
|
Before Width: | Height: | Size: 478 KiB |
|
Before Width: | Height: | Size: 435 KiB |
|
Before Width: | Height: | Size: 546 KiB |
|
Before Width: | Height: | Size: 482 KiB |
|
Before Width: | Height: | Size: 601 KiB |
|
Before Width: | Height: | Size: 390 KiB |
|
Before Width: | Height: | Size: 514 KiB |
|
Before Width: | Height: | Size: 446 KiB |
|
Before Width: | Height: | Size: 391 KiB |
|
Before Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 480 KiB |
|
Before Width: | Height: | Size: 536 KiB |
|
Before Width: | Height: | Size: 275 KiB |
|
Before Width: | Height: | Size: 479 KiB |
|
Before Width: | Height: | Size: 278 KiB |
|
Before Width: | Height: | Size: 613 KiB |
|
Before Width: | Height: | Size: 373 KiB |
|
Before Width: | Height: | Size: 660 KiB |
|
Before Width: | Height: | Size: 454 KiB |
|
Before Width: | Height: | Size: 428 KiB |
|
Before Width: | Height: | Size: 578 KiB |
|
Before Width: | Height: | Size: 589 KiB |
|
Before Width: | Height: | Size: 452 KiB |
|
Before Width: | Height: | Size: 428 KiB |
|
Before Width: | Height: | Size: 603 KiB |
|
Before Width: | Height: | Size: 642 KiB |
|
Before Width: | Height: | Size: 688 KiB |
|
Before Width: | Height: | Size: 727 KiB |
|
Before Width: | Height: | Size: 782 KiB |
|
Before Width: | Height: | Size: 656 KiB |
|
Before Width: | Height: | Size: 898 KiB |
|
Before Width: | Height: | Size: 980 KiB |
|
Before Width: | Height: | Size: 380 KiB |
|
Before Width: | Height: | Size: 666 KiB |
|
Before Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 314 KiB |
|
Before Width: | Height: | Size: 612 KiB |
|
Before Width: | Height: | Size: 624 KiB |
|
Before Width: | Height: | Size: 559 KiB |
|
Before Width: | Height: | Size: 371 KiB |
|
Before Width: | Height: | Size: 260 KiB |
|
Before Width: | Height: | Size: 616 KiB |
|
Before Width: | Height: | Size: 551 KiB |
|
Before Width: | Height: | Size: 556 KiB |
|
Before Width: | Height: | Size: 842 KiB |
|
Before Width: | Height: | Size: 696 KiB |
|
Before Width: | Height: | Size: 766 KiB |
|
Before Width: | Height: | Size: 439 KiB |
|
Before Width: | Height: | Size: 750 KiB |
|
Before Width: | Height: | Size: 760 KiB |
|
Before Width: | Height: | Size: 678 KiB |
|
Before Width: | Height: | Size: 746 KiB |
|
Before Width: | Height: | Size: 638 KiB |
|
Before Width: | Height: | Size: 640 KiB |
|
Before Width: | Height: | Size: 654 KiB |
|
Before Width: | Height: | Size: 835 KiB |
|
Before Width: | Height: | Size: 782 KiB |
|
Before Width: | Height: | Size: 742 KiB |
|
Before Width: | Height: | Size: 762 KiB |