9 Commits

Author SHA1 Message Date
Maxim Dolgolyov 358b761eb2 fix(biochem): статичный subnav без мигания + редизайн
Проблема: динамическая вставка через JS вызывала мигание (nav
появлялся через ~100ms после первого пейнта).

Решение: nav — статичный HTML в каждой странице, CSS — в <head>.
Активная вкладка проставлена в HTML (class bsn-active) — нет JS,
нет мигания, работает с первого байта.

Редизайн .biochem-subnav:
- frosted glass (backdrop-filter blur 14px, rgba 0.92)
- активная вкладка: фиолетовый фон-пилюля + нижняя линия 2.5px
- hover: мягкий фиолетовый фон
- mobile <560px: только иконки (bsn-label display:none)
- overflow-x auto + scrollbar-width:none — горизонтальная прокрутка без полосы
- biochem-nav.js сведён к no-op комментарию

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 08:54:38 +03:00
Maxim Dolgolyov b7db2fc229 feat(biochem): межстраничная навигация модуля (biochem-nav.js)
Новый /js/biochem-nav.js: вставляет sticky-полосу .biochem-subnav
с вкладками Редактор / Библиотека / Реакции / Свойства / Пути.
Текущая вкладка подсвечивается (bsn-active + фиолетовая нижняя линия).
На узких экранах (<560px) — только иконки. Скрипт подключён на всех 5 страницах.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 08:50:10 +03:00
Maxim Dolgolyov cff9973dcf fix(biochem): аватарка через LS.renderNavAvatar на всех страницах модуля
Заменил ручное ava.textContent=initials на LS.renderNavAvatar(ava, user)
в biochem.html / -library / -reactions / -properties.
biochem-pathways.html уже был корректен.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 08:03:02 +03:00
Maxim Dolgolyov d46966c24d feat(biochem): Фаза 3 — авто-балансировщик + энергодиаграммы реакций
BIO.balance(reactants, products) — балансировка уравнений через матрицу
«элемент×вещество» и дробный метод Гаусса (RREF) + НОК/НОД, целочисленные
коэффициенты. Проверено: 2H2+O2→2H2O, CH4+2O2→CO2+2H2O, 4Fe+3O2→2Fe2O3,
фотосинтез 6/6/1/6, Ca(OH)2+2HCl→CaCl2+2H2O (скобки), N2+3H2→2NH3.

biochem-reactions.html: в развёрнутой карточке —
- энергетический профиль (реагенты → переходное состояние → продукты) на
  canvas из energy_kj, экзо вниз/эндо вверх, стрелка ΔH, подпись типа;
- бейдж проверки баланса (BIO.balance по формулам молекул реакции).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 13:18:12 +03:00
Maxim Dolgolyov 3b6481b1df feat(biochem): единый рендер BIO.render2D + 3D-превью молекул в библиотеке и свойствах
Фаза 0.2 (DRY) + Фаза 1.5 (3D-превью) плана BIOCHEM_UPGRADE:
- library/properties/reactions подключают biochem-core.js; локальные
  дубль-рендереры молекул заменены вызовами BIO.render2D; удалены
  дублирующиеся таблицы ELEM_COLORS/CPK и hexToRgb/cpkColor (~250 строк).
- Библиотека: в детальной панели тумблер 2D/3D — вращающаяся VSEPR-модель
  с подписью формы/гибридизации/угла.
- Свойства: на каждой карточке сравнения тумблер 2D/3D с вращением и
  геометрией; thumbnail-и тоже через общий рендер.
- Fallback-и сохранены (колба в библиотеке, «?» в реакциях, «Нет
  структуры» в свойствах).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 12:48:39 +03:00
Maxim Dolgolyov 29ef974e35 feat(biochem): skeleton loaders for async fetches
Replace plain "Загрузка..." placeholders with shimmer-animated skeletons
matching the actual layout shape:
- library: 12 placeholder cards (canvas + 2 lines)
- reactions: 6 row skeletons (stripe + title + 2 text lines)
- properties: 10 sidebar row shimmers (thumb + 2 lines)
- biochem editor: 4-5 row skeletons for saved-molecules and challenges lists

No existing skeleton classes in ls.css; added local .bc-sk-* helpers per page.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 19:49:54 +03:00
Maxim Dolgolyov edb4c211a0 feat: universal sidebar via sidebar.js + stale ID cleanup
- Add js/sidebar.js: generates full sidebar HTML into #app-sidebar,
  handles role-based visibility, active link (with prefix matching),
  toggle wiring, collapsed state, board/features/notif init
- Replace <aside class="sidebar">...</aside> with <aside id="app-sidebar">
  across all 35 standard-layout pages via scripts/apply-sidebar.js
- Add notifications.js to 5 pages that were missing it
- Fix api.js initPage(): skip toggle re-wiring if data-sb-wired set,
  fix active link selector .sb-item → .sb-link
- Remove stale sbl-*/nav-admin/btn-upload-nav getElementById calls
  that crashed after sidebar replacement (lab, classes, collection,
  crossword, hangman, knowledge-map, library, pet, profile)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 21:22:21 +03:00
Maxim Dolgolyov fd29acbbdd feat: WebSocket real-time + rAF render gate + guest board + screen picker
Classroom performance:
- WebSocket server (ws-server.js) for low-latency cursor & stroke preview
  Replaces HTTP POST per event → eliminates per-message auth overhead
  Session member cache (30s TTL) avoids SQLite query per WS message
  Fallback to HTTP POST when WS not connected
- Cursor throttle reduced 100ms → 33ms (~30fps)
- Stroke preview throttle reduced 50ms → 20ms
- whiteboard.js: render() is now rAF-gated (_doRender/_rafPending)
  Multiple render() calls within one frame collapse into one repaint
  document.hidden check — zero CPU when tab is in background
  visibilitychange listener restores canvas on tab focus

Guest board:
- guestClassroom.js route: public token-based read-only access
- guest-board.html: name entry + read-only whiteboard + SSE
- SSE: addGuestClient/removeGuestClient/emitToGuests

Screen share picker:
- Discord-style modal with tab switching (screen/window/tab)
- Live video preview before confirming share
- useExistingScreenStream() in ClassroomRTC

Fullscreen exit overlay:
- #cr-fs-exit-overlay button inside cr-board-wrap
- Visible only via CSS :fullscreen selector (touchpad users)

File sharing from library:
- Teacher picks file from library, sends as styled card in chat
- crDownloadLibraryFile() fetches with Bearer auth

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 18:04:59 +03:00
Maxim Dolgolyov be4d43105e LearnSpace: full-stack educational whiteboard platform
Node.js/Express backend + vanilla JS frontend.
Features: real-time collaborative whiteboard (SSE), multi-page support,
LaTeX formulas, shapes/connectors, coordinate systems, number lines,
compass, zoom/pan, Catmull-Rom pencil smoothing, ruler/protractor with
rotation & resize controls, minimap navigation overlay, auto-measurements,
multi-page thumbnails sidebar, PNG export, page templates.
Student/teacher workflows: classes, assignments, library, dashboard.
Mobile responsive. SQLite (better-sqlite3).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-12 10:10:37 +03:00