# 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`: ``. Старые браузеры, которые не понимают 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`). - Визуально — пользователь: иконка во вкладке совпадает с логотипом в шапке.