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

42 lines
5.0 KiB
XML

<!-- Лещ (bream): высокое ромбовидное тело на очень тонком хвостовом стебле, длинный анальный плавник-«юбка» с вогнутой кромкой и веером лучей (главная сигнатура), короткий высокий спинной, мелкая голова с крошечным низким глазом, глубокая вилка хвоста; тёмно-бронзовая спина на серебристом теле -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: глубокая вилка; светлая кромка, чтобы лопасти не сливались с тенью -->
<path fill="var(--f3,hsl(210,28%,36%))" stroke="var(--f2,hsl(205,24%,78%))" stroke-width="1" stroke-opacity="0.5" d="M50 46 L12 28 C22 40 26 46 30 50 C26 54 22 60 12 72 L50 54 Z"/>
<!-- спинной плавник: короткий и высокий (антипод длинного анального) -->
<path fill="var(--f3,hsl(210,28%,36%))" d="M74 24 C78 10 84 3 90 3 C97 3 103 9 107 23 L74 25 Z"/>
<!-- анальный плавник: главный признак — длинная «юбка» вдоль задней половины брюха, тёмная обводка вогнутой наружной кромки -->
<path fill="var(--f3,hsl(210,28%,36%))" stroke="var(--f4,hsl(28,30%,23%))" stroke-width="1" stroke-opacity="0.55" d="M58 61 C47 69 41 81 46 94 C63 86 82 84 99 91 C103 89 103 85 100 80 C84 74 68 67 58 61 Z"/>
<!-- лучи анального плавника: веер от основания к кромке (передние длиннее) -->
<path fill="none" stroke="var(--f4,hsl(28,30%,23%))" stroke-width="0.8" opacity="0.33" d="M60 62 L47 92 M69 66 L57 90 M79 70 L70 87 M89 74 L84 86 M97 78 L97 89"/>
<!-- брюшные плавники: пара мягких уплощённых лопастей без острых концов -->
<path fill="var(--f3,hsl(210,28%,36%))" d="M106 79 C100 83 101 90 107 90 C112 90 115 84 114 80 Z"/>
<path fill="var(--f3,hsl(210,28%,36%))" d="M119 81 C113 85 114 92 120 92 C125 92 128 86 127 82 Z"/>
<!-- тело: высокий ромб с остриём на спине и очень тонким стеблем (длина/глубина ≈0.65) -->
<path fill="var(--f1,hsl(208,30%,52%))" d="M150 53 C146 45 141 38 127 31 C118 24 106 17 94 17 C74 17 56 27 46 47 L46 53 C56 73 78 85 104 85 C126 85 142 74 146 62 C148 58 149 55 150 53 Z"/>
<!-- брюхо: серебристая нижняя треть -->
<path fill="var(--f2,hsl(205,24%,78%))" d="M46 53 C56 73 78 85 104 85 C126 85 142 74 146 62 C138 72 120 78 102 78 C76 78 58 68 46 53 Z"/>
<!-- спинная кромка: толстая тёмно-бронзовая полоса от затылка до стебля -->
<path fill="var(--f4,hsl(28,30%,23%))" d="M134 34 C126 26 112 19 94 17 C76 18 58 27 46 47 C59 31 77 23 94 23 C111 23 125 29 135 38 Z"/>
<!-- жаберная пластина: мягкая светлая заливка -->
<path fill="var(--f2,hsl(205,24%,78%))" opacity="0.3" d="M131 37 C137 44 138 54 133 64 C127 54 124 44 125 38 Z"/>
<!-- жаберная дуга (сдвинута влево, чтобы не сливаться с ободком глаза) -->
<path fill="none" stroke="var(--f4,hsl(28,30%,23%))" stroke-width="1.5" d="M131 37 C137 44 138 54 133 64"/>
<!-- чешуя: мелкие бледные полумесяцы в два ряда по средней части бока -->
<path fill="var(--f4,hsl(28,30%,23%))" opacity="0.15" d="M75 34 Q81 39 75 44 Q77 39 75 34 Z"/>
<path fill="var(--f4,hsl(28,30%,23%))" opacity="0.15" d="M91 32 Q97 37 91 42 Q93 37 91 32 Z"/>
<path fill="var(--f4,hsl(28,30%,23%))" opacity="0.15" d="M107 35 Q113 40 107 45 Q109 40 107 35 Z"/>
<path fill="var(--f4,hsl(28,30%,23%))" opacity="0.15" d="M69 48 Q75 53 69 58 Q71 53 69 48 Z"/>
<path fill="var(--f4,hsl(28,30%,23%))" opacity="0.15" d="M87 46 Q93 51 87 56 Q89 51 87 46 Z"/>
<path fill="var(--f4,hsl(28,30%,23%))" opacity="0.15" d="M105 50 Q111 55 105 60 Q107 55 105 50 Z"/>
<!-- рот: крошечная приподнятая щель (рот слегка вверх) -->
<path fill="var(--f4,hsl(28,30%,23%))" d="M144 49.5 C147 49.8 149 50.6 150 52 C148.4 53 146.2 52.4 144.8 51 Z"/>
<!-- грудной плавник: мелкий, низко на теле -->
<path fill="var(--f3,hsl(210,28%,36%))" d="M130 58 L113 73 L133 62 Z"/>
<!-- глаз: МАЛЕНЬКИЙ и низко у рыла; узкая склера, радужка/зрачок доминируют -->
<circle fill="var(--f4,hsl(28,30%,23%))" cx="138" cy="45" r="4.5"/>
<circle fill="#f4f1e6" cx="138" cy="45" r="2.9"/>
<circle fill="#c8b06a" cx="138" cy="45" r="2.3"/>
<circle fill="#142638" cx="138" cy="45" r="1.5"/>
<circle fill="#fff" cx="137" cy="44" r="0.6"/>
</svg>