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

<!-- Гигантский осьминог (octopus): вид сверху/слегка 3-4 — мантия-мешок справа (широкое основание у головы, сужение к правому кончику), короткая голова с двумя КРУПНЫМИ глазами (видовой знак, горизонтальный зрачок), 8 щупалец веером влево «солнцем» (4 пары зеркальных подкрученных рук — НЕ прямые шпаги), лопастной веб-мембрана f3 в просветах между основаниями рук, два ряда присосок на четырёх ближних руках и короткий сифон снизу; без плавников — этим отличается от кальмара -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 160 100" width="160" height="100">
<!-- мантия-мешок f1: широкое основание у головы, сужение к правому кончику (150,50); симметрично y=50 -->
<path fill="var(--f1,hsl(350,40%,48%))" d="M96 26C112 25 130 30 143 39C149 43 151 47 150 50C151 53 149 57 143 61C130 70 112 75 96 74C90 70 90 30 96 26Z"/>
<!-- тёмная кромка f3 по верхнему и нижнему краю мантии (парный compound, тонкая, симметрична) -->
<path fill="var(--f3,hsl(350,42%,30%))" d="M96 28C112 27 130 31.5 143 40C148 43 151 47 150 50C143 44.5 132 39 120 36C113 34.5 105 33 96 32ZM96 72C112 73 130 68.5 143 60C148 57 151 53 150 50C143 55.5 132 61 120 64C113 65.5 105 67 96 68Z"/>
<!-- светлый срединный гребень f2 по мантии (симметричен y=50, сужен с обоих концов) -->
<path fill="var(--f2,hsl(348,24%,72%))" d="M104 47.6C118 46.6 133 48 146.5 50C133 52 118 53.4 104 52.4C101.4 51.2 101.4 48.8 104 47.6Z"/>
<!-- сифон f4: короткая трубка из-под головы вниз-влево -->
<path fill="var(--f4,hsl(350,44%,20%))" d="M94 57C90 61 86.5 64.5 84 68C82.6 70 84 71.6 85.8 70.4C88.5 68 91 63.5 95 58Z"/>
<!-- веб f3: лопасти мембраны в просветах между основаниями рук (симметричен y=50) -->
<path fill="var(--f3,hsl(350,42%,30%))" d="M91 41.4C72.8 39.4 53.56 36.9 39 42.4C53.56 47.9 72.8 45.4 91 43.4ZM91 56.6C72.8 54.6 53.56 52.1 39 57.6C53.56 63.1 72.8 60.6 91 58.6ZM91 44.3C74.9 42.3 57.88 39.8 45 45.3C57.88 50.8 74.9 48.3 91 46.3ZM91 53.7C74.9 51.7 57.88 49.2 45 54.7C57.88 60.2 74.9 57.7 91 55.7ZM91 46.8C78.4 44.8 65.08 42.3 55 47.8C65.08 53.3 78.4 50.8 91 48.8ZM91 51.2C78.4 49.2 65.08 46.7 55 52.2C65.08 57.7 78.4 55.2 91 53.2Z"/>
<!-- заплатки стыков (закрывают микро-щели с фоном: веб→голова по центру y=50 и голова→сифон/щупальца); рисуются ДО щупалец/головы, чтобы те перекрыли излишки -->
<rect fill="var(--f3,hsl(350,42%,30%))" x="82" y="49.4" width="3.4" height="1.2"/>
<ellipse fill="var(--f1,hsl(350,40%,48%))" cx="89.5" cy="60.9" rx="0.8" ry="0.8"/>
<!-- 8 щупалец f1 веером: compound из 8 зеркальных рук с подкрученными кончиками -->
<path fill="var(--f1,hsl(350,40%,48%))" d="M90.42 37.21L86.13 34.61L81.91 32.18L77.77 29.89L73.71 27.77L69.74 25.79L65.88 23.98L62.12 22.32L58.48 20.81L54.96 19.46L51.57 18.27L48.32 17.24L45.22 16.36L42.27 15.65L39.49 15.1L36.87 14.72L34.43 14.51L32.17 14.49L30.1 14.66L28.26 15.08L27 17L27 17L28.66 18.47L30.17 18.74L31.88 19.06L33.8 19.49L35.91 20.03L38.22 20.7L40.71 21.5L43.37 22.44L46.2 23.51L49.18 24.73L52.31 26.09L55.57 27.59L58.96 29.23L62.48 31.02L66.1 32.96L69.83 35.03L73.65 37.26L77.55 39.62L81.53 42.14L85.58 44.79ZM 90.42 62.79 L 86.13 65.39 L 81.91 67.82 L 77.77 70.11 L 73.71 72.23 L 69.74 74.21 L 65.88 76.02 L 62.12 77.68 L 58.48 79.19 L 54.96 80.54 L 51.57 81.73 L 48.32 82.76 L 45.22 83.64 L 42.27 84.35 L 39.49 84.9 L 36.87 85.28 L 34.43 85.49 L 32.17 85.51 L 30.1 85.34 L 28.26 84.92 L 27 83 L 27 83 L 28.66 81.53 L 30.17 81.26 L 31.88 80.94 L 33.8 80.51 L 35.91 79.97 L 38.22 79.3 L 40.71 78.5 L 43.37 77.56 L 46.2 76.49 L 49.18 75.27 L 52.31 73.91 L 55.57 72.41 L 58.96 70.77 L 62.48 68.98 L 66.1 67.04 L 69.83 64.97 L 73.65 62.74 L 77.55 60.38 L 81.53 57.86 L 85.58 55.21 ZM89.87 39.9L85.82 38.2L81.75 36.6L77.69 35.12L73.64 33.74L69.61 32.48L65.61 31.32L61.65 30.27L57.75 29.32L53.91 28.49L50.16 27.76L46.49 27.13L42.92 26.61L39.46 26.2L36.12 25.9L32.92 25.7L29.87 25.62L26.97 25.67L24.25 25.84L21.72 26.19L19.5 28L19.5 28L21.83 29.6L24.23 29.92L26.79 30.25L29.52 30.63L32.4 31.08L35.43 31.6L38.58 32.2L41.86 32.88L45.24 33.64L48.72 34.49L52.28 35.44L55.91 36.47L59.61 37.59L63.35 38.81L67.13 40.12L70.93 41.52L74.74 43.02L78.56 44.62L82.36 46.31L86.13 48.1ZM 89.87 60.1 L 85.82 61.8 L 81.75 63.4 L 77.69 64.88 L 73.64 66.26 L 69.61 67.52 L 65.61 68.68 L 61.65 69.73 L 57.75 70.68 L 53.91 71.51 L 50.16 72.24 L 46.49 72.87 L 42.92 73.39 L 39.46 73.8 L 36.12 74.1 L 32.92 74.3 L 29.87 74.38 L 26.97 74.33 L 24.25 74.16 L 21.72 73.81 L 19.5 72 L 19.5 72 L 21.83 70.4 L 24.23 70.08 L 26.79 69.75 L 29.52 69.37 L 32.4 68.92 L 35.43 68.4 L 38.58 67.8 L 41.86 67.12 L 45.24 66.36 L 48.72 65.51 L 52.28 64.56 L 55.91 63.53 L 59.61 62.41 L 63.35 61.19 L 67.13 59.88 L 70.93 58.48 L 74.74 56.98 L 78.56 55.38 L 82.36 53.69 L 86.13 51.9 ZM89.27 42.48L85.22 41.42L81.12 40.44L76.99 39.56L72.85 38.77L68.7 38.08L64.54 37.47L60.41 36.96L56.3 36.54L52.22 36.21L48.2 35.98L44.23 35.83L40.33 35.78L36.52 35.83L32.8 35.97L29.19 36.21L25.7 36.56L22.34 37.01L19.13 37.59L16.09 38.33L13.5 40.5L13.5 40.5L16.62 41.7L19.63 41.64L22.76 41.58L26.01 41.57L29.39 41.61L32.87 41.71L36.45 41.89L40.12 42.13L43.87 42.45L47.68 42.85L51.54 43.32L55.45 43.87L59.38 44.5L63.33 45.2L67.29 45.99L71.24 46.85L75.17 47.8L79.07 48.83L82.93 49.93L86.73 51.12ZM 89.27 57.52 L 85.22 58.58 L 81.12 59.56 L 76.99 60.44 L 72.85 61.23 L 68.7 61.92 L 64.54 62.53 L 60.41 63.04 L 56.3 63.46 L 52.22 63.79 L 48.2 64.02 L 44.23 64.17 L 40.33 64.22 L 36.52 64.17 L 32.8 64.03 L 29.19 63.79 L 25.7 63.44 L 22.34 62.99 L 19.13 62.41 L 16.09 61.67 L 13.5 59.5 L 13.5 59.5 L 16.62 58.3 L 19.63 58.36 L 22.76 58.42 L 26.01 58.43 L 29.39 58.39 L 32.87 58.29 L 36.45 58.11 L 40.12 57.87 L 43.87 57.55 L 47.68 57.15 L 51.54 56.68 L 55.45 56.13 L 59.38 55.5 L 63.33 54.8 L 67.29 54.01 L 71.24 53.15 L 75.17 52.2 L 79.07 51.17 L 82.93 50.07 L 86.73 48.88 ZM88.36 45.62L84.73 45.27L81.1 44.96L77.49 44.69L73.89 44.45L70.33 44.25L66.79 44.08L63.29 43.94L59.83 43.84L56.43 43.76L53.08 43.72L49.79 43.72L46.56 43.74L43.41 43.79L40.34 43.88L37.36 43.99L34.47 44.15L31.67 44.33L28.98 44.57L26.4 44.88L24 46.4L24 46.4L26.52 47.7L29.09 47.82L31.76 47.92L34.53 48L37.39 48.09L40.34 48.2L43.38 48.31L46.49 48.45L49.68 48.6L52.92 48.78L56.23 48.97L59.59 49.19L63 49.44L66.44 49.71L69.92 50.02L73.43 50.35L76.97 50.71L80.51 51.1L84.07 51.52L87.64 51.98ZM 88.36 54.38 L 84.73 54.73 L 81.1 55.04 L 77.49 55.31 L 73.89 55.55 L 70.33 55.75 L 66.79 55.92 L 63.29 56.06 L 59.83 56.16 L 56.43 56.24 L 53.08 56.28 L 49.79 56.28 L 46.56 56.26 L 43.41 56.21 L 40.34 56.12 L 37.36 56.01 L 34.47 55.85 L 31.67 55.67 L 28.98 55.43 L 26.4 55.12 L 24 53.6 L 24 53.6 L 26.52 52.3 L 29.09 52.18 L 31.76 52.08 L 34.53 52 L 37.39 51.91 L 40.34 51.8 L 43.38 51.69 L 46.49 51.55 L 49.68 51.4 L 52.92 51.22 L 56.23 51.03 L 59.59 50.81 L 63 50.56 L 66.44 50.29 L 69.92 49.98 L 73.43 49.65 L 76.97 49.29 L 80.51 48.9 L 84.07 48.48 L 87.64 48.02 Z"/>
<!-- присоски: контуры f4 (compound, 2 ряда на 4 ближних руках, 16 кружков) -->
<path fill="none" stroke="var(--f4,hsl(350,44%,20%))" stroke-width="0.55" d="M66.99 42.97a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M67.37 40.8a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.3 40.39a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.45 38.2a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.34 48.18a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.5 45.98a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.65 47.31a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.72 45.11a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M66.99 57.03a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M67.37 59.2a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.3 59.61a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.45 61.8a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.34 51.82a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.5 54.02a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.65 52.69a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.72 54.89a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0"/>
<!-- присоски: светлые тела f2 (compound-кружки) -->
<path fill="var(--f2,hsl(348,24%,72%))" d="M66.99 42.97a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M67.37 40.8a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.3 40.39a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.45 38.2a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.34 48.18a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.5 45.98a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.65 47.31a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.72 45.11a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M66.99 57.03a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M67.37 59.2a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.3 59.61a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M46.45 61.8a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.34 51.82a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M69.5 54.02a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.65 52.69a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0M51.72 54.89a1.35 1.35 0 1 0 2.7 0a1.35 1.35 0 1 0 -2.7 0"/>
<!-- голова f1: короткий «капюшон» между мантией и руками (ширина ≈22) -->
<ellipse fill="var(--f1,hsl(350,40%,48%))" cx="96" cy="50" rx="11" ry="13"/>
<!-- глаза: 5 слоёв, симметричны y=50: тёмный ободок f4 -->
<path fill="var(--f4,hsl(350,44%,20%))" d="M93 38a7 7 0 1 0 14 0a7 7 0 1 0 -14 0M93 62a7 7 0 1 0 14 0a7 7 0 1 0 -14 0"/>
<!-- склера #f4f1e6 -->
<path fill="#f4f1e6" d="M94.2 38a5.8 5.8 0 1 0 11.6 0a5.8 5.8 0 1 0 -11.6 0M94.2 62a5.8 5.8 0 1 0 11.6 0a5.8 5.8 0 1 0 -11.6 0"/>
<!-- радужка #d9b23a -->
<path fill="#d9b23a" d="M96 38a4 4 0 1 0 8 0a4 4 0 1 0 -8 0M96 62a4 4 0 1 0 8 0a4 4 0 1 0 -8 0"/>
<!-- горизонтальный зрачок #142638 -->
<path fill="#142638" d="M96.4 38a3.6 1.6 0 1 0 7.2 0a3.6 1.6 0 1 0 -7.2 0M96.4 62a3.6 1.6 0 1 0 7.2 0a3.6 1.6 0 1 0 -7.2 0"/>
<!-- блик #fff -->
<path fill="#fff" d="M96.7 36a1.3 1.3 0 1 0 2.6 0a1.3 1.3 0 1 0 -2.6 0M96.7 64a1.3 1.3 0 1 0 2.6 0a1.3 1.3 0 1 0 -2.6 0"/>
</svg>