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

47 lines
7.1 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- Окунь (perch): высокое сжатое тело с отчётливым ГОРБОМ — спина от мелкой головы круто встаёт к горбу у x≈94 и плавно падает к толстому хвостовому стеблю (нахлёст 4 ед.); ДВА РАЗДЕЛЬНЫХ спинных плавника — передний КОЛЮЧИЙ (D1, 6 острых шипов по кромке) и задний МЯГКИЙ (D2, округлая кромка), НЕ слиты; КРАСНЫЕ (фикс-акцент) брюшные и анальный плавники и рыжий низ хвостовой лопасти; 6 тёмных вертикальных полос одним compound-path (шире сверху, уже снизу); тёмное пятно на жаберной крышке; тупое рыло с конечным ртом и крупный глаз; оливково-зелёная палитра -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: слабо выемчатый (неглубокая вырезка), корень утоплен в стебель толщ.14 (нахлёст 4 ед.) -->
<path fill="var(--f3,hsl(105,40%,30%))" d="M44 43 C36 39.5 26 34 14 29 C18 36 21.5 41.5 24 46 L24 54 C21.5 58.5 18 64 14 71 C26 66 36 60.5 44 57 Z"/>
<!-- рыжий низ хвоста (фикс-акцент): красная только НИЖНЯЯ лопасть, верх остаётся f3 -->
<path fill="#c0392b" d="M44 56.5 L24.5 52.5 C21.5 58.5 18 64 14 71 C26 66 36 60.5 44 57 Z"/>
<!-- лучи хвоста: по одному штриху в каждой лопасти -->
<path fill="none" stroke="var(--f4,hsl(110,45%,20%))" stroke-width="0.9" opacity="0.3" d="M40 44 C33 41 25 37 18 33 M40 56 C33 59 25 63 18 67"/>
<!-- D1 передний спинной (КОЛЮЧИЙ): 6 острых шипов, зубцы до y≈20, основание глубоко в теле (нахлёст ≥4 ед.) -->
<path fill="var(--f3,hsl(105,40%,30%))" d="M59.5 36 L61 33 L62 21 L64.5 33 L66 20 L68.5 33 L70 19 L72.5 33 L74 20 L76.5 33 L78 20.5 L80.5 33 L82 22 L84.5 33.5 L85.5 36 Z"/>
<!-- D2 задний спинной (МЯГКИЙ): отдельный округлый плавник на горбе (x90..112), НЕ слит с колючим -->
<path fill="var(--f3,hsl(105,40%,30%))" d="M88 32 C89 26.5 93 23 99 22.8 C105 22.8 110 25.5 112.5 29 L114.5 32 Z"/>
<!-- лучи D2: три коротких веерных штриха ВНУТРИ мягкого плавника (не выходят за кромку) -->
<path fill="none" stroke="var(--f4,hsl(110,45%,20%))" stroke-width="0.9" opacity="0.3" d="M92 31 C92.5 28 93.3 25.8 94.2 24.2 M99 31 C99.2 28 99.6 25.8 100 24 M106 31 C106.3 28.2 106.8 26.2 107.6 24.8"/>
<!-- анальный плавник: КРАСНЫЙ (фикс-акцент), основание глубоко в брюхе (нахлёст ≥4), кончик до y≈84 -->
<path fill="#c0392b" d="M50 59 C52 73 55.5 81 60.5 84 C65.5 81 68.5 74 69 60 Z"/>
<!-- лучи анального плавника: короткие штрихи ВНУТРИ лопасти (за кромку не выходят) -->
<path fill="none" stroke="var(--f4,hsl(110,45%,20%))" stroke-width="0.9" opacity="0.3" d="M54.5 71 C55 74.5 55.7 76.8 56.5 78.2 M60 72 C60.4 74.8 60.9 76.8 61.6 78"/>
<!-- брюшные плавники: ПАРА красных (фикс-акцент) лопастей, направлены вниз-назад, кончики до y≈88 -->
<path fill="#c0392b" d="M99 67 C97.5 77 99 84 103.5 88 C107 82.5 107.5 73 106 67 Z"/>
<path fill="#c0392b" d="M107.5 67 C106.5 77.5 108.5 84.5 113 88 C116 82 116.5 73 115 68 Z"/>
<!-- тело: высокое и сжатое, спина встаёт от мелкой головы к ГОРБУ (пик ≈x94) и падает к стеблю -->
<path fill="var(--f1,hsl(110,35%,42%))" d="M150 50 C146 42 142 37.5 137 36 C132 33.5 125 30 117 27 C108 24.3 100 23.2 94 23.2 C87 23.4 78 25 70 27.5 C62 30 50 36 40 43 L40 57 C50 64 62 70 74 72.6 C84 74.6 92 75 100 74.6 C118 73.6 134 67 142.5 58.5 C145.5 54.5 149 52 150 50 Z"/>
<!-- брюхо: светлая нижняя треть -->
<path fill="var(--f2,hsl(95,25%,68%))" d="M40 57 C50 64 62 70 74 72.6 C84 74.6 92 75 100 74.6 C118 73.6 134 67 142.5 58.5 C132 66 114 70.5 98 70.5 C75 70.5 54 64.5 40 57 Z"/>
<!-- жаберная пластина: мягкая светлая заливка за глазом (объём мелкой головы) -->
<path fill="var(--f2,hsl(95,25%,68%))" opacity="0.3" d="M120 38 C124 44 124 52 120 60 C116 52 115 44 116 39 Z"/>
<!-- 6 тёмных вертикальных полос одним compound-path: шире сверху (4.5), уже снизу (2.5), верх утоплен под спинную кромку, низ до y≈70 -->
<path fill="var(--f4,hsl(110,45%,20%))" opacity="0.5" d="M53.75 35.2 L58.25 35.2 L57.25 68 L54.75 68 Z M67.75 28.9 L72.25 28.9 L71.25 70 L68.75 70 Z M81.75 25.2 L86.25 25.2 L85.25 70 L82.75 70 Z M95.75 24.1 L100.25 24.1 L99.25 70 L96.75 70 Z M109.75 26.8 L114.25 26.8 L113.25 70 L110.75 70 Z M121.75 31.4 L126.25 31.4 L125.25 70 L122.75 70 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру (ложится ПОВЕРХ полос — их верх срезан, не шипы) -->
<path fill="var(--f4,hsl(110,45%,20%))" d="M150 50 C146 42 142 37.5 137 36 C132 33.5 125 30 117 27 C108 24.3 100 23.2 94 23.2 C87 23.4 78 25 70 27.5 C62 30 50 36 40 43 C50 38 62 33.5 70 31 C78 28.6 87 27 94 27 C100 27 108 28.4 117 30.6 C125 32.6 132 35.6 137 38.4 C142 41.2 147 46.5 150 50 Z"/>
<!-- жаберная дуга: тёмный серп у крышки (ниже и левее глаза, ободок не задет) -->
<path fill="none" stroke="var(--f4,hsl(110,45%,20%))" stroke-width="1.5" d="M120 41 C124 46 123.5 54 119.5 60"/>
<!-- тёмное пятно на жаберной крышке (видовой знак окуня) -->
<ellipse fill="var(--f4,hsl(110,45%,20%))" opacity="0.5" cx="123" cy="50" rx="2.6" ry="3.4"/>
<!-- рот: короткая конечная щель на тупом рыле -->
<path fill="var(--f4,hsl(110,45%,20%))" d="M143.5 48.6 C146.5 49 149 49.8 150.3 51.2 C148.6 52.6 146 51.8 143.8 50.2 Z"/>
<!-- грудной плавник: на боку под жаберной дугой (ПОСЛЕ тела), кончиком вниз-назад -->
<path fill="var(--f3,hsl(105,40%,30%))" d="M136 54 C132 57 126.5 62 123.5 67 C126.5 67.5 130.5 64 133.5 60 C135.5 57 136.3 55.5 136 54 Z"/>
<!-- глаз: КРУПНЫЙ (ободок → склера → радужка → зрачок → блик) -->
<circle fill="var(--f4,hsl(110,45%,20%))" cx="132" cy="43" r="5.6"/>
<circle fill="#f7f3e6" cx="132" cy="43" r="4.7"/>
<circle fill="#c98a2a" cx="132" cy="43" r="3.3"/>
<circle fill="#142638" cx="132" cy="43" r="2.3"/>
<circle fill="#fff" cx="130.8" cy="41.8" r="0.9"/>
</svg>