diff --git a/documentation/audits/m3-2026-10-11/STOP1.md b/documentation/audits/m3-2026-10-11/STOP1.md
new file mode 100644
index 00000000..20d40162
--- /dev/null
+++ b/documentation/audits/m3-2026-10-11/STOP1.md
@@ -0,0 +1,103 @@
+# M3 — the shell, and the home page inside it (STOP 1)
+
+Built 2026-10-11 on `felhom.eu` `7413e0dfab` + 2 (the brief's baseline plus the R-899 close and the
+mockup ruling). `felhom-controller` `dcd89364a4`, **read only**.
+
+**Live: ** — `noindex`, blocked by `robots.txt`, no sitemap entry, no
+link from a live page. The live site is untouched.
+
+## Part A — the shell
+
+`website/assets/shell.css`: **117 rules copied verbatim** from the controller's `style.css`, plus
+**exactly one adapted rule** that says so (`body.shell { display:flex; min-height:100vh }`, which
+lives in the controller's base rather than in a component). The generator names every rule it copies
+and **refuses to write the file if one has disappeared upstream**.
+
+That refusal already earned itself twice in this session:
+
+- `.sidebar::-webkit-scrollbar` does not exist upstream (only the `-track` override does);
+- `prefers-reduced-motion` is split across **five separate blocks** in the controller, and reading
+ only the first would have silently dropped four rules.
+
+The bare `body { flex-direction: column }` that broke M1's phone layout is copied this time, by
+name, along with `body.nav-open` and the `no-js`/`js` pair.
+
+## The thing that was wrong, and how it was found
+
+`shell.css` loads after `site.css`, but **"later wins" is per property, not per rule.** Where
+`site.css` declares something the controller's rule does not, the website's value survives inside
+the shell. Diffing the two files' declaration sets per selector found **exactly six** such
+declarations:
+
+| Selector | Leaking | Effect |
+|---|---|---|
+| `.nav-links` | `display: flex`, `gap: 32px` | the sidebar menu rendered as a **horizontal row** spilling across the content column |
+| `.lang-globe-menu` | `top`, `right` | fought the controller's `bottom`/`left`, so the globe opened the wrong way |
+| `.page-header` | `padding`, `text-align` | the website's centred subpage header fought the controller's left-aligned flex row |
+
+Reset in `site.css` (the website's own file), so `shell.css` stays a verbatim copy. Only the first
+was visible on the page; the other four were found by diffing, not by looking.
+
+## Measured on the deployed page
+
+| | current live `/` | `/preview/` | **`/preview/m3/`** |
+|---|---:|---:|---:|
+| Requests, first load | 13 | 12 | **21** |
+| Weight, first load | 308 KB | 270 KB | **285 KB** |
+| HTML document | 35 KB | 26 KB | **24 KB** |
+| Height, 1440 px | 10 967 px | 6 385 px | **4 181 px** |
+| Height, 390 px | 19 913 px | 10 145 px | **7 530 px** |
+| Third-party hosts | 0 | 0 | **0** |
+| Horizontal overflow at 390 px | none | none | **none** |
+
+The extra requests are `shell.css` and the four app logos in the hero window. The page is still
+lighter than today's live home page and **less than half its height**.
+
+**Contrast: no failures.** Everything measured with translucent ancestors composited. Two rules
+copied from the controller did fail at first and were fixed:
+
+- `.btn-primary` 4.01:1 (white on `--blue`, 13.6px/600) — **R-930 arriving a second time by another
+ route.** Fixing `.cta-button` on the website did not fix the *controller's* button, and the shell
+ imports it. Same remedy the operator chose for R-930: 1.2rem/700 puts it in WCAG's large-text
+ band, where 3:1 applies and 4.01 clears, without touching `--blue`.
+- `.nav-group-label` 3.14:1 — moved to `--text-2`.
+
+The sidebar's own call to action is an **outline** button, not a filled one: blue on transparent
+measures 6.12:1, and a 19.2px filled button does not fit a 240 px sidebar without wrapping. Measured
+both ways. **The controller has both defects on its own surface** — filed, not fixed (read-only).
+
+**Phone:** top bar and burger appear below 768 px, the drawer opens and closes, the backdrop shows,
+`body.nav-open` is set, Escape closes it and returns focus to the burger. Focus-visible and
+reduced-motion rules both present.
+
+> **A measurement trap worth recording.** In a background tab, Chrome freezes CSS transitions *and*
+> `requestAnimationFrame`. The drawer read as permanently shut — `is-open` applied, the right rule
+> matching with the right specificity, and the transform stuck at `translateX(-100%)` — and even an
+> inline `transform: none` would not move it. Nothing was wrong with the page. Setting
+> `transition: none` before measuring showed the real end state: closed at −280, open at 0. A
+> `requestAnimationFrame` await in the same probe froze the whole call for 45 s.
+
+## Four changes from the operator's mockup, each with its reason
+
+1. **The active item follows the page.** The mockups show „Indítópult" active on every page.
+2. **„Jelentkezem tesztelőnek" is also a button** at the top of the lower group. It is the one action
+ we want, and the mockup buries it at the bottom of a list.
+3. **The „Alkalmazások" categories are anchors on `/alkalmazasok`** — real URLs, no JS-only state, so
+ they work with JavaScript off and a crawler can follow them.
+4. **GYIK was added.** It is in today's nav, and dropping it silently would take a page out of
+ navigation. That is not a change a restyle gets to make.
+
+## The home page
+
+Six sections, the controller's page header and cards, left-aligned headers. Content is `/preview/`'s
+cleaned text, so no new claim and no em dash. `
`, meta description, canonical and hreflang are
+**already the final values**, so the switch in Part D needs no head edit. The compact „who is behind
+it" row sits by the closing button, as before.
+
+`body` carries `shell page-index`, which reuses the existing `.page-index` content rules (`caps`,
+`flow`, `vs`, `band`, `who-mini`) rather than duplicating them.
+
+## Still to do after STOP 1
+
+Every other Hungarian page, then the English twins (Part C), then the whole-site switch on „go"
+(Part D). Nothing goes live before that.
diff --git a/documentation/audits/m3-2026-10-11/shots/m3-1440-home.png b/documentation/audits/m3-2026-10-11/shots/m3-1440-home.png
new file mode 100644
index 00000000..be8c6157
Binary files /dev/null and b/documentation/audits/m3-2026-10-11/shots/m3-1440-home.png differ
diff --git a/documentation/audits/m3-2026-10-11/shots/m3-390-home.png b/documentation/audits/m3-2026-10-11/shots/m3-390-home.png
new file mode 100644
index 00000000..737af626
Binary files /dev/null and b/documentation/audits/m3-2026-10-11/shots/m3-390-home.png differ
diff --git a/documentation/audits/m3-2026-10-11/shots/preview-1440-home.png b/documentation/audits/m3-2026-10-11/shots/preview-1440-home.png
new file mode 100644
index 00000000..4f26e2e3
Binary files /dev/null and b/documentation/audits/m3-2026-10-11/shots/preview-1440-home.png differ
diff --git a/documentation/audits/m3-2026-10-11/shots/preview-390-home.png b/documentation/audits/m3-2026-10-11/shots/preview-390-home.png
new file mode 100644
index 00000000..fc9f0844
Binary files /dev/null and b/documentation/audits/m3-2026-10-11/shots/preview-390-home.png differ