64 lines
6.7 KiB
Markdown
64 lines
6.7 KiB
Markdown
# AGENTS.md
|
||
|
||
Common Ground — editorial impact/NKO шаблон: сохраняй newsroom-структуру, публичный ledger, кампании с бюджетом, истории людей, волонтерские смены и проверяемые документы.
|
||
|
||
## Project Specifics
|
||
|
||
- Кампании, метрики, ledger, истории, смены, документы, партнеры и бюджет описаны в `src/entities/site-content.ts`.
|
||
- `src/app` — только route wrappers; композиция каждой страницы живёт в отдельном widget (`src/widgets/<page>-page.tsx`). См. File Map.
|
||
- Mock-пожертвования держи в `src/features/*/ui`; не добавляй реальные платежи, CRM, donor accounts или API без запроса.
|
||
- Не делай generic charity landing: каждая страница должна усиливать доверие через цель, прогресс, документы, ответственного, место или конкретную смену.
|
||
- Избегай мягкой декоративной благотворительности; стиль должен ощущаться как редакция, полевой desk и публичная отчетность.
|
||
- Проверка после правок: `pnpm lint` и `pnpm build`.
|
||
|
||
## Design System
|
||
|
||
Источник токенов — `src/app/globals.css` (`@theme` + `:root`/`.dark`). Шрифт — Noto Serif (`--font-commonground`), один serif-гарнитур на sans и mono, с включёнными `ss01`/`cv01`/`tnum` (табличные цифры для ledger). Работай через семантические классы Tailwind (`bg-card`, `text-foreground`, `text-primary`, `border-foreground`), не хардкодь hex/oklch.
|
||
|
||
Личность: **newsroom / полевой выпуск** — тёплый газетный кремовый фон с лёгкой бумажной зернистостью, тёмно-коричневый «ink» как текст и границы, глубокий teal primary как «редакционный» сигнал, мягкий зелёный secondary (надежда/поле) и тёплый терракотовый accent. Это не charity-пастель: ощущение печатной редакции и публичной отчётности.
|
||
|
||
| Роль | Light | Характер |
|
||
|---|---|---|
|
||
| `background` | газетный кремовый (oklch 0.96 0.018 83) | бумажный фон с зерном-сеткой |
|
||
| `foreground` | тёмно-коричневый ink (oklch 0.17 0.025 65) | текст + **границы** (`border-2 border-foreground`) |
|
||
| `primary` | глубокий teal (oklch 0.43 0.095 218) | акценты, цифры ledger, кнопки, иконки |
|
||
| `secondary` | мягкий зелёный (oklch 0.83 0.09 145) | бейджи региона/роли, hero-glow |
|
||
| `muted` / `muted-foreground` | тёплый серо-бежевый | вторичный текст |
|
||
| `accent` | терракота (oklch 0.73 0.105 50) | редкий тёплый сигнал |
|
||
| `card` | почти белый кремовый | карточки кампаний, ledger, документы |
|
||
|
||
Узнаваемые приёмы (держи их, это и есть «лицо» проекта):
|
||
- **Серифная типографика:** Noto Serif + `font-black` — газетные заголовки, очень плотный `leading` (`leading-[0.88]`/`leading-[0.96]`), крупные размеры (до `text-8xl`). Тело текста тоже serif.
|
||
- **Толстые границы:** `border-2 border-foreground`, `divide-y-2 divide-foreground` — карточки, таблицы ledger и доски смен очерчены, а не растворены.
|
||
- **Hard offset shadow:** `shadow-[8px_8px_0_var(--foreground)]` на ключевых aside-блоках (hero-выпуск, партнёрская проверка).
|
||
- **Double-rule плашки:** утилита `.impact-rule` — двойная типографская линейка сверху/снизу для рубрик-капителей (`text-sm font-black uppercase`).
|
||
- **Газетная подложка:** `.newsprint` — тонкая сетка-растр для hero/title-секций; глобальный фон body тоже несёт зелёный radial-glow + вертикальный растр.
|
||
- **Скромный radius:** `--radius` = 0.18rem; элементы почти прямоугольные, но не абсолютно острые.
|
||
- **Ledger-first доверие:** табличные цифры (`tnum`), прогресс-бары целей и процентов бюджета, проверяемые блоки документов.
|
||
|
||
Do / Don't:
|
||
- **Do:** держи serif-заголовки, толстые границы, double-rule рубрики, публичный ledger и прогресс-бары; цифры — через `text-primary`.
|
||
- **Don't:** sans-заголовки, мягкие тени, скруглённые «pill»-карточки, пастельные градиенты, generic-charity hero — это ломает newsroom-личность.
|
||
|
||
## File Map
|
||
|
||
| Route | Widget |
|
||
|---|---|
|
||
| `/` | `src/widgets/home-page.tsx` (`HomePage`) |
|
||
| `/campaigns` | `src/widgets/campaigns-page.tsx` (`CampaignsPage`) |
|
||
| `/campaigns/clean-water` | `src/widgets/campaign-detail-page.tsx` (`CampaignDetailPage`) |
|
||
| `/impact` | `src/widgets/impact-page.tsx` (`ImpactPage`) |
|
||
| `/stories` | `src/widgets/stories-page.tsx` (`StoriesPage`) |
|
||
| `/volunteer` | `src/widgets/volunteer-page.tsx` (`VolunteerPage`) |
|
||
| `/transparency` | `src/widgets/transparency-page.tsx` (`TransparencyPage`) |
|
||
|
||
Переиспользуемые блоки:
|
||
- `src/widgets/site-shell.tsx` — `SiteShell` (header + nav + footer, обёртка всех страниц).
|
||
- `src/widgets/campaign-card.tsx` — `CampaignCard` (Home featured + Campaigns grid).
|
||
- `src/widgets/ledger-table.tsx` — `LedgerTable` (Home + Impact).
|
||
- `src/shared/ui/editorial-title.tsx` — `EditorialTitle` (заголовочная секция внутренних страниц: Campaigns, Impact, Stories, Volunteer, Transparency).
|
||
- `src/shared/lib/campaign.ts` — `formatRub`, `campaignProgress` (CampaignCard + Campaign Detail).
|
||
- `src/features/donation-panel/ui/donation-panel.tsx` — mock-панель пожертвования.
|
||
|
||
Одноразовые блоки колоцированы со своей страницей: `MetricCard` в `impact-page.tsx`, `StoryCard` в `stories-page.tsx`, `DocumentCard` в `transparency-page.tsx`.
|