diff --git a/bin/revert-next-ep-popup.sh b/bin/revert-next-ep-popup.sh
new file mode 100755
index 0000000..78129ff
--- /dev/null
+++ b/bin/revert-next-ep-popup.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+# Revert the NEXT-EP-POPUP shim injected into dev's index-dev.html on 2026-05-10.
+#
+# What it removes:
+# /* NEXT-EP-POPUP-BEGIN ... */ ... /* NEXT-EP-POPUP-END */
+#
+# Defaults to dev. Pass --prod to remove from prod's index.html instead.
+# Idempotent: safe to re-run.
+#
+# After local edit, redeploy to nullstone via the same nsenter cp trick used
+# for sub-label-shim revert (see comment at end).
+
+set -euo pipefail
+
+REPO_ROOT="$(cd "$(dirname "$0")/.." && pwd)"
+TARGET_DEV="$REPO_ROOT/web-overrides/index-dev.html"
+TARGET_PROD="$REPO_ROOT/web-overrides/index.html"
+
+TARGET="$TARGET_DEV"
+ENV="dev"
+if [[ "${1:-}" == "--prod" ]]; then
+ TARGET="$TARGET_PROD"
+ ENV="prod"
+fi
+
+if [[ ! -f "$TARGET" ]]; then
+ echo "ERROR: $TARGET not found" >&2
+ exit 1
+fi
+
+if ! grep -q "NEXT-EP-POPUP-BEGIN" "$TARGET"; then
+ echo "shim already absent in $ENV — nothing to do"
+ exit 0
+fi
+
+cp "$TARGET" "$TARGET.bak.$(date -u +%Y%m%dT%H%M%SZ)"
+sed -i '/NEXT-EP-POPUP-BEGIN/,/NEXT-EP-POPUP-END/d' "$TARGET"
+
+if grep -q "NEXT-EP-POPUP" "$TARGET"; then
+ echo "ERROR: revert left orphan markers in $TARGET" >&2
+ exit 2
+fi
+
+echo "reverted ($ENV). backup at $TARGET.bak.*"
+echo
+echo "Now redeploy to nullstone:"
+if [[ "$ENV" == "dev" ]]; then
+ echo " scp $TARGET user@192.168.0.100:/tmp/index-dev-new.html"
+ echo " ssh user@192.168.0.100 'docker run --rm --privileged --pid=host --userns=host -v /opt:/opt -v /tmp:/tmp alpine nsenter -t 1 -m -u -i -n cp /tmp/index-dev-new.html /opt/docker/jellyfin-dev/web-overrides/index-dev.html'"
+else
+ echo " scp $TARGET user@192.168.0.100:/tmp/arrflix-index.html"
+ echo " ssh user@192.168.0.100 'docker run --rm --privileged --pid=host --userns=host -v /opt:/opt -v /tmp:/tmp alpine nsenter -t 1 -m -u -i -n cp /tmp/arrflix-index.html /opt/docker/jellyfin/web-overrides/index.html'"
+fi
+echo "Then hard-refresh the browser (Ctrl+Shift+R)."
diff --git a/web-overrides/index-dev.html b/web-overrides/index-dev.html
new file mode 100644
index 0000000..f80cc29
--- /dev/null
+++ b/web-overrides/index-dev.html
@@ -0,0 +1,735 @@
+
ARRFLIX
\ No newline at end of file
diff --git a/web-overrides/popup-designs/README.md b/web-overrides/popup-designs/README.md
new file mode 100644
index 0000000..0228bcf
--- /dev/null
+++ b/web-overrides/popup-designs/README.md
@@ -0,0 +1,37 @@
+# Next-episode popup designs
+
+Side-by-side preview of the 4 candidate popup designs evaluated 2026-05-10.
+Owner picked **A · Cinematic Strip** for prod-bound shim. **B · Terminal**
+and **C · Minimal Bar** archived as standalone files for future re-evaluation
+(e.g. when ARRFLIX visual direction shifts or owner gets bored of A).
+
+## Files
+
+- `preview.html` — full 4-up preview page (drop into `python3 -m http.server`
+ to compare). Designed at 1920×1080 in a faux Star-Wars-credits backdrop.
+- `a-strip.html` — standalone A. Full-bleed bottom strip, big countdown
+ ring, white "Start Now" CTA, "Hide" secondary. Netflix-grade muscle
+ memory. **Currently shipped to dev.**
+- `b-terminal.html` — standalone B. Bottom-right card with JetBrains
+ Mono, dashed dividers, red accent line. Edgy, ARRFLIX-distinct.
+- `c-minimal.html` — standalone C. Thin progress bar across bottom + small
+ text strip, no card. Disappears into UX. Power-user.
+
+D · Poster Card was discarded — too similar to Jellyfin stock to justify
+shipping.
+
+## Wiring (current state)
+
+Design A is shipped to **dev only** (`dev.arrflix.s8n.ru`) as a CSS+JS
+shim bracketed in `/opt/docker/jellyfin-dev/web-overrides/index-dev.html`
+between `NEXT-EP-POPUP-BEGIN` and `NEXT-EP-POPUP-END` markers. The shim
+keeps Jellyfin's `.upNextDialog` DOM intact (so its countdown timer keeps
+ticking and clicking the underlying buttons stays wired) and overlays
+Design A's visual via CSS + a small countdown-ring SVG that mirrors
+`.upNextDialog-countdownText`.
+
+Promote to prod when satisfied: copy the shim block into prod's
+`web-overrides/index.html` between the same markers, then deploy via
+the same nsenter trick documented in `bin/revert-sub-label-shim.sh`.
+
+Revert (dev): `bin/revert-next-ep-popup.sh`.
diff --git a/web-overrides/popup-designs/a-strip.html b/web-overrides/popup-designs/a-strip.html
new file mode 100644
index 0000000..a401814
--- /dev/null
+++ b/web-overrides/popup-designs/a-strip.html
@@ -0,0 +1,42 @@
+
+ARRFLIX popup — A · Cinematic Strip
+
+
+
+
+