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

28 lines
6.0 KiB
XML

<!-- Вьюн (eelpout): длинное тонкое цилиндрическое тело-лента, изогнутое плавной S-волной (толщина 13-16 ед.), крошечная голова с 5 парами тонких усиков (10 штук) — главный знак вида, крошечный глаз и предглазничная складка-шип, округлый хвост БЕЗ вилки, крошечные спинной и анальный плавники далеко к хвосту, голая кожа с мелкой f4-крапчатостью; болотно-оливковая палитра -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: ОКРУГЛАЯ пластина-лопасть (ВИЛКИ НЕТ), 10x8 на конце ленты -->
<path fill="var(--f3,hsl(38,42%,32%))" d="M21 46 C15.5 45.4 11.6 47.2 11 50 C11.6 52.8 15.5 54.6 21 54 Z"/>
<!-- спинной плавник: КРОШЕЧНЫЙ, далеко к хвосту, основание утоплено в спину -->
<path fill="var(--f3,hsl(38,42%,32%))" d="M25 46 C25.8 38.5 28 34.5 30 34.8 C32 36 34 39.4 35 42.5 Z"/>
<!-- анальный плавник: КРОШЕЧНЫЙ, напротив спинного, утоплен в брюхо -->
<path fill="var(--f3,hsl(38,42%,32%))" d="M29.5 51 C30.5 56.5 32 60.5 34.5 61 C37 60 39 55.5 40 51.5 Z"/>
<!-- тело: длинная тонкая лента, плавная S-волна по оси (150,50)→(88,58)→(28,48), сужается к хвосту, нос скруглён -->
<path fill="var(--f1,hsl(38,40%,44%))" d="M150 43.5 C146 43.4 133.3 42.3 126 42.9 C118.7 43.6 112.3 46.2 106 47.4 C99.7 48.6 93.7 49.9 88 50 C82.3 50.1 77 49.4 72 47.8 C67 46.2 62.7 42.1 58 40.5 C53.3 38.9 49 37.8 44 38.2 C39 38.6 31.6 41.7 28 43 C24.4 44.3 23.4 45.5 22.5 46 C19.5 46.5 19.5 53.5 22.5 54 C23.4 53.8 24.4 53.7 28 53 C31.6 52.3 39 49.7 44 49.8 C49 49.9 53.3 51.4 58 53.5 C62.7 55.6 67 60.1 72 62.2 C77 64.3 82.3 65.9 88 66 C93.7 66.1 99.7 64.1 106 62.6 C112.3 61.1 118.7 58.1 126 57.1 C133.3 56.1 146 56.6 150 56.5 C153.6 56.5 156.5 53.6 156.5 50 C156.5 46.4 153.6 43.5 150 43.5 Z"/>
<!-- брюхо: светлая нижняя полоса, сходит на нет у хвоста и на конце рыла -->
<path fill="var(--f2,hsl(35,30%,72%))" d="M156.5 50 C156.4 52.2 154 55.8 150 56.5 C146 56.6 133.3 56.1 126 57.1 C118.7 58.1 112.3 61.1 106 62.6 C99.7 64.1 93.7 66.1 88 66 C82.3 65.9 77 64.3 72 62.2 C67 60.1 62.7 55.6 58 53.5 C53.3 51.4 49 49.9 44 49.8 C39 49.7 31.6 52.3 28 53 C24.4 53.7 23.4 53.8 22.5 54 C23.4 53.3 24.4 52.4 28 48 C31.6 47.3 39 44.7 44 44.8 C49 44.9 53.3 46.4 58 48.5 C62.7 50.6 67 55.1 72 57.2 C77 59.3 82.3 60.9 88 61 C93.7 61.1 99.7 59.1 106 57.6 C112.3 56.1 118.7 53.1 126 52.1 C133.3 51.1 146 51.6 150 51.5 C154 51 156.4 50.6 156.5 50 Z"/>
<!-- тёмная спинная линия по хребту с уходом на рыло + 10 пятнышек мелкой крапчатости — одним compound-путём -->
<path fill="var(--f4,hsl(30,45%,18%))" d="M150 43.5 C146 43.4 133.3 42.3 126 42.9 C118.7 43.6 112.3 46.2 106 47.4 C99.7 48.6 93.7 49.9 88 50 C82.3 50.1 77 49.4 72 47.8 C67 46.2 62.7 42.1 58 40.5 C53.3 38.9 49 37.8 44 38.2 C39 38.6 31.6 41.7 28 43 C24.4 44.3 23.4 45.5 22.5 46 L22.5 48.2 C23.4 47.7 24.4 46.5 28 45.2 C31.6 43.9 39 40.8 44 40.4 C49 40 53.3 41.1 58 42.7 C62.7 44.3 67 48.4 72 50 C77 51.6 82.3 52.3 88 52.2 C93.7 52.1 99.7 50.8 106 49.6 C112.3 48.4 118.7 45.8 126 45.1 C133.3 44.5 146 45.6 150 45.7 C150.4 45.1 150.4 44.2 150 43.5 Z M116.7 50.6 C117.1 49.3 119 49.5 119.4 50.6 C119.2 51.5 117.3 51.9 116.7 50.6 Z M106.8 52.2 C107.1 51 108.9 51.2 109.3 52.2 C109.1 53 107.4 53.4 106.8 52.2 Z M96.9 54 C97.2 52.9 98.9 53.1 99.2 54 C99 54.7 97.4 55.1 96.9 54 Z M86.7 55 C87.1 53.8 89 54 89.3 55 C89.2 55.8 87.4 56.2 86.7 55 Z M76.9 54 C77.2 53 78.8 53.1 79.1 54 C79 54.7 77.5 55 76.9 54 Z M66.8 50.2 C67.1 49 68.9 49.2 69.3 50.2 C69.1 51 67.4 51.4 66.8 50.2 Z M56.9 44.6 C57.2 43.5 58.9 43.7 59.2 44.6 C59 45.3 57.4 45.7 56.9 44.6 Z M46.7 42.2 C47.1 41 49 41.2 49.3 42.2 C49.2 43 47.4 43.4 46.7 42.2 Z M36.9 44 C37.2 43 38.8 43.1 39.1 44 C39 44.7 37.5 45 36.9 44 Z M27.9 47 C28.2 45.9 29.9 46.1 30.2 47 C30 47.7 28.4 48.1 27.9 47 Z"/>
<!-- 5 пар тонких усиков (10 штук) вокруг рта — главный видовой знак; 2 пары верхних длинных к (124,44)/(126,58), средняя к (134,60), 2 пары нижних коротких к (140,60)/(142,62); одним compound-путём -->
<path fill="none" stroke="var(--f4,hsl(30,45%,18%))" stroke-width="0.8" stroke-linecap="round" d="M148.5 48.2 Q138 42 124 44 M148.2 49 Q137.5 43.2 125 45.6 M149.2 50 Q139 52.5 126 57.8 M148.9 50.6 Q138.6 53.4 127 58.5 M148.6 51.2 Q142.5 56 134 60 M148.3 51.6 Q142 56.6 135 60.5 M147.8 52 Q144.5 56.8 140 60 M147.4 52.3 Q144 57.4 140.6 60.6 M147 52.6 Q144.6 58 142 62 M146.6 52.9 Q144.4 58.8 142.6 62.4"/>
<!-- рот: крошечная тёмная щель на нижней губе рыла -->
<path fill="var(--f4,hsl(30,45%,18%))" d="M150.8 52.7 C153.6 53 155.8 52.4 156.7 50.8 C155.2 53.5 152.8 54.2 150.4 54 Z"/>
<!-- предглазничная складка-шип: тонкий тёмный серп перед глазом -->
<path fill="var(--f4,hsl(30,45%,18%))" d="M142.2 44.2 C140.8 46.6 140.4 49.4 141.2 51.8 C142.4 49.4 142.8 46.6 142.2 44.2 Z"/>
<!-- грудной плавник: маленькая мягкая лопасть у головы (рисуется ПОСЛЕ тела) -->
<path fill="var(--f3,hsl(38,42%,32%))" d="M134.5 51.8 C131.3 52.4 127.4 55 126.6 58.4 C129.9 57.9 133.4 54.8 134.7 52.4 Z"/>
<!-- глаз: НАМЕРЕННО крошечный (3 слоя), высоко и вперёд -->
<circle fill="var(--f4,hsl(30,45%,18%))" cx="139" cy="46" r="2"/>
<circle fill="#142638" cx="139" cy="46" r="1.2"/>
<circle fill="#fff" cx="138.4" cy="45.4" r="0.5"/>
</svg>