diff --git a/.pubignore b/.pubignore
index 97f5406..a2e6bd4 100644
--- a/.pubignore
+++ b/.pubignore
@@ -1 +1 @@
-doc/web/
+doc/
diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md
index 458a8ad..0ac656a 100644
--- a/ARCHITECTURE.md
+++ b/ARCHITECTURE.md
@@ -13,6 +13,11 @@
> for the full picture — every ✅ there is verified, and the gaps are listed
> honestly.
+
+
+> More animated diagrams (capability → tier, visual-aids pipeline, digital
+> controls, web split) live in [doc/diagrams/](doc/diagrams/).
+
---
## Table of Contents
diff --git a/README.md b/README.md
index 72ebed4..28ed463 100644
--- a/README.md
+++ b/README.md
@@ -25,6 +25,19 @@ Most Flutter camera packages wrap platform APIs directly and surface raw excepti
---
+## Architecture at a glance
+
+A camera frame's path from the sensor, across the single Dart ↔ native FFI
+boundary, up to the live overlay:
+
+
+
+More animated diagrams — **capability passport → tier**, the **visual-aids
+pipeline**, the **digital manual-control** trick, and the **web pure-Dart
+split** — in **[doc/diagrams/](doc/diagrams/)**. (They animate on GitHub.)
+
+---
+
## Feature status
### Architecture
diff --git a/doc/diagrams/README.md b/doc/diagrams/README.md
new file mode 100644
index 0000000..fb5fac7
--- /dev/null
+++ b/doc/diagrams/README.md
@@ -0,0 +1,80 @@
+# camera_pro — architecture diagrams
+
+Animated explanatory diagrams of how `camera_pro` works. They render (and
+animate) natively on GitHub. Each is a self-contained, dependency-free SVG.
+
+> On pub.dev, SVGs may render as a static first frame — view this page on
+> GitHub for the animation.
+
+## Architecture · the one FFI hop
+
+A camera frame's path from sensor to live overlay, and the single Dart ↔ native
+boundary it crosses.
+
+
+
+## Capability passport → tier
+
+Every feature is reported as `Supported` or `NotSupported`; `determineTier`
+maps the passport to Full / Standard / Basic.
+
+
+
+## Visual-aids pipeline
+
+One preview frame, dispatched to the Metal GPU when available or the SIMD CPU
+core otherwise — both produce byte-identical overlays.
+
+
+
+## Digital manual-control pipeline
+
+When a camera exposes no sensor controls (the macOS built-in camera, most
+browsers), the six controls are applied digitally per frame — so the device
+still reaches `CameraTier.full`.
+
+
+
+## Web pure-Dart split
+
+A single conditional export keeps `dart:ffi` / `dart:io` off the web build; the
+browser gets a pure-Dart `WebCameraBackend` with the C kernels ported to Dart.
+
+
+
+## Capture paths
+
+One frame, three encoders: PNG via `dart:ui`, a dependency-free linear-DNG
+writer (with EXIF), and video recording — ffprobe / ffmpeg verified.
+
+
+
+## SIMD across architectures
+
+The histogram kernel has NEON, SSSE3, and scalar paths that produce bit-exact
+output (x86 checked under Rosetta 2 + CI). The honest twist: clang's
+auto-vectorized scalar edges the hand-written NEON on the M1.
+
+
+
+## Burst + EV bracket
+
+`captureBurst(5)` fires five frames in about 1.2s; `captureExposureBracket`
+takes three at −2 / 0 / +2 EV, with measured mean luminance.
+
+
+
+## CI matrix
+
+`native.yml` runs on every push across macOS, Ubuntu, Windows, and web — every
+✅ in the docs is one of these runs.
+
+
+
+## Lock-free buffer pool
+
+Frames ride a ring of pre-allocated, cache-aligned buffers; `acquire`/`release`
+are O(1) lock-free atomics (and `isLeaf` FFI calls), so nothing per-frame hits
+the Dart GC.
+
+
diff --git a/doc/diagrams/architecture-ffi-flow.svg b/doc/diagrams/architecture-ffi-flow.svg
new file mode 100644
index 0000000..93f95a2
--- /dev/null
+++ b/doc/diagrams/architecture-ffi-flow.svg
@@ -0,0 +1,85 @@
+
+
diff --git a/doc/diagrams/buffer-pool-ring.svg b/doc/diagrams/buffer-pool-ring.svg
new file mode 100644
index 0000000..4f5091b
--- /dev/null
+++ b/doc/diagrams/buffer-pool-ring.svg
@@ -0,0 +1,43 @@
+
+
diff --git a/doc/diagrams/burst-bracket.svg b/doc/diagrams/burst-bracket.svg
new file mode 100644
index 0000000..935f3ce
--- /dev/null
+++ b/doc/diagrams/burst-bracket.svg
@@ -0,0 +1,35 @@
+
+
diff --git a/doc/diagrams/capability-passport-tier.svg b/doc/diagrams/capability-passport-tier.svg
new file mode 100644
index 0000000..8f2aa23
--- /dev/null
+++ b/doc/diagrams/capability-passport-tier.svg
@@ -0,0 +1,55 @@
+
+
diff --git a/doc/diagrams/capture-paths.svg b/doc/diagrams/capture-paths.svg
new file mode 100644
index 0000000..2e4ac16
--- /dev/null
+++ b/doc/diagrams/capture-paths.svg
@@ -0,0 +1,41 @@
+
+
diff --git a/doc/diagrams/ci-matrix.svg b/doc/diagrams/ci-matrix.svg
new file mode 100644
index 0000000..2ae9ea6
--- /dev/null
+++ b/doc/diagrams/ci-matrix.svg
@@ -0,0 +1,42 @@
+
+
diff --git a/doc/diagrams/digital-controls.svg b/doc/diagrams/digital-controls.svg
new file mode 100644
index 0000000..faf0340
--- /dev/null
+++ b/doc/diagrams/digital-controls.svg
@@ -0,0 +1,59 @@
+
+
diff --git a/doc/diagrams/simd-arch.svg b/doc/diagrams/simd-arch.svg
new file mode 100644
index 0000000..9a4a6fc
--- /dev/null
+++ b/doc/diagrams/simd-arch.svg
@@ -0,0 +1,43 @@
+
+
diff --git a/doc/diagrams/visual-aids-pipeline.svg b/doc/diagrams/visual-aids-pipeline.svg
new file mode 100644
index 0000000..44ef5c5
--- /dev/null
+++ b/doc/diagrams/visual-aids-pipeline.svg
@@ -0,0 +1,68 @@
+
+
diff --git a/doc/diagrams/web-puredart-split.svg b/doc/diagrams/web-puredart-split.svg
new file mode 100644
index 0000000..edd3328
--- /dev/null
+++ b/doc/diagrams/web-puredart-split.svg
@@ -0,0 +1,61 @@
+
+