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

35 lines
8.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.
<!-- Гигантский кальмар (squid): головоногий моллюск, НЕ рыба — обтекаемая ракетообразная мантия-торпеда с остриём влево и головой вправо; ГЛАВНЫЕ видовые признаки — пара плавников-«крылышек» у заднего конца мантии и 2 ДЛИННЫХ ловчих щупальца с булавами-присосками (в отличие от 8 равных коротких рук осьминога-«мешка»); короткий веер из 8 рук, сифон-трубка, 2 крупных глаза; фигура симметрична относительно y=50 -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- мантия-торпеда: кончик (18,50), спинной подъём (56,36)→(94,40), голова (106,42)…(120,58); низ зеркален -->
<path fill="var(--f1,hsl(300,36%,46%))" d="M 18 50 C 28 44 40 38 56 36 C 72 34.5 86 36.5 96 40 C 101 41.5 105 42 108 42 C 115 42 120 45 120 50 C 120 55 115 58 108 58 C 105 58 101 58.5 96 60 C 86 63.5 72 65.5 56 64 C 40 62 28 56 18 50 Z"/>
<!-- светлое брюхо мантии f2 вдоль нижнего контура -->
<path fill="var(--f2,hsl(300,22%,72%))" d="M 108 58 C 105 58 101 58.5 96 60 C 86 63.5 72 65.5 56 64 C 40 62 28 56 18 50 C 26 55.5 38 60.5 54 61.8 C 70 63 86 61.5 96 58.5 C 102 57 105 56.5 108 56.5 Z"/>
<!-- плавники-«крылышки» f3 у заднего конца мантии (верхний и нижний зеркально): (18,50)-(40,34)-(52,44) -->
<path fill="var(--f3,hsl(300,40%,30%))" d="M 18 50 C 26 39.5 34 34.5 40 34 C 46 36.5 50 40.5 52 44 C 43 41.5 29 45.5 18 50 Z M 18 50 C 26 60.5 34 65.5 40 66 C 46 63.5 50 59.5 52 56 C 43 58.5 29 54.5 18 50 Z"/>
<!-- тёмная кромка f4 по верху мантии -->
<path fill="none" stroke="var(--f4,hsl(300,42%,18%))" stroke-width="1.6" stroke-linecap="round" d="M 108 42 C 105 42 101 41.5 96 40 C 86 36.5 72 34.5 56 36 C 40 38 28 44 18 50"/>
<!-- тёмная граница f4 между мантией и головой -->
<path fill="none" stroke="var(--f4,hsl(300,42%,18%))" stroke-width="1.2" d="M 105 43.5 C 108.5 46 108.5 54 105 56.5"/>
<!-- сифон f4: короткая трубка от (104,56) влево-вниз -->
<path fill="var(--f4,hsl(300,42%,18%))" d="M 107 54.5 C 101 56 96.5 59.5 94 63.5 L 98.5 65.5 C 100.5 61.5 103.5 58.5 108 56.5 Z"/>
<!-- 8 коротких рук f1: веер от (119.5,42..58) вправо, кончики подкручены (4 вверх + 4 зеркальные вниз), compound-path -->
<path fill="var(--f1,hsl(300,36%,46%))" d="M 119.5 42.5 C 127 38.5 136 34 144 29 C 148 26.6 151.5 25.2 152.5 23.6 C 153.5 21.9 151.2 21.7 148.4 23.5 C 140.5 28.5 129.5 34 122 38.8 C 120.5 40.6 119 43.5 119.5 45.5 Z M 119.5 44 C 128 41.5 139 39.2 147.5 37.4 C 151.5 36.5 154 35.8 154.4 34.4 C 154.8 33 152.2 33.2 149.4 34 C 140 37 129.5 39.8 122.5 41.8 C 120.5 42.8 119.2 45.5 119.5 47 Z M 119.5 45.5 C 128 45 138 44.4 146.5 43.6 C 150 43.2 152 42.8 152.3 41.8 C 152.6 40.8 150.2 40.9 147.6 41.3 C 139.5 42.7 130 44 122.5 44.7 C 120.8 45 119.2 46.5 119.5 48.5 Z M 119.5 46.5 C 126 47 134 47.2 140.5 47.1 C 143.8 47 146 46.7 146.4 45.9 C 146.8 45.1 144.6 45.1 142.4 45.5 C 136 46.6 128.5 47.4 122.5 47.9 C 120.8 48.1 119.2 48.2 119.5 49.5 Z M 119.5 57.5 C 127 61.5 136 66 144 71 C 148 73.4 151.5 74.8 152.5 76.4 C 153.5 78.1 151.2 78.3 148.4 76.5 C 140.5 71.5 129.5 66 122 61.2 C 120.5 59.4 119 56.5 119.5 54.5 Z M 119.5 56 C 128 58.5 139 60.8 147.5 62.6 C 151.5 63.5 154 64.2 154.4 65.6 C 154.8 67 152.2 66.8 149.4 66 C 140 63 129.5 60.2 122.5 58.2 C 120.5 57.2 119.2 54.5 119.5 53 Z M 119.5 54.5 C 128 55 138 55.6 146.5 56.4 C 150 56.8 152 57.2 152.3 58.2 C 152.6 59.2 150.2 59.1 147.6 58.7 C 139.5 57.3 130 56 122.5 55.3 C 120.8 55 119.2 53.5 119.5 51.5 Z M 119.5 53.5 C 126 53 134 52.8 140.5 52.9 C 143.8 53 146 53.3 146.4 54.1 C 146.8 54.9 144.6 54.9 142.4 54.5 C 136 53.4 128.5 52.6 122.5 52.1 C 120.8 51.9 119.2 51.8 119.5 50.5 Z"/>
<!-- 2 ДЛИННЫХ ловчих щупальца f1: от (120,48)/(120,52) с изгибом к (156,20)/(156,80), на концах «булавы» с присосками -->
<path fill="var(--f1,hsl(300,36%,46%))" d="M 120 47 C 130 45 140 39 147 32 C 150 29 152 25.5 153.5 22.5 C 154.5 24.5 153.5 27 151 30 C 144 38 133 45 121 50 Z M 120 53 C 130 55 140 61 147 68 C 150 71 152 74.5 153.5 77.5 C 154.5 75.5 153.5 73 151 70 C 144 62 133 55 121 50 Z M 150 25 C 151.5 20.5 155 17.5 157 19 C 158.5 20.2 157.5 24 154.5 26.5 C 152.5 28 150.5 27.5 150 25 Z M 150 75 C 151.5 79.5 155 82.5 157 81 C 158.5 79.8 157.5 76 154.5 73.5 C 152.5 72 150.5 72.5 150 75 Z"/>
<!-- низ ловчих щупалец f3 (перекрашиваемый) — тонкая полоса по внутренней кромке -->
<path fill="var(--f3,hsl(300,40%,30%))" d="M 121 50 C 133 45 144 38 151 30 C 150 32 148 34 145 36 C 138 41 129 46 122 49 Z M 121 50 C 133 55 144 62 151 70 C 150 68 148 66 145 64 C 138 59 129 54 122 51 Z"/>
<!-- присоски f2 с тёмным римом f4: по 2 ряда на руках и на булавах (compound-path) -->
<path fill="var(--f2,hsl(300,22%,72%))" stroke="var(--f4,hsl(300,42%,18%))" stroke-width="0.5" d="M 128.98 38.78 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 127.82 36.92 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 137.23 33.63 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 136.07 31.77 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 129.3 43.22 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.64 41.12 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 138.01 40.44 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 137.35 38.34 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.51 46.53 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.17 44.35 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 136.71 45.23 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 136.37 43.05 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 126.66 48.47 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 126.48 46.27 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 133.39 47.95 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 133.21 45.75 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.98 61.22 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 127.82 63.08 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 137.23 66.37 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 136.07 68.23 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 129.3 56.78 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.64 58.88 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 138.01 59.56 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 137.35 61.66 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.51 53.47 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 128.17 55.65 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 136.71 54.77 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 136.37 56.95 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 126.66 51.53 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 126.48 53.73 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 133.39 52.05 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 133.21 54.25 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 151.57 24.75 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 153.42 23.1 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 155.27 21.45 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 150.23 23.25 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 152.08 21.6 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 153.93 19.95 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 151.57 75.25 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 153.42 76.9 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 155.27 78.55 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 150.23 76.75 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 152.08 78.4 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0 M 153.93 80.05 a 1 1 0 1 0 2 0 a 1 1 0 1 0 -2 0"/>
<!-- глаза (110,40)/(110,60): 5 слоёв — тёмный ободок f4 → склера → золотая радужка → зрачок → блик -->
<circle cx="110" cy="40" r="6.2" fill="var(--f4,hsl(300,42%,18%))"/>
<circle cx="110" cy="40" r="5.2" fill="#f4f1e6"/>
<circle cx="110" cy="40" r="3.6" fill="#d9b23a"/>
<circle cx="110" cy="40" r="2.4" fill="#142638"/>
<circle cx="110.8" cy="38.9" r="0.9" fill="#fff"/>
<circle cx="110" cy="60" r="6.2" fill="var(--f4,hsl(300,42%,18%))"/>
<circle cx="110" cy="60" r="5.2" fill="#f4f1e6"/>
<circle cx="110" cy="60" r="3.6" fill="#d9b23a"/>
<circle cx="110" cy="60" r="2.4" fill="#142638"/>
<circle cx="110.8" cy="61.1" r="0.9" fill="#fff"/>
</svg>