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(); - +