fix(pet-sprite): уникальные id градиентов спрайта — фикс «пропадающего» тела
uid градиента питомца строился детерминированно (pg+level+mood+colorKey),
поэтому два питомца с одинаковыми параметрами на одной странице получали
совпадающие id. url(#id) заливки тела резолвился в чужой градиент (часто в
display:none-вьюхе) → тело без заливки, видны только контур/усики/аура.
Проявлялось «случайно» — только при совпадении параметров (нарратор на
карте vs на экране победы в /quantik). Теперь uid — глобальный счётчик
(pg1, pg2, …), коллизий нет. Чинит и /pet, и /dashboard, и игру.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
Цвета 6→11 (розовый/оранжевый/бирюза/лайм/индиго). Узоры 5→8
(сердечки/звёздочки/клетка). Аксессуары 11→18 + новая зона «В лапах»
(бини, нимб, монокль, медаль, серёжки, палочка, шарик). Разблокировка за
учёбу: нимб (8 достижений), медаль (30 тестов). Фоны 7→11
(класс/лаборатория/зима/радуга) с градиентами и частицами. Новая вкладка
«Образы» — 4 готовых набора (Учёный/Волшебник/Чемпион/Милашка) применяют
аксессуары+узор+цвет одним кликом.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Аксессуары больше не навешиваются авто по уровню — теперь разблокируются
и НАДЕВАЮТСЯ по выбору (один на слот). Новые: шапочка выпускника, наушники,
бабочка (бесплатные — доступны даже при 0 XP). Сохранены цилиндр/корона/очки/
звезда с прежними порогами; дефолт повторяет старый вид (без сюрпризов).
Бэкенд: миграция pet_equipped, каталог ACCESSORY_CATALOG + /api/pet/equip
(валидация разблокировки и слотов). Рендер аксессуаров строго по equipped —
в обеих копиях (pet.html и pet-sprite.js для дашборда). UI гардероба на /pet.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Пересборка верхней зоны дашборда по скриншоту (редизайн был утерян):
- 3 hero-карточки вместо action-cards: «Начать чтение» (продолжение
курса через /api/courses/continue), «Лаборатория дня» (детерминир.
выбор по дню + SVG-превью из lab-previews.js), «Питомец» (синхрон
с модулем /pet через /api/pet + единый PetSprite.render).
- Подключены восстановленные ассеты pet-sprite.js и lab-previews.js.
- Убран weak-topics из hero; питомец показывает уровень/XP/стрик/
цель дня/настроение, синхронно со страницей /pet.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>