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

44 lines
6.8 KiB
XML

<!-- Скумбрия (mackerel): веретенообразное тело ~3.5:1 (D/L), заострённое рыло, крупный глаз у конца морды, резкая двухцветность (тёмная спина / серебро снизу). Главный видовой знак — ряд мелких плавничков-ФИНЛЕТОВ позади обоих спинных и анальных (5 клиньев сверху + 4 снизу, «пилообразная» кромка хвостовой половины); ДВА спинных с зазором (D1 выше с лёгкими выемками, D2 мягкий ниже); 7 волнистых тёмных «S»-полос по спине до середины бока (не на брюхе); два анальных; 2 киля f4 на стебле; фикс-акцент — серо-стальная радужка глаза -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост: вилочный, выемка (31,50); корень утоплен в стебель толщ.9 (нахлёст ≥4) -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M48 44 C40 40.5 28 35 12 30 C21 39 27.5 45 31 50 C27.5 55 21 61 12 70 C28 65 40 59.5 48 56 Z"/>
<!-- D2 задний спинной: мягкий, ниже переднего, основание глубоко в спине (нахлёст ≥4) -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M83 40 C85 33.5 88 27.8 91 26 C94.5 28.5 97.5 33.5 99 39.5 Z"/>
<!-- D1 передний спинной: выше, вершина (113,24), задняя кромка с 4 ЛЁГКИМИ вогнутыми выемками -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M103 41 C105 34 108.5 27.5 113 24 Q114.6 28.4 116.3 27.2 Q117.9 31 119.4 30.2 Q121 34.6 122.6 34.4 Q122.8 38 123.5 43.5 Z"/>
<!-- A2 задний анальный: мягкая лопасть, основание в брюхе (нахлёст ≥4) -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M80 60.5 C81.5 64.8 83.2 68.6 85 72 C87.5 68.6 89 64.8 90 60.5 Z"/>
<!-- A1 передний анальный: низ (98,74) -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M92 62 C94 67.5 95.8 71.5 98 74 C101 71.5 103.5 67 105 62 Z"/>
<!-- брюшные: пара мягких лопастей, кончики y71-73, основания в брюхе -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M106.5 60.5 C105.5 66.5 106.3 70.5 108 72.5 C110 70.5 110.5 66.5 110.5 60.5 Z M113.5 60 C112.5 65.5 113.5 69.5 115.5 71.5 C117.5 69.5 118.3 65 118 60 Z"/>
<!-- ФИНЛЕТЫ спины: 5 клиньев x54..80 одним compound-path, видимые зазоры (~1 ед.), основания в теле -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M54 44.5 L58 44.5 L54.8 33 Z M59 43.8 L63 43.8 L59.8 32.4 Z M64 42.8 L68 42.8 L64.8 31.9 Z M69 41.4 L73 41.4 L69.8 31.3 Z M74 40.6 L78 40.6 L74.8 30.8 Z"/>
<!-- ФИНЛЕТЫ брюха: 4 клина x54..76 одним compound-path, видимые зазоры -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M54 55 L58 55 L54.8 72 Z M60 56.5 L64 56.5 L60.8 71.3 Z M66 58 L70 58 L66.8 70.6 Z M72 59.5 L76 59.5 L72.8 70 Z"/>
<!-- тело: веретено ~3.5:1, рыло (152,49)/низ (152.5,50.5), затылок (135,40.5), спина (98,34.5), низ брюха (100,65.5), стебель x44 (45.5/54.5) -->
<path fill="var(--f1,hsl(190,28%,66%))" d="M152 49 C148 43.5 143 41 135 40.5 C122 36.2 110 34.8 98 34.5 C76 35.5 56 39.5 44 45.5 L44 54.5 C56 60.5 76 64.5 100 65.5 C124 65.8 143 57.5 152.5 50.5 Z"/>
<!-- брюхо: светлое серебро (резкая двухцветность), не доходит до спины -->
<path fill="var(--f2,hsl(190,20%,86%))" d="M44 54.5 C56 60.5 76 64.5 100 65.5 C124 65.8 143 57.5 152.5 50.5 C144 57 124 62.5 100 62 C76 61.5 57 58.5 44 54.5 Z"/>
<!-- спинная кромка: тонкая тёмная полоса по верхнему контуру (не зубцы) -->
<path fill="var(--f4,hsl(195,32%,25%))" d="M152 49 C148 43.5 143 41 135 40.5 C122 36.2 110 34.8 98 34.5 C76 35.5 56 39.5 44 45.5 C57 40 76 36.8 98 37 C110 37.1 122 38.6 134 42.5 C142 45.5 148 48 152 49 Z"/>
<!-- 2 киля f4 на стебле (compound): тонкие тёмные гребни сверху и снизу -->
<path fill="var(--f4,hsl(195,32%,25%))" d="M50 46.4 C47.5 45.4 45.3 45.1 44 45.5 L44 47.4 C45.6 47.1 47.7 47.2 50 47.2 Z M50 53.6 C47.5 54.6 45.3 54.9 44 54.5 L44 52.6 C45.6 52.9 47.7 52.8 50 52.8 Z"/>
<!-- жаберная пластина: мягкая светлая заливка головы (объём), не задевает ободок глаза -->
<path fill="var(--f2,hsl(190,20%,86%))" opacity="0.3" d="M126 41 C130 46 130.5 52 127.5 58 C123.5 52 122.5 46 123.5 41.5 Z"/>
<!-- жаберная дуга: тонкий тёмный серп у головы -->
<path fill="none" stroke="var(--f4,hsl(195,32%,25%))" stroke-width="1.5" d="M125 41 C129 46 129.5 52 126.5 58"/>
<!-- 7 ВОЛНИСТЫХ тёмных «S»-полос по спине одним compound-path: верх вплотную под спинной кромкой, низ до середины бока (y≈50.5), брюхо НЕ задевают -->
<path fill="var(--f4,hsl(195,32%,25%))" d="M56 42.2 C58.9 45.3 53.6 47.3 58.2 50.5 L61 49.7 C56.9 45.1 62.2 46.4 59.2 42.2 Z M67 40.1 C69.9 44 64.6 46.4 69.2 50.5 L72 49.7 C67.9 45.1 73.2 44.3 70.2 40.1 Z M78 38.8 C80.9 43.2 75.6 45.9 80.2 50.5 L83 49.7 C78.9 45.1 84.2 43 81.2 38.8 Z M89 38.2 C91.9 42.8 86.6 45.7 91.2 50.5 L94 49.7 C89.9 45.1 95.2 42.4 92.2 38.2 Z M100 38.2 C102.9 42.8 97.6 45.7 102.2 50.5 L105 49.7 C100.9 45.1 106.2 42.4 103.2 38.2 Z M111 39 C113.9 43.3 108.6 46 113.2 50.5 L116 49.7 C111.9 45.1 117.2 43.2 114.2 39 Z M122 40.8 C124.9 44.4 119.6 46.7 124.2 50.5 L127 49.7 C122.9 45.1 128.2 45 125.2 40.8 Z"/>
<!-- рот: щель от заострённого конца рыла назад под глаз -->
<path fill="var(--f4,hsl(195,32%,25%))" d="M151.5 49.3 C145 49.8 139 50.6 132 52 C139 53.2 145 52.8 152 51.4 Z"/>
<!-- грудной плавник: на боку, корень (120,54) → кончик (113,67), ПОСЛЕ тела -->
<path fill="var(--f3,hsl(192,34%,46%))" d="M120.5 54 C117.5 58 114.5 62.5 113 67 C116.5 65 120 61 121.5 56 Z"/>
<!-- глаз: крупный у конца морды (ободок → склера → серая радужка → зрачок → блик) -->
<circle fill="var(--f4,hsl(195,32%,25%))" cx="133" cy="42.5" r="4.6"/>
<circle fill="#f7f3e6" cx="133" cy="42.5" r="3.7"/>
<circle fill="#9aa7b0" cx="133" cy="42.5" r="3"/>
<circle fill="#142638" cx="133" cy="42.5" r="2.1"/>
<circle fill="#fff" cx="131.8" cy="41.3" r="0.8"/>
</svg>