ade091f108
Per-week "Extra Study (N)" row appears at the end of each LanGo week section when at least one card is marked. Cards are marked from inside VocabFlashcardView via a star next to the speaker on reveal. Marks are keyed by the same SHA256 hash CourseReviewCard uses, so a mark and its SRS state describe the same logical card. ExtraStudyMark is CloudKit-synced (private DB), with uniqueness enforced by fetch-or-create on id since CloudKit forbids @Attribute(.unique). Skipped for textbook courses: DeckStudyView nils out the mark context when the deck's courseName matches a TextbookChapter, and CourseView hides the row when the active course is a textbook — so there are no orphan marks the user can't reach. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>