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

58 lines
7.4 KiB
XML

<!-- Сом (catfish): массивная тупая голова ≈¼ длины с крутым подъёмом лба-горба (пик 132,27 → седло 114,36.5) — главный силуэтный знак, широкая пасть, раскрытая назад-вниз, и ДЛИННЫЕ усы (пара верхних почти до брюшных + короткие нижние), крошечный невзрачный глаз высоко и вперёд, длинный анальный плавник вдоль задней половины и крошечный спинной, голое тело с редкими блёклыми кляксами, суженный стебель и ОКРУГЛЫЙ (не вильчатый) хвост; мутно-оливковая палитра -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: округлый «веер» (НЕ вилка), уменьшен ~на 23%, симметричен относительно y=50, основанием заходит в стебель -->
<path fill="var(--f3,hsl(35,35%,28%))" d="M30 43.1 C22.3 39.2 16.1 41.5 14.2 50 C16.1 58.5 22.3 60.8 30 56.9 Z"/>
<!-- спинной плавник: КРОШЕЧНЫЙ, основание утоплено в спину (нахлёст ≥4 ед.) -->
<path fill="var(--f3,hsl(35,35%,28%))" d="M89 44 C90 29.5 94 24.5 97.5 24.5 C101.5 24.5 104 30 105 44 Z"/>
<!-- анальный плавник: ДЛИННЫЙ, тянется вдоль задней половины брюха (антипод крошечного спинного) -->
<path fill="var(--f3,hsl(35,35%,28%))" d="M36 55 C34 64 41 71 53 71 C64 71 69 65 71 58 Z"/>
<!-- анальный плавник: тонкая тёмная обводка по передней кромке — отделяет от тела -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="1" opacity="0.55" d="M36 55 C34 64 41 71 53 71"/>
<!-- анальный плавник: 3 бледных луча f4 внутри лопасти -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="1" opacity="0.3" d="M41 59 L43.5 70.2"/>
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="1" opacity="0.3" d="M48 63.5 L50.5 70.7"/>
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="1" opacity="0.3" d="M56 66.5 L58 70.5"/>
<!-- брюшной плавник 1: мягкая маленькая лопасть -->
<path fill="var(--f3,hsl(35,35%,28%))" d="M75 62 C73.5 68 76 72.5 80.5 70.5 C83 68.5 82 64 81 61 Z"/>
<!-- брюшной плавник 2: пара к первой, чуть сзади -->
<path fill="var(--f3,hsl(35,35%,28%))" d="M84 62.5 C82.5 68.5 85 73 89.5 70.5 C92 68 90.5 64 89.5 61.5 Z"/>
<!-- верхний ус 1: ОЧЕНЬ длинный (≈45 ед.), ложится вдоль брюха почти до брюшных плавников -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="2" stroke-linecap="round" d="M147 53 C130 58 116 64 104 70"/>
<!-- верхний ус 2: пара к первому, чуть ниже -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="2" stroke-linecap="round" d="M145 54 C132 60 120 66 110 73"/>
<!-- нижний ус 1: короткий, уходит назад-вниз -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="2" stroke-linecap="round" d="M144 57 C138 60 130 63 124 67"/>
<!-- нижний ус 2: пара к короткому -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="2" stroke-linecap="round" d="M144 58 C140 61 133 65 128 70"/>
<!-- тело: массивная тупая голова ≈¼ длины с КРУТЫМ лбом-ГОРБОМ (пик 132,27, выше прежнего 31), седло за головой 114,36.5, суженный стебель 11 ед. -->
<path fill="var(--f1,hsl(40,30%,38%))" d="M150 52 C149 43 143.5 30 132 27 C126 26.8 119 29.5 114 36.5 C104 38.8 84 40.2 64 41.8 C50 43 34 44.5 24 45 L24 56 C40 61 62 70 86 70 C102 70 118 61.5 132 57 C139 54.5 147 53 150 52 Z"/>
<!-- брюхо: светлая нижняя полоса вдоль всего корпуса -->
<path fill="var(--f2,hsl(38,30%,68%))" d="M24 56 C40 61 62 70 86 70 C102 70 118 61.5 132 57 C139 54.5 147 53 150 52 C145 51.5 141 52.5 136 54 C129 56 122 58 114 59.5 C104 61.5 96 63.5 86 65 C64 64 42 58.5 24 56 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру, повторяет новый лоб-горб (не зубцы) -->
<path fill="var(--f4,hsl(30,35%,16%))" d="M150 52 C149 43 143.5 30 132 27 C126 26.8 119 29.5 114 36.5 C104 38.8 84 40.2 64 41.8 C50 43 34 44.5 24 45 C34 46.6 52 48.4 64 46.4 C84 44.4 104 41.8 114 39.5 C123 30 130 29 137 35 C143.5 41.5 148 48 150 52 Z"/>
<!-- жаберная пластина: мягкая светлая заливка (за головой, не липнет к глазу) -->
<path fill="var(--f2,hsl(38,30%,68%))" opacity="0.3" d="M119 36 C124 44 123 53 119 60 C115 53 114 44 114 37 Z"/>
<!-- жаберная дуга: тёмный серп у основания головы -->
<path fill="none" stroke="var(--f4,hsl(30,35%,16%))" stroke-width="1.5" d="M119 36 C124 44 123 53 119 60"/>
<!-- голое тело: блёклая f4-клякса 1 (чешуи у сома нет) -->
<path fill="var(--f4,hsl(30,35%,16%))" opacity="0.14" d="M60 43 C66 41 72 44 70.5 48 C69 52 61 51.5 58.5 48.5 C56.5 45.5 57.5 44 60 43 Z"/>
<!-- блёклая клякса 2 -->
<path fill="var(--f4,hsl(30,35%,16%))" opacity="0.12" d="M86 44 C91 42 96 45 94.5 49 C93 53 86 52 84 49 C82.5 46.5 83.5 45 86 44 Z"/>
<!-- блёклая клякса 3 -->
<path fill="var(--f4,hsl(30,35%,16%))" opacity="0.15" d="M46 50 C50 48.5 54 51 52.5 54.5 C51 57.5 45 57 43.5 54 C42.5 51.5 43.5 50.5 46 50 Z"/>
<!-- блёклая клякса 4 -->
<path fill="var(--f4,hsl(30,35%,16%))" opacity="0.13" d="M104 46 C107.5 44.5 110.5 47 109.5 50 C108.5 52.5 103 52 102 49.5 C101.5 47.5 102 46.5 104 46 Z"/>
<!-- губа: УЗКАЯ светлая кромка снизу пасти (нижняя челюсть) -->
<path fill="var(--f2,hsl(38,30%,68%))" d="M151 57.6 C144 60.6 133 61 124 58 C133 62 145 61.8 151.6 59 Z"/>
<!-- пасть: ЗАМЕТНАЯ тёмная полоса нутра высотой ~3.6 ед., раскрыта назад-вниз от (151,54) до (124,58) — не «улыбка» -->
<path fill="var(--f4,hsl(30,35%,16%))" d="M151 54 C144 55.6 133 57.2 124 58 C133 61 144 60.6 151 57.6 Z"/>
<!-- грудной плавник: мягкая лопасть на боку под жаберной дугой (рисуется ПОСЛЕ тела) -->
<path fill="var(--f3,hsl(35,35%,28%))" d="M133 53 C128 55 121 59.5 121.5 64.5 C122 69 128 62.5 132.5 57.5 Z"/>
<!-- глаз: НАМЕРЕННО крошечный (антипод окуня), высоко и вперёд; ободок → склера → тусклая радужка → зрачок → блик -->
<circle fill="var(--f4,hsl(30,35%,16%))" cx="135" cy="41" r="3.6"/>
<circle fill="#f4f1e6" cx="135" cy="41" r="2.7"/>
<circle fill="#b3a468" cx="135" cy="41" r="1.9"/>
<circle fill="#142638" cx="135" cy="41" r="1.3"/>
<circle fill="#fff" cx="134.2" cy="40.2" r="0.5"/>
</svg>