diff --git a/web/src/components/Lightbox.jsx b/web/src/components/Lightbox.jsx
new file mode 100644
index 0000000..fc30866
--- /dev/null
+++ b/web/src/components/Lightbox.jsx
@@ -0,0 +1,32 @@
+import { useEffect } from "react";
+import { createPortal } from "react-dom";
+import Icon from "./Icon";
+
+/**
+ * Bildschirmfüllende Bildansicht. Schließt per Schließen-Knopf, Klick auf den
+ * Hintergrund oder Escape. Wird per Portal an den
gehängt, damit es über
+ * allem liegt und nicht von Containern (overflow) abgeschnitten wird.
+ */
+export default function Lightbox({ src, alt, onClose }) {
+ useEffect(() => {
+ function onKey(e) { if (e.key === "Escape") onClose(); }
+ document.addEventListener("keydown", onKey);
+ const vorher = document.body.style.overflow;
+ document.body.style.overflow = "hidden";
+ return () => {
+ document.removeEventListener("keydown", onKey);
+ document.body.style.overflow = vorher;
+ };
+ }, [onClose]);
+
+ return createPortal(
+
+
+ {/* Klick aufs Bild soll nicht schließen – nur der Hintergrund. */}
+ e.stopPropagation()} />
+