Связи (test 12.06): центр-орб крупнее (FOCUS_SCALE 1.78) + шире ореол центра (glowSpread 7)

Рычаг 1: glowSpread центра 4.5→7 (мягче/шире свечение), спутники без изменений. Рычаг 2: FOCUS_SCALE 1.5→1.78 (иерархия). Версия 1.2.160.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Pixel 2026-06-12 14:53:13 +03:00
parent 652ddc9d88
commit 0b4374141e
2 changed files with 5 additions and 4 deletions

View File

@ -1,2 +1,2 @@
client.version=1.2.159 client.version=1.2.160
server.version=1.2.143 server.version=1.2.144

View File

@ -35,7 +35,7 @@ const PAN_FRICTION = 0.93; // трение инерционного скр
const TWEEN_MS = 560; // длительность анимации центрирования (фильтр/фолбэк) const TWEEN_MS = 560; // длительность анимации центрирования (фильтр/фолбэк)
const BLOOM_MS = 900; // длительность разлёта узлов из центра (физика выключена → ноль тряски) const BLOOM_MS = 900; // длительность разлёта узлов из центра (физика выключена → ноль тряски)
const BLOOM_STAGGER = 40; // задержка между «выстреливанием» соседних узлов (волна), мс const BLOOM_STAGGER = 40; // задержка между «выстреливанием» соседних узлов (волна), мс
const FOCUS_SCALE = 1.5; // базовый масштаб фокуса (CSS-дыхание колеблет ±~1.3% → 1.481.52x) const FOCUS_SCALE = 1.78; // базовый масштаб фокуса — центр крупнее (иерархия, рычаг 2; ±дыхание)
const PRIMARY_SCALE = 1.0; // масштаб обычного узла 1-го уровня const PRIMARY_SCALE = 1.0; // масштаб обычного узла 1-го уровня
const SECONDARY_SCALE = 0.72; // масштаб узлов 2-го уровня (друзья друзей) const SECONDARY_SCALE = 0.72; // масштаб узлов 2-го уровня (друзья друзей)
const PAN_THRESHOLD = 8; // порог смещения (px), после которого жест считается pan, а не tap const PAN_THRESHOLD = 8; // порог смещения (px), после которого жест считается pan, а не tap
@ -427,6 +427,7 @@ export function createForceGraph({ stage, model, onCenterTap, onNodeTap, onNodeL
const o = opts || {}; const o = opts || {};
const u = 'o' + (orbSeq += 1); const u = 'o' + (orbSeq += 1);
const glowOp = o.isFocus ? 0.34 : 0.28; const glowOp = o.isFocus ? 0.34 : 0.28;
const glowSpread = o.isFocus ? 7 : 4.5; // центр — шире/мягче ореол (рычаг 1); спутники без изменений
const imgFilter = o.isFocus ? 'grayscale(0.9) contrast(1.04)' : 'saturate(0.85) brightness(0.97)'; const imgFilter = o.isFocus ? 'grayscale(0.9) contrast(1.04)' : 'saturate(0.85) brightness(0.97)';
const init = String(o.initials || '').slice(0, 2); const init = String(o.initials || '').slice(0, 2);
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
@ -440,7 +441,7 @@ export function createForceGraph({ stage, model, onCenterTap, onNodeTap, onNodeL
+ '<radialGradient id="sd' + u + '" cx="50%" cy="60%" r="55%"><stop offset="58%" stop-color="#000000" stop-opacity="0"/><stop offset="100%" stop-color="#02060d" stop-opacity="0.4"/></radialGradient>' + '<radialGradient id="sd' + u + '" cx="50%" cy="60%" r="55%"><stop offset="58%" stop-color="#000000" stop-opacity="0"/><stop offset="100%" stop-color="#02060d" stop-opacity="0.4"/></radialGradient>'
+ '<linearGradient id="sp' + u + '" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#ffffff" stop-opacity="0.85"/><stop offset="100%" stop-color="#ffffff" stop-opacity="0"/></linearGradient>' + '<linearGradient id="sp' + u + '" x1="0" y1="0" x2="1" y2="1"><stop offset="0%" stop-color="#ffffff" stop-opacity="0.85"/><stop offset="100%" stop-color="#ffffff" stop-opacity="0"/></linearGradient>'
+ '<filter id="so' + u + '" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="1.3"/></filter>' + '<filter id="so' + u + '" x="-40%" y="-40%" width="180%" height="180%"><feGaussianBlur stdDeviation="1.3"/></filter>'
+ '<filter id="gl' + u + '" x="-70%" y="-70%" width="240%" height="240%"><feGaussianBlur stdDeviation="4.5"/></filter>' + '<filter id="gl' + u + '" x="-70%" y="-70%" width="240%" height="240%"><feGaussianBlur stdDeviation="' + glowSpread + '"/></filter>'
+ '</defs>' + '</defs>'
+ '<circle cx="50" cy="50" r="42" fill="#5facd4" opacity="' + glowOp + '" filter="url(#gl' + u + ')"/>' + '<circle cx="50" cy="50" r="42" fill="#5facd4" opacity="' + glowOp + '" filter="url(#gl' + u + ')"/>'
+ '<circle cx="50" cy="50" r="42" fill="#0a1626" opacity="0.38"/>' + '<circle cx="50" cy="50" r="42" fill="#0a1626" opacity="0.38"/>'