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

49 lines
5.9 KiB
XML

<!-- Карась (carass): высокое округлое тело-«монета» с мягким горбом, длинный спинной плавник с полого-выпуклой кромкой и лучами, короткий округлый анальный у хвостового стебля, тупая голова без усов, слабо вильчатый хвост; главный видовой знак — тёмное пятно у основания хвоста; оливково-золотая палитра -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: слабая вилка, закруглённые лопасти (стебель толстый, 14 ед.) -->
<path fill="var(--f3,hsl(46,42%,33%))" d="M42 44 L13 33 C21 41 25 46 30 51 C25 56 21 61 13 69 L42 58 Z"/>
<!-- спинной плавник: ДЛИННЫЙ, кромка полого-выпуклая (пик чуть ближе к хвосту), основание глубоко утоплено в тело (нахлёст ≥4 ед., щели нет) -->
<path fill="var(--f3,hsl(46,42%,33%))" d="M62 37 C64 23 72 13 84 12 C98 11 114 20 126 34 Z"/>
<!-- лучи спинного плавника: 5 тонких штрихов веером от основания к кромке (передние короче, задние длиннее) -->
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="0.9" opacity="0.3" d="M68 36.7 C67.6 31.8 67.8 26.5 68 21.5"/>
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="0.9" opacity="0.3" d="M79 36.2 C78.7 29.5 78.9 20.5 79 13.6"/>
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="0.9" opacity="0.3" d="M90 35.7 C89.8 28 89.8 19.5 89.8 12.8"/>
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="0.9" opacity="0.3" d="M101 35.2 C101.2 28.5 101.1 21.5 101 15.9"/>
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="0.9" opacity="0.3" d="M112 34.7 C112.3 30 112.1 25.5 112 21.9"/>
<!-- анальный плавник: округлый, ШИРОКИМ основанием растёт из брюха, а не висит каплей -->
<path fill="var(--f3,hsl(46,42%,33%))" d="M54 62 C59 81 65 89 72 89 C79 88 84 81 88 69 L54 62 Z"/>
<!-- лучи анального плавника: 3 коротких тёмных штриха на лопасти -->
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="1" opacity="0.3" d="M63 72 C63.6 77 64.4 80.5 65 83"/>
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="1" opacity="0.3" d="M70 75 C70.6 80 71.4 84 72.5 87"/>
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="1" opacity="0.3" d="M78 76 C78.5 79 79 81.5 79.3 83.5"/>
<!-- брюшные плавники: пара мягких округлых лопастей, направлены назад-вниз (без острых углов) -->
<path fill="var(--f3,hsl(46,42%,33%))" d="M109 73 C103 85 92 82 100 71 Z"/>
<path fill="var(--f3,hsl(46,42%,33%))" d="M118 73 C113 85 104 82 109 72 Z"/>
<!-- тело: высокое и округлое, спина горбатая, голова тупая (длина/глубина ≈0.51) -->
<path fill="var(--f1,hsl(48,45%,48%))" d="M148 50 C144 41 138 34 126 30 C116 26 106 24 96 24 C74 25 53 33 42 44 L42 58 C53 71 76 79 100 79 C120 79 137 70 142 57 C145 53 147 51 148 50 Z"/>
<!-- брюхо: светлая нижняя треть -->
<path fill="var(--f2,hsl(48,32%,72%))" d="M42 58 C53 71 76 79 100 79 C120 79 137 70 142 57 C136 66 118 72 100 72 C78 72 56 66 42 58 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру (не зубцы) -->
<path fill="var(--f4,hsl(50,35%,22%))" d="M148 50 C144 41 138 34 126 30 C116 26 106 24 96 24 C74 25 53 33 42 44 C54 37 76 30 96 27.5 C108 28 118 33 127 37.5 C136 42 143 47 148 50 Z"/>
<!-- жаберная пластина: мягкая светлая заливка (объём маленькой головы) -->
<path fill="var(--f2,hsl(48,32%,72%))" opacity="0.35" d="M132 39 C138 46 139 54 134 62 C129 54 127 46 127 40 Z"/>
<!-- жаберная дуга: тёмный серп у головы -->
<path fill="none" stroke="var(--f4,hsl(50,35%,22%))" stroke-width="1.5" d="M132 39 C138 46 139 54 134 62"/>
<!-- ГЛАВНЫЙ знак вида: тёмное пятно у самого основания хвостового плавника (не «второй глаз») -->
<ellipse fill="#2b2416" cx="44.5" cy="50" rx="3.2" ry="4"/>
<!-- чешуя: 3 широких серпа на плече (крупная чешуя, а не решётка) -->
<path fill="var(--f2,hsl(48,32%,72%))" opacity="0.3" d="M104 41 Q97 50 104 59 Q101 50 104 41 Z"/>
<path fill="var(--f2,hsl(48,32%,72%))" opacity="0.3" d="M114 40 Q106 50 114 60 Q111 50 114 40 Z"/>
<path fill="var(--f2,hsl(48,32%,72%))" opacity="0.3" d="M124 43 Q117 50 124 57 Q121 50 124 43 Z"/>
<!-- рот: крошечная щель на тупом рыле (усов нет — это карп!) -->
<path fill="var(--f4,hsl(50,35%,22%))" d="M143 49 C146 49.4 148 50.2 148.8 51.4 C147 52.6 145 52 143.4 50.6 Z"/>
<!-- грудной плавник: мягкая округлая лопасть на боку под жаберной дугой, направлена назад-вниз (в стиле брюшных) -->
<path fill="var(--f3,hsl(46,42%,33%))" d="M133 54 C126 57 116 61 118 66 C120 71 128 64 132 58 Z"/>
<!-- глаз: ободок → склера → радужка → зрачок → блик -->
<circle fill="var(--f4,hsl(50,35%,22%))" cx="137.5" cy="41.5" r="5.7"/>
<circle fill="#f7f3e6" cx="137.5" cy="41.5" r="4.6"/>
<circle fill="#c98a2a" cx="137.5" cy="41.5" r="3.2"/>
<circle fill="#142638" cx="137.5" cy="41.5" r="2.3"/>
<circle fill="#fff" cx="136" cy="40" r="0.9"/>
</svg>