{"compiledCode":"\"use strict\";Object.defineProperty(exports, \"__esModule\", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }/** Cedros About · Product explanation · One self-contained Raw Code block. */\nvar _react = require('react');\n\n\n\n\nconst CONTENT = {\n  \"title\": \"The operating system for AI built businesses.\",\n  \"intro\": \"Cedros is a website platform with publishing, customer management, communication, and commerce in one workspace. Its built-in assistant can use the tools and records behind your site to help you build and run it.\",\n  \"intro2\": \"Build and run your website on Cedros. Manage it directly, work with the built-in assistant, or connect a compatible AI tool you already use.\",\n  \"glance\": [\n    [\n      \"For your customers\",\n      \"A website under your brand\"\n    ],\n    [\n      \"For your team\",\n      \"One workspace for the work behind it\"\n    ],\n    [\n      \"For your assistant\",\n      \"Business context and tools you control\"\n    ]\n  ],\n  \"sections\": [\n    {\n      \"id\": \"product\",\n      \"nav\": \"The product\",\n      \"title\": \"Your website and the work behind it.\",\n      \"paragraphs\": [\n        \"A Cedros site has a public website and a private workspace. Customers browse your pages, read your documentation, submit inquiries, book appointments, or buy. Your team manages the content, customer records, and services behind those experiences.\",\n        \"The assistant works with those records through tools. A page it drafts appears in the page builder. A customer it looks up is a record in your CRM. You can move between conversation and the workspace to inspect the work and continue it yourself.\"\n      ],\n      \"entrances\": [\n        [\n          \"Customers\",\n          \"Use your website\",\n          \"Read, sign in, inquire, book, buy\"\n        ],\n        [\n          \"Your team\",\n          \"Manage the business\",\n          \"Edit content, follow up, review work\"\n        ],\n        [\n          \"Your assistant\",\n          \"Work through tools\",\n          \"Find information, prepare drafts, make permitted changes\"\n        ]\n      ],\n      \"shared\": \"Site content · Customer records · Business context · Connected services\",\n      \"note\": \"Each person and assistant has its own access. Private documents and customer records stay subject to their permissions.\"\n    },\n    {\n      \"id\": \"foundation\",\n      \"nav\": \"Why the website\",\n      \"title\": \"The website is where information becomes action.\",\n      \"paragraphs\": [\n        \"Your website is where people learn what you offer and decide what to do next. Product pages, documentation, forms, and checkout all depend on accurate business information. That makes the website a practical home for the context and tools an assistant needs.\",\n        \"In Cedros, the assistant can retrieve the content and records behind these experiences, then use tools to work with them. It can help build the site and keep helping after launch—with updates, customer follow-up, campaigns, and recurring work.\",\n        \"This is the connection Cedros is built for: AI helping people create and operate businesses, and agents helping customers find and interact with them. People use a familiar website. Authorized software uses defined interfaces to the same site.\"\n      ],\n      \"example\": {\n        \"label\": \"Example workflow · A new software plan\",\n        \"title\": \"Prepare the launch from one set of plan details.\",\n        \"steps\": [\n          [\n            \"Provide the details\",\n            \"Add the plan’s audience, features, pricing, and launch date to the project documents.\"\n          ],\n          [\n            \"Prepare the materials\",\n            \"Ask the assistant to draft the pricing page, related documentation, and a customer announcement from those sources.\"\n          ],\n          [\n            \"Review and publish\",\n            \"Check the drafts and recipients, then publish the content and send the announcement when ready.\"\n          ]\n        ],\n        \"note\": \"Updating the source documents does not automatically change subscription prices or publish the drafts. Those remain separate actions.\"\n      }\n    },\n    {\n      \"id\": \"capabilities\",\n      \"nav\": \"Product capabilities\",\n      \"title\": \"From publishing to daily operations.\",\n      \"paragraphs\": [\n        \"Cedros combines core website and business tools with installable extensions. AI, email, storage, and other services use configured providers; your plan and setup determine which services are available. Explore each area below for the work it supports.\"\n      ],\n      \"groups\": [\n        {\n          \"id\": \"publishing\",\n          \"title\": \"Website & publishing\",\n          \"summary\": \"Pages, design, content, media, and search visibility\",\n          \"guide\": \"/page-docs/site-seo.md\",\n          \"guideLabel\": \"Website SEO guide (Markdown)\",\n          \"items\": [\n            [\n              \"Website & page builder\",\n              \"Compose pages from visual blocks, preview changes, and publish. Work with drafts and revisions, or use custom React for a page with its own layout and interactions.\"\n            ],\n            [\n              \"Themes & navigation\",\n              \"Set typography, colors, layouts, and menus. Keep the site’s presentation consistent as you add pages and content.\"\n            ],\n            [\n              \"Blogs, docs & FAQs\",\n              \"Publish articles, maintain product documentation, and answer recurring questions. Keep these resources organized alongside your main website.\"\n            ],\n            [\n              \"Media & links\",\n              \"Organize images and files in the media library and reuse them across content. Build link pages for collections of resources, profiles, or destinations.\"\n            ],\n            [\n              \"SEO & site health\",\n              \"Control titles, descriptions, structured data, sitemaps, and redirects. Check page speed, service health, and whether search engines and AI crawlers can discover your site.\"\n            ]\n          ]\n        },\n        {\n          \"id\": \"context\",\n          \"title\": \"Business context & assistant work\",\n          \"summary\": \"Documents, memory, instructions, tasks, and routines\",\n          \"guide\": \"/page-docs/assistant-settings.md\",\n          \"guideLabel\": \"Assistant settings guide (Markdown)\",\n          \"items\": [\n            [\n              \"Knowledge\",\n              \"Store team documents in projects and folders. Select source material for new assistant tasks so the work starts with the right references.\"\n            ],\n            [\n              \"Memory\",\n              \"Review the context and preferences your assistant has saved. Correct outdated notes or remove information you no longer want it to retain.\"\n            ],\n            [\n              \"Skills & instructions\",\n              \"Give the assistant reusable instructions for repeatable work. Enable the skills you need and edit their guidance.\"\n            ],\n            [\n              \"Tasks, routines & recommendations\",\n              \"Track assistant work, schedule recurring routines, and review recommendations about content, campaigns, and site health.\"\n            ]\n          ]\n        },\n        {\n          \"id\": \"relationships\",\n          \"title\": \"Customers & communication\",\n          \"summary\": \"CRM, forms, inbox, support, and appointments\",\n          \"guide\": \"/page-docs/support-chats.md\",\n          \"guideLabel\": \"Support chat guide (Markdown)\",\n          \"items\": [\n            [\n              \"CRM\",\n              \"Keep customer profiles, tags, notes, and activity together so the relationship history is at hand when you follow up.\"\n            ],\n            [\n              \"Forms\",\n              \"Define fields and validation, collect submissions, and review incoming requests in the workspace.\"\n            ],\n            [\n              \"Email\",\n              \"Read incoming mail, prepare draft replies, and schedule sends. Enable assistant tools to help with the inbox and follow-up.\"\n            ],\n            [\n              \"Support\",\n              \"Offer AI answers, human replies, or both. Follow visitor conversations, take over from AI, and resolve requests from the workspace.\"\n            ],\n            [\n              \"Bookings\",\n              \"Set appointment types and availability, and publish a booking page. Connect a supported calendar for availability and event sync.\"\n            ]\n          ]\n        },\n        {\n          \"id\": \"audience\",\n          \"title\": \"Marketing & measurement\",\n          \"summary\": \"Campaigns, audience lists, social scheduling, and analytics\",\n          \"guide\": \"/page-docs/campaigns.md\",\n          \"guideLabel\": \"Email campaign guide (Markdown)\",\n          \"items\": [\n            [\n              \"Campaigns & lists\",\n              \"Create email campaigns, select audience lists, schedule sends, and review delivery and engagement. Reuse templates and build sequences for follow-up.\"\n            ],\n            [\n              \"Social\",\n              \"Plan posts, prepare copy and media, and track posting status in the calendar. Schedule reminders for posts that need to be published manually.\"\n            ],\n            [\n              \"Analytics\",\n              \"See where visitors come from, what they read and search for, and how they move through the site. Review revenue alongside activity when payment data is available.\"\n            ]\n          ]\n        },\n        {\n          \"id\": \"commerce\",\n          \"title\": \"Accounts & commerce\",\n          \"summary\": \"Sign-in, payments, storefronts, and contract workflows\",\n          \"guide\": \"/page-docs/extensions.md\",\n          \"guideLabel\": \"Extensions guide (Markdown)\",\n          \"items\": [\n            [\n              \"Cedros Login\",\n              \"Add customer authentication, sign-in, and accounts through the Login extension. Use those identities in experiences built for signed-in customers.\"\n            ],\n            [\n              \"Cedros Pay\",\n              \"Accept payments, manage subscriptions, and provide credits or paid access. Configure the payment methods your business needs through the Pay extension.\"\n            ],\n            [\n              \"Cedros Shop\",\n              \"Build a storefront with product pages, a cart, and checkout using the Shop extension and connected Cedros commerce services.\"\n            ],\n            [\n              \"Contracts\",\n              \"Create reusable document templates, send signature requests, and track the status of each request.\"\n            ]\n          ]\n        },\n        {\n          \"id\": \"operations\",\n          \"title\": \"Data & operations\",\n          \"summary\": \"Credentials, recovery, access, logs, and custom data\",\n          \"guide\": \"/page-docs/backups.md\",\n          \"guideLabel\": \"Backup and recovery guide (Markdown)\",\n          \"items\": [\n            [\n              \"Vault\",\n              \"Keep shared passwords and credentials in a password manager. Use collection access controls to choose which team members and assistants can use them.\"\n            ],\n            [\n              \"Backups\",\n              \"Schedule daily encrypted backups, download retained copies, and restore a selected backup point. Configure remote storage for offsite copies.\"\n            ],\n            [\n              \"Team & access\",\n              \"Manage team accounts and permissions, and control who can access your site. Set assistant and MCP key access separately.\"\n            ],\n            [\n              \"Logs & service health\",\n              \"Inspect server logs, track AI usage and spending, and check email delivery health.\"\n            ],\n            [\n              \"Custom data & extensions\",\n              \"Define database collections for your application’s data and add custom behavior through extensions. Their access to host services is controlled by declared permissions.\"\n            ]\n          ]\n        }\n      ]\n    },\n    {\n      \"id\": \"assistant\",\n      \"nav\": \"Working with AI\",\n      \"title\": \"Choose how you work with AI.\",\n      \"paragraphs\": [\n        \"Use the built-in assistant for day-to-day work or connect a compatible assistant you already use. Both approaches work through the site’s tools, with access determined by the account or API key.\",\n        \"The built-in assistant can draw on the conversation, documents, saved memory, and records retrieved through tools. Documents and memory are managed separately, so you can distinguish source material from the notes the assistant has saved.\"\n      ],\n      \"rows\": [\n        [\n          \"Built-in assistant\",\n          \"Work in the Cedros workspace with configurable models, tools, memory, and skills. Use Cedros-managed providers where available, or connect your own supported providers and API keys.\"\n        ],\n        [\n          \"Your existing assistant\",\n          \"Connect Codex, Claude Code, or another MCP-compatible client to your site’s endpoint. MCP lets the client discover and call tools; a scoped API key controls which ones it can use. The connection guide provides the setup steps.\"\n        ],\n        [\n          \"Visitor support\",\n          \"Configure customer-facing chat separately from the owner’s assistant. Choose AI, human support, or a combination. Your team can monitor conversations and take over when a customer needs a person.\"\n        ]\n      ],\n      \"links\": [\n        [\n          \"Connect an AI tool (Markdown)\",\n          \"/connect.md\"\n        ],\n        [\n          \"Provider configuration (Markdown)\",\n          \"/page-docs/providers.md\"\n        ]\n      ],\n      \"note\": \"AI responses are processed by the configured model provider. Review its data terms when deciding which business information to make available.\"\n    },\n    {\n      \"id\": \"control\",\n      \"nav\": \"Permissions & control\",\n      \"title\": \"You decide what AI can read and change.\",\n      \"paragraphs\": [\n        \"Set an assistant access level for the site, then adjust individual areas such as pages, customer records, and email. None, Read, Edit, and Publish determine which tools are available. Account permissions and each tool’s write mode still apply.\",\n        \"For example, allow the assistant to edit page drafts while keeping publishing access for yourself. You can inspect its work in the builder before making it live. Grant Publish when you want the assistant to perform supported publishing actions directly.\"\n      ],\n      \"levels\": [\n        [\n          \"None\",\n          \"Keep tools in this area unavailable.\"\n        ],\n        [\n          \"Read\",\n          \"Look up information without changing it.\"\n        ],\n        [\n          \"Edit\",\n          \"Make changes through permitted editing tools.\"\n        ],\n        [\n          \"Publish\",\n          \"Perform supported publishing and sending actions.\"\n        ]\n      ],\n      \"rows\": [\n        [\n          \"Access for people and assistants\",\n          \"Manage team permissions for people and scoped MCP keys for external assistants. Keep sensitive access limited to the work required, and revoke keys when they are no longer needed.\"\n        ],\n        [\n          \"History you can inspect\",\n          \"Pages have revisions, campaigns record sending status, and tasks and routines have their own histories. The available record and recovery options depend on the action.\"\n        ],\n        [\n          \"Extension permissions\",\n          \"An extension declares which host services and data it needs. Its server code runs in a WebAssembly sandbox and reaches those services through granted interfaces. You can review that access before enabling it.\"\n        ]\n      ],\n      \"links\": [\n        [\n          \"Tool access and assistant settings (Markdown)\",\n          \"/page-docs/assistant-settings.md\"\n        ]\n      ]\n    },\n    {\n      \"id\": \"building\",\n      \"nav\": \"Building & extending\",\n      \"title\": \"Build visually, with AI, or in code.\",\n      \"paragraphs\": [\n        \"Use the page builder for everyday publishing, ask an assistant to create the site, or write your own interface. Cedros provides the content system, customer tools, and extension interfaces you can build on.\",\n        \"For a SaaS business, that can mean a marketing site and documentation alongside sign-in, paid access, and a custom application. For a service business, it can mean inquiries, bookings, contracts, and customer communication. You build the experience around the systems your business needs.\"\n      ],\n      \"rows\": [\n        [\n          \"Visual pages & themes\",\n          \"Compose pages from blocks and control their presentation through themes. Editors can maintain the site’s content and layout in the page builder.\"\n        ],\n        [\n          \"Custom React pages\",\n          \"Write a page’s interface and interactions in React within the Cedros page runtime. This suits experiences that need a custom layout or behavior while remaining part of the site.\"\n        ],\n        [\n          \"Installable extensions\",\n          \"Package reusable features such as page blocks, admin workflows, APIs, jobs, and AI tools. Web interfaces use React; server behavior uses Rust compiled to WebAssembly. Native interfaces have their own runtime requirements.\"\n        ]\n      ],\n      \"note\": \"Your website runs on Cedros. Bringing an existing codebase means adapting its imports, routing, data access, and dependencies to the page or extension runtime, then testing the result.\",\n      \"links\": [\n        [\n          \"Custom pages and extension building (Markdown)\",\n          \"/page-docs/extension-builder.md\"\n        ],\n        [\n          \"Installing and managing extensions (Markdown)\",\n          \"/page-docs/extensions.md\"\n        ]\n      ]\n    },\n    {\n      \"id\": \"adoption\",\n      \"nav\": \"Moving to Cedros\",\n      \"title\": \"Plan your move to Cedros.\",\n      \"paragraphs\": [\n        \"Start with the website you need and the work it should support. Map that to Cedros’s built-in tools, the extensions you will use, and any custom features or external services you will keep.\"\n      ],\n      \"rows\": [\n        [\n          \"Building a new site\",\n          \"Create the site, set its theme, and build the pages. Configure the services your customer journey needs—such as email, bookings, or checkout—then test that journey before launch.\"\n        ],\n        [\n          \"Migrating content\",\n          \"Import supported WordPress exports or data from MongoDB and PostgreSQL. Map fields to Cedros destinations and preview the result before importing. Content migration and rebuilding a theme, plugin, or custom feature are separate parts of the move.\"\n        ],\n        [\n          \"Hosting & your domain\",\n          \"Cedros supports managed and self-managed deployments, and your site can use your own domain. Establish who operates the server, database, email, and storage, then verify routing before moving traffic.\"\n        ],\n        [\n          \"Plans & running costs\",\n          \"Compare the site plan with expected AI usage, email volume, storage, and any extension or payment-provider charges. Use the pricing page for current allowances and discuss requirements that fall outside them.\"\n        ],\n        [\n          \"Export & recovery\",\n          \"Setup export moves structure and configuration between Cedros sites; it excludes content and customer history. Backups provide recovery to a selected backup point. Keep the encryption phrase separately so those backups remain recoverable.\"\n        ],\n        [\n          \"Your essential workflows\",\n          \"Try the flows your business depends on, such as sign-up, purchase, customer support, or a custom application task. Confirm the required integrations and extension behavior on a working site before committing to the move.\"\n        ]\n      ],\n      \"links\": [\n        [\n          \"Migration guide (Markdown)\",\n          \"/page-docs/migrate.md\"\n        ],\n        [\n          \"Domain setup (Markdown)\",\n          \"/page-docs/site-domains.md\"\n        ],\n        [\n          \"Import and export scope (Markdown)\",\n          \"/page-docs/import-export.md\"\n        ]\n      ]\n    }\n  ],\n  \"next\": {\n    \"title\": \"Have a site in mind?\",\n    \"text\": \"Explore the plans, start building, or talk to us about your current site and what it needs to do.\",\n    \"links\": [\n      [\n        \"Compare plans\",\n        \"/pricing\"\n      ],\n      [\n        \"Talk about your website\",\n        \"/contact\"\n      ],\n      [\n        \"Create a site\",\n        \"/register\"\n      ]\n    ]\n  }\n};\n\nconst CATALOG = _nullishCoalesce(_optionalChain([CONTENT, 'access', _ => _.sections, 'access', _2 => _2.find, 'call', _3 => _3(section => section.id === \"capabilities\"), 'optionalAccess', _4 => _4.groups]), () => ( []));\nfunction filterCatalog(query) {\n  const words = query.trim().toLowerCase().split(/\\s+/).filter(Boolean);\n  return CATALOG.map(group => ({ ...group, items: group.items.filter(item => words.every(word => `${group.title} ${group.summary} ${item.join(\" \")}`.toLowerCase().includes(word))) })).filter(group => group.items.length);\n}\n\nfunction Catalog() {\n  const [query, setQuery] = _react.useState.call(void 0, \"\");\n  const [expanded, setExpanded] = _react.useState([CATALOG[0].id]);\n  const input = _react.useRef(null);\n  const groups = filterCatalog(query), searching = Boolean(query.trim());\n  const total = groups.reduce((sum, group) => sum + group.items.length, 0);\n  return React.createElement('div', { className: \"ca-catalog\",}\n    , React.createElement('div', { className: \"ca-search\",}, React.createElement('label', { htmlFor: \"about-find\",}, \"Find a capability\"  ), React.createElement('div', null, React.createElement('input', { ref: input, id: \"about-find\", type: \"search\", value: query, onChange: event => setQuery(event.target.value), placeholder: \"Try payments, email, or backups\"    ,} ), query && React.createElement('button', { type: \"button\", onClick: () => { setQuery(\"\"); _optionalChain([input, 'access', _5 => _5.current, 'optionalAccess', _6 => _6.focus, 'call', _7 => _7()]); },}, \"Clear\")))\n    , React.createElement('p', { className: \"ca-search-status\", role: \"status\",}, searching ? `${total} ${total === 1 ? \"capability\" : \"capabilities\"} found` : \"Open an area to see what it does.\")\n    , React.createElement('div', { className: \"ca-groups\",}, groups.map(group => {\n      const open = searching || expanded.includes(group.id);\n      return React.createElement('div', { className: \"ca-group\", key: group.id,}\n        , React.createElement('h3', null, React.createElement('button', { type: \"button\", id: `about-group-${group.id}`, 'aria-expanded': open, 'aria-controls': `about-items-${group.id}`, onClick: () => { if (searching) return; setExpanded(previous => previous.includes(group.id) ? previous.filter(id => id !== group.id) : [...previous, group.id]); }, 'aria-disabled': searching || undefined,}\n          , React.createElement('span', null, React.createElement('span', { className: \"ca-group-title\",}, group.title), React.createElement('span', { className: \"ca-group-summary\",}, group.summary)), React.createElement('span', { className: \"ca-plus\", 'aria-hidden': \"true\",}, open ? \"−\" : \"+\")\n        ))\n        , React.createElement('div', { className: \"ca-group-body\", id: `about-items-${group.id}`, role: \"region\", 'aria-labelledby': `about-group-${group.id}`, hidden: !open,}\n          , React.createElement('dl', null, group.items.map(([title, description]) => React.createElement('div', { key: title,}, React.createElement('dt', null, title), React.createElement('dd', null, description))))\n          , React.createElement('a', { className: \"ca-link\", href: group.guide,}, group.guideLabel, React.createElement('span', { 'aria-hidden': \"true\",}, \" ↗\" ))\n        )\n      );\n    }))\n    , !groups.length && React.createElement('div', { className: \"ca-empty\",}, React.createElement('h3', null, \"No matching capabilities.\"  ), React.createElement('p', null, \"Try a broader term, or clear the search to browse every product area.\"            ))\n  );\n}\n\nfunction Links({ links }) {\n  return React.createElement('div', { className: \"ca-links\",}, links.map(([label, href]) => React.createElement('a', { className: \"ca-link\", key: href, href: href,}, label, React.createElement('span', { 'aria-hidden': \"true\",}, \" ↗\" ))));\n}\n\nfunction Chapter({ section, index }) {\n  return React.createElement('section', { className: \"ca-chapter\", id: `about-${section.id}`, 'aria-labelledby': `about-${section.id}-title`,}\n    , React.createElement('p', { className: \"ca-kicker\",}, String(index + 1).padStart(2, \"0\"), \" / \"  , section.nav)\n    , React.createElement('h2', { id: `about-${section.id}-title`, tabIndex: -1,}, section.title)\n    , React.createElement('div', { className: \"ca-prose\",}, section.paragraphs.map(text => React.createElement('p', { key: text,}, text)))\n    , section.entrances && React.createElement('figure', { className: \"ca-system\",}, React.createElement('div', { className: \"ca-entrances\",}, section.entrances.map(([who, entry, detail]) => React.createElement('div', { key: who,}, React.createElement('span', null, who), React.createElement('h3', null, entry), React.createElement('p', null, detail)))), React.createElement('div', { className: \"ca-system-state\",}, React.createElement('span', { className: \"ca-system-label\",}, \"The same Cedros site\"   ), React.createElement('p', null, section.shared)), React.createElement('figcaption', null, section.note))\n    , section.example && React.createElement('aside', { className: \"ca-example\", 'aria-label': section.example.label,}, React.createElement('p', { className: \"ca-caption\",}, section.example.label), React.createElement('h3', null, section.example.title), React.createElement('ol', null, section.example.steps.map(([title, text], i) => React.createElement('li', { key: title,}, React.createElement('span', { className: \"ca-step-number\", 'aria-hidden': \"true\",}, i + 1), React.createElement('div', null, React.createElement('h4', null, title), React.createElement('p', null, text))))), React.createElement('p', { className: \"ca-example-note\",}, section.example.note))\n    , section.groups && React.createElement(Catalog, null)\n    , section.levels && React.createElement('div', { className: \"ca-permissions\",}, React.createElement('p', { className: \"ca-caption\",}, \"Tool access levels\"  ), React.createElement('dl', null, section.levels.map(([level, detail], index) => React.createElement('div', { key: level,}, React.createElement('dt', null, React.createElement('span', { 'aria-hidden': \"true\",}, \"0\", index), level), React.createElement('dd', null, detail)))))\n    , section.rows && React.createElement('dl', { className: \"ca-rows\",}, section.rows.map(([title, detail]) => React.createElement('div', { key: title,}, React.createElement('dt', null, title), React.createElement('dd', null, detail))))\n    , section.note && !section.entrances && React.createElement('p', { className: \"ca-note\",}, section.note)\n    , section.links && React.createElement(Links, { links: section.links,})\n  );\n}\n\n function About() {\n  const [active, setActive] = _react.useState.call(void 0, CONTENT.sections[0].id);\n  const root = _react.useRef(null);\n  const goToChapter = (event, id) => {\n    if (event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey) return;\n    const heading = _optionalChain([root, 'access', _8 => _8.current, 'optionalAccess', _9 => _9.querySelector, 'call', _10 => _10(`#about-${id}-title`)]);\n    if (!heading) return;\n    event.preventDefault();\n    const url = new URL(window.location.href);\n    url.hash = heading.id;\n    window.history.replaceState(window.history.state, \"\", url);\n    heading.focus({ preventScroll: true });\n    _optionalChain([heading, 'access', _11 => _11.scrollIntoView, 'optionalCall', _12 => _12({ block: \"start\", behavior: \"instant\" })]);\n    setActive(id);\n  };\n  _react.useEffect.call(void 0, () => {\n    if (!(\"IntersectionObserver\" in window)) return;\n    const observer = new IntersectionObserver(entries => {\n      for (const entry of entries) if (entry.isIntersecting) setActive(entry.target.id.replace(\"about-\", \"\"));\n    }, { rootMargin: \"-18% 0px -65% 0px\", threshold: 0 });\n    _optionalChain([root, 'access', _13 => _13.current, 'optionalAccess', _14 => _14.querySelectorAll, 'call', _15 => _15(\".ca-chapter\"), 'access', _16 => _16.forEach, 'call', _17 => _17(section => observer.observe(section))]);\n    return () => observer.disconnect();\n  }, []);\n  return React.createElement('div', { className: \"ca-about\", ref: root,}\n    , React.createElement('style', null, STYLES)\n    , React.createElement('header', { className: \"ca-hero\",}, React.createElement('div', { className: \"ca-width\",}, React.createElement('p', { className: \"ca-kicker\",}, \"About Cedros\" ), React.createElement('div', { className: \"ca-hero-grid\",}, React.createElement('div', null, React.createElement('h1', null, CONTENT.title), React.createElement('p', { className: \"ca-intro\",}, CONTENT.intro), React.createElement('p', null, CONTENT.intro2)), React.createElement('aside', { className: \"ca-glance\", 'aria-label': \"Cedros at a glance\"   ,}, React.createElement('p', { className: \"ca-caption\",}, \"At a glance\"  ), React.createElement('dl', null, CONTENT.glance.map(([title, detail]) => React.createElement('div', { key: title,}, React.createElement('dt', null, title), React.createElement('dd', null, detail)))), React.createElement('a', { className: \"ca-link\", href: \"#about-product-title\", 'data-cedros-full-navigation': \"true\", onClick: event => goToChapter(event, \"product\"),}, \"Read the overview\"  , React.createElement('span', { 'aria-hidden': \"true\",}, \" ↓\" ))))))\n    , React.createElement('div', { className: \"ca-width ca-layout\" ,}, React.createElement('nav', { className: \"ca-index\", 'aria-label': \"On this page\"  ,}, React.createElement('p', { className: \"ca-caption\",}, \"On this page\"  ), CONTENT.sections.map((section, i) => React.createElement('a', { key: section.id, href: `#about-${section.id}-title`, 'aria-current': active === section.id ? \"location\" : undefined, 'data-cedros-full-navigation': \"true\", onClick: event => goToChapter(event, section.id),}, React.createElement('span', { 'aria-hidden': \"true\",}, String(i + 1).padStart(2, \"0\")), section.nav))), React.createElement('div', { className: \"ca-reading\",}, CONTENT.sections.map((section, index) => React.createElement(Chapter, { key: section.id, section: section, index: index,}))))\n    , React.createElement('section', { className: \"ca-next\",}, React.createElement('div', { className: \"ca-width\",}, React.createElement('div', null, React.createElement('p', { className: \"ca-kicker\",}, \"Further reading & getting started\"    ), React.createElement('h2', null, CONTENT.next.title), React.createElement('p', null, CONTENT.next.text)), React.createElement(Links, { links: CONTENT.next.links,})))\n  );\n} exports.default = About;\n\nconst STYLES = `\n.ca-about{--ca-bg:#F6F5F2;--ca-paper:#FFFDF7;--ca-fg:#07111F;--ca-dim:#565B59;--ca-line:#D3D6CE;--ca-accent:#315B59;--ca-tint:#E8ECE5;--ca-dark:#0D0D0E;--ca-bone:#F6F5F2;--ca-serif:var(--cedros-font-heading,\"Newsreader\",\"Iowan Old Style\",Palatino,Georgia,serif);--ca-sans:var(--cedros-font-body,\"IBM Plex Sans\",\"Avenir Next\",\"Segoe UI\",sans-serif);--ca-mono:var(--cedros-font-mono,\"IBM Plex Mono\",ui-monospace,monospace);color-scheme:light;position:relative;width:100%;overflow-x:clip;background:var(--ca-paper);color:var(--ca-fg);font:400 1rem/1.65 var(--ca-sans);-webkit-font-smoothing:antialiased}\n:where(html[class*=\"-dark\"],.dark) .ca-about{--ca-bg:#202523;--ca-paper:#151A18;--ca-fg:#F6F5F2;--ca-dim:#B8C0BA;--ca-line:#3C4640;--ca-accent:#A5C4B3;--ca-tint:#29352E;color-scheme:dark}\n.ca-about *,.ca-about *:before,.ca-about *:after{box-sizing:border-box}.ca-about :is(h1,h2,h3,h4,p,dl,dd,figure,ol){margin:0}.ca-about a{color:inherit}.ca-about :is(button,input){font:inherit;color:inherit}.ca-about :is(a,button,input):focus-visible{outline:2px solid var(--ca-accent);outline-offset:4px}.ca-about h2:focus{outline:none}.ca-about [hidden]{display:none!important}.ca-about ::selection{background:var(--ca-tint)}\nmain[class*=\"-site__main\"]:has(.ca-about){padding:0}main[class*=\"-site__main\"] :is([class*=\"-site__container\"],[class*=\"-site__page-stack\"]):has(.ca-about){width:100%;max-width:none;gap:0}main[class*=\"-site__main\"] :is([class*=\"-site__authored-runtime\"],[class*=\"-site__authored-document\"],[class*=\"-site__authored-zone\"]):has(.ca-about){gap:0;padding:0;margin:0}main[class*=\"-site__main\"] [class*=\"-site__authored-document\"]:has(.ca-about){display:block}main[class*=\"-site__main\"] [class*=\"-runtime__block\"]:has(.ca-about){display:block;gap:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}\nbody:has(.ca-about) header[class*=\"-theme-shell-nav--overlay\"]{color:#07111F;background:#F6F5F2}html[class*=\"-dark\"] body:has(.ca-about) header[class*=\"-theme-shell-nav--overlay\"]{color:#F6F5F2;background:#202523}\n.ca-about .ca-width{width:min(78rem,calc(100% - 6rem));margin-inline:auto}.ca-kicker{font-size:.72rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--ca-accent)}.ca-caption{font:400 .76rem/1.6 var(--ca-mono);color:var(--ca-dim)}\n.ca-hero{background:var(--ca-bg);border-bottom:1px solid var(--ca-line);padding:7rem 0 5rem}.ca-hero-grid{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(16rem,1fr);gap:clamp(3rem,7vw,8rem);margin-top:1.5rem;align-items:end}.ca-about h1{font:400 clamp(3rem,5.8vw,5.5rem)/1.04 var(--ca-serif);letter-spacing:-.035em}.ca-hero .ca-intro{text-wrap:pretty;font-size:1.15rem;line-height:1.65;color:var(--ca-fg);margin:1.7rem 0 1rem}.ca-hero-grid>div>p:last-child{color:var(--ca-dim);max-width:62ch}.ca-glance{border-top:1px solid var(--ca-accent);padding-top:1.3rem}.ca-glance dl{margin:1.2rem 0 1.7rem}.ca-glance dl>div{padding:.85rem 0;border-bottom:1px solid var(--ca-line)}.ca-glance dt{font-size:.76rem;color:var(--ca-dim)}.ca-glance dd{font-size:.95rem;margin-top:.2rem}.ca-link{display:inline-flex;gap:.6rem;align-items:center;min-height:44px;text-decoration:underline;text-decoration-color:var(--ca-line);text-underline-offset:.35em;font-size:.87rem}.ca-link:hover{text-decoration-color:currentColor}.ca-links{display:flex;gap:.5rem 1.8rem;flex-wrap:wrap;margin-top:1.7rem}\n.ca-layout{display:grid;grid-template-columns:13.5rem minmax(0,1fr);gap:5rem;align-items:start}.ca-index{position:sticky;top:6rem;padding-block:3.5rem 2rem}.ca-index>.ca-caption{margin-bottom:1rem}.ca-index a{display:flex;align-items:baseline;gap:.65rem;min-height:44px;padding:.65rem 0 .65rem .85rem;border-left:2px solid transparent;font-size:.82rem;line-height:1.5;color:var(--ca-dim);text-decoration:none;transition:color .15s,border-color .15s}.ca-index a>span{font-family:var(--ca-mono);font-size:.68rem}.ca-index a[aria-current]{border-color:var(--ca-accent);color:var(--ca-fg)}.ca-index a:hover{color:var(--ca-fg)}.ca-reading{min-width:0}.ca-chapter{padding-block:3.5rem;border-bottom:1px solid var(--ca-line);scroll-margin-top:6rem}.ca-chapter:last-child{border-bottom:0;padding-bottom:5rem}.ca-about h2{font:400 clamp(2rem,3.3vw,3.2rem)/1.1 var(--ca-serif);letter-spacing:-.025em;text-wrap:pretty}.ca-chapter h2{margin:1rem 0 1.5rem;max-width:24ch;scroll-margin-top:7rem}.ca-prose{max-width:70ch}.ca-prose p+p{margin-top:1rem}.ca-prose p{color:var(--ca-dim)}\n.ca-system{margin-top:2rem!important;background:var(--ca-dark);color:var(--ca-bone);padding:2rem}.ca-entrances{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1.5rem}.ca-entrances>div{position:relative;padding:0 0 2rem;border-bottom:1px solid #607C6D}.ca-entrances>div:after{content:\"\";position:absolute;left:50%;bottom:-1.5rem;width:1px;height:1.5rem;background:#607C6D}.ca-entrances span{font-size:.72rem;color:#ABC3B6}.ca-entrances h3{font-size:1rem;font-weight:500;margin:.5rem 0}.ca-entrances p{font-size:.8rem;line-height:1.6;color:#B8C0BA}.ca-system-state{margin-top:1.5rem;padding:1.3rem;background:#23372D;border:1px solid #607C6D;text-align:center}.ca-system-label{font-size:.92rem;font-weight:500}.ca-system-state p{font-size:.78rem;color:#C4D4CA;margin-top:.5rem}.ca-system figcaption{font-size:.77rem;color:#B8C0BA;margin-top:1.3rem}\n.ca-example{margin-top:2rem;padding:1.8rem 2rem;background:var(--ca-tint);border-left:2px solid var(--ca-accent)}.ca-example h3{font:400 1.75rem/1.2 var(--ca-serif);margin:.7rem 0 1.5rem}.ca-example ol{list-style:none;padding:0;display:grid;gap:1.2rem}.ca-example li{display:flex;gap:1rem}.ca-step-number{font:400 .8rem/1.7 var(--ca-mono);color:var(--ca-accent);padding-top:.15rem}.ca-example h4{font-size:.92rem;font-weight:500}.ca-example li p{font-size:.87rem;line-height:1.6;color:var(--ca-dim);margin-top:.2rem}.ca-example-note{font-size:.78rem;line-height:1.6;color:var(--ca-dim);border-top:1px solid var(--ca-line);padding-top:1rem;margin-top:1.5rem!important}\n.ca-catalog{margin-top:2rem}.ca-search{max-width:34rem}.ca-search label{display:block;font-size:.82rem;font-weight:500;margin-bottom:.5rem}.ca-search>div{display:flex;gap:.75rem;align-items:center}.ca-search input{width:100%;min-width:0;min-height:48px;padding:.7rem 1rem;background:var(--ca-paper);border:1px solid var(--ca-line);border-radius:4px;font-size:.9rem}.ca-search input::placeholder{color:var(--ca-dim);opacity:1}.ca-search button{min-height:44px;padding:.4rem .6rem;border:0;background:transparent;text-decoration:underline;cursor:pointer}.ca-search-status{font-size:.78rem;color:var(--ca-dim);margin:.75rem 0 1.5rem!important}.ca-group{border-top:1px solid var(--ca-line)}.ca-group:last-child{border-bottom:1px solid var(--ca-line)}.ca-group h3 button{display:flex;width:100%;gap:1.5rem;align-items:center;justify-content:space-between;text-align:left;padding:1.35rem 0;background:transparent;border:0;cursor:pointer}.ca-group-title{display:block;font:400 1.65rem/1.2 var(--ca-serif)}.ca-group-summary{display:block;font-size:.8rem;font-weight:400;line-height:1.5;color:var(--ca-dim);margin-top:.4rem}.ca-plus{font:400 1.3rem/1 var(--ca-sans);color:var(--ca-accent)}.ca-group-body{padding:0 0 1.5rem}.ca-group-body dl>div{display:grid;grid-template-columns:11rem minmax(0,1fr);gap:1.5rem;padding:1rem 0;border-top:1px solid var(--ca-line)}.ca-group-body dt{font-size:.94rem;font-weight:500}.ca-group-body dd{max-width:68ch;font-size:.95rem;color:var(--ca-dim);line-height:1.65}.ca-group-body>.ca-link{margin-top:.5rem}.ca-empty{padding:1.5rem 0}.ca-empty h3{font-size:1rem;font-weight:500}.ca-empty p{color:var(--ca-dim);font-size:.9rem;margin-top:.5rem}\n.ca-rows{margin-top:1.7rem!important}.ca-rows>div{display:grid;grid-template-columns:11rem minmax(0,1fr);gap:1.5rem;border-top:1px solid var(--ca-line);padding:1.3rem 0}.ca-rows dt{font-size:.95rem;font-weight:500;line-height:1.5}.ca-rows dd{max-width:70ch;font-size:.96rem;line-height:1.7;color:var(--ca-dim)}.ca-note{font-size:.86rem;color:var(--ca-dim);border-left:2px solid var(--ca-accent);padding-left:1.2rem;margin-top:1.4rem!important}.ca-permissions{margin:2rem 0;background:var(--ca-tint);padding:1.5rem 2rem}.ca-permissions dl{margin-top:1rem}.ca-permissions dl>div{display:grid;grid-template-columns:9rem minmax(0,1fr);gap:1rem;padding:.85rem 0;border-top:1px solid var(--ca-line)}.ca-permissions dt{font-size:.9rem;font-weight:500;display:flex;gap:1rem}.ca-permissions dt span{font:400 .7rem/2 var(--ca-mono);color:var(--ca-accent)}.ca-permissions dd{font-size:.86rem;color:var(--ca-dim)}\n.ca-next{padding:4rem 0;background:var(--ca-bg);border-top:1px solid var(--ca-line)}.ca-next>.ca-width{display:grid;grid-template-columns:1.7fr 1fr;gap:4rem;align-items:center}.ca-next h2{font-size:clamp(2rem,3vw,2.8rem);max-width:25ch;margin:1rem 0}.ca-next p:last-child{color:var(--ca-dim);font-size:.95rem;max-width:55ch}.ca-next .ca-links{display:flex;flex-direction:column;align-items:flex-start;margin:0}.ca-next .ca-link:first-child{background:var(--ca-fg);color:var(--ca-paper);padding:.65rem 1.2rem;border-radius:4px;text-decoration:none}\n@media(min-width:70rem){.ca-hero{padding-top:8rem}}\n@media(max-width:69.99rem){.ca-about .ca-width{width:calc(100% - 4rem)}.ca-layout{grid-template-columns:11rem minmax(0,1fr);gap:2.5rem}.ca-hero-grid{gap:3rem}.ca-group-body dl>div,.ca-rows>div{grid-template-columns:9rem minmax(0,1fr);gap:1rem}.ca-system{padding:1.5rem}}\n@media(max-width:54.99rem){.ca-hero{padding-top:6rem;padding-bottom:3rem}.ca-hero-grid{grid-template-columns:1fr;gap:2.5rem}.ca-glance dl{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem;margin-bottom:1rem}.ca-layout{display:block}.ca-index{position:static;display:grid;grid-template-columns:1fr 1fr;gap:0 1rem;padding-block:2rem;border-bottom:1px solid var(--ca-line)}.ca-index>.ca-caption{grid-column:1/-1}.ca-chapter{padding-block:3rem}.ca-next>.ca-width{grid-template-columns:1fr;gap:2rem}}\n@media(max-width:39.99rem){.ca-about .ca-width{width:calc(100% - 2.5rem)}.ca-about h1{font-size:clamp(2.7rem,10vw,3.8rem)}.ca-hero .ca-intro{text-wrap:pretty;font-size:1.04rem}.ca-hero-grid>div>p:last-child{font-size:.94rem}.ca-glance dl{display:block}.ca-index{gap:0 .4rem}.ca-index a{font-size:.77rem;gap:.45rem;padding-left:.5rem}.ca-chapter h2{font-size:2.1rem;scroll-margin-top:10rem}.ca-prose p{font-size:.95rem}.ca-entrances{grid-template-columns:1fr;gap:0}.ca-entrances>div{padding:1rem 0;border-bottom:1px solid #3C4640}.ca-entrances>div:after{display:none}.ca-system-state{margin-top:1rem;text-align:left}.ca-system{padding:1.2rem}.ca-example{padding:1.2rem}.ca-group-title{font-size:1.45rem}.ca-group-body dl>div,.ca-rows>div{grid-template-columns:1fr;gap:.4rem}.ca-group-body dt,.ca-rows dt{font-size:.94rem}.ca-group-body dd{font-size:.9rem}.ca-permissions{padding:1.2rem}.ca-permissions dl>div{grid-template-columns:6.5rem minmax(0,1fr);gap:.7rem}.ca-permissions dt{gap:.65rem}.ca-next{padding:3rem 0}}\n@media(prefers-reduced-motion:reduce){.ca-about *{scroll-behavior:auto!important;transition:none!important}}\n@media print{.ca-index,.ca-search,.ca-search-status,.ca-plus{display:none}.ca-layout{display:block}.ca-about .ca-width{width:100%}.ca-group-body[hidden]{display:block!important}.ca-about{--ca-bg:white;--ca-paper:white;--ca-fg:black;--ca-dim:#333;--ca-line:#aaa}.ca-hero,.ca-chapter,.ca-next{padding-block:1.5rem}.ca-group h3 button{padding-block:1rem}}\n`;"}