diff --git a/src/components/chat/session-sidebar/SessionList.svelte b/src/components/chat/session-sidebar/SessionList.svelte
new file mode 100644
index 00000000..3161231f
--- /dev/null
+++ b/src/components/chat/session-sidebar/SessionList.svelte
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
+{#if !showArchived && sections.pinned.length}
+
+
Pinned
+ {#each sections.pinned as row (row.threadId)}
+
open(row.threadId)}
+ onRename={() => rename(row.threadId, row.title)}
+ onDelete={() => del(row.threadId, row.title)}
+ onTogglePin={() => togglePin(row.threadId, row.pinned)}
+ onToggleArchive={() => toggleArchive(row.threadId, row.archived)}
+ />
+ {/each}
+
+{/if}
+
+
+
{showArchived ? "Archived" : "Sessions"}
+ {#if visibleRows.length === 0}
+
{query ? "No matching sessions" : "No conversations"}
+ {/if}
+ {#each visibleRows as row (row.threadId)}
+
open(row.threadId)}
+ onRename={() => rename(row.threadId, row.title)}
+ onDelete={() => del(row.threadId, row.title)}
+ onTogglePin={() => togglePin(row.threadId, row.pinned)}
+ onToggleArchive={() => toggleArchive(row.threadId, row.archived)}
+ />
+ {/each}
+ {#if remaining > 0}
+
+ {/if}
+
+
+
diff --git a/src/components/chat/session-sidebar/SessionSheetModal.ts b/src/components/chat/session-sidebar/SessionSheetModal.ts
new file mode 100644
index 00000000..2e00a543
--- /dev/null
+++ b/src/components/chat/session-sidebar/SessionSheetModal.ts
@@ -0,0 +1,35 @@
+import type { App } from "obsidian";
+import type { ThreadPathStore } from "../../../views/chat/threadPathStore.svelte";
+import { SvelteModal } from "../../modal/SvelteModal";
+import SessionList from "./SessionList.svelte";
+
+/**
+ * Full-height modal hosting the shared session list for narrow/mobile widths,
+ * where the docked `SessionSidebar` has no room. Opening a chat from the list
+ * closes the modal (`onOpenSession`).
+ */
+export class SessionSheetModal extends SvelteModal {
+ constructor(
+ app: App,
+ private threadPathStore: ThreadPathStore,
+ ) {
+ super(app);
+ }
+
+ onOpen() {
+ this.setTitle("Sessions");
+ this.modalEl.addClass("s2b-session-sheet");
+
+ this.mountComponent(
+ SessionList,
+ { threadPathStore: this.threadPathStore, onOpenSession: () => this.close() },
+ {
+ fullScreenOnPhone: true,
+ width: "min(420px, 94vw)",
+ maxWidth: "94vw",
+ height: "min(840px, 92vh)",
+ contentOverflow: "hidden",
+ },
+ );
+ }
+}
diff --git a/src/components/chat/session-sidebar/SessionSidebar.svelte b/src/components/chat/session-sidebar/SessionSidebar.svelte
index 0b2eb6d7..5b5f4f57 100644
--- a/src/components/chat/session-sidebar/SessionSidebar.svelte
+++ b/src/components/chat/session-sidebar/SessionSidebar.svelte
@@ -1,145 +1,15 @@
diff --git a/src/components/chat/session-sidebar/SessionSidebarItem.svelte b/src/components/chat/session-sidebar/SessionSidebarItem.svelte
index c7ee310e..2f6b2d7b 100644
--- a/src/components/chat/session-sidebar/SessionSidebarItem.svelte
+++ b/src/components/chat/session-sidebar/SessionSidebarItem.svelte
@@ -1,11 +1,13 @@
+