diff --git a/BUILD-NOTES.md b/BUILD-NOTES.md
index b36da68..9ae6443 100644
--- a/BUILD-NOTES.md
+++ b/BUILD-NOTES.md
@@ -807,3 +807,74 @@ three new important-style diagnostics. The three local note-margin overrides pre
base/tablet/mobile caution spacing, including the existing inline Verify note margin. They are
inventoried rather than suppressed or “fixed” by changing approved CSS. No global configuration,
runtime, schema, billing, dependencies, sandbox or launch settings change.
+
+## Accepted final editorial templates — Astra integration
+
+Adopts the accepted Astra Daily Digest newspaper, Interview Notes quote spread, Case Study evidence
+ledger and Launch Announcement dark/light poster. The immutable original batch is
+`aa-template-revamp-1788686289312/batch-01-editorial/`; rejected inherited-Sol material is not adopted.
+The first fifteen redesigned templates remain unchanged. This is a separate final integration PR,
+not deployment authorization; all nineteen are only live after the later reviewed rollout.
+
+Daily and Interview are exact accepted source files. Case adds one first-line, file-local
+`noRedundantRoles` compatibility directive. Launch adds one **element-local** `useSemanticElements`
+directive immediately before its existing named CODE region. Nothing else in any template changes:
+CSS, titles, body elements, roles, scopes, IDs, links, SVG, meters and command descendants are exact.
+Canonical SHA-256:
+- Daily: `500f1619164f01ec4aa19a6c1e00277696b50cf3a711463800b22f128a010129`
+- Interview: `146ebab1a80f985196bf788ad5d7ab4fc564dec5c72ec0c4f7b9df154a2a9691`
+- Case: `bda5f8984424f791f6707dc0565c198a6607fcd98f41d851eaed001e2151b007`
+- Launch: `c50f7b44e6e2193126e085fa2b3d3b89266d5dfbb5760dd11633de51fd26fa19`
+
+Case's explicit inventory is one table, seven rows, four columnheaders and twenty-one cells. Four
+native `th scope="col"` headers continue to associate by column with five complete value/meter rows;
+the footer cell spans four columns. The exception is bounded by regression assertions, not permission
+for future unrelated roles. [MDN's display accessibility note](https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/display#tables)
+warns that changing table display can affect accessibility in some browsers. Launch preserves its
+one named CODE scrolling region and native Chromium keyboard behavior. No other rule suppression or
+global configuration change is authorized. Eight paired sandbox PNGs/accessibility trees and native
+relationships match the accepted candidates; Chromium evidence does not certify Safari/Firefox or
+screen-reader navigation.
+
+Original content parity accounts for307 text nodes,303 retained after four already-approved decorative
+quote-mark removals in Interview, and170 numeric occurrences. All substantive text and keyed story,
+quote, ledger, feature and availability records remain; code/SVG/meter/link data are exact. No factual
+correction is invented for Case's existing baseline-period wording. Integration adds no content delta.
+Canonical thumbnails use the unchanged generator: Daily1600, Interview1440, Case1280, Launch1440.
+Descriptions name the actual compositions; no other PNG or catalog contract changes.
+
+### Explicitly approved viewer runtime exception
+
+The required twelve-story Daily fixture exposed the existing12000px auto-height ceiling through the
+real locally published artifact viewer, reporter and opaque sandbox. At390px it measures11456px
+closed and12316px with the six-item archive open; at320px,13757px and14745px. Previously the outer frame
+stopped at12000px (all content remained reachable through nested scrolling). The template is not
+shortened or redesigned to conceal this runtime limit.
+
+Only `src/ui/client/viewer.js` changes: `FRAME_MAX_HEIGHT`12000→32768 and its explanatory comment,
+retiring obsolete approximately3000px template-budget advice. Exact approved source SHA-256:
+`43142918625f52d55ac08c0659dcc3eb05e286cf4637199636ac33e391bc1cd4`. This is a bounded operating choice
+with headroom above the14745px fixture, **not** a universal maximum, future-proof promise or browser
+resource-safety proof; the previous test's permissive40000 upper bound is not its justification.
+Matched sender, message type, finite/positive checks, rounding,48px floor and nested-scroll fallback
+remain unchanged. No reporter, CSP, origin, sandbox permissions, dependencies or external assets change.
+
+Regression tests use the actual built repository asset, never a substituted green candidate. The
+Daily open/close test fails before at320/390 and passes afterward, with all twelve stories, six archive
+entries, reachable footer and stable closed/open/closed sizes. The unit test now asserts32768 exactly.
+Existing nine guard controls remain; added at/just-above boundary and real65536px synthetic content
+prove clamping plus usable keyboard/nested scrolling. Ordinary80→160→24px content tests resizing and
+the48px floor. A separate fresh two-origin cloud-mode proof checks byte-exact served viewer asset,
+real published fixture source, both phone widths and settled message counts. No production fixtures.
+
+Lint:34 errors→0 via only the two comments.41warnings comprise40 exact prior warnings and one Case
+mobile `.l-chg display:grid!important` override that preserves the selected grid against generic cell
+`display:block`. It is inventoried, not rewritten merely to quiet warnings. New unit assertions cover
+the two bounded exceptions; browser tests protect native associations, exact data-meter rows, Launch
+keyboard scrolling and the real viewer. Existing tests/frameworks are extended, not replaced.
+
+[Final integrated review](https://anacreon.ai/downloads/aa-template-revamp-1788686289312/integrated-batch01/final/index.html)
+separates fresh final checks, applied-asset viewer proof and final sandbox checks from reused,
+unchanged-source16main/48boundary/no-JS/growth/contrast/fallback evidence. Private fixture databases,
+authentication, logs and backup material are excluded. No analytics, customer/financial data,
+launch, billing, schema, infrastructure or unrelated runtime behavior changes.
diff --git a/public/assets/template-thumbs/case-study.png b/public/assets/template-thumbs/case-study.png
index 5887a14..4cdfa4b 100644
Binary files a/public/assets/template-thumbs/case-study.png and b/public/assets/template-thumbs/case-study.png differ
diff --git a/public/assets/template-thumbs/daily-digest.png b/public/assets/template-thumbs/daily-digest.png
index 345ac96..8fb2b1e 100644
Binary files a/public/assets/template-thumbs/daily-digest.png and b/public/assets/template-thumbs/daily-digest.png differ
diff --git a/public/assets/template-thumbs/interview-notes.png b/public/assets/template-thumbs/interview-notes.png
index 19d7a82..a17ff4d 100644
Binary files a/public/assets/template-thumbs/interview-notes.png and b/public/assets/template-thumbs/interview-notes.png differ
diff --git a/public/assets/template-thumbs/launch-announcement.png b/public/assets/template-thumbs/launch-announcement.png
index 85f9b34..779558b 100644
Binary files a/public/assets/template-thumbs/launch-announcement.png and b/public/assets/template-thumbs/launch-announcement.png differ
diff --git a/src/ui/client/viewer.js b/src/ui/client/viewer.js
index 61c311b..b6955c0 100644
--- a/src/ui/client/viewer.js
+++ b/src/ui/client/viewer.js
@@ -43,18 +43,13 @@ const FRAME_MIN_HEIGHT = 48;
* on ordinary product output is not a circuit breaker, it is a layout constraint wearing one's
* clothes.
*
- * 12000 is chosen to sit far above real documents and far below anything that hurts: a 12000px
- * iframe is an ordinary long page to lay out and paint, because painting is viewport-bound and
- * scrolls are virtualised, while the runaway cases this guards against are orders of magnitude
- * past it. Our own templates carry a tighter design budget of ~3000px, which is a rule about
- * making good pages and is enforced by nobody but the person writing one.
- *
- * Above the cap the old behaviour is exactly what should happen, and it is now the rare case
- * rather than the normal one: the frame is clamped to 12000px and the document scrolls inside it.
- * Nothing is hidden and nothing is truncated — the reader scrolls the frame instead of the page for
- * the remainder. That degradation is deliberate; the alternative is trusting an unbounded number.
+ * 32768 preserves auto-height for the approved long Daily fixture, including its archive
+ * (14745px at320px wide), while retaining a finite circuit breaker against runaway reports.
+ * This is not a template design budget: content may grow naturally, without font reductions,
+ * hidden stories or a prose-height target. Larger reports retain the existing nested-scroll
+ * fallback rather than asking the browser to lay out an unbounded number.
*/
-const FRAME_MAX_HEIGHT = 12_000;
+const FRAME_MAX_HEIGHT = 32_768;
let contentHash = boot.initialContent?.content_hash || null;
let contentRequestInFlight = false;
let stopped = false;
diff --git a/templates/case-study.html b/templates/case-study.html
index b630bd4..5c20481 100644
--- a/templates/case-study.html
+++ b/templates/case-study.html
@@ -1,156 +1,23 @@
+
-
-
+
+
Northwind Freight cut invoice disputes by 71% in one quarter
-
-
+
-
- Case study · Freight & logistics
+ Case study · Freight & logistics
+