mail/web_template/STYLE_PROMPT.md
deeily 5024bf9a8d init: full mail stack — phases 0..8 (web client, admin, IMAP/SMTP,
sieve, search, sessions, dramatiq, deploy/install, ELK, monitoring)
2026-04-29 16:30:43 +03:00

129 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Prompt для копирования стиля dvr_admin
Скопируй этот промпт в начало разговора с LLM (Claude / ChatGPT / другое), когда хочешь сделать новый веб-интерфейс в том же визуальном стиле — **независимо от стека** (React, Vue, Svelte, Next, Vite, Django, Flask, Rails, PHP, статические HTML).
---
## PROMPT (копировать целиком)
Сделай веб-интерфейс в следующем визуальном стиле. Это минималистичный "Notion-like" admin UI — плоский, тонкие 0.5px границы, мягкие цвета, 13px базовый размер, много whitespace.
### Layout
**Shell**: `.shell` (`display: flex`), внутри `.sidebar` (фиксированная слева) + `.main` (контент).
**Sidebar** 196px × 100vh, фиксированная (`position: fixed`), сворачивается в 44px кнопкой (состояние в localStorage). Внутри сверху вниз:
- `.logo` (44px, цветная `.logo-dot` 8px + название + кнопка collapse)
- `.nav-section` (uppercase 11px tertiary) → `.nav-item` (SVG иконка 15px opacity 0.6 + label). Активный — `.nav-item.active` с `background-secondary` и `font-weight: 500`.
- Опционально `.nav-divider` + ещё секция
- `.nav-bot` внизу (username + theme-toggle)
**Main** (`flex: 1`, `margin-left: 196px`): сверху `.topbar` 44px sticky с `<h1>` 15px weight 500, снизу `.content` padding 20px.
**Mobile** (< 768px): sidebar + topbar скрываются, появляется `.mob-nav` снизу (54px, fixed, иконки 20px + label 10px). `.metrics` становится 2 колонки вместо 4.
### Цветовая система (CSS-переменные на `:root`)
```css
--color-background-primary:#ffffff; /* карточки, sidebar */
--color-background-secondary:#f7f6f3; /* hover, inputs, th */
--color-background-tertiary:#eeece5; /* body */
--color-background-info:#e6f1fb; /* selected row / highlight */
--color-border-tertiary:#e2e0d8; /* тонкие линии */
--color-border-secondary:#ccc9be; /* input border */
--color-text-primary:#1a1916;
--color-text-secondary:#6b6960;
--color-text-tertiary:#999790;
--color-text-danger:#c0392b;
--border-radius-md:6px;
--border-radius-lg:10px;
--accent:#378add;
```
### Тёмная тема
`body.dark` переопределяет переменные: primary `#1c1c1e`, secondary `#2c2c2e`, tertiary `#111113`, info `#0d2a45`, text-primary `#f0ede6`, text-secondary `#a0a09a`. Badge-цвета инвертируются отдельно.
Toggle кнопка в nav-bot + localStorage `app-theme`. SVG SUN MOON.
### Компоненты (CSS-классы)
- **`.card`** `background-primary`, `border: 0.5px solid border-tertiary`, `border-radius-lg` (10px), margin-bottom 16px. Внутри `.card-head` (padding 12/16, border-bottom) + `.card-body` (padding 16).
- **`.metrics`** CSS grid 4 колонки (2 mobile), внутри `.metric` с лейблом (11px uppercase tertiary), значением (22px weight 500), подписью (11px secondary).
- **`.tbl`** `width: 100%`, `border-collapse`. `th`: 11px uppercase tertiary на `background-secondary`, padding 8/14. `td`: padding 9/14. `tr:hover td` `background-secondary`. `tr.selected td` `background-info`.
- **`.btn`** 12px, padding 5/10, border 0.5px, `border-radius-md`. Варианты:
- `.btn-primary` inverted (text-primary фон, primary текст)
- `.btn-danger` (красный), `.btn-success` (зелёный)
- `.btn-sm` 11px padding 3/8
- **`.badge`** inline 11px, `border-radius: 20px`. Цвета: green/red/gray/blue/amber (пара background/color, инвертируется в dark).
- **`.dot`** inline 7×7 кружок для статусов (green/red/amber/gray).
- **`.form-row`** `label` uppercase 11px tertiary, `input/select/textarea` width 100%, padding 7/10, focus border `--accent`, фон `background-primary`.
- **`.search`** компактный input 200px для топбара.
- **`.overlay.open`** + **`.modal`** modal dialog, 420px max-width, `border-radius-lg`, shadow. `.modal-head/body/foot` с border между ними.
- **`.flash`** баннер сверху content, `.flash-ok` (зелёный) / `.flash-err` (красный).
### Типография
- `font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif`
- Базовый размер **13px**
- Подписи/header-cells/form labels **11px uppercase** letter-spacing 0.040.05em
- Значения метрик 22px weight 500 (мягкий bold, не 700)
- Заголовки `<h1>` 15px weight 500
### Детали
- Все borders **0.5px** (не 1px) ключевая деталь эстетики.
- Border-radius: инпуты/кнопки `--border-radius-md (6px)`, карточки/модали `--border-radius-lg (10px)`.
- Padding/gap кратны 4: `4, 8, 12, 16, 20`.
- SVG иконки **inline** (`viewBox="0 0 16 16"`, `stroke: currentColor`, `stroke-width: 1.5`, `fill: none`). **НЕ** используй Font Awesome, Material Icons, Heroicons через `<img>`.
- Тени только у модали (`0 8px 32px rgba(0,0,0,.18)`).
- Транзишены 0.2s ease на sidebar/main-margin, 0.1s на hover.
### JS поведения
- Sidebar collapse с сохранением в `localStorage.app-sb`
- Theme toggle с сохранением в `localStorage.app-theme`
- Modal open/close через `.overlay.open` + Escape закрывает всё
### Что НЕ делать
- НЕ использовать фреймворки (bootstrap, tailwind, material-ui) весь стиль через эту CSS-систему
- НЕ использовать 1px borders только 0.5px
- НЕ использовать жирный текст >500 weight
- НЕ использовать большие padding (> 24px) — дизайн компактный
- НЕ использовать яркие акценты кроме `--accent` (focus) и `--color-text-danger`
### Референс
Полный рабочий пример в `doc/web_template/`:
- `styles.css` — все стили (можно копировать целиком)
- `app.js` — JS для theme/sidebar/modal
- `index.html` — демо со всеми компонентами
Просто скопируй `styles.css` + `app.js` в свой проект, подключи их, и повторяй HTML-разметку из `index.html` для новых страниц. Все компоненты — обычные CSS-классы, работают в любом фреймворке / шаблонизаторе.
---
## Использование
### Статический сайт / любой framework
```html
<link rel="stylesheet" href="styles.css">
<script src="app.js"></script>
```
Затем пиши HTML с этими классами (`.shell`, `.sidebar`, `.card`, `.btn`, и т.д.).
### React / Vue / Svelte
Положи `styles.css` в `src/` и импортируй: `import './styles.css'`. JS из `app.js` можно либо так же подключать, либо переписать на хуки — семантика классов не изменится.
### Django / Flask / Rails / PHP
Положи `styles.css` + `app.js` в `static/` и ссылайся на них из шаблонов.
### AI-ассистент
Прикрепи содержимое `styles.css` к разговору вместе с промптом выше — LLM будет создавать новый HTML/компоненты в том же стиле.