-
-
- {t("library.title")}
-
-
- {t("library.subtitle")}
-
-
+
+
+ {t("library.title")}
+
+
+ {t("library.subtitle")}
+
+
-
- {/* Context action: Import for decks (a quiet link while the pool
- is empty), start-a-new-solve for homework. */}
- {tab === "decks" ? (
- isEmpty ? (
-
- ) : (
- <>
-
-
- >
- )
- ) : homework.length > 0 ? (
- <>
-
-
- {t("actionHomework")}
-
-
-
- {t("actionHomework")}
-
- >
- ) : null}
- {
- void handleImport(event.target.files?.[0]);
- event.target.value = "";
- }}
- />
-
+ {/* Import sits above the tabs on every tab, so the header never
+ shifts when you switch pools. */}
+
+
+ {
+ void handleImport(event.target.files?.[0]);
+ event.target.value = "";
+ }}
+ />
+
- {/* Two pools, never mixed: study decks and saved homework. */}
-
-
- {t("tabDecks")}
-
-
- {t("tabHomework")}
-
-
+ {/* Two pools, never mixed: study decks and saved homework. */}
+
+
+ {t("tabDecks")}
+
+
+ {t("tabHomework")}
+
{/* Secondary stats folded into the header as quiet text on desktop,
@@ -263,34 +220,12 @@ export function LibraryScreen({ initialTab = "decks" }: { initialTab?: "decks" |
-
-
-
-
- {t("emptyStateCreateDeck")}
-
+
+ {t("emptyStateCreateDeck")}
}
>
{t("library.emptyBody")}
-
- {t("library.emptyHint")}{" "}
-
- .
-
) : null}
@@ -424,19 +359,8 @@ export function LibraryScreen({ initialTab = "decks" }: { initialTab?: "decks" |
-
-
-
-
- {t("emptyStateHomework")}
-
+
+ {t("emptyStateHomework")}
}
>
diff --git a/lib/i18n-dict.ts b/lib/i18n-dict.ts
index 243fded..44e4146 100644
--- a/lib/i18n-dict.ts
+++ b/lib/i18n-dict.ts
@@ -223,7 +223,7 @@ const en: Record = {
"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 = {
"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 = {
"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 = {
"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 = {
"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 = {
"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.",
diff --git a/public/sw.js b/public/sw.js
index 4ef9ccb..7eb3601 100644
--- a/public/sw.js
+++ b/public/sw.js
@@ -9,7 +9,7 @@
*
* Bumping CACHE_VERSION is how a new deploy invalidates old assets.
*/
-const CACHE_VERSION = "freezmo-v10";
+const CACHE_VERSION = "freezmo-v11";
const SHELL_CACHE = `${CACHE_VERSION}-shell`;
const ASSET_CACHE = `${CACHE_VERSION}-assets`;