diff --git a/app/globals.css b/app/globals.css
index 42aa009..9fe04c0 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -684,7 +684,17 @@ body {
.pt-safe { padding-top: max(env(safe-area-inset-top), 0.75rem) }
.pb-safe { padding-bottom: max(env(safe-area-inset-bottom), 0.75rem) }
.pb-tabbar { padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 5.25rem) }
+/* Trailing room under the sticky "Freeze my deck" strip on /create.
+ Phones: the strip floats one tab-bar height above the viewport bottom (the
+ sticky bottom offset in UploadScreen), so the page only needs that much
+ scroll room under it — the strip settles exactly where it was already
+ floating, and the bottom bar is never double-counted. Keep 4.6rem in sync
+ with the sticky offset. Wider screens: the strip docks to the viewport
+ bottom and keeps the roomier 9rem. */
.pb-cta { padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 9rem) }
+@media (max-width: 639px) {
+ .pb-cta { padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 4.6rem) }
+}
@media (display-mode: standalone) {
.standalone-hide { display: none }
diff --git a/components/LibraryScreen.tsx b/components/LibraryScreen.tsx
index ec618ea..2beeea5 100644
--- a/components/LibraryScreen.tsx
+++ b/components/LibraryScreen.tsx
@@ -5,7 +5,7 @@ import { useMemo, useRef, useState, useSyncExternalStore } from "react";
import { DeckCard } from "@/components/DeckCard";
import { FolderBar } from "@/components/FolderBar";
-import { FolderIcon, UploadIcon } from "@/components/icons";
+import { FolderIcon, SnowflakeIcon, SparklesIcon, UploadIcon } from "@/components/icons";
import { Button, EmptyState } from "@/components/ui";
import { folderStore, renameFolder } from "@/lib/folders";
import { useI18n } from "@/lib/i18n";
@@ -224,9 +224,38 @@ export function LibraryScreen() {
- {t("library.makeFirst")}
-
+ /* Two ways in: build a study deck from notes, or hand over an
+ assignment. Stacked on phones, side by side from 640px up. */
+