Every screen now speaks the paper vocabulary rather than only the
bookmarks screen: Search, Sources, Podcasts and the player, Settings,
Add/Edit, Smart Collections, Ask, Onboarding, the browser toolbar, the
Siri snippets, and the share extension's save card.
The change is mostly a design system rather than per-screen tweaks.
LibraryKit gains:
- Semantic colors — secondary/tertiary/faint text, `raised` surfaces,
and accent/alarm/affirm, so screens stop reaching for .secondary,
systemGray, .blue, .red and .green. The three status colors come out
of the palette (the swatch blue, vermilion and forest) rather than
from the system set, so the design keeps spending one set of inks.
- PaperType — the two voices made explicit. Prose (titles, summaries,
anything a person wrote) is serif; anything the machine contributes
(domains, dates, counts, tags, labels, buttons) is monospaced. Keeping
that split strict is what makes the design read as archival rather
than as decoration.
- paperSurface() / paperField() / paperCard() for grounds, inputs and
raised blocks.
- PaperEmptyState, because ContentUnavailableView can't be restyled — it
draws its own bold system type and grey, which was the loudest
remaining system voice once the screens moved onto the sheet. All nine
usages are converted.
The app also sets one accent for the system chrome it doesn't draw —
tab bar, search fields, switches, swipe actions — which otherwise stayed
system blue around paper screens.
BookmarkRow is deleted. Once Search moved to the library row and
TagBookmarksView was gone, nothing passed .classic, so the style fork in
BookmarkListRow went with it. There is one bookmark row now.
The share extension compiles LibraryKit directly, since its save card is
a user-facing surface and should not be the one place still using system
styling.
Verified on device in both color schemes; screens toured with a
temporary UI test harness (removed). Suite passes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JgLHztZGaEHvS3KNeGQmRM
- SpotlightIndexer: actually push BookmarkEntity into the Spotlight index via
indexAppEntities (IndexedEntity conformance alone indexes nothing). Wired into
every sync/mutation point. This is what lets Apple Intelligence answer
free-form Siri questions grounded in the user's bookmarks.
- On-device RAG: BookmarkAssistant (LanguageModelSession) + BookmarkSearchTool
+ SpotlightBookmarkSearch (CSSearchQuery retrieval), surfaced via AskView with
lightweight Markdown rendering of answers.
- Log: os.Logger facility (com.magicive.marks) replacing ad-hoc print(); shared
with ShareExtension. ClaudeService now logs server error bodies on non-2xx.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>