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
7.0 KiB
XML

<!-- Камбала (flounder): «лежачая» ШИРОКООВАЛЬНАЯ пластина 2.1:1 — единственный «блин» среди рыб (вид сверху, голова вправо); ОБА глаза РЯДОМ на верхнем краю у головы (передний 140,43 и задний 128,45.5) — «двойная клякса сверху»; НЕПРЕРЫВНАЯ бахрома спинного и анального плавников по всему краю пластины (мелкие лопасти до y≈18 сверху и y≈82 снизу) с тёмными лучами-штрихами; крошечный ОКРУГЛЫЙ (не вилочный) хвост-веер; мрамор f4 в верхней половине + светлые f2-пятна; контур и бахрома СИММЕТРИЧНЫ относительно y=50 (аквариум зеркалит), асимметрию несут только глаза и мрамор; тупое рыло, асимметричная щель рта, боковая линия f4 -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- хвост-веер: КРОШЕЧНЫЙ и ОКРУГЛЫЙ (НЕ вилка), основанием заходит в стебель (нахлёст ≥4) -->
<path fill="var(--f3,hsl(38,38%,40%))" d="M44 43 C34 40.5 18 42 14 50 C18 58 34 59.5 44 57 Z"/>
<!-- бахрома СПИННОГО плавника: непрерывная по верхнему краю пластины, 6 мелких лопастей до y≈18 -->
<path fill="var(--f3,hsl(38,38%,40%))" d="M145 42 Q140 29 136 30 Q132 33 128 33 Q123 23 118 23 Q114 27 110 27 Q104 18 100 18.5 Q95 22 92 22 Q87 18 82 18.5 Q78 21 74 21 Q69 19 64 19.5 Q60 23 56 26 Q52 29 48 31 Q44 35 42 38 L40 43 L40 48 C58 42 86 29 116 33 C130 37 140 41 145 44 Z"/>
<!-- бахрома АНАЛЬНОГО плавника: зеркало спинной относительно y=50, лопасти до y≈82 -->
<path fill="var(--f3,hsl(38,38%,40%))" d="M145 58 Q140 71 136 70 Q132 67 128 67 Q123 77 118 77 Q114 73 110 73 Q104 82 100 81.5 Q95 78 92 78 Q87 82 82 81.5 Q78 79 74 79 Q69 81 64 80.5 Q60 77 56 74 Q52 71 48 69 Q44 65 42 62 L40 57 L40 52 C58 58 86 71 116 67 C130 63 140 59 145 56 Z"/>
<!-- тело: ШИРОКООВАЛЬНАЯ пластина (макс. ширина 52 у x≈88, стебель 10), тупое рыло (150,50); контур симметричен y=50 с точностью до контрольных точек -->
<path fill="var(--f1,hsl(40,42%,52%))" d="M40 45 C58 33.5 74 25 88 24 C106 22.8 132 33 148 45.5 C149.6 47 150 48.6 150 50 C150 51.4 149.6 53 148 54.5 C132 67 106 77.2 88 76 C74 75 58 66.5 40 55 C38.6 52 38.6 48 40 45 Z"/>
<!-- лучи бахромы: тёмные f4-штрихи по обеим кромкам (compound-path), приглушены -->
<path fill="none" stroke="var(--f4,hsl(35,40%,24%))" stroke-width="1" opacity="0.3" d="M50 44 L46 32 M64 39 L62 22 M80 33 L80 20 M96 32 L98 20 M110 35 L113 23 M124 39 L127 27 M138 43 L140 32 M50 56 L46 68 M64 61 L62 78 M80 67 L80 80 M96 68 L98 80 M110 65 L113 77 M124 61 L127 73 M138 57 L140 68"/>
<!-- светлые f2-пятна: 3 симметричные пары (compound-path) -->
<path fill="var(--f2,hsl(42,38%,80%))" opacity="0.55" d="M56 40 C62 37 68 40 66 44 C64 47 58 46.5 55 44 C53.5 42 54 40.8 56 40 Z M56 60 C62 63 68 60 66 56 C64 53 58 53.5 55 56 C53.5 58 54 59.2 56 60 Z M94 31 C100 29 105 32 103.5 35.5 C102 39 96 38.5 93.5 36 C92 34 92.5 32 94 31 Z M94 69 C100 71 105 68 103.5 64.5 C102 61 96 61.5 93.5 64 C92 66 92.5 68 94 69 Z M118 41 C122 39.5 126 42 125 44.5 C124 47 119 46.5 117.5 44.5 C116.5 43 117 41.5 118 41 Z M118 59 C122 60.5 126 58 125 55.5 C124 53 119 53.5 117.5 55.5 C116.5 57 117 58.5 118 59 Z"/>
<!-- мрамор: 7 f4-клякс-камуфляж ТОЛЬКО в верхней половине (асимметричный узор), compound-path -->
<path fill="var(--f4,hsl(35,40%,24%))" opacity="0.42" d="M46 42 C50 39.5 55 41 53.5 45 C52 48 46.5 47.5 44.5 45 C43.5 43.5 44 42.5 46 42 Z M64 34 C69 31.5 74 33.5 72.5 37.5 C71 41 65 40 63 37.5 C62 36 62.5 34.8 64 34 Z M82 29 C87 27 92 29.5 90.5 33 C89 36.5 82.5 35.5 80.5 33 C79.5 31.4 80 29.8 82 29 Z M100 32 C105 30 110 32.5 108.5 36 C107 39.5 100.5 38.5 98.5 36 C97.5 34.4 98 33 100 32 Z M116 40 C120 38 124 40.5 123 43.5 C122 46.5 117 46 115.5 43.5 C114.5 42 115 40.5 116 40 Z M74 43 C77.5 41.5 81 43.5 80 46 C79 48.5 74.5 48 73 46 C72.2 44.8 72.8 43.6 74 43 Z M86 40 C90 38.5 93 40.5 92 43 C91 45.5 86.5 45 85 43 C84.2 41.8 84.8 40.6 86 40 Z"/>
<!-- тёмная кромка контура: тонкие f4-линии по спинному и брюшному краю (compound-path, симметричны) -->
<path fill="none" stroke="var(--f4,hsl(35,40%,24%))" stroke-width="1.1" opacity="0.5" d="M40 45 C58 33.5 74 25 88 24 C106 22.8 132 33 148 45.5 M40 55 C58 66.5 74 75 88 76 C106 77.2 132 67 148 54.5"/>
<!-- жаберная пластина: мягкая светлая f2-заливка за головой -->
<path fill="var(--f2,hsl(42,38%,80%))" opacity="0.28" d="M114 38 C120 42.5 120 53.5 114 61 C109.5 53.5 109.5 45 114 38 Z"/>
<!-- жаберная дуга: тёмный серп (зазор от обоих глаз ≥4) -->
<path fill="none" stroke="var(--f4,hsl(35,40%,24%))" stroke-width="1.5" d="M114 38 C120 42.5 120 53.5 114 61"/>
<!-- боковая линия: наджаберная дуга (134,40)→(120,44) + прямая (120,44)→(48,49), compound-path f4 -->
<path fill="none" stroke="var(--f4,hsl(35,40%,24%))" stroke-width="1" opacity="0.5" d="M134 40 C128.5 41 123.5 42.5 120 44 L48 49"/>
<!-- грудной плавник: мягкий f3-эллипс на боку, рисуется ПОСЛЕ тела -->
<ellipse fill="var(--f3,hsl(38,38%,40%))" cx="110" cy="60" rx="11" ry="5.5" transform="rotate(-15 110 60)"/>
<!-- рот: асимметричная тёмная щель у притуплённого рыла (148,52.5) -->
<path fill="var(--f4,hsl(35,40%,24%))" d="M150 51.2 C145.5 51.6 141 52.2 137 53.2 C141.5 54.6 145.5 54.2 149.5 53.4 Z"/>
<!-- глаз передний (140,43): ободок → склера → янтарная радужка → зрачок → блик -->
<circle fill="var(--f4,hsl(35,40%,24%))" cx="140" cy="43" r="5.2"/>
<circle fill="#f7f3e6" cx="140" cy="43" r="4.2"/>
<circle fill="#c08a3e" cx="140" cy="43" r="3.2"/>
<circle fill="#142638" cx="140" cy="43" r="2.2"/>
<circle fill="#fff" cx="138.6" cy="41.6" r="0.9"/>
<!-- глаз задний (128,45.5): рядом с передним, чуть меньше — «двойная клякса» на верхнем краю -->
<circle fill="var(--f4,hsl(35,40%,24%))" cx="128" cy="45.5" r="4.4"/>
<circle fill="#f7f3e6" cx="128" cy="45.5" r="3.5"/>
<circle fill="#c08a3e" cx="128" cy="45.5" r="2.7"/>
<circle fill="#142638" cx="128" cy="45.5" r="1.9"/>
<circle fill="#fff" cx="126.8" cy="44.2" r="0.7"/>
</svg>