fix(biochem 3D): корректная глубина + объёмные связи-цилиндры

Два дефекта, из-за которых 3D читался как плоская диаграмма:
- painter-сортировка была по возрастанию z (ближние первыми) — дальние
  атомы рисовались поверх ближних. Теперь единый список примитивов
  (атомы + половинки связей) сортируется по убыванию z (дальние первыми).
- связи были тонкими плоскими линиями. Теперь — затенённые «цилиндры»:
  толстый штрих с поперечным градиентом (центр светлее, края темнее),
  двухцветные (каждая половина под цвет своего атома) — фирменный вид
  ball-and-stick. Ширина зависит от перспективы (ближе — толще).
- усилена перспектива (fov 900→700), добавлен тёмный ободок сфер для объёма.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-05-30 12:58:39 +03:00
parent 3b6481b1df
commit 410eb8a862
12 changed files with 559 additions and 27 deletions
@@ -0,0 +1,46 @@
# Phase 0: Ядро реестра + адаптер + 3 пилота
**Status:** ⬜ Not Started
**Parent plan:** [PLAN.md](./PLAN.md)
**Domain:** frontend
## Objective
Создать `LabRegistry` (реестр + менеджер активной симуляции). Подключить адаптер: ядро
лаборатории сначала смотрит в реестр, иначе — старый путь. Мигрировать 3 пилота
(graph, quadratic, pendulum) и доказать паритет. Полностью обратимо.
## Tasks
- [ ] Создать `frontend/js/labs/_registry.js``window.LabRegistry` (register/get/has/all + setActive/stopActive/destroyActive). Без эмоджи.
- [ ] Подключить `_registry.js` в lab.html ПЕРВЫМ среди labs-скриптов (до graph.js).
- [ ] Адаптер `renderSims()` (lab-glue.js): порядок из SIMS, registry-override + resolve preview (string|fn), append registry-only.
- [ ] Адаптер `openSim()` (lab-init.js): base-id, registry-first → stopActive/open/setActive; deep-link `:arg` сохранить.
- [ ] Адаптер `loadTheory()` (lab-init.js): registry.theory в приоритете, иначе THEORY[base].
- [ ] Адаптер `closeSim()`/`_pauseAllSims()`: добавить `LabRegistry.stopActive()`/`destroyActive()`.
- [ ] Зарегистрировать 3 пилота в конце lab-init.js (после _openXxx): graph, quadratic, pendulum — с preview-fn, theory-объектом, open=_openXxx, stop/destroy.
- [ ] Удалить graph/quadratic/pendulum из legacy `THEORY` и `SIMS` (проверка, что адаптер их подхватывает из реестра).
## Files to Modify/Create
- `frontend/js/labs/_registry.js` — новый: ядро реестра.
- `frontend/lab.html` — добавить `<script src="/js/labs/_registry.js">` первым (в обоих местах, если дублируется список).
- `frontend/js/labs/lab-glue.js` — renderSims адаптер; убрать 3 пилота из SIMS.
- `frontend/js/labs/lab-init.js` — openSim/loadTheory/closeSim/_pauseAllSims адаптеры; регистрация 3 пилотов; убрать 3 пилота из THEORY.
## Acceptance Criteria
- Каталог отображает все симуляции в прежнем порядке; 3 пилота открываются и работают идентично.
- Остальные 46 симуляций открываются по-старому (legacy путь не сломан).
- Deep-links и обратная совместимость id работают.
- Нет дублей карточек (пилот не показан дважды).
- Нет эмоджи; иконки `.ic`.
## Notes
- Порядок загрузки: см. CONTEXT.md. preview как функция спасает от undefined P_*.
- `_disabledSimIds` фильтрация должна продолжать работать для registry-записей.
## Review Checklist
- [ ] Адаптер не ломает legacy симуляции
- [ ] Паритет 3 пилотов (open/stop/close/theory/preview)
- [ ] Соблюдены конвенции проекта (no emoji, .ic)
- [ ] Нет дублирования карточек
## Handoff to Next Phase
<!-- заполнить после фазы -->