Keep the library header steady across tabs; simplify the empty states

Header & action bar
- Import JSON no longer disappears on the Homework tab: it sits directly
  under the "Your icebox" header/subtitle, above the tab switcher, on every
  tab — so switching pools no longer shifts the layout or hides actions. It
  is one secondary button at all sizes now, not a quiet link when empty.
- The decks-only "Homework Solver" header action is gone; the homework tab's
  empty-state CTA and the drawer cover starting a new solve.

Empty states
- Dropped the "Using your own Ollama models — check the connection in
  Settings." line (and its two dictionary keys) everywhere.
- Both tabs share one structure: ice icon -> heading -> short description ->
  primary CTA button, starting at the same height:
    Study Decks: "No decks yet" -> "Freeze a page of notes into flashcards
    and quizzes." -> "Create study deck"
    Homework: "No homework yet" -> "Solved assignments and step-by-step
    guides show up here." -> "Solve homework"
- CTA labels read as actions on the standardized nouns; removed the now
  unused actionStudyDeck/actionHomework keys.

Tabs
- Link segments are 44px tall at every breakpoint (min-height in the base
  .segmented > a rule).

Service worker: freezmo-v11.

Verified: library-consistency suite 49/49 (Import visible with a fixed
position on both tabs, no Ollama text, empty states at the same y, primary
ice CTA buttons >=44px, deep links, deletion, redirects, desktop, 360px, axe
en+cs light+dark), mobile 51/51, i18n 27/27, desktop regression 74/74.
Lint + build clean.
This commit is contained in:
Martin Dvořák 2026-10-08 21:50:18 +00:00
commit 9d6ef90f02
4 changed files with 55 additions and 139 deletions

View file

@ -223,7 +223,7 @@ const en: Record<string, string> = {
"homework.history.openTitle": "Open “{title}”",
"homework.history.deleteConfirm": "Delete this result?",
"homework.emptyTitle": "No homework yet",
"homework.emptyBody": "Solved assignments and step-by-step guides you save show up here.",
"homework.emptyBody": "Solved assignments and step-by-step guides show up here.",
"homework.open": "Open",
"homework.steps.one": "{n} step",
"homework.steps.few": "{n} steps",
@ -234,10 +234,8 @@ const en: Record<string, string> = {
"tabHomework": "Homework",
/* quick actions (library empty state + /create switcher) ----------- */
"emptyStateCreateDeck": "Study Deck",
"emptyStateHomework": "Homework Solver",
"actionStudyDeck": "Study Deck",
"actionHomework": "Homework Solver",
"emptyStateCreateDeck": "Create study deck",
"emptyStateHomework": "Solve homework",
/* library --------------------------------------------------------- */
"library.title": "Your icebox",
@ -250,9 +248,7 @@ const en: Record<string, string> = {
"library.deckMoved": "Deck moved.",
"library.deckMovedUnorganized": "Deck moved to Unorganized.",
"library.noDecks": "No decks yet",
"library.emptyBody": "Freeze a page of notes into a feed of flashcards and quizzes.",
"library.emptyHint": "Using your own Ollama models —",
"library.emptySettings": "check the connection in Settings",
"library.emptyBody": "Freeze a page of notes into flashcards and quizzes.",
"library.renameFolderAria": "Folder name",
"library.nothingUnfiled": "Nothing unfiled right now.",
"library.emptyFolder": "Empty folder — freeze a deck into it or move one over from Unorganized.",
@ -817,7 +813,7 @@ const cs: Record<string, string> = {
"homework.history.openTitle": "Otevřít „{title}“",
"homework.history.deleteConfirm": "Smazat tento výsledek?",
"homework.emptyTitle": "Zatím žádné úkoly",
"homework.emptyBody": "Uložená řešení úkolů a návody krok za krokem se objeví tady.",
"homework.emptyBody": "Vyřešená zadání a návody krok za krokem se objeví tady.",
"homework.open": "Otevřít",
"homework.steps.one": "{n} krok",
"homework.steps.few": "{n} kroky",
@ -828,10 +824,8 @@ const cs: Record<string, string> = {
"tabHomework": "Úkoly",
/* quick actions (library empty state + /create switcher) ----------- */
"emptyStateCreateDeck": "Studijní balíček",
"emptyStateHomework": "Řešitel úkolů",
"actionStudyDeck": "Studijní balíček",
"actionHomework": "Řešitel úkolů",
"emptyStateCreateDeck": "Vytvořit studijní balíček",
"emptyStateHomework": "Vyřešit úkol",
/* library --------------------------------------------------------- */
"library.title": "Tvoje mraznička",
@ -844,9 +838,7 @@ const cs: Record<string, string> = {
"library.deckMoved": "Sada přesunuta.",
"library.deckMovedUnorganized": "Sada přesunuta do Nezařazených.",
"library.noDecks": "Zatím žádné sady",
"library.emptyBody": "Zmraz stránku poznámek do feedu kartiček a kvízů.",
"library.emptyHint": "S tvými vlastními modely Ollama —",
"library.emptySettings": "zkontroluj připojení v Nastavení",
"library.emptyBody": "Zmraz stránku poznámek do kartiček a kvízů.",
"library.renameFolderAria": "Název složky",
"library.nothingUnfiled": "Teď tu nic nezařazeného není.",
"library.emptyFolder": "Prázdná složka — zmraz do ní sadu nebo ji sem přesuň z Nezařazených.",