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

48 lines
6.3 KiB
XML

<!-- Карп (carp): высокое, но вытянутое и мощное тело (глубина/длина ≈0.44), крупная голова с полунижним ртом; длинный спинной плавник с длинной базой и вогнутой задней кромкой; ГЛАВНЫЙ различитель с карасём — две пары усиков (верхние длинные, нижние короткие); крупная чешуя — 6 широких f2-серпов в два ряда; тёмного пятна у хвоста НЕТ (это карасий знак); оливково-золотая палитра -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: умеренная вилка, лопасти симметричны относительно y=50 (верх 32 / низ 68); база утоплена в стебель (нахлёст ≥4 ед.) -->
<path fill="var(--f3,hsl(30,50%,32%))" d="M40 44 L12 32 C20 40 25 45 30 50 C25 55 20 60 12 68 L40 56 Z"/>
<!-- спинной плавник: ДЛИННАЯ база (x70..119), высокий передний луч (86,15), задняя кромка ВОГНУТА (садится ниже хорды, не выпуклая, как у карася) -->
<path fill="var(--f3,hsl(30,50%,32%))" d="M70 30 C74 20 79 15 86 15 C95 22 107 25 119 28 L119 30 Z"/>
<!-- лучи спинного: 5 тонких штрихов веером от основания к кромке (передние короче) -->
<path fill="none" stroke="var(--f4,hsl(28,45%,20%))" stroke-width="0.9" opacity="0.3" d="M74 29 L76 21 M81 29 L83 17.5 M89 29 L91 19 M97 29 L99 22.3 M106 29 L108 25"/>
<!-- анальный плавник: широкая мягкая лопасть у самого хвоста (x46..62), база утоплена в брюхо -->
<path fill="var(--f3,hsl(30,50%,32%))" d="M46 60 C47 74 51 82 57 82.5 C63 82 66 76 62 68 Z"/>
<!-- лучи анального: 3 тёмных штриха на лопасти -->
<path fill="none" stroke="var(--f4,hsl(28,45%,20%))" stroke-width="1" opacity="0.3" d="M50 66 L52 78 M55 68 L57 80 M60 70 L60.5 80"/>
<!-- брюшные плавники: ДВЕ отдельные мягкие округлые лопасти (x94..113 на брюхе, кончики ~y87), назад-вниз, без острых углов -->
<path fill="var(--f3,hsl(30,50%,32%))" d="M94 71 C91 78 91 84 96 87 C99 84 101 78 102 71 Z"/>
<path fill="var(--f3,hsl(30,50%,32%))" d="M104 71 C102 78 102 84 107 87 C110 84 112 78 113 71 Z"/>
<!-- тело: вытянуто-мощное (глубина/длина ≈0.44), горб (88,24), низ брюха (96,78), тупое рыло (150,51), стебель 12 ед. -->
<path fill="var(--f1,hsl(36,52%,46%))" d="M150 49 C147 43 142 39 136 37 C124 29 104 25 88 24 C68 24 48 30 34 44 L34 56 C48 70 68 78 96 78 C124 78 142 66 150 53 C150.6 51.5 150.6 50.5 150 49 Z"/>
<!-- брюхо: светлая (f2) нижняя треть -->
<path fill="var(--f2,hsl(42,45%,74%))" d="M34 56 C48 70 68 78 96 78 C124 78 142 66 150 53 C142 64 126 71 104 72 C78 73 54 67 34 56 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру (не зубцы) -->
<path fill="var(--f4,hsl(28,45%,20%))" d="M150 49 C147 43 142 39 136 37 C124 29 104 25 88 24 C68 24 48 30 34 44 C46 34 66 29 88 28 C104 28 120 32 130 38 C140 44 146 47 150 49 Z"/>
<!-- жаберная пластина: мягкая светлая заливка (объём крупной головы) -->
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.35" d="M124 38 C130 45 131 55 126 63 C121 55 119.5 46 120 39 Z"/>
<!-- жаберная дуга: тёмный серп у головы (сдвинут влево, чтобы не липнуть к глазу) -->
<path fill="none" stroke="var(--f4,hsl(28,45%,20%))" stroke-width="1.5" d="M124 38 C130 45 131 55 126 63"/>
<!-- чешуя (признак породы): 6 широких f2-серпов в два ряда — верхний x76/92/108, нижний x72/88/106 -->
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.33" d="M76 34 Q68 40 76 46 Q73 40 76 34 Z"/>
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.33" d="M92 32 Q84 38 92 44 Q89 38 92 32 Z"/>
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.33" d="M108 36 Q100 42 108 48 Q105 42 108 36 Z"/>
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.33" d="M72 46 Q64 52 72 58 Q69 52 72 46 Z"/>
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.33" d="M88 44 Q80 50 88 56 Q85 50 88 44 Z"/>
<path fill="var(--f2,hsl(42,45%,74%))" opacity="0.33" d="M106 48 Q98 54 106 60 Q103 54 106 48 Z"/>
<!-- грудной плавник: мягкая лопасть на боку под жаберной дугой, ПОСЛЕ тела, направлена назад-вниз -->
<path fill="var(--f3,hsl(30,50%,32%))" d="M136 54 C130 58 123 63 124 67 C125 70 131 64 136 57 Z"/>
<!-- рот ПОЛУНИЖНИЙ: узкие тёмные губы на нижней стороне рыла (не конечный-верхний, как у карася) -->
<path fill="var(--f4,hsl(28,45%,20%))" d="M149.6 51.6 C148.2 54.2 146 55.6 144 55.4 C145.2 53.6 146.8 52.2 148.4 51.2 Z"/>
<!-- УСЫ (главный различитель с карасём, только f4, stroke-width 1.8): верхние длинные ~14 ед. — поверх грудного плавника -->
<path fill="none" stroke="var(--f4,hsl(28,45%,20%))" stroke-width="1.8" stroke-linecap="round" d="M146 52 L132 60 M144 52 L134 63"/>
<!-- нижние усы короткие ~7 ед., ниже и круче верхних -->
<path fill="none" stroke="var(--f4,hsl(28,45%,20%))" stroke-width="1.8" stroke-linecap="round" d="M145 55 L137 58 M145 56 L138 60"/>
<!-- глаз последним: ободок f4 → склера → радужка #c98a2a → зрачок → блик -->
<circle fill="var(--f4,hsl(28,45%,20%))" cx="133" cy="42" r="5"/>
<circle fill="#f4f1e6" cx="133" cy="42" r="4.1"/>
<circle fill="#c98a2a" cx="133" cy="42" r="3"/>
<circle fill="#142638" cx="133" cy="42" r="2.1"/>
<circle fill="#fff" cx="131.5" cy="40.5" r="0.8"/>
</svg>