feat(design): добавлен характер — hero, цветные миры, карточки с акцентами

- Hero на главной: большой заголовок в градиенте, мистический тэглайн,
  мета-плашка «N миров / N публикаций / N лет онлайн»
- Декоративный фон: звёздная россыпь + радиальные градиенты акцента
  (CSS-only, без картинок)
- Карточки постов с цветовой полосой по категории + hover-эффект
- Цветные теги категорий с glow-точкой
- «Миры и проекты» вместо «Форумы»: 8 карточек с тэгом, названием,
  описанием каждой вселенной и цветовой кодировкой
- Single post: буквица в первом абзаце, центрированный заголовок
  в градиенте, тег категории сверху
- BrandMark SVG (две зеркальные арки) + липкая шапка с blur
- Cormorant Garamond вместо Lora — больше серифной выразительности
- CATEGORY_COLORS в consts.ts (расширяемая палитра)
- Mobile-адаптация (clamp заголовки, перенос меты, уменьшенные паддинги)
This commit is contained in:
2026-05-21 01:22:13 +03:00
parent 0c3e248ccc
commit 9a6f07d302
7 changed files with 631 additions and 179 deletions

View File

@@ -3,6 +3,9 @@ export const SITE_DESCRIPTION = 'Ролевой проект по совреме
export const SITE_URL = 'https://anotherreflections.ru';
export const SITE_AUTHOR = 'Иные Отражения';
export const SITE_LANG = 'ru-RU';
export const SITE_FOUNDED = 2006;
export const HERO_TAGLINE = 'Открываем двери в миры, где границы реальности тают, а свет встречается с тенью';
/**
* RSS-фид отдаёт только посты с pubDate >= этой даты.
@@ -10,27 +13,100 @@ export const SITE_LANG = 'ru-RU';
* архив 20092015 не залился в форумы одной волной, отрезаем по cutover.
* Изменить дату → перезапустить build.
*/
export const RSS_CUTOFF = new Date("2026-05-20T00:00:00+03:00");
export const RSS_CUTOFF = new Date('2026-05-20T00:00:00+03:00');
/** Сколько постов в RSS-фиде максимум (после фильтра cutoff). */
export const RSS_LIMIT = 30;
/** Внешние ссылки на форумы и связанные проекты. */
export const FORUMS = [
{ name: 'Главный форум', url: 'https://forum.anotherreflections.ru/' },
{ name: 'Сумерки Дозоров', url: 'https://sumerki.anotherreflections.ru/' },
{ name: 'Ренессанс', url: 'https://renessans.anotherreflections.ru/' },
{ name: 'Амбер', url: 'https://amber.anotherreflections.ru/' },
{ name: 'Киндрет', url: 'https://kindret.anotherreflections.ru/' },
{ name: 'Warhammer 40k', url: 'https://warhammer40k.anotherreflections.ru/' },
{ name: 'Над бездной', url: 'https://bezdna.anotherreflections.ru/' },
{ name: 'Глубина', url: 'https://deep.anotherreflections.ru/' },
/**
* Цвета категорий — для тэгов в ленте и подсветки карточек.
* Если slug отсутствует в этом мапе, используется --accent по умолчанию.
*/
export const CATEGORY_COLORS: Record<string, string> = {
'obshhie-novosti': 'var(--c-news)',
'tech_news': 'var(--c-tech)',
'reklama': 'var(--c-ads)',
'nashi-druzya': 'var(--c-friends)',
'rolgames': 'var(--c-roleplay)',
'nad-bezdnoj': 'var(--c-bezdna)',
'glubina': 'var(--c-glubina)',
'fan-art': 'var(--c-fanart)',
'sumerki-dozorov': 'var(--c-sumerki)',
'klub-lukyanenko': 'var(--c-lukyanenko)',
};
/** Миры (старые «Форумы и проекты») — карточки на главной с тематикой и цветом. */
export type World = {
name: string;
tag: string;
desc: string;
url: string;
color: string;
};
export const WORLDS: World[] = [
{
name: 'Сумерки Дозоров',
tag: 'Дозоры · С. Лукьяненко',
desc: 'Главная игровая вселенная проекта. Иные, Свет и Тьма, Договор.',
url: 'https://sumerki.anotherreflections.ru/',
color: 'var(--c-sumerki)',
},
{
name: 'Амбер',
tag: 'Янтарное Королевство · Р. Желязны',
desc: 'Истинный мир, его Отражения и принцы крови с непростой семейной историей.',
url: 'https://amber.anotherreflections.ru/',
color: 'var(--c-amber)',
},
{
name: 'Киндрет',
tag: 'Кровные братья · А. Пехов',
desc: 'Современная Москва глазами вампирских домов и их теневой политики.',
url: 'https://kindret.anotherreflections.ru/',
color: 'var(--c-kindret)',
},
{
name: 'Ренессанс',
tag: 'Историческая фантастика',
desc: 'Эпоха возрождения с фантастическими допущениями.',
url: 'https://renessans.anotherreflections.ru/',
color: 'var(--c-roleplay)',
},
{
name: 'Над бездной',
tag: 'Тёмная мистика',
desc: 'Тонкая грань между обыденным и потусторонним. IPB 4.x.',
url: 'https://bezdna.anotherreflections.ru/',
color: 'var(--c-bezdna)',
},
{
name: 'Глубина',
tag: 'Дозоры · Глубина',
desc: 'Параллельный пласт реальности из мира Дозоров. IPB 4.x.',
url: 'https://deep.anotherreflections.ru/',
color: 'var(--c-glubina)',
},
{
name: 'Warhammer 40k',
tag: 'Сорок первое тысячелетие',
desc: 'Только война. Игровое сообщество по вселенной Games Workshop.',
url: 'https://warhammer40k.anotherreflections.ru/',
color: 'var(--c-roleplay)',
},
{
name: 'Главный форум',
tag: 'Общая площадка',
desc: 'Архивный форум проекта со всеми мирами в одном месте.',
url: 'https://forum.anotherreflections.ru/',
color: 'var(--c-news)',
},
];
/** Главное меню. */
export const MAIN_NAV = [
{ label: 'Главная', href: '/' },
{ label: 'Новости', href: '/' },
{ label: 'О нас', href: '/o-nas/' },
{ label: 'Наши друзья', href: '/nashi-druzya/' },
{ label: 'Форумы', href: '#forums' },
{ label: 'Миры', href: '/#worlds' },
{ label: 'Друзья', href: '/nashi-druzya/' },
];