Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
7437240cae
Этап 48: размер рыбы в аквариуме — от абсолютного веса (общая шкала вываживания) + десктоп ×2. (1) aqFishSize(sp,w) → aqFishSize(w): вместо w/wMax+rarity читает общую с drawHookedFish кривую Этапа 41 — fishSizeFromW(w) (узловая таблица FISH_SIZE_KNOTS, log2 веса) — так «крупнее вес → крупнее рыба» работает в банке как в воде. Формула: clamp(fishSizeFromW(w)·AQ_FISH_SCALE·k, AQ_FISH_SIZE_MIN·k, min(W,H)·AQ_FISH_SIZE_REL·k); константы AQ_FISH_SCALE=0.7, AQ_FISH_SIZE_MIN=7, AQ_FISH_SIZE_REL=0.16. (2) Ревизия по просьбе владельца: мобильный вид одобрен как есть, поэтому десктопный множитель k=AQ_DESKTOP_SCALE=2 включается только при min(W,H)>=AQ_DESKTOP_MIN=600 (иначе k=1) — телефон 390×844 и mobile-landscape 800×450 остаются 1×, десктоп 1280×720 получает жильцов вдвое крупнее (щука 7.4 кг: 40→79 px DOM, кит 100 кг: 125→293 px). Оба клампа (MIN и REL) масштабируются на k вместе с телом — иначе на десктопе мелкая рыба застревала бы на мобильном минимуме, а верхний кламп резал бы увеличенных гигантов. Порог по min(W,H), а не IS_TOUCH: не ломает headless-скриншоты и работает при resize (initAquarium). (3) Обновлены 3 вызова — aqBuildFishEl/drawAquarium/aqTap (sp больше не нужен как аргумент; в drawAquarium sp остался для sp.glow); радиус тапа (size*1.2+10), рамка выбора и ореол свечения читают ту же size — согласованы автоматически. Таблицу/кривую НЕ дублируем (fishSizeFromW объявлен в «ОТРИСОВКА» раньше секции аквариума). Имя aqFishSize сохранено (глобал тестов/AGENTS). (4) Не тронуто: FISH_SIZE_KNOTS/fishSizeFromW/drawHookedFish (вода), wMin/wMax, формат/миграция save.aqFish, баланс/роллы/физика. (5) Тесты не правились — §AQ размеры не пинит (проверяются .aqfish/use href/варианты/transform; aqTap жмёт центр): 222/222 PASS, exit 0. check.mjs OK; balance.mjs — пины без изменений (Река 65.1/125.9 · Озёра 194.1/249.0 · Болото 240.3/328.9 · Море 297.3/476.7 · Океан 329.1/552.7). (6) Скриншоты: перегенерированы только кадры aquarium (6 PNG, оба набора — паттерн ревизии Этапа 47); остальные 84 кадра возвращены (набор не побитово-детерминирован из-за анимаций). (7) Доки: AGENTS.md (пункт «Аквариум» — формула + константы + десктоп-множитель), README.md (размер по весу, на десктопе ×2), DEVLOG (Этап 48 с таблицей мобильный/десктоп).
0a0595c3c1
Этап 47: ревизия SVG-портретов рыб — детализация до уровня болотных + биологическое правдоподобие. (1) Полная перерисовка 32 портретов, кроме 5 болотных (эталон стиля, Этап 45): 8 речных (carass, perch, bream, carp, pike, catfish, sturge, gold), 10 озёрных (zander, chuch, crayfish, bleak, roundel, eelpout, tench, navaga, rudd, cisco), 5 морских (herring, mackerel, flounder, tuna, swordfish), 9 океанских (moray, grouper, turtle, angler, octopus, manta, shark, squid, whale). (2) Единый стиль: послойные заливки без градиентов/defs (--f1 тело, --f3 плавники — перекрашиваются вариантами; --f2 брюхо/светлое, --f4 тёмный узор/кромка — НЕ перекрашиваются), спинная кромка f4-серпом, жаберная пластина+дуга, глаз 5 кругов (ободок→склера→радужка фикс-hex→зрачок→блик), составные узоры (полосы/пятна/чешуя/жучки/финлеты) — одним compound-path, ≤38 элементов, фикс-hex-акценты разрешены. (3) Видовые отличия и разведение «двойников»: карась↔карп (усы), окунь↔судак (горб/полосы/красное vs косая полоса/клыки), лещ↔густера (длинная анальная «юбка» vs короткий анальный+крупный глаз+киль), плотва↔краснопёрка (красный vs жёлтый глаз, рот конечный vs вверх), сом↔вьюн (голова-¼/длинные усы vs лента/10 усиков), мурена↔вьюн, осьминог↔кальмар (мешок+8 равных рук vs мантия-ракета+2 ловчих+крылышки), кит↔акула (флоскулы/фонтан/ус vs треуг. D/гетероцерк/5 щелей), сельдь↔скумбрия↔тунец↔меч, манта↔камбала↔рак, черепаха (вид сверху). (4) «Не рыбы»: crayfish (рак, вид сверху, клешни/ноги/веер), turtle (черепаха, вид сверху, щитки/4 ласты/клюв), octopus/squid/whale — иная анатомия (присоски/ловчие щупальца/флоскулы/фонтан), допустимые отклонения от рыбьего протокола. (5) Двойные боссы sturge (Река) и whale (Океан) проверены под золотой аурой #card.boss-card — контраст держат f4-детали. (6) Дефекты, найденные на приёмке и исправленные точечно (композиция не менялась): octopus — 2 щели с фоном; swordfish — светлый стык голова↔меч; tuna — прозрачная «дыра» в выемке хвоста-полумесяца; grouper — щель пасть↔нижняя челюсть; angler — просвет между римом и эской. (7) viewBox (0 0 160 100) и id/имена файлов не менялись; данные/логика/баланс не тронуты. (8) Интеграция: node tools/embed-fish.mjs — блок FISH-SVG обновлён (202478 байт / 1512 строк, 37 symbol); проверено совпадение всех 37 symbol с текущими assets/fish/*.svg; tools/fish-preview.html — блок «Варианты» (8 инлайн-копий carass синхронизированы с источником) + секция «Читаемость в UI» (44×28 / 40×26 / 240×150). Тесты не правились: 222/222 PASS, exit 0; check.mjs OK; balance.mjs — пины без изменений (Река 65.1/125.9 · Озёра 194.1/249.0 · Болото 240.3/328.9 · Море 297.3/476.7 · Океан 329.1/552.7). Скриншоты перегенерированы (45 RU + 45 EN). Доки: DEVLOG Этап 47.
e0ba750568
Доки: убрать все упоминания KODA.md (файл удалён — используется только AGENTS.md).
a168e830cc
Этап 46 ревизия: жильцы аквариума — те же SVG-портреты, что на карточке улова. (1) Слой #aqFishLayer (body, после canvas): position:fixed/inset:0/z-index:5/pointer-events:none, включается только под сценой (body.aq-open) — тапы по рыбам по-прежнему ловит canvas (aqTap). (2) aqBuildFishEl(i) — <div class=aqfish><svg viewBox="0 0 160 100"><use href="#fish-<id>"/></svg></div>, тот же спрайт FISH-SVG, что у дневника/карточки; размер от прежнего aqFishSize (длина 2·size, высота по 160:100); aqPlaceFish(el,rt) каждый кадр из updateAquarium ставит translate(x,y)+translate(-50%,-50%)+rotate(±4° по tail)+scale(dir,1). (3) Вариант — 1:1 с карточкой: перекраска --f1/--f3 inline (AQ_VARIANT_RECOLOR, цвета из CSS #card.<variant>-card) + класс .var<id> (AQ_VARIANT_CLASS/aqApplyVariant; silver — grayscale+brightness, rainbow — aqrainbowhue, остальные — цветной drop-shadow). Вместо hue-хака AQ_VARIANT_FX/AQ_VARIANT_HUE (удалены) и прежней искры. (4) initAquarium() пересобирает слой с clip-path по банке (index aqFishEls = index save.aqFish, битый вид → null без сдвига индексов); aqReleaseSel() удаляет DOM-элемент точечно (без телепорта остальных); на canvas остались вода/грунт/растения/пузыри/стекло + аура болотных (уходит ЗА портрет) и рамка выбора. drawFishShape в банке больше не используется (в сценах ловли не тронут). Геймплей/баланс/сейв/экономика не менялись. (5) Тесты 218→222: блок «портреты» в §AQ (use href = #fish-<id> на каждый экземпляр; .var<id>/--f1 по варианту; transform следует за aqFishRt индекс-в-индекс; вне сцены display:none/body без aq-open, pointer-events:none) + обновлён список глобалов в шапке §AQ. (6) Скриншоты: перегенерированы только кадры aquarium (6 PNG, оба набора). (7) Доки: AGENTS.md (пункт «Аквариум» + глобалы), KODA.md (код-карта/глобалы/грабли), README.md, docs/PLAN-AQUARIUM.md (риск №1 закрыт), DEVLOG (подраздел «Ревизия Этапа 46»). Проверено: 222/222 PASS exit 0, check.mjs OK, balance.mjs — пины без изменений (Река 65.1/125.9 · Озёра 194.1/249.0 · Болото 240.3/328.9 · Море 297.3/476.7 · Океан 329.1/552.7), pack.mjs 5/5 + pack-smoke 6/6.