copy bar

The clean hand-off for anything you need out of the conversation. An agent runs crystl copy, the text lands in a bar under the terminal, and you click Copy. No drag-selecting across wrapped lines.

works withany CLI agentclaude codecodexantigravity cli

The copy bar is an editable strip docked at the bottom of a shard, below the terminal and above the screenshot bar. It hands you text to copy with a one-click Copy button, and it backs the crystl copy CLI command.

An agent stages text two ways: crystl copy "<text>", or by piping anything into it (<cmd> | crystl copy). The text appears in the bar, ready to copy, and you can edit it first if you want to tweak a value before it hits your clipboard. The window grows taller to make room, so the terminal keeps its size rather than getting squeezed.

It exists because terminal output is awkward to drag-select across wrapped lines. The copy bar is the reliable path for a token, an API key, a URL, a generated snippet, and especially commands you'll run elsewhere: a hand-retyped command is the easiest thing to get wrong, whether it's a dropped flag, a mangled path, or a smart-quote.

Why it matters

One-click copy

No drag-selecting across wrapped terminal lines. The text lands in the bar and a single Copy button puts it on your clipboard, intact.

Editable first

The bar is editable before you copy. Tweak a value, fix a path, or trim a snippet, then click Copy when it's exactly right.

Up to 10 tabs

An agent emitting several snippets can stage them all. A plain crystl copy appends a tab; --tab N overwrites a specific one. Each tab keeps its own text.

Free on every tier

A deliberate hook, like feedback. The copy bar works on every plan, no Guild membership required.

Ready to try it?

Create a free account and download crystl for macOS.

get started getting started guide →

Frequently asked questions

How does an agent put text in the copy bar?
Two ways. It runs crystl copy "" with the text inline, or it pipes a command's output into it: | crystl copy. The text appears in the bar under the terminal, ready for you to click Copy.
Can I change the text before copying it?
Yes. The bar is editable. Tweak a value, fix a path, or trim a generated snippet, then click Copy. What you copy is what's in the bar at that moment, not whatever the agent originally sent.
What are the tabs for?
The copy bar holds up to 10 numbered tabs, so an agent emitting several snippets can stage them all at once. A plain crystl copy appends a new tab; --tab N overwrites tab N in place; --label "" names the active tab's chip. Tabs only show once there are two or more.</dd> </div><div class="faq-item" data-astro-cid-z6gx6xcw> <dt data-astro-cid-z6gx6xcw>Does the copy bar shrink my terminal?</dt> <dd data-astro-cid-z6gx6xcw>No. The window grows taller to make room, with the top edge fixed, so the terminal keeps its size. The bar is half-width and pinned to the left under the terminal, not stretched by the sidebar or workbench chrome.</dd> </div><div class="faq-item" data-astro-cid-z6gx6xcw> <dt data-astro-cid-z6gx6xcw>Is the copy bar free?</dt> <dd data-astro-cid-z6gx6xcw>Yes, on every tier. It's a deliberate hook, like feedback. It's still loopback-gated, so a paired phone needs remote access enabled to use it, but there's no Guild membership required on your Mac.</dd> </div> </dl> </section> <script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How does an agent put text in the copy bar?","acceptedAnswer":{"@type":"Answer","text":"Two ways. It runs crystl copy \"\" with the text inline, or it pipes a command's output into it: | crystl copy. The text appears in the bar under the terminal, ready for you to click Copy."}},{"@type":"Question","name":"Can I change the text before copying it?","acceptedAnswer":{"@type":"Answer","text":"Yes. The bar is editable. Tweak a value, fix a path, or trim a generated snippet, then click Copy. What you copy is what's in the bar at that moment, not whatever the agent originally sent."}},{"@type":"Question","name":"What are the tabs for?","acceptedAnswer":{"@type":"Answer","text":"The copy bar holds up to 10 numbered tabs, so an agent emitting several snippets can stage them all at once. A plain crystl copy appends a new tab; --tab N overwrites tab N in place; --label \"\" names the active tab's chip. Tabs only show once there are two or more."}},{"@type":"Question","name":"Does the copy bar shrink my terminal?","acceptedAnswer":{"@type":"Answer","text":"No. The window grows taller to make room, with the top edge fixed, so the terminal keeps its size. The bar is half-width and pinned to the left under the terminal, not stretched by the sidebar or workbench chrome."}},{"@type":"Question","name":"Is the copy bar free?","acceptedAnswer":{"@type":"Answer","text":"Yes, on every tier. It's a deliberate hook, like feedback. It's still loopback-gated, so a paired phone needs remote access enabled to use it, but there's no Guild membership required on your Mac."}}]}</script> <a href="/book-of-spells" class="reveal-up grimoire glass" data-astro-cid-rzx7afxq> <div class="grimoire-cover" data-astro-cid-rzx7afxq> <img class="grimoire-cover-art" src="/heroes/wizard-agent.png" alt="" aria-hidden="true" loading="lazy" data-astro-cid-rzx7afxq> <div class="grimoire-cover-plate" data-astro-cid-rzx7afxq> <img class="grimoire-mark" src="/favicon.svg" alt="" aria-hidden="true" width="22" height="22" data-astro-cid-rzx7afxq> <span class="grimoire-cover-title" data-astro-cid-rzx7afxq>Book of Spells</span> </div> </div> <div class="grimoire-body" data-astro-cid-rzx7afxq> <span class="grimoire-kicker" data-astro-cid-rzx7afxq>the crystl guild</span> <h2 data-astro-cid-rzx7afxq>Crystl's Book of Spells</h2> <p data-astro-cid-rzx7afxq>Master crystl with a grimoire of powerful prompts. Summon heroes, assemble a party, revive shards, and complete epic quests.</p> <span class="grimoire-cta" data-astro-cid-rzx7afxq>open the book →</span> </div> </a> <section class="more-features" data-astro-cid-ffa2jh4j> <h2 data-astro-cid-ffa2jh4j>More features</h2> <div class="more-features-grid" data-astro-cid-ffa2jh4j> <a href="/features/multitasking" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M6 3h12l4 6-10 13L2 9z"/><path d="M2 9h20"/><path d="M10 9L6 3M14 9l4-6"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Gems & Shards</h3> <p data-astro-cid-ffa2jh4j>Gems, shards, and the Crystal Rail keep every project one click away.</p> </a><a href="/features/action-panels" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z"/><circle cx="12" cy="12" r="3"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Action Panels</h3> <p data-astro-cid-ffa2jh4j>See what every Claude session is doing at a glance.</p> </a><a href="/features/parallel-sessions" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M6 3v12"/><path d="M18 9a3 3 0 100-6 3 3 0 000 6z"/><path d="M6 21a3 3 0 100-6 3 3 0 000 6z"/><path d="M18 9c0 9-12 6-12 12"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Parallel Sessions</h3> <p data-astro-cid-ffa2jh4j>Run multiple Claude instances on the same repo without conflicts.</p> </a><a href="/features/hero-shards" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><line x1="19" y1="8" x2="19" y2="14"/><line x1="22" y1="11" x2="16" y2="11"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Hero Shards</h3> <p data-astro-cid-ffa2jh4j>Summon a single hero as a shard — its own agent, model, and persona — without a quest party.</p> </a><a href="/features/conversation-history" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><circle cx="11" cy="11" r="7"/><path d="M21 21l-4.3-4.3"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>History Navigator</h3> <p data-astro-cid-ffa2jh4j>Browse, jump through, and search every session: conversation and tool calls.</p> </a><a href="/features/token-tracking" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M3 3v18h18"/><path d="m19 9-5 5-4-4-3 3"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Token Tracking</h3> <p data-astro-cid-ffa2jh4j>Track token burn per shard, estimate turns left, and reclaim context window by disabling heavy plugins and skills.</p> </a><a href="/features/task-backlog" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Workbench</h3> <p data-astro-cid-ffa2jh4j>A slide-out task list in every project, backed by a WORKBENCH.md the agent reads and writes with you.</p> </a><a href="/features/prompt-integration" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M4 7V4h16v3"/><path d="M9 20h6"/><path d="M12 4v16"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Prompt Integration</h3> <p data-astro-cid-ffa2jh4j>Facet Inserts give you one-click access to saved prompts, commands, and shortcuts.</p> </a><a href="/features/agent-config-editor" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M9 12h6"/><path d="M9 16h6"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Agent Config Editor</h3> <p data-astro-cid-ffa2jh4j>Create, edit, and manage CLAUDE.md, rules, skills, and agent config files with a block editor, file chooser, and project optimizer.</p> </a><a href="/features/project-optimizer" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M9 11l3 3L22 4"/><path d="M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Project Optimizer</h3> <p data-astro-cid-ffa2jh4j>Scan your project for gaps in agent configuration (missing files, incomplete docs, oversized code, and setup issues) with one-click fixes.</p> </a><a href="/features/starter-templates" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><path d="M14 2v6h6"/><path d="M12 18v-6"/><path d="M9 15h6"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Starter Bundles</h3> <p data-astro-cid-ffa2jh4j>New gems launch with CLAUDE.md, rules, skills, and MCP config, all pre-configured from your bundle library.</p> </a><a href="/features/skills-library" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="m12 3-1.912 5.813a2 2 0 0 1-1.275 1.275L3 12l5.813 1.912a2 2 0 0 1 1.275 1.275L12 21l1.912-5.813a2 2 0 0 1 1.275-1.275L21 12l-5.813-1.912a2 2 0 0 1-1.275-1.275L12 3Z"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Skills Library</h3> <p data-astro-cid-ffa2jh4j>Browse and import agentic skills that teach agents like Claude Code or Codex new tricks: code review, testing, deployment, and more.</p> </a><a href="/features/cavrn" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M4 7V4h16v3"/><path d="M9 20h6"/><path d="M12 4v16"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Cavrn</h3> <p data-astro-cid-ffa2jh4j>The terminal as structured data: every turn, tool call, result, and table captured as agent-readable metadata. Drawn fast on the GPU with Metal.</p> </a><a href="/features/remote-development" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><rect x="2" y="4" width="20" height="16" rx="2"/><path d="M6 12l4-4M6 12l4 4"/><path d="M14 8h4M14 12h2M14 16h4"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Remote Development</h3> <p data-astro-cid-ffa2jh4j>Full crystl integration over SSH: approval panels, file relay, and click-to-open on remote machines.</p> </a><a href="/features/orchestration" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M6 3v12"/><path d="M18 9a3 3 0 100-6 3 3 0 000 6z"/><path d="M6 21a3 3 0 100-6 3 3 0 000 6z"/><path d="M18 9c0 9-12 6-12 12"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Agent Orchestration</h3> <p data-astro-cid-ffa2jh4j>One agent spawns, supervises, and merges the work of many: a control room for a team of coding agents.</p> </a><a href="/features/crystl-quest" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><path d="M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M22 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>crystl Quest</h3> <p data-astro-cid-ffa2jh4j>Assemble a party of specialized agents. Each brings unique skills, coordinates in shared chat, and executes in parallel.</p> </a><a href="/features/screenshot-bar" class="reveal-up more-feature-card glass" data-astro-cid-ffa2jh4j> <div class="more-feature-icon" data-astro-cid-ffa2jh4j> <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" data-astro-cid-ffa2jh4j><rect width="18" height="18" x="3" y="3" rx="2" ry="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"/></svg> </div> <h3 data-astro-cid-ffa2jh4j>Screenshot Bar</h3> <p data-astro-cid-ffa2jh4j>Drag recent screenshots into the terminal. Spotlight-powered, always up to date.</p> </a> </div> </section> </article> </main> <footer class="glass-footer" data-astro-cid-5hce7sga> <div class="footer-grid" data-astro-cid-5hce7sga> <div class="footer-col" data-astro-cid-5hce7sga> <span class="footer-heading" data-astro-cid-5hce7sga>features</span> <a href="/features/multitasking" data-astro-cid-5hce7sga>gems & shards</a> <a href="/features/orchestration" data-astro-cid-5hce7sga>agent orchestration</a> <a href="/features/parallel-sessions" data-astro-cid-5hce7sga>parallel sessions</a> <a href="/features/crystl-quest" data-astro-cid-5hce7sga>crystl quest</a> <a href="/features/hero-shards" data-astro-cid-5hce7sga>hero shards</a> <a href="/features/action-panels" data-astro-cid-5hce7sga>action panels</a> <a href="/features/conversation-history" data-astro-cid-5hce7sga>history navigator</a> <a href="/features/workbench" data-astro-cid-5hce7sga>workbench</a> <a href="/features/prompt-integration" data-astro-cid-5hce7sga>integrated prompts</a> <a href="/features/remote-development" data-astro-cid-5hce7sga>remote development</a> <a href="/features/mobile" data-astro-cid-5hce7sga>crystl on iphone</a> </div> <div class="footer-col" data-astro-cid-5hce7sga> <span class="footer-heading" data-astro-cid-5hce7sga>resources</span> <a href="/docs" data-astro-cid-5hce7sga>docs</a> <a href="/guides" data-astro-cid-5hce7sga>guides</a> <a href="/library" data-astro-cid-5hce7sga>library</a> <a href="/blog" data-astro-cid-5hce7sga>blog</a> <a href="/changelog" data-astro-cid-5hce7sga>changelog</a> <a href="/multitasking-terminal-for-claude-code" data-astro-cid-5hce7sga>for claude code</a> <a href="/multitasking-terminal-for-codex" data-astro-cid-5hce7sga>for codex</a> <a href="/multitasking-terminal-for-antigravity-cli" data-astro-cid-5hce7sga>for antigravity cli</a> </div> <div class="footer-col" data-astro-cid-5hce7sga> <span class="footer-heading" data-astro-cid-5hce7sga>company</span> <a href="/about" data-astro-cid-5hce7sga>about</a> <a href="/pricing" data-astro-cid-5hce7sga>pricing</a> <a href="/affiliates" data-astro-cid-5hce7sga>affiliates</a> <a href="/login" id="footer-sign-in" data-astro-cid-5hce7sga>sign in</a> <a href="/dashboard" id="footer-account" style="display:none;" data-astro-cid-5hce7sga>dashboard</a> </div> <div class="footer-col" data-astro-cid-5hce7sga> <span class="footer-heading" data-astro-cid-5hce7sga>support</span> <a href="/contact" data-astro-cid-5hce7sga>contact</a> <a href="/bug-report" data-astro-cid-5hce7sga>report a bug</a> <a href="/community" data-astro-cid-5hce7sga>join us on slack</a> <div class="footer-atlas" data-astro-cid-5hce7sga> <a href="https://theindieatlas.com/" target="_blank" rel="noopener noreferrer" class="footer-atlas-link" aria-label="The Indie Atlas" data-astro-cid-5hce7sga> <img src="/indie-atlas-logo.png" alt="The Indie Atlas" width="400" height="160" loading="lazy" data-astro-cid-5hce7sga> </a> <p class="footer-atlas-text" data-astro-cid-5hce7sga>discover indie software or list your indie project. <a href="https://theindieatlas.com/" target="_blank" rel="noopener noreferrer" data-astro-cid-5hce7sga>explore.</a></p> </div> </div> </div> <div class="footer-bottom" data-astro-cid-5hce7sga> <div class="footer-legal" data-astro-cid-5hce7sga> <a href="/privacy" data-astro-cid-5hce7sga>privacy policy</a> <span class="footer-dot" data-astro-cid-5hce7sga>·</span> <a href="/terms" data-astro-cid-5hce7sga>terms & conditions</a> <span class="footer-dot" data-astro-cid-5hce7sga>·</span> <a href="/acknowledgments" data-astro-cid-5hce7sga>acknowledgments</a> <span class="footer-dot" data-astro-cid-5hce7sga>·</span> <button type="button" class="footer-cookie-btn" onclick="window.klaro && window.klaro.show()" data-astro-cid-5hce7sga>cookie preferences</button> </div> <div class="footer-badge" data-astro-cid-5hce7sga> <a href="https://tools.launchllama.co?utm_source=badge&utm_medium=referral" target="_blank" rel="noopener noreferrer" data-astro-cid-5hce7sga> <img src="https://speaktechenglish.com/wp-content/uploads/2026/04/Screenshot_2026-04-09_at_17.40.44-removebg-preview.png" alt="Featured on Launch Llama" width="200" height="50" loading="lazy" data-astro-cid-5hce7sga> </a> </div> <p data-astro-cid-5hce7sga>© 2026 crystl.</p> </div> </footer> <div id="search-overlay" class="search-overlay" hidden data-astro-cid-xao2j2xx> <div class="search-backdrop" id="search-backdrop" data-astro-cid-xao2j2xx></div> <div class="search-modal glass" role="dialog" aria-modal="true" aria-label="Search the site" data-astro-cid-xao2j2xx> <div class="search-input-row" data-astro-cid-xao2j2xx> <svg class="search-icon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-xao2j2xx><circle cx="11" cy="11" r="8" data-astro-cid-xao2j2xx></circle><path d="m21 21-4.3-4.3" data-astro-cid-xao2j2xx></path></svg> <input id="search-input" class="search-input" type="text" placeholder="Search docs, guides, skills, prompts…" autocomplete="off" autocapitalize="off" spellcheck="false" aria-label="Search query" aria-controls="search-results" data-astro-cid-xao2j2xx> <kbd class="search-esc" data-astro-cid-xao2j2xx>esc</kbd> </div> <div class="search-results" id="search-results" role="listbox" aria-label="Search results" data-astro-cid-xao2j2xx></div> <div class="search-footer" data-astro-cid-xao2j2xx> <span data-astro-cid-xao2j2xx><kbd data-astro-cid-xao2j2xx>↑</kbd><kbd data-astro-cid-xao2j2xx>↓</kbd> navigate</span> <span data-astro-cid-xao2j2xx><kbd data-astro-cid-xao2j2xx>↵</kbd> open</span> <span data-astro-cid-xao2j2xx><kbd data-astro-cid-xao2j2xx>esc</kbd> close</span> </div> </div> </div> <script type="module" src="/_astro/SearchPalette.astro_astro_type_script_index_0_lang.BTReRcVk.js"></script> <!-- Scroll reveal: add .is-visible to .reveal-up elements as they enter view --> <script> (function () { function reveal(el) { el.classList.add('is-visible'); el.addEventListener('animationend', function () { el.style.willChange = 'auto'; }, { once: true }); } function els() { return document.querySelectorAll('.reveal-up:not(.is-visible)'); } if (!('IntersectionObserver' in window)) { els().forEach(reveal); return; } var io = new IntersectionObserver(function (entries) { var i = 0; entries.forEach(function (e) { if (e.isIntersecting) { e.target.style.animationDelay = (i * 90) + 'ms'; reveal(e.target); io.unobserve(e.target); i++; } }); }, { threshold: 0.1, rootMargin: '0px 0px -120px 0px' }); function init() { els().forEach(function (el) { io.observe(el); }); } if (document.readyState !== 'loading') init(); else document.addEventListener('DOMContentLoaded', init); })(); </script> </body> </html> <script type="module">const t=document.getElementById("demo-frame"),e=t?.querySelector("iframe");if(t&&e){let r=function(){n&&o&&!s&&(s=!0,e.contentWindow.postMessage("start-demo","*"))},s=!1,n=!1,o=!1;e.addEventListener("load",()=>{n=!0,r()});const a=new IntersectionObserver(([d])=>{d.isIntersecting&&(o=!0,r(),a.disconnect())},{threshold:.2});a.observe(t)}</script> <!-- Self-contained component demos (not iframes) opt the frame out of the fixed iframe height and the no-iframe hide rule. -->