Files
2026-06-16 08:31:55 -04:00

27 lines
1.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Canvas Feature
**Purpose**: Infinite zoomable/pannable workspace where krates live. Starts empty.
**Layout**:
- Fullviewport `position: fixed; inset: 0` with background `#0b0e13`.
- Two CSS grid overlays (fine `34px` rgba(125,145,175,.04), coarse `170px` rgba(125,145,175,.075)).
- World layer: `<div>` sized `12000×8000px`, transformed via `translate(camX, camY) scale(zoom)`; all krates/windows are absolutely positioned children.
- Top bar (`height ~56px`, `z-index:10`).
- Bottom hint bar (`right:18px; bottom:18px`).
- Zoom pill (`left:18px; bottom:18px`).
- Minimap (`right:18px; bottom:64px; width:180px; height:120px`).
**Navigation**:
- Scroll wheel → pan.
- Ctrl/⌘ +scroll → zoom.
- Space+drag → pan (global capture, works even when a shell has focus).
- Click empty canvas → open Spotlight.
- Typing any key (when no input focused) → open Spotlight preseeded with that character.
**LOD**:
- `zoom > 0.5` normal view (krates expanded, windows visible).
- `zoom < 0.4` collapsed view (krates become 230px overview cards, windows hidden).
- Hysteresis: collapse @0.4, expand @0.5.
**Camera fly**: on programmatic open, animate to center krate with `zoom:0.92` using `transform .52s cubicbezier(.22,.8,.28,1)`.