Files
andrey 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.
2026-09-23 16:55:52 +03:00

41 lines
5.0 KiB
XML

<!-- Плотва (bleak): умеренно высокое серебристое тело (D/L≈0.39), конечный рот чуть вниз, красноватые плавники с умеренной вилкой хвоста, крупная серебристая чешуя; без киля и без пятна у хвоста. Главный видовой знак — КРАСНЫЙ глаз (у краснопёрки жёлтый) -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: умеренная вилка, корень утоплен в стебель на 4 ед. (нахлёст) -->
<path fill="var(--f3,hsl(12,45%,50%))" d="M42 45 L14 33 C20.5 41 24 46 27 50 C24 54 20.5 59 14 67 L42 55 L46 55 L46 45 Z"/>
<!-- спинной плавник: основание x68..95 утоплено в спину, вершина (82,15), задняя кромка чуть вогнута -->
<path fill="var(--f3,hsl(12,45%,50%))" d="M67.5 38 C71 29 75.5 18.5 82 15 C84.5 21 88.5 27 95 33.2 Z"/>
<!-- лучи спинного плавника: 3 тонких штриха веером от основания к кромке -->
<path fill="none" stroke="var(--f4,hsl(205,30%,24%))" stroke-width="0.9" opacity="0.28" d="M72.5 35 C72.2 29.5 73 25 74.5 20.5"/>
<path fill="none" stroke="var(--f4,hsl(205,30%,24%))" stroke-width="0.9" opacity="0.28" d="M81.5 32.8 C81.7 26 81.8 20 82 15.6"/>
<path fill="none" stroke="var(--f4,hsl(205,30%,24%))" stroke-width="0.9" opacity="0.28" d="M90 33.9 C89 28.5 86.8 23.5 84.5 18.5"/>
<!-- анальный плавник: основание x57..75 утоплено в брюхо (нахлёст ≥4), низ до y84, лопасть отведена назад -->
<path fill="var(--f3,hsl(12,45%,50%))" d="M58 61.5 C60 72.5 63 80 68.5 83.5 C73 84.5 75 79 75 66.5 Z"/>
<!-- брюшные плавники: пара мягких округлых лопастей, x84..102, отведены назад-вниз -->
<path fill="var(--f3,hsl(12,45%,50%))" d="M84 68.5 C82.5 77 84 83.5 87.5 85.5 C91 84 92.5 77.5 92 68.5 Z"/>
<path fill="var(--f3,hsl(12,45%,50%))" d="M94 68.5 C92.5 78 94 84.5 97.5 86 C101 84.5 102.5 78 102 68.5 Z"/>
<!-- тело: умеренно высокое серебристое, рыло (152,50), затылок (132,39), спина (96,29), брюхо (96,73), стебель 42,45/42,55 -->
<path fill="var(--f1,hsl(205,22%,55%))" d="M152 50 C149.5 43 143 37 134 35.5 C120 31 108 29 96 29 C72 29 50 36.5 42 45 L42 55 C50 63.5 72 73 96 73 C114 73 129 68 138 60 C144 55 149.5 52 152 50 Z"/>
<!-- брюхо: светлая нижняя треть (серебро) -->
<path fill="var(--f2,hsl(200,20%,80%))" d="M42 55 C50 63.5 72 73 96 73 C114 73 129 68 138 60 C130 64 114 68 96 68 C74 68 54 62.5 42 55 Z"/>
<!-- тёмная спинная кромка: тонкая полоса по верхнему контуру (не зубцы) -->
<path fill="var(--f4,hsl(205,30%,24%))" d="M152 50 C149.5 43 143 37 134 35.5 C120 31 108 29 96 29 C72 29 50 36.5 42 45 C50 39.5 72 31.5 96 31.5 C108 31.5 120 34 134 38.5 C143 42 149 47 152 50 Z"/>
<!-- жаберная пластина: мягкая светлая заливка головы -->
<path fill="var(--f2,hsl(200,20%,80%))" opacity="0.35" d="M130 39.5 C135 46 136 54 131 61.5 C127 54.5 126 46.5 126 40.5 Z"/>
<!-- жаберная дуга: тонкий тёмный серп у головы -->
<path fill="none" stroke="var(--f4,hsl(205,30%,24%))" stroke-width="1.2" opacity="0.45" d="M130 39.5 C135 46 136 54 131 61.5"/>
<!-- чешуя: крупные широкие f2-серпы, верхний ряд из трёх -->
<path fill="var(--f2,hsl(200,20%,80%))" d="M74 38.5 Q66.5 45 74 51.5 Q69.9 45 74 38.5 Z M90 37.5 Q82.5 44 90 50.5 Q85.9 44 90 37.5 Z M106 37.5 Q98.5 44 106 50.5 Q101.9 44 106 37.5 Z"/>
<!-- чешуя: нижний ряд из двух серпов (compound-path) -->
<path fill="var(--f2,hsl(200,20%,80%))" d="M82 50.5 Q74.5 57 82 63.5 Q77.9 57 82 50.5 Z M98 50.5 Q90.5 57 98 63.5 Q93.9 57 98 50.5 Z"/>
<!-- рот: конечный, чуть вниз (152,51.5) -->
<path fill="var(--f4,hsl(205,30%,24%))" d="M148.6 50 C150.4 50.7 152 51.3 152 51.7 C150.9 52.4 149.6 52 148.4 51 Z"/>
<!-- грудной плавник: мягкая лопасть на боку, направлена назад-вниз (после тела) -->
<path fill="var(--f3,hsl(12,45%,50%))" d="M117 55 C112 58 109 62.5 111 66.5 C114.5 65 116.5 60.5 118.5 56.5 Z"/>
<!-- глаз: ГЛАВНЫЙ знак вида — красная радужка (ободок → склера → радужка → зрачок → блик) -->
<circle fill="var(--f4,hsl(205,30%,24%))" cx="134" cy="42" r="5.6"/>
<circle fill="#f7f3e6" cx="134" cy="42" r="4.6"/>
<circle fill="#c0392b" cx="134" cy="42" r="3.4"/>
<circle fill="#142638" cx="134" cy="42" r="2.2"/>
<circle fill="#fff" cx="132.6" cy="40.6" r="0.9"/>
</svg>