diff --git a/.env.example b/.env.example
index 45e6c9bf..3ede82c8 100644
--- a/.env.example
+++ b/.env.example
@@ -139,7 +139,15 @@ DB_IDLE_TX_TIMEOUT_MS=10000
INTAKE_RATE_PER_KEY=60
INTAKE_RATE_PER_IP=20
INTAKE_RATE_PER_KEY_ANON=10
-INTAKE_MAX_BYTES=5242880
+# Whole-request ceiling — keep above the per-file/total attachment caps below
+# (10 MB file + 25 MB total) plus the gallery media caps (100 MB video) or
+# attachments the widget accepts will 413. (Was 41943040 / 40 MB before
+# gallery media support raised the ceiling to fit one max-size video.)
+# The intake handlers reject an oversized declared Content-Length before
+# buffering the body, but Content-Length can be absent or lie on chunked
+# bodies — put a reverse-proxy body-size cap (e.g. nginx client_max_body_size)
+# in front of the app to bound streamed/chunked requests too.
+INTAKE_MAX_BYTES=157286400
INTAKE_REQUIRE_DWELL=true
INTAKE_MIN_DWELL_MS=1500
@@ -148,6 +156,12 @@ INTAKE_USER_FILE_MAX_BYTES=10485760
INTAKE_USER_FILES_TOTAL_MAX_BYTES=26214400
INTAKE_USER_FILES_MAX_COUNT=5
+# Gallery media caps (media[N] + mediaMeta parts: screenshots + trimmed
+# recordings from the SDK's capture flow)
+INTAKE_MEDIA_MAX_COUNT=3
+INTAKE_MEDIA_IMAGE_MAX_BYTES=10485760
+INTAKE_MEDIA_VIDEO_MAX_BYTES=104857600
+
# Virus scan via the bundled clamav sidecar. Off by default — flip to true
# AFTER `docker compose up -d` and the clamav service has finished pulling
# its signature DB (~500MB, watch with `docker compose logs -f clamav`
diff --git a/apps/dashboard/app/components/report-drawer/attachments-tab.vue b/apps/dashboard/app/components/report-drawer/attachments-tab.vue
index 6bcd7c16..4a90b15c 100644
--- a/apps/dashboard/app/components/report-drawer/attachments-tab.vue
+++ b/apps/dashboard/app/components/report-drawer/attachments-tab.vue
@@ -1,15 +1,23 @@
+
+
+