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

56 lines
6.8 KiB
XML

<!-- Золотая рыбка (gold): короткое яйцевидное тело (длина/глубина ≈0.68 — самое круглое из речных), верхняя и нижняя дуги гладкие, без прямых боков; ОЧЕНЬ длинный двухлопастной вуалевый хвост с расходящимися лопастями и видимой выемкой; длинные волнистые спинной, анальный и парные брюшные плавники-вуали с плавными кромками; небольшой мягкий грудной плавник на боку у брюха; мелкая заострённая голова, крупный глаз; тёплое оранжево-золотое тело, кремовое брюхо, металлические искры; тёмного пятна у хвоста НЕТ (признак карася) -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: верхняя вуалевая лопасть (уходит вверх-влево, кромка текучая) -->
<path fill="var(--f3,hsl(32,80%,45%))" d="M80 45 C68 34 48 22 30 15 C20 11 15 11 13 12 C14 19 20 27 30 36 C42 46 60 50 80 45 Z"/>
<!-- хвост: нижняя вуалевая лопасть (расходится с верхней, выемка между ними) -->
<path fill="var(--f3,hsl(32,80%,45%))" d="M80 55 C68 66 48 78 30 85 C20 89 15 89 13 88 C14 81 20 73 30 64 C42 54 60 50 80 55 Z"/>
<!-- складка верхней лопасти: мягкий луч по центру (не параллелен кромке) -->
<path fill="none" stroke="#ffd98a" stroke-width="1" opacity="0.22" d="M74 43 C60 36 46 28 34 21"/>
<!-- складка нижней лопасти -->
<path fill="none" stroke="#ffd98a" stroke-width="1" opacity="0.22" d="M74 57 C60 64 46 72 34 79"/>
<!-- спинной плавник: высокий, длинная волнистая задняя кромка -->
<path fill="var(--f3,hsl(32,80%,45%))" d="M76 34 C81 16 92 4 104 3 C114 2 122 8 126 17 C129 24 132 29 134 34 C118 32 96 31 76 34 Z"/>
<!-- лучи спинного плавника -->
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M88 24 L92 8"/>
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M101 23 L103 4"/>
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M114 24 L119 12"/>
<!-- анальный плавник: цельная ниспадающая вуаль с плавной кромкой -->
<path fill="var(--f3,hsl(32,80%,45%))" d="M110 74 C106 84 98 92 88 96 C82 98 76 98.5 72 98 C77 91 80 83 81 67 C90 70 100 71.5 110 74 Z"/>
<!-- лучи анальной вуали -->
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M100 79 C94 85 87 90 80 94"/>
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M92 78 C87 83 82 87 77 91"/>
<!-- брюшные плавники: пара мягких вуалей с округлыми концами (без острых щупалец) -->
<path fill="var(--f3,hsl(32,80%,45%))" d="M131 70 C134 79 132 89 125 95 C120 98 115 96 114 92 C117 86 119 78 119 70 C123 70.5 127 70.5 131 70 Z"/>
<path fill="var(--f3,hsl(32,80%,45%))" d="M123 71 C126 79 125 87 120 92 C117 95 113 94 112 90 C114 84 115 78 115 71 C118 71 120 71 123 71 Z"/>
<!-- тело: короткое яйцевидное, гладкие дуги спины и брюха (голова мелкая заострённая) -->
<path fill="var(--f1,hsl(36,84%,53%))" d="M149 50 C147 42 142 34 134 29 C125 23.5 113 21 101 22 C86 23 73 31 67 43 C65.5 46.5 65.5 53.5 67 57 C73 69 86 77 101 78 C113 79 125 76.5 134 71 C142 66 147 58 149 50 Z"/>
<!-- брюхо: кремовая нижняя дуга -->
<path fill="var(--f2,hsl(45,72%,80%))" d="M67 57 C73 69 86 77 101 78 C113 79 125 76.5 134 71 C126 72 114 71 102 70 C87 68 74 64 67 57 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру -->
<path fill="var(--f4,hsl(14,55%,30%))" d="M149 50 C147 42 142 34 134 29 C125 23.5 113 21 101 22 C86 23 73 31 67 43 C75 33 90 26 103 25 C115 24.5 127 28 135 33 C142 38 147 44 149 50 Z"/>
<!-- жаберная пластина: мягкая светлая заливка (сдвинута влево, чтобы не липла к глазу) -->
<path fill="var(--f2,hsl(45,72%,80%))" opacity="0.3" d="M119 34 C123.5 42 124 54 119.5 65 C115.5 54 114.5 44 115.5 35 Z"/>
<!-- жаберная дуга: чистый зазор ≥4.5 ед. от ободка глаза -->
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="1.5" d="M119 34 C123.5 42 124 54 119.5 65"/>
<!-- чешуя: 3 широких металлических серпа на боку -->
<path fill="var(--f2,hsl(45,72%,80%))" opacity="0.3" d="M108 33 Q98 50 108 67 Q103 50 108 33 Z"/>
<path fill="var(--f2,hsl(45,72%,80%))" opacity="0.3" d="M118 32 Q108 50 118 68 Q113 50 118 32 Z"/>
<path fill="var(--f2,hsl(45,72%,80%))" opacity="0.3" d="M128 34 Q118 50 128 66 Q123 50 128 34 Z"/>
<!-- металлические искры (фикс-акцент) -->
<circle fill="#fff3c4" cx="96" cy="31" r="1.8"/>
<circle fill="#fff3c4" cx="116" cy="52" r="1.5"/>
<!-- рот: крошечная щель на заострённом рыле (усов нет) -->
<path fill="var(--f4,hsl(14,55%,30%))" d="M145 49 C147.5 49.3 149 50 149.7 51 C148 52.2 146 51.4 145 50.2 Z"/>
<!-- грудной плавник: небольшой мягкий овал на боку у брюха, под жаберной дугой, кончиком заходит за брюшную кромку -->
<path fill="var(--f3,hsl(32,80%,45%))" opacity="0.55" d="M130.5 57.5 C127.5 62 121.5 69.5 115 81 C119.5 82 124 76 127.2 68.5 C129.3 63.5 130.7 60 130.5 57.5 Z"/>
<!-- лучи грудного плавника -->
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M127 61 C123.5 66.5 119.5 73 116.5 78"/>
<path fill="none" stroke="var(--f4,hsl(14,55%,30%))" stroke-width="0.8" opacity="0.35" d="M129 64 C126 68 122 73.5 118.5 78.5"/>
<!-- глаз: САМЫЙ КРУПНЫЙ из трёх (тёмный ободок → узкий серп склеры → крупная радужка → зрачок → блик) -->
<circle fill="var(--f4,hsl(14,55%,30%))" cx="135" cy="41.5" r="7.5"/>
<circle fill="#fff8e8" cx="135" cy="41.5" r="5.4"/>
<circle fill="#e08a1e" cx="135" cy="41.5" r="4.9"/>
<circle fill="#142638" cx="135" cy="41.5" r="3"/>
<circle fill="#fff" cx="132.8" cy="39.2" r="1.3"/>
</svg>