···11-<section id="product" class="section section--editorial wrap reveal-scroll" aria-labelledby="product-heading">
22- <header class="section__head">
33- <p class="eyebrow">Product</p>
44- <h2 id="product-heading" class="heading-xl">Built for the tab in front of you</h2>
55- </header>
66- <div class="editorial-grid">
77- <article class="editorial-block">
88- <h3 class="heading-md">Verdict first</h3>
99- <p>One action pulls the lede out of long articles, tickets, and threads so you can bail early or read with intent.</p>
1010- </article>
1111- <article class="editorial-block">
1212- <h3 class="heading-md">Questions stay grounded</h3>
1313- <p>Follow-ups stick to the page and the summary you already made—no vague answers from something that never read the article.</p>
1414- </article>
1515- <article class="editorial-block">
1616- <h3 class="heading-md">Your choice of AI</h3>
1717- <p>Use a model on your machine or one you already pay for—set it once in settings instead of being locked to a single vendor.</p>
1818- </article>
1919- </div>
11+<section
22+ id="product"
33+ class="section section--editorial wrap reveal-scroll"
44+ aria-labelledby="product-heading"
55+>
66+ <header class="section__head">
77+ <p class="eyebrow">Product</p>
88+ <h2 id="product-heading" class="heading-xl">
99+ Built for the tab in front of you
1010+ </h2>
1111+ </header>
1212+ <div class="editorial-grid">
1313+ <article class="editorial-block">
1414+ <h3 class="heading-md">Verdict first</h3>
1515+ <p>
1616+ Find out the most important part first. Figure out whether it's
1717+ something you want to read more about, or something you don't.
1818+ </p>
1919+ </article>
2020+ <article class="editorial-block">
2121+ <h3 class="heading-md">Questions that inform</h3>
2222+ <p>
2323+ Ask what you really want to know. Why is this page worth
2424+ reading? Is there a certain peice of information you want to
2525+ make sure this article has?
2626+ </p>
2727+ </article>
2828+ <article class="editorial-block">
2929+ <h3 class="heading-md">Your choice of AI</h3>
3030+ <p>
3131+ Use a model on your machine, via Ollama's free cloud, or bring
3232+ your own OpenAI compatable provider. Completely up to you.
3333+ </p>
3434+ </article>
3535+ </div>
2036</section>
+1-1
src/components/sections/HeroWithProof.astro
···2424 you want to read more.
2525 </p>
2626 <p class="hero-whisper lede--tight reveal-item" style="--i: 3">
2727- Main point first—rabbit holes optional.
2727+ Main point first. Rabbit holes optional.
2828 </p>
2929 <ul
3030 class="hero-highlights reveal-item"
+280-46
src/components/sections/InstallJourney.astro
···2121 >
2222 Install the beta
2323 </h2>
2424+ <p class="install-deck reveal-item" style="--i: 2">
2525+ Four steps: get the repo, build for your browser, load it in
2626+ developer mode, then point Lede at a model.
2727+ </p>
2428 </header>
25292626- <div
2727- class="journey-band journey-band--callout reveal-item"
2828- style="--i: 2"
2929- >
3030- <p class="journey-band__text">
3131- Lede isn't in the Chrome or Firefox stores yet. Download
3232- the extension folder from the project page, then add it to your
3333- browser—full click-by-click steps are there too.
3434- </p>
3535- </div>
3636-3737- <div
3838- class="journey-strip reveal-item"
3030+ <ol
3131+ class="install-timeline reveal-item"
3932 style="--i: 3"
4040- aria-label="Three-step overview"
3333+ aria-label="Four steps to install the beta"
4134 >
4242- <div class="journey-strip__cell">
4343- <span class="journey-strip__num" aria-hidden="true">1</span>
4444- <h3 class="journey-strip__title">Grab the build</h3>
4545- <p class="journey-strip__body">
4646- Open the project page and download the extension files to
4747- your computer.
4848- </p>
4949- <a href={tangled} target="_blank" rel="noopener noreferrer"
5050- >Open project page</a
5151- >
5252- </div>
5353- <div class="journey-strip__cell">
5454- <span class="journey-strip__num" aria-hidden="true">2</span>
5555- <h3 class="journey-strip__title">Add it in the browser</h3>
5656- <p class="journey-strip__body">
5757- Chrome and Firefox each have a simple “load from folder”
5858- flow for betas.
5959- </p>
6060- </div>
6161- <div class="journey-strip__cell">
6262- <span class="journey-strip__num" aria-hidden="true">3</span>
6363- <h3 class="journey-strip__title">Pick how Lede thinks</h3>
6464- <p class="journey-strip__body">
6565- In settings, choose a local model or another provider you
6666- already use.
6767- </p>
6868- </div>
6969- </div>
3535+ <li class="install-timeline__step">
3636+ <div class="install-timeline__rail" aria-hidden="true">
3737+ <span class="install-timeline__marker">1</span>
3838+ </div>
3939+ <div class="install-timeline__content">
4040+ <p class="install-timeline__kicker">Source</p>
4141+ <h3 class="install-timeline__title">Get the code</h3>
4242+ <p class="install-timeline__body">
4343+ In a terminal, from the directory where you want the
4444+ project:
4545+ </p>
4646+ <div class="install-snippet-wrap">
4747+ <pre
4848+ class="install-timeline__snippet"
4949+ ><code
5050+ >git clone https://tangled.org/ellioth.co/summarizer-extension</code
5151+ ></pre>
5252+ <button
5353+ type="button"
5454+ class="install-snippet-copy"
5555+ aria-label="Copy git clone command to clipboard"
5656+ title="Copy"
5757+ >
5858+ <span
5959+ class="install-snippet-copy__icon install-snippet-copy__icon--copy"
6060+ aria-hidden="true"
6161+ >
6262+ <svg
6363+ width="17"
6464+ height="17"
6565+ viewBox="0 0 24 24"
6666+ fill="none"
6767+ stroke="currentColor"
6868+ stroke-width="2"
6969+ stroke-linecap="round"
7070+ stroke-linejoin="round"
7171+ >
7272+ <rect
7373+ x="9"
7474+ y="9"
7575+ width="13"
7676+ height="13"
7777+ rx="2"
7878+ ry="2"></rect>
7979+ <path
8080+ d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"
8181+ ></path>
8282+ </svg>
8383+ </span>
8484+ <span
8585+ class="install-snippet-copy__icon install-snippet-copy__icon--check"
8686+ aria-hidden="true"
8787+ >
8888+ <svg
8989+ width="17"
9090+ height="17"
9191+ viewBox="0 0 24 24"
9292+ fill="none"
9393+ stroke="currentColor"
9494+ stroke-width="2.25"
9595+ stroke-linecap="round"
9696+ stroke-linejoin="round"
9797+ >
9898+ <polyline points="20 6 9 17 4 12"></polyline>
9999+ </svg>
100100+ </span>
101101+ </button>
102102+ <span
103103+ class="install-snippet-live"
104104+ role="status"
105105+ aria-live="polite"
106106+ aria-atomic="true"></span>
107107+ </div>
108108+ <p
109109+ class="install-timeline__body install-timeline__body--muted"
110110+ >
111111+ Prefer a UI? Download the same folder from Tangled in
112112+ the browser instead of cloning.
113113+ </p>
114114+ <a
115115+ class="install-timeline__link"
116116+ href={tangled}
117117+ target="_blank"
118118+ rel="noopener noreferrer">Open on Tangled</a
119119+ >
120120+ </div>
121121+ </li>
122122+ <li class="install-timeline__step">
123123+ <div class="install-timeline__rail" aria-hidden="true">
124124+ <span class="install-timeline__marker">2</span>
125125+ </div>
126126+ <div class="install-timeline__content">
127127+ <p class="install-timeline__kicker">Build</p>
128128+ <h3 class="install-timeline__title">Build the manifest</h3>
129129+ <p class="install-timeline__body">
130130+ Enter the repo, then run the script for the browser you
131131+ use:
132132+ </p>
133133+ <div class="install-snippet-wrap">
134134+ <pre
135135+ class="install-timeline__snippet"
136136+ ><code>cd summarizer-extension
137137+./build.sh chrome # or: ./build.sh firefox</code></pre>
138138+ <button
139139+ type="button"
140140+ class="install-snippet-copy"
141141+ aria-label="Copy build commands to clipboard"
142142+ title="Copy"
143143+ >
144144+ <span
145145+ class="install-snippet-copy__icon install-snippet-copy__icon--copy"
146146+ aria-hidden="true"
147147+ >
148148+ <svg
149149+ width="17"
150150+ height="17"
151151+ viewBox="0 0 24 24"
152152+ fill="none"
153153+ stroke="currentColor"
154154+ stroke-width="2"
155155+ stroke-linecap="round"
156156+ stroke-linejoin="round"
157157+ >
158158+ <rect
159159+ x="9"
160160+ y="9"
161161+ width="13"
162162+ height="13"
163163+ rx="2"
164164+ ry="2"></rect>
165165+ <path
166166+ d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"
167167+ ></path>
168168+ </svg>
169169+ </span>
170170+ <span
171171+ class="install-snippet-copy__icon install-snippet-copy__icon--check"
172172+ aria-hidden="true"
173173+ >
174174+ <svg
175175+ width="17"
176176+ height="17"
177177+ viewBox="0 0 24 24"
178178+ fill="none"
179179+ stroke="currentColor"
180180+ stroke-width="2.25"
181181+ stroke-linecap="round"
182182+ stroke-linejoin="round"
183183+ >
184184+ <polyline points="20 6 9 17 4 12"></polyline>
185185+ </svg>
186186+ </span>
187187+ </button>
188188+ <span
189189+ class="install-snippet-live"
190190+ role="status"
191191+ aria-live="polite"
192192+ aria-atomic="true"></span>
193193+ </div>
194194+ </div>
195195+ </li>
196196+ <li class="install-timeline__step">
197197+ <div class="install-timeline__rail" aria-hidden="true">
198198+ <span class="install-timeline__marker">3</span>
199199+ </div>
200200+ <div class="install-timeline__content">
201201+ <p class="install-timeline__kicker">Load</p>
202202+ <h3 class="install-timeline__title">
203203+ Load it in the browser
204204+ </h3>
205205+ <div class="install-browser-split">
206206+ <div class="install-browser-split__col">
207207+ <p class="install-browser-split__tag">Chrome</p>
208208+ <p
209209+ class="install-timeline__body install-timeline__body--compact"
210210+ >
211211+ Extensions → turn on <strong
212212+ >Developer mode</strong
213213+ > → <strong>Load unpacked</strong> → pick the built
214214+ folder.
215215+ </p>
216216+ </div>
217217+ <div class="install-browser-split__col">
218218+ <p class="install-browser-split__tag">Firefox</p>
219219+ <p
220220+ class="install-timeline__body install-timeline__body--compact"
221221+ >
222222+ Debugging → <strong
223223+ >Load Temporary Add-on</strong
224224+ > → choose <code>manifest.json</code> in that folder.
225225+ </p>
226226+ </div>
227227+ </div>
228228+ <p
229229+ class="install-timeline__body install-timeline__body--muted"
230230+ >
231231+ Step-by-step URLs and menus:
232232+ <a
233233+ class="install-timeline__anchor"
234234+ href="#install-browser-details"
235235+ >full Chrome & Firefox checklist</a
236236+ >.
237237+ </p>
238238+ </div>
239239+ </li>
240240+ <li class="install-timeline__step">
241241+ <div class="install-timeline__rail" aria-hidden="true">
242242+ <span class="install-timeline__marker">4</span>
243243+ </div>
244244+ <div class="install-timeline__content">
245245+ <p class="install-timeline__kicker">Model</p>
246246+ <h3 class="install-timeline__title">Choose a model</h3>
247247+ <p class="install-timeline__body">
248248+ In Lede's settings, pick a model and provider.
249249+ Ollama is the quickest start; an OpenAI-compatible API
250250+ works if you already use one.
251251+ </p>
252252+ </div>
253253+ </li>
254254+ </ol>
7025571256 <details
7272- class="disclosure disclosure--animate reveal-item"
257257+ id="install-browser-details"
258258+ class="disclosure disclosure--animate disclosure--install reveal-item"
73259 style="--i: 4"
74260 >
7575- <summary>Step-by-step for Chrome or Firefox</summary>
261261+ <summary>Checklist: Installing in Chrome or Firefox</summary>
76262 <div class="disclosure__collapse">
77263 <div class="disclosure__collapse-sheet">
78264 <div class="disclosure__body install-wrap">
···128314 </li>
129315 </ol>
130316 <p class="firefox-note">
131131- Temporary add-ons clear when you fully quit
132132- Firefox—reload during active dev sessions.
317317+ A full Firefox quit drops temporary add-ons;
318318+ load the add-on again while you're
319319+ iterating.
133320 </p>
134321 </div>
135322 </div>
···139326 </details>
140327 </div>
141328</section>
329329+330330+<script is:inline>
331331+ (function () {
332332+ var root = document.getElementById("install");
333333+ if (!root) return;
334334+335335+ root.querySelectorAll(".install-snippet-wrap").forEach(function (wrap) {
336336+ var btn = wrap.querySelector(".install-snippet-copy");
337337+ var code = wrap.querySelector("code");
338338+ var live = wrap.querySelector(".install-snippet-live");
339339+ if (!btn || !code || btn.dataset.installCopyBound) return;
340340+ btn.dataset.installCopyBound = "1";
341341+342342+ var labelDefault = btn.getAttribute("aria-label") || "Copy to clipboard";
343343+344344+ btn.addEventListener("click", function () {
345345+ var text = code.textContent || "";
346346+347347+ function clearLive() {
348348+ if (live) live.textContent = "";
349349+ }
350350+351351+ function showCopied() {
352352+ wrap.classList.add("is-copied");
353353+ btn.setAttribute("aria-label", "Copied to clipboard");
354354+ if (live) live.textContent = "Copied to clipboard";
355355+ window.setTimeout(function () {
356356+ wrap.classList.remove("is-copied");
357357+ btn.setAttribute("aria-label", labelDefault);
358358+ clearLive();
359359+ }, 2000);
360360+ }
361361+362362+ function showFailed() {
363363+ if (live) live.textContent = "Copy failed";
364364+ window.setTimeout(clearLive, 2500);
365365+ }
366366+367367+ if (navigator.clipboard && navigator.clipboard.writeText) {
368368+ navigator.clipboard.writeText(text).then(showCopied).catch(showFailed);
369369+ } else {
370370+ showFailed();
371371+ }
372372+ });
373373+ });
374374+ })();
375375+</script>
+46-32
src/components/sections/UsageMicro.astro
···11-<section id="usage" class="section section--tight-top wrap reveal-scroll" aria-labelledby="usage-heading">
22- <header class="section__head">
33- <p class="eyebrow">In the popup</p>
44- <h2 id="usage-heading" class="heading-xl">Three beats</h2>
55- </header>
66- <ol class="usage-flow">
77- <li>
88- <span class="usage-flow__label">01</span>
99- <div>
1010- <h3 class="heading-md">Land on the page</h3>
1111- <p>Article, doc, issue—whatever you need to judge quickly.</p>
1212- </div>
1313- </li>
1414- <li>
1515- <span class="usage-flow__label">02</span>
1616- <div>
1717- <h3 class="heading-md">Open Lede</h3>
1818- <p>Toolbar icon, context menu, or the keyboard shortcut.</p>
1919- </div>
2020- </li>
2121- <li>
2222- <span class="usage-flow__label">03</span>
2323- <div>
2424- <h3 class="heading-md">Summarize or ask</h3>
2525- <p>Summarize for the lede, or type a question about this tab and press Enter.</p>
2626- </div>
2727- </li>
2828- </ol>
11+<section
22+ id="usage"
33+ class="section section--tight-top wrap reveal-scroll"
44+ aria-labelledby="usage-heading"
55+>
66+ <header class="section__head">
77+ <p class="eyebrow">In the popup</p>
88+ <h2 id="usage-heading" class="heading-xl">Three beats</h2>
99+ </header>
1010+ <ol class="usage-flow">
1111+ <li>
1212+ <span class="usage-flow__label">01</span>
1313+ <div>
1414+ <h3 class="heading-md">Land on the page</h3>
1515+ <p>
1616+ Nearly any text-based site. Articles, docs, Reddit
1717+ thread—whatever you need to judge quickly.
1818+ </p>
1919+ </div>
2020+ </li>
2121+ <li>
2222+ <span class="usage-flow__label">02</span>
2323+ <div>
2424+ <h3 class="heading-md">Open Lede</h3>
2525+ <p>
2626+ Click the toolbar icon, via the right-click context menu, or
2727+ set up a keyboard shortcut for instant summaries.
2828+ </p>
2929+ </div>
3030+ </li>
3131+ <li>
3232+ <span class="usage-flow__label">03</span>
3333+ <div>
3434+ <h3 class="heading-md">Summarize or ask</h3>
3535+ <p>
3636+ Instantly pick out the main takeaways and ask follow-up
3737+ questions if needed.
3838+ </p>
3939+ </div>
4040+ </li>
4141+ </ol>
29423030- <p class="usage-afterword">
3131- The preview above matches the real popup—try the theme, <strong>Quick Summary</strong>, and chat. After you install,
3232- those same controls work on whatever page you have open.
3333- </p>
4343+ <p class="usage-afterword">
4444+ The demo at the top of the page above matches the real extension, so
4545+ click all of the buttons! After you install, those same controls work on
4646+ whatever page you have open.
4747+ </p>
3448</section>