diff --git a/src/components/BrandMark.astro b/src/components/BrandMark.astro
new file mode 100644
index 0000000..0dd9bf6
--- /dev/null
+++ b/src/components/BrandMark.astro
@@ -0,0 +1,16 @@
+---
+// Декоративный логотип: две зеркальные арки — «иные отражения».
+const { size = 32 } = Astro.props;
+---
+
diff --git a/src/consts.ts b/src/consts.ts
index e6f7b85..b367517 100644
--- a/src/consts.ts
+++ b/src/consts.ts
@@ -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';
* архив 2009–2015 не залился в форумы одной волной, отрезаем по 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 = {
+ '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/' },
];
diff --git a/src/layouts/BaseLayout.astro b/src/layouts/BaseLayout.astro
index 64d3b5c..a99c2cd 100644
--- a/src/layouts/BaseLayout.astro
+++ b/src/layouts/BaseLayout.astro
@@ -1,6 +1,7 @@
---
import '../styles/global.css';
import { SITE_TITLE, SITE_DESCRIPTION, SITE_URL, SITE_LANG, MAIN_NAV } from '../consts';
+import BrandMark from '../components/BrandMark.astro';
interface Props {
title?: string;
@@ -21,6 +22,7 @@ const year = new Date().getFullYear();
{pageTitle}
+
@@ -35,14 +37,16 @@ const year = new Date().getFullYear();
-
+