feat: a round in the order cards come, shared daily limits, and a start screen

Studying:
- A round is one list in the order its cards come: those done, the one
  shown, those to come. A card due again within the day goes back in
  after 4 more cards when rated Bad, at the end otherwise, so the pills
  above the card follow it; the buttons say "in 4 cards", "at the end",
  "now" (round_order.dart).
- The studied studyset's daily limits hold for everything inside it
  together, as Anki's do for subdecks: twenty topics start 20 new cards
  a day in all, not 20 each.
- The study header's studyset name shows whole on hover or long press.
- The assistant's button sits at the lower left: in the Library across
  from Create studyset, in a studyset above its bar, and higher while
  studying, above the buttons that answer the card.

A studyset:
- Progress also counts the learning paths' steps done and lists the
  PDFs not read to their end, begun first, each opening the reader,
  across its topics (MaterialProgressCubit).
- Next up starts with studying for the exam while one is ahead: its
  reviews due and the new cards its pace leaves for the day.
- Learning paths tagged with a level count towards its automatic exam
  plan and offer it, as cards do.
- A step's first heading equal to its title is dropped on import and
  hidden in paths imported before.

Signing out, or a session the server ended, leads to a start screen
(GitHub, email, without an account, another instance) rather than a new
anonymous account; only the very first start makes one by itself.
Settings names the kind of account and its instance.

Also: the Watch screen reads the cards once for held words and their
progress; its ±10 s buttons tick as the navigation bar does; a map card
keeps its view as its caption changes and brings a picked region
towards the middle; an empty or failed library can be pulled to sync.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
This commit is contained in:
Tizian 「ティツィアーン」 2026-10-17 00:39:34 +02:00
commit de6af3efab
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -648,6 +648,12 @@
"settingsTitle": "Settings",
"settingsAccount": "Account",
"instanceWelcome": "Welcome to Halkyon Learn",
"startSignedOut": "Signed out",
"startOn": "Start on {instance}:",
"@startOn": {"placeholders": {"instance": {"type": "String"}}},
"startWithoutAccount": "Start without an account",
"startNoGitHubAccount": "No account here signs in with this GitHub account yet. Start without an account, then add GitHub in Profile.",
"startOtherInstance": "Use another instance",
"instanceFirstStartSubtitle": "Choose the instance to keep your studysets on. Someone runs each one; you can add others later.",
"instanceAddress": "Instance address",
"instanceUseBuiltIn": "Use {name}",
@ -660,6 +666,12 @@
"instanceOpenFailed": "Couldn't open the app on {name}.",
"@instanceOpenFailed": {"placeholders": {"name": {"type": "String"}}},
"settingsSwitchAccount": "Switch account",
"settingsAccountAnonymous": "Anonymous on {instance}",
"@settingsAccountAnonymous": {"placeholders": {"instance": {"type": "String"}}},
"settingsAccountSignedIn": "Signed in on {instance}",
"@settingsAccountSignedIn": {"placeholders": {"instance": {"type": "String"}}},
"accountAnonymous": "Anonymous",
"accountSignedIn": "Signed in",
"accountsTitle": "Accounts",
"accountAdd": "Add account",
"accountAddSubtitle": "Choose the instance for the account to add.",
@ -1100,6 +1112,10 @@
"studyBackFirstOff": "Show the back of cards first",
"studyShowAnswer": "Show answer",
"studyCheck": "Check",
"studyComesBackIn": "{count, plural, =1{in 1 card} other{in {count} cards}}",
"@studyComesBackIn": {"placeholders": {"count": {"type": "int"}}},
"studyComesBackAtEnd": "at the end",
"studyComesBackNow": "now",
"studySelectAll": "Select all that apply",
"studySelectOne": "Select the correct answer",
"studyMatchingInstructions": "DRAG AND DROP ONTO CARDS ABOVE",
@ -2231,12 +2247,27 @@
"@progressMinutes": {"placeholders": {"minutes": {"type": "int"}}},
"progressHoursMinutes": "{hours} h {minutes} min",
"@progressHoursMinutes": {"placeholders": {"hours": {"type": "int"}, "minutes": {"type": "int"}}},
"progressPathsInfo": "The steps of this studyset's learning paths, and its topics', that you have done.",
"progressStepsDone": "{total, plural, =1{of 1 step done} other{of {total} steps done}}",
"@progressStepsDone": {"placeholders": {"total": {"type": "int"}}},
"progressReading": "Reading",
"progressReadingInfo": "The PDFs of this studyset and its topics not read to their last page yet. Tap one to read on.",
"progressPdfPage": "Page {page} of {count}",
"@progressPdfPage": {"placeholders": {"page": {"type": "int"}, "count": {"type": "int"}}},
"progressPdfNotBegun": "Not begun yet",
"progressPdfsAllRead": "{count, plural, =1{The PDF is read to its end.} other{All {count} PDFs are read to their end.}}",
"@progressPdfsAllRead": {"placeholders": {"count": {"type": "int"}}},
"progressShowAllPdfs": "Show all {count}",
"@progressShowAllPdfs": {"placeholders": {"count": {"type": "int"}}},
"progressShowFewerPdfs": "Show fewer",
"planPathsDone": "{count, plural, =1{{done} of 1 path finished} other{{done} of {count} paths finished}}",
"@planPathsDone": {"placeholders": {"done": {"type": "int"}, "count": {"type": "int"}}},
"planNoPaths": "No learning paths yet",
"planNextUp": "Next up",
"planReview": "{count, plural, =1{Study 1 flashcard} other{Study {count} flashcards}}",
"@planReview": {"placeholders": {"count": {"type": "int"}}},
"planStudyForExam": "{count, plural, =1{Study 1 flashcard for {exam}} other{Study {count} flashcards for {exam}}}",
"@planStudyForExam": {"placeholders": {"count": {"type": "int"}, "exam": {"type": "String"}}},
"planContinue": "Continue “{title}”",
"@planContinue": {"placeholders": {"title": {"type": "String"}}},
"planStart": "Start “{title}”",