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

30 lines
4.9 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.
<!-- Скат-манта (manta): РАКУРС ДОРСАЛЬНО (вид строго сверху, голова вправо) — плоский ромб-«бумажный змей» с широкими крыльями: передние кромки идут от рыла (132,50) к кончикам крыльев (20,18)/(20,82), задняя кромка вогнута к (48,44)/(48,56) и сходится у корня хвоста (40,50). Отличия от камбалы: 2 цефалические рожки f3 (132,44)→(150,42) и зеркало; ХВОСТ-ХЛЫСТ (40,50)→(8,50) БЕЗ хвостового плавника; 2 глаза РАЗНЕСЕНЫ по бокам головы (116,43)/(116,57), а не сведены рядом; широкая терминальная щель рта (136,50). Контур строго симметричен относительно y=50 (аквариум зеркалит по вертикали) -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост-хлыст f3: тонкий, сужается от корня (40,50) к кончику (8,50); НЕ хвостовой плавник -->
<path fill="var(--f3,hsl(220,34%,28%))" d="M40 47.2 C30 48.2 18 49.3 8 50 C18 50.7 30 51.8 40 52.8 Z"/>
<!-- диск: плоский ромб-«змей» — рыло (132,50) → кончики крыльев (20,18)/(20,82), задняя кромка вогнута к (48,44)/(48,56) и сходится у корня хвоста (40,50) -->
<path fill="var(--f1,hsl(220,28%,38%))" d="M132 50 C112 34 58 22 20 18 Q45 33 48 44 L40 50 L48 56 Q45 67 20 82 C58 78 112 66 132 50 Z"/>
<!-- кромка f4 по переднему краю крыльев (тонкая тёмная линия вдоль обеих кромок) -->
<path fill="none" stroke="var(--f4,hsl(220,38%,16%))" stroke-width="1.3" opacity="0.8" d="M20 18 C58 22 112 34 132 50 C112 66 58 78 20 82"/>
<!-- f4-кляксы камуфляжа: у плеч и по оси, попарно симметрично (compound-path) -->
<path fill="var(--f4,hsl(220,38%,16%))" opacity="0.45" d="M96 39 a3 2.2 0 1 0 6 0 a3 2.2 0 1 0 -6 0 M96 61 a3 2.2 0 1 0 6 0 a3 2.2 0 1 0 -6 0 M77.5 45.5 a2.8 2.1 0 1 0 5.6 0 a2.8 2.1 0 1 0 -5.6 0 M77.5 54.5 a2.8 2.1 0 1 0 5.6 0 a2.8 2.1 0 1 0 -5.6 0 M62 47.8 a2.4 1.8 0 1 0 4.8 0 a2.4 1.8 0 1 0 -4.8 0 M62 52.2 a2.4 1.8 0 1 0 4.8 0 a2.4 1.8 0 1 0 -4.8 0"/>
<!-- 2 светлых f2-шеврона, сходящихся на оси: (110,40)→(96,50)→(110,60) -->
<path fill="none" stroke="var(--f2,hsl(215,22%,72%))" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" opacity="0.55" d="M110 40 L96 50 L110 60"/>
<!-- жабры: 3 короткие f4-щели у каждого бока головы (в дорсальном ракурсе условны) -->
<path fill="none" stroke="var(--f4,hsl(220,38%,16%))" stroke-width="1.1" stroke-linecap="round" opacity="0.75" d="M109 42.5 L104 40.5 M107.5 44.5 L102 42 M106 46.5 L100.5 44 M109 57.5 L104 59.5 M107.5 55.5 L102 58 M106 53.5 L100.5 56"/>
<!-- цефалический рожок верхний f3: от головы (124,45.5) к кончику (150,42) -->
<path fill="var(--f3,hsl(220,34%,28%))" d="M124 45.5 C132 44.5 141 43.3 150 42 C143.5 45.5 136 47.5 127 49 Z"/>
<!-- цефалический рожок нижний f3: зеркало верхнего относительно y=50 -->
<path fill="var(--f3,hsl(220,34%,28%))" d="M124 54.5 C132 55.5 141 56.7 150 58 C143.5 54.5 136 52.5 127 51 Z"/>
<!-- рот f4: широкая терминальная щель (136,50) шириной 10 — тёмные губы -->
<path fill="var(--f4,hsl(220,38%,16%))" d="M136.5 45 Q131 47.5 131 50 Q131 52.5 136.5 55 Q139.5 52.5 139.5 50 Q139.5 47.5 136.5 45 Z"/>
<!-- рот f2: светлая открытая полость внутри щели -->
<path fill="var(--f2,hsl(215,22%,72%))" d="M135.4 47.2 Q132.2 48.7 132.2 50 Q132.2 51.3 135.4 52.8 Q137.4 51.3 137.4 50 Q137.4 48.7 135.4 47.2 Z"/>
<!-- глаз верхний (116,43): f4-ободок → склера → янтарная радужка → зрачок → блик; оба глаза разнесены по бокам головы -->
<path fill="var(--f4,hsl(220,38%,16%))" d="M113.2 43 a2.8 2.8 0 1 0 5.6 0 a2.8 2.8 0 1 0 -5.6 0 M113.2 57 a2.8 2.8 0 1 0 5.6 0 a2.8 2.8 0 1 0 -5.6 0"/>
<path fill="#f4f1e6" d="M114 43 a2 2 0 1 0 4 0 a2 2 0 1 0 -4 0 M114 57 a2 2 0 1 0 4 0 a2 2 0 1 0 -4 0"/>
<path fill="#c9a23a" d="M114.7 43 a1.3 1.3 0 1 0 2.6 0 a1.3 1.3 0 1 0 -2.6 0 M114.7 57 a1.3 1.3 0 1 0 2.6 0 a1.3 1.3 0 1 0 -2.6 0"/>
<path fill="#142638" d="M115.1 43 a0.9 0.9 0 1 0 1.8 0 a0.9 0.9 0 1 0 -1.8 0 M115.1 57 a0.9 0.9 0 1 0 1.8 0 a0.9 0.9 0 1 0 -1.8 0"/>
<path fill="#fff" d="M114.9 42.1 a0.5 0.5 0 1 0 1 0 a0.5 0.5 0 1 0 -1 0 M114.9 57.9 a0.5 0.5 0 1 0 1 0 a0.5 0.5 0 1 0 -1 0"/>
</svg>