feat(ui): rebuild the workspace as the C2 floating instrument panel
Replaces the docked three-column shell with a full-bleed canvas and floating instrument modules, per DESIGN.md v2 (direction C2). - canvas: app bar, footer, resizable columns and the pipeline strip removed; modules float over the part, drag / collapse / re-stack, 全览 · 调参 · 看模型 density presets, `Space` hides everything but the composer - viewport: ViewCube with 26 ray-picked regions mirroring the camera, keyboard standard views (1-6, 0, F), no snap on release; the image path stays the fallback - modules: 零件槽位 rows, 尺寸 steppers with drafts and undo, 检验 verdicts and outputs, 要你定一下 for a pending clarification, 读数, 源码 / 记录 sheet - one action per state: the composer owns it, with the staleness line moved into the hint row and a circular action button; plain Enter still never submits - brand module owns the only two utility surfaces (settings sheet, notification drawer) Review fixes (2026-09-18), each reproduced against the running app first: - the slots rail is no longer hidden below 1024px by leftover docked-layout CSS - part rows are keyboard-selectable (`role=option`, Enter/Space) and the hover-only utilities reveal on focus-within - Space and the digits have exactly one owner; the retired inspector-tab bindings are gone - OrbitControls' polar limit (0.96pi) stopped 下 7 degrees short; the camera guard is now symmetric with the ViewCube stop table, so 3 and 6 report 上/下 - 读数 marks a declared parameter as 目标 instead of dressing it as measured - the module plate and the focus colour each have a single definition - the composer no longer covers 读数 between 960px and 1100px - `bun run lint` is green again (notification drawer detects the client with useSyncExternalStore instead of setState in an effect) Gates: bun run test (355 pass / 0 fail), typecheck, lint, build.
K
Kevoyuan committed
6c88dd71332c02af7dbe2e14d80ccb3ea6bc4e17
Parent: d485be0