1
1
mirror of https://git.gay/DeltaStudio/PufokReactApp.git synced 2025-07-17 21:32:24 +07:00

major site visual updates!

This commit is contained in:
pufok 2025-07-01 15:23:55 +03:00
parent 484a3c7453
commit 6a7c05900d
5 changed files with 125 additions and 22 deletions

3
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,3 @@
{
"editor.fontFamily": "JetBrains Mono"
}

View File

@ -1,14 +1,15 @@
:root { :root {
--main-accent-color: #f5844f; --main-accent-color: #f5844f;
--link-hover-color: #ee7f4b; --main-primary-color: #f1d1be;
--main-secondary-color: #140f10;
} }
body { body {
font-family: jetbrains-mono, monospace; font-family: jetbrains-mono, monospace;
margin: 0; margin: 0;
padding: 0; padding: 0;
background: #140f10; background: var(--main-secondary-color);
color: rgb(241, 209, 190); color: var(--main-primary-color);
} }
.app { .app {
@ -21,12 +22,21 @@ body {
padding: 1rem; padding: 1rem;
} }
.pufok-home-icon {
width: 8vw;
align-items: center;
display: flex;
justify-content: center;
margin-left: auto;
margin-right: auto;
}
.navbar { .navbar {
display: flex; /* Используем Flexbox */ display: flex; /* Используем Flexbox */
justify-content: space-between; /* Размещаем элементы по краям */ justify-content: space-between; /* Размещаем элементы по краям */
align-items: center; /* Выравниваем по вертикали */ align-items: center; /* Выравниваем по вертикали */
padding: 1rem; /* Внутренний отступ */ padding: 1rem; /* Внутренний отступ */
padding-top: 2rem; padding-top: 1rem;
list-style: none; /* Убираем маркеры списка */ list-style: none; /* Убираем маркеры списка */
margin: 0; /* Убираем внешние отступы */ margin: 0; /* Убираем внешние отступы */
} }
@ -50,27 +60,30 @@ body {
.language { .language {
font-size: 0.9rem; /* Размер шрифта */ font-size: 0.9rem; /* Размер шрифта */
color: var(--accent-color); /* Акцентный цвет */ color: var(--main-accent-color); /* Акцентный цвет */
cursor: pointer; /* Курсор при наведении */ cursor: pointer; /* Курсор при наведении */
} }
.navbar a { .navbar a {
color: var(--main-accent-color); color: var(--main-accent-color);
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
text-decoration: none; text-decoration: none;
color: #efc3ea; color: var(--main-secondary-color);
gap: 0.5rem; gap: 0.5rem;
transition: all 0.3s ease; transition: all 0.3s ease;
border-radius: 8px; border-radius: 8px;
border: 2px solid var(--main-accent-color);
background-color: var(--main-accent-color); background-color: var(--main-accent-color);
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
position: relative; position: relative;
} }
.navbar a:hover { .navbar a:hover {
color: var(--link-hover-color); /* Цвет ссылок при наведении */ color: var(--main-accent-color);
background-color: var(--main-secondary-color);
border-color: var(--main-accent-color);
} }
.footer { .footer {
@ -108,10 +121,36 @@ body {
} }
.pride-h { .pride-h {
color: #ff69b4;
display: flex; /* Используем Flexbox для inline-размещения */ display: flex; /* Используем Flexbox для inline-размещения */
align-items: center; /* Выравниваем элементы по центру по вертикали */ align-items: center; /* Выравниваем элементы по центру по вертикали */
gap: 0.5rem; /* Отступ между текстом и изображением */ gap: 0.5rem; /* Отступ между текстом и изображением */
justify-content: center; /* Центрируем содержимое по горизонтали */ justify-content: center; /* Центрируем содержимое по горизонтали */
animation: rainbow 5s infinite ease-in-out;
}
@keyframes rainbow {
0% {
color: rgb(205, 64, 64);
}
17% {
color: rgb(239, 160, 70);
}
33% {
color: rgb(237, 237, 83);
}
50% {
color: rgb(90, 179, 90);
}
66% {
color: rgb(65, 65, 231);
}
83% {
color: rgb(68, 36, 90);
}
100% {
color: rgb(205, 64, 64);
}
} }
/* КОНТАКТЫ! */ /* КОНТАКТЫ! */
@ -238,4 +277,4 @@ body {
.webring-links a:hover { .webring-links a:hover {
color: var(--link-hover-color); color: var(--link-hover-color);
} }

View File

@ -0,0 +1,39 @@
import { useState, useEffect } from 'react';
/**
* Хук для проверки сезонных событий
* @param {Object} options - Настройки события
* @param {number} options.month - Месяц (011)
* @param {number} [options.startDay] - День начала (опционально)
* @param {number} [options.endDay] - День окончания (опционально)
* @returns {boolean} - Флаг, активно ли событие сейчас
*/
function useSeasonalEvent(options) {
const [isActive, setIsActive] = useState(false);
useEffect(() => {
const today = new Date();
const currentMonth = today.getMonth();
const currentDay = today.getDate();
if (options.month !== undefined && currentMonth !== options.month) {
setIsActive(false);
return;
}
if (
options.startDay !== undefined &&
options.endDay !== undefined &&
(currentDay < options.startDay || currentDay > options.endDay)
) {
setIsActive(false);
return;
}
setIsActive(true);
}, [options]);
return isActive;
}
export default useSeasonalEvent;

View File

@ -0,0 +1,25 @@
import React, { useContext } from 'react';
import useSeasonalEvent from '../SeasonalEvents.js';
import { LanguageContext } from '../../context/LanguageContext.js';
function PrideHeader() {
const { language, translations } = useContext(LanguageContext);
const isPrideMonth = useSeasonalEvent({ month: 5 });
return (
<div>
{isPrideMonth && (
<h1 className="pride-h">
{translations[language].pages.home.h2}{' '}
<img
className="pride"
src="https://pufok.gay/PublicResources/pride.png"
alt="pride"
/>
</h1>
)}
</div>
);
}
export default PrideHeader;

View File

@ -1,4 +1,5 @@
import React, { useContext } from 'react'; import React, { useContext } from 'react';
import Pride from '../components/events/Pride.js';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import { LanguageContext } from '../context/LanguageContext.js'; import { LanguageContext } from '../context/LanguageContext.js';
@ -7,15 +8,16 @@ function Home() {
return ( return (
<div className="page home"> <div className="page home">
<h1 className='header'>{translations[language].pages.home.h1}</h1> <img className="pufok-home-icon" src="https://pufok.gay/PublicResources/logo512x.png" alt="pufok" />
<p className='paragraph'>{translations[language].pages.home.p1}</p> <h1 className="header">{translations[language].pages.home.h1}</h1>
<p className='paragraph'> <p className="paragraph">{translations[language].pages.home.p1}</p>
<p className="paragraph">
{translations[language].pages.home.p2.p21}{' '} {translations[language].pages.home.p2.p21}{' '}
<Link to="/about">{translations[language].pages.home.p2.p22}</Link> <Link to="/about">{translations[language].pages.home.p2.p22}</Link>
{translations[language].pages.home.p2.p23}{' '} {translations[language].pages.home.p2.p23}{' '}
<Link to="/contact">{translations[language].pages.home.p2.p24}!</Link> <Link to="/contact">{translations[language].pages.home.p2.p24}!</Link>
</p> </p>
<p className='paragraph'> <p className="paragraph">
{translations[language].pages.home.p3}{' '} {translations[language].pages.home.p3}{' '}
<a <a
href="https://git.gay/DeltaStudio/PufokReactApp/" href="https://git.gay/DeltaStudio/PufokReactApp/"
@ -26,16 +28,11 @@ function Home() {
git.gay git.gay
</a> </a>
</p> </p>
<p className='paragraph'>{translations[language].pages.home.p4}: 20.05.2025 4:11 UTC +3</p> <p className="paragraph">
{translations[language].pages.home.p4}: 01.07.2025 6:10 UTC +3
</p>
<br /> <br />
<h1 className="pride-h"> <Pride />
{translations[language].pages.home.h2}{' '}
<img
className="pride"
src="https://pufok.gay/PublicResources/pride.png "
alt="pride2025"
/>
</h1>
</div> </div>
); );
} }