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/templates/case-study.html b/templates/case-study.html
index b630bd4..480df56 100644
--- a/templates/case-study.html
+++ b/templates/case-study.html
@@ -1,156 +1,22 @@
 <!doctype html>
 <html lang="en">
 <head>
-<meta charset="utf-8" />
-<meta name="viewport" content="width=device-width, initial-scale=1" />
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
 <title>Northwind Freight cut invoice disputes by 71% in one quarter</title>
-<!--
-  Agent Artifacts template · research / case-study
-  VOICE  editorial serif (ui-serif, Charter, Iowan Old Style, Georgia); mono for labels and figures
-  SCHEME warm paper #f0eae0 · rust accent #a8452a · petrol data hue #2c5670
+<!-- Astra independent redesign from frozen baseline. System fonts; no external dependencies. Rewriting: remove empty sections; never collapse previously visible content or execute sample commands. Voice and provenance: see notes.md. --><style>* ,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;color-scheme:light}body{margin:0;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,p,dl,dd,figure,blockquote{margin:0}h1,h2,h3{line-height:1.15}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-underline-offset:.22em}a:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid currentColor;outline-offset:4px}p,li,dd,h1,h2,h3,figcaption{overflow-wrap:anywhere}section,article,figure,nav,aside,main,header,footer{min-width:0}b,strong{font-weight:700}cite{font-style:normal}
+:root{--paper:#f8f4ec;--ink:#292723;--muted:#635b50;--line:#c7beb0;--rust:#90472d;--tint:#eee4d6;--data:#2c5670;--track:#d6cec1;--sans:"Helvetica Neue",Helvetica,Arial,"Liberation Sans",sans-serif;--serif:Georgia,"Times New Roman",serif}body{background:var(--paper);color:var(--ink);font-family:var(--serif);font-size:17px;line-height:1.65}.wrap{max-width:1312px;margin:auto;padding:40px 40px 48px}.lab{font:700 12px/1.5 var(--sans);text-transform:uppercase;letter-spacing:.1em}.eyebrow{display:block;color:var(--rust);margin-bottom:18px}.spread{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.1fr);gap:48px;border-top:5px solid var(--ink);padding-top:24px}.ttl{font-family:var(--sans);font-size:clamp(32px,3.5vw,48px);line-height:1.03;letter-spacing:-.045em}.hero{margin-top:28px}.hero__fig{font:700 clamp(74px,9vw,122px)/.95 var(--sans);letter-spacing:-.06em;color:var(--rust)}.hero__cap{margin-top:15px;max-width:43ch;font-size:17px;line-height:1.6}.facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 22px;margin-top:25px;font:14px/1.5 var(--sans)}.facts div{border-top:1px solid var(--line);padding-top:9px}.facts dt{color:var(--muted)}.facts dd{font-weight:700;margin-top:3px}.evidence{min-width:0}.ledger{width:100%;table-layout:fixed;border-collapse:collapse;font:16px/1.5 var(--sans);text-align:left}.ledger caption{text-align:left;font-size:13px;line-height:1.6;font-weight:700;text-transform:uppercase;letter-spacing:.03em;padding-bottom:20px;color:var(--muted)}.ledger th{font-size:12px;font-weight:700;padding:0 8px 10px 0;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.ledger th:first-child{width:39%}.ledger th:last-child{width:20%}.ledger td{padding:16px 10px 16px 0;border-top:1px solid var(--line);vertical-align:top;overflow-wrap:anywhere}.ledger td:last-child{padding-right:0}.l-what{font-weight:600}.l-before{color:var(--muted);font-variant-numeric:tabular-nums}.l-after{font-weight:700;font-variant-numeric:tabular-nums}.l-chg b{font-size:16px;color:var(--data)}.meter{display:grid;height:7px;margin-top:10px;background:var(--track);border-radius:4px;overflow:hidden}.meter i{display:block;background:var(--data);border-radius:4px}.ledger tfoot td{font-size:16px;line-height:1.6;color:var(--muted);padding-top:18px;border-top:2px solid var(--ink)}.pq{display:grid;grid-template-columns:minmax(0,1fr) 230px;gap:40px;align-items:end;margin-top:34px;border-block:1px solid var(--ink);padding-block:28px}.pq blockquote{font-size:clamp(24px,2.4vw,32px);line-height:1.5;letter-spacing:-.02em;max-width:49ch}.pq figcaption,.kicker figcaption{font:16px/1.6 var(--sans);color:var(--muted)}.two{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:48px;margin-top:36px}.h-sec{border-bottom:1px solid var(--line);padding-bottom:12px;color:var(--rust)}.body{margin-top:20px;max-width:64ch}.body p+p{margin-top:16px}.body h3{font:700 24px/1.2 var(--sans);letter-spacing:-.02em;margin:28px 0 14px}.rail{min-width:0}.snag{background:var(--tint);padding:26px}.snag h2{color:var(--rust);padding-bottom:14px;border-bottom:1px solid var(--line)}.snag p{margin-top:18px;font-size:17px;line-height:1.65}.kicker{padding:24px 0;border-bottom:1px solid var(--line);margin-top:10px}.kicker blockquote{font-size:24px;line-height:1.5}.kicker figcaption{margin-top:18px}.sec{margin-top:36px}.next{margin-top:18px;list-style:disc;padding-left:22px;color:var(--muted)}.next li+li{margin-top:14px}.next strong{color:var(--ink)}.colophon{font:16px/1.6 var(--sans);color:var(--muted);border-top:2px solid var(--ink);padding-top:24px;margin-top:36px}
+@media(max-width:1024px){.spread{grid-template-columns:1fr;gap:30px}.spread header{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:25px 40px}.ttl{font-size:42px}.hero{margin:0}.facts{grid-column:1/-1;grid-template-columns:repeat(4,minmax(0,1fr));margin:0}.pq{grid-template-columns:minmax(0,1fr);gap:20px}.two{gap:30px}}
+@media(max-width:680px){.wrap{padding:24px 18px 32px}.spread header{display:block}.ttl{font-size:36px;max-width:24ch}.hero{margin-top:25px}.hero__fig{font-size:96px}.facts{margin-top:24px;grid-template-columns:repeat(2,minmax(0,1fr));font-size:16px}.ledger,.ledger caption,.ledger tbody,.ledger tfoot{display:block;width:100%}.ledger thead{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}.ledger caption{font-size:13px;padding-bottom:14px}.ledger tbody tr{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:9px 20px;border-top:1px solid var(--line);padding:18px 0}.ledger td{display:block;padding:0;border:0;min-width:0}.l-what{grid-column:1/-1;font-size:18px}.l-before::before,.l-after::before,.l-chg::before{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.08em;font-weight:400;color:var(--muted);margin-bottom:3px}.l-before::before{content:"Before"}.l-after::before{content:"After"}.l-chg{grid-column:1/-1;display:grid!important;grid-template-columns:1fr auto;align-items:center;gap:0 20px}.l-chg::before{content:"Change"}.l-chg .meter{grid-column:1/-1;margin-top:8px}.ledger tfoot tr{display:block}.ledger tfoot td{padding-top:18px}.two{display:block}.rail{margin-top:28px}.snag{padding:24px 20px}.pq{margin-top:28px;padding-block:24px}.pq blockquote{font-size:27px}.body,.snag p,.next{font-size:17px;line-height:1.65}.sec{margin-top:30px}}
 
-  REWRITING THIS ARTIFACT
-  · The hero figure is ONE number — the outcome the customer would repeat out loud.
-    Say what it is measured against right under it, or it is a poster, not evidence.
-  · The ledger is the spine: the same metrics before and after, from the customer's own
-    system. Never invent a row you cannot source.
-  · Keep one honest paragraph about what went wrong or what it cost. A case study with
-    no friction in it reads as marketing and nobody believes the rest.
-  · DELETE, don't empty. One quote instead of two? Remove the second. No ledger?
-    Remove it. Never a heading with nothing under it.
-  · Never pin the root to the viewport height, and never give html or body a
-    percentage height; no fixed or sticky positioning. The host frame measures this
-    document and does not scroll.
-  · Nothing external: no web fonts, images, scripts or stylesheets.
--->
-<style>
-*,*::before,*::after{box-sizing:border-box}
-html{-webkit-text-size-adjust:100%}
-:root{
---bg:#f0eae0;--paper:#fffdf9;--ink:#231e1a;--muted:#5b5249;--subtle:#72685f;
---line:#e2d9cc;--line2:#cfc3b3;--rust:#a8452a;--rust-soft:#fbf0e9;--rust-line:#e8c6b5;
---data:#2c5670;--track:#ddd5c8;
---serif:ui-serif,Charter,"Bitstream Charter","Iowan Old Style",Georgia,serif;
---mono:ui-monospace,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
---s1:.25rem;--s2:.5rem;--s3:.75rem;--s4:1rem;--s5:1.5rem;--s6:2rem;--s7:2.75rem;--s8:4rem}
-body{margin:0;padding:var(--s7) var(--s5) var(--s8);background:var(--bg);color:var(--ink);
-font-family:var(--serif);font-size:1.0625rem;line-height:1.58;-webkit-font-smoothing:antialiased}
-h1,h2,h3{margin:0;line-height:1.2;letter-spacing:-.012em;font-weight:600}
-p{margin:0}ul,ol{margin:0;padding:0;list-style:none}
-.wrap{max-width:62rem;margin-inline:auto}
-.lab,.ledger caption{font-family:var(--mono);font-size:.6875rem;font-weight:600;letter-spacing:.12em;
-text-transform:uppercase}
-.h-sec{padding-bottom:var(--s2);border-bottom:1px solid var(--line2);color:var(--subtle)}
-
-/* MASTHEAD — a display figure is the hero. Nothing else on the page is this size. */
-.eyebrow{color:var(--rust)}
-.ttl{max-width:22ch;margin-top:var(--s3);font-size:clamp(1.75rem,4.2vw,2.625rem);
-letter-spacing:-.022em;line-height:1.13}
-.hero{display:grid;grid-template-columns:minmax(0,auto) minmax(0,1fr);gap:var(--s3) var(--s5);
-align-items:center;margin-top:var(--s5);padding:var(--s5) 0;
-border-top:2px solid var(--ink);border-bottom:1px solid var(--line2)}
-.hero__fig{color:var(--rust);font-family:var(--mono);font-size:clamp(3.5rem,11vw,5.5rem);
-font-weight:700;letter-spacing:-.045em;line-height:.88;font-variant-numeric:tabular-nums}
-.hero__cap{max-width:34ch;color:var(--muted);font-size:1.0625rem;line-height:1.42}
-.hero__cap b{color:var(--ink);font-weight:600}
-.facts{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s5);margin:var(--s4) 0 0;
-color:var(--muted);font-size:.8125rem}
-.facts div{display:flex;gap:.4em}
-.facts dt{color:var(--subtle)}
-.facts dd{margin:0;color:var(--ink);font-weight:600}
-
-/* PULL QUOTE — second-largest thing on the page */
-.pq{margin:var(--s6) 0 0;padding-left:var(--s5);border-left:3px solid var(--rust)}
-.pq blockquote{margin:0;max-width:40ch;font-size:clamp(1.25rem,2.6vw,1.75rem);line-height:1.32;
-letter-spacing:-.014em}
-.pq figcaption{margin-top:var(--s3);color:var(--subtle);font-size:.875rem}
-.pq figcaption b{color:var(--ink);font-weight:600}
-
-/* LEDGER — the before/after spine */
-.ledger{width:100%;margin-top:var(--s4);border-collapse:collapse;text-align:left;font-size:.9375rem}
-.ledger caption{text-align:left;padding-bottom:var(--s2);margin-bottom:var(--s3);
-border-bottom:1px solid var(--line2);color:var(--subtle)}
-.ledger th{padding:0 var(--s4) var(--s2) 0;color:var(--subtle);font-family:var(--mono);
-font-size:.6875rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase}
-.ledger td{padding:var(--s3) var(--s4) var(--s3) 0;border-top:1px solid var(--line);
-vertical-align:baseline}
-.l-what{color:var(--ink);width:38%}
-.l-before{color:var(--muted);font-family:var(--mono);font-size:.875rem;
-font-variant-numeric:tabular-nums;white-space:nowrap}
-.l-after{color:var(--ink);font-family:var(--mono);font-size:1rem;font-weight:600;
-font-variant-numeric:tabular-nums;white-space:nowrap}
-.l-chg{width:26%;min-width:7rem}
-.l-chg b{display:block;color:var(--data);font-family:var(--mono);font-size:.8125rem;font-weight:600;
-font-variant-numeric:tabular-nums}
-.meter{display:grid;height:.375rem;margin-top:.35rem;border-radius:99px;background:var(--track);
-overflow:hidden}
-.meter i{border-radius:99px;background:var(--data)}
-.ledger tfoot td{border-top:1px solid var(--line2);color:var(--subtle);font-size:.8125rem;
-line-height:1.45}
-
-/* NARRATIVE */
-.sec{margin-top:var(--s6)}
-.body{max-width:64ch;margin-top:var(--s4)}
-.body p+p{margin-top:var(--s3)}
-.body h3{margin-top:var(--s5);font-size:1.0625rem}
-.body h3:first-child{margin-top:0}
-.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(18rem,100%),1fr));gap:var(--s6);
-margin-top:var(--s6)}
-.snag{padding:var(--s5);border:1px solid var(--rust-line);border-radius:.75rem;
-background:var(--rust-soft)}
-.snag h2{color:var(--rust)}
-.snag>p{margin-top:var(--s3);font-size:1em;line-height:1.5}
-.next{margin-top:var(--s4)}
-.next li{position:relative;padding-left:var(--s5);color:var(--muted);font-size:.9375rem;line-height:1.45}
-.next li+li{margin-top:var(--s2)}
-.next li::before{content:"";position:absolute;top:.58rem;left:var(--s2);width:.3125rem;height:.3125rem;
-border-radius:99px;background:var(--rust)}
-.next strong{color:var(--ink);font-weight:600}
-.rail{display:grid;align-content:start;gap:var(--s5)}
-.kicker{margin:0;padding:var(--s5);border:1px solid var(--line2);border-radius:.75rem;
-background:var(--paper)}
-.kicker blockquote{margin:0;max-width:52ch;font-size:1.1875rem;line-height:1.38}
-.kicker figcaption{margin-top:var(--s2);color:var(--subtle);font-size:.8125rem}
-.kicker figcaption b{color:var(--ink);font-weight:600}
-.colophon{margin-top:var(--s5);padding-top:var(--s3);border-top:1px solid var(--line);
-color:var(--subtle);font-size:.8125rem;line-height:1.5}
-
-@media (max-width:44rem){
-/* ledger -> card. caption MUST be re-declared: an anonymous table box collapses it. */
-.ledger,.ledger caption,.ledger tbody,.ledger tfoot,.ledger tr,.ledger td{display:block}
-.ledger thead{display:none}
-.ledger caption{margin-bottom:0}
-.ledger tbody tr{display:grid;grid-template-columns:auto auto 1fr;align-items:baseline;
-gap:.1rem var(--s2);padding:var(--s3) 0;border-top:1px solid var(--line)}
-.ledger td{padding:0;border-top:0;width:auto}
-.l-what{grid-column:1/-1;grid-row:1}
-.l-before{grid-column:1;grid-row:2;margin-top:.2rem}
-.l-before::after{content:"→";margin-left:.45em;color:var(--line2)}
-.l-after{grid-column:2;grid-row:2;margin-top:.2rem}
-.l-chg{grid-column:3;grid-row:2;min-width:0;margin-top:.2rem;justify-self:end;text-align:right}
-.l-chg .meter{display:none}
-.ledger tfoot td{padding-top:var(--s3);border-top:1px solid var(--line2)}
-}
-@media (max-width:34rem){
-:root{--s5:1.125rem;--s6:1.5rem;--s7:1.625rem;--s8:2rem}
-body{padding:var(--s5) var(--s4) var(--s8);font-size:.9375rem;line-height:1.5}
-.ttl{line-height:1.1}
-.hero{grid-template-columns:minmax(0,1fr);gap:var(--s2);padding:var(--s4) 0}
-.hero__cap{font-size:1rem}
-.pq{padding-left:var(--s4)}
-.snag{padding:var(--s4)}
-.kicker{padding:var(--s4)}
-.kicker blockquote{font-size:1.0625rem}
-.two{gap:var(--s5)}
-.body p,.next li,.snag>p{line-height:1.45}
-}
+.exclusions{font:16px/1.6 var(--sans);border-top:1px solid var(--line);padding-top:14px;margin-top:14px;color:var(--muted)}
 </style>
 </head>
 <body>
-<div class="wrap">
+<main class="wrap">
 
-  <header>
-    <span class="lab eyebrow">Case study · Freight &amp; logistics</span>
+  <span class="lab eyebrow">Case study · Freight &amp; logistics</span>
+    <div class="spread"><header>
     <h1 class="ttl">Northwind Freight cut invoice disputes by 71% in one quarter</h1>
     <div class="hero">
       <p class="hero__fig">71%</p>
@@ -165,39 +31,40 @@ body{padding:var(--s5) var(--s4) var(--s8);font-size:.9375rem;line-height:1.5}
     </dl>
   </header>
 
-  <figure class="pq">
-    <blockquote>“We never had a disputes problem. We had a problem where nobody could see the weight
-      ticket and the invoice at the same time.”</blockquote>
-    <figcaption><b>Priya Raman</b>, VP Finance, Northwind Freight</figcaption>
-  </figure>
-
-  <section class="sec" aria-labelledby="ld">
-    <table class="ledger">
+  <section class="evidence" aria-labelledby="ld">
+    <table class="ledger" role="table">
       <caption id="ld">Before and after · Q2 2025 baseline vs Q2 2026</caption>
-      <thead><tr><th scope="col">Metric</th><th scope="col">Before</th><th scope="col">After</th>
-        <th scope="col">Change</th></tr></thead>
+      <thead><tr role="row"><th scope="col" role="columnheader">Metric</th><th scope="col" role="columnheader">Before</th><th scope="col" role="columnheader">After</th>
+        <th scope="col" role="columnheader">Change</th></tr></thead>
       <tbody>
-        <tr><td class="l-what">Invoices disputed</td><td class="l-before">19.4%</td>
-          <td class="l-after">5.6%</td>
-          <td class="l-chg"><b>−71%</b><span class="meter"><i style="width:29%"></i></span></td></tr>
-        <tr><td class="l-what">Clerk hours spent on disputes</td><td class="l-before">854 / mo</td>
-          <td class="l-after">179 / mo</td>
-          <td class="l-chg"><b>−79%</b><span class="meter"><i style="width:21%"></i></span></td></tr>
-        <tr><td class="l-what">Days sales outstanding</td><td class="l-before">61 days</td>
-          <td class="l-after">43 days</td>
-          <td class="l-chg"><b>−30%</b><span class="meter"><i style="width:70%"></i></span></td></tr>
-        <tr><td class="l-what">Time to resolve one dispute</td><td class="l-before">22 min</td>
-          <td class="l-after">16 min</td>
-          <td class="l-chg"><b>−27%</b><span class="meter"><i style="width:73%"></i></span></td></tr>
-        <tr><td class="l-what">Unrecovered accessorial write-offs</td><td class="l-before">$310K / yr</td>
-          <td class="l-after">$88K / yr</td>
-          <td class="l-chg"><b>−72%</b><span class="meter"><i style="width:28%"></i></span></td></tr>
+        <tr role="row"><td class="l-what" role="cell">Invoices disputed</td><td class="l-before" role="cell">19.4%</td>
+          <td class="l-after" role="cell">5.6%</td>
+          <td class="l-chg" role="cell"><b>−71%</b><span class="meter" aria-hidden="true"><i style="width:29%"></i></span></td></tr>
+        <tr role="row"><td class="l-what" role="cell">Clerk hours spent on disputes</td><td class="l-before" role="cell">854 / mo</td>
+          <td class="l-after" role="cell">179 / mo</td>
+          <td class="l-chg" role="cell"><b>−79%</b><span class="meter" aria-hidden="true"><i style="width:21%"></i></span></td></tr>
+        <tr role="row"><td class="l-what" role="cell">Days sales outstanding</td><td class="l-before" role="cell">61 days</td>
+          <td class="l-after" role="cell">43 days</td>
+          <td class="l-chg" role="cell"><b>−30%</b><span class="meter" aria-hidden="true"><i style="width:70%"></i></span></td></tr>
+        <tr role="row"><td class="l-what" role="cell">Time to resolve one dispute</td><td class="l-before" role="cell">22 min</td>
+          <td class="l-after" role="cell">16 min</td>
+          <td class="l-chg" role="cell"><b>−27%</b><span class="meter" aria-hidden="true"><i style="width:73%"></i></span></td></tr>
+        <tr role="row"><td class="l-what" role="cell">Unrecovered accessorial write-offs</td><td class="l-before" role="cell">$310K / yr</td>
+          <td class="l-after" role="cell">$88K / yr</td>
+          <td class="l-chg" role="cell"><b>−72%</b><span class="meter" aria-hidden="true"><i style="width:28%"></i></span></td></tr>
       </tbody>
-      <tfoot><tr><td colspan="4">Bars show the after figure as a share of the before figure —
+      <tfoot><tr role="row"><td colspan="4" role="cell">Bars show the after figure as a share of the before figure —
         shorter is better. Every row is pulled from Northwind's TMS and billing ledger, not from
         our own telemetry.</td></tr></tfoot>
     </table>
-  </section>
+  <p class="exclusions">Two branches still run a manual accessorial log and are excluded from the figures.</p>
+    </section>
+
+  </div><figure class="pq">
+    <blockquote>“We never had a disputes problem. We had a problem where nobody could see the weight
+      ticket and the invoice at the same time.”</blockquote>
+    <figcaption><b>Priya Raman</b>, VP Finance, Northwind Freight</figcaption>
+  </figure>
 
   <div class="two">
     <section aria-labelledby="st">
@@ -228,8 +95,7 @@ body{padding:var(--s5) var(--s4) var(--s8);font-size:.9375rem;line-height:1.5}
       <p>The first fortnight was bad. The hold threshold shipped at $10, which held <b>31% of all
         invoices</b> and made the queue worse than the disputes had been. Raising it to $25 on
         23 March dropped holds to 7% and is the single change that made the numbers above possible.</p>
-      <p>Two branches still run a manual accessorial log and are excluded from the figures.</p>
-    </section>
+      </section>
     <figure class="kicker">
       <blockquote>“The first month I kept refreshing the dispute queue because I assumed it was
         broken.”</blockquote>
@@ -254,6 +120,6 @@ body{padding:var(--s5) var(--s4) var(--s8);font-size:.9375rem;line-height:1.5}
     2026; the comparison quarter is April–June 2026. Two of twenty-two branches are excluded.
     Published with permission.</footer>
 
-</div>
+</main>
 </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/templates/daily-digest.html b/templates/daily-digest.html
index 0e178b7..61e8785 100644
--- a/templates/daily-digest.html
+++ b/templates/daily-digest.html
@@ -1,145 +1,14 @@
 <!doctype html>
 <html lang="en">
 <head>
-<meta charset="utf-8" />
-<meta name="viewport" content="width=device-width, initial-scale=1" />
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
 <title>AI Engineering Daily — 3 September 2026</title>
-<!--
-  TEMPLATE: daily-digest  ·  CATEGORY: meetings
-  VOICE: humanist sans (system-ui stack)   SCHEME: cool grey-blue paper, teal accent
-  Rewriting this? Replace the content, keep the structure and the styling.
-  The TL;DR band is full-bleed with square edges on purpose. Inset, rounded and tinted is the
-  shape every CSS framework gives an alert, and it makes a considered summary look generated.
-  DELETE, DON'T EMPTY: no themes? remove that whole .rail__sec, heading included.
-  Nothing collapsed? remove the <details>. Never leave a heading with nothing under it.
-  MANY ITEMS: feature at most six; put the rest in the collapsed "also reviewed" list and
-  say how many there were. A digest of three items should be a short page, not a padded one.
--->
-<style>
-:root{
-  --bg:#eef1f5; --card:#fff; --tint:#f7f9fb;
-  --ink:#18242f; --muted:#4c5b69; --subtle:#5c6a78;
-  --line:#e2e7ec; --line-2:#cbd4dd;
-  --teal:#0d6a68; --teal-soft:#e2efee;
-  --sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
-  --shadow:0 1px 2px rgb(24 36 47/.04),0 12px 32px -16px rgb(24 36 47/.28);
-}
-*,*::before,*::after{box-sizing:border-box}
-html{-webkit-text-size-adjust:100%}
-body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
-h1,h2,h3{margin:0;line-height:1.2;letter-spacing:-.015em}
-p,dl,dd{margin:0}
-ul,ol{margin:0;padding:0;list-style:none}
-a{color:var(--teal)}
-.page{max-width:70rem;margin-inline:auto;padding:2.5rem 1.5rem 3rem}
-
-/* masthead */
-.eyebrow{display:inline-flex;align-items:center;gap:.5rem;color:var(--teal);font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
-.eyebrow::before{content:"";width:1.25rem;height:.1875rem;background:var(--teal)}
-.mast{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem 2rem;padding-bottom:1rem;border-bottom:2px solid var(--ink)}
-.mast h1{margin:.625rem 0 0;font-size:clamp(1.75rem,4vw,2.5rem);font-weight:700}
-.mast .lead{margin-top:.5rem;max-width:34rem;color:var(--muted);font-size:1rem}
-.mast>div{flex:1 1 26rem;min-width:0}
-.mast dl{flex:0 1 15rem;display:flex;flex-wrap:wrap;gap:.25rem .875rem;font-size:.8125rem;color:var(--subtle)}
-.mast dt{font-weight:600;color:var(--muted)}
-.mast dd{margin-inline:.25rem 0}
-
-/* two-column body */
-.wrap{display:grid;grid-template-columns:15rem minmax(0,1fr);gap:2.5rem;margin-top:1.75rem;align-items:start}
-.rail{background:var(--tint);border:1px solid var(--line);border-radius:.75rem;overflow:hidden}
-.rail__sec{padding:.875rem 1rem;border-top:1px solid var(--line);font-size:.8125rem}
-.rail__sec:first-child{border-top:0}
-.rail h2{color:var(--subtle);font-size:.6875rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;margin-bottom:.625rem}
-.toc li{display:grid;grid-template-columns:1.5rem minmax(0,1fr);gap:.625rem;padding-block:.5rem;border-top:1px solid var(--line-2)}
-.toc li:first-child{border-top:0;padding-top:0}
-.toc .n{color:var(--teal);font-size:.8125rem;font-weight:700;line-height:1.5;font-variant-numeric:tabular-nums}
-.toc a{display:block;color:var(--ink);font-size:.875rem;font-weight:600;line-height:1.3;text-decoration:none;min-height:2.75rem}
-.toc a:hover,.toc a:focus-visible{color:var(--teal)}
-.toc small{display:block;margin-top:.125rem;color:var(--subtle);font-size:.8125rem;font-weight:400}
-.rail__sec p{color:var(--muted)}
-.chips{display:flex;flex-wrap:wrap;gap:.375rem}
-.chips li{padding:.125rem .5rem;background:var(--card);border:1px solid var(--line-2);border-radius:999px;color:var(--muted);font-size:.8125rem;font-weight:600}
-.chips .hot{background:var(--teal-soft);border-color:#bcd9d7;color:var(--teal)}
-
-/* item cards */
-.stream{display:flex;flex-direction:column;gap:1.125rem}
-.item{padding:1.25rem;background:var(--card);border:1px solid var(--line);border-radius:.75rem;box-shadow:var(--shadow);scroll-margin-top:1rem}
-.item__top{display:grid;grid-template-columns:2rem minmax(0,1fr);gap:.875rem}
-.item__n{display:grid;place-items:center;width:2rem;height:2rem;border-radius:999px;background:var(--teal);color:#fff;font-size:.8125rem;font-weight:700;font-variant-numeric:tabular-nums}
-.item h3{font-size:1.1875rem;font-weight:700}
-.item__meta{margin-top:.25rem;color:var(--subtle);font-size:.8125rem}
-.item__meta b{color:var(--muted);font-weight:600}
-.item__meta span::before{content:"·";margin:0 .375rem;color:var(--line-2)}
-.tldr{margin:.875rem -1.25rem 0;padding:.6875rem 1.25rem;background:var(--teal-soft);border-block:1px solid #c6dcd9;color:#0b4f4d;font-size:.9375rem}
-.tldr b{font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--teal);margin-right:.5rem}
-.pts{margin-top:.875rem}
-.pts li{position:relative;padding-left:1.125rem;color:var(--muted);font-size:.9375rem}
-.pts li+li{margin-top:.375rem}
-.pts li::before{content:"";position:absolute;left:.25rem;top:.6875rem;width:.3125rem;height:.3125rem;border-radius:999px;background:var(--line-2)}
-.pts b{color:var(--ink);font-weight:650}
-.item__foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.625rem;margin-top:1rem;padding-top:.75rem;border-top:1px solid var(--line)}
-.verdict{color:var(--muted);font-size:.8125rem}
-.verdict b{color:var(--ink);font-weight:650}
-
-/* condensed tail */
-details{margin-top:.25rem;background:var(--card);border:1px solid var(--line);border-radius:.75rem}
-summary{padding:.875rem 1.25rem;cursor:pointer;color:var(--ink);font-size:.9375rem;font-weight:650;min-height:2.75rem;display:flex;align-items:center;gap:.5rem}
-summary{list-style:none}
-summary::-webkit-details-marker{display:none}
-summary::before{content:"";flex:none;width:.4375rem;height:.4375rem;margin-right:.25rem;border-right:2px solid var(--teal);border-bottom:2px solid var(--teal);transform:rotate(-45deg)}
-details[open] summary::before{transform:rotate(45deg)}
-summary:focus-visible{outline:2px solid var(--teal);outline-offset:-2px;border-radius:.75rem}
-summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
-.rest{padding:0 1.25rem 1rem}
-.rest li{padding-block:.625rem;border-top:1px solid var(--line);color:var(--muted);font-size:.875rem}
-.rest b{display:block;color:var(--ink);font-size:.9375rem;font-weight:650}
-.rest em{font-style:normal;color:var(--subtle);font-size:.8125rem}
-
-.colophon{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--line-2);color:var(--subtle);font-size:.8125rem}
-
-@media (max-width:60rem){
-  .wrap{grid-template-columns:minmax(0,1fr);gap:1.5rem}
-  .rail{display:grid;grid-template-columns:repeat(auto-fit,minmax(14rem,1fr))}
-  .rail__sec{border-top:0;border-left:1px solid var(--line)}
-  .rail__sec:first-child{border-left:0}
-}
-@media (max-width:34rem){
-  .page{padding:1.875rem 1rem 2rem}
-  .mast dl{flex:1 1 auto}
-  .rail{grid-template-columns:minmax(0,1fr)}
-  .rail__sec{border-left:0;border-top:1px solid var(--line)}
-  .rail__sec:first-child{border-top:0}
-  .toc small{display:none}
-  /* The 44px touch target is a MOBILE requirement, so it must not be relaxed here — an earlier
-     tightening pass set min-height:0 at exactly the width where the rule applies. Flex centres the
-     label inside the target rather than leaving it stranded at the top of a 44px box. */
-  .toc a{min-height:2.75rem;display:flex;align-items:center;padding-block:.25rem}
-
-  .item__top{grid-template-columns:1.75rem minmax(0,1fr);gap:.625rem}
-  .item__n{width:1.75rem;height:1.75rem;font-size:.75rem}
-  .item h3{font-size:1.0625rem}
-
-  .pts li+li{margin-top:.25rem}
-  .toc a{font-size:.8125rem}
-
-  .tldr{margin-inline:-.875rem;padding:.625rem .875rem}
-  summary,.rest{padding-inline:1rem}
-  /* height tightening — spacing only, no content removed */
-  .mast{padding-bottom:.75rem}
-  .mast h1{margin-top:.5rem}
-  .mast .lead{margin-top:.375rem}
-  .wrap{margin-top:1rem}
-  .rail h2{margin-bottom:.5rem}
-  .rail__sec{padding:.6875rem .875rem}
-  .toc li{padding-block:.1875rem}
-  .stream{gap:.875rem}
-  .item{padding:.875rem}
-  .tldr{margin-top:.75rem}
-  .pts{margin-top:.75rem}
-  .item__foot{margin-top:.625rem;padding-top:.5rem}
-  summary{padding:.75rem 1rem}
-  .colophon{margin-top:1.25rem;padding-top:.875rem}
-}
+<!-- Astra independent redesign from frozen baseline. System fonts; no external dependencies. Rewriting: remove empty sections; never collapse previously visible content or execute sample commands. Voice and provenance: see notes.md. --><style>* ,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;color-scheme:light}body{margin:0;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,p,dl,dd,figure,blockquote{margin:0}h1,h2,h3{line-height:1.15}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-underline-offset:.22em}a:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid currentColor;outline-offset:4px}p,li,dd,h1,h2,h3,figcaption{overflow-wrap:anywhere}section,article,figure,nav,aside,main,header,footer{min-width:0}b,strong{font-weight:700}cite{font-style:normal}
+:root{--paper:#fafbf9;--ink:#17272a;--muted:#4e5d5e;--line:#c5cfcb;--teal:#0d6261;--tint:#e9efeb;--sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--serif:Georgia,"Times New Roman",serif;--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}body{background:var(--paper);color:var(--ink);font-family:var(--sans)}.page{max-width:1280px;margin:auto;padding:36px 40px 48px}.mast{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:28px;padding-block:12px 24px;border-top:5px solid var(--ink);border-bottom:1px solid var(--ink)}.eyebrow{font:700 12px/1.5 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--teal)}.mast h1{font:400 clamp(44px,5.2vw,74px)/1.02 var(--serif);letter-spacing:-.055em;margin-top:12px}.lead{max-width:60ch;margin-top:16px;color:var(--muted)}.mast dl{display:grid;grid-template-columns:1fr;align-content:end;gap:2px;font:14px/1.5 var(--mono)}.mast dt{font-size:11px;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}.mast dd{margin-bottom:7px}.wrap{display:grid;grid-template-columns:230px minmax(0,1fr);gap:44px;margin-top:30px}.rail{font-size:16px}.rail__sec+.rail__sec{margin-top:28px;padding-top:20px;border-top:1px solid var(--line)}.rail h2{font:700 12px/1.5 var(--mono);text-transform:uppercase;letter-spacing:.08em;margin-bottom:14px;color:var(--muted)}.toc li{display:grid;grid-template-columns:24px minmax(0,1fr);gap:10px;padding:12px 0;border-top:1px solid var(--line)}.toc .n{font:14px/1.6 var(--mono);color:var(--teal)}.toc a{display:block;min-height:44px;font-size:16px;line-height:1.5;text-decoration:none;font-weight:650}.toc a:hover{text-decoration:underline}.toc small{display:block;margin-top:4px;font-size:13px;font-weight:400;color:var(--muted)}.chips{display:flex;flex-wrap:wrap;gap:6px 10px}.chips li{font-size:13px;line-height:1.5;padding:2px 0;color:var(--muted)}.chips li+li::before{content:"/";margin-right:10px;color:var(--muted)}.chips .hot{color:var(--teal);font-weight:700}.rail__sec p{color:var(--muted)}.stream{display:block}.item{padding:28px 0 26px;border-top:2px solid var(--ink);scroll-margin-top:16px}.item:first-child{padding-top:0;border-top:0}.item__top{display:grid;grid-template-columns:36px minmax(0,1fr) 205px;gap:18px;align-items:start}.item__n{font:400 34px/1 var(--serif);color:var(--teal)}.item h2{font-size:25px;letter-spacing:-.025em;line-height:1.2;font-weight:700}.item__meta{margin-top:12px;font:13px/1.65 var(--mono);color:var(--muted)}.item__meta span::before{content:"·";margin:0 6px}.verdict{font-size:16px;line-height:1.5;color:var(--muted)}.verdict b{display:block;color:var(--teal);margin-bottom:3px}.tldr{margin-top:22px;padding:15px 18px;background:var(--tint);border-block:1px solid var(--line);font-size:17px;line-height:1.6}.tldr b{font:700 12px/1.5 var(--mono);letter-spacing:.06em;margin-right:12px;color:var(--teal)}.pts{margin:20px 0 0;padding-left:20px;list-style:disc;color:var(--muted)}.pts li+li{margin-top:10px}.pts b{color:var(--ink)}.item__foot{margin-top:18px}.item__foot .chips{justify-content:flex-end}details{border-block:2px solid var(--ink);margin-top:8px}summary{cursor:pointer;min-height:44px;padding:18px 0;font-weight:700}summary span{display:block;font-size:14px;font-weight:400;color:var(--muted);margin-top:4px}.rest li{padding:18px 0;border-top:1px solid var(--line);font-size:16px;color:var(--muted)}.rest b{display:block;color:var(--ink);margin-bottom:4px}.rest em{font-style:normal}.colophon{margin-top:36px;padding-top:20px;border-top:1px solid var(--line);font:14px/1.6 var(--mono);color:var(--muted)}
+@media(max-width:1100px){.item__top{grid-template-columns:36px minmax(0,1fr)}.verdict{grid-column:2}.verdict b{display:inline;margin-right:4px}.wrap{gap:28px;grid-template-columns:205px minmax(0,1fr)}}
+@media(max-width:960px){.page{padding:28px}.mast{grid-template-columns:1fr}.mast dl{grid-template-columns:80px minmax(0,1fr);align-content:start}.mast dd{margin:0}.wrap{grid-template-columns:1fr;gap:30px}.rail{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);column-gap:28px}.rail nav{grid-row:1/3}.rail__sec+.rail__sec{margin:0;padding:0;border:0}.rail__sec:last-child{padding-top:18px}.toc li{padding-block:9px}.item__top{grid-template-columns:36px minmax(0,1fr) 205px}.verdict{grid-column:auto}.verdict b{display:block}}
+@media(max-width:640px){.page{padding:22px 18px 32px}.mast{padding-bottom:20px;gap:20px}.mast h1{font-size:48px;max-width:12ch}.rail{display:block}.rail__sec+.rail__sec{margin-top:18px;padding-top:18px;border-top:1px solid var(--line)}.toc li{gap:10px}.rail h2{margin-bottom:8px}.item__top{grid-template-columns:30px minmax(0,1fr);gap:10px}.item__n{font-size:28px}.item h2{font-size:25px}.item__top>div{display:contents}.item h2{grid-column:2}.item__meta{grid-column:1/-1;grid-row:3;margin-top:0}.verdict{grid-column:1/-1;grid-row:2;margin-top:4px}.verdict b{display:inline}.tldr{padding:14px;font-size:16px}.item__meta{font-size:13px}.item__foot .chips{justify-content:flex-start}.colophon{font-family:var(--sans);font-size:16px}.item{padding-block:25px}.stream{min-width:0}}
 </style>
 </head>
 <body>
@@ -186,10 +55,11 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
         <div class="item__top">
           <span class="item__n" aria-hidden="true">01</span>
           <div>
-            <h3>Postgres 18 ends the case for a connection pooler</h3>
+            <h2>Postgres 18 ends the case for a connection pooler</h2>
             <p class="item__meta"><b>Hexadecimal</b><span>24 min</span><span>06:40</span></p>
           </div>
-        </div>
+        <p class="verdict"><b>Watch it if</b> you own the database tier.</p>
+          </div>
         <p class="tldr"><b>TL;DR</b>Built-in connection multiplexing lands in 18. Under ~500 clients it removes the case for PgBouncer; above that the pooler wins on failover.</p>
         <ul class="pts">
           <li><b>The number:</b> 12,000 connections at 41 MB of backend memory, down from 1.7 GB on 17.</li>
@@ -197,7 +67,6 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
           <li><b>Migration:</b> keep the pooler in front a week, then drop its pool size to zero.</li>
         </ul>
         <div class="item__foot">
-          <p class="verdict"><b>Watch it if</b> you own the database tier.</p>
           <ul class="chips"><li>Postgres</li><li>Cost control</li></ul>
         </div>
       </article>
@@ -206,10 +75,11 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
         <div class="item__top">
           <span class="item__n" aria-hidden="true">02</span>
           <div>
-            <h3>We replaced our vector database with one table</h3>
+            <h2>We replaced our vector database with one table</h2>
             <p class="item__meta"><b>Latent Space</b><span>38 min</span><span>09:05</span></p>
           </div>
-        </div>
+        <p class="verdict"><b>Watch it if</b> your retrieval bill has a comma in it.</p>
+          </div>
         <p class="tldr"><b>TL;DR</b>A 40M-chunk corpus moved from a managed vector store into pgvector with HNSW. Recall held 0.94, p95 rose 11 ms, the bill fell $9,400/mo.</p>
         <ul class="pts">
           <li><b>Hybrid search was the unlock:</b> text and vector scores merge in one query; the service billed two.</li>
@@ -217,7 +87,6 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
           <li><b>Don't do this</b> below two million chunks — ops cost more than the saving.</li>
         </ul>
         <div class="item__foot">
-          <p class="verdict"><b>Watch it if</b> your retrieval bill has a comma in it.</p>
           <ul class="chips"><li>Retrieval</li><li>Cost control</li></ul>
         </div>
       </article>
@@ -226,17 +95,17 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
         <div class="item__top">
           <span class="item__n" aria-hidden="true">03</span>
           <div>
-            <h3>The cost curve nobody budgets for</h3>
+            <h2>The cost curve nobody budgets for</h2>
             <p class="item__meta"><b>Infra Weekly</b><span>17 min</span><span>11:20</span></p>
           </div>
-        </div>
+        <p class="verdict"><b>Watch it if</b> you sign off the cloud invoice.</p>
+          </div>
         <p class="tldr"><b>TL;DR</b>Egress, not compute, turns a cheap architecture expensive: a $300-a-month cluster carrying $4,100 of cross-zone traffic on one misplaced replica.</p>
         <ul class="pts">
           <li><b>Rule of thumb:</b> price every cross-zone hop before the instances.</li>
           <li><b>Topology-aware routing</b> fixed 80% in one config change.</li>
         </ul>
         <div class="item__foot">
-          <p class="verdict"><b>Watch it if</b> you sign off the cloud invoice.</p>
           <ul class="chips"><li>Cost control</li></ul>
         </div>
       </article>
@@ -245,17 +114,17 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
         <div class="item__top">
           <span class="item__n" aria-hidden="true">04</span>
           <div>
-            <h3>Shipping agents other teams actually adopt</h3>
+            <h2>Shipping agents other teams actually adopt</h2>
             <p class="item__meta"><b>Build Notes</b><span>52 min</span><span>14:02</span></p>
           </div>
-        </div>
+        <p class="verdict"><b>Watch it if</b> you are rolling agents out.</p>
+          </div>
         <p class="tldr"><b>TL;DR</b>Adoption tracked with one thing — whether the agent produced an artifact a human could forward. Chat-only agents churned in two weeks.</p>
         <ul class="pts">
           <li><b>Durable output beats chat:</b> a link that outlives the session is what gets shared.</li>
           <li><b>Name the sponsor:</b> agents with a named owner were 3x more likely to still run at 90 days.</li>
         </ul>
         <div class="item__foot">
-          <p class="verdict"><b>Watch it if</b> you are rolling agents out.</p>
           <ul class="chips"><li>Agent UX</li></ul>
         </div>
       </article>
@@ -277,4 +146,4 @@ summary span{color:var(--subtle);font-weight:400;font-size:.8125rem}
   <footer class="colophon">Compiled 3 September 2026, 18:05 UTC from 34 subscriptions. Figures are the presenters' own.</footer>
 </div>
 </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/templates/interview-notes.html b/templates/interview-notes.html
index 410b527..b489522 100644
--- a/templates/interview-notes.html
+++ b/templates/interview-notes.html
@@ -1,117 +1,17 @@
 <!doctype html>
 <html lang="en">
 <head>
-<meta charset="utf-8" />
-<meta name="viewport" content="width=device-width, initial-scale=1" />
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, initial-scale=1">
 <title>Interview notes — Ana Petrović, Rovna Logistics</title>
-<!--
-  TEMPLATE: interview-notes  ·  CATEGORY: meetings
-  VOICE: humanist sans (system-ui stack)   SCHEME: cool grey-blue paper, teal accent
-  Rewriting this? Replace the content, keep the structure and the styling.
-  THE QUOTES ARE THE ARTIFACT. Lead every finding with the subject's own words and put your
-  reading underneath it, labelled, so the reader can always tell what was said from what you
-  concluded. Do not paraphrase into the blockquote.
-  DELETE, DON'T EMPTY: no loose verbatims? remove the whole section, heading included.
-  One finding is a legitimate interview. A short page should be short.
--->
-<style>
-:root{
-  --bg:#eef1f5; --card:#fff; --tint:#f7f9fb;
-  --ink:#18242f; --muted:#4c5b69; --subtle:#5c6a78;
-  --line:#e2e7ec; --line-2:#cbd4dd;
-  --teal:#0d6a68; --teal-soft:#e2efee;
-  --sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
-}
-*,*::before,*::after{box-sizing:border-box}
-html{-webkit-text-size-adjust:100%}
-body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.55;-webkit-font-smoothing:antialiased}
-h1,h2,h3{margin:0;line-height:1.2;letter-spacing:-.015em}
-p,dl,dd,figure,blockquote{margin:0}
-ul,ol{margin:0;padding:0;list-style:none}
-.page{max-width:52rem;margin-inline:auto;padding:2.5rem 1.5rem 3rem}
-
-.eyebrow{display:inline-flex;align-items:center;gap:.5rem;color:var(--teal);font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase}
-.eyebrow::before{content:"";width:1.25rem;height:.1875rem;background:var(--teal)}
-.mast h1{margin:.625rem 0 0;font-size:clamp(1.75rem,4vw,2.375rem);font-weight:700}
-.mast .lead{margin-top:.5rem;color:var(--muted);font-size:1rem}
-
-/* lede quote — the artifact opens with the interview's own words */
-.lede{margin-top:1.125rem;padding-bottom:1.125rem;border-bottom:2px solid var(--ink)}
-.lede .mark{display:block;color:var(--teal);font-size:2.75rem;line-height:.55;font-weight:700}
-.lede blockquote p{margin-top:.5rem;font-size:clamp(1.4375rem,3.2vw,2.0625rem);font-weight:650;line-height:1.26;letter-spacing:-.022em;text-wrap:balance}
-.lede figcaption{margin-top:.5rem;color:var(--subtle);font-size:.875rem}
-.lede .who{color:var(--muted);font-weight:600}
-
-/* subject band */
-.subject{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.625rem 1.5rem;margin-top:1.25rem;padding:.9375rem 1.125rem;background:var(--card);border:1px solid var(--line);border-radius:.625rem}
-.subject>div{flex:1 1 17rem;min-width:0}
-.subject h2{font-size:1.0625rem;font-weight:700}
-.subject .role{margin-top:.125rem;color:var(--muted);font-size:.9375rem}
-.subject dl{flex:0 1 auto;display:flex;flex-wrap:wrap;gap:.25rem .875rem;font-size:.8125rem;color:var(--subtle)}
-.subject dt{font-weight:600;color:var(--muted)}
-.subject dd{margin-inline:.25rem 0}
-
-/* the question */
-.question{margin-top:1rem;padding:.9375rem 1.125rem;background:var(--teal-soft);border-radius:.625rem;color:#0b4f4d;font-size:.9375rem}
-.question b{display:block;font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:.1875rem}
-
-
-h2.sec{margin-top:2.25rem;font-size:.75rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--subtle)}
-
-/* findings — the quote leads, the reading follows */
-.find{display:grid;grid-template-columns:3.75rem minmax(0,1fr);gap:1.25rem;padding-block:1.5rem;border-top:1px solid var(--line-2)}
-.find:first-of-type{border-top:0;padding-top:1rem}
-.gut{text-align:right}
-.gut .mark{display:block;color:var(--teal);font-size:3rem;line-height:.62;font-weight:700}
-.gut .t{display:block;margin-top:.625rem;color:var(--subtle);font-size:.8125rem;font-weight:600;font-variant-numeric:tabular-nums}
-blockquote p{font-size:clamp(1.1875rem,2.3vw,1.5rem);font-weight:600;line-height:1.35;letter-spacing:-.015em;text-wrap:balance}
-.find figcaption{margin-top:.5rem;color:var(--subtle);font-size:.8125rem}
-.reading{margin-top:1rem;padding-top:.875rem;border-top:1px solid var(--line);font-size:.9375rem}
-.reading b{display:block;color:var(--teal);font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;margin-bottom:.1875rem}
-.reading p{color:var(--muted)}
-.reading em{font-style:normal;color:var(--ink);font-weight:600}
-
-/* loose verbatims */
-.verb li{display:grid;grid-template-columns:3.75rem minmax(0,1fr);gap:1.25rem;padding-block:.75rem;border-top:1px solid var(--line)}
-.verb li:first-child{border-top:0}
-.verb .t{text-align:right;color:var(--subtle);font-size:.8125rem;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.6}
-.verb q{color:var(--ink);font-size:1rem}
-.verb small{display:block;margin-top:.125rem;color:var(--subtle);font-size:.8125rem}
-
-/* what we do next */
-.next{font-size:.9375rem}
-.next li{display:grid;grid-template-columns:1.75rem minmax(0,1fr);gap:.75rem;padding-block:.75rem;border-top:1px solid var(--line)}
-.next li:first-child{border-top:0}
-.next .n{color:var(--teal);font-size:.8125rem;font-weight:700;line-height:1.7;font-variant-numeric:tabular-nums}
-.next p{color:var(--ink)}
-.next small{display:block;margin-top:.125rem;color:var(--subtle);font-size:.8125rem}
-.next small b{color:var(--muted);font-weight:600}
-
-.colophon{margin-top:2rem;padding-top:1rem;border-top:1px solid var(--line-2);color:var(--subtle);font-size:.8125rem}
-
-@media (max-width:34rem){
-  .page{padding:1.875rem 1rem 2rem}
-  h2.sec{margin-top:1.625rem}
-  .lede .mark{font-size:2.25rem}
-  .find{grid-template-columns:minmax(0,1fr);gap:.5rem}
-  .gut{display:flex;align-items:baseline;gap:.625rem;text-align:left}
-  .gut .mark{font-size:2rem;line-height:1}
-  .gut .t{margin-top:0}
-  .verb li,.next li{grid-template-columns:minmax(0,1fr);gap:.125rem}
-  .verb .t,.next .n{text-align:left;line-height:1.4}
-  .colophon{margin-top:1.5rem}
-  /* height tightening — spacing only, no content removed */
-  .lede{margin-top:1rem;padding-bottom:1rem}
-  .subject{margin-top:1rem;padding:.875rem 1rem}
-  .question{margin-top:.875rem;padding:.875rem 1rem}
-  .find{padding-block:1rem}
-  .reading{margin-top:.875rem;padding-top:.75rem}
-  .verb li,.next li{padding-block:.5625rem}
-}
+<!-- Astra independent redesign from frozen baseline. System fonts; no external dependencies. Rewriting: remove empty sections; never collapse previously visible content or execute sample commands. Voice and provenance: see notes.md. --><style>* ,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;color-scheme:light}body{margin:0;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,p,dl,dd,figure,blockquote{margin:0}h1,h2,h3{line-height:1.15}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-underline-offset:.22em}a:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid currentColor;outline-offset:4px}p,li,dd,h1,h2,h3,figcaption{overflow-wrap:anywhere}section,article,figure,nav,aside,main,header,footer{min-width:0}b,strong{font-weight:700}cite{font-style:normal}
+:root{--paper:#edf2f1;--ink:#1d292b;--muted:#4e6061;--line:#b9c6c3;--teal:#155d5b;--quote:#fffdf7;--sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--serif:Georgia,"Times New Roman",serif;--mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace}body{background:var(--paper);color:var(--ink);font-family:var(--sans)}.page{max-width:1216px;margin:auto;padding:40px 40px 48px}.eyebrow{font:700 12px/1.5 var(--mono);letter-spacing:.1em;color:var(--teal);text-transform:uppercase}.mast{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,.6fr);gap:12px 50px;padding-bottom:26px;border-bottom:1px solid var(--ink)}.mast .eyebrow{grid-column:1/-1}.mast h1{font-size:clamp(32px,3.2vw,43px);letter-spacing:-.04em;max-width:27ch}.lead{align-self:end;color:var(--muted)}.opening{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(0,.75fr);gap:0;margin-top:28px;align-items:start;background:var(--quote)}.lede{padding:32px}.lede blockquote{font:400 clamp(29px,3.3vw,43px)/1.5 var(--serif);letter-spacing:-.035em}.lede .mark{display:none}.lede figcaption{font-size:14px;line-height:1.6;margin-top:20px;color:var(--muted)}.lede .who{color:var(--ink)}.subject{padding:30px 26px;border-top:4px solid var(--ink);background:var(--paper)}.subject h2{font-size:22px;letter-spacing:-.02em}.role{margin-top:10px;color:var(--muted);font-size:16px}.subject dl{display:grid;grid-template-columns:60px minmax(0,1fr);gap:10px 12px;font-size:14px;line-height:1.5;margin-top:22px}.subject dt{color:var(--muted)}.subject dd{font-weight:600}.question{display:grid;grid-template-columns:220px minmax(0,1fr);gap:30px;margin-top:24px;padding-block:22px;border-block:1px solid var(--line)}.question b{color:var(--teal);font-size:14px}.question p{max-width:76ch}.sec{font:700 12px/1.5 var(--mono);text-transform:uppercase;letter-spacing:.12em;color:var(--teal);margin:36px 0 8px}.find{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:56px;padding:30px 0;border-top:1px solid var(--line)}.voice{min-width:0}.t{display:block;font:13px/1.5 var(--mono);color:var(--teal);margin-bottom:12px}.voice blockquote{font:400 26px/1.5 var(--serif);letter-spacing:-.015em}.voice figcaption{font-size:14px;color:var(--muted);margin-top:14px}.reading{padding-top:2px}.reading b{display:block;color:var(--teal);font-size:13px;text-transform:uppercase;letter-spacing:.08em;margin-bottom:14px}.reading p{font-size:17px;line-height:1.65;color:var(--muted)}.reading em{font-style:normal;color:var(--ink);font-weight:650}.verb li{display:grid;grid-template-columns:72px minmax(0,1fr);gap:20px;padding:22px 0;border-top:1px solid var(--line)}.verb .t{margin:4px 0 0}.verb q{font:400 23px/1.5 var(--serif)}.verb small{display:block;margin-top:10px;font-size:16px;color:var(--muted)}.next{border-top:2px solid var(--ink)}.next li{display:grid;grid-template-columns:40px minmax(0,1fr);gap:20px;padding:22px 0;border-bottom:1px solid var(--line)}.next .n{font:16px/1.6 var(--mono);color:var(--teal)}.next small{display:block;font-size:16px;color:var(--muted);margin-top:8px}.next small b{color:var(--ink)}.colophon{border-top:1px solid var(--ink);margin-top:36px;padding-top:20px;color:var(--muted);font-size:16px;line-height:1.6}
+@media(max-width:880px){.mast{grid-template-columns:1fr;gap:14px}.mast h1{max-width:30ch}.opening{grid-template-columns:minmax(0,1.35fr) minmax(0,1fr)}.lede{padding:26px}.subject{padding:24px}.find{gap:30px}.voice blockquote{font-size:23px}.reading p{font-size:16px}.question{grid-template-columns:160px minmax(0,1fr);gap:24px}}
+@media(max-width:600px){.page{padding:24px 18px 32px}.mast h1{font-size:33px}.opening{grid-template-columns:1fr;margin-top:22px}.lede{padding:22px 18px}.lede blockquote{font-size:30px;line-height:1.5}.subject{padding:24px 0;border-top:1px solid var(--line)}.subject dl{font-size:16px}.question{display:block;margin-top:0;padding-block:20px}.question p{margin-top:10px}.find{display:block;padding-block:25px}.reading{padding-top:22px;margin-top:22px;border-top:1px solid var(--line)}.voice blockquote{font-size:25px}.voice figcaption,.lede figcaption{font-size:16px}.verb li{display:block}.verb .t{margin-bottom:10px}.next li{grid-template-columns:28px minmax(0,1fr);gap:10px}.sec{margin-top:30px}}
 </style>
 </head>
 <body>
-<div class="page">
+<main class="page">
 
   <header class="mast">
     <span class="eyebrow">Interview notes · 6 of 9</span>
@@ -119,10 +19,9 @@ blockquote p{font-size:clamp(1.1875rem,2.3vw,1.5rem);font-weight:600;line-height
     <p class="lead">The output was never the problem. The schedule and provenance were.</p>
   </header>
 
-  <figure class="lede">
-    <span class="mark" aria-hidden="true">&ldquo;</span>
+  <div class="opening"><figure class="lede">
     <blockquote><p>If it had told me it had skipped a week, I would have kept it.</p></blockquote>
-    <figcaption><b class="who">Ana Petrović</b> · 41:02 · on what would have changed her mind</figcaption>
+    <figcaption><cite><b class="who">Ana Petrović</b> · 41:02 · on what would have changed her mind</cite></figcaption>
   </figure>
 
   <div class="subject">
@@ -137,7 +36,7 @@ blockquote p{font-size:clamp(1.1875rem,2.3vw,1.5rem);font-weight:600;line-height
     </dl>
   </div>
 
-  <div class="question">
+  </div><div class="question">
     <b>What we came to learn</b>
     <p>Why teams turn a scheduled agent off in month two. Ana ran a Monday metrics job for seven weeks, then disabled it.</p>
   </div>
@@ -145,41 +44,32 @@ blockquote p{font-size:clamp(1.1875rem,2.3vw,1.5rem);font-weight:600;line-height
   <section>
     <h2 class="sec">Findings</h2>
 
-    <figure class="find">
-      <div class="gut"><span class="mark" aria-hidden="true">&ldquo;</span><span class="t">08:12</span></div>
-      <div>
-        <blockquote><p>The report was fine. The problem was that on Tuesday nobody could tell me whether it had actually run.</p></blockquote>
-        <figcaption>Ana Petrović, on the first three weeks</figcaption>
-        <div class="reading">
+    <article class="find">
+      <figure class="voice"><span class="t">08:12</span><blockquote><p>The report was fine. The problem was that on Tuesday nobody could tell me whether it had actually run.</p></blockquote>
+        <figcaption><cite>Ana Petrović, on the first three weeks</cite></figcaption>
+        </figure><div class="reading">
           <b>What follows</b>
           <p>Every churned team so far describes the same gap: the output was trusted, the <em>schedule</em> was not. Ana checked manually for three weeks, decided that was the job she had been automating, and stopped.</p>
         </div>
-      </div>
-    </figure>
+      </article>
 
-    <figure class="find">
-      <div class="gut"><span class="mark" aria-hidden="true">&ldquo;</span><span class="t">21:40</span></div>
-      <div>
-        <blockquote><p>I forwarded the first one to my director and she asked me to just paste it into the doc. So I was doing it by hand anyway.</p></blockquote>
-        <figcaption>Ana Petrović, on sharing the output upward</figcaption>
-        <div class="reading">
+    <article class="find">
+      <figure class="voice"><span class="t">21:40</span><blockquote><p>I forwarded the first one to my director and she asked me to just paste it into the doc. So I was doing it by hand anyway.</p></blockquote>
+        <figcaption><cite>Ana Petrović, on sharing the output upward</cite></figcaption>
+        </figure><div class="reading">
           <b>What follows</b>
           <p>The artifact was not the unit of sharing in her organisation — the weekly doc was. A correct output that cannot travel the last ten metres fails where no output fails. <em>Second interview with this shape</em> (see 03).</p>
         </div>
-      </div>
-    </figure>
+      </article>
 
-    <figure class="find">
-      <div class="gut"><span class="mark" aria-hidden="true">&ldquo;</span><span class="t">35:05</span></div>
-      <div>
-        <blockquote><p>We turned it off when the numbers moved and nobody had changed anything. I could not see what it had read.</p></blockquote>
-        <figcaption>Ana Petrović, on the week before she disabled it</figcaption>
-        <div class="reading">
+    <article class="find">
+      <figure class="voice"><span class="t">35:05</span><blockquote><p>We turned it off when the numbers moved and nobody had changed anything. I could not see what it had read.</p></blockquote>
+        <figcaption><cite>Ana Petrović, on the week before she disabled it</cite></figcaption>
+        </figure><div class="reading">
           <b>What follows</b>
           <p>Trust broke on provenance, not accuracy — the figure was right and she still could not tell which query produced it. <em>Three unprompted mentions in six interviews,</em> and no question about it in the guide.</p>
         </div>
-      </div>
-    </figure>
+      </article>
   </section>
 
   <section>
@@ -201,6 +91,6 @@ blockquote p{font-size:clamp(1.1875rem,2.3vw,1.5rem);font-weight:600;line-height
   </section>
 
   <footer class="colophon">Recorded with consent; transcript held 90 days, then deleted. Quotes are verbatim, lightly de-hesitated; timestamps refer to the recording. Interview 6 of 9 · synthesis 18 September.</footer>
-</div>
+</main>
 </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/templates/launch-announcement.html b/templates/launch-announcement.html
index fb5b9a0..b39a574 100644
--- a/templates/launch-announcement.html
+++ b/templates/launch-announcement.html
@@ -1,362 +1,19 @@
 <!doctype html>
 <html lang="en">
   <head>
-    <meta charset="utf-8" />
-    <meta name="viewport" content="width=device-width, initial-scale=1" />
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
     <title>Fieldnote 2.0 is available today</title>
-    <!--
-      TEMPLATE  launch-announcement · category: releases
-      VOICE     rounded — the friendly member of the releases family. Generous radii and
-                weight contrast carry it wherever the rounded system face is unavailable.
-      SCHEME    high contrast: an inverted near-black masthead over a white page, one
-                saturated accent (signal blue; a lighter tint of the same hue on dark).
-
-      REWRITING THIS ARTIFACT
-      · Replace the copy, keep the structure. Touch :root only to re-theme.
-      · Delete, do not empty. No beta numbers worth printing? Remove the whole `.numbers`
-        section — never leave a heading with nothing under it.
-      · One lead feature plus two supporting ones. If you have five, pick three; an
-        announcement is an argument, not an inventory.
-    -->
-    <style>
-      :root {
-        --ink: #101114;
-        --muted: #55585f;
-        --faint: #6b6f7a;
-        --line: #e5e6ea;
-        --page: #ffffff;
-        --wash: #f4f5f7;
-        --dark: #101114;
-        --on-dark: #a9adba;
-        --accent: #1b3fd8;
-        --accent-lift: #7fa0ff;
-        --ok: #146c43;
-        --rounded: ui-rounded, "SF Pro Rounded", "Segoe UI Variable Display", "Segoe UI", system-ui,
-          sans-serif;
-        --mono: ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
-        --r: 14px;
-      }
-      *,
-      *::before,
-      *::after { box-sizing: border-box; }
-      html { -webkit-text-size-adjust: 100%; }
-      body {
-        margin: 0;
-        background: var(--page);
-        color: var(--ink);
-        font-family: var(--rounded);
-        font-size: 1.0625rem;
-        line-height: 1.6;
-        -webkit-font-smoothing: antialiased;
-      }
-      h1,
-      h2,
-      h3 {
-        margin: 0;
-        line-height: 1.15;
-        letter-spacing: -0.025em;
-        font-weight: 700;
-      }
-      p { margin: 0; }
-      ul,
-      ol {
-        margin: 0;
-        padding: 0;
-        list-style: none;
-      }
-      a { color: var(--accent); }
-      .wrap {
-        max-width: 60rem;
-        margin-inline: auto;
-        padding-inline: clamp(1.25rem, -0.053rem + 5.319vw, 2.5rem);
-      }
-      section { padding-block: clamp(0.62rem, -1.444rem + 8.426vw, 2.6rem); }
-
-      /* MASTHEAD --------------------------------------------------------- */
-      .hero {
-        background: var(--dark);
-        color: #ffffff;
-        padding-block: clamp(1.5rem, -1.106rem + 10.638vw, 4rem)
-          clamp(1.15rem, -1.039rem + 8.936vw, 3.25rem);
-      }
-      .eyebrow {
-        display: inline-flex;
-        align-items: center;
-        gap: 0.55rem;
-        font-size: 0.75rem;
-        font-weight: 700;
-        letter-spacing: 0.1em;
-        text-transform: uppercase;
-        color: var(--accent-lift);
-      }
-      .eyebrow::before {
-        content: "";
-        width: 0.55rem;
-        height: 0.55rem;
-        border-radius: 999px;
-        background: var(--accent-lift);
-      }
-      h1 {
-        margin-top: 0.75rem;
-        font-size: clamp(2.125rem, 7vw, 3.5rem);
-        max-width: 18ch;
-      }
-      .standfirst {
-        margin-top: 0.9rem;
-        max-width: 44ch;
-        font-size: 1.1875rem;
-        color: var(--on-dark);
-      }
-      .cta {
-        display: flex;
-        flex-wrap: wrap;
-        gap: 0.62rem;
-        margin-top: 1.05rem;
-      }
-      .btn {
-        display: inline-flex;
-        align-items: center;
-        min-height: 44px;
-        padding: 0.6rem 1.15rem;
-        border-radius: 999px;
-        font-size: 1rem;
-        font-weight: 700;
-        text-decoration: none;
-        background: #ffffff;
-        color: var(--ink);
-      }
-      .btn--ghost {
-        background: transparent;
-        color: #ffffff;
-        box-shadow: inset 0 0 0 1.5px #3a3d47;
-      }
-      .btn:focus-visible {
-        outline: 3px solid var(--accent-lift);
-        outline-offset: 3px;
-      }
-      .facts {
-        display: flex;
-        flex-wrap: wrap;
-        gap: 0.6rem 2rem;
-        margin-top: 1.15rem;
-        padding-top: 1.25rem;
-        border-top: 1px solid #2a2d36;
-      }
-      .facts dt {
-        font-family: var(--mono);
-        font-size: 0.6875rem;
-        letter-spacing: 0.14em;
-        text-transform: uppercase;
-        color: #7d818c;
-      }
-      .facts dd {
-        margin: 0.25rem 0 0;
-        font-size: 0.9375rem;
-        font-weight: 600;
-        color: #ffffff;
-      }
-
-      /* LEAD FEATURE ----------------------------------------------------- */
-      .lead h2 { font-size: clamp(1.5rem, 4.2vw, 2rem); }
-      .kicker {
-        font-size: 0.75rem;
-        font-weight: 700;
-        letter-spacing: 0.1em;
-        text-transform: uppercase;
-        color: var(--faint);
-        margin-bottom: 0.6rem;
-      }
-      .lead p {
-        margin-top: 1rem;
-        max-width: 46ch;
-        color: var(--muted);
-      }
-      .lead__art {
-        margin-top: 1.1rem;
-        background: var(--wash);
-        border-radius: var(--r);
-        padding: 1rem;
-      }
-      .lead__art svg {
-        display: block;
-        width: 100%;
-        height: auto;
-      }
-      /* labels are HTML at a real CSS size — inside the viewBox they scaled with it,
-         rendering 9.7px at 390 and 23.4px at 768. Columns match the panel centres. */
-      .flow__labels {
-        display: grid;
-        grid-template-columns: 31% 42% 27%;
-        margin-top: 0.35rem;
-        text-align: center;
-        font-family: var(--mono);
-        font-size: 0.8125rem;
-        color: var(--faint);
-      }
-      .caption {
-        margin-top: 0.5rem;
-        font-size: 0.875rem;
-        color: var(--faint);
-      }
-
-      /* SUPPORTING ------------------------------------------------------- */
-      .also {
-        display: grid;
-        gap: 1rem;
-        grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
-      }
-      .also li {
-        padding: 0.85rem;
-        background: var(--wash);
-        border-radius: var(--r);
-      }
-      .also h3 { font-size: 1.125rem; }
-      .also p {
-        margin-top: 0.55rem;
-        font-size: 0.9375rem;
-        color: var(--muted);
-      }
-
-      /* NUMBERS ---------------------------------------------------------- */
-      .numbers { border-block: 1px solid var(--line); }
-      .numbers ul {
-        display: grid;
-        gap: 0.9rem 1.5rem;
-        grid-template-columns: repeat(auto-fit, minmax(9.5rem, 1fr));
-      }
-
-      .fig {
-        font-size: clamp(1.625rem, 4.6vw, 2.5rem);
-        font-weight: 700;
-        letter-spacing: -0.04em;
-        font-variant-numeric: tabular-nums;
-        line-height: 1;
-      }
-      .numbers li:first-child .fig { color: var(--accent); }
-      .numbers p:not(.fig) {
-        margin-top: 0.45rem;
-        font-size: 0.9375rem;
-        color: var(--muted);
-        max-width: 26ch;
-      }
-
-      /* STEPS ------------------------------------------------------------ */
-      .steps {
-        counter-reset: s;
-        display: grid;
-        gap: 0.92rem;
-        margin-top: 0.88rem;
-      }
-      .steps li {
-        counter-increment: s;
-        display: grid;
-        grid-template-columns: 2.25rem 1fr;
-        gap: 0.35rem 1rem;
-        align-content: start;
-      }
-      .steps li > * { grid-column: 2; }
-      .steps li::before {
-        content: counter(s);
-        grid-area: 1 / 1;
-        width: 2.25rem;
-        height: 2.25rem;
-        border-radius: 999px;
-        background: var(--ink);
-        color: #ffffff;
-        font-weight: 700;
-        font-size: 0.9375rem;
-        display: flex;
-        align-items: center;
-        justify-content: center;
-      }
-      .steps h3 {
-        font-size: 1.0625rem;
-        align-self: center;
-      }
-      .steps p {
-        font-size: 0.9375rem;
-        color: var(--muted);
-      }
-      .cmd {
-        display: block;
-        margin-top: 0.5rem;
-        padding: 0.7rem 0.85rem;
-        border-radius: 10px;
-        background: var(--ink);
-        color: #e9eaee;
-        font-family: var(--mono);
-        font-size: 0.8125rem;
-        line-height: 1.5;
-        overflow-wrap: anywhere;
-      }
-      .cmd b {
-        color: var(--accent-lift);
-        font-weight: 400;
-        user-select: none;
-      }
-
-      /* AVAILABILITY ----------------------------------------------------- */
-      .avail { background: var(--wash); }
-      .rows {
-        margin-top: 1rem;
-        display: grid;
-        gap: 0.75rem;
-      }
-      .rows > div {
-        display: grid;
-        gap: 0.2rem 1.5rem;
-        padding-top: 0.85rem;
-        border-top: 1px solid var(--line);
-      }
-      .rows dt {
-        font-weight: 700;
-        font-size: 0.9375rem;
-      }
-      .rows dd {
-        margin: 0;
-        font-size: 0.9375rem;
-        color: var(--muted);
-      }
-      .yes {
-        color: var(--ok);
-        font-weight: 700;
-      }
-      .foot {
-        padding-block: 0.8rem 1rem;
-        font-size: 0.875rem;
-        color: var(--faint);
-      }
-      .foot p + p { margin-top: 0.35rem; }
-
-      @media (min-width: 22rem) {
-        .rows > div { grid-template-columns: 6.75rem 1fr; }
-      }
-      @media (min-width: 34rem) {
-        .rows > div { grid-template-columns: 11rem 1fr; }
-      }
-      @media (min-width: 62rem) {
-        .lead {
-          display: grid;
-          grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr);
-          gap: 3rem;
-          align-items: start;
-        }
-        .lead__art {
-          margin-top: 0;
-          padding: 1.5rem;
-        }
-        .steps {
-          grid-template-columns: repeat(3, 1fr);
-          gap: 2.5rem;
-        }
-      }
-    </style>
+    <!-- Astra independent redesign from frozen baseline. System fonts; no external dependencies. Rewriting: remove empty sections; never collapse previously visible content or execute sample commands. Voice and provenance: see notes.md. --><style>* ,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;color-scheme:light}body{margin:0;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}h1,h2,h3,p,dl,dd,figure,blockquote{margin:0}h1,h2,h3{line-height:1.15}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-underline-offset:.22em}a:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:3px solid currentColor;outline-offset:4px}p,li,dd,h1,h2,h3,figcaption{overflow-wrap:anywhere}section,article,figure,nav,aside,main,header,footer{min-width:0}b,strong{font-weight:700}cite{font-style:normal}
+:root{--ink:#101114;--muted:#55585f;--line:#d3d5db;--wash:#f1f3f7;--on-dark:#c5c9d4;--accent:#2447c8;--lift:#9eb6ff;--rounded:ui-rounded,"SF Pro Rounded","Segoe UI Variable Display","Segoe UI",system-ui,sans-serif;--mono:ui-monospace,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace}body{color:var(--ink);background:#fff;font-family:var(--rounded)}.wrap{max-width:1264px;margin-inline:auto;padding-inline:40px}.hero{background:var(--ink);color:white;padding-block:42px}.poster{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:48px;align-items:start}.eyebrow{font-size:12px;line-height:1.5;letter-spacing:.08em;text-transform:uppercase;font-weight:700;color:var(--lift)}.headline h1{font-size:clamp(40px,4.8vw,66px);line-height:1.05;font-weight:700;letter-spacing:-.055em;margin-top:22px;max-width:16ch}.standfirst{font-size:20px;line-height:1.6;color:var(--on-dark);margin-top:22px;max-width:40ch}.cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:24px}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;max-width:100%;padding:12px 22px;background:white;color:var(--ink);border:1px solid white;border-radius:999px;font-size:16px;line-height:1.5;text-align:center;text-decoration:none;font-weight:700;overflow-wrap:anywhere}.btn--ghost{background:transparent;color:white;border-color:#828896}.btn:focus-visible{outline-color:var(--lift)}.facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 24px;margin-top:30px;padding-top:22px;border-top:1px solid #5c616d}.facts dt{font:11px/1.5 var(--mono);text-transform:uppercase;letter-spacing:.09em;color:var(--on-dark)}.facts dd{font-size:16px;line-height:1.5;font-weight:600;margin-top:5px}.lead{min-width:0;padding-top:2px}.kicker{font-size:12px;line-height:1.5;letter-spacing:.09em;text-transform:uppercase;font-weight:700;color:var(--muted)}.lead .kicker{color:var(--lift)}.lead h2{font-size:30px;line-height:1.2;letter-spacing:-.025em;margin-top:12px;max-width:26ch}.lead-copy{color:var(--on-dark);font-size:16px;line-height:1.65;margin-top:20px}.lead-copy p+p{margin-top:14px}.lead__art{background:#f1f3f7;color:var(--ink);padding:20px;border-radius:24px;margin-top:24px}.lead__art svg{display:block;width:100%;height:auto;max-width:100%}.flow__labels{display:grid;grid-template-columns:27% 34% 23%;gap:8%;text-align:center;font:13px/1.5 var(--mono);margin-top:12px;color:#55585f}.caption{font-size:16px;line-height:1.6;color:var(--muted);margin-top:14px}.numbers{border-bottom:1px solid var(--line);padding-block:28px}.numbers ul{display:grid;grid-template-columns:1.25fr 1fr 1fr;gap:40px;margin-top:20px}.fig{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:46px;line-height:1.05;font-weight:700;letter-spacing:-.04em;font-variant-numeric:tabular-nums}.numbers li:first-child .fig{color:var(--accent)}.metric-copy{margin-top:12px;color:var(--muted);max-width:30ch;font-size:16px;line-height:1.6}.support{padding-block:32px}.also{margin-top:18px}.also li{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:40px;padding:24px 0;border-top:1px solid var(--line)}.also h3{font-size:28px;line-height:1.2;letter-spacing:-.03em}.also p{font-size:17px;line-height:1.6;color:var(--muted);max-width:62ch}.trial{padding-block:28px 38px;border-top:1px solid var(--line)}.trial h2,.avail h2{font-size:32px;letter-spacing:-.035em}.steps{counter-reset:step;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:32px;margin-top:28px}.steps li{counter-increment:step;min-width:0}.steps li::before{content:counter(step);display:flex;justify-content:center;align-items:center;width:42px;height:42px;border-radius:50%;background:var(--ink);color:white;font-weight:700;margin-bottom:16px}.steps h3{font-size:21px;letter-spacing:-.02em;line-height:1.25}.steps p{font-size:16px;line-height:1.6;color:var(--muted);margin-top:12px}.cmd{display:block;max-width:100%;margin-top:16px;padding:16px;background:var(--ink);color:white;border-radius:12px;font:14px/1.6 var(--mono);white-space:pre;overflow-x:auto;overflow-wrap:normal}.cmd:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.cmd b{color:var(--lift);font-weight:400}code{font-family:var(--mono)}.avail{background:var(--wash);padding-block:34px}.rows{margin-top:24px}.rows>div{display:grid;grid-template-columns:220px minmax(0,1fr);gap:24px;padding:18px 0;border-top:1px solid var(--line)}.rows dt{font-weight:700}.rows dd{font-size:16px;color:var(--muted)}.yes{color:#14613e;font-weight:700}.foot{padding-block:24px 32px;color:var(--muted);font-size:16px}.foot a{color:var(--accent)}
+@media(max-width:960px){.poster{grid-template-columns:1fr;gap:32px}.headline h1{max-width:21ch;font-size:56px}.lead{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}.lead__art{grid-column:2;grid-row:1/3;margin:0;align-self:start}.lead-copy{grid-column:1/-1;margin:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.lead-copy p+p{margin:0}.facts{grid-template-columns:repeat(4,minmax(0,1fr))}.steps{grid-template-columns:1fr;gap:26px}.steps li{display:grid;grid-template-columns:42px minmax(0,1fr);gap:8px 20px}.steps li::before{grid-column:1;grid-row:1/4;margin:0}.steps li>*{grid-column:2}.steps p,.cmd{margin-top:0}.numbers ul{gap:24px}.fig{font-size:40px}.rows>div{grid-template-columns:180px minmax(0,1fr)}}
+@media(max-width:600px){.wrap{padding-inline:20px}.hero{padding-block:28px}.headline h1{font-size:44px;max-width:16ch;margin-top:20px}.standfirst{font-size:18px}.facts{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.lead{display:block}.lead h2{font-size:29px}.lead__art{margin-top:22px;padding:18px 14px;border-radius:20px}.lead-copy{display:block;margin-top:22px}.lead-copy p+p{margin-top:16px}.flow__labels{font-size:13px}.caption{font-size:16px}.numbers ul{grid-template-columns:1fr;gap:0;margin-top:12px}.numbers li{padding:18px 0;border-top:1px solid var(--line)}.numbers li:first-child{border-top:0}.fig{font-size:44px}.metric-copy{margin-top:8px}.also li{grid-template-columns:1fr;gap:14px}.also h3{font-size:28px}.support{padding-block:28px}.steps li{display:block}.steps li::before{margin-bottom:14px}.steps p,.cmd{margin-top:12px}.rows>div{grid-template-columns:1fr;gap:8px}.trial h2,.avail h2{font-size:30px}.btn{padding:11px 18px}}
+</style>
   </head>
   <body>
-    <!-- MASTHEAD -------------------------------------------------------- -->
     <header class="hero">
-      <div class="wrap">
-        <p class="eyebrow">Available today · 4 September 2026</p>
+      <div class="wrap poster">
+        <div class="headline"><p class="eyebrow">Available today · 4 September 2026</p>
         <h1>Fieldnote 2.0 works with no signal at all</h1>
         <p class="standfirst">
           Survey the whole site offline; it syncs itself when you get back to the truck.
@@ -371,58 +28,76 @@
           <div><dt>Upgrade</dt><dd>Free, all plans</dd></div>
           <div><dt>Downtime</dt><dd>None — nothing to migrate</dd></div>
         </dl>
-      </div>
-    </header>
-
-    <!-- LEAD FEATURE ---------------------------------------------------- -->
-    <section class="lead wrap">
-      <div>
-        <p class="kicker">The headline change</p>
+      </div><section class="lead">
+      <div class="proof-heading"><p class="kicker">The headline change</p>
         <h2>Offline is the default, not the fallback</h2>
-        <p>
-          Every form, photo and signature is written to the device first and queued. The queue
-          drains by itself the moment there is a network, in the order the records were created.
-        </p>
-        <p>
-          Conflicts are boring now too: two people editing one record produces two versions, both
-          kept, merged in one tap. Nothing is silently overwritten.
-        </p>
-      </div>
-      <figure class="lead__art">
-        <svg viewBox="0 0 320 110" role="img" aria-labelledby="art-t" focusable="false">
+        </div><figure class="lead__art">
+        <svg viewbox="0 0 320 110" role="img" aria-labelledby="art-t" focusable="false">
           <title id="art-t">
             A record is saved on the device, held in a queue while offline, then uploaded in
             order when the network returns.
           </title>
-          <rect x="1" y="26" width="86" height="80" rx="12" fill="#fff" stroke="#d7d9e0" />
-          <rect x="14" y="42" width="60" height="7" rx="3.5" fill="#101114" />
-          <rect x="14" y="56" width="44" height="6" rx="3" fill="#c8cad2" />
-          <rect x="14" y="68" width="52" height="6" rx="3" fill="#c8cad2" />
-          <rect x="14" y="84" width="34" height="10" rx="5" fill="#146c43" />
-          <path d="M95 66h34" stroke="#a3a6b0" stroke-width="2" stroke-dasharray="4 4" />
-          <path d="M129 66l-6-4v8z" fill="#a3a6b0" />
-          <rect x="137" y="34" width="60" height="64" rx="10" fill="#f4f5f7" stroke="#d7d9e0" />
-          <rect x="147" y="44" width="40" height="9" rx="4" fill="#1b3fd8" />
-          <rect x="147" y="57" width="40" height="9" rx="4" fill="#8ba0e8" />
-          <rect x="147" y="70" width="40" height="9" rx="4" fill="#b9c4ef" />
-          <rect x="147" y="83" width="40" height="9" rx="4" fill="#d7ddf6" />
-          <path d="M205 66h34" stroke="#a3a6b0" stroke-width="2" />
-          <path d="M239 66l-6-4v8z" fill="#a3a6b0" />
-          <rect x="247" y="26" width="72" height="80" rx="12" fill="#101114" />
-          <rect x="261" y="46" width="44" height="7" rx="3.5" fill="#7fa0ff" />
-          <rect x="261" y="60" width="30" height="6" rx="3" fill="#4a4e59" />
-          <rect x="261" y="72" width="38" height="6" rx="3" fill="#4a4e59" />
+          <rect x="1" y="26" width="86" height="80" rx="12" fill="#fff" stroke="#d7d9e0"></rect>
+          <rect x="14" y="42" width="60" height="7" rx="3.5" fill="#101114"></rect>
+          <rect x="14" y="56" width="44" height="6" rx="3" fill="#c8cad2"></rect>
+          <rect x="14" y="68" width="52" height="6" rx="3" fill="#c8cad2"></rect>
+          <rect x="14" y="84" width="34" height="10" rx="5" fill="#146c43"></rect>
+          <path d="M95 66h34" stroke="#a3a6b0" stroke-width="2" stroke-dasharray="4 4"></path>
+          <path d="M129 66l-6-4v8z" fill="#a3a6b0"></path>
+          <rect x="137" y="34" width="60" height="64" rx="10" fill="#f4f5f7" stroke="#d7d9e0"></rect>
+          <rect x="147" y="44" width="40" height="9" rx="4" fill="#1b3fd8"></rect>
+          <rect x="147" y="57" width="40" height="9" rx="4" fill="#8ba0e8"></rect>
+          <rect x="147" y="70" width="40" height="9" rx="4" fill="#b9c4ef"></rect>
+          <rect x="147" y="83" width="40" height="9" rx="4" fill="#d7ddf6"></rect>
+          <path d="M205 66h34" stroke="#a3a6b0" stroke-width="2"></path>
+          <path d="M239 66l-6-4v8z" fill="#a3a6b0"></path>
+          <rect x="247" y="26" width="72" height="80" rx="12" fill="#101114"></rect>
+          <rect x="261" y="46" width="44" height="7" rx="3.5" fill="#7fa0ff"></rect>
+          <rect x="261" y="60" width="30" height="6" rx="3" fill="#4a4e59"></rect>
+          <rect x="261" y="72" width="38" height="6" rx="3" fill="#4a4e59"></rect>
         </svg>
         <p class="flow__labels"><span>On device</span><span>Queued</span><span>Synced</span></p>
         <figcaption class="caption">
           The round trip needs no connection at any point.
         </figcaption>
       </figure>
+    <div class="lead-copy">
+        <p>
+          Every form, photo and signature is written to the device first and queued. The queue
+          drains by itself the moment there is a network, in the order the records were created.
+        </p>
+        <p>
+          Conflicts are boring now too: two people editing one record produces two versions, both
+          kept, merged in one tap. Nothing is silently overwritten.
+        </p>
+      </div>
+      </section>
+
+    </div>
+    </header>
+
+    <section class="numbers">
+      <div class="wrap">
+        <h2 class="kicker">From nine weeks of beta</h2>
+        <ul>
+          <li>
+            <p class="fig">241,800</p>
+            <p class="metric-copy">records captured offline by 1,900 crews</p>
+          </li>
+          <li>
+            <p class="fig">18 sec</p>
+            <p class="metric-copy">median time to drain a full day's queue</p>
+          </li>
+          <li>
+            <p class="fig">0</p>
+            <p class="metric-copy">records lost to a failed sync</p>
+          </li>
+        </ul>
+      </div>
     </section>
 
-    <!-- SUPPORTING ------------------------------------------------------ -->
-    <section class="wrap">
-      <h2 class="kicker" style="margin-bottom: 1rem">Also in 2.0</h2>
+    <section class="wrap support">
+      <h2 class="kicker">Also in 2.0</h2>
       <ul class="also">
         <li>
           <h3>Shared form library</h3>
@@ -441,29 +116,7 @@
       </ul>
     </section>
 
-    <!-- NUMBERS --------------------------------------------------------- -->
-    <section class="numbers">
-      <div class="wrap">
-        <h2 class="kicker" style="margin-bottom: 1rem">From nine weeks of beta</h2>
-        <ul>
-          <li>
-            <p class="fig">241,800</p>
-            <p>records captured offline by 1,900 crews</p>
-          </li>
-          <li>
-            <p class="fig">18 sec</p>
-            <p>median time to drain a full day's queue</p>
-          </li>
-          <li>
-            <p class="fig">0</p>
-            <p>records lost to a failed sync</p>
-          </li>
-        </ul>
-      </div>
-    </section>
-
-    <!-- HOW TO TRY IT --------------------------------------------------- -->
-    <section class="wrap">
+    <section class="wrap trial">
       <h2>Try it on your next site visit</h2>
       <ol class="steps">
         <li>
@@ -475,7 +128,7 @@
         <li>
           <h3>Download your sites</h3>
           <p>Settings → Offline, then pick the sites for the week. About 40MB each.</p>
-          <code class="cmd"><b>fieldnote</b> sites pull --week current</code>
+          <code class="cmd" role="region" aria-label="Command"><b>fieldnote</b> sites pull --week current</code>
         </li>
         <li>
           <h3>Turn the radio off and work</h3>
@@ -487,7 +140,6 @@
       </ol>
     </section>
 
-    <!-- AVAILABILITY ---------------------------------------------------- -->
     <section class="avail">
       <div class="wrap">
         <h2>Availability</h2>
@@ -519,4 +171,4 @@
       </p>
     </footer>
   </body>
-</html>
+</html>
\ No newline at end of file
diff --git a/templates/manifest.ts b/templates/manifest.ts
index a80b797..72c81ee 100644
--- a/templates/manifest.ts
+++ b/templates/manifest.ts
@@ -4,21 +4,23 @@ export const starterTemplateManifest = [
         "slug": "daily-digest",
         "category": "meetings",
         "name": "Daily digest",
-        "description": "Many items condensed with an index rail: a jump index and today's themes on the left, per-item cards with a TL;DR on the right, and the long tail collapsed to one line each.",
+        "description": "A newspaper-style daily desk: a complete story index beside four open, ruled articles with relevance, summaries and evidence, followed by a native six-item archive.",
         "type": "html",
         "content_file": "daily-digest.html",
         "thumbnail": "/assets/template-thumbs/daily-digest.png",
-        "slots": []
+        "slots": [],
+        "thumbnail_viewport": 1600
       },
       {
         "slug": "interview-notes",
         "category": "meetings",
         "name": "Interview notes",
-        "description": "One conversation, quotes-led. Who they are, what they said in a timestamped pull quote, and your reading kept visibly separate. For user research and hiring debriefs.",
+        "description": "A voice-and-interpretation spread: a broad serif quotation beside the participant identity, then paired verbatim evidence and analyst readings with timed quotes and owned next actions.",
         "type": "html",
         "content_file": "interview-notes.html",
         "thumbnail": "/assets/template-thumbs/interview-notes.png",
-        "slots": []
+        "slots": [],
+        "thumbnail_viewport": 1440
       },
       {
         "slug": "meeting-recap",
@@ -94,7 +96,7 @@ export const starterTemplateManifest = [
         "slug": "case-study",
         "category": "research",
         "name": "Case Study",
-        "description": "A customer outcome told with the customer's own numbers: one display figure and what it is measured against, a before-and-after ledger with magnitude bars, the situation that caused it, an honest account of what the change cost, and quotes from the people who lived it.",
+        "description": "An evidence spread: the customer outcome opposite five before/after metric records, followed by serif customer voices, the operational story and an equally prominent honest-cost section.",
         "type": "html",
         "content_file": "case-study.html",
         "thumbnail": "/assets/template-thumbs/case-study.png",
@@ -179,11 +181,12 @@ export const starterTemplateManifest = [
         "slug": "launch-announcement",
         "category": "releases",
         "name": "Launch announcement",
-        "description": "The friendly end of the releases family: an inverted black masthead with the headline claim and the facts strip, one lead feature with a diagram, two supporting ones, beta numbers, three steps to try it, and a plain-spoken availability table.",
+        "description": "A dark launch poster pairs the headline and update links with an offline-flow diagram, then shifts to a light beta-evidence strip, open feature rows and a practical trial sequence.",
         "type": "html",
         "content_file": "launch-announcement.html",
         "thumbnail": "/assets/template-thumbs/launch-announcement.png",
-        "slots": []
+        "slots": [],
+        "thumbnail_viewport": 1440
       },
       {
         "slug": "migration-guide",
