diff --git a/frontend/src/lib/components/blockshell/BlockShell.svelte b/frontend/src/lib/components/blockshell/BlockShell.svelte
new file mode 100644
index 0000000..934f53f
--- /dev/null
+++ b/frontend/src/lib/components/blockshell/BlockShell.svelte
@@ -0,0 +1,636 @@
+
+
+
+
+
+
diff --git a/frontend/src/lib/components/blockshell/index.ts b/frontend/src/lib/components/blockshell/index.ts
new file mode 100644
index 0000000..d91b969
--- /dev/null
+++ b/frontend/src/lib/components/blockshell/index.ts
@@ -0,0 +1,2 @@
+export { default as BlockShell } from './BlockShell.svelte';
+export * from './types.js';
diff --git a/frontend/src/lib/components/blockshell/types.ts b/frontend/src/lib/components/blockshell/types.ts
new file mode 100644
index 0000000..413d257
--- /dev/null
+++ b/frontend/src/lib/components/blockshell/types.ts
@@ -0,0 +1,61 @@
+/**
+ * BlockShell — types for the panel wrapper component.
+ *
+ * BlockShell wraps each tool panel (trait) on the spatial workspace,
+ * providing header, resize, drag, fullscreen and drop-zone capabilities.
+ *
+ * Ref: docs/retninger/arbeidsflaten.md
+ * Ref: docs/features/universell_overfoering.md § 8.1
+ */
+
+import type { DragPayload, CompatResult } from '$lib/transfer.js';
+
+/** Size constraints for a panel */
+export interface SizeConstraints {
+ minWidth: number;
+ minHeight: number;
+ maxWidth: number;
+ maxHeight: number;
+}
+
+/** Default size constraints */
+export const DEFAULT_CONSTRAINTS: SizeConstraints = {
+ minWidth: 280,
+ minHeight: 200,
+ maxWidth: 1600,
+ maxHeight: 1200,
+};
+
+/** Mobile breakpoint — below this, panels stack vertically */
+export const MOBILE_BREAKPOINT = 768;
+
+/** Resize direction */
+export type ResizeDirection =
+ | 'n' | 's' | 'e' | 'w'
+ | 'ne' | 'nw' | 'se' | 'sw';
+
+/** Drop-zone state for visual feedback */
+export type DropZoneState = 'idle' | 'compatible' | 'incompatible';
+
+/**
+ * BlockReceiver interface — implemented by tool panels that accept drops.
+ * Ref: docs/features/universell_overfoering.md § 4.3
+ */
+export interface BlockReceiver {
+ /** Can this panel receive this payload? */
+ canReceive(payload: DragPayload): CompatResult;
+}
+
+/** Events emitted by BlockShell */
+export interface BlockShellEvents {
+ /** Panel close requested */
+ onClose?: () => void;
+ /** Panel drag-moved (delta in world coords) */
+ onDragMove?: (dx: number, dy: number) => void;
+ /** Panel resized */
+ onResize?: (width: number, height: number) => void;
+ /** Panel fullscreen state changed */
+ onFullscreenChange?: (isFullscreen: boolean) => void;
+ /** Drop received on this panel */
+ onDrop?: (payload: DragPayload) => void;
+}
diff --git a/tasks.md b/tasks.md
index 5cf5687..ab1bba4 100644
--- a/tasks.md
+++ b/tasks.md
@@ -213,8 +213,7 @@ Ref: `docs/features/ai_verktoy.md`, `docs/retninger/arbeidsflaten.md`
Ref: `docs/retninger/arbeidsflaten.md`, `docs/features/canvas_primitiv.md`
- [x] 19.1 Canvas-primitiv Svelte-komponent: pan/zoom kamera med CSS transforms, viewport culling, pointer events (mus + touch), snap-to-grid (valgfritt), fullskjermsmodus. Ref: `docs/features/canvas_primitiv.md`.
-- [~] 19.2 BlockShell wrapper-komponent: header med tittel + fullskjerm/resize/lukk-knapper, drag-handles for repositionering, resize-handles, drop-sone rendering (highlight ved drag-over). Responsivt (min-size, max-size).
- > Påbegynt: 2026-03-18T07:19
+- [x] 19.2 BlockShell wrapper-komponent: header med tittel + fullskjerm/resize/lukk-knapper, drag-handles for repositionering, resize-handles, drop-sone rendering (highlight ved drag-over). Responsivt (min-size, max-size).
- [ ] 19.3 Arbeidsflaten layout: skriv om `/collection/[id]` fra vertikal stack til Canvas + BlockShell. Last brukerens lagrede arrangement eller bruk defaults fra samlingens traits. Persist arrangement i bruker-edge metadata. Desktop: spatial canvas, mobil: stacked/tabs. Ref: `docs/retninger/arbeidsflaten.md` § "Tre lag".
- [ ] 19.4 Kontekst-header: header tilhører flaten, viser gjeldende node som nedtrekksmeny/kontekst-velger. Mest brukte noder øverst (frekvens/recency), søkbart. Verktøymeny for å instansiere nye paneler. Ref: `docs/retninger/arbeidsflaten.md` § "Kontekst-header".
- [ ] 19.5 Snarveier: paneler kan minimeres til kompakt ikon/fane. Dobbeltklikk → minimer/gjenopprett. Bevarer posisjon og størrelse. Ref: `docs/retninger/arbeidsflaten.md` § "Snarveier".