fix(layout): Phase-5-Review — off-screen-Clamp, Drag-Cleanup, Blur-Position, Import-pos

- Render + neuer debounced Resize-Handler clampen --board-x/y gegen den
  aktuellen Viewport: ein auf breiterem Fenster platziertes Board rendert
  nie mehr off-screen (und damit per Drag unerreichbar). board.pos bleibt
  unveraendert, bei spaeterer Verbreiterung wird die Originalposition erreicht.
- drag.js: cleanup() + pointercancel-Listener. Die Klasse .board.dragging
  klebte bei Touch-Interrupt/Browser-Geste sonst dauerhaft und legte den
  app.js-Sync-Guard (Quick-Save-Render) still.
- main.css: '.board.blurred { position: relative }' entfernt — lag im
  utilities-Layer und schlug das absolute Free-Layout (geblurrtes Board fiel
  aus seiner Position + war nicht mehr drag-bar).
- data.js: board.pos wird beim JSON-Import durchgereicht (safePos-Validierung
  via Number.isFinite), sonst Verlust des frei gesetzten Layouts beim Restore.
This commit is contained in:
2026-06-14 15:16:51 +02:00
parent 1d9e9dab81
commit 70f3f705b4
5 changed files with 76 additions and 23 deletions
+4 -3
View File
@@ -910,9 +910,10 @@ body.show-desc .bm-desc { display: block; }
.board.blurred .board-title {
filter: blur(5px);
}
.board.blurred {
position: relative;
}
/* HINWEIS: KEIN `.board.blurred { position: relative }` — .board ist im Free-Layout bereits
position:absolute (= positionierter Containing-Block fuers Overlay). Ein relative hier liegt
im @layer utilities und wuerde das absolute schlagen -> geblurrtes Board faellt aus seiner
freien Position + waere nicht mehr drag-bar (Phase-5-Review). */
.board-blur-overlay {
display: none;
position: absolute; inset: 0; z-index: 5;