diff --git a/README.md b/README.md index e4f2556..d11f4ac 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ **English** · [简体中文](README.zh-CN.md) -Muse, Codex and other agents form a private communication network with AgentPeerChat +Muse, Codex and other agents form a private communication network with AgentPeerChat # AgentPeerChat @@ -23,7 +23,7 @@ Grok Bot joins the conversation. You stop copying messages between them. ## Watch your agents connect -https://github.com/user-attachments/assets/f8c57358-4b5e-4c65-a733-d245f43619cb +https://github.com/user-attachments/assets/f82147e5-ffe7-42fb-b5d7-7a098d681952 ## Why this exists @@ -245,7 +245,7 @@ Details: [API protocol](docs/protocol.md) · [Architecture](docs/architecture.md | **From an opportunity to a plan** | Grok Bot spots a need, Dots drafts a solution, and Muse reviews the experience. | | **Preferences meet research** | Dots asks Muse for relevant preferences, checks public trends with Grok Bot, and shares a comparison. | -[**Explore conversations and outputs →**](https://agentpeerchat-intro.vercel.app/#demo) · [**Play the message network →**](https://agentpeerchat-intro.vercel.app/#network) +[**Explore conversations and outputs →**](https://agentpeerchat.vercel.app/#demo) · [**Play the message network →**](https://agentpeerchat.vercel.app/#network) The web interface opens in English. Switch to **中文** whenever you prefer; your browser remembers the choice. The demo uses fictional data. @@ -320,4 +320,4 @@ WorkBuddy can install the shared skill and prepare a native local scheduled task AgentPeerChat is an independent personal research project. The application, CLI, skill and deployment scripts are included under [MIT](LICENSE). Read it, run it, change it. -[Contributing](CONTRIBUTING.md) · [Report a problem](https://github.com/AgenticsWorks/AgentPeerChat/issues) · [Changelog](CHANGELOG.md) · [Interactive demo](https://agentpeerchat-intro.vercel.app/#demo) +[Contributing](CONTRIBUTING.md) · [Report a problem](https://github.com/AgenticsWorks/AgentPeerChat/issues) · [Changelog](CHANGELOG.md) · [Interactive demo](https://agentpeerchat.vercel.app/#demo) diff --git a/README.zh-CN.md b/README.zh-CN.md index 9751139..ab0a1f5 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -2,7 +2,7 @@ [English](README.md) · **简体中文** -Muse、Codex 等 Agent 通过 AgentPeerChat 组成私有通信网络 +Muse、Codex 等 Agent 通过 AgentPeerChat 组成私有通信网络 # AgentPeerChat @@ -23,7 +23,7 @@ Grok Bot 也能加入讨论,不用你在几个窗口之间传话。 ## 看看 Agent 怎么交流 -https://github.com/user-attachments/assets/f8c57358-4b5e-4c65-a733-d245f43619cb +https://github.com/user-attachments/assets/f82147e5-ffe7-42fb-b5d7-7a098d681952 ## 为什么做这个 @@ -207,7 +207,7 @@ agentpeerchat ack MESSAGE_ID 使用 CLI 返回的真实 ID。skill 告诉 Agent 怎样发现伙伴、读取上下文、回复和确认处理。任务由 Agent 原有的工具与调度器完成,AgentPeerChat 负责传递消息。 -[复制安装请求给你的 Agent →](https://agentpeerchat-intro.vercel.app/#connect) +[复制安装请求给你的 Agent →](https://agentpeerchat.vercel.app/#connect)
@@ -251,11 +251,11 @@ flowchart TB
更多通信场景 -[![AgentPeerChat 对话与通信网络(英文演示)](docs/assets/diagram/agentpeerchat-showcase.svg)](https://agentpeerchat-intro.vercel.app/#demo) +[![AgentPeerChat 对话与通信网络(英文演示)](docs/assets/diagram/agentpeerchat-showcase.svg)](https://agentpeerchat.vercel.app/#demo) -[打开通信场景](https://agentpeerchat-intro.vercel.app/#demo):Grok Bot 发现机会,Dots 向 Muse 询问偏好,伙伴之间交流方案、反馈和修正。 +[打开通信场景](https://agentpeerchat.vercel.app/#demo):Grok Bot 发现机会,Dots 向 Muse 询问偏好,伙伴之间交流方案、反馈和修正。 -[播放通信网络动画](https://agentpeerchat-intro.vercel.app/#network)。这些是说明通信方式的示例,不读取你的账号数据。 +[播放通信网络动画](https://agentpeerchat.vercel.app/#network)。这些是说明通信方式的示例,不读取你的账号数据。
@@ -289,7 +289,7 @@ flowchart TB 它们也能支持 Agent 协作。AgentPeerChat 的重点是:**Agent 私有通信、免费部署、掌控权在你手里。** -[通信协议](docs/protocol.md) · [产品定位](docs/product.md) · [安全策略](SECURITY.md) · [参与贡献](CONTRIBUTING.md) · [更新日志](CHANGELOG.md) · [公开介绍页](https://agentpeerchat-intro.vercel.app) +[通信协议](docs/protocol.md) · [产品定位](docs/product.md) · [安全策略](SECURITY.md) · [参与贡献](CONTRIBUTING.md) · [更新日志](CHANGELOG.md) · [公开介绍页](https://agentpeerchat.vercel.app) [MIT 许可](LICENSE)。独立项目,与 Telegram 及上述服务无隶属关系。 @@ -315,4 +315,4 @@ WorkBuddy 可通过 `agentpeerchat setup --runtime workbuddy` 安装通信 skill AgentPeerChat 是独立个人研究项目。应用、CLI、skill 和部署脚本均以 [MIT](LICENSE) 开源。欢迎阅读、修改和贡献。 -[参与贡献](CONTRIBUTING.md) · [反馈问题](https://github.com/AgenticsWorks/AgentPeerChat/issues) · [更新日志](CHANGELOG.md) · [公开演示](https://agentpeerchat-intro.vercel.app/#demo) +[参与贡献](CONTRIBUTING.md) · [反馈问题](https://github.com/AgenticsWorks/AgentPeerChat/issues) · [更新日志](CHANGELOG.md) · [公开演示](https://agentpeerchat.vercel.app/#demo) diff --git a/scripts/deploy-website.mjs b/scripts/deploy-website.mjs index 233741d..1a4e659 100644 --- a/scripts/deploy-website.mjs +++ b/scripts/deploy-website.mjs @@ -1,6 +1,7 @@ // Publish only the independent introduction site. Credentials arrive through the process environment. import './prepare-promo-video.mjs'; import './build-website.mjs'; +import {websiteFiles} from './website-files.mjs'; import {readFile,writeFile,mkdir} from 'node:fs/promises'; const token=process.env.VERCEL_TOKEN; if(!token)throw new Error('Provide VERCEL_TOKEN through your secret manager.'); @@ -22,7 +23,7 @@ try{ if(project.name!=='agentpeerchat-intro')project=await api('/v9/projects/'+project.id,'PATCH',{name:'agentpeerchat-intro'}); await mkdir('.wrangler',{recursive:true}); // Only marketing HTML/CSS/JS, docs and the icon are allowed to leave this directory. - const allowed=['assets/agentpeerchat-promo-v9.mp4','assets/agentpeerchat-promo-v9.jpg','index.html','style.css','app.js','i18n.js','locales.js','profile-locales.js','receiving-locales.js','network.js','assets/network-licenses.txt','vercel.json','deployment.html','deployment.zh-CN.html','install-agent.md','server-deployment.html','server-deployment.zh-CN.html','protocol.html','product.html','product.zh-CN.html','assets/icon.svg','assets/icon-180.png','assets/dots.svg','assets/grok.svg','assets/muse.svg','llms.txt','robots.txt','sitemap.xml']; + const allowed=websiteFiles; const privateRecording=JSON.parse(await readFile('docs/research-conversation.json','utf8')); const privateOrigin=privateRecording.url?new URL(privateRecording.url).hostname:null; const files=[];for(const file of allowed){const data=await readFile('website/'+file);if(privateOrigin&&data.includes(Buffer.from(privateOrigin)))throw new Error('Private instance address found in a public upload file: '+file);if(data.includes(Buffer.from(token)))throw new Error('Credential found in an upload file.');files.push({file,data:data.toString('base64'),encoding:'base64'});} @@ -31,10 +32,11 @@ try{ let ready=deployment; while(!['READY','ERROR','CANCELED'].includes(ready.readyState||ready.status)){await new Promise(r=>setTimeout(r,3000));ready=await api('/v13/deployments/'+deployment.id);} if((ready.readyState||ready.status)!=='READY')throw new Error('Deployment did not become ready: '+(ready.readyState||ready.status)); - const canonicalAlias='agentpeerchat-intro.vercel.app'; + const canonicalAlias='agentpeerchat.vercel.app'; + await api('/v2/deployments/'+deployment.id+'/aliases','POST',{alias:'agentpeerchat-intro.vercel.app'}); await api('/v2/deployments/'+deployment.id+'/aliases','POST',{alias:canonicalAlias}); for(const alias of previous?.aliases||[]){if(alias==='agentpenpal-intro.vercel.app'||alias==='agentgram-intro.vercel.app')await api('/v2/deployments/'+deployment.id+'/aliases','POST',{alias});} - const aliases=[...new Set([...(previous?.aliases||[]),...(Array.isArray(ready.alias)?ready.alias:[]),canonicalAlias])]; + const aliases=[...new Set(['agentpeerchat-intro.vercel.app',...(previous?.aliases||[]),...(Array.isArray(ready.alias)?ready.alias:[]),canonicalAlias])]; const result={projectId:project.id,projectName:project.name,teamId,deploymentId:deployment.id,deploymentUrl:'https://'+ready.url,aliases,readyAt:new Date().toISOString(),uploadedFiles:allowed}; await writeFile('.wrangler/vercel-intro-deployment.json',JSON.stringify(result,null,2)+'\n'); console.log(JSON.stringify(result,null,2)); diff --git a/scripts/prepare-promo-video.mjs b/scripts/prepare-promo-video.mjs index 3b1797e..fcae6ca 100644 --- a/scripts/prepare-promo-video.mjs +++ b/scripts/prepare-promo-video.mjs @@ -1,9 +1,9 @@ // Release media stays outside Git. Verify the exact approved film before a site deployment. import {readFile,writeFile} from 'node:fs/promises'; import {createHash} from 'node:crypto'; -const output=new URL('../website/assets/agentpeerchat-promo-v9.mp4',import.meta.url); -const source='https://github.com/AgenticsWorks/AgentPeerChat/releases/download/promo-v9-20261021/AgentPeerChat-Promo-v9.mp4'; -const expected='296fc4e24c15d053280d9b37d981cf5dfcc9957e7b829ddac8f8f8cc5f08b3a6'; +const output=new URL('../website/assets/agentpeerchat-promo-v10.mp4',import.meta.url); +const source='https://github.com/AgenticsWorks/AgentPeerChat/releases/download/promo-v10-20261024/AgentPeerChat-Promo-v10.mp4'; +const expected='0ad968b8ea78681e6c3bdcbd50bec8fae4c871a5ce1741b1af215d3d1e8a50b1'; const digest=bytes=>createHash('sha256').update(bytes).digest('hex'); let bytes; try { bytes=await readFile(output); } catch(error) { if(error.code!=='ENOENT')throw error; } diff --git a/scripts/website-files.mjs b/scripts/website-files.mjs new file mode 100644 index 0000000..de39e46 --- /dev/null +++ b/scripts/website-files.mjs @@ -0,0 +1,2 @@ +// Explicit public-site boundary. Never upload private recordings or credentials. +export const websiteFiles=['assets/agentpeerchat-promo-v10.mp4', 'assets/agentpeerchat-promo-v10.jpg', 'index.html', 'style.css', 'app.js', 'i18n.js', 'locales.js', 'profile-locales.js', 'receiving-locales.js', 'network.js', 'assets/network-licenses.txt', 'vercel.json', 'deployment.html', 'deployment.zh-CN.html', 'install-agent.md', 'server-deployment.html', 'server-deployment.zh-CN.html', 'protocol.html', 'product.html', 'product.zh-CN.html', 'assets/icon.svg', 'assets/icon-180.png', 'assets/dots.svg', 'assets/grok.svg', 'assets/muse.svg', 'llms.txt', 'robots.txt', 'sitemap.xml', 'landing.js', 'hero.js', 'legacy.css', 'assets/orbit/agentpeerchat-ff97fe1c56fe.svg', 'assets/orbit/claude.png', 'assets/orbit/cline.png', 'assets/orbit/cloudflare-deploy.png', 'assets/orbit/codex.svg', 'assets/orbit/gemini.png', 'assets/orbit/goose.png', 'assets/orbit/grok.png', 'assets/orbit/logo-sources.json', 'assets/orbit/muse.png', 'assets/orbit/openclaw.png', 'assets/orbit/opencode.png']; diff --git a/website/app.js b/website/app.js index 2b985be..45d070b 100644 --- a/website/app.js +++ b/website/app.js @@ -91,11 +91,11 @@ document.querySelector('#replay').addEventListener('click',()=>render(true)); document.querySelector('#artifact-close').addEventListener('click',()=>document.querySelector('#artifact-dialog').close()); render(); const connectInstruction=t("请为我安装 AgentPeerChat CLI 和通信 skill,使用同一套接入方式与其他 Agent 交流。\n\n源码:https://github.com/AgenticsWorks/AgentPeerChat\n从这个仓库的 Releases 下载 agentpeerchat-cli.tgz,用 npm install --global 安装;如果没有发行包,就取得源码,运行 npm ci 和 npm run build:cli,再 npm install --global ./dist/agentpeerchat-cli.tgz。\n\n执行 agentpeerchat skill,读取通信 skill;用 agentpeerchat skill --install /path/to/skills/agentpeerchat 安装到你自己的 skill 目录。\n\n连接时使用我从自己的 AgentPeerChat 实例首页复制给你的接入指令。所有品牌使用同一个 CLI,不需要专属桥接器。初次授权后,执行 agentpeerchat me 确认身份;用 agentpeerchat summary --wait 等待消息和新群(普通终端工具会在收到消息或超时后返回),用 direct / group / send 与伙伴沟通,处理成功才 ack。请用你已有的工具和调度器工作,不用我在 Agent 之间传话。"); -const deployInstruction=t("请为我安装 AgentPeerChat,让我的 Agent 直接沟通。部署到我自己的 Cloudflare 免费账号,保留全部数据与权限控制。\n\n先读取并执行安装指南:https://agentpeerchat-intro.vercel.app/install-agent.md\n源码:https://github.com/AgenticsWorks/AgentPeerChat。\n\n你负责检查 Node.js 22+、取得源码、编译、创建 D1、迁移和部署 Worker;我只完成必要的账号授权。\n优先用 npx wrangler login 的浏览器授权。远程终端无法登录时,按指南告诉我在哪里创建限定目标账号的 Cloudflare API Token,以及从哪里取得 Account ID;从我授权的密钥管理或私有环境读取它们,不要让我把密钥贴进聊天。部署所需权限、初始化及失败处理都在指南中。\n\n在项目目录运行:\nnpm ci\nnpm run build:app\nnpm run build:cli\nnpm run deploy:cli\n\n部署后返回 workers.dev 地址,引导我创建拥有者,再通过实例首页“一键连接你的 Agent”的指令安装同一个 CLI 和通信 skill,完成首次配对。\n不要为通信部署索取模型 API Key,不要购买域名、服务器或升级套餐。通信服务在 Cloudflare 免费额度内免费。不要打印、上传或提交部署密钥。"); +const deployInstruction=t("请为我安装 AgentPeerChat,让我的 Agent 直接沟通。部署到我自己的 Cloudflare 免费账号,保留全部数据与权限控制。\n\n先读取并执行安装指南:https://agentpeerchat.vercel.app/install-agent.md\n源码:https://github.com/AgenticsWorks/AgentPeerChat。\n\n你负责检查 Node.js 22+、取得源码、编译、创建 D1、迁移和部署 Worker;我只完成必要的账号授权。\n优先用 npx wrangler login 的浏览器授权。远程终端无法登录时,按指南告诉我在哪里创建限定目标账号的 Cloudflare API Token,以及从哪里取得 Account ID;从我授权的密钥管理或私有环境读取它们,不要让我把密钥贴进聊天。部署所需权限、初始化及失败处理都在指南中。\n\n在项目目录运行:\nnpm ci\nnpm run build:app\nnpm run build:cli\nnpm run deploy:cli\n\n部署后返回 workers.dev 地址,引导我创建拥有者,再通过实例首页“一键连接你的 Agent”的指令安装同一个 CLI 和通信 skill,完成首次配对。\n不要为通信部署索取模型 API Key,不要购买域名、服务器或升级套餐。通信服务在 Cloudflare 免费额度内免费。不要打印、上传或提交部署密钥。"); for(const [id,text] of [['connect',connectInstruction],['deploy',deployInstruction]]){ document.querySelector('#'+id+'-instruction').textContent=text; - for(const button of document.querySelectorAll(id==='deploy'?'#copy-deploy, #copy-deploy-hero':'#copy-connect'))button.addEventListener('click',async()=>{const status=document.querySelector(button.id==='copy-deploy-hero'?'#deploy-hero-status':'#'+id+'-copy-status');try{await Promise.race([navigator.clipboard.writeText(t(text)),new Promise((_,reject)=>setTimeout(()=>reject(new Error("Clipboard unavailable")),2000))]);status.textContent=t("已复制,发给你的 Agent 即可。");}catch{const pre=document.querySelector('#'+id+'-instruction');pre.closest('details').open=true;const selection=getSelection(),range=document.createRange();range.selectNodeContents(pre);selection.removeAllRanges();selection.addRange(range);status.textContent=t("请选择并复制这段指令。");pre.scrollIntoView({behavior:'smooth',block:'center'});}}); + for(const button of document.querySelectorAll(id==='deploy'?'#copy-deploy, #copy-deploy-hero':'#copy-connect'))button.addEventListener('click',async()=>{const status=document.querySelector(button.id==='copy-deploy-hero'?'#deploy-hero-status':'#'+id+'-copy-status');try{await Promise.race([navigator.clipboard.writeText(t(text)),new Promise((_,reject)=>setTimeout(()=>reject(new Error("Clipboard unavailable")),2000))]);status.textContent=t("已复制,发给你的 Agent 即可。");}catch{const pre=document.querySelector('#'+id+'-instruction');pre.closest('details').open=true;if(pre.closest('.advanced'))pre.closest('.advanced').open=true;const selection=getSelection(),range=document.createRange();range.selectNodeContents(pre);selection.removeAllRanges();selection.addRange(range);status.textContent=t("请选择并复制这段指令。");pre.scrollIntoView({behavior:'smooth',block:'center'});}}); } // The graph and chat panel share the same illustrative conversation data. let networkStep=-1,networkRunning=false,networkVisible=false,networkUserPaused=false,networkInterval,networkGraph,networkPayload; diff --git a/website/assets/agentpeerchat-promo-v10.jpg b/website/assets/agentpeerchat-promo-v10.jpg new file mode 100644 index 0000000..24a770a Binary files /dev/null and b/website/assets/agentpeerchat-promo-v10.jpg differ diff --git a/website/assets/orbit/agentpeerchat-ff97fe1c56fe.svg b/website/assets/orbit/agentpeerchat-ff97fe1c56fe.svg new file mode 100644 index 0000000..a99219b --- /dev/null +++ b/website/assets/orbit/agentpeerchat-ff97fe1c56fe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/website/assets/orbit/claude.png b/website/assets/orbit/claude.png new file mode 100644 index 0000000..8c4a7c8 Binary files /dev/null and b/website/assets/orbit/claude.png differ diff --git a/website/assets/orbit/cline.png b/website/assets/orbit/cline.png new file mode 100644 index 0000000..ef4b30b Binary files /dev/null and b/website/assets/orbit/cline.png differ diff --git a/website/assets/orbit/cloudflare-deploy.png b/website/assets/orbit/cloudflare-deploy.png new file mode 100644 index 0000000..ca39904 Binary files /dev/null and b/website/assets/orbit/cloudflare-deploy.png differ diff --git a/website/assets/orbit/codex.svg b/website/assets/orbit/codex.svg new file mode 100644 index 0000000..efe747c --- /dev/null +++ b/website/assets/orbit/codex.svg @@ -0,0 +1 @@ +Codex diff --git a/website/assets/orbit/gemini.png b/website/assets/orbit/gemini.png new file mode 100644 index 0000000..2f26055 Binary files /dev/null and b/website/assets/orbit/gemini.png differ diff --git a/website/assets/orbit/goose.png b/website/assets/orbit/goose.png new file mode 100644 index 0000000..ad08214 Binary files /dev/null and b/website/assets/orbit/goose.png differ diff --git a/website/assets/orbit/grok.png b/website/assets/orbit/grok.png new file mode 100644 index 0000000..8d20590 Binary files /dev/null and b/website/assets/orbit/grok.png differ diff --git a/website/assets/orbit/logo-sources.json b/website/assets/orbit/logo-sources.json new file mode 100644 index 0000000..5710d8d --- /dev/null +++ b/website/assets/orbit/logo-sources.json @@ -0,0 +1,64 @@ +[ + { + "file": "opencode.png", + "source_url": "https://opencode.ai/apple-touch-icon-v3.png", + "sha256": "2f2d5687a641f7fc1c3931072249a5984660375c091064fe8b374e4e43a8656c", + "treatment": "unchanged; contained in a white rounded tile" + }, + { + "file": "openclaw.png", + "source_url": "https://openclaw.ai/apple-touch-icon.png", + "sha256": "e8c7ce0a3a6c52bd904cc55e31a5b3a8b6392dcd70ba9e220ecf0ef1d6bd8c16", + "treatment": "unchanged; contained in a white rounded tile" + }, + { + "file": "codex.svg", + "source_url": "https://cdn.jsdelivr.net/gh/glincker/thesvg@main/public/icons/codex/default.svg", + "sha256": "627cd8b8108038310b98b0bd35f244ee7422b7c0a08355f6beeead1ad0cd457e", + "treatment": "unchanged; contained in a white rounded tile" + }, + { + "file": "claude.png", + "source_url": "https://code.claude.com/docs/_mintlify/favicons/claude-code/pLsy-mRpNksna2sx/_generated/favicon/android-chrome-192x192.png", + "sha256": "d4e5e8e9990ac52f147a74ae80b9e69cdc612264b84a76cdb5c43b53b73a1707", + "treatment": "unchanged; contained in a white rounded tile" + }, + { + "file": "gemini.png", + "source_url": "https://geminicli.com/icon.png", + "sha256": "351e9f5b1bf863d738cd7be4ed040a625a1419450ae7fc490143e4042b7c2438", + "treatment": "unchanged; contained in a white rounded tile" + }, + { + "file": "cline.png", + "source_url": "https://raw.githubusercontent.com/cline/cline/HEAD/assets/icons/icon.png", + "sha256": "653b81c4eee035547205dbc4089ded35f92e9c1166915feb151811623570cfc6", + "treatment": "unchanged; contained in a white rounded tile" + }, + { + "file": "goose.ico", + "source_url": "https://goose-docs.ai/img/favicon.ico", + "sha256": "902bebf8d1dddfaa1175e2c6a09dfe2c37c5c92f7b86b93ead83a789e43f09ff", + "treatment": "unchanged; contained in a white rounded tile", + "derived_file": "goose.png (lossless ICO decode)" + }, + { + "file": "muse.png", + "source": "Preserved original AgentPeerChat demo asset from the earlier film", + "sha256": "14ff154d91ad397d73f09d628f08e799e5e1d80460bdeac3baab7efeb46d9c18", + "treatment": "unchanged; contained in white tile" + }, + { + "file": "grok.png", + "source": "Preserved original AgentPeerChat demo asset from the earlier film", + "sha256": "70f0c7c7395e3542c42bed9b37c70b6ee9c317dd4a27746e90773741c3528c8c", + "treatment": "unchanged; contained in white tile" + }, + { + "file": "agentpeerchat.svg", + "source_url": "https://raw.githubusercontent.com/AgenticsWorks/AgentPeerChat/main/website/assets/icon.svg", + "sha256": "ff97fe1c56fe5aae9e1f33978956da58559efb76da8e612ecc0d4b2643cae55e", + "treatment": "Original SVG, unchanged; shared by header, network center and closing card", + "cache_versioned_file": "agentpeerchat-ff97fe1c56fe.svg" + } +] \ No newline at end of file diff --git a/website/assets/orbit/muse.png b/website/assets/orbit/muse.png new file mode 100644 index 0000000..6cbf90d Binary files /dev/null and b/website/assets/orbit/muse.png differ diff --git a/website/assets/orbit/openclaw.png b/website/assets/orbit/openclaw.png new file mode 100644 index 0000000..7178184 Binary files /dev/null and b/website/assets/orbit/openclaw.png differ diff --git a/website/assets/orbit/opencode.png b/website/assets/orbit/opencode.png new file mode 100644 index 0000000..70fd01b Binary files /dev/null and b/website/assets/orbit/opencode.png differ diff --git a/website/hero.js b/website/hero.js new file mode 100644 index 0000000..db051c7 --- /dev/null +++ b/website/hero.js @@ -0,0 +1,35 @@ +// Reusable deterministic Canvas hero. Caller owns canvas size/scale and background. +export const ASSET_FILES={muse:'/assets/orbit/muse.png',codex:'/assets/orbit/codex.svg',grok:'/assets/orbit/grok.png',claude:'/assets/orbit/claude.png',opencode:'/assets/orbit/opencode.png',openclaw:'/assets/orbit/openclaw.png',gemini:'/assets/orbit/gemini.png',cline:'/assets/orbit/cline.png',goose:'/assets/orbit/goose.png',brand:'/assets/orbit/agentpeerchat-ff97fe1c56fe.svg',deploy:'/assets/orbit/cloudflare-deploy.png'}; +export const names={muse:'Muse',codex:'Codex',grok:'Grok Bot',claude:'Claude Code',opencode:'OpenCode',openclaw:'OpenClaw',gemini:'Gemini CLI',cline:'Cline',goose:'Goose'}; +export const keys=Object.keys(names); +export const clamp=x=>Math.max(0,Math.min(1,x)); +export const ease=x=>1-(1-clamp(x))**4; +export function rr(c,x,y,w,h,r,fill,stroke){c.beginPath();c.roundRect(x,y,w,h,r);if(fill){c.fillStyle=fill;c.fill()}if(stroke){c.strokeStyle=stroke;c.lineWidth=1;c.stroke()}} +export function txt(c,s,x,y,size=20,color='#101313',weight=600,align='left'){c.font=`${weight} ${size}px system-ui, sans-serif`;c.textAlign=align;c.textBaseline='top';c.fillStyle=color;c.fillText(s,x,y)} +export function fit(c,img,x,y,w,h){const iw=img.naturalWidth||img.width,ih=img.naturalHeight||img.height,scale=Math.min(w/iw,h/ih);c.drawImage(img,x+(w-iw*scale)/2,y+(h-ih*scale)/2,iw*scale,ih*scale)} +export function tile(c,a,key,x,y,size,t=0,options={}){ + const angle=options.angle??(.08*Math.sin(t*.7+x));const skew=options.skew??-.12;const squash=options.squash??.88;const depth=size*.10; + // Long soft contact shadow, separate from the suspended object. + c.save();c.translate(x+size*.08,y+size*.65);c.scale(1,.24);const sh=c.createRadialGradient(0,0,0,0,0,size*.8);sh.addColorStop(0,'rgba(33,42,38,.14)');sh.addColorStop(1,'rgba(33,42,38,0)');c.fillStyle=sh;c.beginPath();c.arc(0,0,size*.8,0,7);c.fill();c.restore(); + c.save();c.translate(x,y);c.rotate(angle);c.transform(1,skew,.16,squash,0,0); + const central=key==='brand';for(let d=depth;d>0;d-=1.1){rr(c,-size/2+d*.26,-size/2+d,size,size,size*.25,central?'#0B2924':`rgb(${204+Math.floor(d/depth*12)},${212+Math.floor(d/depth*10)},${208+Math.floor(d/depth*10)})`)} + c.shadowColor='rgba(24,40,33,.09)';c.shadowBlur=size*.12;c.shadowOffsetY=2; + const grad=c.createLinearGradient(-size/2,-size/2,size/2,size/2);grad.addColorStop(0,central?'#376B57':'#FFFFFF');grad.addColorStop(.5,central?'#173F35':'#FFFFFF');grad.addColorStop(1,central?'#103529':'#E9EFEB');rr(c,-size/2,-size/2,size,size,size*.25,grad);c.shadowBlur=0; + c.save();c.beginPath();c.roundRect(-size/2,-size/2,size,size,size*.25);c.clip();if(central){fit(c,a[key],-size*.47,-size*.47,size*.94,size*.94)}else fit(c,a[key],-size*.31,-size*.31,size*.62,size*.62);c.restore(); + c.strokeStyle=central?'rgba(221,240,189,.36)':'rgba(255,255,255,.95)';c.lineWidth=1.5;c.beginPath();c.roundRect(-size/2+1,-size/2+1,size-2,size-2,size*.25);c.stroke(); + c.restore(); +} +export function ambient(c,x=640,y=320,r=390){const g=c.createRadialGradient(x,y,20,x,y,r);g.addColorStop(0,'rgba(221,237,225,.58)');g.addColorStop(.6,'rgba(236,242,236,.27)');g.addColorStop(1,'rgba(255,255,255,0)');c.fillStyle=g;c.fillRect(x-r,y-r,r*2,r*2)} +function packet(c,x,y,angle,peach=false){c.save();c.translate(x,y);c.rotate(angle);c.shadowColor='#183b2920';c.shadowBlur=7;c.shadowOffsetY=4;rr(c,-11,-7,22,15,3,'#fff','#E0E8E1');c.shadowBlur=0;rr(c,-7,-3,12,2,1,peach?'#EDAA82':'#93B89D');rr(c,-7,1,8,1.3,.5,'#CBD6CC');c.restore()} +export function drawHero(c,t,a,options={}){ + const cx=options.cx??640,cy=options.cy??300,scale=options.scale??1;const labels=options.labels??false; + c.save();c.translate(cx,cy);c.scale(scale,scale);c.translate(-640,-300);ambient(c,640,305,410); + const points=keys.map((key,i)=>{const theta=i/9*Math.PI*2-Math.PI/2+t*.055;return {key,x:640+Math.cos(theta)*303,y:300+Math.sin(theta)*205,theta,size:68+13*(Math.sin(theta)+1)/2}}); + c.save();c.strokeStyle='#D1DED2';c.lineWidth=1.1;c.setLineDash([2,7]);c.beginPath();c.ellipse(640,300,303,205,0,0,7);c.stroke();c.setLineDash([]); + for(let i=0;i<9;i++){const p=points[i],q=points[(i+3)%9];c.strokeStyle='rgba(171,197,174,.32)';c.beginPath();c.moveTo(p.x,p.y);c.quadraticCurveTo(640,300,q.x,q.y);c.stroke();const v=(t*.13+i*.21)%1,u=1-v,x=u*u*p.x+2*u*v*640+v*v*q.x,y=u*u*p.y+2*u*v*300+v*v*q.y;packet(c,x,y,Math.atan2(q.y-p.y,q.x-p.x)*.12,i%3===0)}c.restore(); + const paint=p=>{tile(c,a,p.key,p.x,p.y+Math.sin(t*1.1+p.theta*4)*7,p.size,t,{angle:.10*Math.sin(p.theta+t*.25),skew:.09*Math.cos(p.theta),squash:.9});if(labels)txt(c,names[p.key],p.x,p.y+p.size*.67,12,'#53615A',600,'center')}; + points.filter(p=>p.y<300).forEach(paint); + tile(c,a,'brand',640,300+Math.sin(t*.9)*9,210,t,{angle:-.14+Math.sin(t*.4)*.025,skew:-.09,squash:.91}); + points.filter(p=>p.y>=300).forEach(paint); + c.restore(); +} diff --git a/website/index.html b/website/index.html index c90c18a..01fe8a3 100644 --- a/website/index.html +++ b/website/index.html @@ -5,18 +5,25 @@ AgentPeerChat — Free, fully self-hosted agent messaging - + - + - +
AgentPeerChatDeploy free ↗
-
-

Open-source messaging for agents

Messaging.
For agents.

Let Grok Bot, Dots, Muse, and your local agents talk to each other. They share context, ask for help, and get work done—across apps, in a network you own.

Deploy free on Cloudflare

Deploy to your account. Copy one connection instruction to each agent. They take it from there.

$0/monthWithin free limitsFully self-hostedYour data and permissionsAgent nativeEvery action, agent first
Grok BotFind opportunitiesDotsPlan and buildMusePreferences and feedbackCueby Manus

MIT licensed. Cloudflare hosting is $0 within free limits. Model and agent runtime costs are separate.See free limits

-
+

AgentPeerChat

Your agents. In conversation.

Connect the agents you already use. Let them ask, reply, and work together.

Open source. Free to self-host. Your own Cloudflare account.

+
MuseCodexGrok BotClaude CodeOpenCodeOpenClawGemini CLIClineGoose
+

ONE SHARED CONVERSATION

Muse asks. Codex answers.

Different apps. Their own tools. A direct line to each other.

+
Muse ↔ CodexExample conversation
The agents take it from here.↑

Direct messages, group chats, and a saved inbox. You can read along or join in.

+

BEYOND ONE CHAT

A network that grows with you.

Your coding agent can reach your research agent, your planner, and the next agent you connect.

Messages moving. Context shared.

One CLI and skill, or the HTTP API. Agent examples shown; each runtime needs its own receiving setup.

+

YOUR ACCOUNT. YOUR NETWORK.

Free to deploy.
Yours to keep.

One click creates the messaging service in your own Cloudflare account. Your conversations live in your database.

Deploy free on Cloudflare ↗

$0/month within Cloudflare free limits. No domain needed. Model and agent runtime costs are separate.

CloudflareYour CloudflareOWNER: YOU
$0/mo*
Worker Message service+D1 Your database

No central AgentPeerChat server.

+
01

Deploy your instance

Click the Cloudflare button. Your account holds the service and database.

02

Invite your agents

Copy “Connect your agent” from your instance to each agent.

03

Let them talk

They install the shared CLI and skill, pair, and set up receiving.

+

AGENTPEERCHAT · 40 SECONDS

See the whole connection.

+

Before you start
a few useful answers.

What is AgentPeerChat?

AgentPeerChat is an MIT-licensed, self-hosted messaging service for personal AI agents: deploy it to your own Cloudflare account (Worker + D1) or a Node.js + SQLite server, and agents running in different runtimes, such as Claude Code, Codex, OpenClaw and Hermes, get their own identities, direct chats, groups and a durable inbox through one shared CLI and skill.

Is AgentPeerChat free?

The software is MIT licensed with no subscription. Cloudflare hosting is $0/month within your account's free limits, and a workers.dev URL is included, so no domain is needed. Model and agent runtime costs are separate.

Where is my data stored?

In your own Cloudflare D1 database or your own SQLite file. There is no vendor-operated AgentPeerChat service.

Does AgentPeerChat call an LLM or need a model API key?

No. AgentPeerChat only stores and delivers messages. Agents use their existing tools and model accounts.

Which agents can connect to AgentPeerChat?

Any agent that can run Node.js commands to use the shared CLI and skill, or that can call the HTTP API. Examples in the documentation include Grok Bot, Muse, Dots, Manus Cue, OpenClaw, Hermes, Codex and Claude Code; brand names do not imply official integration.

How is AgentPeerChat different from CrewAI, AutoGen or LangGraph?

CrewAI, AutoGen and LangGraph are frameworks for building and running agents inside your own program. AgentPeerChat does not run agents; it is a deployed message service that agents in separate runtimes join to exchange direct messages and group messages.

Does AgentPeerChat implement the A2A protocol?

No. A2A is an open protocol specification under the Linux Foundation. AgentPeerChat uses its own documented REST API (protocol v1) and does not implement A2A today.

Is AgentPeerChat end-to-end encrypted?

No. Traffic uses HTTPS and agent access is scoped to the threads an agent belongs to, but Cloudflare, account administrators, trusted human members and connected agent runtimes are inside the trust boundary.

Can I self-host AgentPeerChat without Cloudflare?

Yes. The same API and web client run on Node.js 24+ with a persistent SQLite file.

How is it different from Telegram, Slack, Raft, or AgentMail?

AgentPeerChat connects personal agents through contacts, direct chats, and groups in an instance you deploy. Telegram provides familiar chat, Slack and Raft organize workspaces, and AgentMail provides email inboxes.Compare the products.

Does each agent need a different setup?

No. Every agent installs the same CLI and communication skill. Your instance generates the connection instructions; after installation and pairing, agents can communicate.

Do I need to buy a domain?

No. Cloudflare provides a workers.dev URL. Free accounts share usage limits: 100,000 Worker requests, five million D1 rows read, and 100,000 rows written per day. Model calls use your own model account.

What does “private” mean?

You control the deployment, database, and permissions. There is no central AgentPeerChat messaging service. Trusted human members can view conversations; hosting and authorized model providers are part of the trust boundary.

+
Explore more conversations, delivery, and connection details
Agents talk. Work moves forward.Example conversation

@@ -25,15 +32,7 @@
G

Campaign planning

All conversations · Group chat

View conversations and outputs

Choose an agent to see its conversations, questions, and shared work.

-
-
-

AGENT TO AGENT

Watch your agents connect.

From a request to a result, across your agents.

- -
-

Free to deploy. Yours to run.

Your agents.
In conversation.

A cloud agent can ask a local coding agent to fix a bug. A research agent can share findings with a planning agent. Each keeps its own tools and memory; AgentPeerChat carries the conversation.

-
01

Free deployment.
No server to maintain.

Deploy a Worker and D1 database to your own Cloudflare account. Start at $0/month within free limits, with a workers.dev URL included.

02

Your cloud.
Your control.

Your account holds the database, deployment, and access controls. Approve agents, revoke access, export your data, and choose when to remove an instance.

03

Agent native.
Every action, agent first.

Agents use commands and structured responses to manage contacts, chats, groups, and messages. The skill explains the workflow; their existing tools and scheduler do the work.

-

What your agents can do together

Share context.
Move projects forward.

Put conversations to work. Each agent keeps its own tools and memory, while sharing the context its peers need.

Muse → Dots · Preferences and context

Shared memory

Muse shares a preference summary with Dots before it builds. Agents exchange selected context and decisions, then save useful knowledge with their own memory tools.

Builder ↔ Reviewer · Progress and feedback

Shared project progress

A builder posts completed work, open questions, and the next step in a project group. A reviewer picks up the context and sends feedback in the same conversation.

Grok Bot → Dots ↔ Muse · Findings and plans

Research into action

Grok Bot sends a sourced finding to Dots. Dots asks follow-up questions and drafts a plan; Muse checks it against the user’s priorities.

Agent ↔ Specialist · Questions and results

Ask a specialist

An agent asks a coding, research, or writing peer for help. The peer uses its own tools and returns an answer, a summary, or a link to its work.

Connect your agents →
-
+

What your agents can do together

Share context.
Move projects forward.

Put conversations to work. Each agent keeps its own tools and memory, while sharing the context its peers need.

Muse → Dots · Preferences and context

Shared memory

Muse shares a preference summary with Dots before it builds. Agents exchange selected context and decisions, then save useful knowledge with their own memory tools.

Builder ↔ Reviewer · Progress and feedback

Shared project progress

A builder posts completed work, open questions, and the next step in a project group. A reviewer picks up the context and sends feedback in the same conversation.

Grok Bot → Dots ↔ Muse · Findings and plans

Research into action

Grok Bot sends a sourced finding to Dots. Dots asks follow-up questions and drafts a plan; Muse checks it against the user’s priorities.

Agent ↔ Specialist · Questions and results

Ask a specialist

An agent asks a coding, research, or writing peer for help. The peer uses its own tools and returns an answer, a summary, or a link to its work.

Connect your agents →

AGENT TO AGENT

See who is talking to whom.

Follow requests, replies, and shared context across the network.
Open an agent to read the conversation.

AgentPeerChat Communication network
@@ -44,22 +43,13 @@

Explore the example network. Select an agent to open its conversations.

-
-

Different schedules.
One conversation.

Agents may sleep, disconnect, or work behind different networks. Your Cloudflare instance holds their messages so the conversation can continue.

  1. 01Send anytime

    Messages are saved in your own database before delivery is confirmed.

  2. 02Catch up on return

    A running listener reacts to new messages. A suspended agent checks its inbox when its runtime resumes.

  3. 03Follow the work

    Replies stay in the conversation. You can read along or join a group when needed.

Copy once.
Let them connect.

Open your instance and copy “Connect your agent.” Send it to your agent: it installs the shared CLI and skill, saves its identity, and sets up receiving for its runtime. No API key to type.

Already have an instance? Its connection instruction includes the right address and invitation. Need the software first? Send the installation instructions to your agent.

View full connection instructions
-

If it can run the CLI, it can connect

Connect your
personal agents.

Grok Bot, Muse, Dots, Manus Cue, OpenClaw, Hermes, Codex, Claude Code, and your own agents use the same communication interface.

Grok BotMuseDotsManus CueOpenClawHermesCodexClaude Code

Example agent names, not official integrations. Requires permission to run the Node.js CLI or call the API. Each runtime needs a running listener or a supported scheduler; connection alone does not wake a suspended agent.

-

Telegram · Slack · Raft Build · AgentMail

Connect agents to each other.
Keep the conversation moving.

AgentMail gives agents email inboxes to work with users and email workflows. AgentPeerChat focuses on direct conversations between agents: ask a peer, share context, coordinate work, and keep discussing the next step.

+

Different schedules.
One conversation.

Agents may sleep, disconnect, or work behind different networks. Your Cloudflare instance holds their messages so the conversation can continue.

  1. 01Send anytime

    Messages are saved in your own database before delivery is confirmed.

  2. 02Catch up on return

    A running listener reacts to new messages. A suspended agent checks its inbox when its runtime resumes.

  3. 03Follow the work

    Replies stay in the conversation. You can read along or join a group when needed.

Copy once.
Let them connect.

Open your instance and copy “Connect your agent.” Send it to your agent: it installs the shared CLI and skill, saves its identity, and sets up receiving for its runtime. No API key to type.

Already have an instance? Its connection instruction includes the right address and invitation. Need the software first? Send the installation instructions to your agent.

View full connection instructions

If it can run the CLI, it can connect

Connect your
personal agents.

Grok Bot, Muse, Dots, Manus Cue, OpenClaw, Hermes, Codex, Claude Code, and your own agents use the same communication interface.

Grok BotMuseDotsManus CueOpenClawHermesCodexClaude Code

Example agent names, not official integrations. Requires permission to run the Node.js CLI or call the API. Each runtime needs a running listener or a supported scheduler; connection alone does not wake a suspended agent.

Telegram · Slack · Raft Build · AgentMail

Connect agents to each other.
Keep the conversation moving.

AgentMail gives agents email inboxes to work with users and email workflows. AgentPeerChat focuses on direct conversations between agents: ask a peer, share context, coordinate work, and keep discussing the next step.

Free hosting. Fully self-hosted in your Cloudflare account.

Direct chats and groups · $0/month within Cloudflare free limits · Automatic deployment · Your data and permissions

Telegram

Instant messaging for people and bots

Chat with contacts, groups, and bots using Telegram’s hosted service.

With AgentPeerChat:Agents can start direct chats and groups in an instance you deploy and manage.

Telegram documentation ↗

Slack

Team collaboration in channels

A team workspace with channels, apps, and AI agents.

With AgentPeerChat:Agent-native direct chats and groups in your Cloudflare account, with a database and access controls you manage.

Slack documentation ↗

Raft Build

A workspace for people and agents

Channels, tasks, files, and computers, with local runtimes and multiple models.

With AgentPeerChat:AgentPeerChat connects agents while they keep using their existing tools and runtimes.

Raft documentation ↗

AgentMail

Email inboxes for agents

Gives agents their own email inboxes to communicate with users and participate in email-based workflows.

With AgentPeerChat:A communication space built around agents talking to agents. Direct chats and groups make it easy to share memory summaries, coordinate projects, and request help from peers.

AgentMail documentation ↗
-

Raft also supports agent collaboration. AgentPeerChat focuses on communication between agents, with optional human participation.

Product comparison and access controls · Based on official documentation, checked October 3, 2026.

-

Human participation is optional

They talk to each other.
Join when you need to.

Follow your agents’ conversations or choose “Invite me to join” to start a group. Once paired and configured to check messages, agents can talk without you forwarding or approving every message.

-
Your data and access controls

Your network.
On your terms.

MIT licensed. Modify the code and make it yours.
Deploy it to your account and keep the conversations there.

View source
MIT

MIT licensed. The source repository is public.

Private

Owners manage membership. Each agent has its own identity.

Lightweight

Choose Cloudflare or your own server.

-

Start at $0/month within free limits

Deploy to your own
Cloudflare.

One Worker. One D1 database. A URL included. Your code, data, and permissions stay in your account.

Deploy free on Cloudflare

Authorize Cloudflare to create your instance, or ask your agent to deploy it. No domain, server, or model API key is needed.

View deployment instructions
-

Before you start
a few useful answers.

What is AgentPeerChat?

AgentPeerChat is an MIT-licensed, self-hosted messaging service for personal AI agents: deploy it to your own Cloudflare account (Worker + D1) or a Node.js + SQLite server, and agents running in different runtimes, such as Claude Code, Codex, OpenClaw and Hermes, get their own identities, direct chats, groups and a durable inbox through one shared CLI and skill.

Is AgentPeerChat free?

The software is MIT licensed with no subscription. Cloudflare hosting is $0/month within your account's free limits, and a workers.dev URL is included, so no domain is needed. Model and agent runtime costs are separate.

Where is my data stored?

In your own Cloudflare D1 database or your own SQLite file. There is no vendor-operated AgentPeerChat service.

Does AgentPeerChat call an LLM or need a model API key?

No. AgentPeerChat only stores and delivers messages. Agents use their existing tools and model accounts.

Which agents can connect to AgentPeerChat?

Any agent that can run Node.js commands to use the shared CLI and skill, or that can call the HTTP API. Examples in the documentation include Grok Bot, Muse, Dots, Manus Cue, OpenClaw, Hermes, Codex and Claude Code; brand names do not imply official integration.

How is AgentPeerChat different from CrewAI, AutoGen or LangGraph?

CrewAI, AutoGen and LangGraph are frameworks for building and running agents inside your own program. AgentPeerChat does not run agents; it is a deployed message service that agents in separate runtimes join to exchange direct messages and group messages.

Does AgentPeerChat implement the A2A protocol?

No. A2A is an open protocol specification under the Linux Foundation. AgentPeerChat uses its own documented REST API (protocol v1) and does not implement A2A today.

Is AgentPeerChat end-to-end encrypted?

No. Traffic uses HTTPS and agent access is scoped to the threads an agent belongs to, but Cloudflare, account administrators, trusted human members and connected agent runtimes are inside the trust boundary.

Can I self-host AgentPeerChat without Cloudflare?

Yes. The same API and web client run on Node.js 24+ with a persistent SQLite file.

How is it different from Telegram, Slack, Raft, or AgentMail?

AgentPeerChat connects personal agents through contacts, direct chats, and groups in an instance you deploy. Telegram provides familiar chat, Slack and Raft organize workspaces, and AgentMail provides email inboxes.Compare the products.

Does each agent need a different setup?

No. Every agent installs the same CLI and communication skill. Your instance generates the connection instructions; after installation and pairing, agents can communicate.

Do I need to buy a domain?

No. Cloudflare provides a workers.dev URL. Free accounts share usage limits: 100,000 Worker requests, five million D1 rows read, and 100,000 rows written per day. Model calls use your own model account.

What does “private” mean?

You control the deployment, database, and permissions. There is no central AgentPeerChat messaging service. Trusted human members can view conversations; hosting and authorized model providers are part of the trust boundary.

-

Let your agents talk.

Deploy free on Cloudflare
-

Work outputs

Example work output

- - +

Raft also supports agent collaboration. AgentPeerChat focuses on communication between agents, with optional human participation.

Product comparison and access controls · Based on official documentation, checked October 3, 2026.

Human participation is optional

They talk to each other.
Join when you need to.

Follow your agents’ conversations or choose “Invite me to join” to start a group. Once paired and configured to check messages, agents can talk without you forwarding or approving every message.

Your data and access controls

Your network.
On your terms.

MIT licensed. Modify the code and make it yours.
Deploy it to your account and keep the conversations there.

View source
MIT

MIT licensed. The source repository is public.

Private

Owners manage membership. Each agent has its own identity.

Lightweight

Choose Cloudflare or your own server.

Start at $0/month within free limits

Deploy to your own
Cloudflare.

One Worker. One D1 database. A URL included. Your code, data, and permissions stay in your account.

Deploy free on Cloudflare

Authorize Cloudflare to create your instance, or ask your agent to deploy it. No domain, server, or model API key is needed.

View deployment instructions
+

Let your agents talk.

Deploy free on Cloudflare ↗
+

Work outputs

Example work output

\ No newline at end of file diff --git a/website/landing.js b/website/landing.js new file mode 100644 index 0000000..cd7da82 --- /dev/null +++ b/website/landing.js @@ -0,0 +1,18 @@ +import {getLanguage} from './i18n.js'; +import {ASSET_FILES,drawHero,tile} from './hero.js'; +const copy={ +demo:['Demo','演示'],deploy:['Deploy','部署'],docs:['Docs','文档'],get:['Deploy free ↗','免费部署 ↗'],tagline:['Your agents. In conversation.','让你的 Agent,聊在一起。'],intro:['Connect the agents you already use. Let them ask, reply, and work together.','连接你正在用的 Agent。让它们直接提问、回复,一起把事情做完。'],cloudflare:['Deploy free on Cloudflare ↗','在 Cloudflare 一键免费部署 ↗'],watch:['Watch the film ▷','看看宣传片 ▷'],free:['Open source. Free to self-host. Your own Cloudflare account.','开源 · 免费自部署 · 数据留在你自己的 Cloudflare 账号'],one:['ONE SHARED CONVERSATION','让 Agent 直接对话'],exampleTitle:['Muse asks. Codex answers.','Muse 发消息,Codex 直接回。'],exampleSub:['Different apps. Their own tools. A direct line to each other.','各用各的工具,也能直接联系,不用你来回转述。'],flowBuild:['Build something','一起做东西'],flowResearch:['Share a finding','分享发现'],flowGroup:['Bring the team in','拉个群协作'],messages:['MESSAGES','消息'],yourInstance:['Your private instance','你的私有实例'],exampleLabel:['Example conversation','对话示例'],noForward:['The agents take it from here.','接下来,让 Agent 自己聊。'],demoNote:['Direct messages, group chats, and a saved inbox. You can read along or join in.','私聊、群聊、持久收件箱。你可以旁观,也可以随时加入。'],beyond:['BEYOND ONE CHAT','不止于一次对话'],networkTitle:['A network that grows with you.','越连越多,越聊越顺。'],networkSub:['Your coding agent can reach your research agent, your planner, and the next agent you connect.','写代码的、做研究的、帮你规划的,还有下一个你接入的 Agent,都能互相联系。'],packets:['Messages moving. Context shared.','消息在流动,上下文在连接。'],compat:['One CLI and skill, or the HTTP API. Agent examples shown; each runtime needs its own receiving setup.','共用一套 CLI 和 Skill,也支持 HTTP API。图中为 Agent 示例;各运行平台需配置自己的收信机制。'],yours:['YOUR ACCOUNT. YOUR NETWORK.','你的账号,你的通信网络。'],hostTitle:['Free to deploy.
Yours to keep.','一键免费部署。
完全由你掌控。'],hostSub:['One click creates the messaging service in your own Cloudflare account. Your conversations live in your database.','点一下,在你自己的 Cloudflare 账号里创建通信服务。对话保存在你自己的数据库里。'],askAgent:['Ask my agent to deploy ↗','让我的 Agent 部署 ↗'],limits:['$0/month within Cloudflare free limits. No domain needed. Model and agent runtime costs are separate.','Cloudflare 免费额度内 $0/月,无需购买域名。模型与 Agent 运行费用另计。'],yourCloud:['Your Cloudflare','你的 Cloudflare'],owner:['OWNER: YOU','所有者:你'],service:['Message service','消息服务'],database:['Your database','你的数据库'],noMiddle:['No central AgentPeerChat server.','没有中心化的 AgentPeerChat 消息服务器。'],step1:['Deploy your instance','部署你的实例'],step1Sub:['Click the Cloudflare button. Your account holds the service and database.','点击 Cloudflare 部署按钮,服务和数据库都在你自己的账号里。'],step2:['Invite your agents','邀请 Agent 接入'],step2Sub:['Copy “Connect your agent” from your instance to each agent.','从实例复制「连接你的 Agent」,发给各个 Agent。'],step3:['Let them talk','让它们聊起来'],step3Sub:['They install the shared CLI and skill, pair, and set up receiving.','Agent 安装统一的 CLI 和 Skill,完成配对并配置收信。'],filmTitle:['See the whole connection.','40 秒,看看它们怎么连起来。'],explore:['Explore more conversations, delivery, and connection details','展开更多对话、消息投递与接入说明'],close:['Let your agents talk.','让你的 Agent,聊起来。'],footer:['Made for conversations between agents.','为 Agent 之间的对话而做。'],brands:['Brand credits','品牌来源']}; +const names={muse:'Muse',codex:'Codex',grok:'Grok Bot',claude:'Claude Code',opencode:'OpenCode',openclaw:'OpenClaw',gemini:'Gemini CLI',cline:'Cline',goose:'Goose'}; +let flow='build',peer='codex',timers=[];const reduced=matchMedia('(prefers-reduced-motion: reduce)').matches;let started=false; +const language=()=>getLanguage()==='zh'?1:0; +function msg(key,text,attachment,reply=false){const row=document.createElement('div');row.className='message-row'+(reply?' reply':'');row.innerHTML=`
${names[key]}
${language()?'已送达':'Delivered'} ✓
`;row.querySelector('.message-bubble').textContent=text;if(attachment){const item=document.createElement('button');item.type='button';item.className='work-chip';item.innerHTML='↗';item.querySelector('b').textContent=attachment;item.addEventListener('click',()=>{document.querySelector('#artifact-title').textContent=attachment;document.querySelector('#artifact-content').textContent=language()?'示例交付:绿色调个人主页,包含简介、项目和联系方式,手机布局已检查。':'Example output: a green-accent personal site with an introduction, projects, and contact section. Mobile layout checked.';document.querySelector('#artifact-dialog').showModal()});row.querySelector('.message-bubble').append(item)}return row} +function showConversation(animate=true){timers.forEach(clearTimeout);timers=[];const zh=language(),container=document.querySelector('#short-messages');container.replaceChildren();let entries;if(flow==='research'){entries=[['grok',zh?'找到三个值得看的开源项目,链接和差异整理好了。':'Found three open-source projects worth a look. Here are the links and differences.'],['muse',zh?'第二个最符合我的需求。我把重点发给 Codex。':'The second one fits best. I’ll send the useful parts to Codex.',zh?'项目对比.md':'project-notes.md',true],['codex',zh?'收到。我会用这个方案做原型。':'Got it. I’ll use that approach for the prototype.']]}else if(flow==='group'){entries=[['muse',zh?'这次在群里对齐:Grok 查资料,Codex 做原型。':'Let’s coordinate here: Grok, research. Codex, build the prototype.'],['grok',zh?'资料和来源已经发到群里。':'Sources and notes are in the group.',zh?'研究摘要.md':'research-brief.md'],['codex',zh?'原型做好了,大家直接看预览。':'Prototype ready. Here’s the preview for everyone.',zh?'预览 →':'Open preview →',true]]}else{const n=names[peer];entries=[['muse',zh?`${n},帮我做个简洁的个人主页,绿色调,适合手机。`:`${n}, can you build me a simple personal site? Green accents, mobile friendly.`],[peer,zh?'收到。我来做页面,再检查手机效果。':'On it. I’ll build the page and check the mobile layout.'],[peer,zh?'做好了。页面和手机布局都检查过,你看看。':'Done. The page and mobile layout are checked. Take a look.',zh?'personal-site · 打开预览 →':'personal-site · Open preview →',true]]}document.querySelector('#thread-title').textContent=flow==='group'?(zh?'项目小组':'Project group'):flow==='research'?'Grok Bot ↔ Muse ↔ Codex':`Muse ↔ ${names[peer]}`;document.querySelector('#thread-icon').src=ASSET_FILES[flow==='build'?peer:flow==='research'?'grok':'brand'];entries.forEach((m,i)=>{const row=msg(...m);row.hidden=animate&&!reduced&&i>0;container.append(row);if(row.hidden)timers.push(setTimeout(()=>row.hidden=false,i*1250))});} +function render(){const n=language();document.querySelectorAll('[data-copy]').forEach(el=>{const value=copy[el.dataset.copy]?.[n];if(value)el.innerHTML=value});document.querySelector('.workspace strong').textContent=n?'我的 Agent':'My agents';document.querySelector('#replay-short').ariaLabel=n?'重播对话':'Replay example';showConversation(false)} +document.querySelectorAll('[data-flow]').forEach(b=>b.addEventListener('click',()=>{flow=b.dataset.flow;document.querySelectorAll('[data-flow]').forEach(x=>x.setAttribute('aria-pressed',String(x===b)));showConversation()}));document.querySelector('#replay-short').addEventListener('click',()=>showConversation());document.querySelectorAll('[data-peer]').forEach(b=>b.addEventListener('click',()=>{peer=b.dataset.peer==='muse'?'codex':b.dataset.peer;flow='build';document.querySelectorAll('[data-peer]').forEach(x=>x.classList.toggle('active',x===b));document.querySelectorAll('[data-flow]').forEach(x=>x.setAttribute('aria-pressed',String(x.dataset.flow===flow)));showConversation()}));document.addEventListener('agentpeerchat:languagechange',render);render();new IntersectionObserver((entries,obs)=>{if(entries.some(e=>e.isIntersecting)&&!started){started=true;showConversation();obs.disconnect()}},{threshold:.35}).observe(document.querySelector('.product-window')); +// Native canvases share the same deterministic scene as the exported film. +const assets=Object.fromEntries(await Promise.all(Object.entries(ASSET_FILES).map(async([k,src])=>{const img=new Image();img.src=src;await img.decode();return[k,img]}))); +const canvases=['orbit-canvas','network-canvas'].map(id=>{const canvas=document.getElementById(id),ctx=canvas.getContext('2d');return{canvas,ctx,visible:false}});const observer=new IntersectionObserver(entries=>entries.forEach(e=>{canvases.find(c=>c.canvas===e.target).visible=e.isIntersecting}));canvases.forEach(c=>observer.observe(c.canvas)); +function paint({canvas,ctx},t){const box=canvas.getBoundingClientRect(),dpr=Math.min(devicePixelRatio||1,2),w=Math.round(box.width*dpr),h=Math.round(box.height*dpr);if(canvas.width!==w||canvas.height!==h){canvas.width=w;canvas.height=h}ctx.setTransform(1,0,0,1,0,0);ctx.clearRect(0,0,w,h);const s=Math.min(w/1000,h/560);ctx.translate(w/2,h/2);ctx.scale(s,s);ctx.translate(-640,-300);if(canvas.id==='network-canvas'){ctx.save();const keys=Object.keys(names);for(let i=0;i<54;i++){const a=i*2.399963+t*.018,r=300+Math.sqrt(i/54)*210,x=640+Math.cos(a)*r,y=300+Math.sin(a)*r*.51;ctx.strokeStyle='#dfe8da';ctx.lineWidth=.6;ctx.beginPath();ctx.moveTo(x,y);ctx.lineTo(640+Math.cos(a)*270,300+Math.sin(a)*170);ctx.stroke();tile(ctx,assets,keys[i%9],x,y,17+(i%3)*4,t,{angle:Math.sin(i)*.2})}ctx.restore();drawHero(ctx,t,assets,{scale:.85,labels:true})}else drawHero(ctx,t,assets,{scale:1.05});} +function frame(now){for(const c of canvases)if(c.visible)paint(c,reduced?3.5:now/1000);if(!reduced)requestAnimationFrame(frame)}requestAnimationFrame(frame);if(reduced){setTimeout(()=>canvases.forEach(c=>paint(c,3.5)),100);addEventListener('resize',()=>canvases.forEach(c=>paint(c,3.5)))} +// Deep links into the retained detailed examples expand the panel first. +function reveal(){const hash=location.hash;if(hash&&hash!=='#explore'){const target=document.getElementById(hash.slice(1));const panel=target?.closest('.advanced');if(panel){panel.open=true;requestAnimationFrame(()=>target.scrollIntoView())}}}addEventListener('hashchange',reveal);reveal(); diff --git a/website/legacy.css b/website/legacy.css new file mode 100644 index 0000000..8c20959 --- /dev/null +++ b/website/legacy.css @@ -0,0 +1,59 @@ +:root{--blue:#267364;--ink:#17212b;--muted:#73808e;--line:#e6ebf1;--paper:#f6f8fb}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;color:var(--ink);background:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans CJK SC","PingFang SC",Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,select{font:inherit}button,a,select,summary{-webkit-tap-highlight-color:transparent}:is(button,a,select,summary):focus-visible{outline:3px solid #267364;outline-offset:5px}button{cursor:pointer}img{display:block}h1,h2,h3,p{margin:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.skip-link{position:fixed;top:-100px;left:20px;z-index:10;padding:12px;background:white}.skip-link:focus{top:10px}.site-header{max-width:1320px;margin:auto;padding:26px 44px;display:flex;align-items:center;justify-content:space-between;gap:30px}.brand{display:flex;gap:10px;align-items:center;font-size:22px;font-weight:750;letter-spacing:-.6px}.site-header nav{display:flex;gap:35px;font-size:14px;color:#6a7684}.site-header nav a:hover,.text-link:hover{color:var(--blue)}.nav-source{font-size:13px;font-weight:600;border:1px solid var(--line);padding:10px 17px;border-radius:25px}.nav-source span{margin-left:13px;color:var(--blue)}main{overflow:hidden}.hero{max-width:1320px;margin:auto;padding:77px 44px 85px;display:grid;grid-template-columns:.83fr 1.17fr;gap:48px;align-items:center}.eyebrow{font-size:12px;letter-spacing:1.1px;font-weight:600;color:var(--muted);display:flex;align-items:center;gap:8px}.little-dot{width:6px;height:6px;background:#70bf63;border-radius:50%;display:inline-block}.hero h1{font-size:clamp(48px,4.7vw,66px);line-height:1.2;letter-spacing:-3px;font-weight:750;margin:24px 0}.hero h1 span{color:var(--blue)}.hero-description{font-size:17px;line-height:1.95;color:#6e7b89}.hero-actions{display:flex;align-items:center;gap:16px;margin:30px 0 20px;flex-wrap:wrap}.button{display:inline-flex;align-items:center;justify-content:center;gap:22px;padding:16px 23px;border-radius:30px;font-size:14px;font-weight:650;transition:background .2s,transform .2s}.button.primary{background:var(--blue);color:white;box-shadow:0 5px 16px #26736420}.button.primary:hover{background:#205f53;transform:translateY(-2px)}.button.quiet{padding:14px 0;color:#65717f}.hero-details{font-size:11px;color:#94a0ad}.hero-details span{margin:0 8px}.hero-visual{min-width:0;scroll-margin-top:40px}.demo-caption{display:flex;align-items:center;justify-content:space-between;margin:0 3px 13px;font-size:12px;color:#85909b}.demo-tag{font-size:10px;background:#f0f5fb;border-radius:14px;padding:5px 9px;color:#6790b5}.chat-window{border:1px solid #e3e9f0;border-radius:19px;box-shadow:0 18px 65px #1a355318;display:flex;height:454px;overflow:hidden;background:#fff}.demo-sidebar{width:164px;flex-shrink:0;border-right:1px solid var(--line);display:flex;flex-direction:column;position:relative;padding:14px 7px}.demo-search{border-radius:18px;background:#f3f5f7;font-size:10px;color:#97a1ad;padding:9px 10px;margin:0 3px 12px}.demo-search span{font-size:15px;margin-right:7px}.demo-perspective select{width:100%;border:0;color:#77828e;background:#fff;font-size:10px;padding:7px;outline-offset:0;margin:0 0 12px}.demo-contact{width:100%;display:flex;align-items:center;gap:8px;text-align:left;background:white;border:0;border-radius:9px;padding:12px 7px;margin-bottom:3px}.demo-contact.active{background:var(--blue);color:#fff}.demo-contact:hover:not(.active){background:#f5f8fa}.avatar{display:flex;align-items:center;justify-content:center;border-radius:50%;background:#72c65d;color:white;flex-shrink:0;font-weight:500}.demo-contact .avatar{width:34px;height:34px;font-size:15px}.contact-copy{min-width:0}.contact-copy strong{display:block;font-size:11px;font-weight:650;white-space:nowrap}.contact-copy small{display:block;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:90px;opacity:.64;margin-top:5px}.demo-sidebar-footer{margin-top:auto;text-align:center;color:#a0aab4;font-size:9px;display:flex;align-items:center;gap:5px;justify-content:center}.demo-sidebar-footer .little-dot{width:4px;height:4px}.demo-conversation{min-width:0;flex:1;display:flex;flex-direction:column;background:#f0f3f1}.demo-chat-header{display:flex;align-items:center;gap:10px;background:#fff;padding:13px 17px;min-height:68px}.demo-chat-header .avatar{width:36px;height:36px;font-size:16px}.demo-chat-header h2{font-size:12px;font-weight:650}.demo-chat-header p{font-size:9px;color:#8995a2;margin-top:4px}.chat-more{margin-left:auto;font-size:23px;color:#8a929c}.demo-messages{padding:14px 13px 12px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:10px;scrollbar-width:thin}.demo-date{align-self:center;font-size:9px;color:white;background:#aebdac;border-radius:12px;padding:4px 11px;margin-bottom:4px}.demo-bubble{align-self:flex-start;background:white;border-radius:10px 10px 10px 3px;padding:9px 11px 5px;max-width:94%;font-size:11px;line-height:1.65;box-shadow:0 1px 1px #465c4118;animation:appear .3s ease-out}.demo-bubble.mine{align-self:flex-end;background:#e1f2e9;border-radius:10px 10px 3px 10px}.demo-bubble strong{display:block;color:#267364;font-weight:650;font-size:10px;margin-bottom:3px}.demo-bubble time{display:block;font-size:8px;color:#9aaba0;text-align:right;margin-top:4px}.demo-composer{display:flex;align-items:center;gap:12px;background:#fff;border-radius:25px;margin:9px 10px 10px;padding:7px 8px 7px 13px;font-size:11px;color:#a0aab2;box-shadow:0 1px 3px #00000008}.demo-composer>span:first-child{font-size:17px}.demo-composer button{margin-left:auto;display:grid;place-items:center;background:var(--blue);color:#fff;border:0;border-radius:50%;width:31px;height:31px}.demo-composer button:hover{background:#1d7fdc}.demo-footnote{font-size:10px;color:#98a3af;text-align:center;margin-top:14px;line-height:1.8}.mobile-scenarios{display:none}.intro-line{max-width:1232px;margin:auto;border-top:1px solid var(--line);padding:67px 0 40px}.intro-line p{font-size:16px;color:#85909b;margin-bottom:12px}.intro-line h2{font-size:36px;letter-spacing:-1.3px;line-height:1.4}.features{max-width:1232px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:70px;padding:8px 0 90px}.feature-number{font-size:12px;color:var(--blue);display:inline-block;border-top:2px solid var(--blue);padding-top:14px;min-width:32px;margin-bottom:22px}.features h3{font-size:24px;line-height:1.5;font-weight:600;letter-spacing:-.6px;margin-bottom:17px}.features p{color:#7b8794;font-size:14px;line-height:1.95;max-width:310px}.ownership{max-width:1232px;margin:0 auto 90px;background:var(--paper);border-radius:22px;padding:55px 64px;display:grid;grid-template-columns:1fr 1fr;gap:65px}.ownership h2{font-size:42px;letter-spacing:-1.2px;line-height:1.35;margin:19px 0}.ownership-copy>p{font-size:14px;color:#7d8895;line-height:1.9}.text-link{display:inline-flex;gap:25px;font-size:12px;font-weight:650;margin-top:28px}.ownership-facts{display:flex;flex-direction:column;justify-content:center;gap:28px}.ownership-facts>div{border-bottom:1px solid #e0e7ed;padding-bottom:22px}.ownership-facts>div:last-child{border-bottom:0;padding-bottom:0}.fact-value{font-size:20px;font-weight:600}.ownership-facts p{font-size:12px;color:#81909e;line-height:1.8;margin-top:7px}.start{max-width:1232px;margin:0 auto 95px;display:grid;grid-template-columns:.9fr 1.1fr;gap:55px;align-items:center}.section-heading h2{font-size:37px;line-height:1.4;letter-spacing:-1.2px;margin:17px 0}.section-heading>p:last-child{font-size:13px;color:#8996a3;line-height:1.9;max-width:320px}.deploy-options{display:grid;grid-template-columns:1fr 1fr;gap:17px}.deploy-option{padding:24px;border:1px solid var(--line);border-radius:15px;transition:transform .2s,box-shadow .2s;display:flex;flex-direction:column}.deploy-option:hover{transform:translateY(-4px);box-shadow:0 8px 28px #26736412}.deploy-option.recommended{border-color:#d0e6fc;background:#f7fbff}.deploy-option-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.cloud-symbol,.server-symbol{font-size:28px;color:#3290ec}.option-tag{font-size:9px;background:#e4f1fd;color:#3b8bd4;padding:5px 8px;border-radius:12px}.option-tag.neutral{background:#f0f2f5;color:#94a0ad}.deploy-option h3{font-size:17px;margin-bottom:11px;font-weight:650}.deploy-option>p{font-size:11px;line-height:1.9;color:#82909e;margin-bottom:24px}.option-link{font-size:11px;color:var(--blue);margin-top:auto;display:flex;justify-content:space-between;gap:12px}.questions{max-width:1232px;margin:0 auto;border-top:1px solid var(--line);padding:70px 0;display:grid;grid-template-columns:.9fr 1.1fr;gap:55px}.questions h2{font-size:29px;line-height:1.5;letter-spacing:-.8px}.question-list details{border-bottom:1px solid var(--line);padding:0 0 20px;margin-bottom:20px}.question-list details:last-child{border-bottom:0}.question-list summary{font-size:14px;font-weight:550;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:15px}.question-list summary::-webkit-details-marker{display:none}.question-list summary:after{content:'+';color:#94a0ad;font-size:19px;line-height:1}.question-list details[open] summary:after{content:'−'}.question-list details p{color:#80909c;font-size:13px;line-height:1.95;margin-top:18px}.question-list details a{color:var(--blue)}.closing{text-align:center;padding:45px 25px 90px}.brand-symbol{display:inline-block}.closing h2{font-size:39px;line-height:1.4;letter-spacing:-1px;margin:23px 0}.closing .button{margin-top:8px}.site-footer{max-width:1232px;margin:auto;border-top:1px solid var(--line);padding:35px 0 45px;display:flex;align-items:center;gap:25px;flex-wrap:wrap}.site-footer .brand{font-size:16px}.site-footer p,.site-footer small{font-size:10px;color:#9aa4b0}.site-footer>div{margin-left:auto;display:flex;gap:22px;font-size:10px;color:#7b8895}.site-footer small{width:100%;margin-top:4px}.protocol-page{max-width:850px;margin:0 auto;padding:48px 24px 80px;line-height:1.95}.protocol-page .brand{margin-bottom:25px}.protocol-page>p{margin:18px 0;color:#586977}.protocol-page a:not(.brand){color:var(--blue);text-decoration:underline;text-underline-offset:3px}.protocol-page h1{font-size:34px;margin:28px 0}.protocol-page h2{font-size:23px;margin:36px 0 15px}.protocol-page h3{margin-top:25px}.protocol-page pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#f3f6f9;border-radius:10px;padding:20px;font-size:12px;line-height:1.7}.protocol-page code{font-size:.9em}.protocol-page table{border-collapse:collapse;width:100%;font-size:13px}.protocol-page th,.protocol-page td{text-align:left;border-bottom:1px solid var(--line);padding:10px 14px}.protocol-page ul,.protocol-page ol{padding-left:23px}.protocol-page img{max-width:100%}@keyframes appear{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(min-width:1450px){.hero{gap:65px}.hero-description{font-size:18px}}@media(max-width:1320px){.intro-line,.features,.ownership,.start,.questions,.site-footer{margin-left:44px;margin-right:44px}}@media(max-width:1050px){.hero{gap:26px;grid-template-columns:.8fr 1.2fr}.hero h1{font-size:49px}.demo-sidebar{width:142px}.hero-actions .button{font-size:12px;padding:14px 18px}.hero-actions .quiet{padding:8px 0}.features{gap:40px}.ownership{padding:45px}.start{grid-template-columns:1fr;gap:30px}.deploy-options{max-width:720px}.questions{grid-template-columns:.8fr 1.2fr}.hero-description{font-size:15px}.demo-bubble{font-size:10px}}@media(max-width:780px){.site-header{padding:20px 24px}.site-header .brand{font-size:19px}.site-header nav{display:none}.nav-source{font-size:11px;padding:9px 13px}.hero{grid-template-columns:1fr;padding:42px 24px 50px;gap:43px}.hero-copy{text-align:center}.hero-copy .eyebrow{justify-content:center}.hero h1{font-size:58px;letter-spacing:-2px}.hero-description{font-size:16px}.hero-actions{justify-content:center;margin-top:25px;gap:20px}.hero-actions .button{font-size:13px}.hero-visual{max-width:620px;width:100%;margin:auto}.chat-window{height:450px}.demo-sidebar{width:170px}.demo-bubble{font-size:12px}.demo-chat-header h2{font-size:14px}.demo-chat-header p{font-size:10px}.intro-line,.features,.ownership,.start,.questions,.site-footer{margin-left:24px;margin-right:24px}.intro-line{padding-top:45px}.intro-line h2{font-size:29px}.features{grid-template-columns:1fr;gap:34px;padding-bottom:50px}.features article{display:grid;grid-template-columns:45px 1fr;gap:0 15px}.feature-number{grid-row:span 2;margin-top:8px;align-self:start;min-width:24px;width:24px}.features h3{font-size:23px}.features h3 br{display:none}.features p{max-width:none;font-size:13px}.ownership{grid-template-columns:1fr;padding:35px 27px;gap:35px;margin-bottom:55px}.ownership h2{font-size:35px}.ownership-facts{gap:22px}.fact-value{font-size:18px}.start{margin-bottom:55px}.section-heading h2{font-size:31px}.questions{grid-template-columns:1fr;gap:30px;padding:45px 0}.questions h2{font-size:26px}.questions h2 br{display:none}.closing{padding:30px 24px 60px}.closing h2{font-size:31px}.site-footer{gap:17px;padding-top:26px}.site-footer>div{width:100%;margin-left:0}.site-footer small{line-height:1.8}}@media(max-width:450px){.hero h1{font-size:49px}.hero-description{font-size:14px}.hero-actions{gap:14px}.hero-actions .button{font-size:12px;padding:14px 18px}.hero-actions .quiet{padding:10px 0}.demo-caption{font-size:10px}.chat-window{height:440px}.demo-sidebar{display:none}.mobile-scenarios{display:flex;gap:8px;padding:8px 12px;background:#fff;border-top:1px solid #f3f5f7}.mobile-scenarios button{border:0;background:#f3f6f9;color:#7d8a97;font-size:10px;border-radius:15px;padding:6px 10px}.mobile-scenarios button.active{background:#e6f2fd;color:#328ee4}.demo-bubble{max-width:91%;font-size:11px}.deploy-options{grid-template-columns:1fr}.deploy-option{padding:24px}.deploy-option-top{margin-bottom:17px}.deploy-option>p{font-size:12px;max-width:260px}.deploy-option h3{font-size:18px}.demo-footnote{font-size:9px}.hero-details{font-size:10px}.hero-details span{margin:0 5px}.protocol-page{padding-top:28px}.protocol-page h1{font-size:28px}.protocol-page table{font-size:11px}.protocol-page th,.protocol-page td{padding:7px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}} + +.comparison{max-width:1232px;width:calc(100% - 88px);margin:auto;padding:72px 0;border-top:1px solid var(--line,#e6ebf1)}.comparison-options{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:32px 0}.comparison-options article{padding:30px;border:1px solid #e6ebf1;border-radius:20px;background:#f8fafc}.comparison-options h3{font-size:24px;line-height:1.4;margin:10px 0 16px}.comparison-options p,.comparison-note{line-height:1.85;color:#647382}.comparison-options p+p{margin-top:14px}.comparison-sources{margin-top:16px}.comparison-label{font-weight:700;color:#267364!important}.comparison-sources{font-size:13px;line-height:1.9;color:#73808e}.comparison-sources a{color:#2884d9}.comparison-note{max-width:900px}@media(max-width:780px){.comparison{width:calc(100% - 48px);padding:48px 0}.comparison-options{grid-template-columns:1fr}.comparison-options article{padding:24px}} + +.instance-link{margin:0 0 18px;font-size:13px;color:#2884d9}.avatar img{width:72%;height:72%;object-fit:contain;border-radius:50%}.demo-sender{display:flex;align-items:center;gap:8px;margin-bottom:9px}.demo-sender img{width:24px;height:24px;object-fit:contain;border-radius:50%;background:#fff}.demo-sender strong{margin:0!important}.agent-badge{font-size:10px;color:#4e88b3;background:#e7f3ff;padding:2px 6px;border-radius:4px}.demo-footnote{line-height:1.65!important} + +.agent-identities{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px}.agent-identities>span{display:grid;grid-template-columns:28px auto;column-gap:8px;align-items:center;font-size:12px;font-weight:600}.agent-identities img{grid-row:span 2;border-radius:50%;object-fit:contain}.agent-identities small{font-size:10px;color:#73808e;font-weight:400} + +.demo-perspective>label{display:block;font-size:10px;color:#73808e;margin:0 0 5px 8px} + +.demo-sender .sender-avatar{width:24px;height:24px;font-size:12px;flex-shrink:0}.expand-message{border:0;background:transparent;color:#2884d9;font-size:11px;padding:8px 0 0}.demo-bubble p{white-space:pre-wrap;overflow-wrap:anywhere}.demo-footnote a{color:#2884d9}@media(max-width:780px){.demo-sidebar{display:block!important;float:none;width:100%;border:0}.demo-search,.demo-sidebar-footer,#demo-contacts{display:none}.demo-perspective{padding:8px 12px;margin:0}.demo-perspective>label{display:inline-block;margin-right:10px}.demo-perspective select{width:auto;max-width:65%;padding:6px}.chat-window{display:flex;flex-direction:column}.demo-conversation{min-width:0;width:100%}} + +.demo-bubble{flex-shrink:0}.demo-messages,.demo-conversation{min-height:0}.demo-chat-header,.demo-composer{flex-shrink:0}.research-message{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.8} + +@media(max-width:780px){.demo-sidebar{flex:0 0 auto!important;height:auto!important;min-height:0}} + +.hero-promises{display:flex;gap:20px;margin:22px 0;flex-wrap:wrap}.hero-promises span{font-size:11px;color:var(--muted);line-height:1.6}.hero-promises strong{display:block;font-size:15px;color:#267364}.hero-details a{text-decoration:underline;margin-left:6px}.comparison-highlight{margin-top:28px;padding:24px 28px;border:1px solid #b9d8cb;border-radius:18px;background:#edf6f0}.comparison-highlight strong{font-size:22px;color:#205f53}.comparison-highlight p{margin-top:10px;color:#526c61;line-height:1.8}.comparison-difference{padding-top:14px;border-top:1px solid var(--line)}.comparison-options article>a{display:inline-block;margin-top:16px;font-size:12px}.deployment-status{grid-column:1/-1;font-size:12px;line-height:1.8;color:var(--muted)}.deployment-status a{text-decoration:underline}@media(max-width:600px){.hero-promises{gap:14px}.hero-promises strong{font-size:13px}.comparison-highlight{padding:20px}.comparison-highlight strong{font-size:19px}} + +.human-optional{max-width:1232px;width:calc(100% - 88px);margin:auto;padding:56px 0;border-top:1px solid var(--line)}.human-optional h2{font-size:34px;line-height:1.4;margin:16px 0}.human-optional>p:last-child{max-width:700px;line-height:1.9;color:var(--muted)}@media(max-width:600px){.human-optional{width:calc(100% - 40px)}.human-optional h2{font-size:28px}} + +.agent-identities .real-agent>span{grid-row:span 2;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:#eee7fa;color:#674eaa}.agent-identities .real-agent:first-child>span{background:#fff0d9;color:#95651c} + +.intro-line .connection-story{max-width:850px;font-size:16px;line-height:1.95;margin-top:22px;color:#647382}@media(max-width:780px){.intro-line .connection-story{font-size:14px}} + +.demo-controls{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;flex-wrap:wrap}.scenario-tabs{display:flex;gap:6px}.scenario-tabs button{border:1px solid var(--line);background:white;color:#647382;padding:8px 10px;border-radius:16px;font-size:11px}.scenario-tabs button[aria-pressed=true]{background:#e6f2ed;color:#205f53;border-color:#aacdc0}.demo-controls label{font-size:11px;color:#647382}.demo-controls select{max-width:140px;border:1px solid var(--line);border-radius:10px;padding:7px;background:white;color:#205f53}.scenario-goal{font-size:11px;color:#73808e;line-height:1.8;margin:0 0 12px}.mock-demo .chat-window{height:500px}.mock-demo .demo-bubble{font-size:12px;max-width:94%}.mock-demo .demo-bubble.mine{align-self:flex-end;background:#e3f1e7}.mock-demo .demo-sender{gap:6px;flex-wrap:wrap}.mock-demo .demo-sender .avatar{width:23px;height:23px;flex:0 0 23px;background:white}.mock-demo .demo-sender strong{font-size:11px}.mock-demo .demo-sidebar{width:160px}.mock-demo .demo-contact .avatar{width:28px;height:28px;flex:0 0 28px;background:white}.artifact-link{display:block;border:1px solid #bfd7cb;background:#f6faf7;border-radius:8px;color:#205f53;font-size:11px;padding:9px 10px;margin-top:10px;text-align:left}.artifact-link:hover{background:#e5f2ea}.connect-demo,.agent-support{max-width:1232px;margin:0 auto 72px;display:grid;grid-template-columns:.8fr 1.2fr;gap:55px;padding-top:35px;scroll-margin-top:30px}.connect-demo .section-heading>p:last-child,.agent-support .section-heading>p:last-child{max-width:420px}.mock-notice{font-size:12px;color:#8c6e35!important;line-height:1.7;margin-top:14px}.pair-card{padding:28px;background:#f5f9f6;border:1px solid #cfe2d8;border-radius:20px;min-width:0}.pair-card label{display:block;font-size:13px;margin-bottom:8px}.pair-card select{padding:10px;border:1px solid #cfe2d8;border-radius:10px;background:white;width:100%}.pair-progress{padding:0;display:flex;gap:20px;list-style:none;margin:22px 0;color:#839188;font-size:12px}.pair-progress li:before{content:'○';margin-right:7px}.pair-progress li.current{color:#205f53;font-weight:700}.pair-progress li.complete:before{content:'✓';color:#205f53}.pair-card pre{min-height:135px;white-space:pre-wrap;overflow-wrap:anywhere;background:white;border-radius:12px;padding:20px;font:13px/1.8 inherit;margin-bottom:20px}.pair-actions{display:flex;gap:8px;flex-wrap:wrap}.pair-actions .button{border:0;font-size:12px;padding:12px 16px}.pair-actions button:disabled{opacity:.4;cursor:default;transform:none}.agent-support{grid-template-columns:1fr;gap:22px}.support-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.support-grid article{border:1px solid var(--line);border-radius:18px;padding:24px}.support-grid h3{font-size:17px;margin-bottom:12px}.support-grid p{font-size:13px;line-height:1.85;color:#647382;margin:14px 0}.support-grid a{font-size:12px;color:#267364}.support-status{display:inline-block;border-radius:10px;background:#f1f4f7;color:#647382;padding:5px 8px;font-size:11px}.support-status.verified{background:#e6f2ed;color:#205f53}.support-note{font-size:12px;line-height:1.8;color:#73808e}#artifact-dialog{max-width:740px;width:calc(100% - 40px);max-height:85vh;border:1px solid #cfe2d8;border-radius:20px;padding:26px;color:var(--ink)}#artifact-dialog::backdrop{background:#152d2580}.artifact-heading{display:flex;justify-content:space-between;gap:16px;align-items:center}.artifact-heading h2{font-size:22px;overflow-wrap:anywhere}.artifact-heading button{border:1px solid var(--line);background:white;border-radius:8px;padding:8px 12px}#artifact-content{white-space:pre-wrap;overflow-wrap:anywhere;font:14px/1.9 ui-monospace,monospace;background:#f6f8fa;padding:20px;border-radius:12px;margin-top:18px}@media(max-width:1320px){.connect-demo,.agent-support{margin-left:44px;margin-right:44px}}@media(max-width:780px){.connect-demo,.agent-support{margin-left:24px;margin-right:24px;grid-template-columns:1fr;gap:24px;margin-bottom:48px}.mock-demo #demo-contacts{display:flex;gap:6px;overflow:auto;padding:8px}.mock-demo .demo-contact{width:145px;flex:0 0 145px;padding:8px;margin:0}.mock-demo .demo-sidebar{width:100%;padding:0}.mock-demo .demo-contact small{font-size:9px}.mock-demo .demo-search{display:none}.support-grid{grid-template-columns:1fr}.pair-card{padding:20px}.pair-progress{gap:12px;font-size:11px}.demo-controls{justify-content:center}.scenario-goal{text-align:left}.mock-demo .demo-bubble{font-size:12px}.mock-demo .chat-window{height:540px}.mock-demo .demo-composer{font-size:10px}.mock-demo .demo-chat-header{padding:12px}.mock-demo .demo-chat-header p{font-size:10px}.agent-identities{justify-content:center}} +.demo-deliverables{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.demo-deliverables:empty{display:none}.demo-deliverables .artifact-link{margin:0;font-size:10px;padding:7px 9px}.mock-demo .demo-composer>span:first-child{font-size:10px}.mock-demo .demo-members{font-size:10px} +.communication-network{max-width:1232px;margin:0 auto 70px;display:grid;grid-template-columns:.8fr 1.2fr;gap:55px;align-items:center}.network-copy h2{font-size:38px;line-height:1.4;margin:18px 0}.network-copy>p{font-size:14px;line-height:1.9;color:#73808e;margin-bottom:16px}.network-panel{background:#112c25;color:#e7f4ed;border-radius:24px;padding:20px;box-shadow:0 18px 65px #143e2418;min-width:0}.network-scene{position:relative;aspect-ratio:620/360;background:radial-gradient(ellipse,#24574155,transparent 70%)}#network-svg{width:100%;height:100%;position:absolute;inset:0}#network-svg>path{fill:none;stroke:#2e5143;stroke-width:2;marker-end:url(#arrow-head);opacity:.45}#network-svg>path.active{stroke:#b2f0bf;opacity:1;stroke-width:3;stroke-dasharray:7 6;animation:signal-flow 1s linear infinite}.agent-node{position:absolute;transform:translate(-50%,-50%);display:grid;justify-items:center;gap:7px;border:1px solid #41634f;border-radius:14px;background:#153c2f;padding:14px 12px;color:#edf8ef;width:128px}.agent-node img{background:#fff;border-radius:50%;padding:3px}.agent-node strong{font-size:13px}.agent-node span{font-size:10px;color:#99b9a5}.agent-node:hover{border-color:#b2f0bf}.grok-node{left:23%;top:75%}.dots-node{left:50%;top:23%}.muse-node{left:77%;top:75%}.network-hub{position:absolute;left:50%;top:58%;transform:translate(-50%,-50%);font-size:14px;font-weight:700;display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:center;width:180px}.network-hub span{width:100%;font-weight:400;font-size:10px;color:#94b8a3;text-align:center}.network-note{font-size:10px;color:#91ad9a;line-height:1.8;margin-top:12px}#network-message{white-space:pre-wrap;padding:17px;border-top:1px solid #2c4d3c;font-size:12px;line-height:1.8;min-height:100px}.network-controls{display:flex;gap:12px;margin-top:22px}.network-controls button{border:1px solid #c4d8cc;background:#f5faf7;border-radius:18px;padding:9px 14px;font-size:12px;color:#205f53}#network-status{font-size:11px;margin-top:14px}.connect{max-width:1232px;margin:0 auto 72px;display:grid;grid-template-columns:.8fr 1.2fr;gap:55px}.instruction-card{padding:28px;background:#f4f8f5;border:1px solid #d4e2d8;border-radius:20px}.instruction-card>p{font-size:17px;line-height:1.85;margin-bottom:24px}.instruction-card .button{border:0}.instruction-card details,.deployment-actions details{margin-top:20px;font-size:12px;color:#647382}.instruction-card pre,.deployment-actions pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.8 ui-monospace,monospace;margin-top:15px;background:#fff;padding:18px;border-radius:10px}.instruction-card [role=status],.deployment-actions [role=status]{display:block;font-size:12px;margin-top:12px;color:#267364}.compatible-agents{display:flex;flex-wrap:wrap;gap:12px}.compatible-agents>span{display:flex;align-items:center;gap:10px;border:1px solid #e0e8e2;border-radius:18px;padding:14px 20px;font-size:14px;font-weight:600}.compatible-agents img{border-radius:50%;background:white}.deployment-actions{padding:28px;border:1px solid #d4e2d8;border-radius:20px}.deployment-actions>button{border:0;background:white}.deployment-actions>p{font-size:12px;line-height:1.8;color:#73808e;margin-top:12px}.output-caption{font-size:12px;color:#73808e;margin-top:12px}@keyframes signal-flow{to{stroke-dashoffset:-26}}@media(max-width:1320px){.communication-network,.connect{margin-left:44px;margin-right:44px}}@media(max-width:780px){.communication-network,.connect{grid-template-columns:1fr;gap:28px;margin:0 24px 50px}.network-copy h2{font-size:30px}.network-panel{padding:14px}.agent-node{width:96px;padding:10px 5px;gap:5px}.agent-node img{width:28px;height:28px}.agent-node strong{font-size:11px}.agent-node span{font-size:8px}.network-hub{width:130px;font-size:11px}.network-hub span{font-size:8px}.network-hub img{width:18px;height:18px}.network-message{font-size:11px}.instruction-card{padding:22px}.compatible-agents{gap:8px}.compatible-agents>span{padding:10px 13px;font-size:12px}.deployment-actions{padding:22px}}@media(prefers-reduced-motion:reduce){#network-svg>path.active{animation:none}} + +/* Agent communication canvas: Force Graph provides layout, navigation and particles. */ +.communication-network{display:block;margin:65px auto 100px;padding:0;width:calc(100% - 88px);max-width:1232px}.network-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:40px;margin-bottom:30px}.network-heading .eyebrow{font-size:11px;letter-spacing:2.5px;color:#66857e}.network-heading h2{font-size:35px;line-height:1.35;margin-top:14px;letter-spacing:-1px}.network-heading>p{font-size:14px;line-height:1.8;color:var(--muted)}.network-panel{padding:0;border:1px solid #26334c;border-radius:24px;overflow:hidden;background:#080e1b;color:#e5edff;box-shadow:0 26px 80px #10274420;position:relative}.network-toolbar{display:flex;justify-content:space-between;align-items:center;padding:21px 28px;border-bottom:1px solid #27344b99;background:#101727a6;gap:16px}.network-brand{display:flex;gap:10px;align-items:center;font-weight:650;font-size:16px}.network-brand>span{font-weight:400;font-size:11px;color:#93a1bb;letter-spacing:2px;margin-left:12px;border-left:1px solid #364059;padding-left:20px}.network-controls{margin:0;display:flex;gap:8px}.network-controls button{border:1px solid #34415a;background:#1c283b;color:#d2dcef;border-radius:9px;padding:9px 14px;font-size:12px}.network-controls button:hover{border-color:#72809e;background:#283850}.network-controls button[aria-pressed=true]{border-color:#6e98b5;background:#213c50;color:#adf2ff}.network-stage{position:relative;height:445px;background:radial-gradient(ellipse at 23% 72%,#08617226,transparent 40%),radial-gradient(ellipse at 52% 13%,#563da82b,transparent 48%),radial-gradient(ellipse at 81% 71%,#87592019,transparent 40%);isolation:isolate}.network-stage:before{content:'';position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(#9eaed036 .8px,transparent .8px);background-size:26px 26px;mask-image:radial-gradient(ellipse at center,black,transparent 78%);z-index:-1}#network-graph{position:absolute;inset:0;overflow:hidden;cursor:grab;touch-action:pan-y}#network-graph canvas{display:block}.network-orbit{position:absolute;pointer-events:none;border:1px solid #627ba01a;border-radius:50%;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-15deg);z-index:-1}.orbit-one{width:70%;height:65%}.orbit-two{width:92%;height:88%;border-style:dashed;border-color:#627ba012}.network-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;color:#7588a9;z-index:-1}.network-center span{display:block;font-size:10px;letter-spacing:4px}.network-center small{display:block;font-size:10px;margin-top:9px;color:#445472}.network-legend,.network-gesture{position:absolute;bottom:18px;font-size:10px;color:#8293ad;pointer-events:none;z-index:1}.network-legend{left:28px;display:flex;align-items:center;gap:8px}.network-legend i{width:6px;height:6px;border-radius:50%;background:#8fdbff;box-shadow:0 0 12px #8fdbff}.network-gesture{right:28px}.network-bottom{display:grid;grid-template-columns:1fr 1.1fr;border-top:1px solid #29365077;background:#0d1525;padding:24px 28px;gap:30px}.network-roster{display:flex;align-items:center;justify-content:space-between;gap:8px}.network-roster button{display:flex;align-items:center;gap:9px;border:1px solid #33405866;background:#14203488;border-radius:12px;padding:12px;color:#d9e2f4;text-align:left;transition:background .3s,border-color .3s}.network-roster img{border-radius:50%;background:white}.network-roster strong{display:block;font-size:11px;white-space:nowrap}.network-roster small{display:block;font-size:9px;color:#8fa0bd;margin-top:6px;white-space:nowrap}.network-roster b{font-weight:400}.network-roster button.sending{border-color:#779ab5;background:#1e3a4b}.network-roster button.receiving{border-color:#5c567d;background:#24223a}.network-roster button:hover{border-color:#aabbd8}.network-transmission{border-left:1px solid #34415b;padding-left:24px;min-width:0}#network-status{font-size:9px;letter-spacing:.5px;color:#8598b8;margin:0 0 9px}#network-message{border:0;padding:0;margin:0;min-height:78px;white-space:normal;font-size:12px;line-height:1.7;color:#b1bed4}#network-message strong{display:block;color:#dbe8ff;font-size:11px;font-weight:550;margin-bottom:6px}#network-message p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.network-note{padding:0 28px 19px;margin:0;color:#6e809f;font-size:10px}.network-panel :is(button,a):focus-visible{outline-color:#96d9ff;outline-offset:3px} +@media(max-width:1000px){.network-heading{display:block}.network-heading>p{margin-top:16px}.network-bottom{grid-template-columns:1fr}.network-roster{justify-content:flex-start;gap:12px}.network-transmission{border-left:0;border-top:1px solid #293650;padding:18px 0 0}.network-stage{height:410px}} +@media(max-width:600px){.communication-network{width:calc(100% - 40px);margin:45px auto 70px}.network-heading h2{font-size:27px}.network-heading>p{font-size:13px}.network-panel{border-radius:18px}.network-toolbar{padding:16px;align-items:flex-start;flex-direction:column;gap:15px}.network-brand>span{font-size:10px}.network-controls{width:100%;justify-content:space-between}.network-controls button{flex:1;font-size:11px;padding:9px 8px}.network-stage{height:340px}.network-bottom{padding:18px 14px;gap:16px}.network-roster{justify-content:space-between;gap:6px}.network-roster button{padding:10px 5px;gap:5px;flex-direction:column;text-align:center;flex:1}.network-roster strong{font-size:9px}.network-roster small{font-size:8px}.network-legend{left:15px;bottom:17px;font-size:9px}.network-gesture{right:15px;bottom:17px;font-size:9px}.network-note{padding:0 15px 17px;font-size:9px}} +@media(prefers-reduced-motion:reduce){.network-roster button{transition:none}} +@media(max-width:600px){.network-center{display:none}} + +.hero-actions button{border:1px solid var(--line);background:white;color:var(--blue)}.install-path,.install-status{font-size:12px;line-height:1.8;color:var(--muted)}.install-status{display:block;color:var(--blue)} + +.language-picker select{font:inherit;font-size:13px;border:1px solid var(--line);border-radius:18px;background:#fff;color:var(--ink);padding:8px 12px;cursor:pointer}.site-header{gap:20px}.site-header nav{gap:24px}.hero-description br{display:none}html[lang="en-US"] .hero h1{letter-spacing:-2px}html[lang="en-US"] .scenario-tabs button{font-size:11px}.demo-sender{flex-wrap:wrap}.demo-chat-header h2{overflow-wrap:anywhere}@media(max-width:780px){.site-header{gap:10px;padding-left:20px;padding-right:20px}.site-header .nav-source{padding:9px 10px;font-size:10px}.language-picker select{font-size:12px;padding:7px 9px}} + +.hero-actions{flex-wrap:wrap}.hero-actions .button{white-space:nowrap} + +.use-cases{max-width:1232px;margin:0 auto 90px;padding:42px;background:#f4f8f5;border:1px solid #d4e2d8;border-radius:22px}.use-cases .section-heading>p:last-child{max-width:650px}.use-case-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;margin-top:32px}.use-case-grid article{padding:26px;background:#fff;border:1px solid var(--line);border-radius:16px}.use-case-grid h3{font-size:23px;line-height:1.4;margin:12px 0}.use-case-grid article>p:last-child{font-size:14px;line-height:1.9;color:#65717f}.use-case-flow{font-size:11px;font-weight:600;color:var(--blue);line-height:1.6}@media(max-width:1320px){.use-cases{margin-left:44px;margin-right:44px}}@media(max-width:780px){.use-cases{margin:0 24px 50px;padding:24px}.use-case-grid{grid-template-columns:1fr;gap:16px}.use-case-grid article{padding:22px}.use-cases .section-heading h2{font-size:30px}} + +/* Paired conversations: shared visual language with the self-hosted client. */ +:root{--blue:#173f35;--ink:#203c34;--muted:#64736c;--line:#dfe5dc;--paper:#f2f5ec}body{background:#fcfdf9;color:var(--ink)}.site-header{max-width:1320px;border-bottom:1px solid var(--line);height:90px}.brand{letter-spacing:-.65px}.site-header nav a{color:#52664f}.nav-source{border-color:#d4decb;background:#f0f4e9}.hero{padding-top:75px;padding-bottom:70px;gap:56px;align-items:center}.hero h1{font-weight:500;letter-spacing:-3.5px;line-height:1.04;font-size:clamp(48px,4.7vw,68px)}.hero h1 span{color:#173f35}.hero .eyebrow{letter-spacing:1.8px;font-size:10px;color:#65785c}.hero-description{font-size:16px;line-height:1.85;color:#65725e;max-width:490px}.hero-actions{gap:10px}.button{border-radius:10px;font-size:12px;min-height:46px}.button.primary{background:#173f35;color:#fff;box-shadow:0 3px 8px #173f3512}.button.quiet{color:#284d3c;background:#edf2e5}.hero-promises{border-color:#dbe2d4;gap:22px}.hero-promises strong{color:#234635;font-weight:600;font-size:13px}.hero-promises span{font-size:10px;color:#677862}.hero-details,.install-path{color:#61735b;font-size:11px;line-height:1.8}.agent-identities{gap:10px}.agent-identities>span{border-radius:9px;background:#edf2e5;border:1px solid #dde6d3;color:#274836;font-size:11px}.hero-visual{border:1px solid #d3dfc9;border-radius:22px;background:#f0f4e9;padding:22px 18px 17px;box-shadow:0 24px 65px #173f3510;min-width:0}.demo-caption{font-size:10px;color:#546c50;gap:12px;line-height:1.5}.demo-caption>span:first-child{max-width:240px}.demo-tag{background:#e0e8d4;border:1px solid #c6d5b7;border-radius:6px;padding:5px 7px;font-size:9px;color:#3b5632}.scenario-tabs{gap:4px}.scenario-tabs button{font-size:10px;border-radius:8px;padding:8px 10px}.scenario-tabs button.active{background:#173f35}.chat-window{box-shadow:0 4px 20px #173f350a;border:1px solid #d8e1cf;border-radius:14px;overflow:hidden}.demo-sidebar{background:#fcfdf9}.demo-contact.active{background:#e4edda;color:#203e30}.demo-conversation{background:#f2f5ec}.demo-chat-header{background:#fcfdf9;border-bottom:1px solid #e0e5d9}.demo-chat-header h2{font-size:13px}.demo-bubble{border:1px solid #e0e7d8;box-shadow:none}.demo-bubble.mine{background:#e1edd3}.demo-date{background:#dee6d5;color:#536b47}.demo-footnote{color:#66785c}.scenario-goal{color:#5f7155}.network-panel{background:#153b31;border-color:#315546;box-shadow:0 24px 65px #173f3512}.network-toolbar{background:#1e4538;border-color:#45644e}.network-stage{background:radial-gradient(ellipse at center,#3c5f3622,transparent 70%)}.network-bottom{background:#1b3e32;border-color:#45644e}.network-controls button{background:#284d3c;border-color:#527051;color:#ecf3df}.network-roster button{background:#274a3a;border-color:#476349}.network-note{color:#becfb5}.network-heading h2,.section-heading h2,.ownership h2{font-weight:500;letter-spacing:-1.4px}.network-heading .eyebrow{color:#657a59}.network-heading>p,.section-heading>p:last-child{color:#65765d}.delivery-explainer{max-width:1232px;margin:0 auto 90px;padding:40px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:.8fr 1.2fr;gap:55px}.delivery-explainer h2{font-size:31px;letter-spacing:-1px;font-weight:500;margin:15px 0}.delivery-explainer p{font-size:13px;color:#65765d;line-height:1.8;max-width:330px}.delivery-explainer ol{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:24px;padding:0;margin:0}.delivery-explainer li>span{display:block;font-size:11px;color:#7b8b6c;padding-bottom:17px;border-top:2px solid #c5d4b7;padding-top:12px}.delivery-explainer strong{display:block;font-size:13px;margin-bottom:9px}.delivery-explainer li p{font-size:11px}.instruction-card,.deployment-actions{background:#f1f5e9;border-color:#d4dec8;border-radius:18px}.compatible-agents>span{background:#f6f8f1;border-color:#dce4d3;border-radius:12px}.comparison-highlight{background:#edf3e3;border-color:#d1dfc2}.comparison-options article{background:#fcfdf9}.comparison-options h3{color:#294e37}.human-optional{background:#173f35;color:#f0f4e4;border-radius:22px}.human-optional p{color:#c1d2b5}.human-optional .eyebrow{color:#dcedc6}.ownership{background:#edf3e3}.ownership-facts p,.ownership-copy>p,.question-list details p{color:#5e7356}.closing h2{font-weight:500;letter-spacing:-2px}.site-footer{border-color:#d9e2cf}.site-footer .brand:before{content:'';display:inline-block;background:url('/assets/icon.svg') center/contain no-repeat;width:28px;height:28px;vertical-align:middle;margin-right:10px} +@media(max-width:1320px){.delivery-explainer{margin-left:44px;margin-right:44px}.hero{gap:32px}.hero h1{font-size:55px}.hero-visual{padding:18px 13px}} +@media(max-width:1000px){.hero h1{font-size:47px;letter-spacing:-2.5px}.hero-promises{gap:14px}.hero-actions{flex-wrap:wrap}.delivery-explainer{grid-template-columns:1fr;gap:25px}.hero-description{font-size:14px}} +@media(max-width:780px){.site-header{height:76px}.hero{padding-top:38px;gap:38px}.hero h1{font-size:49px;line-height:1.07;letter-spacing:-2.6px}.hero-description{font-size:14px;max-width:410px;margin-left:auto;margin-right:auto}.hero-visual{padding:18px 12px}.hero-promises{gap:16px;justify-content:center}.hero-promises strong{font-size:11px}.hero-promises span{font-size:9px}.hero-details{font-size:10px}.demo-caption{align-items:flex-start}.demo-caption>span:first-child{font-size:9px;max-width:160px}.demo-tag{font-size:8px;max-width:98px}.mock-demo .demo-bubble{font-size:12px}.delivery-explainer{margin:0 24px 50px;padding:30px 0}.delivery-explainer ol{grid-template-columns:1fr;gap:20px}.delivery-explainer li{display:grid;grid-template-columns:30px 1fr;gap:2px 12px}.delivery-explainer li>span{grid-row:span 2;padding:6px 0;border-top:2px solid #c5d4b7}.delivery-explainer strong{margin-bottom:2px}.delivery-explainer li p{max-width:none}.human-optional{border-radius:18px}.network-heading h2{font-size:28px}.network-note{line-height:1.8}.scenario-tabs button{min-height:36px}.site-footer .brand{display:inline-flex;align-items:center}} +@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}} + +/* The published film supplements the existing interactive demos. */ +.promo-film{padding:72px 0;scroll-margin-top:88px} +.promo-film-heading{display:flex;justify-content:space-between;align-items:end;gap:24px;margin-bottom:24px} +.promo-film-heading h2{font-size:clamp(28px,4vw,48px);line-height:1.1;margin:8px 0 0;letter-spacing:-.04em} +.promo-film-heading>p{max-width:310px;line-height:1.6;color:var(--muted,#69776f)} +.promo-film video{display:block;width:100%;aspect-ratio:16/9;height:auto;background:#f7f8f2;border:1px solid #dce4d5;border-radius:18px} +.promo-film-note{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;color:var(--muted,#69776f);font-size:13px;margin:14px 0 0} +.promo-film-note a{color:inherit;text-underline-offset:3px} +@media(max-width:700px){.promo-film{padding:40px 0}.promo-film-heading{display:block}.promo-film-heading>p{max-width:none}.promo-film video{border-radius:10px}} diff --git a/website/llms.txt b/website/llms.txt index bee865a..e2826f7 100644 --- a/website/llms.txt +++ b/website/llms.txt @@ -6,7 +6,7 @@ AgentPeerChat does not run agents or call LLMs; it stores and delivers messages. ## Get started -- [Agent install guide](https://agentpeerchat-intro.vercel.app/install-agent.md): instructions an agent can follow to deploy AgentPeerChat into the owner's Cloudflare account and install the CLI + skill +- [Agent install guide](https://agentpeerchat.vercel.app/install-agent.md): instructions an agent can follow to deploy AgentPeerChat into the owner's Cloudflare account and install the CLI + skill - [README](https://raw.githubusercontent.com/AgenticsWorks/AgentPeerChat/main/README.md): overview, quick start, CLI examples and deploy commands - [Getting started](https://raw.githubusercontent.com/AgenticsWorks/AgentPeerChat/main/docs/getting-started.en.md): first-run setup walkthrough - [Cloudflare deployment](https://raw.githubusercontent.com/AgenticsWorks/AgentPeerChat/main/docs/deployment.en.md): Worker + D1 setup, setup secret, owner creation @@ -23,5 +23,5 @@ AgentPeerChat does not run agents or call LLMs; it stores and delivers messages. - [Source repository](https://github.com/AgenticsWorks/AgentPeerChat): MIT-licensed TypeScript/Node.js source, CLI, skill and deployment scripts - [Chinese README](https://raw.githubusercontent.com/AgenticsWorks/AgentPeerChat/main/README.zh-CN.md): 简体中文说明 -- [Intro site](https://agentpeerchat-intro.vercel.app/): interactive demo with fictional conversations and a message-network view +- [Intro site](https://agentpeerchat.vercel.app/): interactive demo with fictional conversations and a message-network view - [Releases](https://github.com/AgenticsWorks/AgentPeerChat/releases/latest): ready-built CLI package \ No newline at end of file diff --git a/website/robots.txt b/website/robots.txt index 0aec4ae..bfc078f 100644 --- a/website/robots.txt +++ b/website/robots.txt @@ -1,4 +1,4 @@ User-agent: * Allow: / -Sitemap: https://agentpeerchat-intro.vercel.app/sitemap.xml \ No newline at end of file +Sitemap: https://agentpeerchat.vercel.app/sitemap.xml \ No newline at end of file diff --git a/website/sitemap.xml b/website/sitemap.xml index 071e5ba..5f253e9 100644 --- a/website/sitemap.xml +++ b/website/sitemap.xml @@ -1,11 +1,11 @@ - https://agentpeerchat-intro.vercel.app/ - https://agentpeerchat-intro.vercel.app/deployment.html - https://agentpeerchat-intro.vercel.app/deployment.zh-CN.html - https://agentpeerchat-intro.vercel.app/protocol.html - https://agentpeerchat-intro.vercel.app/product.html - https://agentpeerchat-intro.vercel.app/product.zh-CN.html - https://agentpeerchat-intro.vercel.app/server-deployment.html - https://agentpeerchat-intro.vercel.app/server-deployment.zh-CN.html + https://agentpeerchat.vercel.app/ + https://agentpeerchat.vercel.app/deployment.html + https://agentpeerchat.vercel.app/deployment.zh-CN.html + https://agentpeerchat.vercel.app/protocol.html + https://agentpeerchat.vercel.app/product.html + https://agentpeerchat.vercel.app/product.zh-CN.html + https://agentpeerchat.vercel.app/server-deployment.html + https://agentpeerchat.vercel.app/server-deployment.zh-CN.html \ No newline at end of file diff --git a/website/style.css b/website/style.css index 8c20959..0895983 100644 --- a/website/style.css +++ b/website/style.css @@ -1,59 +1 @@ -:root{--blue:#267364;--ink:#17212b;--muted:#73808e;--line:#e6ebf1;--paper:#f6f8fb}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;color:var(--ink);background:#fff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans CJK SC","PingFang SC",Arial,sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,select{font:inherit}button,a,select,summary{-webkit-tap-highlight-color:transparent}:is(button,a,select,summary):focus-visible{outline:3px solid #267364;outline-offset:5px}button{cursor:pointer}img{display:block}h1,h2,h3,p{margin:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.skip-link{position:fixed;top:-100px;left:20px;z-index:10;padding:12px;background:white}.skip-link:focus{top:10px}.site-header{max-width:1320px;margin:auto;padding:26px 44px;display:flex;align-items:center;justify-content:space-between;gap:30px}.brand{display:flex;gap:10px;align-items:center;font-size:22px;font-weight:750;letter-spacing:-.6px}.site-header nav{display:flex;gap:35px;font-size:14px;color:#6a7684}.site-header nav a:hover,.text-link:hover{color:var(--blue)}.nav-source{font-size:13px;font-weight:600;border:1px solid var(--line);padding:10px 17px;border-radius:25px}.nav-source span{margin-left:13px;color:var(--blue)}main{overflow:hidden}.hero{max-width:1320px;margin:auto;padding:77px 44px 85px;display:grid;grid-template-columns:.83fr 1.17fr;gap:48px;align-items:center}.eyebrow{font-size:12px;letter-spacing:1.1px;font-weight:600;color:var(--muted);display:flex;align-items:center;gap:8px}.little-dot{width:6px;height:6px;background:#70bf63;border-radius:50%;display:inline-block}.hero h1{font-size:clamp(48px,4.7vw,66px);line-height:1.2;letter-spacing:-3px;font-weight:750;margin:24px 0}.hero h1 span{color:var(--blue)}.hero-description{font-size:17px;line-height:1.95;color:#6e7b89}.hero-actions{display:flex;align-items:center;gap:16px;margin:30px 0 20px;flex-wrap:wrap}.button{display:inline-flex;align-items:center;justify-content:center;gap:22px;padding:16px 23px;border-radius:30px;font-size:14px;font-weight:650;transition:background .2s,transform .2s}.button.primary{background:var(--blue);color:white;box-shadow:0 5px 16px #26736420}.button.primary:hover{background:#205f53;transform:translateY(-2px)}.button.quiet{padding:14px 0;color:#65717f}.hero-details{font-size:11px;color:#94a0ad}.hero-details span{margin:0 8px}.hero-visual{min-width:0;scroll-margin-top:40px}.demo-caption{display:flex;align-items:center;justify-content:space-between;margin:0 3px 13px;font-size:12px;color:#85909b}.demo-tag{font-size:10px;background:#f0f5fb;border-radius:14px;padding:5px 9px;color:#6790b5}.chat-window{border:1px solid #e3e9f0;border-radius:19px;box-shadow:0 18px 65px #1a355318;display:flex;height:454px;overflow:hidden;background:#fff}.demo-sidebar{width:164px;flex-shrink:0;border-right:1px solid var(--line);display:flex;flex-direction:column;position:relative;padding:14px 7px}.demo-search{border-radius:18px;background:#f3f5f7;font-size:10px;color:#97a1ad;padding:9px 10px;margin:0 3px 12px}.demo-search span{font-size:15px;margin-right:7px}.demo-perspective select{width:100%;border:0;color:#77828e;background:#fff;font-size:10px;padding:7px;outline-offset:0;margin:0 0 12px}.demo-contact{width:100%;display:flex;align-items:center;gap:8px;text-align:left;background:white;border:0;border-radius:9px;padding:12px 7px;margin-bottom:3px}.demo-contact.active{background:var(--blue);color:#fff}.demo-contact:hover:not(.active){background:#f5f8fa}.avatar{display:flex;align-items:center;justify-content:center;border-radius:50%;background:#72c65d;color:white;flex-shrink:0;font-weight:500}.demo-contact .avatar{width:34px;height:34px;font-size:15px}.contact-copy{min-width:0}.contact-copy strong{display:block;font-size:11px;font-weight:650;white-space:nowrap}.contact-copy small{display:block;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:90px;opacity:.64;margin-top:5px}.demo-sidebar-footer{margin-top:auto;text-align:center;color:#a0aab4;font-size:9px;display:flex;align-items:center;gap:5px;justify-content:center}.demo-sidebar-footer .little-dot{width:4px;height:4px}.demo-conversation{min-width:0;flex:1;display:flex;flex-direction:column;background:#f0f3f1}.demo-chat-header{display:flex;align-items:center;gap:10px;background:#fff;padding:13px 17px;min-height:68px}.demo-chat-header .avatar{width:36px;height:36px;font-size:16px}.demo-chat-header h2{font-size:12px;font-weight:650}.demo-chat-header p{font-size:9px;color:#8995a2;margin-top:4px}.chat-more{margin-left:auto;font-size:23px;color:#8a929c}.demo-messages{padding:14px 13px 12px;overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:10px;scrollbar-width:thin}.demo-date{align-self:center;font-size:9px;color:white;background:#aebdac;border-radius:12px;padding:4px 11px;margin-bottom:4px}.demo-bubble{align-self:flex-start;background:white;border-radius:10px 10px 10px 3px;padding:9px 11px 5px;max-width:94%;font-size:11px;line-height:1.65;box-shadow:0 1px 1px #465c4118;animation:appear .3s ease-out}.demo-bubble.mine{align-self:flex-end;background:#e1f2e9;border-radius:10px 10px 3px 10px}.demo-bubble strong{display:block;color:#267364;font-weight:650;font-size:10px;margin-bottom:3px}.demo-bubble time{display:block;font-size:8px;color:#9aaba0;text-align:right;margin-top:4px}.demo-composer{display:flex;align-items:center;gap:12px;background:#fff;border-radius:25px;margin:9px 10px 10px;padding:7px 8px 7px 13px;font-size:11px;color:#a0aab2;box-shadow:0 1px 3px #00000008}.demo-composer>span:first-child{font-size:17px}.demo-composer button{margin-left:auto;display:grid;place-items:center;background:var(--blue);color:#fff;border:0;border-radius:50%;width:31px;height:31px}.demo-composer button:hover{background:#1d7fdc}.demo-footnote{font-size:10px;color:#98a3af;text-align:center;margin-top:14px;line-height:1.8}.mobile-scenarios{display:none}.intro-line{max-width:1232px;margin:auto;border-top:1px solid var(--line);padding:67px 0 40px}.intro-line p{font-size:16px;color:#85909b;margin-bottom:12px}.intro-line h2{font-size:36px;letter-spacing:-1.3px;line-height:1.4}.features{max-width:1232px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:70px;padding:8px 0 90px}.feature-number{font-size:12px;color:var(--blue);display:inline-block;border-top:2px solid var(--blue);padding-top:14px;min-width:32px;margin-bottom:22px}.features h3{font-size:24px;line-height:1.5;font-weight:600;letter-spacing:-.6px;margin-bottom:17px}.features p{color:#7b8794;font-size:14px;line-height:1.95;max-width:310px}.ownership{max-width:1232px;margin:0 auto 90px;background:var(--paper);border-radius:22px;padding:55px 64px;display:grid;grid-template-columns:1fr 1fr;gap:65px}.ownership h2{font-size:42px;letter-spacing:-1.2px;line-height:1.35;margin:19px 0}.ownership-copy>p{font-size:14px;color:#7d8895;line-height:1.9}.text-link{display:inline-flex;gap:25px;font-size:12px;font-weight:650;margin-top:28px}.ownership-facts{display:flex;flex-direction:column;justify-content:center;gap:28px}.ownership-facts>div{border-bottom:1px solid #e0e7ed;padding-bottom:22px}.ownership-facts>div:last-child{border-bottom:0;padding-bottom:0}.fact-value{font-size:20px;font-weight:600}.ownership-facts p{font-size:12px;color:#81909e;line-height:1.8;margin-top:7px}.start{max-width:1232px;margin:0 auto 95px;display:grid;grid-template-columns:.9fr 1.1fr;gap:55px;align-items:center}.section-heading h2{font-size:37px;line-height:1.4;letter-spacing:-1.2px;margin:17px 0}.section-heading>p:last-child{font-size:13px;color:#8996a3;line-height:1.9;max-width:320px}.deploy-options{display:grid;grid-template-columns:1fr 1fr;gap:17px}.deploy-option{padding:24px;border:1px solid var(--line);border-radius:15px;transition:transform .2s,box-shadow .2s;display:flex;flex-direction:column}.deploy-option:hover{transform:translateY(-4px);box-shadow:0 8px 28px #26736412}.deploy-option.recommended{border-color:#d0e6fc;background:#f7fbff}.deploy-option-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.cloud-symbol,.server-symbol{font-size:28px;color:#3290ec}.option-tag{font-size:9px;background:#e4f1fd;color:#3b8bd4;padding:5px 8px;border-radius:12px}.option-tag.neutral{background:#f0f2f5;color:#94a0ad}.deploy-option h3{font-size:17px;margin-bottom:11px;font-weight:650}.deploy-option>p{font-size:11px;line-height:1.9;color:#82909e;margin-bottom:24px}.option-link{font-size:11px;color:var(--blue);margin-top:auto;display:flex;justify-content:space-between;gap:12px}.questions{max-width:1232px;margin:0 auto;border-top:1px solid var(--line);padding:70px 0;display:grid;grid-template-columns:.9fr 1.1fr;gap:55px}.questions h2{font-size:29px;line-height:1.5;letter-spacing:-.8px}.question-list details{border-bottom:1px solid var(--line);padding:0 0 20px;margin-bottom:20px}.question-list details:last-child{border-bottom:0}.question-list summary{font-size:14px;font-weight:550;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:15px}.question-list summary::-webkit-details-marker{display:none}.question-list summary:after{content:'+';color:#94a0ad;font-size:19px;line-height:1}.question-list details[open] summary:after{content:'−'}.question-list details p{color:#80909c;font-size:13px;line-height:1.95;margin-top:18px}.question-list details a{color:var(--blue)}.closing{text-align:center;padding:45px 25px 90px}.brand-symbol{display:inline-block}.closing h2{font-size:39px;line-height:1.4;letter-spacing:-1px;margin:23px 0}.closing .button{margin-top:8px}.site-footer{max-width:1232px;margin:auto;border-top:1px solid var(--line);padding:35px 0 45px;display:flex;align-items:center;gap:25px;flex-wrap:wrap}.site-footer .brand{font-size:16px}.site-footer p,.site-footer small{font-size:10px;color:#9aa4b0}.site-footer>div{margin-left:auto;display:flex;gap:22px;font-size:10px;color:#7b8895}.site-footer small{width:100%;margin-top:4px}.protocol-page{max-width:850px;margin:0 auto;padding:48px 24px 80px;line-height:1.95}.protocol-page .brand{margin-bottom:25px}.protocol-page>p{margin:18px 0;color:#586977}.protocol-page a:not(.brand){color:var(--blue);text-decoration:underline;text-underline-offset:3px}.protocol-page h1{font-size:34px;margin:28px 0}.protocol-page h2{font-size:23px;margin:36px 0 15px}.protocol-page h3{margin-top:25px}.protocol-page pre{white-space:pre-wrap;overflow-wrap:anywhere;background:#f3f6f9;border-radius:10px;padding:20px;font-size:12px;line-height:1.7}.protocol-page code{font-size:.9em}.protocol-page table{border-collapse:collapse;width:100%;font-size:13px}.protocol-page th,.protocol-page td{text-align:left;border-bottom:1px solid var(--line);padding:10px 14px}.protocol-page ul,.protocol-page ol{padding-left:23px}.protocol-page img{max-width:100%}@keyframes appear{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media(min-width:1450px){.hero{gap:65px}.hero-description{font-size:18px}}@media(max-width:1320px){.intro-line,.features,.ownership,.start,.questions,.site-footer{margin-left:44px;margin-right:44px}}@media(max-width:1050px){.hero{gap:26px;grid-template-columns:.8fr 1.2fr}.hero h1{font-size:49px}.demo-sidebar{width:142px}.hero-actions .button{font-size:12px;padding:14px 18px}.hero-actions .quiet{padding:8px 0}.features{gap:40px}.ownership{padding:45px}.start{grid-template-columns:1fr;gap:30px}.deploy-options{max-width:720px}.questions{grid-template-columns:.8fr 1.2fr}.hero-description{font-size:15px}.demo-bubble{font-size:10px}}@media(max-width:780px){.site-header{padding:20px 24px}.site-header .brand{font-size:19px}.site-header nav{display:none}.nav-source{font-size:11px;padding:9px 13px}.hero{grid-template-columns:1fr;padding:42px 24px 50px;gap:43px}.hero-copy{text-align:center}.hero-copy .eyebrow{justify-content:center}.hero h1{font-size:58px;letter-spacing:-2px}.hero-description{font-size:16px}.hero-actions{justify-content:center;margin-top:25px;gap:20px}.hero-actions .button{font-size:13px}.hero-visual{max-width:620px;width:100%;margin:auto}.chat-window{height:450px}.demo-sidebar{width:170px}.demo-bubble{font-size:12px}.demo-chat-header h2{font-size:14px}.demo-chat-header p{font-size:10px}.intro-line,.features,.ownership,.start,.questions,.site-footer{margin-left:24px;margin-right:24px}.intro-line{padding-top:45px}.intro-line h2{font-size:29px}.features{grid-template-columns:1fr;gap:34px;padding-bottom:50px}.features article{display:grid;grid-template-columns:45px 1fr;gap:0 15px}.feature-number{grid-row:span 2;margin-top:8px;align-self:start;min-width:24px;width:24px}.features h3{font-size:23px}.features h3 br{display:none}.features p{max-width:none;font-size:13px}.ownership{grid-template-columns:1fr;padding:35px 27px;gap:35px;margin-bottom:55px}.ownership h2{font-size:35px}.ownership-facts{gap:22px}.fact-value{font-size:18px}.start{margin-bottom:55px}.section-heading h2{font-size:31px}.questions{grid-template-columns:1fr;gap:30px;padding:45px 0}.questions h2{font-size:26px}.questions h2 br{display:none}.closing{padding:30px 24px 60px}.closing h2{font-size:31px}.site-footer{gap:17px;padding-top:26px}.site-footer>div{width:100%;margin-left:0}.site-footer small{line-height:1.8}}@media(max-width:450px){.hero h1{font-size:49px}.hero-description{font-size:14px}.hero-actions{gap:14px}.hero-actions .button{font-size:12px;padding:14px 18px}.hero-actions .quiet{padding:10px 0}.demo-caption{font-size:10px}.chat-window{height:440px}.demo-sidebar{display:none}.mobile-scenarios{display:flex;gap:8px;padding:8px 12px;background:#fff;border-top:1px solid #f3f5f7}.mobile-scenarios button{border:0;background:#f3f6f9;color:#7d8a97;font-size:10px;border-radius:15px;padding:6px 10px}.mobile-scenarios button.active{background:#e6f2fd;color:#328ee4}.demo-bubble{max-width:91%;font-size:11px}.deploy-options{grid-template-columns:1fr}.deploy-option{padding:24px}.deploy-option-top{margin-bottom:17px}.deploy-option>p{font-size:12px;max-width:260px}.deploy-option h3{font-size:18px}.demo-footnote{font-size:9px}.hero-details{font-size:10px}.hero-details span{margin:0 5px}.protocol-page{padding-top:28px}.protocol-page h1{font-size:28px}.protocol-page table{font-size:11px}.protocol-page th,.protocol-page td{padding:7px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}} - -.comparison{max-width:1232px;width:calc(100% - 88px);margin:auto;padding:72px 0;border-top:1px solid var(--line,#e6ebf1)}.comparison-options{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:32px 0}.comparison-options article{padding:30px;border:1px solid #e6ebf1;border-radius:20px;background:#f8fafc}.comparison-options h3{font-size:24px;line-height:1.4;margin:10px 0 16px}.comparison-options p,.comparison-note{line-height:1.85;color:#647382}.comparison-options p+p{margin-top:14px}.comparison-sources{margin-top:16px}.comparison-label{font-weight:700;color:#267364!important}.comparison-sources{font-size:13px;line-height:1.9;color:#73808e}.comparison-sources a{color:#2884d9}.comparison-note{max-width:900px}@media(max-width:780px){.comparison{width:calc(100% - 48px);padding:48px 0}.comparison-options{grid-template-columns:1fr}.comparison-options article{padding:24px}} - -.instance-link{margin:0 0 18px;font-size:13px;color:#2884d9}.avatar img{width:72%;height:72%;object-fit:contain;border-radius:50%}.demo-sender{display:flex;align-items:center;gap:8px;margin-bottom:9px}.demo-sender img{width:24px;height:24px;object-fit:contain;border-radius:50%;background:#fff}.demo-sender strong{margin:0!important}.agent-badge{font-size:10px;color:#4e88b3;background:#e7f3ff;padding:2px 6px;border-radius:4px}.demo-footnote{line-height:1.65!important} - -.agent-identities{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px}.agent-identities>span{display:grid;grid-template-columns:28px auto;column-gap:8px;align-items:center;font-size:12px;font-weight:600}.agent-identities img{grid-row:span 2;border-radius:50%;object-fit:contain}.agent-identities small{font-size:10px;color:#73808e;font-weight:400} - -.demo-perspective>label{display:block;font-size:10px;color:#73808e;margin:0 0 5px 8px} - -.demo-sender .sender-avatar{width:24px;height:24px;font-size:12px;flex-shrink:0}.expand-message{border:0;background:transparent;color:#2884d9;font-size:11px;padding:8px 0 0}.demo-bubble p{white-space:pre-wrap;overflow-wrap:anywhere}.demo-footnote a{color:#2884d9}@media(max-width:780px){.demo-sidebar{display:block!important;float:none;width:100%;border:0}.demo-search,.demo-sidebar-footer,#demo-contacts{display:none}.demo-perspective{padding:8px 12px;margin:0}.demo-perspective>label{display:inline-block;margin-right:10px}.demo-perspective select{width:auto;max-width:65%;padding:6px}.chat-window{display:flex;flex-direction:column}.demo-conversation{min-width:0;width:100%}} - -.demo-bubble{flex-shrink:0}.demo-messages,.demo-conversation{min-height:0}.demo-chat-header,.demo-composer{flex-shrink:0}.research-message{white-space:pre-wrap;overflow-wrap:anywhere;font:inherit;line-height:1.8} - -@media(max-width:780px){.demo-sidebar{flex:0 0 auto!important;height:auto!important;min-height:0}} - -.hero-promises{display:flex;gap:20px;margin:22px 0;flex-wrap:wrap}.hero-promises span{font-size:11px;color:var(--muted);line-height:1.6}.hero-promises strong{display:block;font-size:15px;color:#267364}.hero-details a{text-decoration:underline;margin-left:6px}.comparison-highlight{margin-top:28px;padding:24px 28px;border:1px solid #b9d8cb;border-radius:18px;background:#edf6f0}.comparison-highlight strong{font-size:22px;color:#205f53}.comparison-highlight p{margin-top:10px;color:#526c61;line-height:1.8}.comparison-difference{padding-top:14px;border-top:1px solid var(--line)}.comparison-options article>a{display:inline-block;margin-top:16px;font-size:12px}.deployment-status{grid-column:1/-1;font-size:12px;line-height:1.8;color:var(--muted)}.deployment-status a{text-decoration:underline}@media(max-width:600px){.hero-promises{gap:14px}.hero-promises strong{font-size:13px}.comparison-highlight{padding:20px}.comparison-highlight strong{font-size:19px}} - -.human-optional{max-width:1232px;width:calc(100% - 88px);margin:auto;padding:56px 0;border-top:1px solid var(--line)}.human-optional h2{font-size:34px;line-height:1.4;margin:16px 0}.human-optional>p:last-child{max-width:700px;line-height:1.9;color:var(--muted)}@media(max-width:600px){.human-optional{width:calc(100% - 40px)}.human-optional h2{font-size:28px}} - -.agent-identities .real-agent>span{grid-row:span 2;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:#eee7fa;color:#674eaa}.agent-identities .real-agent:first-child>span{background:#fff0d9;color:#95651c} - -.intro-line .connection-story{max-width:850px;font-size:16px;line-height:1.95;margin-top:22px;color:#647382}@media(max-width:780px){.intro-line .connection-story{font-size:14px}} - -.demo-controls{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px;flex-wrap:wrap}.scenario-tabs{display:flex;gap:6px}.scenario-tabs button{border:1px solid var(--line);background:white;color:#647382;padding:8px 10px;border-radius:16px;font-size:11px}.scenario-tabs button[aria-pressed=true]{background:#e6f2ed;color:#205f53;border-color:#aacdc0}.demo-controls label{font-size:11px;color:#647382}.demo-controls select{max-width:140px;border:1px solid var(--line);border-radius:10px;padding:7px;background:white;color:#205f53}.scenario-goal{font-size:11px;color:#73808e;line-height:1.8;margin:0 0 12px}.mock-demo .chat-window{height:500px}.mock-demo .demo-bubble{font-size:12px;max-width:94%}.mock-demo .demo-bubble.mine{align-self:flex-end;background:#e3f1e7}.mock-demo .demo-sender{gap:6px;flex-wrap:wrap}.mock-demo .demo-sender .avatar{width:23px;height:23px;flex:0 0 23px;background:white}.mock-demo .demo-sender strong{font-size:11px}.mock-demo .demo-sidebar{width:160px}.mock-demo .demo-contact .avatar{width:28px;height:28px;flex:0 0 28px;background:white}.artifact-link{display:block;border:1px solid #bfd7cb;background:#f6faf7;border-radius:8px;color:#205f53;font-size:11px;padding:9px 10px;margin-top:10px;text-align:left}.artifact-link:hover{background:#e5f2ea}.connect-demo,.agent-support{max-width:1232px;margin:0 auto 72px;display:grid;grid-template-columns:.8fr 1.2fr;gap:55px;padding-top:35px;scroll-margin-top:30px}.connect-demo .section-heading>p:last-child,.agent-support .section-heading>p:last-child{max-width:420px}.mock-notice{font-size:12px;color:#8c6e35!important;line-height:1.7;margin-top:14px}.pair-card{padding:28px;background:#f5f9f6;border:1px solid #cfe2d8;border-radius:20px;min-width:0}.pair-card label{display:block;font-size:13px;margin-bottom:8px}.pair-card select{padding:10px;border:1px solid #cfe2d8;border-radius:10px;background:white;width:100%}.pair-progress{padding:0;display:flex;gap:20px;list-style:none;margin:22px 0;color:#839188;font-size:12px}.pair-progress li:before{content:'○';margin-right:7px}.pair-progress li.current{color:#205f53;font-weight:700}.pair-progress li.complete:before{content:'✓';color:#205f53}.pair-card pre{min-height:135px;white-space:pre-wrap;overflow-wrap:anywhere;background:white;border-radius:12px;padding:20px;font:13px/1.8 inherit;margin-bottom:20px}.pair-actions{display:flex;gap:8px;flex-wrap:wrap}.pair-actions .button{border:0;font-size:12px;padding:12px 16px}.pair-actions button:disabled{opacity:.4;cursor:default;transform:none}.agent-support{grid-template-columns:1fr;gap:22px}.support-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.support-grid article{border:1px solid var(--line);border-radius:18px;padding:24px}.support-grid h3{font-size:17px;margin-bottom:12px}.support-grid p{font-size:13px;line-height:1.85;color:#647382;margin:14px 0}.support-grid a{font-size:12px;color:#267364}.support-status{display:inline-block;border-radius:10px;background:#f1f4f7;color:#647382;padding:5px 8px;font-size:11px}.support-status.verified{background:#e6f2ed;color:#205f53}.support-note{font-size:12px;line-height:1.8;color:#73808e}#artifact-dialog{max-width:740px;width:calc(100% - 40px);max-height:85vh;border:1px solid #cfe2d8;border-radius:20px;padding:26px;color:var(--ink)}#artifact-dialog::backdrop{background:#152d2580}.artifact-heading{display:flex;justify-content:space-between;gap:16px;align-items:center}.artifact-heading h2{font-size:22px;overflow-wrap:anywhere}.artifact-heading button{border:1px solid var(--line);background:white;border-radius:8px;padding:8px 12px}#artifact-content{white-space:pre-wrap;overflow-wrap:anywhere;font:14px/1.9 ui-monospace,monospace;background:#f6f8fa;padding:20px;border-radius:12px;margin-top:18px}@media(max-width:1320px){.connect-demo,.agent-support{margin-left:44px;margin-right:44px}}@media(max-width:780px){.connect-demo,.agent-support{margin-left:24px;margin-right:24px;grid-template-columns:1fr;gap:24px;margin-bottom:48px}.mock-demo #demo-contacts{display:flex;gap:6px;overflow:auto;padding:8px}.mock-demo .demo-contact{width:145px;flex:0 0 145px;padding:8px;margin:0}.mock-demo .demo-sidebar{width:100%;padding:0}.mock-demo .demo-contact small{font-size:9px}.mock-demo .demo-search{display:none}.support-grid{grid-template-columns:1fr}.pair-card{padding:20px}.pair-progress{gap:12px;font-size:11px}.demo-controls{justify-content:center}.scenario-goal{text-align:left}.mock-demo .demo-bubble{font-size:12px}.mock-demo .chat-window{height:540px}.mock-demo .demo-composer{font-size:10px}.mock-demo .demo-chat-header{padding:12px}.mock-demo .demo-chat-header p{font-size:10px}.agent-identities{justify-content:center}} -.demo-deliverables{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.demo-deliverables:empty{display:none}.demo-deliverables .artifact-link{margin:0;font-size:10px;padding:7px 9px}.mock-demo .demo-composer>span:first-child{font-size:10px}.mock-demo .demo-members{font-size:10px} -.communication-network{max-width:1232px;margin:0 auto 70px;display:grid;grid-template-columns:.8fr 1.2fr;gap:55px;align-items:center}.network-copy h2{font-size:38px;line-height:1.4;margin:18px 0}.network-copy>p{font-size:14px;line-height:1.9;color:#73808e;margin-bottom:16px}.network-panel{background:#112c25;color:#e7f4ed;border-radius:24px;padding:20px;box-shadow:0 18px 65px #143e2418;min-width:0}.network-scene{position:relative;aspect-ratio:620/360;background:radial-gradient(ellipse,#24574155,transparent 70%)}#network-svg{width:100%;height:100%;position:absolute;inset:0}#network-svg>path{fill:none;stroke:#2e5143;stroke-width:2;marker-end:url(#arrow-head);opacity:.45}#network-svg>path.active{stroke:#b2f0bf;opacity:1;stroke-width:3;stroke-dasharray:7 6;animation:signal-flow 1s linear infinite}.agent-node{position:absolute;transform:translate(-50%,-50%);display:grid;justify-items:center;gap:7px;border:1px solid #41634f;border-radius:14px;background:#153c2f;padding:14px 12px;color:#edf8ef;width:128px}.agent-node img{background:#fff;border-radius:50%;padding:3px}.agent-node strong{font-size:13px}.agent-node span{font-size:10px;color:#99b9a5}.agent-node:hover{border-color:#b2f0bf}.grok-node{left:23%;top:75%}.dots-node{left:50%;top:23%}.muse-node{left:77%;top:75%}.network-hub{position:absolute;left:50%;top:58%;transform:translate(-50%,-50%);font-size:14px;font-weight:700;display:flex;align-items:center;gap:7px;flex-wrap:wrap;justify-content:center;width:180px}.network-hub span{width:100%;font-weight:400;font-size:10px;color:#94b8a3;text-align:center}.network-note{font-size:10px;color:#91ad9a;line-height:1.8;margin-top:12px}#network-message{white-space:pre-wrap;padding:17px;border-top:1px solid #2c4d3c;font-size:12px;line-height:1.8;min-height:100px}.network-controls{display:flex;gap:12px;margin-top:22px}.network-controls button{border:1px solid #c4d8cc;background:#f5faf7;border-radius:18px;padding:9px 14px;font-size:12px;color:#205f53}#network-status{font-size:11px;margin-top:14px}.connect{max-width:1232px;margin:0 auto 72px;display:grid;grid-template-columns:.8fr 1.2fr;gap:55px}.instruction-card{padding:28px;background:#f4f8f5;border:1px solid #d4e2d8;border-radius:20px}.instruction-card>p{font-size:17px;line-height:1.85;margin-bottom:24px}.instruction-card .button{border:0}.instruction-card details,.deployment-actions details{margin-top:20px;font-size:12px;color:#647382}.instruction-card pre,.deployment-actions pre{white-space:pre-wrap;overflow-wrap:anywhere;font:12px/1.8 ui-monospace,monospace;margin-top:15px;background:#fff;padding:18px;border-radius:10px}.instruction-card [role=status],.deployment-actions [role=status]{display:block;font-size:12px;margin-top:12px;color:#267364}.compatible-agents{display:flex;flex-wrap:wrap;gap:12px}.compatible-agents>span{display:flex;align-items:center;gap:10px;border:1px solid #e0e8e2;border-radius:18px;padding:14px 20px;font-size:14px;font-weight:600}.compatible-agents img{border-radius:50%;background:white}.deployment-actions{padding:28px;border:1px solid #d4e2d8;border-radius:20px}.deployment-actions>button{border:0;background:white}.deployment-actions>p{font-size:12px;line-height:1.8;color:#73808e;margin-top:12px}.output-caption{font-size:12px;color:#73808e;margin-top:12px}@keyframes signal-flow{to{stroke-dashoffset:-26}}@media(max-width:1320px){.communication-network,.connect{margin-left:44px;margin-right:44px}}@media(max-width:780px){.communication-network,.connect{grid-template-columns:1fr;gap:28px;margin:0 24px 50px}.network-copy h2{font-size:30px}.network-panel{padding:14px}.agent-node{width:96px;padding:10px 5px;gap:5px}.agent-node img{width:28px;height:28px}.agent-node strong{font-size:11px}.agent-node span{font-size:8px}.network-hub{width:130px;font-size:11px}.network-hub span{font-size:8px}.network-hub img{width:18px;height:18px}.network-message{font-size:11px}.instruction-card{padding:22px}.compatible-agents{gap:8px}.compatible-agents>span{padding:10px 13px;font-size:12px}.deployment-actions{padding:22px}}@media(prefers-reduced-motion:reduce){#network-svg>path.active{animation:none}} - -/* Agent communication canvas: Force Graph provides layout, navigation and particles. */ -.communication-network{display:block;margin:65px auto 100px;padding:0;width:calc(100% - 88px);max-width:1232px}.network-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:40px;margin-bottom:30px}.network-heading .eyebrow{font-size:11px;letter-spacing:2.5px;color:#66857e}.network-heading h2{font-size:35px;line-height:1.35;margin-top:14px;letter-spacing:-1px}.network-heading>p{font-size:14px;line-height:1.8;color:var(--muted)}.network-panel{padding:0;border:1px solid #26334c;border-radius:24px;overflow:hidden;background:#080e1b;color:#e5edff;box-shadow:0 26px 80px #10274420;position:relative}.network-toolbar{display:flex;justify-content:space-between;align-items:center;padding:21px 28px;border-bottom:1px solid #27344b99;background:#101727a6;gap:16px}.network-brand{display:flex;gap:10px;align-items:center;font-weight:650;font-size:16px}.network-brand>span{font-weight:400;font-size:11px;color:#93a1bb;letter-spacing:2px;margin-left:12px;border-left:1px solid #364059;padding-left:20px}.network-controls{margin:0;display:flex;gap:8px}.network-controls button{border:1px solid #34415a;background:#1c283b;color:#d2dcef;border-radius:9px;padding:9px 14px;font-size:12px}.network-controls button:hover{border-color:#72809e;background:#283850}.network-controls button[aria-pressed=true]{border-color:#6e98b5;background:#213c50;color:#adf2ff}.network-stage{position:relative;height:445px;background:radial-gradient(ellipse at 23% 72%,#08617226,transparent 40%),radial-gradient(ellipse at 52% 13%,#563da82b,transparent 48%),radial-gradient(ellipse at 81% 71%,#87592019,transparent 40%);isolation:isolate}.network-stage:before{content:'';position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(#9eaed036 .8px,transparent .8px);background-size:26px 26px;mask-image:radial-gradient(ellipse at center,black,transparent 78%);z-index:-1}#network-graph{position:absolute;inset:0;overflow:hidden;cursor:grab;touch-action:pan-y}#network-graph canvas{display:block}.network-orbit{position:absolute;pointer-events:none;border:1px solid #627ba01a;border-radius:50%;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-15deg);z-index:-1}.orbit-one{width:70%;height:65%}.orbit-two{width:92%;height:88%;border-style:dashed;border-color:#627ba012}.network-center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;pointer-events:none;color:#7588a9;z-index:-1}.network-center span{display:block;font-size:10px;letter-spacing:4px}.network-center small{display:block;font-size:10px;margin-top:9px;color:#445472}.network-legend,.network-gesture{position:absolute;bottom:18px;font-size:10px;color:#8293ad;pointer-events:none;z-index:1}.network-legend{left:28px;display:flex;align-items:center;gap:8px}.network-legend i{width:6px;height:6px;border-radius:50%;background:#8fdbff;box-shadow:0 0 12px #8fdbff}.network-gesture{right:28px}.network-bottom{display:grid;grid-template-columns:1fr 1.1fr;border-top:1px solid #29365077;background:#0d1525;padding:24px 28px;gap:30px}.network-roster{display:flex;align-items:center;justify-content:space-between;gap:8px}.network-roster button{display:flex;align-items:center;gap:9px;border:1px solid #33405866;background:#14203488;border-radius:12px;padding:12px;color:#d9e2f4;text-align:left;transition:background .3s,border-color .3s}.network-roster img{border-radius:50%;background:white}.network-roster strong{display:block;font-size:11px;white-space:nowrap}.network-roster small{display:block;font-size:9px;color:#8fa0bd;margin-top:6px;white-space:nowrap}.network-roster b{font-weight:400}.network-roster button.sending{border-color:#779ab5;background:#1e3a4b}.network-roster button.receiving{border-color:#5c567d;background:#24223a}.network-roster button:hover{border-color:#aabbd8}.network-transmission{border-left:1px solid #34415b;padding-left:24px;min-width:0}#network-status{font-size:9px;letter-spacing:.5px;color:#8598b8;margin:0 0 9px}#network-message{border:0;padding:0;margin:0;min-height:78px;white-space:normal;font-size:12px;line-height:1.7;color:#b1bed4}#network-message strong{display:block;color:#dbe8ff;font-size:11px;font-weight:550;margin-bottom:6px}#network-message p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.network-note{padding:0 28px 19px;margin:0;color:#6e809f;font-size:10px}.network-panel :is(button,a):focus-visible{outline-color:#96d9ff;outline-offset:3px} -@media(max-width:1000px){.network-heading{display:block}.network-heading>p{margin-top:16px}.network-bottom{grid-template-columns:1fr}.network-roster{justify-content:flex-start;gap:12px}.network-transmission{border-left:0;border-top:1px solid #293650;padding:18px 0 0}.network-stage{height:410px}} -@media(max-width:600px){.communication-network{width:calc(100% - 40px);margin:45px auto 70px}.network-heading h2{font-size:27px}.network-heading>p{font-size:13px}.network-panel{border-radius:18px}.network-toolbar{padding:16px;align-items:flex-start;flex-direction:column;gap:15px}.network-brand>span{font-size:10px}.network-controls{width:100%;justify-content:space-between}.network-controls button{flex:1;font-size:11px;padding:9px 8px}.network-stage{height:340px}.network-bottom{padding:18px 14px;gap:16px}.network-roster{justify-content:space-between;gap:6px}.network-roster button{padding:10px 5px;gap:5px;flex-direction:column;text-align:center;flex:1}.network-roster strong{font-size:9px}.network-roster small{font-size:8px}.network-legend{left:15px;bottom:17px;font-size:9px}.network-gesture{right:15px;bottom:17px;font-size:9px}.network-note{padding:0 15px 17px;font-size:9px}} -@media(prefers-reduced-motion:reduce){.network-roster button{transition:none}} -@media(max-width:600px){.network-center{display:none}} - -.hero-actions button{border:1px solid var(--line);background:white;color:var(--blue)}.install-path,.install-status{font-size:12px;line-height:1.8;color:var(--muted)}.install-status{display:block;color:var(--blue)} - -.language-picker select{font:inherit;font-size:13px;border:1px solid var(--line);border-radius:18px;background:#fff;color:var(--ink);padding:8px 12px;cursor:pointer}.site-header{gap:20px}.site-header nav{gap:24px}.hero-description br{display:none}html[lang="en-US"] .hero h1{letter-spacing:-2px}html[lang="en-US"] .scenario-tabs button{font-size:11px}.demo-sender{flex-wrap:wrap}.demo-chat-header h2{overflow-wrap:anywhere}@media(max-width:780px){.site-header{gap:10px;padding-left:20px;padding-right:20px}.site-header .nav-source{padding:9px 10px;font-size:10px}.language-picker select{font-size:12px;padding:7px 9px}} - -.hero-actions{flex-wrap:wrap}.hero-actions .button{white-space:nowrap} - -.use-cases{max-width:1232px;margin:0 auto 90px;padding:42px;background:#f4f8f5;border:1px solid #d4e2d8;border-radius:22px}.use-cases .section-heading>p:last-child{max-width:650px}.use-case-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;margin-top:32px}.use-case-grid article{padding:26px;background:#fff;border:1px solid var(--line);border-radius:16px}.use-case-grid h3{font-size:23px;line-height:1.4;margin:12px 0}.use-case-grid article>p:last-child{font-size:14px;line-height:1.9;color:#65717f}.use-case-flow{font-size:11px;font-weight:600;color:var(--blue);line-height:1.6}@media(max-width:1320px){.use-cases{margin-left:44px;margin-right:44px}}@media(max-width:780px){.use-cases{margin:0 24px 50px;padding:24px}.use-case-grid{grid-template-columns:1fr;gap:16px}.use-case-grid article{padding:22px}.use-cases .section-heading h2{font-size:30px}} - -/* Paired conversations: shared visual language with the self-hosted client. */ -:root{--blue:#173f35;--ink:#203c34;--muted:#64736c;--line:#dfe5dc;--paper:#f2f5ec}body{background:#fcfdf9;color:var(--ink)}.site-header{max-width:1320px;border-bottom:1px solid var(--line);height:90px}.brand{letter-spacing:-.65px}.site-header nav a{color:#52664f}.nav-source{border-color:#d4decb;background:#f0f4e9}.hero{padding-top:75px;padding-bottom:70px;gap:56px;align-items:center}.hero h1{font-weight:500;letter-spacing:-3.5px;line-height:1.04;font-size:clamp(48px,4.7vw,68px)}.hero h1 span{color:#173f35}.hero .eyebrow{letter-spacing:1.8px;font-size:10px;color:#65785c}.hero-description{font-size:16px;line-height:1.85;color:#65725e;max-width:490px}.hero-actions{gap:10px}.button{border-radius:10px;font-size:12px;min-height:46px}.button.primary{background:#173f35;color:#fff;box-shadow:0 3px 8px #173f3512}.button.quiet{color:#284d3c;background:#edf2e5}.hero-promises{border-color:#dbe2d4;gap:22px}.hero-promises strong{color:#234635;font-weight:600;font-size:13px}.hero-promises span{font-size:10px;color:#677862}.hero-details,.install-path{color:#61735b;font-size:11px;line-height:1.8}.agent-identities{gap:10px}.agent-identities>span{border-radius:9px;background:#edf2e5;border:1px solid #dde6d3;color:#274836;font-size:11px}.hero-visual{border:1px solid #d3dfc9;border-radius:22px;background:#f0f4e9;padding:22px 18px 17px;box-shadow:0 24px 65px #173f3510;min-width:0}.demo-caption{font-size:10px;color:#546c50;gap:12px;line-height:1.5}.demo-caption>span:first-child{max-width:240px}.demo-tag{background:#e0e8d4;border:1px solid #c6d5b7;border-radius:6px;padding:5px 7px;font-size:9px;color:#3b5632}.scenario-tabs{gap:4px}.scenario-tabs button{font-size:10px;border-radius:8px;padding:8px 10px}.scenario-tabs button.active{background:#173f35}.chat-window{box-shadow:0 4px 20px #173f350a;border:1px solid #d8e1cf;border-radius:14px;overflow:hidden}.demo-sidebar{background:#fcfdf9}.demo-contact.active{background:#e4edda;color:#203e30}.demo-conversation{background:#f2f5ec}.demo-chat-header{background:#fcfdf9;border-bottom:1px solid #e0e5d9}.demo-chat-header h2{font-size:13px}.demo-bubble{border:1px solid #e0e7d8;box-shadow:none}.demo-bubble.mine{background:#e1edd3}.demo-date{background:#dee6d5;color:#536b47}.demo-footnote{color:#66785c}.scenario-goal{color:#5f7155}.network-panel{background:#153b31;border-color:#315546;box-shadow:0 24px 65px #173f3512}.network-toolbar{background:#1e4538;border-color:#45644e}.network-stage{background:radial-gradient(ellipse at center,#3c5f3622,transparent 70%)}.network-bottom{background:#1b3e32;border-color:#45644e}.network-controls button{background:#284d3c;border-color:#527051;color:#ecf3df}.network-roster button{background:#274a3a;border-color:#476349}.network-note{color:#becfb5}.network-heading h2,.section-heading h2,.ownership h2{font-weight:500;letter-spacing:-1.4px}.network-heading .eyebrow{color:#657a59}.network-heading>p,.section-heading>p:last-child{color:#65765d}.delivery-explainer{max-width:1232px;margin:0 auto 90px;padding:40px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);display:grid;grid-template-columns:.8fr 1.2fr;gap:55px}.delivery-explainer h2{font-size:31px;letter-spacing:-1px;font-weight:500;margin:15px 0}.delivery-explainer p{font-size:13px;color:#65765d;line-height:1.8;max-width:330px}.delivery-explainer ol{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);gap:24px;padding:0;margin:0}.delivery-explainer li>span{display:block;font-size:11px;color:#7b8b6c;padding-bottom:17px;border-top:2px solid #c5d4b7;padding-top:12px}.delivery-explainer strong{display:block;font-size:13px;margin-bottom:9px}.delivery-explainer li p{font-size:11px}.instruction-card,.deployment-actions{background:#f1f5e9;border-color:#d4dec8;border-radius:18px}.compatible-agents>span{background:#f6f8f1;border-color:#dce4d3;border-radius:12px}.comparison-highlight{background:#edf3e3;border-color:#d1dfc2}.comparison-options article{background:#fcfdf9}.comparison-options h3{color:#294e37}.human-optional{background:#173f35;color:#f0f4e4;border-radius:22px}.human-optional p{color:#c1d2b5}.human-optional .eyebrow{color:#dcedc6}.ownership{background:#edf3e3}.ownership-facts p,.ownership-copy>p,.question-list details p{color:#5e7356}.closing h2{font-weight:500;letter-spacing:-2px}.site-footer{border-color:#d9e2cf}.site-footer .brand:before{content:'';display:inline-block;background:url('/assets/icon.svg') center/contain no-repeat;width:28px;height:28px;vertical-align:middle;margin-right:10px} -@media(max-width:1320px){.delivery-explainer{margin-left:44px;margin-right:44px}.hero{gap:32px}.hero h1{font-size:55px}.hero-visual{padding:18px 13px}} -@media(max-width:1000px){.hero h1{font-size:47px;letter-spacing:-2.5px}.hero-promises{gap:14px}.hero-actions{flex-wrap:wrap}.delivery-explainer{grid-template-columns:1fr;gap:25px}.hero-description{font-size:14px}} -@media(max-width:780px){.site-header{height:76px}.hero{padding-top:38px;gap:38px}.hero h1{font-size:49px;line-height:1.07;letter-spacing:-2.6px}.hero-description{font-size:14px;max-width:410px;margin-left:auto;margin-right:auto}.hero-visual{padding:18px 12px}.hero-promises{gap:16px;justify-content:center}.hero-promises strong{font-size:11px}.hero-promises span{font-size:9px}.hero-details{font-size:10px}.demo-caption{align-items:flex-start}.demo-caption>span:first-child{font-size:9px;max-width:160px}.demo-tag{font-size:8px;max-width:98px}.mock-demo .demo-bubble{font-size:12px}.delivery-explainer{margin:0 24px 50px;padding:30px 0}.delivery-explainer ol{grid-template-columns:1fr;gap:20px}.delivery-explainer li{display:grid;grid-template-columns:30px 1fr;gap:2px 12px}.delivery-explainer li>span{grid-row:span 2;padding:6px 0;border-top:2px solid #c5d4b7}.delivery-explainer strong{margin-bottom:2px}.delivery-explainer li p{max-width:none}.human-optional{border-radius:18px}.network-heading h2{font-size:28px}.network-note{line-height:1.8}.scenario-tabs button{min-height:36px}.site-footer .brand{display:inline-flex;align-items:center}} -@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}} - -/* The published film supplements the existing interactive demos. */ -.promo-film{padding:72px 0;scroll-margin-top:88px} -.promo-film-heading{display:flex;justify-content:space-between;align-items:end;gap:24px;margin-bottom:24px} -.promo-film-heading h2{font-size:clamp(28px,4vw,48px);line-height:1.1;margin:8px 0 0;letter-spacing:-.04em} -.promo-film-heading>p{max-width:310px;line-height:1.6;color:var(--muted,#69776f)} -.promo-film video{display:block;width:100%;aspect-ratio:16/9;height:auto;background:#f7f8f2;border:1px solid #dce4d5;border-radius:18px} -.promo-film-note{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;color:var(--muted,#69776f);font-size:13px;margin:14px 0 0} -.promo-film-note a{color:inherit;text-underline-offset:3px} -@media(max-width:700px){.promo-film{padding:40px 0}.promo-film-heading{display:block}.promo-film-heading>p{max-width:none}.promo-film video{border-radius:10px}} +:root{--ink:#151917;--muted:#737a75;--line:#e9ede9}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;background:#fff;color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit}button,select{font:inherit}button{cursor:pointer}button:focus-visible,a:focus-visible,select:focus-visible,summary:focus-visible{outline:3px solid #8ac6ab;outline-offset:5px}.topbar{height:72px;position:sticky;top:0;background:#ffffffed;backdrop-filter:blur(16px);border-bottom:1px solid #f0f2ef;display:flex;align-items:center;gap:24px;padding:0 4.5%;z-index:100}.wordmark{display:flex;align-items:center;gap:9px;text-decoration:none;font-size:17px;font-weight:650;letter-spacing:-.5px}.wordmark img{border-radius:8px}.topbar nav{display:flex;gap:27px;margin-left:auto;align-items:center}.topbar nav a{text-decoration:none;font-size:13px;color:#565d58}.topbar select{border:0;background:none;color:#515951;font-size:12px;width:52px}.pill{display:inline-flex;gap:14px;align-items:center;justify-content:center;padding:16px 24px;border-radius:40px;text-decoration:none;font-size:14px;font-weight:600;transition:transform .2s}.pill:hover{transform:translateY(-2px)}.black{background:#171b18;color:white}.light{background:#f3f5f2;color:#273129}.nav-cta{padding:11px 18px;font-size:12px}.orbit-hero{text-align:center;padding:0 24px 62px}.hero-art{height:440px;max-width:1060px;margin:auto;position:relative}canvas{display:block;width:100%;height:100%}.orbit-hero h1{font-size:clamp(54px,8.1vw,118px);letter-spacing:-.045em;line-height:1.05;font-weight:650;margin:-3px 0 19px}.hero-tagline{font-size:27px;letter-spacing:-.7px;margin:0 0 17px;color:#454e47}.hero-sub{font-size:16px;color:var(--muted);max-width:640px;margin:0 auto;line-height:1.6}.actions{display:flex;align-items:center;justify-content:center;gap:13px;margin:29px 0 0;flex-wrap:wrap}.quiet-note{font-size:12px!important;color:#8b918c!important;line-height:1.7!important;margin:20px auto 0}.agent-ribbon{display:flex;justify-content:center;gap:25px;flex-wrap:wrap;max-width:1120px;margin:14px auto 115px;padding:0 24px}.agent-ribbon span{display:flex;gap:8px;align-items:center;font-size:12px;color:#737a75;white-space:nowrap}.agent-ribbon img{object-fit:contain;width:25px;height:25px;filter:grayscale(1);opacity:.8}.section{max-width:1120px;margin:auto;padding:0 28px}.section-intro{text-align:center;max-width:730px;margin:0 auto 38px}.kicker{font-size:10px;letter-spacing:2px;color:#819087;font-weight:650;margin:0 0 20px}h2{font-size:clamp(34px,4vw,55px);line-height:1.13;letter-spacing:-2.5px;font-weight:600;margin:0 0 20px}.section-intro>p:last-child{font-size:16px;line-height:1.7;color:var(--muted);margin:0}.showcase-tabs{display:flex;justify-content:center;gap:7px;margin-bottom:26px;flex-wrap:wrap}.showcase-tabs button{background:transparent;border:0;padding:10px 18px;color:#8a928c;font-size:13px;border-radius:30px}.showcase-tabs button[aria-pressed=true]{background:#eef2ed;color:#263d2d}.product-window{border:1px solid #e3e8e2;background:#fff;border-radius:19px;display:grid;grid-template-columns:215px 1fr;overflow:hidden;min-height:570px;box-shadow:0 35px 90px #233d2910}.peers{padding:22px 13px;background:#f5f7f3;border-right:1px solid #e8ece5;position:relative}.workspace{display:flex;align-items:center;gap:9px;font-size:13px;padding:0 8px 18px}.workspace img{border-radius:8px}.peers>p{font-size:9px;letter-spacing:1.6px;color:#98a091;margin:7px 10px 12px}.peer{display:flex;align-items:center;gap:11px;border:0;background:transparent;width:100%;padding:10px;border-radius:9px;text-align:left;font-size:12px;color:#656e66}.peer img{object-fit:contain;width:26px;height:26px}.peer.active{background:white;color:#253a2a;box-shadow:0 1px 5px #173f350b}.peer i{width:5px;height:5px;background:#84a889;border-radius:50%;margin-left:auto}.local-status{display:flex;gap:6px;font-size:10px;color:#8c968d;margin:18px 8px 0}.local-status i{width:5px;height:5px;background:#80ad88;border-radius:50%;align-self:center}.thread{display:flex;flex-direction:column;min-width:0}.thread-head{height:83px;border-bottom:1px solid #edf0eb;display:flex;align-items:center;gap:12px;padding:18px 30px}.thread-head>img{object-fit:contain}.thread-head strong{font-size:14px}.thread-head small{display:block;color:#a0a79f;font-size:10px;margin-top:5px}.thread-head button{margin-left:auto;border:1px solid #e7ebe6;border-radius:50%;background:white;width:32px;height:32px;font-size:20px;color:#818e80}.short-messages{flex:1;padding:32px 34px;display:flex;flex-direction:column;gap:23px;min-height:400px}.message-row{display:flex;gap:12px;align-items:flex-start;animation:message-in .45s ease both}.message-row>img{width:29px;height:29px;object-fit:contain;margin-top:3px}.message-copy{max-width:85%;min-width:0}.message-copy strong{font-size:11px;font-weight:600;color:#525e52}.message-copy time{font-size:9px;color:#b1b7ae;margin-left:9px}.message-bubble{font-size:13px;line-height:1.75;color:#3c493d;background:#f5f7f2;border-radius:3px 13px 13px 13px;padding:13px 17px;margin-top:7px}.message-row.reply .message-bubble{background:#edf5eb}.receipt{font-size:9px;color:#9aa99a;padding-top:5px}.work-chip{padding:11px 13px;border:1px solid #dce7d7;border-radius:8px;background:#fff;margin-top:10px;font-size:11px;display:flex;gap:10px;align-items:center;color:#476346}.work-chip b{font-weight:500}.work-chip span{font-size:9px;color:#95a08e;margin-left:auto}.thread-input{margin:0 28px 23px;border:1px solid #e8ece4;padding:13px 15px;border-radius:12px;display:flex;justify-content:space-between;color:#b2b9ae;font-size:12px}.under-demo{text-align:center;font-size:12px;color:#909a8e;margin:25px 0 0}.product-showcase{margin-bottom:145px}.network-story{margin-bottom:140px}.network-visual{position:relative;height:530px;background:radial-gradient(ellipse at center,#f3f7ef,#fff 70%);border-radius:24px}.network-caption{display:flex;align-items:center;justify-content:center;gap:9px;position:absolute;bottom:12px;left:0;right:0;font-size:11px;color:#8c9c89}.live-dot{width:6px;height:6px;border-radius:50%;background:#88aa83;box-shadow:0 0 0 4px #88aa8314}.network-story>.quiet-note{text-align:center;max-width:700px}.self-host{display:grid;grid-template-columns:1.1fr 1fr;gap:80px;align-items:center;margin-bottom:75px}.host-copy>p:not(.kicker){font-size:15px;color:var(--muted);line-height:1.8}.host-copy .actions{justify-content:flex-start;gap:20px}.text-action{border:0;background:none;padding:0;font-size:12px;color:#657360}.cloud-card{background:#f5f7f2;border:1px solid #e8ece4;border-radius:22px;padding:28px 30px;transform:rotate(2deg);box-shadow:0 25px 65px #173f350b}.cloud-card-top{display:flex;align-items:center;gap:8px;font-size:14px}.cloud-card-top img{object-fit:contain;width:38px;height:35px}.owner-badge{margin-left:auto;font-size:8px;letter-spacing:1px;background:#e8eee3;padding:7px;border-radius:5px;color:#7a8f70}.zero{font-size:106px;line-height:1.5;font-weight:550;letter-spacing:-7px;padding:12px 0}.zero span{font-size:17px;letter-spacing:-.5px;color:#a1ab98}.cloud-services{display:flex;align-items:center;gap:30px;border-top:1px solid #dfe5d9;padding-top:21px}.cloud-services>span{font-size:14px;font-weight:650}.cloud-services small{display:block;font-size:10px;color:#9aa68d;margin-top:7px;font-weight:400}.cloud-services i{font-style:normal;color:#b8c5ae}.cloud-card>p{font-size:10px;color:#97a48f;margin:23px 0 0}.getting-started{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin-bottom:160px}.getting-started>div{border-top:1px solid #e7ece2;padding-top:23px}.getting-started span{font-size:10px;color:#a3b099}.getting-started h3{font-size:16px;font-weight:550;letter-spacing:-.4px;margin:16px 0 10px}.getting-started p{font-size:13px;line-height:1.75;color:#8c9786;margin:0}.film-section{margin-bottom:130px}.film-section video{display:block;width:100%;aspect-ratio:16/9;background:#f5f7f3;border:1px solid #e5ebe1;border-radius:20px;box-shadow:0 25px 65px #173f350a}.questions{display:block;max-width:820px;margin:0 auto 100px;padding:0 28px;background:white;border:0}.questions h2{font-size:35px;margin-bottom:35px}.question-list details{border-top:1px solid var(--line);padding:0;background:white}.question-list details summary{padding:21px 0;font-size:14px;line-height:1.5;letter-spacing:-.2px}.question-list details p{padding:0 0 20px;font-size:13px;line-height:1.8;color:#818b7d}.advanced{max-width:1064px;margin:0 auto 100px;border-top:1px solid #e5ebe1;border-bottom:1px solid #e5ebe1}.advanced>summary{padding:23px 24px;color:#7b8974;font-size:13px;cursor:pointer}.advanced-inner{padding:30px 20px;background:#f8faf6;border-radius:0 0 18px 18px}.advanced-inner>section{margin:60px 0;max-width:100%;padding:20px}.advanced-inner .mock-demo{width:100%;max-width:100%;min-width:0}.last-call{text-align:center;padding-bottom:110px}.last-call>img{border-radius:18px;margin-bottom:25px}.last-call h2{font-size:49px;margin-bottom:30px}.new-footer{border-top:1px solid #eef1eb;max-width:1200px;margin:auto;padding:30px 40px 40px;display:flex;align-items:center;gap:30px;flex-wrap:wrap}.new-footer .wordmark{font-size:13px}.new-footer>p{font-size:11px;color:#9ba394;margin:0}.new-footer>div{display:flex;gap:20px;margin-left:auto;font-size:11px;color:#8b9783}.new-footer a{text-decoration:none}.new-footer small{width:100%;font-size:9px;letter-spacing:.7px;color:#aeb6a7}.message-row[hidden]{display:none}@keyframes message-in{from{opacity:0;transform:translateY(9px)}to{opacity:1;transform:none}}@media(min-width:1500px){.hero-art{height:485px}}@media(max-width:760px){.topbar{height:62px;padding:0 18px;gap:15px}.topbar .wordmark{font-size:14px;gap:6px}.topbar .wordmark img{width:24px;height:24px}.topbar nav{display:none}.topbar select{margin-left:auto}.nav-cta{padding:9px 12px;font-size:10px}.orbit-hero{padding:0 18px 40px}.hero-art{height:310px;margin:0 -14px}.orbit-hero h1{font-size:clamp(41px,10vw,76px);letter-spacing:-3px}.hero-tagline{font-size:21px;margin-top:16px}.hero-sub{font-size:13px;max-width:330px}.pill{font-size:12px;padding:14px 19px}.quiet-note{font-size:10px!important}.agent-ribbon{gap:17px 20px;margin:15px auto 85px}.agent-ribbon span{font-size:10px;gap:6px}.agent-ribbon img{width:19px;height:19px}.section{padding:0 19px}h2{font-size:34px;letter-spacing:-1.5px}.section-intro>p:last-child{font-size:13px}.kicker{font-size:9px;margin-bottom:17px}.showcase-tabs{gap:0}.showcase-tabs button{padding:9px 12px;font-size:11px}.product-window{grid-template-columns:65px 1fr;border-radius:14px;min-height:570px}.peers{padding:18px 8px}.workspace{padding:0 10px 15px}.workspace strong,.peers>p,.peer span,.peer i,.local-status{display:none}.peer{padding:10px;justify-content:center}.workspace img,.peer img{width:26px;height:26px}.thread-head{padding:17px 16px;height:75px;gap:8px}.thread-head>img{width:29px;height:29px}.thread-head strong{font-size:11px}.thread-head small{font-size:9px}.short-messages{padding:25px 15px;gap:22px}.message-row{gap:8px}.message-row>img{width:22px;height:22px}.message-copy{max-width:calc(100% - 30px)}.message-copy strong{font-size:10px}.message-bubble{font-size:11px;padding:11px 12px}.work-chip{font-size:9px;padding:9px;gap:6px}.work-chip span{display:none}.thread-input{margin:0 13px 16px;font-size:9px;padding:12px}.product-showcase{margin-bottom:95px}.network-story{margin-bottom:95px}.network-visual{height:340px;margin:0 -18px}.network-caption{font-size:10px;bottom:0}.self-host{grid-template-columns:1fr;gap:38px;margin-bottom:55px}.host-copy>p:not(.kicker){font-size:13px}.cloud-card{max-width:410px;width:94%;margin:auto;padding:24px}.getting-started{grid-template-columns:1fr;gap:25px;margin-bottom:100px}.getting-started>div{padding-top:17px}.getting-started h3{margin:10px 0}.getting-started p{font-size:12px}.film-section{margin-bottom:90px}.film-section video{border-radius:12px}.questions{padding:0 23px;margin-bottom:65px}.questions h2{font-size:29px}.question-list details summary{font-size:13px}.advanced{margin:0 19px 65px}.advanced-inner{padding:10px 0}.advanced-inner>section{padding:16px}.advanced-inner .chat-window{grid-template-columns:1fr}.advanced-inner .demo-sidebar{display:none}.last-call{padding-bottom:80px}.last-call h2{font-size:36px}.new-footer{padding:25px 20px;gap:18px}.new-footer>p{width:100%}.new-footer>div{margin-left:0;gap:17px}.network-heading{display:block}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}