feat: stable card IDs embedded in source (ATProto TID format)
Cards now carry an `id:` argument in the typst source, generated as a
13-character ATProto-compatible TID (microsecond timestamp + 10-bit
counter). `assign_ids` splices missing IDs into source on first open;
`ensure_card_ids` also remaps sidecar keys from positional ("0","1",...)
to the embedded IDs atomically. All card key lookups in the editor and
review queue now use the embedded ID, with positional fallback.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>