food-market/docs/pos-design.md
nns 61985c1062
Some checks are pending
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
docs(pos-ui): сверка с эталон-макетом + финальные скриншоты + Windows 11
- docs/pos-design/: эталон-макет (pos-mockup.html + mockup-*.png) и сверка
  «макет | касса» рядом — compare-sale.png, compare-payment.png (данные те же:
  4 позиции, 3 362 ₸, получено 5 000 → сдача 1 638 ₸). Расхождений
  выравнивания/размеров > 4px нет.
- Перегенерированы скриншоты «Стало» (1920×1080 + 1366×768) и галерея.
- Реальное окно Windows 11 (software-рендер на VM): экран продажи и оплаты
  (docs/pos-screenshots/windows/windows11-{sale,payment}.png).
- Обновлены docs/pos-design.md (раздел сверки) и docs/pos-ui-progress.md (итог).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-08 14:35:31 +05:00

70 lines
5.5 KiB
Markdown
Raw Permalink 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.

# Касса food-market — дизайн-система (светлая тема)
Подход: чисто, светло, крупно, ничего лишнего (как Square POS / Loyverse / Poster).
Всё строится на токенах из одного места — `Styles/Tokens.axaml` (ResourceDictionary).
Тёмная тема — те же токены, другой набор значений (опция в настройках, не по умолчанию).
## Палитра (токены)
| Токен | Светлая | Назначение |
|---|---|---|
| `PosBg` | #F4F6F5 | фон приложения |
| `PosCard` | #FFFFFF | карточки, полосы, модальные |
| `PosBorder` | #E3E8E6 | рамки, разделители |
| `PosText` | #0F1F17 | основной текст |
| `PosтатText2` / `PosTextMuted` | #5F6F68 | вторичный текст |
| `PosBrand` | #16A34A | бренд/главное действие (зелёный Food Market) |
| `PosBrandHover` | #15803D | hover |
| `PosBrandPressed` | #166534 | pressed |
| `PosDanger` | #DC2626 | опасное (Очистить/Удалить) — только контур |
| `PosWarn` | #D97706 | предупреждение (смена закрыта, нет связи) — янтарный |
| `PosBrandSoft` | #DCFCE7 | мягкий зелёный фон (чипы, успех) |
| `PosWarnSoft` | #FEF3C7 | мягкий янтарный фон |
Контраст текста к фону ≥ WCAG AA (PosText на PosCard/PosBg — ~14:1; PosTextMuted — ~5:1).
## Типографика (Inter)
- ИТОГО: 44–56 pt, Bold.
- Суммы строк: 18–20 pt, SemiBold, **tabular** (моноширинные цифры — колонки не прыгают).
- Названия товаров: 17–18 pt.
- Служебное/подписи: 13–14 pt, PosTextMuted.
- Моноширинные цифры: `<TextBlock Classes="num">` → FontFeatures "tnum=1" / FontFamily с tabular.
## Форма и ритм
- Скругления: карточки/кнопки 12–14, чипы 999 (капсула).
- Тени: мягкие у карточек (BoxShadow 0 1 3 #00000014, 0 4 12 #00000010).
- Сетка отступов: шаг 8 px (8/12/16/24).
- Кнопки: высота ≥ 48 px (сенсор ≥ 44). Главная — заливка PosBrand; вторичные —
контур PosBorder на белом; опасная — контур PosDanger (без заливки).
## Компоненты (классы стилей)
- `Button.primary` — зелёная заливка, белый текст, крупная.
- `Button.ghost` — белая, контур PosBorder, текст PosText (вторичные действия).
- `Button.danger` — белая, контур PosDanger, текст PosDanger (Очистить/Удалить).
- `Button.key` — клавиша цифровой клавиатуры/степпера.
- `Border.card` — белая карточка со скруглением и тенью.
- `Border.chip` / `Border.chip.ok` / `.warn` — капсулы статуса.
- `TextBox.search` — поле поиска/скана с иконкой.
## Тёмная тема (опция)
Те же имена токенов, тёмные значения (PosBg #0F1713, PosCard #15201B, PosText #E8EFEA…),
переключается через `RequestedThemeVariant` + подмену словаря. По умолчанию — светлая.
## Эталон-макет (Mac-Claude, 08.10)
Верстать ТОЧНО по макету: `docs/pos-design/pos-mockup.html` (все размеры/цвета/отступы в CSS)
+ отрисовки `mockup-sale-1920x1080.png`, `mockup-payment-1920x1080.png`. Сравнение
«макет | касса» — `docs/pos-design/compare-*.png` (расхождения выравнивания > 4px — править).
Ключевые размеры из макета: app rows 64/1fr/40; main cols 1fr/440, gap 16, padding 16/24;
search h64 border 2px green; избранное 6 плиток h84; корзина cols «1fr 200 160 56», thead h48,
строка h76, выбранная — зелёный акцент слева; степпер 44/1fr/44 слитный; правая панель p24 gap16,
ИТОГО green-soft, блок «Последний чек/Чеков за смену», pay h76; grid2 кнопки h52 с иконками и kbd;
модалка 880, pad 3×4 по 72, quick 3×2, seg 3 в серой подложке. Иконки — векторные (не эмодзи).
### Сверка «макет | касса»
`dotnet run --project src/food-market.pos -- --compare` складывает эталон и наш рендер
рядом (`CompareRunner`, SkiaSharp): `compare-sale.png`, `compare-payment.png`. Данные те же,
что в макете — 4 позиции, подытог 3 422 ₸, скидка −60 ₸, итог 3 362 ₸, получено 5 000 → сдача 1 638 ₸.
Результат сверки на 08.10: расхождений выравнивания/размеров > 4 px нет — сетка, колонки корзины,
степперы, правая панель, клавиатура, модалка и сегменты совпадают с эталоном. Оплата снимается
поверх затемнённого экрана продажи (как в макете), сегменты — векторные иконки, активный — белый.