Задача 041: favicon из логотипа бренда
web/favicon.svg повторяет .brand-logo шапки: синий скруглённый квадрат с белым глобусом (геометрия I.globe без изменений, пропорции логотипа), подключён в index.html. Итог 039 дополнен результатом pytest (17 passed) после включения учётной записи admin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
7d998066f5
commit
9301069c29
6 files changed
+56
-2
No files matched your search
@@ -15,12 +15,11 @@
|
||||
| `README.md` | Модель данных (устройства), «Интерфейс», миграции `0001`–`0016`, строка 039 |
|
||||
|
||||
## Проверки
|
||||
- `pytest -q` — 17 passed, включая `test_device_status_on_address` (прогон после изменения 041, когда учётная запись `admin` снова включена).
|
||||
- Миграция 0016 применена, `alembic check` чисто, откат до 0015 и повторный upgrade — без ошибок; 3 существующих устройства — `active`.
|
||||
- Статус в API — строка (`"maintenance"`), не представление enum (проверено сериализацией `AddressOut`).
|
||||
- `node --check`, `py_compile`, `import app.main` — чисто; стенд пересобран (`--force-recreate`), healthy, отдаёт новый `app.js`.
|
||||
- Новых литеральных цветов в `app.js` нет (бейджи — существующие классы, тёмная тема не затронута).
|
||||
|
||||
## Не проверено
|
||||
- **`pytest` не прогнан**, в том числе новый `test_device_status_on_address`: учётная запись `admin` из `.env` (фикстура `client`)
|
||||
отключена пользователем `tstark` через UI (13:58). Решение о её включении или других учётных данных для тестов — за пользователем.
|
||||
- UI — ручная проверка пользователя.
|
||||
@@ -0,0 +1,26 @@
|
||||
# Favicon из логотипа бренда (изменение 041)
|
||||
|
||||
## Context
|
||||
У приложения нет favicon: во вкладке браузера стандартная иконка. Нужен favicon в едином стиле с логотипом бренда в шапке —
|
||||
`.brand-logo`: скруглённый квадрат 28×28, радиус 8, фон `--primary` (`#2450c8`), в центре белая иконка «глобус» 16×16 (`I.globe` в `web/app.js`).
|
||||
|
||||
## Изменения
|
||||
- `web/favicon.svg` (новый): тот же рисунок в `viewBox="0 0 32 32"`:
|
||||
- `rect` 32×32, `rx≈9` (пропорция 8/28), заливка `#2450c8`;
|
||||
- по центру контуры глобуса из `I.globe`: `circle r=9` и три `path`, масштаб ≈1.1 от 24-пиксельного `viewBox` иконки через `transform`;
|
||||
- `stroke="#fff"`, `stroke-width` как у иконки (1.8), скруглённые концы.
|
||||
Цвета заданы литералами: favicon живёт вне CSS страницы, токены к нему не применяются. Фон одинаковый в обеих темах,
|
||||
как у логотипа в шапке: у него `--primary` светлее в тёмной теме, но для вкладки браузера достаточно фирменного синего.
|
||||
- `web/index.html`: `<link rel="icon" href="favicon.svg" type="image/svg+xml">`.
|
||||
Старые браузеры, которые не понимают SVG и запрашивают `/favicon.ico`, сейчас получают 404 — это приемлемо, ICO не делаем.
|
||||
- Проверить, что статическая раздача (`RevalidatedStatic` в `app/main.py`) отдаёт `.svg` с `Content-Type: image/svg+xml`.
|
||||
Файлы `web/` уже раздаются из корня, отдельный маршрут не нужен.
|
||||
- `README.md`: строка 041 в истории.
|
||||
|
||||
## Исполнение
|
||||
Код — агент на Sonnet, он же пересобирает стенд с `--force-recreate`. Моя часть — ревью и проверка, после неё — прогон `pytest` для 039
|
||||
(учётная запись `admin` снова включена пользователем).
|
||||
|
||||
## Проверка
|
||||
- `curl -sI /favicon.svg` → 200, `image/svg+xml`; SVG валиден (`xmllint --noout` или Python `xml.etree`).
|
||||
- Визуально — пользователь: иконка во вкладке совпадает с логотипом в шапке.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Итог: favicon из логотипа бренда (изменение 041)
|
||||
|
||||
План: `PLAN.md`. Во вкладке браузера теперь та же иконка, что у логотипа в шапке: синий скруглённый квадрат с белым глобусом.
|
||||
|
||||
## Что сделано
|
||||
| Файл | Изменение |
|
||||
|---|---|
|
||||
| `web/favicon.svg` (новый) | `viewBox 0 0 32 32`: `rect rx=9` `#2450c8`; контуры глобуса из `I.globe` без изменений координат, `translate(6.857,6.857) scale(0.7619)` — пропорции `.brand-logo` (иконка 16 в квадрате 28), увеличенные до 32 |
|
||||
| `web/index.html` | `<link rel="icon" href="favicon.svg" type="image/svg+xml">` |
|
||||
| `README.md` | Строка 041 в истории |
|
||||
|
||||
`app/main.py` не менялся: статика уже отдаёт `.svg` как `image/svg+xml`.
|
||||
|
||||
## Проверки
|
||||
- SVG валиден (`xml.etree`); `/favicon.svg` → 200 `image/svg+xml` напрямую и через Caddy (`rxipam.rxmsk.ru`); `index.html` стенда содержит `rel="icon"`.
|
||||
- `pytest -q` — 17 passed.
|
||||
- Вид во вкладке — пользователь.
|
||||
Reference in new issue
Block a user