diff --git a/render-repros/abs-fill.html b/render-repros/abs-fill.html
new file mode 100644
index 0000000..9fa524e
--- /dev/null
+++ b/render-repros/abs-fill.html
@@ -0,0 +1,14 @@
+
abs fill
+Every colored area below must FILL its box. Before P0 all were 0x0 (blank).
+A rel(auto-width)+BLOCK, abs inset:0:
+
+B rel+FLEX, abs inset:0:
+
+C rel+GRID, abs inset:0:
+
+D abs width:100%/height:100%:
+
+E padding-hack ratio + abs fill IMG:
+
+
diff --git a/render-repros/carousel-clip.html b/render-repros/carousel-clip.html
new file mode 100644
index 0000000..6f41f66
--- /dev/null
+++ b/render-repros/carousel-clip.html
@@ -0,0 +1,16 @@
+carousel clip
+Track translated -300px: ONLY slide TWO (green) may be visible.
+
+Control (transform:none): only slide ONE (red) visible.
+
+
diff --git a/render-repros/clear-float.html b/render-repros/clear-float.html
new file mode 100644
index 0000000..0ffafac
--- /dev/null
+++ b/render-repros/clear-float.html
@@ -0,0 +1,12 @@
+clear
+clear:both must drop BELOW the float at full width (orange bar under the blue thumb):
+
+
+
short text beside the float.
+
CLEARED: full width below
+
after content flows normally.
+
+
diff --git a/render-repros/img-density-and-alt.html b/render-repros/img-density-and-alt.html
new file mode 100644
index 0000000..8da51de
--- /dev/null
+++ b/render-repros/img-density-and-alt.html
@@ -0,0 +1,18 @@
+img density + alt
+Density: A raw 648px, B srcset 2x -> ~324 CSS px, C 648w + sizes:300px -> ~300px
+
+
+
+Broken-image fallback: D alt text only, E alt="" nothing, F no alt -> grey box
+D:

+E:

+F:

+G: cover img half-outside an overflow:hidden viewport must not bleed past the red border:
+
+
+

+

+
+
+
diff --git a/render-repros/mixed-content-block.html b/render-repros/mixed-content-block.html
new file mode 100644
index 0000000..757b6c1
--- /dev/null
+++ b/render-repros/mixed-content-block.html
@@ -0,0 +1,13 @@
+mixed inline+block
+Block children of a mixed-content block must stay FULL WIDTH (not shrink to content),
+and inline runs must wrap as text, not one word per line.
+
+ leading inline text that should wrap across the full width of this container as a normal paragraph would
+
block child: must span the full 400px
+ trailing inline text after the block child
+
+
contentless wrapper w/ abs fill
+
+
+
diff --git a/render-repros/run.sh b/render-repros/run.sh
new file mode 100755
index 0000000..225ea7b
--- /dev/null
+++ b/render-repros/run.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+# Render every repro fixture in obscura and Chromium side by side.
+# Usage: ./run.sh [outdir] (default: ./out)
+set -u
+BIN="${OBSCURA_BIN:-$(cd "$(dirname "$0")/.." && pwd)/target/release/obscura}"
+DIR="$(cd "$(dirname "$0")" && pwd)"
+OUT="${1:-$DIR/out}"
+mkdir -p "$OUT"
+for f in "$DIR"/*.html; do
+ n=$(basename "$f" .html)
+ OBSCURA_SHOT_W=900 OBSCURA_SHOT_H=1000 OBSCURA_ALLOW_PRIVATE_NETWORK=1 \
+ timeout 60 "$BIN" fetch "file://$f" --screenshot "$OUT/$n.obscura.png" --timeout 30000 --wait 2 >/dev/null 2>&1
+ timeout 60 google-chrome-stable --headless --disable-gpu --no-sandbox --hide-scrollbars \
+ --force-device-scale-factor=1 --window-size=900,1000 --screenshot="$OUT/$n.chrome.png" "file://$f" >/dev/null 2>&1
+ echo "rendered $n"
+done
+echo "output in $OUT"
diff --git a/render-repros/tables.html b/render-repros/tables.html
new file mode 100644
index 0000000..1c778da
--- /dev/null
+++ b/render-repros/tables.html
@@ -0,0 +1,21 @@
+tables
+T1: td width:200px must set the whole COLUMN to 200px:
+| fixed 200 | auto col |
+| second row same col | x |
+T2: tr background must show behind its cells' gaps:
+| normal | row |
+| HIGHLIGHTED | ROW |
+T3: cell text CENTERS vertically by default; top/bottom explicit:
+| default middle | explicit top | explicit bottom |
+T4: col width=150 must size column 1:
+
+T5: percent width cell 50% of a 400px table (~198px):
+
+
diff --git a/render-repros/z-index.html b/render-repros/z-index.html
new file mode 100644
index 0000000..0bf3b51
--- /dev/null
+++ b/render-repros/z-index.html
@@ -0,0 +1,12 @@
+z-index
+A: z:10 overlay declared BEFORE a later sibling must paint ON TOP (green wins):
+
+B: z:-1 backdrop declared AFTER content must paint UNDER it (blue stays visible, orange edges show):
+
+