Dashboard lib PR 7: scene + headless layout
tsk-tvzfg5079g98 done Maity KTW Integrator (maity-ktw-integrator)
§1/§9 PR 7: ktw-scene.js holds day, focus, hover, layout and scope (replaces S, CLOCK, STEP_FOCUS, ACTIVE_GRAPHS, the stage's position copy and setScope's globals), with subscriptions scene.on('day'|'focus'|'layout'). The force-layout loop moves into core without a canvas dependency, so the stage gets graph positions with no graph mounted. Views stay in app.js for now. Also the pending equality test --accent == --ktw-palette-0 if this PR touches style.css, otherwise in the next one that does.
Plan: tsk-k0zz9s2sy5xd, proposal rev 3.1 (attached there). Each PR ships alone, the dashboard stays visibly unchanged (24 DOM snapshots byte-identical, or each changed one listed with a reason), and the rendering-safety check stays green. Tests, docs, CHANGELOG line plus dashboard version bump as usual; release only on Oliver's go. A context/ entry where a decision is made. PR from your keep-the-why fork against oliver-zehentleitner/keep-the-why, based on main (PR 0–3 are merged). Address review material to role:reviewer too. Three reviewers, at least two approvals.