arc/platforms.md | 20 +- arc/ui.md | 25 +- corpus/page-background/README.md | 13 + corpus/page-background/candidate/Open Notebook.onetoc2 | Bin 0 -> 4808 bytes corpus/page-background/candidate/Rules.one | Bin 0 -> 132704 bytes corpus/page-background/cold/commands.jsonl | 3 + corpus/page-background/cold/machine.json | 1 + corpus/page-background/cold/read/environment.json | 7 + corpus/page-background/cold/read/hierarchy.xml | 2 + corpus/page-background/cold/read/page-000.navigation.json | 13 + corpus/page-background/cold/read/page-000.png | Bin 0 -> 40103 bytes corpus/page-background/cold/read/page-000.xml | 2 + corpus/page-background/cold/read/page-001.navigation.json | 13 + corpus/page-background/cold/read/page-001.png | Bin 0 -> 41559 bytes corpus/page-background/cold/read/page-001.xml | 2 + corpus/page-background/cold/read/page-002.navigation.json | 13 + corpus/page-background/cold/read/page-002.png | Bin 0 -> 47443 bytes corpus/page-background/cold/read/page-002.xml | 2 + corpus/page-background/cold/read/page-003.navigation.json | 13 + corpus/page-background/cold/read/page-003.png | Bin 0 -> 46391 bytes corpus/page-background/cold/read/page-003.xml | 2 + corpus/page-background/cold/read/page-004.navigation.json | 13 + corpus/page-background/cold/read/page-004.png | Bin 0 -> 41480 bytes corpus/page-background/cold/read/page-004.xml | 2 + corpus/page-background/cold/read/page-005.navigation.json | 13 + corpus/page-background/cold/read/page-005.png | Bin 0 -> 40354 bytes corpus/page-background/cold/read/page-005.xml | 2 + corpus/page-background/cold/read/page-006.navigation.json | 13 + corpus/page-background/cold/read/page-006.png | Bin 0 -> 88594 bytes corpus/page-background/cold/read/page-006.xml | 353 ++++++++ corpus/page-background/cold/read/page-007.navigation.json | 13 + corpus/page-background/cold/read/page-007.png | Bin 0 -> 49709 bytes corpus/page-background/cold/read/page-007.xml | 2 + corpus/page-background/cold/read/page-008.navigation.json | 13 + corpus/page-background/cold/read/page-008.png | Bin 0 -> 41663 bytes corpus/page-background/cold/read/page-008.xml | 2 + corpus/page-background/cold/read/page-009.navigation.json | 13 + corpus/page-background/cold/read/page-009.png | Bin 0 -> 43163 bytes corpus/page-background/cold/read/page-009.xml | 2 + corpus/page-background/cold/read/page-010.navigation.json | 13 + corpus/page-background/cold/read/page-010.png | Bin 0 -> 41463 bytes corpus/page-background/cold/read/page-010.xml | 2 + corpus/page-background/cold/read/payloads.json | 3 + corpus/page-background/cold/run.json | 18 + corpus/page-background/cold/scripts/cold.ps1 | 27 + corpus/page-background/cold/scripts/read.ps1 | 142 ++++ corpus/page-background/cold/source.json | 14 + corpus/page-background/cold/teardown.json | 1 + corpus/rule-lines/README.md | 25 + corpus/rule-lines/candidate/Open Notebook.onetoc2 | Bin 0 -> 4808 bytes corpus/rule-lines/candidate/Rules.one | Bin 0 -> 93264 bytes corpus/rule-lines/cold/commands.jsonl | 3 + corpus/rule-lines/cold/machine.json | 1 + corpus/rule-lines/cold/read/environment.json | 7 + corpus/rule-lines/cold/read/hierarchy.xml | 2 + corpus/rule-lines/cold/read/page-000.navigation.json | 13 + corpus/rule-lines/cold/read/page-000.png | Bin 0 -> 43228 bytes corpus/rule-lines/cold/read/page-000.xml | 2 + corpus/rule-lines/cold/read/page-001.navigation.json | 13 + corpus/rule-lines/cold/read/page-001.png | Bin 0 -> 41814 bytes corpus/rule-lines/cold/read/page-001.xml | 2 + corpus/rule-lines/cold/read/page-002.navigation.json | 13 + corpus/rule-lines/cold/read/page-002.png | Bin 0 -> 50029 bytes corpus/rule-lines/cold/read/page-002.xml | 2 + corpus/rule-lines/cold/read/page-003.navigation.json | 13 + corpus/rule-lines/cold/read/page-003.png | Bin 0 -> 43099 bytes corpus/rule-lines/cold/read/page-003.xml | 2 + corpus/rule-lines/cold/read/page-004.navigation.json | 13 + corpus/rule-lines/cold/read/page-004.png | Bin 0 -> 42006 bytes corpus/rule-lines/cold/read/page-004.xml | 2 + corpus/rule-lines/cold/read/page-005.navigation.json | 13 + corpus/rule-lines/cold/read/page-005.png | Bin 0 -> 46437 bytes corpus/rule-lines/cold/read/page-005.xml | 2 + corpus/rule-lines/cold/read/page-006.navigation.json | 13 + corpus/rule-lines/cold/read/page-006.png | Bin 0 -> 47749 bytes corpus/rule-lines/cold/read/page-006.xml | 2 + corpus/rule-lines/cold/read/page-007.navigation.json | 13 + corpus/rule-lines/cold/read/page-007.png | Bin 0 -> 42354 bytes corpus/rule-lines/cold/read/page-007.xml | 2 + corpus/rule-lines/cold/read/page-008.navigation.json | 13 + corpus/rule-lines/cold/read/page-008.png | Bin 0 -> 41827 bytes corpus/rule-lines/cold/read/page-008.xml | 2 + corpus/rule-lines/cold/read/page-009.navigation.json | 13 + corpus/rule-lines/cold/read/page-009.png | Bin 0 -> 40702 bytes corpus/rule-lines/cold/read/page-009.xml | 2 + corpus/rule-lines/cold/read/page-010.navigation.json | 13 + corpus/rule-lines/cold/read/page-010.png | Bin 0 -> 41578 bytes corpus/rule-lines/cold/read/page-010.xml | 2 + corpus/rule-lines/cold/read/page-011.navigation.json | 13 + corpus/rule-lines/cold/read/page-011.png | Bin 0 -> 40659 bytes corpus/rule-lines/cold/read/page-011.xml | 2 + corpus/rule-lines/cold/read/payloads.json | 3 + corpus/rule-lines/cold/run.json | 18 + corpus/rule-lines/cold/scripts/cold.ps1 | 27 + corpus/rule-lines/cold/scripts/read.ps1 | 142 ++++ corpus/rule-lines/cold/source.json | 14 + corpus/rule-lines/cold/teardown.json | 1 + corpus/rule-lines/native/colors.txt | 20 + corpus/rule-lines/native/commands.jsonl | 3 + corpus/rule-lines/native/machine.json | 1 + corpus/rule-lines/native/notebook/Open Notebook.onetoc2 | Bin 0 -> 4808 bytes corpus/rule-lines/native/notebook/Rules.one | Bin 0 -> 88432 bytes corpus/rule-lines/native/read/environment.json | 7 + corpus/rule-lines/native/read/hierarchy.xml | 2 + corpus/rule-lines/native/read/page-000.navigation.json | 13 + corpus/rule-lines/native/read/page-000.png | Bin 0 -> 41703 bytes corpus/rule-lines/native/read/page-000.xml | 2 + corpus/rule-lines/native/read/page-001.navigation.json | 13 + corpus/rule-lines/native/read/page-001.png | Bin 0 -> 49745 bytes corpus/rule-lines/native/read/page-001.xml | 2 + corpus/rule-lines/native/read/page-002.navigation.json | 13 + corpus/rule-lines/native/read/page-002.png | Bin 0 -> 41693 bytes corpus/rule-lines/native/read/page-002.xml | 2 + corpus/rule-lines/native/read/page-003.navigation.json | 13 + corpus/rule-lines/native/read/page-003.png | Bin 0 -> 42945 bytes corpus/rule-lines/native/read/page-003.xml | 2 + corpus/rule-lines/native/read/page-004.navigation.json | 13 + corpus/rule-lines/native/read/page-004.png | Bin 0 -> 41514 bytes corpus/rule-lines/native/read/page-004.xml | 2 + corpus/rule-lines/native/read/page-005.navigation.json | 13 + corpus/rule-lines/native/read/page-005.png | Bin 0 -> 41591 bytes corpus/rule-lines/native/read/page-005.xml | 2 + corpus/rule-lines/native/read/page-006.navigation.json | 13 + corpus/rule-lines/native/read/page-006.png | Bin 0 -> 40132 bytes corpus/rule-lines/native/read/page-006.xml | 2 + corpus/rule-lines/native/read/page-007.navigation.json | 13 + corpus/rule-lines/native/read/page-007.png | Bin 0 -> 47474 bytes corpus/rule-lines/native/read/page-007.xml | 2 + corpus/rule-lines/native/read/page-008.navigation.json | 13 + corpus/rule-lines/native/read/page-008.png | Bin 0 -> 41514 bytes corpus/rule-lines/native/read/page-008.xml | 2 + corpus/rule-lines/native/read/page-009.navigation.json | 13 + corpus/rule-lines/native/read/page-009.png | Bin 0 -> 46434 bytes corpus/rule-lines/native/read/page-009.xml | 2 + corpus/rule-lines/native/read/page-010.navigation.json | 13 + corpus/rule-lines/native/read/page-010.png | Bin 0 -> 40401 bytes corpus/rule-lines/native/read/page-010.xml | 2 + corpus/rule-lines/native/read/payloads.json | 3 + corpus/rule-lines/native/run.json | 18 + corpus/rule-lines/native/scripts/cold.ps1 | 27 + corpus/rule-lines/native/scripts/read.ps1 | 142 ++++ corpus/rule-lines/native/source.json | 14 + corpus/rule-lines/native/teardown.json | 1 + crates/canvas/assets/tags/blog.svg | 9 + crates/canvas/assets/tags/book.svg | 12 + crates/canvas/assets/tags/box-small.svg | 11 + crates/canvas/assets/tags/check-small.svg | 6 + crates/canvas/assets/tags/email.svg | 11 + crates/canvas/assets/tags/idea.svg | 11 + crates/canvas/assets/tags/mark-arrow.svg | 6 + crates/canvas/assets/tags/mark-client.svg | 9 + crates/canvas/assets/tags/mark-manager.svg | 9 + crates/canvas/assets/tags/mark-one.svg | 7 + crates/canvas/assets/tags/mark-person.svg | 9 + crates/canvas/assets/tags/mark-two.svg | 7 + crates/canvas/assets/tags/movie.svg | 10 + crates/canvas/assets/tags/password.svg | 11 + crates/canvas/assets/tags/web.svg | 14 + crates/canvas/src/editor.rs | 197 ++++- crates/canvas/src/editor/format.rs | 15 +- crates/canvas/src/editor/ops.rs | 54 +- crates/canvas/src/editor/page.rs | 19 +- crates/canvas/src/editor/space.rs | 336 ++++++++ crates/canvas/src/gpu/mod.rs | 95 ++- crates/canvas/src/gpu/page.rs | 13 +- crates/canvas/src/gpu/page/background.rs | 1 + crates/canvas/src/interaction/accessibility.rs | 13 +- crates/canvas/src/interaction/mod.rs | 181 +++- crates/canvas/src/interaction/space.rs | 94 +++ crates/canvas/src/interaction/tests.rs | 200 +++++ crates/canvas/src/outline.rs | 64 +- crates/canvas/src/search.rs | 129 ++- crates/canvas/src/template.rs | 42 +- crates/canvas/tests/ops_differential.rs | 34 +- crates/canvas/tests/search.rs | 46 +- crates/draw/src/draw.glsl | 11 + crates/draw/src/draw.wgsl | 12 +- crates/draw/src/render.rs | 202 ++++- crates/draw/src/render/gl.rs | 219 +++-- crates/draw/src/render/translucent.glsl | 22 + crates/draw/src/render/webgpu.rs | 107 ++- crates/notebook/examples/keystroke_probe.rs | 1 + crates/notebook/examples/open_probe.rs | 1 + crates/notebook/examples/save_probe.rs | 1 + crates/notebook/src/merge.rs | 16 +- crates/onestore/README.md | 5 +- crates/onestore/src/op/apply.rs | 20 + crates/onestore/src/op/lower.rs | 25 +- crates/onestore/src/op/mod.rs | 2 + crates/onestore/src/op/model.rs | 10 +- crates/onestore/src/op/tests.rs | 192 ++++- crates/onestore/src/outline.rs | 15 +- crates/onestore/src/page/ink.rs | 3 +- crates/onestore/src/page/mod.rs | 94 +++ crates/snowbound/Cargo.toml | 2 +- crates/snowbound/assets/icons/full-page-view.svg | 12 - crates/snowbound/assets/icons/rule-lines.svg | 9 - crates/snowbound/assets/icons/sync-busy.svg | 4 + crates/snowbound/assets/icons/sync-done.svg | 4 + crates/snowbound/assets/icons/sync-error.svg | 4 + crates/snowbound/assets/icons/sync-offline.svg | 4 + crates/snowbound/src/aqua.rs | 324 ++++++++ crates/snowbound/src/art.rs | 6 +- crates/snowbound/src/background.rs | 200 +++++ crates/snowbound/src/commands.rs | 80 +- crates/snowbound/src/conflict_render.rs | 1 + crates/snowbound/src/library.rs | 48 ++ crates/snowbound/src/linux.rs | 197 +++-- crates/snowbound/src/macos.rs | 122 ++- crates/snowbound/src/main.rs | 1431 +++++++++++++++++++------------- crates/snowbound/src/manage.rs | 193 +++-- crates/snowbound/src/menubar.rs | 4 + crates/snowbound/src/navigation.rs | 68 ++ crates/snowbound/src/palette.rs | 147 ++++ crates/snowbound/src/pane.rs | 906 ++++++++++++++++++++ crates/snowbound/src/screenshot.rs | 34 +- crates/snowbound/src/search.rs | 139 +++- crates/snowbound/src/sidebar.rs | 21 +- crates/snowbound/src/surface.rs | 28 +- crates/snowbound/src/surface_gl.rs | 23 +- crates/snowbound/src/sync.rs | 95 ++- crates/snowbound/src/templates.rs | 4 +- crates/ui/examples/popups.rs | 2 +- crates/ui/src/layout.rs | 130 ++- crates/ui/src/lib.rs | 195 ++++- crates/ui/src/list.rs | 10 +- crates/ui/src/popup.rs | 88 +- crates/ui/src/shell.rs | 95 ++- crates/ui/src/tests.rs | 370 ++++++++- crates/ui/src/widgets.rs | 168 +++- platform/snow-leopard/console/input.c | 52 +- platform/snow-leopard/remote.sh | 5 +- platform/snow-leopard/rt/appkit.c | 1 - readme.md | 7 +- tools/TESTING.md | 11 + tools/test_page_background.py | 42 + tools/test_rule_lines.py | 83 ++ vendor/sctk-adwaita/SNOWBOUND.md | 28 +- vendor/sctk-adwaita/src/lib.rs | 211 ++++- vendor/sctk-adwaita/src/theme.rs | 2 +- 240 files changed, 8596 insertions(+), 1265 deletions(-)